20199107 2019-2020-2 《网络攻防实践》第5周作业
这个作业属于哪个课程 | 《网络攻防实践》 |
这个作业的要求在哪里 | 《网络攻防实践》第5次作业 |
我在这个课程的目标是 | 学习新知识、考试拿高分 |
这个作业在哪个具体方面帮助我实现目标 | 学习对TCP/IP网络协议的攻击 |
作业正文 | 见下文 |
其他参考文献 | 见文末 |
1.实践内容
网络安全属性与攻击模式
网络安全属性:
- 机密性:网络中的信息不被非授权实体获取和使用
- 完整性:信息未经授权不能进行改变,即信息在存储和传输过程中保持不被修改、不被破坏和不被丢失
- 可用性:被授权实体在需要时能正常的存取和访问所需的服务和信息
- 真实性:确保通信的对方是它所声称的真实实体,而非假冒
- 不可抵赖性:通信中任何一方无法抵赖自己进行过的操作
网络攻击的基本模式:
- 截获:一种被动攻击模式,其目的是获取通信双方的通信信息内容,破坏机密性,主要技术是嗅探和监听
- 中断:主动攻击模式,使正常的网络通信和会话无法继续,破坏可用性,主要技术为拒绝服务攻击
- 伪造:主动攻击模式,假冒网络通信方的身份,欺骗对方达到恶意目的,破坏真实性,主要技术为欺骗
- 篡改:主动攻击模式,对网络通信的信息内容进行修改,使通信一方或双方收到虚假信息,破坏完整性,主要技术为数据包篡改
TCP/IP网络协议栈安全缺陷与攻击技术
- 网络接口层:也即数据链路层,主要攻击方式有MAC泛洪攻击,MAC欺骗,ARP欺骗等
- 互联层:也即网络层,IP协议的主要问题就是只转发不验证,容易受到欺骗。ICMP可能被用于拒绝服务攻击,攻击者可冒充靶机的ip,向广播地址发送大量ICMP请求,从而使靶机收到大量回应包而瘫痪
- 传输层:在TCP建立会话之后的连接过程中,仅依靠IP,端口,SEQ、ACK号验证通信双方,非常容易遭受伪造和欺骗攻击,攻击者可以进行TCP RST攻击直接中断会话过程。同时TCP的三次握手过程存在设计缺陷,攻击者可以进行SYN泛洪攻击
- 应用层:很多流行的协议均缺乏安全考虑
接下来介绍各实践攻击操作的原理
IP源地址欺骗
-
原理:
IP源地址欺骗可以实现的根本原因在于:IP协议在设计时只使用数据包中的目标地址进行路由转发,而不对源地址进行真实性的验证。
IP转发数据包的过程像邮局寄信,按照信封格式是需要寄信人填写寄信地址,但邮局转发与投递信件时,只会查看收信人地址,而不会去验证寄信地址的真实性,只要收信人地址正确无误并贴了邮票,信件就会被送达
同样,路由器在转发IP数据包时,也只根据目标IP地址查询路由路径,进行数据包的转发直至送达目标,不会对数据包源地址进行验证。
但怀有恶意目的的攻击者则会修改IP协议包头,使其包含一个不同的虚假IP地址,使其看起来像是从另外一个地址发出的,这样就达到了欺骗目标和隐藏发送源的目的。
而接收到欺骗数据包的计算机则会向假冒的源地址发回响应包,通常情况下,攻击者无法获取到这些响应包,因此IP源地址欺骗技术主要应用于攻击者不需要响应包或存在某些技术可以猜测响应包的场景中,如拒绝服务攻击等。
虽然之后的实践中不会直接进行IP源地址欺骗,但在ICMP重定向、TCP RST、TCP会话劫持等攻击中都会包含这一部分
-
防范方法:
使用随机化的初始序列号、使用IPSec、避免采用基于IP的信任策略,以基于加密算法的身份认证来代替、在路由和网关实施包过滤
ARP缓存欺骗攻击
-
原理:
机器a与机器b通信前,若a不知道b的MAC地址,则会发送ARP广播包请求(即上一篇抓包中看到的who is b,tell a这样子的包)
当b收到该广播包时,会向a回复带有自己的MAC地址的响应包(IP b->MAC b)
但攻击机c会一直发送伪造的响应包(IP b->MAC c),让a以为c的MAC地址是b的MAC地址
当a被欺骗后,即使IP地址还是b的IP,a发向b的通信数据包会先发到c的MAC地址
而c还可以在此基础上再冒充a与b进行通信,这样a和b之间的通信数据都会经过c(中间人攻击)
-
防范方法:
使用静态的IP-MAC映射表、安装防火墙等防范工具
ICMP重定向攻击
-
原理:
利用ICMP路由重定向报文来改变主机的路由表,向靶机发送重定向消息,把自己则可以伪装成为路由器,使靶机数据发送至攻击机从而加强监听
(1)攻击机利用IP源地址欺骗(修改数据包中的IP源地址),冒充网关IP,向被攻击节点发送ICMP重定向报文,并将指定的新路由器IP地址设置为攻击机
(2)靶机在接收到该报文后,会进行限制条件检查,由于该报文并不违背限制条件,因此将被接收,将攻击机作为其新路由器
(3)攻击机可以开启路由转发,充当中间人,对靶机与外网的通信进行全程监听
(4)在转发过程中,根据ICMP路由重定向机制的设计原理,由于从靶机到外网存在更优的路径,即直接通过原先的网关,因此攻击机协议栈可能会向靶机发送一个ICMP报文指定原来的网关为路由,使靶机回复到原来的状态
-
防范方法:
过滤一些类型的ICMP数据包,设置防火墙过滤,判断ICMP重定向报文是不是来自本地路由器等
TCP RST攻击
- 原理:
TCP RST攻击也被称为伪造TCP重置报文攻击,是指一种假冒干扰TCP通信连接的技术方法。TCP协议有一个“reset”标志位(RST)
RST被设计用于当TCP会话仍在继续却无法传输数据时重置连接,一旦主机收到RST=1的数据包,则将立即断开该TCP链接
攻击机恶意构造RST数据包,使通信双方的网络通信中断,达到拒绝服务的效果
TCP会话劫持攻击
-
原理:
(1)victim主机与telnet服务器进行连接,并通过身份认证建立起会话
(2)telnet服务器将会向victim发送响应包,并包含服务器当前序列号(SVR_SEQ)以及期望客户端发送的下一个序列号(SVR_ACK)
(3)攻击者通过ARP欺骗实施中间人攻击,可以嗅探获得victim和telnet服务器间的通信内容,然后假冒victim的IP地址及身份,向talent服务器发送数据包,声称自己是victim
攻击者发送数据包中的序列号必须满足条件:SVR_ACK<=CLT_SEQ<=SVR_ACK+SVR_WND,其中SVR_WND为服务器接收窗口,如此服务器才会接收该数据包
(4)victim仍然会继续持续talent服务器之间的连接会话,但是由于与telnet服务器之间的ACK值互相不匹配出现ACK风暴
-
防范方法:
禁用主机上的源路由、使用静态的IP-MAC映射表、引用和过滤ICMP重定向报文、采用IPSec协议
SYN Flood攻击
-
原理:
TCP SYN Flood,又称SYN洪泛攻击,是目前最为有效和流行的一种拒绝服务攻击形式
它利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,消耗目标主机的连接队列资源,从而不能够为正常用户提供服务
在SYN Flood攻击中,攻击主机向受害主机发送大量伪造源地址的TCP SYN报文,受害主机分配必要的资源,然后向源地址返回SYN/ACK包,并等待源端返回ACK包
如果伪造的源地址主机活跃,将会返回一个RST包直接关闭连接,但大部分伪造源地址是非活跃的,这种情况下源端永远都不会返回ACK报文,
受害主机继续发送SYN+ACK包,并将半开连接放入端口的积压队列中,虽然一般的主机都有超时机制和默认的重传次数
但是由于端口的半连接队列的长度是有限的,如果不断地向受害主机发送大量的TCPSYN报文,半开连接队列就会很快填满,服务器也就拒绝新的连接,导致该端口无法响应其他机器进行的正常连接请求
-
防范方法:
SYN-Cookie技术:客户端返回ACK报文后再决定分配连接,避免在连接信息未完全到达前进行资源的分配
防火墙地址状态监控技术:对每个IP的TCP连接状态进行监控,对于超时的不返回ACK的IP(主要是伪造的IP)设置为bad,以后对于该IP的SYN报文全都主动返回RST
2.实践过程
2.1 ARP缓存欺骗攻击
以下为要使用机器的IP和MAC
机器 | IP | MAC |
---|---|---|
kali | 192.168.200.2 | 00:0c:29:a7:16:69 |
seedUbuntu(下文简称seed) | 192.168.200.6 | 00:0c:29:54:18:13 |
metasploitable2linux(下文简称meta) | 192.168.200.125 | 00:0c:29:bc:86:4e |
攻击机kali,其余二者为靶机,目标是让seed把kali的MAC地址当成meta的 | ||
先在seed用arp -a 查看ARP缓存 |
||
然后在kali用
apt-get install netwox 安装netwox
netwox 80 -e 00:0c:29:a7:16:69 -i 192.168.200.125 构造arp响应包,ip是metas的,MAC是kali的
此外,再一次用arp -a
查看ARP缓存,发现meta的IP对应的MAC已被改变
此时,一边在kali用wireshark抓包,一边用seed ping一下meta,还可以看到构造出来的响应包(192.168.200.125 is at 00:0c:29:a7:16:69)
2.2 ICMP重定向攻击
攻击机kali,靶机winXPAttacker(IP 192.168.200.4),目标是让靶机把kali当成默认网关
先在靶机用route print
看一下路由表,靶机默认路由是192.168.200.1
在kalinetwox 86 -f "host 192.168.200.4" -g 192.168.200.2 -i 192.168.200.1
-f后面的是靶机IP,-g后面的是更改之后的路由(即攻击机IP),-i后面的是原默认路由IP(因为要用该IP的名义发)
该命令会在靶机和路由通信后,向其发动ICMP重定向攻击
期间什么修改包的IP猜测SEQ伪造ICMP重定向包全交给netwox,最大的难处可能是机子太卡
在靶机上随便访问一个网站,再route print
,kali的IP已经加入其中
2.3 TCP RST攻击
先在seed用telent连接meta,然后到kali用netwox 78 -i 192.168.200.125
对meta发动攻击,此时seed和meta间的连接会被断开
此命令会持续性进行攻击,例如在kali一边用wireshark抓包,一边用netwox 78 -i 192.168.200.6
对seed进行攻击,此时seed无法浏览网页
查看抓包结果,能看到很多伪造的RST包
2.4 TCP会话劫持攻击
先在kali用wireshark抓包
seed telnet连接meta
查看抓包结果,tcp.port==23
筛选端口23,查看seed和meta间通信的最后一个包
因为要冒充seed给meta发包,找到TCP的序列号和确认号,即next SEQ和ACK值(不是那个相对值,有raw那个真实值)(因为是做完再截的图,这是最后一个,后面就是我攻击之后的了)
netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.200.6 --ip4-dst 192.168.200.125 --tcp-src 47358 --tcp-dst 23 --tcp-seqnum 404997902 --tcp-acknum 1596002028 --tcp-ack --tcp-psh --tcp-window 64 --tcp-data "303132333435"
一条超长的命令,用来构造假通信包,既然是冒充seed到meta的包,
--ip4-src源IP和--tcp-src源端口自然都是seed的,
--ip4-dst目的IP和--tcp-dst目的端口是meta的,因为是telnet连接,目的端口不用查都可以基本确定是23
序列号为当前端成功发送的数据位数,确认号为当前端成功接收的数据位数
因为最后一个包是seed给meta的ACK包,其中没有有效数据,所以序列号和确认号可以直接复制粘贴
--tcp-seqnum序列号,粘贴上之前找到的next SEQ值
--tcp-acknum确认号,粘贴上之前找到的ACK值
--tcp-data伪造的包里的数据,以十六进制值表示,随便写点东西,方便最后找到它就行,我用的是012345
发完可以从wireshark看到这个伪造的包,并看到ACK风暴开始了
2.5 SYN Flood攻击
做这个攻击的时候,我才突然想起可以先把靶机存个快照,这样要是有个万一恢复起来快一些,虽然我刚装好的时候也留了快照,但那时候靶机的IP还没手动改过
seed先尝试telnet连接metatelnet 192.168.200.125
此时一切正常
kali用wireshark抓包并netwox 76 -i 192.168.200.125 -p 23
开始对meta机进行SYN Flood攻击,在wireshark可见巨量伪造源IP的SYN包
这时候seed再连接meta就很难了,很慢,可能能连上(说出来你们可能不信,但我真的连上过,可能是那时候动作快,meta机资源还没耗尽吧),也可能会超时
3.学习中遇到的问题及解决
- 问题1:TCP会话劫持的hunt工具是不是已经过时了该退环境了,同学们都无法搜到连接,百度出来的结果也全都是无法搜到连接???
- 问题1解决方案:如上文,感谢9101,9102,9103几位大佬的博客提供了解决方案
- 问题2:为什么序列号确认号可以直接复制粘贴
- 问题2解决方案:百度一下,最后才发现这个确认包里没有有效数据的
4.实践总结
这次书上原理讲的很详细了,难度基本上就是学会用工具,除了hunt之外,netwox还是很靠谱的,参考大佬们的博客,做起来基本没问题。
5.其他参考文献
- 《网络攻防技术与实践》(诸葛建伟著)