DecoyMini 技术交流社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4301|回复: 0

[样本分析] Lazarus 使用泄露的黑客团队工具

[复制链接]

172

主题

34

回帖

30

荣誉

Rank: 9Rank: 9Rank: 9

UID
2
积分
339
精华
1
沃币
2 枚
注册时间
2021-6-24

论坛管理

发表于 2022-12-20 15:02:00 | 显示全部楼层 |阅读模式

背景


大约一周前,我发了一条非常棒的推文来取笑这篇博文。



2022 年 9 月 12 日,一位韩国用户向 VirusTotal 提交了以下加密货币主题的 CHM 文件。这让我很兴奋。ZScaler 在 4 月份的一次非常相似的活动中写了一篇文章。



技术分析


我们从编译的 HTML 帮助 (CHM) 文件开始,它本质上是一种在桌面上本地显示 HTML 的方式。由于 CHM 文件只是存档,因此可以使用 7-Zip 对它们进行反编译 (?),以便我们查看捆绑的内容。如果受害者打开 wallet.chm,他们将看到以下关于比特币的文章 (已翻译):



提取捆绑内容后,可以看到许多文件,最重要的是:page_1.html 和 src 目录。



上图中显示的内容实际上只是 page_1.html 的渲染版本,与任何其他 HTML 文件一样,它可以执行 JavaScript。在 page_1.html 的末尾,我们找到了一些打包的 JS:



这个特定的 JS 打包器已经在许多 NK 属性样本中被注意到,并且解包起来很简单。可以简单地打印解压后的结果,而不是返回解码后的函数。



美化后:



函数 jmpof09fds() 获取 CHM 文件在磁盘上的位置,为下一阶段的写入做准备。变量 jdeDc05a 只是一个 URL 编码脚本,解码后是反编译 wallet.chm 以将 hkcmds.exe 暴露到磁盘的快捷方式:



在图 4 中的 JS 之后,还有一些代码可以执行捆绑包中包含的文件 hkcmds.exe。



至此,我们完成了 CHM 文件,因为第二阶段的所有准备工作都已完成,现在可以继续分析 hkcmds.exe。

将二进制文件放入 DetectItEasy,结果表明它是一个没有加壳的 C/C++ 二进制文件。不需要额外的步骤,可以继续在 IDA 中进行分析。



IDA 帮助我们识别 WinMain,所以我们从那里开始。首先跳出的是一些被输入 sub_4018A0() 的混淆字符串。



检查二进制文件中的其余字符串,我们注意到有大量类似的混淆字符串。就像我们上面看到的一样,它们都是由 sub_4018A0 引用的。在快速调试过程中,可以看到 sub_4018A0 奇迹般地返回了一个正常的 WinAPI 函数调用!有趣的是,这些行之间有很多相似之处,这意味着它可能发生了一些简单的反混淆。

  1. MpdbmBmmpd
  2. HfuMbtuFssps
  3. Qspdftt43Ofyu
  4. Npevmf43Ofyu
  5. Npevmf43Gjstu
  6. Qspdftt43Gjstu
  7. DsfbufUppmifmq43Tobqtipu
  8. HfuQspdBeesftt
  9. GjoeGjstuGjmfB
  10. HfuFowjsponfouWbsjbcmfB
  11. HfuGjmfJogpsnbujpoCzIboemf
  12. MpbeMjcsbszB
  13. Qspdftt43OfyuX
  14. Qspdftt43GjstuX
  15. GsffMjcsbsz
  16. HfuDvssfouQspdftt
复制代码

为了好玩,我将一些字符串扔进谷歌并遇到了这个 ...... https://github.com/hackedteam/co ... /obfuscated_calls.h 和混淆函数调用的所有映射。像一个好的 APT 一样利用 Hacking Team 植入程序。



这是一个很棒的发现,因为 repo 包含我们要逆向的二进制文件的源代码!就函数混淆而言,它最终只是将所有字符移动 -1。假设我们正在逆向的二进制文件只是这个 repo 中的 RCS (远程控制系统) 是一个合理的假设,但存在一些不一致之处。

为了让这个过程更容易一些,我写了一个快速的反混淆脚本来修复 IDA 中的函数调用。

  1. import idc
  2. import idautils
  3. import idaapi

  4. def deobfuscate(obfuscated) -> str:
  5.     return "".join([chr(ord(i)-1) for i in str(obfuscated)])

  6. def iterate_strings(start_addr, end_addr):
  7.     for i in idautils.Strings():
  8.         # Check if the string is within the specified range
  9.         if i.ea >= start_addr and i.ea + i.length <= end_addr:
  10.             # Get the string content
  11.             print(f"String at {hex(i.ea)}: {deobfuscate(i)}")
  12.             idaapi.patch_bytes(i.ea, bytes(deobfuscate(i), 'utf-8'))

  13. def main():
  14.     start_addr = 0x00411A68 # Start address of obfuscation strings
  15.     end_addr = 0x0041322E   # End address of obfuscation strings

  16.     iterate_strings(start_addr, end_addr)

  17. main()
复制代码

就相似性而言,WinMain 中传递给新线程的函数 sub_401260 与 HM_ClipBoard.h 中的 PollClipBoard 相似。考虑到反编译中的一些结构怪异,这两个具有非常相似的结构。使用 GetsClipboardData 的大循环,然后将其分批发送。





WinMain 在 Hacking Team 存储库中没有任何可比较的代码,因此我的假设是 hkcmds.exe 是经过修改或更新的版本。还有一些明显的不匹配,比如在 obfuscated_calls.h 中没有 CreateThread 条目,但在 hkcmds.exe 中使用了它。我将继续对该样本进行进一步分析,但有趣的是看到可能的国家行为者使用 Hacking Team 工具。

结论


将此恶意软件归因于 Lazarus 或其他朝鲜演员的理由相当充分。考虑到提交者的位置、文档的内容、使用 CHM 文件进行交付、利用泄漏的工具以及 Akamai 进行基础设施托管;所有这些都与之前关于 Lazarus 近期活动的报告一致。

IoCs


Hashes

wallet.chm96f144e71068bc98c5e73d396738d22a948d3a5e2d20ba618b5a0a758c0a7a89
hkcmds.exe442769ddce07457c55fa2eb61b145f6ad91cc1155fc2124b275e0acaf4029e2c

IPs

23[.]216[.]147[.]64

参考


  • https://www.zscaler.com/blogs/security-research/naver-ending-game-lazarus-apt

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|DecoyMini 技术交流社区 ( 京ICP备2021005070号 )

GMT+8, 2024-4-20 05:31 , Processed in 0.066940 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表