实践内容
学习总结
-
PDR,$$P^2$$DR安全模型。
-
防火墙(Firewall):
网络访问控制机制,布置在网际间通信的唯一通道上。
不足:无法防护内部威胁,无法阻止非网络传播形式的病毒,安全策略不够精细。
包过滤技术:数据包包头信息的检查和安全策略匹配。
代理(Proxy):建立非直接网络连接。
netfilter/iptables:前者为功能模块,后者为管理工具。包含最基本的三个表,filter(包过滤处理),nat(地址转换),mangle(数据包修改)。
其中的五个规则链对应者netfilter在TCP/IP协议中的五个Hook检查点(上下两部分分别对应外内数据通道)。
PREROUTING 对应检查点 1,检查进入主机的数据包,用于源地址NAT转换;INPUT对应检查点2,检查发往本地网络协议栈的数据包,用于过滤本地网络服务的连接;FORWARD对应检查点3,用于经由本地路由转发的数据包检查,过滤网络连接;ROSTROUTING对应检查点4,用于目的地址NAT转换;OUTPUT对应检查点5,对本地发出的数据包进行检查,可用于本地对外的访问控制。
Iptables:基本命令为
iptables [-t table] command [match][target]
-t 指定表, command 指定规则链,match 指定匹配条件,target指定目标操作
eg: iptables -t filter -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
即指定filter表,对路由转发的数据进行网段流量的筛选,-A 追加命令规则至规则链尾,-s,-t 源目的地址 -j ACCEPT 指定ACCEPT操作(常用默认为ACCEPT或DROP)
动态包过滤命令(状态跟踪命令)
eg: iptables -t filter -A FORWARD -d [WEB_SERVER] -m state --state NEW -j ACCEPT
即允许连接目标为Web_server的ip, 当前状态为NEW(新建连接)的网络连接可通过防火墙转发
ip伪装(利用nat规则链)
通过一个在防火墙绑定一个外网ip共享进行外部访问
eg: iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j MASQUERADE
-MASQUERADE(ip伪装)
eg: iptables -t -nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023
将通过路由发出的tcp网络连接的源ip改为1.2.3.4,端口为前1023个端口(除0端口外的保留端口)
转化目的ip
eg: iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 5.6.7.8
将目的地址转换为5.6.7.8
-
入侵检测:
入侵者分类:
检测指标:检测率(True Positive)和误报率(False Positive),前者为捕获到的攻击数和全部攻击数目之比,后者为对正常行为的误报数和全部报警数目之比。综合分析可用ROC曲线(改变算法阈值,得到检-误曲线)。
snort(sniffer and more,解码器(sniffer)+ 预处理器 + 检测引擎 + 出输出模块):
解码器:将网卡设置为混杂模式,利用libpacp抓包函数进行数据包监听和捕获,在调用循环pacp_loop()中调用ProcessPacket(),利用decode.c解码。
预处理器:会话重组,编码规范,一些检测的预处理。
检测引擎:入侵检测功能的主体模块,主要包含规则库解析,多模式匹配,规则插件检测。其中Snort规则采用文本格式,分为规则头和规则选项。
规则头:
eg:alert tcp $EXTERNAL_NET any -> $HOME_NET 21 alert 输出格式,报警信息方式,此外还有 log,pass,dynamic等 TCP 协议字段 $EXTERNAL_NET 源ip地址匹配范围位置,这里为外部网段网络 any 源端口位置,这里设为任何源端口 $HOME_NET 目标地址匹配范围位置 21 攻击目的端口位置,这里为21
规则选项:
eg:(msg:"FTP EXPLOIT wu-ftpd 2.6.0 site exec format string overflow Linux"; flow:to_server, established; content: "|131c0000000000db|"; reference:bugtraq, 1387; reference:cve, CAN-2000-0573; reference:arachnids, 287; class type:attempted; sid:344; rev:4) msg: 报警信息 flow: 匹配当前连接状态及流方向 content:标识用于字符串匹配的攻击特征 reference: 对第三方攻击的解释 classtype: 分类目录,识别攻击及优先级 sid: 规则的唯一标识号 rev: 规则版本号
五个解析后的规则表:Activation, Dynamic, Alert, Pass, Log(只记录不报警)。
输出模块:处理信息的记录。
实践内容
- 过滤ICMP数据包,使主机不接受Ping包。
- 只允许特定IP地址访问主机的某一网络服务。
- 从离线的pcap文件读取网络日志数据源。
- 在snort.conf中配置明文输出报警日志文件。
- 指定报警日志log目录(/var/log/snort)。
- 分析脚本:/etc/init.d/rc.firewall, /etc/init.c/hflow-snort, /etc/snort/snort.conf, /etc/init.d/hflow-snort_inline, /etc/snort_online/snort_inline.conf。包括网关的捕获和数据控制机制,IPTables规则列表,Snort和Snort_inline执行参数,网关开机后,防火墙、NIDS、NIPS是如何启动的,Snort规则是如何自动升级的。
实践过程
实验机器 | ip |
---|---|
A(kali) | 192.168.200.7 |
B(SEED) | 192.168.200.2 |
C(metas..linux) | 192.168.200.125 |
命令详情查询 | iptables -h, snort -h及上述内容 |
-
过滤ICMP数据包,使主机不接受Ping包
选取A,B,确定A,B可相ping通后,在A中输入命令
iptables -t filter -A INPUT -p icmp -j DROP
阻塞ping包,发现B已经不能ping通A:
查看 chain rules list确认阻塞ping包规则:
-
只允许特定IP地址访问主机的某一网络服务
此实验为禁止某一ip访问操作,"只允许"实验操作步骤为禁止所有ip访问某端口后添加可访问的ip,参考iptables 设置特定IP访问指定端口 。
操作类似阻塞ping包操作。首先选取A,B,C,其中A访问被控制,B提供服务,确认实验之前A,C皆可访问B的网络服务,本实验访问ftp服务。然后在B中输入命令
iptables -t -filter -A INPUT -s 192.168.200.7 -p tcp --dport 21 -j DROP
:发现A已经不能访问B的ftp服务,但C依然可以:
查看 chain rules list确认阻塞端口21访问规则:
-
从离线的pcap文件读取网络日志数据源
命令snort -r /file/path:
得到文件listen.pcap输出的一大长串报告:
分析上次写过了,这次就不写了。
-
在snort.conf中配置明文输出报警日志文件
貌似默认明文(-K<model> ascii)输出,但是还是进入配置文件查看,在output模块输出配置中并未发现关于编码格式的配置(可能在预处理模块中)。
-
指定报警日志log目录(/var/log/snort)
虽然在配置文件中未找到输出编码格式配置,但发现了log_to_dir 配置注释:
命令
snort -l /var/log/snort
执行后初始化output模块插件,并作一次网口抓包分析(也不知道为啥进行这次操作,可能是为了验证上述命令生效):查看目录,有刚扫描的文件:
-
分析脚本:/etc/init.d/rc.firewall, /etc/init.d/hflow-snort, /etc/snort/snort.conf, /etc/init.d/hflow-snort_inline, /etc/snort_online/snort_inline.conf。包括网关的捕获和数据控制机制,IPTables规则列表,Snort和Snort_inline执行参数,网关开机后,防火墙、NIDS、NIPS是如何启动的,Snort规则是如何自动升级的:
对个人来说,读这种源码基本是让我读注释:
-
查看/etc/init.d/rc.firewall分析数据的捕获和控制:
基本上就是利用一些基本模块(),flush模块(用于清除all tables),create_chains模块(创建规则链),default_policy和localhost_policy模块(用于控制本地主机访问和缺省访问数据的策略),management_policy模块(管理的访问权限设置)进行数据包捕获和控制:
捕获到数据包后,检查其变量(ip啥的),如果在blacklist(creat_chains)里,就丢弃且不log:
如果在whitelist里,接受且不log:
如果在fencelist里,接受且log:
然后就是根据网卡模式进行一些防火墙的设置,并且进行一些更细致的命令设置和协议handle以用来控制匹配命令。
-
IPTables规则列表
命令
iptables --list|less
观察规则列表: -
Snort和Snort_inline执行参数
snort:
查看/etc/snort/snort.conf(没有文件/etc/init.d/hflow-snort,只有.../hflow,难顶 ),variable设置包括 HOME_NET, server lists, service ports for attacks,以及一些其他的variables:
snort_inline:
查看/etc/init.d/hw-snort_inline(同样没找到文件.../hflow-snort_inline,配置文件中也只有一些默认网络变量设置,不需人为设置)查看执行参数:
-
网关开机后,防火墙、NIDS、NIPS是如何启动的,Snort规则是如何自动升级的:
命令 chkconfig --list|grep [服务]查询服务状态(这里操作没看源码,也不知道配置文件写没写这些,参考的同学博客),发现snort_inline的开启与防火墙(系统)同步,snortd需手动设置:
Snort规则的手动升级可通过编辑local.rules文件,自动升级则需通过Oinkmaster(社区默认工具)或者pullpork等工具。
学习问题及解决
- 找不到书上指定的文件
实践总结
安全防护通过防火墙,入侵检测等方式进行,需系统掌握工具的命令及一些安全防护的思想。