此前,Akamai 的安全研究员披露了 KmsdBot 僵尸网络,该僵尸网络主要通过 SSH 爆破与弱口令进行传播。在对该僵尸网络的持续跟踪中,研究人员发现了一些有趣的事情。
C&C 控制
对恶意活动来说,最致命的就是夺取对 C&C 服务器的控制。研究人员修改了 KmsdBot 的样本文件,使其能够在受控环境下进行通信。
研究人员向恶意软件发送自己的命令来测试 KmsdBot 僵尸网络的功能与攻击特征。有一天,在攻击者发送一个格式不正确的命令后,恶意软件就彻底崩溃。这种自杀式的行为在网络安全界可不多见,研究人员进行了一番调查。
按图索骥
研究人员通过检查 sys.main.connect() 函数并输出反汇编代码,来确定存储 C&C 服务器的 IP 地址与端口的代码。
sys.main.connect() 函数的反汇编
C&C 服务器的字符串存储在内存地址 0x00632f19,将其修改为受控环境的 IP 地址。就能够像 C&C 服务器一样发送攻击指令。
改写 C&C 服务器地址
改写后的 C&C 服务器是开放端口 57388 的 192.168.0.31。在这台主机上使用 Netcat 来模拟 C&C 服务器。
期间,发现僵尸网络在收到攻击者下发的格式错误的指令后就停止运行了。命令为:
!bigdata www.bitcoin.com443 / 30 3 3 100
可以看到域名与端口之间直接连接,且恶意软件的代码中也没有内置校验命令格式是否正确的功能。
格式错误的命令将会导致 Go 语言开发的二进制文件直接由于“索引越界”而崩溃,错误的格式产生参数数量的错误。使用受控环境也能够复现这一问题:
复现重新发送格式错误的指令
恶意软件崩溃
格式错误的命令会导致与 C&C 服务器通信的所有恶意软件都崩溃,导致整个僵尸网络终止运行。由于该僵尸网络并没有任何持久化功能,唯一的方法就是重新构建,无法直接恢复。
结论
在网络安全领域很少听到此类情况,在这个被 0day 漏洞和各种告警折磨的精疲力竭的世界,如果由于攻击者的失误就能清除威胁也不失为一件好事。KmsdBot 僵尸网络一直在攻击大型的奢侈品公司与游戏公司,攻击者以后可能会更加小心和注意。