解码用于加载cobalt strike shellcode的简单.hta加载器过程

admin 2023年12月19日09:30:51评论36 views字数 2243阅读7分28秒阅读模式

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

使用文本编辑器进行分析

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

解码Base64

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

解码用于加载cobalt strike shellcode的简单.hta加载器过程

PowerShell脚本分析

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

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

解码十六进制字节使用CyberChef

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

解码用于加载cobalt strike shellcode的简单.hta加载器过程

用CyberChef验证ShellCode

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

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

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

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

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

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

通过在模拟器中执行来验证ShellCode

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

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

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

-r :告诉SpeakEasy文件是shellcode;

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

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

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

解码用于加载cobalt strike shellcode的简单.hta加载器过程

原文始发于微信公众号(嘶吼专业版):解码用于加载cobalt strike shellcode的简单.hta加载器过程

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月19日09:30:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   解码用于加载cobalt strike shellcode的简单.hta加载器过程http://cn-sec.com/archives/2313491.html

发表评论

匿名网友 填写信息