20199320 2019-2020-2 《网络攻防实践》第6周作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/19attackdefense |
---|---|
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10589 |
我在这个课程的目标是 | 掌握网络攻防知识及操作 |
这个作业在哪个具体方面帮助我实现目标 | 掌握TCP/IP网络协议栈中最为基本的网络层和传输层协议所存在的安全性问题及针对性攻击技术 |
一、知识点总结
1. 安全模型
- PDR安全模型:是一个基于时间的动态安全模型,以\(P_t>D_t+R_t\)为本质基础,其中,$ P_t $ :防御机制抵御入侵时间;$ D_t\(:检测机制发现入侵时间;\)R_t$:响应机制应对入侵时间。
- \(P^2DR\)安全模型:网络安全=根据风险分析制定安全策略(Policy) +执行安全防护策略( Protection) +实时检测( Detection) +实时响应(Response)。其中,安全策略是模型的核心。
2. 网络安全防范技术与系统
2.1 防火墙技术概述
防火墙可以在网络协议栈的各个层次上实施网络访问控制机制,对网络流量和访问进行检查和控制。根据其工作的网络协议栈层次,防火墙技术可以分为包过滤(网络层)、电路级网关(传输层)和应用层代理(应用层)技术。
- 功能:检查控制进出的网络的网络流量、防止脆弱或不安全的协议和服务、防止内部网络信息的外泄、对网络存取和访问进行监控审计和防火墙可以强化网络安全策略并集成其他安全访问机制。
- 不足:来自网络内部的安全威胁、通过非法外联的网络攻击和计算机病毒传播、针对开放服务安全漏洞的渗透攻击、针对网络客户端程序的渗透攻击和基于隐蔽通道进行通信的特洛伊木马和僵尸网络。
2.2 防火墙技术和产品
-
包过滤技术
- 包过滤技术在路由功能基础上进行扩展,通过对网络层和传输层包头信息的检查,根据用
户定义的安全策略规则集,确定是否应该转发该数据包。 - 优势:实现简单,不会对网络通信造成性能影响。
- 不足:功能有限(只对单个数据包检查),对管理员要求较高。
- 包过滤技术在路由功能基础上进行扩展,通过对网络层和传输层包头信息的检查,根据用
-
基于状态检测的包过滤技术(动态包过滤)
- 动态包过滤技术仍然使用一组静态规则进行安全策略匹配,但除了检查每个独立的数据包之外,还会试图跟踪数据包在网络连接上的上下文关系,并以网络连接状态作为一个附加的匹配标准,以确定是否允许和拒绝通信,即在网络连接层次上匹配和实施防火墙规则。
- 优势:具有更强大的安全功能,规则设置更为简单,保障了数据合法性。
- 不足:实现复杂度高,对网络传输性能影响较大,可能遭受拒绝服务攻击。
-
代理技术
- 应用层代理技术:工作在应用层,提供了很好的安全性。
- 电路级代理技术:工作在传输层,能够在中继过程中检查和处理各种异常的IP数据包,并和应用代理一样能够隐藏内部网络的信息,同时也可以使用用户级的身份认证机制以提供额外的安全保障。
- NAT代理技术:工作在网络层,用于小型办公网络和家庭网络,为充分使用有限IP资源提供录入方法,具备安全防护能力。
-
防火墙产品
- 集成包过滤功能的路由器、基于通用操作系统的防火墙软件产品、基于安全操作系统的防火墙和硬件防火墙设备
-
防火墙部署方法
- 包过滤路由器:将带有包过滤防火墙功能的路由器作为内部网络和外部网络之间唯一的连接点。路由器依据管理员配置的访问控制列表,对数据包进行过滤。
- 双宿主堡垒主机:使用应用代理网关作为双宿主堡垒主机代替包过滤路由器。
- 屏蔽主机:采用屏蔽路由和堡垒主机双重安全措施。
- 屏蔽子网:包括两个包过滤防火墙,外部防火墙抵挡外部网络的攻击,并管理所有内部网络对DMZ的访问。内部防火墙管理DMZ对内部网络的访问。
2.3 Linux开源防火墙:netfilter/iptables
-
netfilter/iptables开源防火墙工作原理:
在nefilter/iptables防火墙系统中,netfilter 组件位于Linux的内核空间中,实现了静态包过滤和状态报文检查( 即动态包过滤)基本防火墙功能,此外也支持一个灵活可扩展的框架,支持NAT网络地址转换等其他额外功能,并提供了多层API接口以支持第三方扩展,netfilter具备构建防火墙、NAT共享上网、利用NAT构建透明代理,以及构建QoS或策略路由器等安全功能。Iptables则是工作在Linux用户空间中的防火墙配置工具,通过命令行方式允许用户为netfiter配置各种防火墙过滤和管理规则。
-
nefilter/iptables架构——四表五链+规则
-
RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。
-
Mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用。
-
NAT表主要用于做IP地址转换作用。
-
Filter表主要用于做数据包过滤作用。
-
优先级高低:raw>mangle>nat>filter
-
-
iptables语法
iptables [-t table] command [match] [target]
-t:指定配置规则所在的表:filter、 nat、 mangle、 raw ......如果不加 -t,则默认是filter表。
command:告诉iptables命令要做什么
-
-A(--append):将一条规则附加到链的末尾
$iptables -A INPUT -s202.152.1.1 -j ACCEPT //向INPUT链中添加一个规则,确认来自202.152.1.1的数据包可接收
-
-D(--delete):指定要匹配的规则或者指定规则在链中的位置编号,将其从链中删除该规则
-
-P(--policy):设置链的缺省目标操作,即所有与链中任何规则都不匹配的信息包都将被强制使用此链的缺省操作
$iptables -P INPUT DROP //将缺省值设置为DROP,即将丢弃所有与INPUT链中任何规则都不匹配的数据包
-
-N(--new-chain):用命令中所指定的名称创建一个新链
-
-F(--flush):如果指定链名,该命令删除链中所有的规则,如果未指定链名,该命令删除所有链中所有的规则。
$iptables -F FORWARD //删除FORWARD中所有的规则
-
-L(--list):列出指定链中所有的规则
$iptables -L FORWARD //列出FORWARD中的所有规则
match:规则匹配条件—— 多个匹配条件之间是与的关系
-
通用匹配:
-i/-o:进入网络接口/发出网络接口
-s/-d:源和目的地址
-p :协议类型
-m :网络连接状态等 -
特定协议匹配:
--sport/--dport:为TCP/UDP端口匹配设置条件等
Target:指定满足匹配条件之后的目标操作
- ACCEPT:-j ACCEPT 接受(允许他前往目的地),并且他将停止遍历规则链
- DROP:-j DROP 阻塞该信息,丢弃
- REJECT:-j REJECT 与DROP类似,但不会在服务器和客户机上留下死套接字,另外,它将错误消息发回给数据包的发送方。
- RETURN:-jump RETURN 让与该规则匹配的信息包停止遍历包含该规则的链。
-
-
nefilter/iptables的包过滤机制
ACCEPT:允许数据包经过网络协议栈
DROP:静默丢弃数据包,不通知发送源
QUEUE:通过nf_queue机制将数据包传送至应用层供上层应用处理
STOLEN:保持数据报直到特定条件后处理,用于处理ip分片等
REPEAT:使得数据包重新进入Hook检查点
注意:ACCEPT和DROP最常用
如:
# iptables -t filter -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT /*该条静态包过滤规则对路由转发数据包进行检查,当数据包源IP地址属于192.168.0.0/24 C类网段,且目的地址属于192.168.1.0/24 C类网段,则执行目的操作 ACCEPT.*/
-
nefilter/iptables的报文状态检查机制
NEW:新建连接,即接受到连接处是报文,或只看到一个方向的数据包
ESTABLISHED:已经完成三次握手的TCP连接,或已看到双向通信的网络连接
RELATED:相关网络链接,用于处理FTP等协商端口的网络协议
INVALD:非法状态,即当前网络交互处理不符合网络协议规范,造成非法链接
如:
//允许链接目标地址为web服务器IP,当前状态为NEW的网络链接可通过防火墙转发 # iptables -t filter -A FORWARD -d [WEB_SERVER] -m state --state NEW -j ACCEPT //已经建立网络链接和相关网络链接可以通过防火墙 # iptables -t filter -A FORWARD -m state --state RELATED, ESTABLISHED -j ACCEPT
-
nefilter/iptables的NAT机制
NAT配置主要通过PREROUTING(用于DNAT)、POSTROUTING(用于SNAT)、OUTPUT(用于本地产生的包的DNAT) 3个缺省链。
SNAT(改变网络连接数据包的源地址)
-
IP伪装
// 使得内部网络主机发出的数据包进行源IP地址伪装,使用防火墙外网IP地址。 # iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j MASQUERADE
-
SNAT机制
SNAT机制需要在POSTROUTING链中完成,因为路由、包过滤都是在源地址改变之前做的。
//通过路由发出的网络连接的源IP地址都修改为2.2.2.2 # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 2.2.2.2 //通过路由发出的TCP网络链接的源IP地址修改为2.2.2.2,且源端口设置为1-1023范围内的一个 # iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 2.2.2.2:1-1023
DNAT(改变网络连接数据包的目的地址)
-
端口转发、负载均衡、透明代理都属于DNAT
-
DNAT机制
DNAT机制需要在PREROUTING链中完成
//将目的地址转换为3.3.3.3 # iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 3.3.3.3 //jiang web网络流量的目的地址和端口转换为4.4.4.4:8080 # iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j DNAT --to 4.4.4.4:8080 //将本地发出的到2.2.2.2的数据包重定向至本地loopback # iptables -t nat -A OUTPUT -d 2.2.2.2 -j DNAT --to 127.0.0.1 //将到外网IP1.2.3.4的8080端口网络流量转发至内网ip192.168.1.1的80端口 # iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080 -j DNAT --to 192.168.1.1:80
-
3.
二、实践过程
1. 动手实践:防火墙配置
配置Linux操作系统平台上的iptables,或者Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
(1)过滤ICMP数据包,使得主机不接收Ping包;
-
使用
iptables -L
查看seed所有规则,确认是默认的:
此时,用kali(192.168.200.4)ping seed(192.168.200.6),没有问题。
-
使用命令
iptables -A INPUT -p icmp -j DROP
使得主机不接收ICMP包。-A INPUT:将input规则添加到链尾;
-p icmp:指定icmp协议;
-j DROP:指定对应数据包进行丢弃。
再次查看规则:
-
此时用kali再次ping seed ,可见已经不能成功了:
而wireshark证明发出了很多icmp数据包:
-
成功后,使用
iptables -F
清除所有规则。
(2)只允许特定IP地址,访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址无法访问。
-
设置前,用kali和winXPattacker访问主机的ftp服务,都可成功。
-
使用命令
iptables -P INPUT DROP
拒绝一切数据流入。 -
使用命令
iptables -A INPUT -p tcp -s 192.168.200.4 -j ACCEPT
只允许kali(192.168.200.4)访问主机。查看如下:
-
设置好后,用kali和winXPattacker访问seed,可见只有kali可以成功访问。
-
输入
iptables -F
和iptables -P INPUT ACCEPT
恢复之前的状态。
2. 动手实践:Snort
使用Snort对给定pcap文件(listen.pcap文件)进行入侵检测,并对检测出的攻击进行说明。在BT4 Linux攻击机或 Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
-
执行
snort -c /etc/snort/snort.conf -r /home/kali/Desktop/listen.pcap -K ascii
从离线的pcap文件读取网络日志数据源:
可见,TCP包占绝大多数。
-
snort会在默认目录 /var/log/snort 生成一个日志文件,
cd/var/log/snort
查看日志文件vim alert
,本次攻击是用nmap发起的。攻击机IP地址是 172.31.4.178,靶机IP地址是 172.31.4.188 ,还可以看到端口号等等。
3. 实践作业
1.分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,并撰写分析报告, 说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
具体分析配置规则与启动项文件包括:
•防火墙(netfilter+IPTables) : /etc/init.d/rc.firewall:
•入侵检测系统(Snort) : /etc/init.d/hflow-snort 与/etc/snort/snort.conf:
•入侵防御系统(Snort_inlinc) : /etc/init.d/hflow-snort_inline 与/etc/snort_inline/snort. inline.conf
(1)上述脚本是如何实现蜜网网关的数据捕获和数据控制机制?
数据捕获:
蜜罐网关通过三种方式捕获数据:防火墙日志、网络通讯、系统活动
防火墙日志:防火墙能够记录所有的进入和外出本网络的连接。所有进出防火墙的日志信息记录在/var /log /messages 文件中。但防火墙能记录的数据是有限的,主要是报头信息,如攻击的时间、源和目的IP地址以及源和目的端口,对于入侵者的击键行为、数据包的载荷等无能为力。
IDS能够捕获所有的网络活动,记录每一个包和载荷。IDS 能够充分发挥其数据捕获的能力,得到蜜网环境中所有的数据包。Snort捕获所有IP通信,并将其转储到日志文件tcpdump中留待以后分析。将嗅探器与外部网口eth0绑定,那么记录下的将不仅是与Honeynet相关的数据,还会有外部网络的通信。如图:
数据控制:
蜜网网关实现数据控制的主要方法有:基于IPTables的外出连接数限制和snort-inline入侵检测系统。
基于re.firewall脚本的IPTables防火墙可以限制外出的TCP连接和UDP、ICMP协议的数据包数.限制时间可以是秒,分钟,小时或天为单位,方便灵话,易于合理控制。还可以修改外出连接的数据包使其不能到达目的地,让入侵者认为数据包正常发出。
上图可见对于属于黑名单的主机,丢弃所有包;对于属于白名单的主机,接受数据包;对于属于防护名单中的,是不允许被外部访问的蜜罐主机。
Snort-inline是一个基于Snort的入侵检测系统,能够通过修改后的Snort脚本来检测恶意的数据流。其对
每个外出的数据包进行攻击特征匹配,如发现包含已知攻击将生成报警,井根据配置选择丢弃数据包或修改数据包使攻击失效。Honeynet网络出来的所有数据包都必须经过Snort_inline的检测,只有不包含规则库里的数据包才能通行。另外还必需利用别的手段把数据包发送给Snort_inline进行检测,这是通过Iptables的queue模块实现的。
(2)获取IPTables的实际规则列表、Snort和Snort_inline的实际执行参数。
-
iptables -t filter -L
来查看规则列表,-t是指定规则表,-L表示列表。
-
执行
vim /etc/init.d/snortd
,snortd是snort启动的脚本文件,可以看到一些实际执行参数,默认使用snort.conf规则,默认监听网卡为eth0等。
-
vim /etc/init.d/hw-snort_inline
可以看到相关的运行脚本。
(3)蜜网网关开机之后,防火墙、NIDS、NIPS是如何启动的?
输入chkconfig --list |grep 服务
,来查询当前服务的状态。如下图所示,我们发现NIDS的7个口全都是关闭的,需要手动开启。防火墙和NIPS并没有全部关闭,是跟随系统启动的。
(4)Bonus:蜜网网关中的Snort规则是如何自动升级的?
可以从vim /etc/honeywall.conf
打开honeywall配置文件,来看snort的rule是否自动更新,可见默认为不更新:
还可以看到Oinkmaster,这是个自动更新的软件,使用vim /etc/oinkmaster.conf
打开该文件,发现了snort.conf文件,可以推断这里使用工具Oinkmaster进行了snort的自动升级。
三、学习中遇到的问题及解决
-
问题1:防火墙配置只允许指定机器可访问主机服务时,设置好后两台机器仍然可以访问成功。
解决方法:因为设置前所有数据都可流入,
iptables -A INPUT -p tcp -s 192.168.200.4 -j ACCEPT
只是允许特定主机访问,并没有禁止其他机器,因此配置前先输入iptables -P INPUT DROP
拒绝一切数据流入才可以。 -
问题2:执行
snort -c /etc/snort/snort.conf -r /home/kali/Desktop/listen.pcap
检测后,默认目录 /var/log/snort下没有alert文件。解决方法:执行snort命令后面添加参数
-K ascii
以ascii字符集存储即可解决。
四、实践总结
本次实践主要运用了iptables进行防火墙配置、snort工具进行入侵检测以及通过分析脚本文件大致明白了蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。相对来说本次实践比较简单,实践过程中发现对命令的各参数使用还是容易混淆,记得要多用才能记住。