用户
搜索

[内网攻防] ICMP隐蔽通信之隧道

  • TA的每日心情
    开心
    2021-6-26 11:05
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]经常看看II

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    18

    主题

    47

    帖子

    912

    魔法币
    收听
    0
    粉丝
    3
    注册时间
    2019-4-17

    i春秋签约作者

    发表于 2021-6-20 18:26:27 54777

    ICMP隐蔽通信之隧道

    一、简介

    x1.png

    ​       ICMPInternet Control Message Protocol缩写,中文译为:互联网控制消息协议,它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。ICMP依靠IP来完成任务,无需端口这点与传输协议UDP、TCP显著不同,因此它一般不用于在两点间传输数据,故通常不由网络程序直接使用(除pingtraceroute 两个特别例子)。

    ​       ICMP通常用于网际协议中发送控制消息,提供可能发生在通信环境中的各种问题反馈,比如返回错误信息或是分析路由。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。常见的ICMP错误信息是TTL值过期,每个路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0,TTL在传输中过期”的消息将会回报给源地址。

    ​       以上为ICMP正常用途,本篇分析重点为ICMP渗透用途,渗透用途有隧道用途和隐藏后门用途,本篇讲隧道用途。

    二、过墙原理

    x2.png

    ​       当攻击者使用各类隧道技术(HTTP,DNS,常规正反端口转发等)均被拦截,常会通过ICMP隧道访问目标主机,以此躲过安全人员或流量设备进行tcpdump的流量审计。

    ​       ICMP隧道是一个比较特殊的应用通信用法。在一般的通信协议里,如两台设备要进行通信,需要IP+Port,而在ICMP协议下不需要端口,最常见的ICMP消息为Ping命令与回复,在网络环境良好情况时每个Ping命令都可收到一个ICMP回复。攻击者可利用该特性,构建特别的ping命令,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙不屏蔽ping数据包),实现不受限制的网络访问。

    ​       当然部分网络设备配置有单向过滤,阻止ICMP请求数据包进入站点,仅允许ICMP通信出站,即防火墙仅单向允许内部设备ping互联网设备。
    ​       类型为8的ICMP包代表request,类型为0的ICMP包代表reply。对此,攻击者把带有命令执行的ICMP包伪装成类型为0的ICMP包,防火墙将误判为ICMP-0-reply包,ICMP数据包成功进入站点。而带有执行结果的ICMP包,攻击者把它伪装成类型为8的ICMP包,防火墙将误判为ICMP-8-request包,ICMP数据包成功进入互联网。

    ​       部分网络设备配置有过滤无应答ICMP,导致隧道掉线,因此攻击者会定期发送空的ICMP请求数据包,以此使得客户端与服务器端的“通信窗口”保持开启。

    三、工具介绍

    1.PingTunnel

    x3.png

    ​       PingTunnel是一款常用的ICMP隧道工具,可以跨平台使用。使用 ICMP 回显请求回复数据包(通常称为 ping 请求和回复)可靠地将 TCP 连接通过隧道连接到远程主机。当网络通信中不允许您将 TCP 或 UDP 数据包发送到互联网,使用PingTunnel,在允许Ping 互联网其余部分的任何计算机,可实现突破TCP封锁,为避免隧道被滥用,可为隧道设置密码。

    2.ICMPTunnel

    ​       ICMPTunnel 作者为 jamesbarlow ,于2016年开发完成。是一款在 ICMP 回显请求响应 (ping) 数据包中隧道传输 IP 流量的工具。 它旨在以半隐蔽的方式绕过防火墙。虽然有几个现有的工具可以实现这种技术,但 ICMPtunnel 提供了更可靠的协议和机制,用于通过有状态防火墙和 NAT 进行隧道传输。但是ICMPtunnel具有流量特征, ICMPtunnel会在所有的 ICMP Payload前面添加TUNL标记来标识隧道。

    四、具体操作

    x4.png

    ​       如上图所示:攻击者通过渗透拿到了网络边界Web服务器(172.16.33.157),发现目标内网有一台PC(192.168.195.129)并开放3389远程桌面,192段密码本已获取,但跳板机无法TCP/UDP出网(172.16.33.138),如果选择正向出网,容易造成业务卡顿,并且通信质量不佳。此时攻击者选择通过ICMP隧道进行远程桌面登陆。

    ​       在Web Server上执行命令,启动PingTunnel

    启动PingTunnel效果如下图所示:

    ​       在Hacker 机器上执行命令,将本地1080端口映射到  192.168.195.129:3389

    执行映射配置,效果如下所示:

    x5.png

    ​       在Hacker 机器上执行RDP命令,连接本机1080端口

    连接远程桌面,效果如下图所示:

    x6.png

    五、流量特征

    ​       使用ICMP隧道将产生大量ICMP数据包,可通过 Wireshark进行ICMP数据包分析,以检测恶意ICMP流量,具体方法如下:

    1.观察数量

    ​       检测同一来源的ICMP数据包的数量,一个正常的ping命令每秒最多发送两数据包,而用ICMP隧道会在很短的时间内产生上千个ICMP数据包。

    x6-2.png

    2.观察大小

    ​       注意 Payload大于64bytes的ICMP数据包,ICMP报文由首部和数据段组成。首部为定长的8个字节,前4个字节是通用部分,后4个字节随报文类型的不同有所差异。数据段部分默认为32字节或48字节。

    一个正常的Ping 报文,如下图所示:

    x7.png

    ​       上图为Linux系统进行Ping请求应答抓包,封装后帧长度为98,IP数据报文长度为84,含20bytes  IP头,ICMP报文为64bytes,这64bytes中含48bytes数据。

    ​       Windows进行ping data部分为 abcdefghijklmnopqrstuvwabcdefghi,共32bytes

    ​       Linux进行ping data部分为  时间数据 + !”#$%&’()+,-./01234567,共48bytes

    3.前后不一致

    ​       寻找响应数据包中的 Payload与请求数据包中的 Payload不一致的ICMP数据包,协议规定,ICMP消息总是包括了源数据并返回给发送者,如响应数据包中的 Payload与请求数据包中的 Payload不一致,则不遵从通信协议规范,视为畸形数据包。

    4.检查标识

    ​       检测ICMP数据包的协议标签,ICMPtunnel会在所有的 ICMP Payload前面添加TUNL标记来标识隧道。

    六、小结

    ​       对于防御ICMP隐蔽通信攻击,彻底消除风险的方法为:在网络边界设备,如防火墙中配置禁用ICMP。当然这需要结合业务考虑。

    ​       如业务需使用ICMP协议,安全设备不能单纯禁用ICMP协议,可考虑监测畸形数据包,判定异常并及时丢弃数。

    ​       ICMP是一个网络层协议,ICMPTCP/IP协议更底层。但ICMP依然是TCP/IP协议簇的一个子协议,报文不能直接传送给数据链路层,依然需要IP协议承载,但也足够特殊。因此ICMP隐蔽通信技术对于红队方向的安全人员而言,去深入了解将非常值得。

    评分

    参与人数 1魔法币 +3 收起 理由
    needc + 3

    查看全部评分

    发表于 2021-6-20 18:31:58
    吊呀                  
    使用道具 举报 回复
    表哥写的真不错!什么时候能带带小兄弟!
    使用道具 举报 回复
    野兽先辈 发表于 2021-6-25 14:59
    表哥写的真不错!什么时候能带带小兄弟!

    大黑客别谦虚,共同学习
    使用道具 举报 回复
    带带弟弟
    使用道具 举报 回复
    谢谢分享,学习了。
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册