未加星标

如何滥用Windows库文件实现本地持久化

字体大小 | |
[系统(windows) 所属分类 系统(windows) | 发布者 店小二05 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

如何滥用Windows库文件实现本地持久化
一、前言

想象一个,如果有个攻击者在我们的电脑上释放了一个恶意文件,每当我们访问系统中最喜欢的目录(如 Documents 目录)时就会执行恶意文件,并且我们对此一无所知,这是多么恐怖的一件事。攻击者可以利用鲜为人知的一种持久化技术:windows库文件(Library File)来完成这个任务。

Windows系统中的库文件可以帮助用户在单个视图中查看多个目录的内容。Windows库可以包含存在本地或者远程存储位置中的 文件及目录 。

对这些文件的恶意使用最早可以追溯到维基解密公布的 Vault 7 相关材料,该方法与 滥用Junction目录 的方法有许多相似之处。这两种技术检测起来较为困难,因此攻击者可以选择这些方案,即便是最好的检测团队也会面临巨大的挑战。

本文以较短的篇幅介绍了如何滥用库文件实现本地持久化,也介绍了如何针对性寻找这类攻击特征。

二、何为库文件

默认情况下,Windows库文件的具体路径为 %APPDATA%\Microsoft\Windows\Libraries ,文件扩展名为 library-ms 。这些文件采用XML格式,遵循公开可用的schema。

举个例子,我们来分析 Documents 库文件(即 Documents.library-ms ),该文件对应的是 Documents 目录。观察该文件,其中最有趣的部分是 SimpleLocation 元素的 URL值 。这个元素定义了基于文件系统或者协议处理程序的“search connectors”(搜索连接器)的具体位置。

在这个例子中,该库文件中的URL元素使用GUID(global unique identifiers,全局唯一标识符)指向了两个不同的目录,具体的 GUID 及文档目录如下所示:

GUID 目录 {FDD39AD0-238F-46AF-ADB4-6C85480369C7} %USERPROFILE%Documents {ED4824AF-DCE4-45A8-81E2-FC7965083634} %PUBLIC%Documents
如何滥用Windows库文件实现本地持久化

由于使用了这两个位置,因此打开这个库时,用户可以在一个视图中查看两个不同目录的内容。这两个目录各自的内容如下图所示:


如何滥用Windows库文件实现本地持久化

然而,如果我们以库方式来查看时,这些子元素都会在同一个目录中列出:


如何滥用Windows库文件实现本地持久化
三、创建恶意库文件

那么我们如何利用这一功能实现本地持久化呢?

最简单的技术是添加另一个URL元素,用来加载恶意的COM对象,这样每当用户访问该目录或者系统呈现该目录时,我们的COM对象就会被执行。

在如下例子中,我们创建了一个COM对象,该对象引用了名为 beacon.dll 的一个载荷。


如何滥用Windows库文件实现本地持久化

然后在库文件中添加一个 searchConnector ,其URL元素引用的是我们创建的 CLSID 。


如何滥用Windows库文件实现本地持久化

最后,将库文件保存到用户桌面,这样看起来像是一个人畜无害的 Documents 目录。如果用户打开该目录,则会显示正常 Documents 目录的内容。然而在后台我们的COM对象同样会被执行,利用 rundll32.exe 运行我们的载荷,进程的PID值为5392.


如何滥用Windows库文件实现本地持久化
如何滥用Windows库文件实现本地持久化

有趣的是, rundll32 看上去似乎没有父进程。这是因为父进程 dllhost.exe (COM Surrogate进程)会在运行COM对象后退出。在Sysmon中,我们可以看到如下图所示的类似事件,显示 dllhost.exe 为父进程, rundll32.exe 为子进程。


如何滥用Windows库文件实现本地持久化

观察Process Monitor,我们可以看到 dllhost.exe 会查询我们创建的 CLSID ,然后加载我们的 beacon.dll ,最后执行 rundll32.exe 。


如何滥用Windows库文件实现本地持久化
如何滥用Windows库文件实现本地持久化
如何滥用Windows库文件实现本地持久化

虽然这个过程中使用的这些数据点可作为检测特征,但合法的活动也会用到这种方式,因此很可能出现误报,然而,通过数据点关联我们可以得出更为准确的结果。

四、本地持久化

为了实现本地持久化,我们需要系统在启动时能够执行我们的 library-ms 文件,那么怎样才能达到这个目的呢?

除了常见的本地持久化技术以外,还有更为隐蔽的一种方法,那就是利用Windows Explorer,在用户查看包含该文件的目录时就会自动执行该文件。因此用户无需实际点击文件,只需要简单查看某个目录就足以达到同样的效果。比如,我们可以将库文件放在桌面上,这样当系统启动时,Explorer会自动呈现桌面,我们的COM对象就得以执行。

从检测角度来看,在启动时执行和在用户点击时执行的区别在于,启动执行的父进程为 explorer.exe ,因为Explorer是呈现库文件的根本原因。


如何滥用Windows库文件实现本地持久化
如何滥用Windows库文件实现本地持久化
如何滥用Windows库文件实现本地持久化
五、寻找library-ms文件

我们可以使用PowerShell来寻找恶意库文件,检查是否存在扩展名为 library-ms 的文件,然后过滤URL标签,获取CLSID值,提取相关的注册表键值以便进一步分析。


如何滥用Windows库文件实现本地持久化

这种场景只考虑到了URL元素的滥用情况,我们可能需要寻找其他元素,以便发现更多的异常特征。

我们提供了一个脚本,用来检查满足如上条件、位于 %USERPROFILE% 目录中的任意 library-ms 文件,我们可以使用该脚本来检测与该技术有关的注册表键值是否存在异常。


如何滥用Windows库文件实现本地持久化

大家可以访问 Github 下载该脚本。

此外,监控 library-ms 文件的创建操作也非常有用,这是一个非常准确的特征,因为带有这些扩展名的文件很少会被创建。比如我们可以使用类似Sysmon之类的工具来监控这类事件,简单将如下信息添加到Sysmon配置文件的 FileCreate 标签中即可:


如何滥用Windows库文件实现本地持久化

当创建 library-ms 文件时,我们可以看到如下文件创建事件:


如何滥用Windows库文件实现本地持久化
六、总结

Windows系统中有许多“传统可用的”持久化技术,如注册表、服务、计划任务等等,许多防御方会重点关注这些位置。在本文中,我们介绍了利用 library-ms 文件的一种独特技巧,可以隐藏在正常视图中,通过COM引用来执行恶意代码,给检测和分析过程带来更多的挑战。

蓝队应该重点关注 .library-ms 文件的创建及修改操作,也需要关注COM元素。此外,由 explorer.exe 或者 dllhost.exe 执行的可疑进程也能用来进一步确认恶意活动行为。

本文系统(windows)相关术语:三级网络技术 计算机三级网络技术 网络技术基础 计算机网络技术

tags: 文件,目录,ms,library,exe,COM,Documents,Windows,URL,恶意,执行,持久,创建,元素
分页:12
转载请注明
本文标题:如何滥用Windows库文件实现本地持久化
本站链接:https://www.codesec.net/view/604554.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(windows) | 评论(0) | 阅读(15)