本文分享自天翼云开发者社区《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 团队创建警报,并且电子邮件一直保留到附件分析完成,因为这将最大限度地减少可能的合法文件被阻止的影响。

OneNote Embedded 文件滥用检测的更多相关文章

  1. 利用SHELL脚本实现文件完整性检测程序(1.2版更新)

    一..开发背景 因时势所逼,需要对服务器的文件系统实行监控.虽然linux下有不少入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手.自己琢磨着也不需要什么多复杂的功能,写个脚本应该就可以满足基本 ...

  2. 文件编码检测.ZC一些资料(包含java的)

    1.IMultiLanguage3 或者 IMultiLanguage2 1.1.怎么判断XML 的编码格式(UTF-8或GB2312等)-CSDN论坛.html(https://bbs.csdn.n ...

  3. 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践

    uber全球用户每天会产生500万条行程,保证数据的准确性至关重要.如果所有的数据都得到有效利用,t通过元数据和聚合的数据可以快速检测平台上的滥用行为,如垃圾邮件.虚假账户和付款欺诈等.放大正确的数据 ...

  4. 对 Visual Studio 中的Resharper禁用对某种文件的检测

    原因:在Visual Studio中安装Reshaper后,就会对各种文件进行代码检测,但是因为Reshaper更新的速度不是很及时,所以有时会对Visual Studio中某些新功能误断,导致Cod ...

  5. Linux AIDE(文件完整性检测)

    一.AIDE的概念 AIDE:Advanced Intrusion Detection Environment,是一款入侵检测工具,主要用途是检查文档的完整性.AIDE在本地构造了一个基准的数据库,一 ...

  6. 文件编码检测.ZC

    1.今天(20181101) 发现 g文件中的 xml头 和 文件编码不一致,最后发现 貌似是我搞错了,人家的文件 编码方式写的是对的. 我发现的现象是:XML里面写的是"GBK" ...

  7. Matlab M文件变量检测与传递

    M文件中变量的检测与传递 可变数量的输入输出变量(varargin,vararout): Matlab的输入输出变量数量可变,并具有以下特点: 可变输入输出变量必须在正常变量之后 varargin和v ...

  8. 运维常用shell脚本二(压缩文件、过滤不需要的文件、检测进程)

    一.压缩指定目录下的文件并删除原文件 #!/bin/bashZIP_DAY=7 function zip { local dir=$1 if [ -d $dir ];then local file_n ...

  9. zip格式文件编码检测

    解压后文件名乱码 由于zip格式文件无编码存储的结构,因此解压时无法知道原先的编码. 当解压zip格式文件时使用的编码和原编码不一致时,就可能会出现解压后文件名乱码问题. 猜测编码 基于上述问题,需要 ...

  10. java上传文件类型检测

    在进行文件上传时,特别是向普通用户开放文件上传功能时,需要对上传文件的格式进行控制,以防止黑客将病毒脚本上传.单纯的将文件名的类型进行截取的方式非常容易遭到破解,上传者只需要将病毒改换文件名便可以完成 ...

随机推荐

  1. THUWC2025 游记

    Day -C 先进入金国大臣面积群,然后发现 xyf 又在行联考学生群故事. Day -1 早上赶飞机进京.飞机上启动钢丝.到达大兴机场之后坐火车前往北京西站,然后坐地铁到海淀黄庄.非常饿,但是决定先 ...

  2. Lucas 定理证明与扩展

    Lucas 定理及其证明.扩展 \[\binom{n}{m}\equiv\binom{n/p}{m/p}\binom{n\bmod p}{m\bmod p}\pmod p,\text{where}\ ...

  3. git pull报错:Pulling without specifying how to reconcile divergent branches is discouraged.

    一.保存内容如下 二.翻译 三.设置为默认即可:git config pull.rebase false

  4. Flink客户端操作

    一.mysql数据准备 mysql -hip -uroot -p密码 CREATE DATABASE flink; USE flink; CREATE TABLE user ( id INTEGER ...

  5. Luogu P4287 SHOI2011 双倍回文 题解 [ 紫 ] [ manacher ]

    双倍回文:回文子串结论的经典应用. 结论 先放本题最关键的结论:一个字符串本质不同的回文子串最多只有 \(n\) 个. 考虑如何证明: 假设我们一个一个地在当前字符串(黑色部分)的结尾加入字符(红色部 ...

  6. FreeSql学习笔记——5.删除

    前言   对于FreeSql来说,删除的支持并不强大,只有在Where条件不为空的时候才执行,否则返回0或默认值,不执行删除操作:     语法   fsql.Delete<Class>( ...

  7. DispatcherPriority 枚举

    DispatcherPriority 枚举 ApplicationIdle 2 枚举值为 2. 在应用程序空闲时处理操作. Background 4 枚举值为 4. 在完成所有其他非空闲操作后处理操作 ...

  8. 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践

    title: 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通过 ...

  9. Flink - [02] 安装部署(Standalone)

    一.准备 1.角色规划 Flink Standalone 角色规划 节点名称 node01 node02 node03 master ○     worker   ○ ○ zookeeper ○ ○ ...

  10. Hadoop - 执行start-dfs.sh、stop-dfs.sh 报错处理

    执行 sbin/start-dfs.sh 和 sbin/stop-dfs.sh 报错,且进程仍然在 start-dfs.sh和stop-dfs.sh会去hadoop-env.sh中找JDK的值,但是设 ...