解码用于加载cobalt strike shellcode的简单.hta加载器过程
2023-12-18 12:2:53 Author: 嘶吼专业版(查看原文) 阅读量:4 收藏

我们将在本文介绍解码用于加载cobalt strike shellcode的简单.hta加载器的过程,接下来用文本编辑器执行初始分析,并使用CyberChef提取嵌入的shellcode,将使用模拟器(SpeakEasy)验证shellcode,使用Ghidra执行一些基本分析。

哈希:2 c683d112d528b63dfaa7ee0140eebc4960fe4fad6292c9456f2fbb4d2364680。将zip文件下载到一个安全的虚拟机中,并在感染密码的情况下解压缩,将显示一个.hta文件。.hta文件本质上是一个带有嵌入式脚本的html文件,我们的目标是定位和分析嵌入的脚本。

由于.hta是一种基于文本的格式,我们可以直接在文本编辑器中打开该文件。

在文本编辑器中打开该文件将显示一小段混淆的代码,后面跟着一个大的base64 blob。

出于分析目的,我们不需要解码初始部分,我们可以通过PowerShell命令的存在和分解的wscript.shell来判断这一点。它通常从javascript执行命令。

使用初始脚本只执行base64 blob的方法,我们可以直接解码base64。如果base64 blob不能解码,可以返回到初始片段进行分析。

可以继续突出显示整个base64 blob并将其复制到cyberchef,现在可以尝试解码它。

将base64内容复制到CyberChef中,可以看到字符之间带有空字节的明文,这通常表示utf-16编码,很容易通过“decode text”或“remove null bytes”删除。

通过在配方中添加“remove null bytes”,可以获得看起来像PowerShell脚本的解码内容。

使用“解码文本”和“utf-16”也可以很好地工作。

这两个选项都会产生一个解码的powershell脚本,可以将其复制到一个新的文本编辑器窗口中。

现在将PowerShell脚本放入文本编辑器中,我们可以继续扫描关键字或任何可能指示下一步操作的内容。

在脚本中间的十六进制字节的大blob,以及大量的api的引用,可用于分配(VirtualAlloc),写入(memset)和执行(CreateThread)内存中的东西。

在脚本的底部有一些小的东西。该脚本休眠60秒,如果初始脚本失败,会尝试切换到64位版本的Powershell。

为了分析十六进制字节,我们可以复制它们并尝试使用CyberChef解码它们,通过复制以下字节并将它们移动到CyberChef来实现。

一旦复制,字节可以用一个简单的“from十六进制”操作解码。在本例中,逗号和0x被自动识别。

我们还可以看到,虽然内容被“解码”,但看起来仍然不太好。

此时,验证我们的假设,即解码的内容是shellcode。一种常见的方法是在shellcode中查找明文值(ip, api名称),这需要做额外的分析。

使用CyberChef,可以通过尝试反汇编字节来验证我们的理论,即内容是shellcode。我们需要将值转换为十六进制,然后使用CyberChef的Disassemble x86操作。

在这里,可以看到字节已经成功反汇编。

1.没有明显的红色部分表示反汇编失败;

2.CLD :这是shellcode执行的第一个常见命令。

还有其他一些指标,如早期调用操作和错误0D操作,这些都是Cobalt Strike shell代码常见的情况。这些模式看起来很奇怪,但在看过一些shellcode示例之后就很容易识别了。

现在,我们可以假设数据是shellcode,并通过尝试执行它来做进一步的验证。

此时,可以继续分析反汇编字节,我们需要对x86指令有所熟悉。尝试并执行代码通常要容易得多。特别是对于较大的shellcode示例。

为了进一步验证数据是shellcode并尝试确定它的功能,我们可以将其保存到一个文件中,并尝试在模拟器或调试器中运行它。

在这种情况下,可以使用FireEye的SpeakEasy工具,在运行SpeakEasy之前,我们可以先下载可疑shellcode的原始字节,确保删除十六进制和反汇编x86操作。

你可以将文件命名为任何你喜欢的名称,本文将其命名为shellcode.bin。

接下来,可以用以下命令在SpeakEasy工具上打开命令提示符。

-t :要模拟的目标文件;

-r :告诉SpeakEasy文件是shellcode;

-a x86 :告诉SpeakEasy假定x86指令。这几乎总是x86或x64,如果其中一个失败,可以试试另一个。

按下enter键,SpeakEasy就可以成功地模拟代码。在这里我们可以看到,为了从51.79.49[.]174:443下载一些东西,进行了许多api调用。

现在,可以安全地假设整个脚本和shellcode的主要目的是充当下载程序。此时,还可以调查到该IP地址的连接,并确定是否成功下载和执行了任何内容。

参考及来源:https://embee-research.ghost.io/malware-analysis-decoding-a-simple-hta-loader/


文章来源: http://mp.weixin.qq.com/s?__biz=MzI0MDY1MDU4MQ==&mid=2247572270&idx=2&sn=528ad740dcbfa1312cead9443a67b4e9&chksm=e873ce4c7e7ee04c61a78bdd6b1685a49d38eac56a6e3c6aa33097a7e89bcfb72d7e34f1f056&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh