Excel 4.0宏(XLM宏)是一种具有30年历史的MicrosoftExcel中被遗忘的功能,在过去的一年中被攻击者大规模发掘与利用。攻击者滥用Excel 4.0宏并将其武器化,以便于帮助其他攻击载荷实现持久化。由于这种攻击方式是对Excel合法功能的滥用而不是依赖漏洞进行攻击,微软对此的态度与此前出现滥用DDE机制进行攻击时的态度类似,没有进行处理。对于安全厂商来说,简单的将这种合法功能列入黑名单不是一种可靠的检测方案,难以避免对使用它的正常文件产生误报。
Lastline威胁研究小组在过去的5个多月中观测到数千个样本,通过对这些样本的聚类分析可以发现其中反检测技术的演变过程。大部分样本彼此之间相似度很高,似乎是由相同的生成器创建的,大约每经过1-2周会经过一轮迭代并增加新的功能。样本的主要功能,即下载并运行后续攻击载荷基本保持不变。变化主要集中在反检测技术的更新,包括通过特定运行环境检测对抗沙箱自动化检测、大量的代码混淆以及调试状态检测对抗分析人员的人工分析。 对恶意样本的分析发现Excel 4.0宏已在多个恶意软件家族中被广泛使用,如Danabot,ZLoader,Trickbot,Gozi和Agent Tesla。
下图显示了过去四个月中Excel 4.0宏样本的反检测技术演化流程。其中应用的反检测技术在后面分节介绍:
1、~2020.02.14
这组样本是我们观测到的第一类重要的武器化Excel 4.0宏恶意文档。其中包含的沙箱环境检测类反检测技术在后续版本中被广泛使用。 样本中包含一个隐藏的Excel 4.0宏工作表(Excel 4.0宏只能在专用的工作表内运行,放在普通工作表中会失效),其中包含攻击代码以及用于诱使用户启用宏代码的社工图片。
对Excel 4.0宏工作表取消隐藏后可以看到未混淆的攻击代码。
样本运行后会通过如下代码弹出对话框与用户交互的方式检测沙箱环境,点击确定才能继续运行,否则会结束本次攻击代码的执行。
使用GET.WORKSPACE函数检测当前运行环境,其中19和42分别表示检测是否存在鼠标以及声卡能否正常发声。部分沙箱环境处于性能因素的考虑会禁用声卡功能,此时若被检测到则会丢失后续的恶意行为。
使用GET.WORKSPACE函数检测是否为windows环境。
通过环境检测后,通过web查询下载后续恶意代码,可以在类型为DCONN的记录中查看连接的地址。因为这部分恶意代码没有保存在本地文件中,因此在进行静态检测时虽然可以获取远程连接地址,但无法直接确认样本的具体行为。
在名称管理器中可以看到,来自网络的数据被写入名为fgsb4g的单元格。
循环查找的字符串“LOS”来检查web查询是否成功,这里的是“LOS”是恶意代码退出时调用的=CLOSE()。
2、~2020.02.26
第二组样本通过在白色背景的工作表中使用白色字体(图中已修改为红色便于观察)来隐藏攻击代码,同时将顺序执行的恶意代码通过跳转指令连接散布在工作表的各处。这种修改代码执行流程的方式对样本分析师的手动分析会造成一定的干扰,但是对沙箱的自动化行为分析没有任何影响。 3、~2020.02.27
这组样本相比它们的前身更注重于对自身的隐藏。样本中当前Excel 4.0宏工作表的属性被设置为深度隐藏(very hidden),这意味着我们在分析该样本时无法通过图形界面操作来查看恶意代码,而是需要解析文件结构通过直接修改特定标志位的方式来取消工作表的隐藏状态。
另外,在沙箱环境检测方面添加了对于工作表高度和宽度的检测(有点类似屏幕分辨率检测)。当工作表大于770*380时才会继续执行。
4、~2020.03.06
使用FORMULA取代FORMULA.FILL来复制Web查询获得的恶意代码,这种细微的变化可以用来规避基于样本规则的检测。
5、~2020.03.10
在这组样本中第一次观测到大规模使用CHAR函数,通过转化ASCII码后拼接字符串的方式隐藏有效负载。这是一种通用的混淆技术,但这是我们第一次看到它被应用到Excel 4.0宏恶意样本中。 同时我们还观测到另一种通过直接调用windows api(这里使用的是URLDownloadToFile)来下载文件的样本。可能是用来规避对于上述基于DCONN的web查询的检测。
6、~2020.03.30
这组样本的特征是通过读取注册表来检查Excel的安全性设置,并使用windows api注册dll来执行第二阶段的有效负载。 下图中代码中通过reg.exe提取特定的注册表项,并生成随机文件名后写入文件中供后续代码中读取检测。 然后从偏移215到470处读取刚才写入的注册表文件。读取的目的是查找与Excel安全相关的注册表设置。 然后,宏会检查其中是否设置了非默认的安全性设置。 这里主要检测的是宏是否为自动运行。
7、~2020.04.01 这组样本的对运行的日期有特殊要求,在代码解混淆的过程中用到了当月的天数作为参数。其中CHAR函数使用了硬编码的整数与当前天数的差值来完成解混淆过程。下图中样本期望在每月10号被运行。 这种时间检测的方式在后续其他样本中没有得到广泛使用,可能是受害者没有按照预定时间运行恶意文档,攻击者发现这种方式不够稳定后弃用了。 样本中使用当月的天数+7保存在单元格X33中作为后续解混淆的参数。 下图展示了解混淆的一部分过程,可以看到用到了刚才的X33单元格。 如果在错误日期运行样本,则会获得一串乱码。 可以通过python脚本计算正确的运行日期。 在正确日期解混淆获得的后续恶意代码如下:
8、~2020.04.14
与上一组样本类似,均包含运行日期检测。不同的是,这组样本中添加了使用GET.CELL检测单元格中字体大小以及行高,可以用来检测当前excel表中数据是否被修改。 这些操作的结果将写入单元格AA181,这将会在后续解混淆过程中被重复使用。如果上述检测内容与恶意软件作者所期望的不同,则无法正确对后续代码解混淆,并且不会进行第二阶段代码的下载。
9、~2020.04.25
这组样本中引入了多个相互独立的Excel 4.0宏工作表,而非之前仅使用单独一个。这可以在一定程度上模仿正常的excel文件,相对于恶意文档它们可能拥有更多的工作表。通过在不同工作表中来回跳转,也可以有效的拖慢分析人员的分析速度。 另一个有趣的特征是,恶意软件作者将其命名为Auto_Open22而不是常用的Auto_Open,该名称仍可以作为Auto_Open函数完成自启动的定位。 10、~2020.05.04 这组样本中首次尝试隐藏Excel 4.0宏代码的引用名称,可以用来隐藏Excel 4.0宏运行时的起始位置,可以有效对抗自动化的样本静态解析以及分析人员的手动调试。可以看到在名称管理器中无法查看引用的名称。 这可以通过修改Lbl记录,将fHidden置1来实现。另外,偏移为0x15处为引用名称,设为1则为预设值Auto_Open。 偏移为0的flag属性值为0x21,代表fHidden and fBuiltin为1。
11、~2020.05.11
这组样本引入了一些新的反检测技术。首先是通过GET.WINDOW函数检测窗口状态。如果当前excel窗体没有被最大化,则不会执行后续恶意行为。 样本中还包含调试状态检测。如果当前宏代码以单步调试状态运行,则同样会直接退出。 12、~2020.05.19 上述样本集中基本都是通过CHAR函数转码后拼接实现代码的解混淆,这里则使用MID函数来替换CHAR函数。MID函数的功能是通过起始偏移和长度从字符串中提取子串。使用范例如下: 在样本中的使用方式与CHAR函数类似,也是用于解混淆,拼接成后续执行的恶意代码。
总结
Excel 4.0宏为攻击者提供了一种可靠的新攻击载体来执行恶意代码。在实际环境中,很多带有宏的Excel工作表被大量使用,因此很难直接通过黑名单的方式直接禁用这一功能。因此随着攻击的发展,反检测能力的不断提高,安全厂商和分析人员也必须对相关检测产品进行持续更新来跟上攻击者的步伐。
IOC
1
032b584b85e8335f83c751dd9c70121eb329bc08 30f908b7e97527e8a409ba93ec6258bdc7943b24 26b7691ba5bac30670790f2af8b67aec37609729 21deaf5c2adeb0ad3dae2048138c403691c3e71e 17d62231f60e97121f7258b0296feeadb7996d5f
2
0b01f4a1ca08c0136d84e3ec91af856579784451 3db463c73a62b8bf0b6ab388884c6f3ad3a91c2f 2df8277a9ac5869fa7d5a5838fe6ab428207cf9c Bb8d0af63f837e7f54d530d909feded623399a1b C1217a7a59dc307089901556985239039cb89cbb
3
0b80a32171c3f1b21015e880c7d3eb216eeff103 38d8c573b901bb0bf1cd1cc62945521923630e58 4a57bf593c6dc515a869b0facc4e1f2e3f8e85e1 2d8b6113d858f988977a82af82ca649963915ff7 1f66200bd820646e74b56ed8493794861eebc479
4
15c3d132b4bc52f32541f6c7cb307467b7b85ee5 38d8c573b901bb0bf1cd1cc62945521923630e58 4a57bf593c6dc515a869b0facc4e1f2e3f8e85e1 2d8b6113d858f988977a82af82ca649963915ff7 1f66200bd820646e74b56ed8493794861eebc479
5
13d35c6a71ee02362905982cfdd4f19ea7971fb0 52bc0b0ca4aa88000220627d150b4996e4a2bdc0 768d376f9ee85803940810a0d538c0ff4bd3ec4d B547d9eb47e2977e4f85e92e62e9271875f3654b D724559f4e1be192b8e60d1076ba6f00a76a7910
6
Ced11986de75f108b631ffa8165108fb14b81be5 909196df72ba3f9e418379c184a435a7cad870e7 8ef757ad7ed52c7da069124bbbb0aba3f793a109 1e42150111e8347da68e7363c1545384609c62db Eb71e2f83bfc3f30b7fbe132b6c8d07c363ffa23
7
2bfc5c38fe25a095161716c17d4828348130ccc0 1fa19f7cf4f37966e131df657dc84b9372fa4e4e 1f9e7110a0b58072466c0d5bece253ea7e6f74e1 1c10fe44429a1cf0b875aef63f61469006f59682 0b55491e45c50bde473e84c329127945cb20133f
8
Bd34811e40ac4ac351ace6c117161904b2e08a12 Bc152b1054983a5db6361ce34e246f2fd36e8f82 B528c29632b8e517fbfcf317711636b1b9b874a8 B6a2634e82a206c8759616d5be4c6913400bf9ae B4b9a6efe0277c7bf7599291912b9ab2c3e171a5
9
1953ac3dabc8affd223277564b4c0d9ac1332a9b
10
F377028e7946a812948a5c7ba44e954c8fbdfe4a F1459d32a711cd5e3a33b31334be28ed5ef9ed3d De942054e5a5b9b011acf04e3de492d951705b28 D53200f073da1091fb7263644d8eec9c4d063b96
11
68bcdbfd523c1288487178f0154a272eb316b0fb 59c4702ac6d89d244dc40d56ec6c6491507da8c8 51d1d14772d3087b426e74d91c977f33325c20e0 11f71766d280e26763742573fae133a51dbbca8b 8d15ea7926f2fcfeca8c2df4fc720d9fb428ca9e
12
0339b41fe3dc92a1e95779cc5e3ac2b0fff0f48e 198d3a4bc0b8af702a59cfab02f86476a5fcd5b0 91e0eb52ff166781b795dda55ff76363d4146856 89ae64f1a7db8dd4bd24daf587206c50c942d095 87a87eb02940daa8a09e821d439a60e1ea01c039
参考链接
https://www.lastline.com/labsblog/evolution-of-excel-4-0-macro-weaponization/