智慧印刷工坊

智慧印刷工坊

潜伏四年,利用PRISM后门的攻击者

admin 192 66

众号:渗透师老A
专注分享渗透经验,干货技巧.

ATT的安全研究人员最近发现了一组隐蔽性极强的ELF可执行文件,它们在VirusTotal上的杀软检出率很低或为零。

在分析样本后,ATT已将它们确定为多个攻击者在多次攻击行动中使用的开源PRISM后门的修改版。

深入分析了使用这些恶意软件的攻击活动,在长达三年半的时间内这些攻击者仍然保持活跃。

最早的攻击行动中的样本出现在2017年11月8日。


WaterDrop分析

WaterDrop的变种很容易识别,它包含一个名为xencrypt的函数,该函数使用硬编码的单字节0x1F密钥执进行异或加密。

从WaterDrop变种的第7版开始,恶意样本也包含纯文本字符串WaterDropxvXstarted,其中X是恶意样本的版本号。

到目前为止,已经观察到版本1、2.2和3使用PRISM命名,而版本7、9和12被命名为WaterDropx。

WaterDrop使用agent-waterdropx作为User-Agent进行HTTP协议的CC通信,CC使用域名的子域名。

尽管这些都是非常明显的特征,但攻击者仍然保持了在VirusTotal上极低的检出率,这可能是因为攻击行动的规模较小。

攻击者在2017年8月18日注册域名。截至2021年8月10日,该域名仍在使用。

除了PRISM的基本功能外,WaterDrop还额外引入了异或加密与定期轮询CC服务器的功能。


恶意软件与CC服务器的通信是纯文本HTTP协议,且所有版本的恶意软件都使用了agent-waterdropx作为User-Agent。

一些变种还会在以root权限执行时加载内核模块。


版本进化

PRISMv1

第一个版本的样本就是使用作为CC域名的攻击者使用的,他们的User-Agent相同。

与公开的PRISM相比,该版本创建了子进程,该子进程不断向CC服务器轮询要执行的命令。

curl-A'agent-waterdropx'';act=touch'

第一个版本的样本没有对恶意样本进行任何混淆、加壳或者加密。

2.2版本的PRISM开始使用异或加密来处理敏感数据,例如使用的shell命令等。

单字节密钥硬编码为0x1F,该密钥用于发现同一攻击者的所有样本。

对于这个版本的恶意软件,初始的CCURI请求格式是:

/?v=2.2act=touch

PRISMv3

3版本的PRISM与2.2版本基本相同,额外多了BOTID被保存到/etc/.xid。


初始请求格式为:

/?v=3act=touchxid=

PRISMv7

Waterdropv7引入了内核模块的使用,如果进程具有root权限,则使用insmod安装。安全分析人员暂时无法确定此Payload的用途。

其余代码与PRISMv3相同,仅更改了硬编码版本号。其初始请求格式为:

/?v=7act=touchxid=

PRISMv9

延续之前版本的风格,Waterdropv9的变化微乎其微。

在这个版本中发现的唯一变化是,使用BOTID作为ICMP密码来生成反向Shell,而不是使用硬编码的ICMP密码。

初始请求格式为:

/?v=9act=touchxid=

PRISMv12

Waterdropv12与其前序版本几乎相同,但增强了后门的稳定性。

其初始请求格式为:

/?v=12act=touchxid=
恶意软件家族PrismaticSuccessor

域名可解析为由另外12个域名共享的IP地址。

一些存在重叠的域名是已知的PRISM的CC域名,但也与几个其他恶意样本存在关联。

特别是,观察到与。

在这个存储库中,可以观察到以下文件:

由于攻击者使用公共GIT存储库来托管其恶意软件和基础设施信息,可以查看历史数据观察其演变。

例如,我们可以使用以下命令收集参与者用作CC服务器的所有IP地址:

$|grep"^+"|grep-v"++++45.199.88[.]86+154.48.227[.]27+207.148.118[.]141+154.48.227[.]27+165.22.136[.]80+154.48.227[.]27+156.236.110[.]79+43.230.11[.]125+172.247.127[.]136+127.0.0[.1]+192.168.3[.]173+192.168.3[.]173:80+192.168.3[.]173+118.107.180[.]8+[.]me+[.]me:80+192.168.3[.]150:80+192.168.3[.]150^80+192.168.3[.]150^+^192.168.3[.]150+^192.168.3[.]133$shasum-a256*9330188giteeabee866fd295652dd3ddbc7552a14953d91b455ebfed02d1ccdee6c855718dgit(1)3a4998bb2ea9f4cd2810643cb2c1dae290e4fe78e1d58582b6f49b232a58575agit(2)3366676681a31feadecfe7d0f5db61c4d6085f5081b2d464b6fe9b63750d4cd8git(3)cc3752cc2cdd595bfed492a2f108932c5ac28110f5f0d30de8681bd10316b824git(4)baf2fa00711120fa43df80b8a043ecc0ad26edd2c5d966007fcd3ffeb2820531git(5)eb64ee2b6fc52c2c2211018875e30ae8e413e559bcced146af9aa84620e3312fgit443d1d65b9d3711871d8f7ad1541cfbb7fa35ecc1df330699b75dd3c1403c754278git5377ddc6be62724ca57ff45003c5d855df5ff2b234190290545b064ee4e1145f63gitest1de9232f0bec9bd3932ae3a7a834c741c4c378a2350b4bbb491a102362235017hostname7ed15e59a094ca0f9ccac4c02865172ad67dcfc5335066f67fe3f11f68dd7473ps1eb6973f70075ede421bed604d7642fc844c5a47c53d0fb7a9ddb21b0bb2519awm6f983303bb82d8cc9e1ebf8c6c1eb7c17877debc66cd1ac7c9f78b24148a4e46wm(1)e4fe57d9d2c78a097f38cba7a9aad7ca53da24ecbcad0c1e00f21d34d8a82de4wm32b08d48cc12c6afa5821a069bd6895175d5db4b5a9dde4e04d587c3dec68b1920wmgithub

按大小进行分组,可以发现大约15K的样本是PRISM后门,而大约1.1MB的样本是另外的恶意软件。

攻击者在2019年7月16日提交了自定义implant,该恶意软件使用修改版的UPX加壳。

恶意软件明显变大是由于二进制文件静态编译进了libcurl,ATT将这个恶意软件家族命名为PrismaticSuccessor。

分析可知,配置由两个URL组成:

执行后会尝试加锁/var/lock/来当作互斥量。

接下来,恶意软件解密包含进程名称的字符串,该字符串用于覆盖argv。

请注意,aMcwfkvf变量包含[mcwfkvf]值,该值在src中被解密为[kauditd]。

解密使用ROT13,密钥为-2。这个ROT13只处理大小字母,不处理符号和数字。

接下来,恶意软件通过子进程进行多任务处理。

某个子进程会打开一个硬编码CC服务器的反向Shell会话,配置中最多有三个CC地址(、和)并使用ROT13加密。

服务器还需要使用密码进行回复,以便成功建立反向Shell。

恶意软件会计算回复缓冲区的MD5哈希值,并将其与硬编码值ef4a85e8fcba5b1dc95adaa256c5b482进行比较。

无论主CC服务器是否成功联系,都会进行通信。

某个子进程通过GitHub获取CC主机和端口,并打开反向Shell。

生成Shell的函数与PRISM源代码很相似,但不完全相同。

某个子进程跳转到Shellcode异或解密,硬编码的8字节密钥:

构建的命令如下所示:

在StackOverflow上也能发现有用户抱怨被攻击,与之相符。

其他变种

我们也观察到其他攻击者使用PRISM后门进行攻击。

然而,在大多数情况下,攻击者者会原样使用原始的PRISM后门,而不进行任何重大修改。

某种程度上说,这也阻碍了我们正确跟踪攻击者的攻击行动。

结论

PRISM是一个开源的、简单的后门。它的流量是清晰可辨的,恶意文件很容易被检测到

检测方法IOC