J4tnC4.jpg

Charles Xie

Not because they are easy, but because they are hard.

20199101 2019-2020-2 《网络攻防实践》第五周作业

TCP/IP网络协议攻击的原理和实践


0.总体结构


本次作业属于哪个课程 网络攻防实践
这个作业要求在哪里 TCP/IP网络协议攻击
我在这个课程的目标是 学习网络攻防相关技术和原理
这个作业在哪个具体方面帮助我实现目标 TCP/IP网络协议攻击的原理和实践

1.实践内容


第五章的内容整体比较多,但是系统性和完整性都比较好,主要讲了网络层和传输层的协议攻击。关于攻击的原理,本章的书本内容十分详细,所以本次作业的原理篇幅稍多。主要分成以下几个部分先进行理论知识的梳理,再进行课后的实践。

  • 网络协议攻击及其基本概念
  • 网络层协议攻击及防范措施
  • 传输层协议攻击及防范措施

网络协议攻击及其基本概念


学习网络安全、信息安全首先应当铭记心中的是五大安全属性:机密性,完整性,可用性、真实性和不可抵赖性。我们所有的攻击或者防守都是围绕这五大安全属性来展开的。那么作为攻击方来说,通常有以下几种攻击模式:

  • 截获:以嗅探与监听技术为基础的被动攻击模式,获取网络通信双方的通信信息内容。
  • 中断:以拒绝服务技术为基础的主动攻击模式,使网络通信和会话无法进行。
  • 伪造:以欺骗为基础的主动攻击模式,假冒网络通信方的身份,欺骗通信对方达到恶意目的。
  • 篡改:包括数据包篡改,中间人攻等技术的击主动攻击模式,网络通信工程的信息内容进行篡改,使得通信一方或双方接收到虚假消息。

但是作为一个攻击者,我们还缺少了安全缺陷,有了安全缺陷,我们才可以实施攻击。下面简要介绍一些TCP/IP网络协议栈安全缺陷与攻击技术,主要技术内容在下一节讲解

  1. 网络接口层:以太网协议,当网络接口处于混杂模式可以直接嗅探并截获数据包,同时缺乏对MAC地址源的身份验证机制,实现MAC地址欺骗。
  2. 互联层:IP协议只根据目的地址进行转发,不检查源IP地址是否真实有效,即缺乏IP地址身份认证机制,容易遭到IP地址欺骗。同时还包括源路由滥用、IP分片攻击,以及ARP欺骗、ICMP重定向、Smurf攻击等。
  3. 传输层:TCP建立会话之后的连接过程中,非常容易遭受伪造和欺骗攻击,攻击者可以进行TCP RST攻击直接中断会话过程。同时TCP的三次握手过程存在设计缺陷,攻击者可以进行SYN泛洪攻击。
  4. 应用层:一些流行的应用层协议HTTP、FTP、POP3/SMTP、 DNS等均缺乏安全设计。

上述协议栈攻击技术中,最为重要或者流行的就是欺骗技术了,欺骗技术即攻击者伪造出特制的网络数据报文,发送给目标主机,使其在接受处理这些伪造报文时遭受攻击。Netwox是一个开源工具包,可以创建任意的TCP/UDP/IP数据报文,支持命令行方式构造及发送伪造包,可以通过脚本编程实现自动化处理。


网络层协议攻击及防范措施


1.IP源地址欺骗攻击


  • 原理只使用数据包中的目标地址进行路由转发,而不对源地址进行真实性的验证
  • 攻击步骤(参考下图与文字内容结合):
  • 对受信任的主机进行拒绝服务攻击
  • 对目标主机的TCP初始序列号(ISN)进行取样和猜测
  • 伪造源地址为受信任的主机IP的SYN数据包发送给主机
  • 等待目标主机将SYN/ACK包发给已经瘫痪的受信任的主机
  • 再次伪装成被信任的目标主机发送ACK包、建立连接。
  • 应用场景:拒绝服务攻击、网络扫描(nmap -D)
  • 工具:Netwox、wireshark、nmap
  • 防范措施
  • 使用随机化的初试序列号
  • 使用网络层安全传输协议
  • 避免采用基于IP地址的信任策略
  • 在路由器和网关上实施包过滤

ip1


2.ARP欺骗攻击


  • 定义:ARP欺骗也称为ARP下毒,是指攻击者在有线或以太网上发送伪造的ARP信息,对特定IP所对应的的MAC地址进行假冒欺骗,从而达到恶意目的的攻击技术。
  • 原理:ARP协议在设计时认为局域网内部的所有用户都是可信的,但是局域网内可以存在内部攻击者,或者已经渗透进局域网的外部攻击者或恶意代码。这使得ARP缓存非常容易被注入伪造的IP地址到MAC地址的映射关系
  • 攻击步骤(参考下图与文字内容结合):
  • 源节点A发送数据包给目的节点B时,会通过ARP协议在局域网段广播ARP请求包,询问节点B的IP地址所映射的MAC地址。
  • 攻击节点C说IP目标IP地址所映射的MAC地址是他自己,并不断地向源节点发送ARP响应包。
  • 由于攻击节点C不断地发送响应包,这样源节点上会强制以C发送响应包中的信息来更新ARP缓存。
  • 当源节点A要再次发送数据包到节点B时,直接将数据包发送到C对应的MAC地址,即攻击节点C,这样C就通过欺骗假冒了目的节点B。
  • 如果ARP欺骗攻击的是网关节点,将导致整个局域网所有节点经过网关出入的数据包都会首先通过攻击节点,可能被嗅探、监听和恶意修改。
  • 应用场景:交换式网络、构造中间人攻击、恶意代码。
  • 工具:DSniff中的Arpspoof、arpison、Ettercap、Netwox。
  • 防范措施
  • 静态绑定关键主机的IP地址和MAC地址映射关系
  • 使用相应的ARP防范工具
  • 使用虚拟子网细分网络拓扑
  • 加密传输

arp1


3.ICMP路由重定向攻击


  • 定义:攻击者伪装成路由器发送虚假的ICMP路由路径控制报文,使得受害主机选择攻击者指定的路由路径,从而进行嗅探或假冒攻击的一种技术。ICMP报文分为两种类型:差错报告类(目的站不可达、数据报超时、数据包参数错误)、控制类报文(请求/应答类和通知类)。
  • 原理:利用ICMP路由重定向报文改变主机路由表,向目标主机发送重定向消息,伪装成路由器,使得目标机器的数据报文发送至攻击机从而加强监听。
  • 攻击步骤
  • 攻击节点利用IP源地址欺骗技术,冒充网关IP地址,向被攻击节点发送ICMP重定向报文,并将指定的新路由器IP地址设置为攻击节点。
  • 被攻击节点收到报文后,进行限制条件检查,由于该报文并不违背限制条件,因此将被接收,被攻击节点选择攻击节点作为其新的路由器。
  • 攻击节点可以可以开启路由转发,充当中间人,对被攻击节点的通信进行全程嗅探监听,达到ARP欺骗类似的攻击效果。
  • 在转发过程中,根据ICMP路由重定向机制的设计原理,攻击节点协议栈可能会向攻击节点发送一个ICMP重定向报文,指定原先网关为新路由器,将欺骗路由路径还原至原先状态。
  • 工具:Netwox
  • 防范措施
  • 根据类型过滤一些ICMP数据包
  • 设置防火墙过滤
  • 对ICMP重定向报文判断是不是来自本地路由器的

传输层协议攻击及防范措施


1.TCP RST攻击


  • 定义:TCP RST攻击也被称为伪造TCP重置报文攻击,是指一种假冒干扰TCP通信连接的技术方法。
  • 原理:TCP协议头有一个reset,该标志位置为1,接收该数据包的主机即将断开这个TCP会话连接。tcp重置报文就是直接关闭掉一个TCP会话连接。
  • 攻击步骤
  • 攻击主机C可以通过嗅探方式监视通信双方A、B之间的TCP连接。
  • 在获得源、目标IP地址及端口、序列号之后,接可以结合IP源地址欺骗技术伪装成通信一方,发送TCP重置报文给通信另一方。
  • 在确保端口号一致及序列号落入TCP造成通信双方正常网络通信的中断,达到拒绝服务的效果。
  • 工具:Netwox

2.TCP会话劫持攻击


  • 原理:TCP会话劫持是劫持通信双方已经建立的TCP会话连接,假冒其中一方的身份,与另一方进行进一步通信。其中最核心的就是通过TCP对会话通信方的验证
  • 攻击步骤
  • victim主机与telnet服务器进行连接,并通过身份认证建立起会话。
  • telnet服务器将会向victim发送响应包,并包含服务器当前序列号(SVR_SEQ)以及期望客户端发送的下一个序列号(SVR_ACK)。
  • 攻击者通过ARP欺骗实施中间人攻击,可以嗅探获得victim和telnet服务器间的通信内容,然后假冒victim的IP地址及身份,向talent服务器发送数据包,声称自己是victim。
  • 攻击者发送数据包中的序列号必须满足条件:SVR_ACK<=CLT_SEQ<=SVR_ACK+SVR_WND
  • victim仍然会继续持续talent服务器之间的连接会话,但是由于与telnet服务器之间的ACK值互相不匹配出现AC风暴。
  • 防范措施
  • 禁用主机上的源路由
  • 采用静态绑定IP-MAC映射表以及避免ARP欺骗
  • 引用和过滤ICMP重定向报文

hijk1


3.TCP SYN Flood拒绝服务攻击


  • 原理:基于TCP三次握手的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,消耗目标主机的连接队列资源,从而无法正常服务。
  • 攻击步骤
  • 在TCP SYN Flood攻击中,攻击主机向受害主机发送大量伪造源地址的TCP SYN报文。
  • 受害主机分配必要的资源,然后向源地址返回SYN/ACK包,并等待源端返回ACK包。
  • 如果伪造的源地址主机活跃,将会返回一个RST包直接关闭连接,但大部分伪造源地址是非活跃的,永远不会返回ACK报文,受害主机继续发送SYN+ACK包,当半开连接报文填满,服务器也就拒绝新的连接。
  • 防范措施
  • SYN-Cookie技术(在连接信息未完全到达前不进行资源的分配)。
  • 防火墙地址状态监控技术(将到目标服务器的TCP连接状态分为NEW、GOOD、BAD)。

4.UDP Flood拒绝服务攻击


  • 原理:通过向目标主机和网络发送大量UDP数据包,造成目标主机显著的计算负载提升,或者通过网络拥塞,从而使得目标主机和网络陷入不可用的状态,造成拒绝服务攻击。
  • 防范措施
  • 禁用或过滤监控及响应服务。
  • 禁用或过滤其他UDP服务。

2.实践过程


任务:在网络攻防实验环境中完成TCP/IP协议栈重点协议的攻击实验,包括ARP缓存欺骗攻击、ICMP重定向攻击、SYN Flood攻击、TCP RST攻击、TCP会话劫持攻击。


ARP缓存欺骗攻击


Solution
首先这里需要三台机器,我选择的是Kali作为攻击机,其他两台机器作为正常通信的机器(Linux MetaSploitable和SEED Ubuntu)。
注意:三台机器必须在局域网内,你现在应该让三台机器直接桥接外网即可。给出三台电脑的IP和MAC地址如下(用ifconfig指令查看即可,请牢牢记住,后面所有的实践都是用这个环境)。

机器 IP地址 MAC地址
Kali Linux 192.168.3.19 00:0c:29:5d:8c:d9
Linux MetaSploitable 192.168.3.21 00:0c:29:8d:3c:c0
SEED Ubuntu 192.168.3.20 00:0c:29:82:d2:95

1. 用SEED Ubuntu ping MetaSploitable,得到arp缓存表,并用arp -a查看arp缓存表,如图所示,MetaSploitable的IP地址和MAC地址是对应的。
arp2

2. 在Kali上执行指令netwox 80 -e 00:0c:29:5d:8c:d9 -i 192.168.3.21。解释一下这条指令,80是指netwox的80号工具(建议用80而不是33,因为33一次执行,很容易arp缓存表就回去了),第一个为攻击机Kali放入MAC地址,第二个为MetaSploitable的IP地址,执行后就在局域网内广播这条命令。更多的netwox指令参考netwox入门教程。(没有输出请放心,是一直在广播的)
arp3
arp4

3. 现在其实实验已经完成了,下面我们做个验证(验证坑了我)。我们验证的目的是Kali能够监听SEED Ubuntu和MetaSploitable的通信,那么一定要记住:SEED Ubuntu和MetaSploitable关于对方的arp缓存表都要改!并且都改成Kali的MAC地址,这个时候你才能捕获数据包,不然要么是ping不通,要么是arp缓存表回去了。这个时候我们在Kali上用wireshark应该能抓到来自SEED Ubuntu和MetaSploitable通信的数据包。如下图所示。
arp6
arp5

4. 最后,别忘了执行sudo arp -d 192.168.3.21删除arp缓存(其实你取消netwox指令再ping一下应该就回去了)。


ICMP重定向攻击


Solution

环境还是上面的环境,这里就不再说明了。我们首先这里我们主要改SEED Ubuntu的路由表,可以把MetaSploitable放在一边了。

1. 首先在SEED Ubuntu上打开Wireshark来查看数据流量,并在终端ping baidu.com,我们发现SEED Ubuntu桥接之后直接访问外网
icmp1

2. 在Kali主机上执行命令netwox 86 -f "host 192.168.3.20" -g 192.168.3.19 -i 192.168.3.1即嗅探到192.168.3.20(SEED Ubuntu)的数据包时,以192.168.3.1的名义发送ICMP重定向报文,使192.168.3.19(Kali)成为其默认路由,然后观察Wireshark数据包的情况。
icmp2

3. 观察wireshark的数据包和ping的过程,我们发现其访问百度的数据包已经被重定向到192.168.3.19(下一跳是192.168.3.19)。

icmp3
icmp5


SYN Flood攻击


这里选择利用SEED Ubuntu向靶机MetaSploitable发起telnet服务访问,用Kali攻击机攻击靶机的telnet服务端口,并用Wireshark查看。
1. 使用SEED Ubuntu向MetaSploitable发起登陆telnet 192.168.3.21,输入用户名密码(MetaSploitable登陆的用户名密码)。
syn4

2. 在Kali上利用netwox的76号工具对靶机的23号端口进行SYN Flood攻击netwox 76 -i 192.168.3.21 -p 23
syn3

3. 打开Wireshark查看,可以看到攻击机向靶机发送了大量的虚假ip发出的SYN连接请求,这些虚假的连接请求没有MAC地址,无法溯源攻击者的真实身份。同时我们在SEED Ubuntu上进行访问也发现无法访问了。(这个时候你应该发现你主机的风扇转的更厉害了)
syn2

syn5


TCP RST攻击


这里我们同样选择利用SEED Ubuntu向靶机MetaSploitable发起telnet服务访问,用Kali攻击机对靶机发起TCP RST攻击。
1. 使用SEED Ubuntu向MetaSploitable发起登陆telnet 192.168.3.21,输入用户名密码(MetaSploitable登陆的用户名密码)。
syn4

2. 在Kali上利用netwox的78号工具对靶机进行TCP RST攻击netwox 78 -i 192.168.3.21
rst1

3. 回到我们刚才SEED Ubuntu的登陆界面,我们现在连接已经被强制关闭了。当然你也可以用Wireshark查看发送的数据包。
rst2


TCP会话劫持攻击


说明:这个实践应该是最麻烦的一个实践内容,主要还是书上提供的hunt会话劫持工具总是出现no connection available的问题。而且网络上很少有关于这个的问题,所以这个工具的使用也是无疾而终。(可能是端口的设置问题?日后再慢慢了解吧)然后,我开始了下一轮搜素之旅,找到了这个博客TCP会话劫持原理和利用。所以本文还是主要按照这个博客的内容开展我们的实践内容(手动和自动操作)。
1. 和上述的很多内容一样,首先我们将SEED Ubuntu利用telnet 192.168.3.21登陆MetaSploitable。
2. 在Kali上打开Wireshark设置过滤条件tcp.port == 23,然后在SEED Ubuntu中输入ls,回到Kali的Wireshark中查看,会发现有ls的数据包。
ses1

ses2

3. 如果你没有发其他指令,那么这个指令应该就是最后一个包,打开TransmissionControl Protocol 查看以下几个值,源端口、目的端口、Next Seq Num和ACK值
ses3

4. 我们要伪造发下一个包,所以把Next Seq Num作为下一个包的ACK,采用ACK作为下一个包的Seq。获取到信息之后,攻击机使用netwox工具伪造SEED Ubuntu给MetaSploitable发一个tcp包。发送成功后,原来的SEED Ubuntu就会失去连接,同时MetaSploitable会把Kali当作访问者 ,如此实现了会话劫持。
5. 使用指令
netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.3.20 --ip4-dst 192.168.3.21 --tcp-src 40924 --tcp-dst 23 --tcp-seqnum 2 --tcp-acknum 2 --tcp-ack --tcp-psh --tcp-window 64 --tcp-data "68656C6C6F776F726C64"
指令有点长,第一个40是netwox的40号工具,在ip4-src后输入你的SEED Ubuntu地址,在ip4-dst后输入你的MetaSploitable地址,tcp-src表示原端口号(这个是变化的),tcp-seqnumtcp-acknum输入刚才讲解的值,tcp-data是你要发的数据的16进制值,这里的是helloworld的16进制。同样的可以在Wireshark中观察到发送的值。
ses4

ses5

6. 如果你在wireshark上也发现了很多Tcp DupTcp Retransmission,那么你的劫持就是成功的。TCP Dup ACK XXX#X
重复应答#前的表示报文到哪个序号丢失,#后面的是表示第几次丢失,TCP Retransmission是超时引发的数据重传。也就是书上说的ACK风暴
ses6

说明二:通过上面的实验我们基本手动实现了TCP会话劫持的实践,但是还是太过复杂,那个博客说明了一个自动工具,去GitHub上找到了,给大家GitHub地址Shijack。下面的操作就比较容易了
1. 使用指令./shijack-lnx eth0 192.168.3.20 40922 192.168.3.21 23 ,参数为网卡名,源地址,源端口,目的地址,目的端口(注意源端口通过Wireshark查看,是变的)。
2. 同时你也会会和上述相似的情况,SEED Ubuntu和MetaSploitable之间是无法通信的(出现了ACK风暴,甚至SEED Ubuntu直接卡住)。
sess1

3. 这个时候我们利用Kali和MetaSploitable通信(输入指令ls),并利用Wireshark截取数据包,我们发现Kali和MetaSploitable之间是正常通信的。
sess2

至此,TCP会话劫持实践结束!


2.学习中遇到的问题及解决


  • 问题一:在ARP欺骗的时候用ping来验证发现找不到攻击机
  • 问题一解决方案:应该两个的arp缓冲表都要改,在实践中说明了。
  • 问题二:TCP会话劫持实践的hunt无法使用
  • 问题二解决方案:寻找的其他的博客参考,手动实现,当然GitHub上还有很多其他的工具。

3.学习感悟、思考

  • 学习有同学讨论真的很好,可以很快发现自己的错误,不用自己埋头找很久。
  • 善于寻找资源也是非常重要的技能。

参考资料

posted @ 2020-03-29 23:43  20199101解建国  阅读(884)  评论(0编辑  收藏  举报