20199131 2019-2020-2 《网络攻防实践》第6周作业
1.实践内容
1.1 安全模型
- 静态安全模型:对网络进行风险分析,制定相应的安全策略,然后采取安全技术作为防护措施,主要针对固定、静态的威胁和环境弱点。
- PDR安全模型:基于闭环控制理论的时间动态可适应网络安全模型,以经典的网络安全不等式P>D+R(保护、检测、响应)为本质基础,并提出安全性可量化和可计算的观点。
- P2DR安全模型:基于PDR安全模型提出,增加了Policy分析制定安全策略,并以此为核心,所有的防护、检测、响应都是依据安全策略实施的。
1.2 网络安全防范技术与系统
- 防火墙技术及产品
- 定义:防火墙指的是置于不同的网络安全域之间,对网络流量或访问行为实施访问控制的安全组件或设备,达到保护特定网络安全域免受非法访问和破坏的安全目标。
- 功能:
检查控制进出网络的流量。
防止脆弱或不安全的协议和服务。
防止内部网络信息的外泄。
对网络存取和访问进行监控审计。
强化网络安全策略并集成其他安全防御机制。 - 不足:
先天:无法防范包括来自网络内部的安全威胁、通过非法外联的网络攻击和计算机病毒传播的传播。
技术瓶颈:无法防范包括针对开放服务安全漏洞的渗透攻击、针对网络客户端程序的渗透攻击和隐蔽通道进行通信的特洛伊木马或僵尸网络。 - 技术:
包过滤技术:在路由功能基础上进行扩展,通过对网络层和传输层包头信息的检查,根据用户定义的安全策略规则集,确定是否应该转发该数据包(简单、安全功能有限)。
基于状态检测的包过滤技术:也称动态包过滤。除了使用静态规则进行安全进行安全策略匹配,还进行数据包的网络连接的上下文关系探测,来确定是否允许通信。这种技术相比较传统的包过滤技术安全性更高,数据合法性得到了更有效的保障(对网络性能有一定的影响)。
代理技术:允许客户端通过代理与网络服务进行非直接的连接,也称“网络代理”。主要是客户端与代理服务器连接,代理服务器再与目标服务器连接。代理技术包括应用层代理(工作在应用层)、电路级代理(工作在传输层)和NAT代理(工作在网络层)等。
部署方法:
包过滤路由器:带有包过滤防火墙功能的路由器。
双宿主堡垒主机:应用代理网关作为双宿主堡垒主机。
屏蔽主机:堡垒主机和包过滤的结合。
屏蔽子网:在屏蔽主机的基础上增加第二道包过滤路由器。
1.3 iptable
- iptables命令介绍
iptables:administration tool for IPv4/IPv6 packet filtering and NAT
1)简介:Linux的2.4版内核引入了一种全新的包处理引擎Netfilter,同时还有一个管理它的命令行工具iptables。iptables用于建立、维护和检查Linux内核中IPv4包过滤规则的表。
2)结构层次:iptables - 表table - 链chain(内建或自定义) - 规则(目标target子句等)。
iptables对网络上的数据包有次序地施加规则“链”。链的集合就构成了表,用于处理特定类型的流量。
默认的iptables表为filter(过滤器)。它包含3个默认链:FORWARD、INPUT和OUTPUT,内核处理的每个包都要经过3个链中的某一个。FORWARD链里的规则用于在一个网络接口收到的、而且需要转发到另一个网络接口的所有包。INPUT和OUTPUT链里的规则分别用于目的是本地主机,或者从本地主机发出的流量。
nat表包含的规则链控制着NAT(网络地址转换)。另外,还有mangle、raw和security表,这里不详述。
构成一条链的每条规则都有一个“target(目标)”子句,它决定了如何处理匹配的包。一旦某个包匹配了一条规则,那么它的结局就确定了,不再用其他规则来检查它。虽然iptables内部定义了许多target,但还是可以指定另一条链作为规则的target。在filter表中的规则可以使用的target子句有ACCEPT(包可以继续通过)、DROP(默默地丢弃包)和REJECT(把包丢弃并返回一则ICMP错误消息)等。
-
iptable命令参数详解:
查看状态:iptables -Liptables 参数选项:
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
1.3 snort
-
简介:Snort是一个强大的网络入侵检测系统。它具有实时数据流量分析和记录IP网络数据包的能力,能够进行协议分析,对网络数据包内容进行搜索/匹配,可以检测各种不同的攻击方式,对攻击进行实时报警等。
四大模块:数据包嗅探模块、预处理模块(用相应的插件来检查原始数据包)、检测模块(检测引擎依据预先设置的规则检查数据包)、报警/日志模块(经检测引擎检查后的Snort数据输出)。 -
三种工作模式:嗅探模式(从网络上读取数据包,常用命令snort -dev)、数据包记录模式(把数据包记录到硬盘上,常用命令snort -b)、网络入侵检测模式(载入规则库才能工作,Snort并不记录所有捕获的包,而是将包与规则对比,仅当包与某个规则匹配的时候,才会记录日志或产生报警)。
-
snort常用命令参数
用法:snort -[options] <filters>
-
选项:
-A <alert> 设置报警模式,alert = full/fast/none/unsock -b 用二进制文件保存网络数据包,以应付高吞吐量的网络。 -B <mask> 将IP地址信息抹掉,去隐私化。 -c <cf> 使用配置文件<cf>,这会使得snort进入IDS模式,并从<cf>中读取运行的配置信息。 -d 显示包的应用层数据。 -D 以后台进程运行snort。如无指定,Alerts将写到/var/log/snort/alert。 -e 显示数据链路层的信息。 -E 保存报警日志为windows事件日志。 -f 激活PCAP行缓冲(line buffering)。 -F <bpf> 指定BPF过滤器。 -g <gname> 初始化Snort后以组ID(group ID)运行。 -G <id> 为事件生成设置一个基础事件id值。 -h <hn> 设置本地网络为hn,如192.168.1.0/24。 -i <if> 设置网络接口为<if>。可以用-W选项查询网络接口列表,然后用接口序号index指定接口。如-i 2 -I 报警时附加上接口信息。 -J <port> 当以in-line模式运行时,这个选项将只捕获<port>端口的报文。 -k <checksum mode> 为all,noip,notcp,noudp,noicmp,or none设置校验和模式。 -K <logging mode> 设置保存文件的格式:pcap,ascii, none。pcap是默认格式,同于-b选项的格式。ascii是老的模式格式。none则关闭数据包记录。 -l <ld> 设置数据包文件存放目录<ld>。默认目录是/var/log/snort. -L <fn> 设置二进制输出文件的文件名为<fn>。 -M 当以非后台模式daemon运行时,保存信息到syslog。 -m <mask> 设置snort输出文件的权限位。 -n <count> 出来<count>个报文后终止程序。 -N 关闭保存日志包功能。 -o 改变应用规则的顺序。从Alert-->Pass-->Log顺序改为Pass-->Alert-->Log,避免了设置大量BPF命令行参数来过滤alert规则。 -O 在ASCII数据包捕获模式下混淆IP地址。 -p 关闭混杂模式。 -P<snaplen> 设置snaplen,默认值是当前网卡的MTU。 -q 安静模式,不显示标志和状态报告。 -Q 当在线(in-line)运行时,从iptables/IPQ中读取数据包。 -r <tf> 从pcap格式的文件中读取数据包。 -R <name> 为snort pidfile增加下标。 -s 使snort把报警消息发送到syslog,默认的设备是LOG_AUTHPRIV和LOG_ALERT。可以修改snort.conf文件修改其配置。 -S <n=v> 为变量n设置值为v。 -t <chroot> 初始化后将Snort的根目录改变为<chroot>。 -T 以自检测模式启动Snort。 -u <uname> 初始化后改变Snort的UID。 -U 在时间戳上用UTC时间代替本地时间。 -v 从网络上读出数据包然后显示在你的控制台上。 -V 查看版本号并退出。 -w 如果运行在802.11网中,显示管理帧。 -W *WIN32 ONLY*列出可以网络接口。其中的Index或Device Name都可以用到-i选项中。 - X 显示包括数据链路层的原始数据包。 -y 在时间戳里显示年份。 -Z <path> 设置性能监视器(perfmon)路径。 -? 帮助信息。
2.实践过程
实践一:防火墙配置
实践任务:配置Linux平台上的iptables,完成如下功能并测试
-
过滤ICMP数据包,使主机不接受ping包。
-
只允许特定IP地址访问主机的某一网络服务,而其他IP地址无法访问。
-
实验环境
kali(访问方 IP:192.168.200.8)、Metasploitable2-Linux(需要配置防火墙的主机 IP:192.168.200.10)、SEEDUbuntu9-Aug-2010(访问方 192.168.200.3) -
实验具体步骤
使用命令:iptables -L,列出规则链中所有的规则进行查看,都是默认规则
使用命令:iptables -A INPUT -p icmp -j DROP,配置过滤ICMP数据包的规则,-A:在指定链的末尾添加(append)一条新的规则;-P:指定要匹配的数据包协议类型;-j:指定要跳转的目标(包括DROP、ACEEPT等);
列出规则链中所有的规则进行查看,发现已经添加成功
kali Ping Metasploitable2-Linux 配置规则前后对比如图所示:
使用命令:sudo iptables -P INPUT DROP,关闭流量流向是本机的本地主机的所有端口
使用命令:sudo iptables -A INPUT -p tcp --dport 23 -s 192.168.200.8 -j ACCEPT,配置该规则来允许IP为192.168.200.8的主机可以telnet访问本机
分别使用kali和SEEDUbuntu9-Aug-2010 telnet登录Metasploitable2-Linux,如图,kali可以访问,其他主机(包括SEEDUbuntu9-Aug-2010)都无法访问
实践二:Snort
任务:使用Snort对给定pcap文件(第4章中的解码网络扫描任-一个pcap文件)进行入侵检测,并对检测出的攻击进行说明。在BT4 Linux攻击机或Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
Snort运行命令提示如下:
-
从离线的pcap文件读取网络日志数据源。
-
在snort.conf中配置明文输出报警日志文件。
-
指定报警日志log目录(或缺省log目录=var/log/snort) 。
-
环境:
Ubuntu 18.04.4下
使用命令:snort -r listen.pcap -c /etc/snort/snort.conf -K ascil,其中-c:使用配置文件 ,这会使得snort进入IDS模式,并从 中读取运行的配置信息;-r: 从pcap格式的文件中读取数据包;-K: 设置保存文件的格式:pcap,ascii, none。pcap是默认格式,同于-b选项的格式。ascii是老的模式格式。none则关闭数据包记录。
从离线的pcap文件读取网络日志数据源的一些统计情况
生成alert文件(日志文件),查看alert文件如图所示:
生成数据包文件的默认存放目录是/var/log/snort
实践三:分析蜜网网关的防火墙和IDS/IPS配置规则。
-
上述脚本是如何实现蜜网的数据捕获和数据控制的
打开蜜罐(roo,honey),【su -】,然后执行【vim /etc/init.d/rc.firewall】查看防火墙文件。在防火墙文件中可以看到有三个链,分别是黑名单、白名单、防护名单。-N的意思表示根据用户指定的名字创建新链。
防火墙对源地址或者目的地址属于黑名单的主机,丢弃所有包。
对于属于白名单的主机,接受且不记录。
对于属于防护名单内的主机,禁止访问某些不希望被访问到的主机。
另外可以发现蜜罐系统识别的协议:TCP、UDP、ICMP、其他。在对数据控制时,要对各协议设置单位时间内发送包的上限,对于超出发送上限包的方式处理有三种:Drop、Reject和Replace。
对于数据捕获,iptables或snort可以通过记录日志的形式来捕获网络连接信息。 -
获取IPTables的实际规则列表、Snort和Snort_inline的实际执行参数。
使用命令【iptables -t filter -L】来查看规则列表,-t是指定规则表,-L表示列表。(其实,我们可以省略-t filter,当没有使用-t选项指定表时,默认为操作filter表,即iptables -L表示列出filter表中的所有规则)
-
Snort和Snort_inline的实际执行参数:
执行【vim /etc/init.d/snortd】,snortd是snort启动的脚本文件,可以看到一些实际执行参数,默认使用snort.conf规则,默认监听网卡为eth0等。
-
执行【vim /etc/init.d/hw-snort_inline】打开snort_inline的脚本文件,可以看到一些参数选项。-D表示Daemon模式,-c表示读取config文件,-Q表示使用QUEUE模式,-l表示输出log文件的目录,-t表示改变程序执行时所参考的根目录位置。
-
蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的?
使用命令【chkconfig --list | grep 服务】对服务进行查询,如果从0~6全是off,那就不自动启动。chkconfig命令主要用于检查,设置系统的各种服务。可以发现NIDS是需要手动启动的,防火墙、NIPS是跟随系统启动的。
-
Snort规则是如何自动升级的?
使用命令【vim /etc/honeywall.conf】打开配置文件,找到update variables,可以看到其值为no,即不自动更新。还可以看到Oinkmaster,这是个自动更新的软件,利用Oinkmaster进行升级。
3.学习中遇到的问题及解决
- 问题1:iptables命令出错
- 问题1解决方案:iptables命令参数严格区分大小写
4.实践总结
问题总能解决,慢慢来