星火沙龙 |.NET Hacking & Dtection
字数 1921 2025-08-18 11:39:23
.NET Hacking & Detection 技术文档
一、.NET 安全基础
1.1 .NET 框架安全机制
- 代码访问安全(CAS): .NET 的权限系统,控制代码执行权限
- 强名称签名: 防止程序集被篡改
- 程序集验证: CLR 验证程序集的完整性和有效性
- 类型安全验证: 确保类型操作的安全性
1.2 .NET 反编译与代码保护
- 常用反编译工具:
- ILSpy
- dnSpy
- dotPeek
- JustDecompile
- 代码保护技术:
- 混淆(Obfuscation): Dotfuscator, ConfuserEx
- 加密: .NET Reactor, Themida
- 原生编译(NGEN)
二、.NET 攻击技术
2.1 程序集注入技术
- 方法注入:
- 使用 Mono.Cecil 修改 IL 代码
- 通过 Reflection.Emit 动态生成代码
- DLL 劫持:
- 利用 .NET 程序集加载顺序
- 修改 app.config 或 manifest 文件
2.2 反序列化漏洞
- 危险格式化器:
- BinaryFormatter
- LosFormatter
- SoapFormatter
- 利用技术:
- TypeConfuseDelegate
- TextFormattingRunProperties
- SessionViewStateHistoryItem
2.3 内存攻击技术
- DLL 注入:
- 使用 CreateRemoteThread
- AppDomain 注入
- 内存补丁:
- 修改 JIT 编译后的代码
- 修改运行时数据结构
三、.NET 检测与防御
3.1 异常行为检测
- 可疑 API 调用监控:
- Assembly.Load
- Reflection.Emit
- Delegate.CreateDelegate
- 行为特征检测:
- 异常程序集加载
- 动态代码生成
- 反序列化异常
3.2 运行时保护
- Hook 检测:
- 检测 EAT/IAT Hook
- 检测内联 Hook
- 内存保护:
- 代码签名验证
- 内存页属性保护
3.3 安全加固建议
- 禁用危险格式化器:
<configuration> <runtime> <disableBinaryFormatterSerialization enabled="true"/> </runtime> </configuration> - 启用强名称验证:
sn -Vr *,31bf3856ad364e35 - 实施代码访问安全策略:
<configuration> <runtime> <NetFx40_LegacySecurityPolicy enabled="true"/> </runtime> </configuration>
四、红队开发技巧
4.1 隐蔽执行技术
- AppDomain 隔离执行:
AppDomain sandbox = AppDomain.CreateDomain("Sandbox"); sandbox.ExecuteAssembly("malicious.dll"); - 动态编译执行:
CSharpCodeProvider provider = new CSharpCodeProvider(); CompilerParameters parameters = new CompilerParameters(); CompilerResults results = provider.CompileAssemblyFromSource(parameters, sourceCode);
4.2 权限提升技术
- 利用 COM 组件:
- 通过 COM 互操作提升权限
- 利用提升权限的 COM 对象
- 服务账户滥用:
- 利用服务账户的过高权限
- 服务票据伪造
五、蓝队检测方案
5.1 日志分析要点
- 事件日志关键事件ID:
- 1024: AppDomain 创建
- 1026: 程序集加载失败
- 1033: 强名称验证失败
- ETW 事件监控:
- Microsoft-Windows-DotNETRuntime/ModuleLoad
- Microsoft-Windows-DotNETRuntime/ILStubGenerated
5.2 内存取证技术
- Dump 分析工具:
- WinDbg + SOS 扩展
- ClrMd
- 关键内存结构:
- AppDomain 结构
- Assembly 加载表
- JIT 代码缓存
六、实战案例
6.1 反序列化攻击案例
- 漏洞利用:
BinaryFormatter formatter = new BinaryFormatter(); formatter.Deserialize(stream); // 恶意流触发RCE - 防御方案:
- 使用安全的序列化器(如 JSON.NET)
- 实现 SerializationBinder 限制反序列化类型
6.2 程序集劫持案例
- 攻击步骤:
- 定位程序集加载路径
- 放置恶意同名的程序集
- 利用加载顺序优先加载恶意程序集
- 检测方法:
- 验证程序集强名称签名
- 监控程序集加载事件
七、工具链
7.1 攻击工具
- dnSpy: 强大的 .NET 调试和反编译工具
- ConfuserEx: 代码混淆工具
- SharpHound: 用于域渗透的 .NET 工具
7.2 防御工具
- Microsoft Attack Surface Analyzer: 分析 .NET 应用攻击面
- PEVerify: 验证 .NET 程序集完整性
- Sigcheck: 验证程序集签名
八、进阶研究
8.1 CLR 内部机制
- JIT 编译过程:
- 从 IL 到本地代码的转换
- 代码优化与内联
- 内存管理:
- 托管堆结构
- GC 行为分析
8.2 .NET Core 安全差异
- CAS 替代方案:
- 基于策略的访问控制
- 更严格的默认权限
- 跨平台安全考虑:
- Linux/macOS 上的权限模型
- 跨平台攻击面差异
注:本文档基于"星火沙龙 | .NET Hacking & Detection"公开课内容整理,包含 .NET 安全攻防的核心知识点,适用于红蓝对抗、渗透测试和安全开发人员参考使用。