本文分享自天翼云开发者社区《OneNote Embedded 文件滥用检测》,作者:Icecream
攻击技术
在这些网络钓鱼活动中被滥用的OneNote功能是在图片后面隐藏嵌入式文件,诱使用户点击图片。如果图片被点击,它将执行隐藏在下面的文件。这些文件可能是可执行文件、JavaScript文件、HTML文件、PowerShell、.... 基本上任何类型的文件,在执行时都可以执行恶意软件。最近,我们还观察到.chm文件的使用情况,它有一个嵌入的index.html文件,将运行内联的JavaScript。在Windows系统中,这大致上是指执行脚本/文件的以下进程之一:.index.html,'powershell.exe', 'pwsh.exe', 'wscript.exe', 'cscript.exe', 'mshta.exe', 'cmd.exe', 'hh.exe'

OneNote 文件剖析
OneNote 文件使用GUID来指示嵌入文件部分的开始。在 OneNote 中表示嵌入文件开始的 GUID 是:{BDE316E7-2665-4511-A4C4-8D4D0B7A9EAC}
使用下面的工具(https://toolslick.com/conversion/data/guid)我们可以将 GUID 转换为 HEX 字符串:e716e3bd65261145a4c48d4d0b7a9eac
。 如果使用 HEX 编辑器,您可以搜索此字符串并找到嵌入文件的确切位置。 OneNote 将保留 20 个字节。前 8 个字节用于指示文件的长度,后面的 4 个字节未使用且必须为零,最后 8 个字节保留且也为零。这导致以下十六进制字符串E7 16 E3 BD 65 26 11 45 A4 C4 8D 4D 0B 7A 9E AC ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00
在嵌入文件数据存在之前。
当通过 HEX 编辑器查看 OneNote 文件时,很快就会清楚 OneNote 不会尝试加密或压缩任何内容。也就是说,如果您正在查看的.one
文件不是.onepkg
. 文件.onepkg
类似于包含从 OneNote 笔记本导出的文件的 ZIP 文件。可以使用 7zip 打开这些文件。 OneNote 文件 ( .one
) 将显示嵌入文件的内容,如下所示:

这意味着我们可以在分析这些文件时轻松检查已知的误报,这将我带到下一点,创建检测规则。
YARA规则
创建一个检测规则来捕获所有恶意嵌入文件并不容易,因为通常脚本没有"魔法字节",不像可执行文件具有著名的"MZ"标头。虽然创建一个看起来像之前观察到的十六进制字符串 + MZ 文件头的 YARA 规则很容易,但这只会标记嵌入式可执行文件。如果这是你的目标,那么这是一个很好的规则,但是我想要一些更灵活的东西,我可以在电子邮件网关上使用它来标记所有潜在的恶意传入 OneNote 文件。
所以我采取了不同的方法。我观察到在 OneNote 文件中嵌入图片(例如:屏幕截图)是很常见的。我没有观察到很多嵌入了其他文件的案例。这导致我创建了一个 YARA 规则,该规则将查看 OneNote 文件,忽略指示图像存在但会在观察到任何其他文件时发出警报的文件部分。因此,我不会寻找恶意文件,而是会忽略已知的合法文件。这个简单的技巧让我能够创建一个高置信度的检测规则,同时不会让分析师因太多误报而超载。
当然每个环境都是不同的,如果你的环境中的 OneNote 文件中嵌入 PDF 文件很常见,你也应该排除那些 PDF 文件。因此,在测试期间建立基线很重要。 下面是这种技术的一个例子。00
之后的 '也可以??
替换为。??
尽管这些字节应始终为空,但如果字节被更改,此规则将不会检测文件。
rule OneNote_EmbeddedFiles_NoPictures
{
meta:
author = "Nicholas Dhaeyer - @DhaeyerWolf"
date_created = "2023-02-14 - <3"
date_last_modified = "2023-02-17"
description = "OneNote files that contain embedded files that are not pictures."
reference = "https://blog.didierstevens.com/2023/01/22/analyzing-malicious-onenote-documents/"
strings:
$EmbeddedFileGUID = { E7 16 E3 BD 65 26 11 45 A4 C4 8D 4D 0B 7A 9E AC }
$PNG = { E7 16 E3 BD 65 26 11 45 A4 C4 8D 4D 0B 7A 9E AC ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 89 50 4E 47 0D 0A 1A 0A }
$JPG = { E7 16 E3 BD 65 26 11 45 A4 C4 8D 4D 0B 7A 9E AC ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 FF D8 FF }
$JPG20001 = { E7 16 E3 BD 65 26 11 45 A4 C4 8D 4D 0B 7A 9E AC ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 6A 50 20 20 0D 0A 87 0A }
$JPG20002 = { E7 16 E3 BD 65 26 11 45 A4 C4 8D 4D 0B 7A 9E AC ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 FF 4F FF 51 }
$BMP = { E7 16 E3 BD 65 26 11 45 A4 C4 8D 4D 0B 7A 9E AC ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 42 4D }
$GIF = { E7 16 E3 BD 65 26 11 45 A4 C4 8D 4D 0B 7A 9E AC ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 47 49 46 }
condition:
$EmbeddedFileGUID and (#EmbeddedFileGUID > #PNG + #JPG + #JPG20001 + #JPG20002 + #BMP + #GIF)
}
规则背后的逻辑如下;YARA 规则将匹配任何具有定义嵌入文件存在于 OneNote 文件中的 GUID 的文件。然后它将计算它找到的 GUID 的数量。如果这大于直接跟在图像文件后的 GUID 数量(此处指定为#PNG + #JPG + #JPG20001 + #JPG20002 + #BMP + #GIF),则意味着存在其他文件并且规则火柴。如果不是,则该文件仅包含图像并被认为是安全的。
文件被标记后,分析师仍应查看嵌入的文件。DissectMalware(https://github.com/DissectMalware/pyOneNote)创建了一个惊人的 python 脚本,有助于提取嵌入式文件。分析师或自动化系统可以分析文件并提供更多上下文,以确定提取的文件是否是恶意的。
结论
这篇文章旨在引导您逐步完成创建 YARA 检测规则的过程,该规则可以帮助您防止受到其中一个样本的危害。创建这样的检测规则时应该考虑的是,您必须从一个基线开始,在这个基线中您知道哪些嵌入式文件在您的环境中是常用的。虽然此 YARA 规则可以在"阻止"模式下使用,它会阻止所有与此规则匹配的电子邮件,但建议在"警报"模式下使用此 YARA 规则,其中会为 SOC 团队创建警报,并且电子邮件一直保留到附件分析完成,因为这将最大限度地减少可能的合法文件被阻止的影响。