之所以称为远古时代,是因为下面的分析基于2002,2003年的一个工具,有一个服务端和客户端,可以用各种协议来执行命令。
实验环境
1、两个ubuntu 16.04
2、工具:Tunnelshell 2.3
工具链接:
https://packetstormsecurity.com/search/files/?q=Tunnelshell
直接利用ip协议
被控服务器执行
1 | sudo ./tunneld |
控制服务器
1 | sudo ./tunnel -t frag 10.10.10.2 |
我执行两个命令,分别是id和whoami,抓到的包如下:
这样是直接在ip层上面传数据,清晰明了,但是假如人看的话太明显了,不知道检测设备会不会直接检查ip层上面的数据层,毕竟是02,03年的工具
优点
- 直接使用ip协议,可能检测设备不太会关注
- 这样本地不用监听端口,增强对于本地的隐秘性
改进建议
- 建议对传输的数据进行加密,比如aes,des都可以,密钥可以通过命令行参数设置
通过ICMP协议传输
被控端
1 | sudo ./tunneld -t icmp -m echo-reply,echo |
控制端
1 | sudo ./tunnel -t icmp -m echo-reply,echo 10.10.10.2 |
我们执行命令id,查看数据包,是通过icmp的data部分传输数据
回应
其实回应命令执行结果之前,还回了个跟客户端一样的data,即执行的命令id
优点
- icmp可能检测设备也不太会关注
- 这样本地不用监听端口,增强对于本地的隐秘性
改进建议
- 建议对传输的数据进行加密,比如aes,des都可以,密钥可以通过命令行参数设置
通过TCP协议传输
被控端
1 | sudo ./tunneld -t tcp -p 80,2000 |
控制端
1 | sudo ./tunnel -t tcp -p 80,2000 10.10.10.2 |
同样,也是执行id命令
可以看到是通过tcp协议上的tcp payload传输数据
优点
- 可以看到上面其实他是没有监听端口的,应该是通过抓包实现的,因为返回了RST,ACK这样的端口关闭的包,当然也像上面一样本地不用监听端口,增强对于本地的隐秘性
改进建议
- 建议对传输的数据进行加密,比如aes,des都可以,密钥可以通过命令行参数设置
利用UDP协议
被控端
1 | sudo ./tunneld -t udp -p 53,2000 |
控制端
1 | sudo ./tunnel -t udp -p 53,2000 10.10.10.2 |
数据包如下:
可以看到其实是直接使用UDP协议,一些之后直接接命令或者命令执行的结果
优点
- 可以看到上面其实是没有监听端口的,应该是通过抓包实现的,因为返回了icmp目标不可达的包,当然也像上面一样本地不用监听端口,增强对于本地的隐秘性
改进建议
- 建议对传输的数据进行加密,比如aes,des都可以,密钥可以通过命令行参数设置
总结
其实参考文章的原作者把tcp当作http,udp利用53端口来以为是dns,其实都不太算
我们现在看到的dns是通过域名的信息来通信的,比如TXT查询记录
其实现在很多东西未来规避检测,基本都加密了,webshell管理工具也加密了,这肯定的也是现在及未来的方向,虽然工具是2003年的,但是也值得简单看看
参考
https://www.hackingarticles.in/covert-channel-the-hidden-network/