如何使用Windows Library文件进行持久化
前言
想象一下,假设在你不知道的情况下,攻击者在你的计算机上放置了一个恶意文件。每当你访问桌面上某个文件夹时(例如Documents文件夹),都会执行一次该文件。这样的场景,通过利用一种鲜为人知的持久化技术就可以实现,这一过程需要用到Windows库(Library)文件。
在Windows系统中,引入了库文件,允许用户在单个视图中查看多个目录的内容。库可以包含存储在本地计算机或远程位置的文件或文件夹。
对这些文件进行滥用以实现持久化的技术,首先由WikiLeaks Vault 7公开,这种技术与Junction Folder滥用有许多相似之处。由于这两种技术都难以检测,所以它们为攻击者提供了一个不错的选择,同时也为安全研究人员制造了一大挑战。
本文将主要分析如何使用库文件来实现持久化,以及在搜索过程中需要查找的内容。
关于库文件
默认情况下,Windows库文件位于%APPDATA%\Microsoft\Windows\Libraries目录下,文件扩展名为library-ms。这些文件是基于XML的,并遵循了公开可用的模式。
作为示例,我们查看了用于Documents文件夹的文档库文件(Documents.library-ms)。在该文件中,最值得关注的部分是SimpleLocation元素的URL。这一元素指定了基于文件系统或基于协议处理程序的搜索连接器(Search Connectors)的位置。
在我们的示例中,库使用全局唯一标识符(GUID)指向了URL元素中两个不同的已知文件夹。通过搜索GUID,我们发现了两个文档目录:
{FDD39AD0-238F-46AF-ADB4-6C85480369C7} %USERPROFILE%\Documents
{ED4824AF-DCE4-45A8-81E2-FC7965083634} %PUBLIC%\Documents
在使用这两个位置时,打开这个库将会允许用户在单个视图中查看两个不同目录的内容。下面的屏幕截图中展示了每个文件夹中的内容:
然而,在查看库时,所有项目都会显示在同一个文件夹中:
创建恶意库文件
那么,我们如何滥用此功能来获得持久性呢?
最简单的方法是添加另一个URL元素,来加载恶意COM对象。当访问或显示文件夹时,它将导致我们的COM对象执行。
在下面的示例中,我们创建了一个引用Payload beacon.dll的COM对象。
然后,另一个searchConnector被添加到库中,其中一个URL元素引用了我们创建的CLSID。
最后,该库已经被保存到桌面,因此它看起来像一个合法的文件夹“Documents”。如果用户打开该文件夹,将会显示Documents文件夹中的内容。但是在后台,COM对象也会被执行,从PID为5392的rundll32.exe启动我们的信标Payload(Beacon)。
有趣的是,rundll32没有显示父进程。这是由于,在运行COM对象后,退出了父进程dllhost.exe(COM Surrogate进程)。在Sysmon中,我们将看到类似于以下示例的事件,其父进程为dllhost.exe,子进程为rundll32.exe。
查看Process Monitor,我们可以看到dllhost.exe在查询我们创建的CLSID,然后加载beacon.dll,再然后执行rundll32.exe。
虽然这些数据点可用于检测,但很可能会出现合法活动的误报情况。我们可以通过关联数据点,来得到具有更高准确度的结果。
实现持久化
显然,为了实现持久性,我们需要在系统启动时执行library-ms文件。那么,应该如何实现这一目标呢?
除了通常的持久化技术之外,有一种更隐蔽的方法,是使用Windows资源管理器。它将在查看包含该文件的目录时,自动执行该文件。因此,用户无需实际单击这个文件,只需要查看目录就足够了。举例来说,我们可以将库文件放在桌面上,在启动时,资源管理器将会对它进行渲染,导致COM对象执行。
从检测角度来看,启动执行和用户单击执行之间的区别就在于,启动执行时父进程是explorer.exe,因为它是导致库文件呈现出来的资源管理器。
寻找library-ms文件
我们可以通过查找具有library-ms扩展名的任意文件,来使用PowerShell搜索恶意库文件,然后过滤URL标记以获取CLSID,同时检索相关的注册表项以进行分析。
此方案仅仅是基于对URL元素的滥用,如果想要进一步发现异常,可能需要寻找其他元素。
我们提供了一个脚本,用于对%USERPROFILE%文件夹中创建的任何library-ms文件执行上述条件检查,我们可以使用该文件检查注册表中是否存在与此技术相关的异常项。
脚本的下载地址为: https://gist.github.com/countercept/6890be67e09ba3daed38fa7aa6298fdf。
寻找library-ms文件创建也很有用,这可能会是一个高准确度的指标,因为这些扩展很少会被创建。类似于Sysmon这样的工具可以让我们轻松监视这些事件,只需要将以下内容添加到带有FileCreate标记的Sysmon配置文件中即可。
创建library-ms文件时,我们将看到如下所示的文件创建事件:
结论
在Windows中,有很多“传统”的持久化技术,例如注册表、服务、计划任务等,许多安全研究者都会关注这些技术。正如本文所描述的, library-ms文件对防守方提出了一个独特的挑战,由于它们可以隐蔽地通过COM引用执行代码,所以检测和分析过程就更加具有挑战性。
系统防守方应该专注于创建和修改.library-ms文件以及COM条目。除了来自explorer.exe或dllhost.exe的这些可疑进程执行之外,它们还可以提供恶意活动的进一步证据。
参考链接:https://www.countercept.com/blog/abusing-windows-library-files-for-persistence/
如何使用Windows Library文件进行持久化的更多相关文章
- 关于SQL Server 安装程序在运行 Windows Installer 文件时遇到错误
前几日安装sql server2008r2 的时候碰到这个问题: 出现以下错误: SQL Server 安装程序在运行 Windows Installer 文件时遇到错误. Windows Insta ...
- iOS开发备忘录:属性列表文件数据持久化
属性列表文件是一种XML文件,Foundation框架中的数组和字典等都可以于属性列表文件相互转换. NSArray类常用读写属性列表文件的方法: +arrayWithContentsOfFile:类 ...
- 提取Windows用户密钥文件cachedump
提取Windows用户密钥文件cachedump Windows系统将用户信息和密钥存储在系统存档文件(System hive)和安全存档(Security hive)中.只要提取这些内容,就可以 ...
- Windows校验文件哈希hash的两种常用方式
大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像 ...
- Windows下文件的所有和权限
跟linux不同, 在linux下 ,文件的所有者,就拥有对文件的所有读写执行的权限, 而windows, 文件的所有者不一定对文件拥有所有的权限, 场景: 要对系统文件(windows\system ...
- 使用cwRsync实现windows下文件定时同步【转】
1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...
- 关于cornerstone无法上传library文件的问题
在CornerStone中先选中左边的项目: 然后在菜单栏里面选择View->ShowIgnoreItems, 再选择项目中的library文件,点击Add按钮即可上传到服务器:
- 解决Ubuntu和Windows的文件乱码问题(转载)
解决Ubuntu和Windows的文件乱码问题(debian也通用) 1.转换文件内容编码 Windows下天生的纯文本文件,其中文编码为GBK,在Ubuntu下显示为乱码,可以使用iconv命令 ...
- 获取WINDOWS特殊文件夹
const// registry entries for special paths are kept in : REGSTR_PATH_SPECIAL_FOLDERS = REGSTR_PAT ...
随机推荐
- Jersey入门一:从Maven Archetype创建jersey项目
1.用Ctrl+空格调出Spotlight搜索,输入ter调出终端窗口  2.在终端窗口进入将创建jersey项目的目录:  3.输入如下命令,创建一个名为的simple-service项目: m ...
- synchronized锁优化
1.自旋锁和自适应自旋锁 sync在JDK1.6之前之所以被称为重量级锁,是因为对于互斥同步的性能来说,影响最大的就是阻塞的实现.挂起线程与恢复线程的操作都需要转入内核态中完成.从用户态转入内核态是比 ...
- 三、redis系列之事务
1. 绪言 Redis也提供了事务机制,可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞.但Redis对事务的支持是部分支持 ...
- mongdb 拓展的下载地址和编译安装(php)
下载地址:https://pecl.php.net/package/mongodb 编译安装: $ tar zxvf mongodb-mongodb-php-driver-<commit_id& ...
- iOS 9应用开发教程之ios9中实现按钮的响应
iOS 9应用开发教程之ios9中实现按钮的响应 IOS9实现按钮的响应 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应:另一 ...
- python issubclass 和 isinstance函数
Python issubclass() 函数 issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类. 语法: issubclass(class, clas ...
- 机器学习之路: 深度学习 tensorflow 神经网络优化算法 学习率的设置
在神经网络中,广泛的使用反向传播和梯度下降算法调整神经网络中参数的取值. 梯度下降和学习率: 假设用 θ 来表示神经网络中的参数, J(θ) 表示在给定参数下训练数据集上损失函数的大小. 那么整个优化 ...
- 机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者
python3 学习使用随机森林分类器 梯度提升决策树分类 的api,并将他们和单一决策树预测结果做出对比 附上我的git,欢迎大家来参考我其他分类器的代码: https://github.com/l ...
- 汉化 的 空指针 bug
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha nulljava.lang.NullPointerException at com.an ...
- pygame系列_箭刺Elephant游戏_源码下载
这个游戏原名为:Chimp,我们可以到: http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html 获取到源码和详细的源码讲解 下面是我对游戏 ...