星火沙龙 |.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 安全加固建议

  1. 禁用危险格式化器:
    <configuration>
      <runtime>
        <disableBinaryFormatterSerialization enabled="true"/>
      </runtime>
    </configuration>
    
  2. 启用强名称验证:
    sn -Vr *,31bf3856ad364e35
    
  3. 实施代码访问安全策略:
    <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 反序列化攻击案例

  1. 漏洞利用:
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Deserialize(stream); // 恶意流触发RCE
    
  2. 防御方案:
    • 使用安全的序列化器(如 JSON.NET)
    • 实现 SerializationBinder 限制反序列化类型

6.2 程序集劫持案例

  1. 攻击步骤:
    • 定位程序集加载路径
    • 放置恶意同名的程序集
    • 利用加载顺序优先加载恶意程序集
  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 安全攻防的核心知识点,适用于红蓝对抗、渗透测试和安全开发人员参考使用。

.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 安全加固建议 禁用危险格式化器 : 启用强名称验证 : 实施代码访问安全策略 : 四、红队开发技巧 4.1 隐蔽执行技术 AppDomain 隔离执行 : 动态编译执行 : 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 反序列化攻击案例 漏洞利用 : 防御方案 : 使用安全的序列化器(如 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 安全攻防的核心知识点,适用于红蓝对抗、渗透测试和安全开发人员参考使用。