破壳而出:全新物联网僵尸网络AuthBot浮出水面

发布时间 2023-08-07

启明星辰与广州大学网安学院发现了一个新的物联网僵尸网络,并将其命名为AuthBot。本文通过对该僵尸网络进行样本技术分析,全面介绍了其执行流程、通信协议、控制命令等细节,以作为各行业及相关企业制定网络安全策略的参考。


2023年7月底,启明星辰在参与国家重点研发计划项目“大规模异构物联网威胁可控捕获与分析技术(2022YFB3104100)”的研究过程中,发现了一个新的物联网僵尸网络家族。在VirusTotal上,大部分杀毒引擎将其识别为Mirai或者Gafgyt。经过详细分析,确认完全没有复用Mirai、Gafgyt的任何源代码。


鉴于样本包含字符串AuthBot,且会加密作为上线数据发送给C2,我们将其命名为AuthBot。AuthBot设计了自定义加密算法用于加密和C2的通信。目前,其功能并不完善,只实现了心跳等有限功能,并不包含DDoS攻击等功能。


有理由相信,我们正在见证一个全新物联网僵尸网络的“破壳而出”。



样本技术分析



目前AuthBot只支持amd64,暂时没发现其它CPU架构的样本。AuthBot采用UPX加壳,并篡改UPX幻数来对抗脱壳。将UPX幻数“YTS\x99”重新改为“UPX!”,即可成功脱壳。



1、执行流程


和大多数僵尸网络不同,AuthBot会首先连接C2,连接失败退出进程。在和C2建立通信之后,才执行其它操作,如修改自身进程名等。这是因为它硬编码的加密字符串需要用到C2返回的密钥来解密。AuthBot的C2地址直接使用二进制进行赋值,而非字符串。



在和C2服务器建立通信之后,执行启动流程:解密字符串资源、发送CPU架构名称到C2服务器、进程名伪装、自拷贝至/usr/bin/BoxBusy。


随后进入循环,执行select函数,接收执行C2下发的指令。需要指出的是,在循环函数里,AuthBot会获取父进程所打开的文件名称。如果所打开的文件名称包含“/proc/”或者“socket:[”,则把父进程名称加密发送给C2,同时尝试kill父进程。这是在尝试检测调试器或者沙箱沙箱环境特征。


2、通信协议


AuthBot和C2的通信协议并不复杂,只需要4轮即可与C2建立通信。AuthBot和C2的通信数据经过两层加密,外层是异或,内层采用其自己实现的数学运算方式加密,具体加、解密算法的伪代码分别如下:


以下是运行样本实际流量:



Step1:Bot→C2


AuthBot生成8到15字节的随机字符串作为XOR密钥,用于后续通信加密。接着异或加密字符串"AuthBot ",把XOR密钥字符串和密文拼接起来,并使用自定义算法加密它们,发送至C2。



以上述截图里的数据为例,“a78f928fa5a799979d9daa908e8f9b28421a160d431e256f”经过内层算法解密后是“7763666375776B696F6F786462636D203616120B37181F49”。



Step2:C2→Bot


C2返回17字节加密数据,经过异或和自定义算法解密后为“Accepted GoAwayMr”。前8字节“Accepted”表明连接C2成功, “GoAwayMr”同样是密钥,用于解密自身加密字符串。



以上述截图里的数据为例,“12ece9f2d5d3faf94704e501c5eec604c1”经过异或解密之后,是“658f8f91a0a49190286b9d65a78dab73a2”。



“658f8f91a0a49190286b9d65a78dab73a2”经过自定义算法解密后正是“Accepted GoAwayMr”。自定义算法解密如下:



Step3:Bot→C2


AuthBot拼接CPU架构字符串“x86_64”和“yarn”,经过两层加密发送给C2。



Step4:Bot→C2


AuthBot向C2发送自身进程的一些权限信息等,如是否对/usr/bin/目录有写权限,是否为root权限运行等。权限数据只经过了XOR加密。XOR解密如下:



其中首字节为是硬编码的\x04,第二字节\x00表示是root权限运行,第三字节是硬编码的\x01,第4字节\x00表示对/usr/bin/目录有写权限。其余8字节是\x00。


至此,AuthBot上线成功,开始等待执行C2下发的指令。目前为止,只收到过C2返回的两字节心跳数据\x76\x63,异或解密后是\x01\x00。心跳数据和控制命令数据都是只有一层XOR异或加密。


3、控制命令


目前,AuthBot只支持包括心跳在内的3类控制命令。


1、IP地址下发:当C2返回的数据长度大于10字节,将偏移1起始的数据解析为ip:port形式的字符串并保存,至多保存4个。该命令目前只用来测试样本对IP的解析是否正确,后续很可能用于解析DDoS攻击目标或回连C2服务器。


2、心跳:当C2返回的数据长度小于等于10字节并且首字节为\x01,则认定是心跳包,直接返回C2相同的心跳包数据。


3、删除IP地址:当C2返回的数据长度小于等于10字节并且首字节为\x00,删除对应已保存的IP地址。


总结


总的来看,AuthBot的功能还很不完善,不包含DDoS攻击功能,也没有下载、shell等其它功能。而且对于非心跳包的另外两类控制命令,很难理解攻击者的真实意图。


不过还是有一些亮点,比如新颖的两次加密,尤其是通过C2返回的密钥来解密自身加密资源。它的代码里也看不出常见僵尸网络对Mirai、Gafgyt代码的复用。


因此,我们认为AuthBot是全新的物联网僵尸网络,但还只是刚刚诞生的初级阶段。我们会持续监控AuthBot新的演变发展。


IOC


C2:

190[.]10[.]8[.]179:8008


MD5:

7fd6f1ffceb010e4607198d1d4a527c3