针对PHP Web Shell Hexedglobals.3793系列恶意软件分析溯源
2021-05-30 11:40:00 Author: www.4hou.com(查看原文) 阅读量:175 收藏

本文详细介绍了对Hexedglobals.3793系列基于PHP的恶意软件和反混淆过程的研究。Hexedglobals.3793系列恶意软件的变体为:Kidslug,php.obfuscated!, php.malware.GLOBALS.003 and php.malware.GLOBALS.004。

调查背景

我得到了一个WordPress网站的备份以托管在开发区域中,在实际过程中我安装了一个安全扫描程序,并在几秒钟内识别出了名为hexedglobals.3793的签名,感染被嵌入网站的两个单独区域中。

1.png

扫描程序并没有显示太多,它已突出显示正在使用变量编码,并且它是恶意软件使用的可疑特征。但是它确实在检测方面做得很好,如果你有WordPress网站,我建议你安装一个插件以检测此类问题。

分析过程

因此,首先进行一次快速的Google搜索,以了解有关此签名的信息,不过我一无所获。因此,我开始研究代码本身以及可以发现的内容。

2.png

我浏览了一下这个主题,发现MITRE攻击页面在提供有关使用Web Shell的组类型和野外攻击的上下文信息方面非常方便。

经过检查,混淆的Web Shell是攻击者在Web服务器上保持持久性的一种方式。

根据我的初步分析,我能够确定它是一个Web Shell,并且攻击者通过某种不安全因素将其注入了网站。看起来像个文件,但它只是个文件吗?

下面显示了嵌入其中的看似无害的文件,但是,黑客已经将恶意脚本注入了一个乍一看不到的地方。你需要滚动才能看到它。这是我在研究的样本中注意到的一个常见属性,即它们通过在原始代码与其本身之间增加较大的空间而隐藏了代码。在注入的行的末尾与恶意软件的开始之间大约有500个字符的间隔。

3.png

如果识别出签名,并且网站扫描程序可以在服务器上的文件目录中搜索(查找非公共php文件),则网站扫描程序可能会检测到此类恶意文件。我找到的一些样本是由于它们被注入的位置,代码被带到主要的面向公众的页面,就像在网上搜索特征时发现的那样。

有一些非常复杂的web shell可以逃避IDS/ IDPS、日志甚至行为分析。你可以在web服务器日志中寻找可疑的行为,但是攻击者可能会非常狡猾,并通过向服务器发送不被注意的命令来使用不同的方法来隐藏其踪迹。这种行为的示例可以是发送POST请求,或者通过使用用户代理发送命令。

防止它们的一个好方法是首先加强web服务器和客户端代码,这样就不可能有web shell注入。从一开始就没有漏洞确实有助于防止此类事件的发生。

另外,最好通过使用文件完整性监控来破坏持久性。这将有助于发现任何变化。不幸的是,在WordPress网站上,由于插件上经常发生更新,有时未经培训的人有时会很麻烦,因为插件的更新可能会被遗漏。此外,web shell被注入到普通的模板、插件或服务器上被命名为无害的文件中,这使得它们更难被检测到。

混淆会隐藏代码本身并使其唯一,从而使检测变得更加困难,因此不会被签名类型检测所识别。除此之外,它通常被压缩到一行,以使其对执行的操作不太透明。因此,在查看文件时,你可能看不到注入。

有一些在线工具可以提供混淆处理,还有Kali内部的工具(例如Weevley)和其他此类工具(例如FOPO)。但是,它们生成和显示混淆代码的方式与我发现的方式不同。我尝试了一些不同的网站和方法来快速解决混淆问题,但都无济于事,但是我至少掌握了一些初始信息,可以帮助我入门。我开始觉得我需要手动进行混淆处理。

4.png

FOPO混淆代码与发现代码

其他野外攻击

现在,我正在调查的网站受到两次感染,因此我有足够的资源来查找相似之处并与其他网站进行比较。

通过一些Google Dorking和NerdyData.com的使用,我能够在互联网上识别其他受感染的网站。通过搜索{" \x47\x4c\x4fB\x41\x4c\x53 "}的十六进制字符串,我可以找到更多的样本。这确实带来了误报,但也带来了其他类似但不属于同一家族的恶意软件变体。通常这种类型的感染不会在客户端公开。但是,如上所述,由于WordPress引擎将页面整合在一起的方式,我能够找到一些内容。当攻击者注入某些主题页面或插件时,由于该页面是通过CMS显示的,所以它们最终可能在公共页面上可见。

5.png

还有其他网站在其主要位置进行了类似的注入。

你也可以通过GitHub搜索字符串,如“\x47\x4c\x4fB\x41\x4c\x53”。这样网上有很多代码,因为开发人员可能会为了真实的目的使用混淆处理,但是我确实发现了问题。然而,这不是我唯一一次看到这种情况,随着各种插件成为目标,用户有时会向插件所有者抱怨他们已被黑客入侵。

6.png

找到的四个主要样本。

7.png

有一些细微的差异,在方括号内是混淆的代码-变量名称和初始标识号。最初的可识别号码可能是递增的,因为我在同一台服务器上找到499和497。每个恶意软件样本开始时的数字都不一样,并且可能指向攻击者的特定攻击,以帮助他们进行命令和控制。

发现其他变体

如上所述,我没有在原始的带属性名称hexedglobals.3793上找到太多信息,但我在诸如Sucuri的恶意软件签名列表之类的网站中进行了搜索,并手动查看了显示的混淆样本片段。我能够识别出似乎来自同一家族但名称不同的恶意软件。它们在混淆代码的方式上具有相同的模式。我还在堆栈交换中发现了类似的内容,并进行了另一个混淆处理。

我注意到,有时十六进制字符串没有为x4fB大写,因此是x4fB {" \x47\x4c\ x4fB \x41\x4c\x53 "}。

以下是我发现的其他属性名称:

hexedglobals.3793 | Kidslug | php.obfuscated! | php.malware.GLOBALS.003 | php.malware.GLOBALS.004

撰写本文时,我在网上进行了一些搜索,发现了一些有趣的内容。看来卡巴斯基在被攻击的服务器上发现了Code29.php和Proxy87.php的类似文件。

8.png

关于文件code29.php和proxy87.php。我做了一些调查看看有多少网站有这些文件。似乎有相当多的文件具有其他类似的名称。我在回溯设备上进行了搜索,发现来自\etc目录的其他文件具有相同的编号格式。

9.png

9.2.png

10.png

针对澳大利亚律师的Wayback Machine输出

攻击过程

它使用自己的字母来调换代码中需要的字符,这是为了帮助混淆和阻止逆向工程的尝试。它还在代码中添加了额外的变量,需要删除这些变量才能显示其真正的本性。

我从许多行代码开始,似乎使用了很多十六进制来覆盖它的结构、变量和行为。在美化代码之后,它确实开始变得更有意义,并且有可能开始识别功能。

11.png

手动将十六进制解码成相关变量名,它的结构开始变得明显。

$ GLOBALS变量的使用有很多重复项,还似乎是使用具有编程功能的字母来通过代码中调用的数字查找字母的位置并进行替换。

12.png

黑客获取代码后会进行如下操作。

13.png

一旦字母表被破译,就可以清楚地看到变量和函数的定义。执行了另一次查找和替换迭代。起初,这是一个缓慢而艰难的过程,需要反复试验,但正如前面提到的,我现在创建了一个工具来帮助自动化这个过程,将时间从几小时缩短为几秒钟!

这是一种非常简单但有效的方法,但是看来攻击者已经简化了通信过程。

通过研究,攻击者只能使用加密密钥来访问后门,然后他们才能通过发布请求中发送的cookie来发送命令。

这种后门称为非对称后门,即使在公开场合,攻击者也将是唯一使用它的人。

清除混淆后,我只能了解部分发生的事情。因此,我在下面记录了原始版本的外观和标准化版本的外观。在MKorostoff Github的帮助下,我可以开始构建一个更好的图片。用红色突出显示的值显示这些值。假设MKorostoff可能有cookie、日志或其他方法来帮助混淆函数变量。

14.png

MKorostoff Github提取

15.png

@kielwadner在Weeveley Web Shell上的Sans DFIR峰会上作了介绍,在他的幻灯片上,我们可以看到Weeveley在混淆加密过程中承担着类似的XOR功能。

16.png

此外,在看了卡巴斯基的发现后,他们还将类似XOR的函数命名为函数,这表明他们也注意到了这种行为,不幸的是,他们没有提供进一步的分析。

17.png

下一部分将处理加密机制,Mkorostoff评论说它将执行了两次加密机制。

18.png

我认为使用cookie是代码中最聪明的部分。

19.png

20.png

如果我们查看Mkorostoff的注释和代码,我们可以看到他用新的变量名替换了一些变量名。这些用绿色标出。$encrypted_text现在被命名为$attack_payload。$decryption_key是cookie的名称。

这是因为攻击有效载荷是通过cookie发送的。cookie名称用于进行解密,一旦cookie值被解密,它就包含了攻击有效载荷。这有助于验证机制。

21.png

22.png

其他恶意软件(例如WSO)也具有类似的行为,Sjoerd撰写了一篇很棒的文章,介绍了如何绕过webshell代替身份验证。本文介绍了他所审阅的代码如何将Cookie与MD5配合使用,以确定正确的身份验证。

代码的最后一部分有一个函数,如果它接收到“i”,它将显示服务器信息,如php版本。攻击者这样做可能是为了帮助其他事情的自动化。这确实让我想知道,如果现在对PHP 7+版本的服务器PHP版本进行升级,是否某些php C&C工具仍然可以正常工作以及需要多长时间才能更新。当查看B374K webshell时,它说它支持4.5和版本5。在issues选项卡中,您可以看到有人在php 版本7上成功地使用它。但是github页面在很长一段时间没有更新。在接下来的几年里会发布php的未来版本,看看在这个过程中会更新哪些工具。

23.png

最后是评估攻击有效载荷和行动,Mkorostoff将“e”定义为执行命令,将“d”定义为有效载荷。当攻击者提供正确的访问密钥时,它将发起攻击。

24.png

可以从集体样本中建立任何签名吗?

在分析过程中注意我注意到了以下几个特点:

注入恶意软件之前,大约有500个字符的空白间隔;

全部重复使用全局变量;

它们都使用了相同的十六进制替换混淆技术;

所有文件在感染文件的开头都有一个分配的编号,作为某种标识符;

都有相同的不对称后门与攻击者交互的聪明方法;

以下是两个链接,可以帮助你在未来删除和防止出现本文所讲的类似攻击:

https://codex.wordpress.org/FAQ_My_site_was_hacked

https://codex.wordpress.org/Hardening_WordPress

总结

尽管从本质上来说攻击原理很简单,但是攻击者使用了聪明的身份验证机制来提供一个非对称后门来与其进行通信。服务器上已经发现了类似恶意软件的攻击痕迹,文件名是code29.php和proxy87.php。在搜索这些文件的过程中,野外似乎已经出现了类似的感染。

本文翻译自:https://labs.detectify.com/2019/05/24/investigation-of-php-web-shell-hexedglobals-3793-variants/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/7Yqy
如有侵权请联系:admin#unsafe.sh