LokiBot 变种“HIJACKED” 恶意软件分析报告

1.文章背景

作者写此文目的仅为技术性分享,请勿滥用,后果自负。
一年前,作者发表了一篇与LokiBot间谍软件有关的文章。写那篇文章的原因是:有安全分析师将一些未知样本与与NotPetya进行了关联,但在作者分析完这些样本后,发现它们本应是LokiBot,是完全与NotPetya无关的。报告地址为:
http://reversingminds-blog.logdown.com/posts/2000422-not-petya-not-related-files-in-other-words-loki-bot
在几个月前,由于LokiBot在多个malapan活动中被利用,作者又写了一篇文章,在这篇文章中记录了有关远程控制的一系列技术细节,以及制作此恶意软件的作者信息。
经过深入分析,作者得出了原始LokiBot样本已被第三方组织修改的结论。目前,这个组织正在售卖此变种病毒,并且此变种病毒在多个恶意活动中被利用。

 

2.样本

此次研究有大量样本,但在此文中所记录的图像及数据均与目前变种的LokiBot样本相关。
LokiBot的样本相关MD5值为:
463469a131f368a0f2215b0ff6146454

 

3.攻击流程

LokiBot像许多恶意软件系列一样,通过恶意电子邮件进行分发。 这些钓鱼邮件没有固定模式,但它们的行为方式类似,且最终均下载了LokiBot恶意样本。具体感染方式如图1所示。

分发不同附件的各个钓鱼邮件截图如下:

 

4.历史销售及行动链

Lokibot第一次出现是在2015年中期,用户可在地下论坛中购买到定制样本。

售价为300$。

供应商的昵称是lokistov或Carter,此人在地下论坛中较为知名,其电子邮件为carter@jabster.plcarter@exploit.im
如图8所示的那样,此恶意软件每周都会更新。

随之,价格也有所上升。

LokiBot从2016年至2017年一直在持续更新,但自从LokiBot v2发布后,论坛上就不再更新lokistov了。在圣诞节时,甚至还有优惠活动。

在2018年,用大概80美元的低价就可以购买到样本(大约是由于源码泄露等原因)。如今,很容易就可以找到如何设置LokiBot控件面板的YouTube教程。

 

5.技术细节摘要

LokiBot的攻击流程图是线性的。一旦它进入系统并安装后,LokiBot就会在这个受感染的用户系统中收集用户已安装的各个应用中的信息。
LokiBot没有使用任何的注入技术或是复杂的执行流程。因此,与Dridex等其他恶意软件相比,它的行为更易于分析。

LokiBot的目的在于信息窃取,它对于不同的手机模块进行不同的入侵方式,一旦当其收集齐所有所需材料后,LokiBot会通过HTTP协议将它们压缩在数据包中发送到C&C。

图14所示流程的具体的步骤是:
1) LokiBot病毒通过不同的渠道入侵进系统。
2) LokiBot解压缩并执行有效载荷。
3) LokiBot能够窃取像FTP客户端,Web浏览器和SSH
客户端这样程序的凭证。
这些函数在循环中被调用,并且将被盗取的数据储存进缓冲区。

4) LokiBot在系统中拥有永久权限,此权限可以使攻击
者修改注册表项,并且也可以将自身以指定的命名形式复制到%APPDATA%下的指定文件夹中。每台被感染的机器都有唯一的标识符,此标识符是由MachineGuid MD5生成的,可当互斥锁使用,也被用做了bot ID(被感染机器的唯一标识符)。

最后,LokiBot创建一个注册表项,指向它之前复制到%APPDATA%内的特定文件夹。
5) LokiBot等待c&c的新命令,并创建一个用于解析
c&c服务器响应的新线程。

 

6.静态配置

像几乎所有恶意软件系列一样,LokiBot也有静态配置。 这种静态配置包括支持模块和远控URL。这些URL会接收被窃取的数据信息,并且会向bot病毒发去新的指令。
在分析的大多数样本中都有5个远控URL,其中4个用了他们以前从未使用过的3重DES算法进行保护。 第5个URL仅进行了简单的XOR进行保护。 LokiBot尝试了与最后一个仅进行亦或运算的网址进行通信。
所有加密的字符串都受3重DES算法保护,如进行远控行为的四个URL。 每次LokiBot都需要对等解密加密的字符串。

在其他参数中,这部分用来接收解密的缓冲区并存储三重DES的解密密钥。
解密字符串的步骤是:

Decrypt 3DES Buffer返回解密字符串的大小。 被解密的缓冲区存储在以它作为参数接收的相同地址中。
除了远控服务器的网址,LokiBot还使用3重DES算法保护了更多字符串,因此不同的函数都会对Decrypt3DESstring进行调用,且此版本中的Decrypt3DESstring始终返回相同的字符串。

在分析过的所有样本中,受3重DES保护的进行远控的四个URL都是固定的,且它们从未使用过。 但是在每个LokiBot样本中,受简单xor算法保护的URL地址却都是不同的。

 

7.可疑行为

可疑行为列举如下:
1) LokiBot用作远程控制服务器的URL一共有五个,分别是:四个受强保护(三重DES)的URL和一个受弱保护(XOR)的URL。
2) 3重DES保护的URL在此版本的所有LokiBot示例中始终相同。 此外,这些网址从未使用过。

3) 如上所述,LokiBot有一些受3重DES算法保护的字符串,其中包括4个远控网址。 每次调用Decrypt3DESstring时,它都会返回相同的字符串。 返回的字符串是受XOR保护的URL。 第一次调用Decrypt3DESstring,它会返回解密的url,但第二次调用它(偶数次),它返回受XOR保护的url。 LokiBot不检查返回的URL是否是解密的,它也会尝试连接到加密的URL。

4) 因为当LokiBot尝试在系统上永久存在时,Decrypt3DESstring总是返回相同的字符串,因此它调用Decrypt3DESstring来获取注册表项。在LokiBot的最新样本中,没有发现需要其永久存在的代码,因为当它试图获取自动运行注册表项时,Decrypt3DESstring的返回值是受XOR保护的URL。

5) 在分析LokiBot PE Headers时,发现几乎所有最新的LokiBot样本都有一个名为“x”的部分具有可写权限。

这种行为看起来好像是程序中有错误,于是作者决定更深入地分析Decrypt3DESstring函数和“x”部分的内容。

7.1可疑行为的深度分析

如上所述,用于解密字符串(url或注册表项)的调用顺序是: Decrypt3DESstring → Import3DESKeys + Decrypt3DESBufer → CryptDecrypt
Decrypt3DESBufer使用Windows API函数CryptDecrypt来解密受3DES算法保护的缓冲区,但它不会返回3DES解密缓冲区作为输出结果。而是Decrypt3DESstring返回3DES解密的缓冲区。 这应该是此函数的理想行为,但如前文所述,每次调用Decrypt3DESstring时,它都会返回带有用XOR加密或解密过的url。
下图显示了输入缓冲区是如何解密使用了3DES加密过的0x20大小的URL。

这种行为很少见,因为3DES输入长度为0x20,但输出值长度较大。由此需分析Decrypt3DESBufer中的算法。

7.1.1Decrypt3DESBufer部分

此部分正是解密和返回缓冲区的位置。

绿色框内的代码负责使用CryptDecrypt Windows API函数解密3DES缓冲区。 红框内代码负责解密受XOR保护的网址,蓝框内代码是功能的结尾部分。

接下来的图片显示了红色框的代码如何覆盖受3DES保护的网址。

这就是为什么每次LokiBot尝试使用Decrypt3DESstring解密缓冲区时,它总是返回受XOR保护的URL的原因。那么,想要解密的字符串的性质是受3DES解密的URL还是用于长久留存的注册表项这件事就变得无关紧要了。如果是这样的话,那么这种行为的存在是个bug吗?
下图显示了LokiBot调用CryptDecrypt函数之后如何从0x403717跳转到0x4146F5以及从0x4146F5跳转到0x4A0000的。

0x4A0000地址是 “x”部分的开头。 此外,受XOR保护的URL和负责解密该URL的代码均位于“x”部分(红色框)。这种行为就像有人hook了那个功能一样,像是有第三个人手动修改了代码,让远控URL修补其自定义远控URL。

 

8.样本溯源

由于此功能被第三方修改过,几乎可以判定此软件不是由编译器直接生成的。目前所有版本几乎均对时间戳进行了编辑。

目测是修改原始二进制文件的作者使用相同的二进制文件创建了带有自定义控制面板的新Loki Bot示例(使用XOR保护的URL)。于是对其早期版本也进行了追踪,最后,发现了一个在2016年1月的二进制文件(d13d88b27887a5ba9c00dbe309873298),比LokiBot版本提前了6个月左右。

 

9.LokiBot构建器

最新的LokiBot样本有一个名为“x”的新部分,这个部分是被xor加密的url,用做控制面板网址。牢记这一点,创建一个产生新的LokiBot的构建器就非常容易了。(原文中具体介绍了含有现版本与历史版本的具体差异对比、如何生成新版本的构建器、当前软件(HIJACKED)的缺陷,由于此篇译文旨在对样本进行分析就未曾翻译,感兴趣的同学可以查看原文)

 

10.结论

截止到目前为止,最新且分发最多的样本是LokiBot v.1.8的修补版本。第三方(可能是fuckav.ru论坛的成员)修补了LokiBot的原始代码,添加了“x”部分,实现了使用XOR保护的URL的方法。 负责解密字符串的函数被hook住了以便跳转到“x”部分并始终返回受XOR保护的URL。由于用于生成新LokiBot样本的原始样本始终是相同的,这些后续样本也总是使用相同的加密方式加密了4个URL。 原作者由此也写了查杀此病毒的工具,代码地址为:https://github.comdd00rt,更详尽的报告记录在了:https://www.sans.org/reading-room/whitepapers/malicious/loki-bot-information-stealer-keylogger-more-37850

(完)