TRex 嘶吼专业版 git
本文描述了一个在咱们的SSH蜜罐中发现的后门,它生成了一个彻底加密和完整性检查的反向shell,并在蒙特利尔的GoSec 2017上展现过。咱们将该后门命名为Chaos,与***者在系统中给出的名称一致。通过进一步研究,咱们发现该后门是2013年左右活跃的sebd rootkit的一部分。github
由于没法找到任何关于此后门技术细节的文档,咱们决定本身来!算法
今年夏天,咱们有一个项目是在FreeBSD系统中寻找恶意软件,或者至少评估是否存在。为此,咱们使用了FreeBSD jails,它被描述为“chroot on steroids”。咱们的想法是仅使用jails来模拟Intranet结构,这是可行的,由于jails能够在主机上本身分配IP地址。而后,***者会***暴露于互联网的jails,并从那里通往其余jails。不幸的是,没有人能作得这么多,由于典型的***者在乎识到他们碰见FreeBSD系统时会当即离开。脚本化的机器人设法上传了payload,但若是没有Linux,ELF文件将没法运行,这样就发挥不了做用。在这一点上,咱们能够说FreeBSD是一种减小***面很是好的方法,由于没有***者想要面对FreeBSD。固然,若是你已经被黑了的话,此建议无效。shell
当咱们放弃寻找BSD恶意软件时,咱们决定寻找Linux恶意软件。在蜜罐运行几分钟后,咱们获取到了一些。以后,又获取了一些不一样于Gafgyt(LizardSquad)和Mirai的东西。服务器
2017年6月21日,***者使用两个已知属于TOR网络的IP暴力穷尽SSH凭证攻破了咱们的一个受监控系统:89.234.157.254 与192.42.116.16。markdown
像往常同样,***者首先禁用了日志记录,而后检查SSHD二进制文件以及某些特定文件,例如/usr/include/gpm2.h。这样作的目的是确保被攻陷的机器还没有被其余人感染。***者检查的文件一般用于给SSHD漏洞(记录盗取的SSH凭证)打补丁。以后,***者经过下载并安装payload来感染。网络
在第二阶段,***者从http://xxx.xxx.xxx.29/cs/default2.jpg下载了一个假装成jpg的文件。 事实上,该文件是一个.tar文件,.jpg扩展名是为了使它在可能的日志文件或抓取的数据包中看起来更合理。tar包含:ide
一、Chaos (ELF 可执行文件)
二、Client (ELF 可执行文件)
三、initrunlevels (Shell脚本)
四、install (Shell脚本)编码
tar中的Chaos是安装在受害者系统上的实际后门,Client文件是链接到后门的客户端。有关这两个ELF文件的更多细节将在下面讨论,咱们先来看看两个shell脚本initrunlevels与install。install脚本将initrunlevels脚本复制到/etc/init.d,以确保该文件在系统每次启动时都被执行。加密
initrunlevels: 持久性脚本
如上所示,initrunlevels脚本打开8338号端口并检查是否存在某些特定文件。若是不存在,则脚本将这些不显眼的文件复制到它检查的路径中。接下来,该脚本将client复制到/usr/include/cli.h中,并复制Chaos到/usr/include/stabd.h和/usr/sbin/smdb中。 这是为系统上的client和Chaos建立备份。***者还释放并执行了其余文件,以使该系统成为IRC僵尸网络的一部分,在本文中咱们仅调查后门。
如上所述,***者释放了两个文件:Chaos和Client。Chaos是启用反向shell的后门,Client启动Chaos的链接。
口令检查后链接返回
后门的工做原理以下:首先Chaos打开一个原始的TCP套接字,检查传入的数据包是否包含特定的字符串。因为这是一个原始套接字,任何传入打开端口的数据包都将被读取和检查。若是Chaos检测到字符串,则它将链接TCP端口8338上监听的Client。在链接Client后,Client和Chaos交换密钥材料,从中派生出两个AES密钥。他们继续使用挑战—应答身份验证检查密钥协商是否成功,以下所示。
Chaos的身份验证和密钥交换
有趣的是,双方都有相同的两个密钥,用于发送和接收。加密后的口令居然是硬编码的,咱们设法破解并以纯文本形式获取口令。口令在不一样的感染系统中重复使用。后门能够规避防火墙。事实上,任何正常的防火墙都会阻止传入的数据包进入任何没有明确目的而打开的端口。可是,对于使用原始套接字的Chaos,能够在运行现有合法服务的端口上触发后门。 做为一个例子,只暴露SSH(22),HTTP(80)和HTTPS(443)的Web服务器因为服务占用而没法经过传统的后门进入,可是随着Chaos的出现,这变得可能。此外,除非显式指定-w标志,不然经过netstat不能显示原始套接字。
Client从Chaos创建链接后,它会向Chaos发送一个40长的字符串。该字符串做为预共享密钥并按照如下方式生成:
如图所示,预共享密钥由两个块组成,每块用于生成两个密钥中的一个。密钥从块中派生,以下所示:
请注意,这些密钥用于长度为128的CBC模式下的AES,这意味着SHA1的一部分将被丢弃。为确保加密数据包的完整性,生成两个Hash在HMAC中使用。
在 IDA中, 咱们能够清晰地看到AES的CBC 模式:
加密循环
注意到它没有犯重复使用IV的常见错误。密钥派生过程与Chaos二进制的工做方式相同,除了块交换。
交换过程当中的数据包格式以下:
正如咱们所看到的,前两个字节决定payload的长度。size字段和payload均已加密。为标记payload的结束,使用了三个连续的空字节。在分隔符以后,seq字段用于计数并保持数据包的顺序。最后一个字段是确保数据包完整性的HMAC。
每一个通讯数据包不只被加密,并且使用HMAC检查完整性。HMAC以下生成:
内部值是Constant1上的Hash,与size字段,加密的payload,分隔符和序列号链接。 外部Hash经过Constant2和内部Hash生成。
如前所述,这个后门在2013年首次出现,是sebd rootkit的一部分。咱们在hackforums.net上发现了一个帖子,用户声称知道后门是如何公开发布的。听说后门的源代码已经被另外一个蜜罐捕获,“研究人员”不合常理的在这个论坛上发布了源代码,使其可被脚本小子使用。
***者只是简单地改变了后门的名字,让人们认为这是一种新的,而其实是窃取的。
为评估感染数量,咱们使用从客户端提取的握手进行了全网扫描。受害系统的数量很是少,低于150个。如下是受害者的地理分布:
咱们联系了CCIRC,列出了受害系统的IP地址,由他们继续通知CERT合做伙伴和受害者。
Chaos后门很是有趣,由于它使用隐形原始套接字来产生具备完整网络加密和完整性检查的反向Shell。 可是,若是预共享密钥已知,后门的加密算法很容易破解,由于它是以明文形式传输的。
有趣的是:因为***者为传入的数据包打开了8338端口,因此***人员显然但愿在受感染的计算机上使用Client文件。他们会使用受感染的机器做为进一步犯罪的代理,这样就可能能够跨越网络边界。
据Virustotal称,尽管后门已经存在好几年了,但没有防病毒软件检测到这个后门。
在下一篇博客中,咱们将描述使受害系统成为IRC僵尸网络的其余恶意软件。
有关此威胁的最新IoC信息,请参阅咱们的malware-ioc github repository.
文件hashes
Chaos: 0a27b0579702888c3399c6b853acf986beae2a4e
Client: 7f5d3bb5079f9bf077832301615fa6e2e072c4e8
文件系统
警告:下面记录的文件系统组件也是合法的系统文件。在作出结论以前,你须要仔细调查一下。
该组织在/usr/sbin/smdb中安装后门,并将其备份为/usr/include/stabd.h。
/usr/sbin/smdb 是合法的,Samba套件的一部分。为兼容Windows(如文件共享或集成Active Directory)安装Samba。/usr/include/stabd.h是合法的,glibc头文件的一部分,一个纯文本文件,当恶意时它是一个二进制文件。
能够手动检查文件或运行咱们的Yara规则:
yara sedb_chaos.yar /usr/sbin/smdb
yara sedb_chaos.yar /usr/include/stabd.h
系统调查/etc/init.d/runlevels是一个恶意脚本,它将打开防火墙上的端口并执行后门程序。这是恶意软件的持久性机制。
在普通的Linux服务器上监听原始套接字是很是罕见的事情。以root身份运行如下命令来检查系统:
netstat -lwp
它会列出打开监听原始套接字的进程。而后,能够调查进程以评估它是否合法。 若是不知道它是什么,那么多是不合法的,由于监听原始套接字不多见。