【SeedLab】MITNICK攻击实验
实验背景
KEVIN·MITNICK可能是美国最著名的黑客之一,他在联邦调查局的通缉犯名单上。在逃亡期间,他开始对破解移动网络产生了兴趣,并需要专门的软件来帮助他做到这一点。这让他找到了圣地亚哥超级计算机中心的研究员TSUTOMU SHIMOMURA,移动电话网络安全方面的主要研究人员之一。他有MITNICK想要的代码。
1994年,MITNICK利用TCP协议中的漏洞和SHIMOMURA的两台计算机之间的受信任关系,成功地对SHIMOMURA的计算机发动了一次攻击。这次袭击引发了两人之间的对决,并最终导致了MITNICK的被捕。这场对决后来被演变成书籍和好莱坞电影。这次攻击现在被称为MITNICK攻击,这是一种特殊类型的TCP会话劫持。
实验目的
这个实验的目的是重现经典的MITNICK攻击,这样学生们就可以获得这种攻击的第一手经验。我们将模拟最初在SHIMOMURA电脑上的设置,然后启动MITNICK攻击,在SHIMOMURA的两台电脑之间创建一个伪造的TCP会话。如果攻击成功了,我们应该能够在SHIMOMURA的计算机上运行任何命令
实验主题
TCP会话劫持攻击
TCP三次握手协议
MITNICK攻击
远程SHELL RSH
数据包嗅探与伪造
实验内容
1. 使用docker容器建立实验环境
在网站Home下载相关的环境安装包,然后再Ubuntu系统中打开。使用命令docker-compose up
完成环境搭建以及容器启动。
2. 配置X-Terminal
使用docker exec -it [container-ID] /bin/bash
命令进入x-terminal
主机,创建.rhost文件,添加trust_server
主机IP地址
1 | su seed |
配置完成后,使用Trust Server
主机进行rsh
登录
1 | su seed |
另外还需要设置arp
长期缓存,因为如果在进行mitnick
攻击时,如果X-Terminal
主机中没有Trust Server
主机的arp
缓存,X-Terminal
会发出arp
报文请求Trust Server
MAC地址,然而Trust Server
由于收到SYN FLOODING
攻击无法给予回复,导致攻击无法继续向下进行。
3. 模拟SYN FLOODING攻击
由于当前主机都可以很好的防护SYN FLOODING攻击,可以直接关闭Trust Server
主机来模拟SYN FLOODING攻击成功。
4. 建立第一个TCP连接——伪造SYN包
令Trust Server
主机rsh远程登录X-Terminal
主机,tcpdump查看包交互过程,如下图,可见10.9.0.5
与10.9.0.6
之间建立了两次TCP连接(10.9.0.5:514 <-> 10.9.0.6:1023
, 10.9.0.5:1023 <-> 10.9.0.6:1022
)
mitnick
攻击实验进行TCP连接过程如下图:
使用python scapy
库构造脚本,伪造SYN包,向X-Terminal
伪造Trust Server
发送SYN包,尝试建立连接。
python
:
1 | from scapy.all import * |
构造ip头以及tcp,注意tcp源端口需要为”1023”,标志位需要为”S”,向X-Terminal
主机发送SYN包。
5. 建立第一个TCP连接——伪造SYN-ACK响应包
发送SYN包后,X-Terminal
会发送SYN+ACK响应包,Attacker
主机需要伪造ACK响应包回复。其中包含了 ip, tcp, data等信息,data数据中包含了touch /home/seed/xyz
命令。
python
:
1 | from scapy.all import * |
进行sniff嗅探X-Terminal
主机发送的SYN+ACK包,根据该包构造ip头和tcp头,设置标志位为”A”表示ACK包,注ack序号应为SYN+ACK包的seq+1
,并添加rsh data数据段,添加命令,命令格式为[port_number]\x00[uid_client]\x00[uid_server]\x00[your command]\x00
。
数据包括四个部分:一个端口号、 一个客户端的用户ID、 一个服务器的用户ID和一个命令。该端口号将用于第二个连接。 客户端和服务器的用户ID在本实验中都为”seed” 。 这四个字段用一个字节0分隔。
6. 建立第二个TCP连接——伪造ACK包
建立第一个连接后,X-Terminal将启动第二次连接,rshd使用此连接来发送错误消息。在本实验中,这个连接不 会被使用。但如果这个连接没有建立,rshd将停止而不执行命令。因此,需要伪造第二个连接来确保命令的执行。
编写另一个程序,嗅探发送到可信服务器9090端口的TCP流量(假设之前使用9090端口)。当嗅探到一个SYN包时,应该用一个SYN+ACK包来响应。
如果两个连接都已成功建立, 则rshd将执行包含在rsh数据包中的命令。 检查/home/seed/文件夹, 并查看是否创建了/home/seed/, 以及其时间戳是否与当前的时间相匹配 。
python
:
1 | from scapy.all import * |
进行sniff嗅探X-Terminal
主机发送第二次TCP连接的SYN包,根据该包构造ip头和tcp头,设置标志位为”SA”表示SYN+ACK包,注意ack序号应为SYN包的seq+1
,seq序号可以随意设计。
进行tcpdump查看包交互过程:
结果检验:
7. 设置后门
为了避免每次侵入X-Terminal都需要发动攻击, 可以在X-Terminal上设置一个后门,这个后门允许攻击者无需输入密码就能在任何时候正常地登录到X-Terminal。实现这个后门需要做的就是将字符串“+ +” 添加到X-Terminal的 .rhosts 文件中,将脚本中data数据段命令修改为echo + + > /home/seed/.rhosts
即可。
python
:
1 | data = "9090\x00seed\x00seed\x00echo + + > /home/seed/.rhosts\x00" |
结果:
成功修改了.rhosts
文件
使用攻击主机进行rsh登录,成功返回日期时间
实验总结
通过本次实验,我了解了当时mitnick进行攻击的具体过程以及实现原理。并且能够简单复现该攻击实验,并且熟练掌握了docker的使用方法。