基于CLR内存复用的C#隐蔽执行技术研究——动态调用与系统调用实现
字数 1953 2025-09-23 19:27:38
基于CLR内存复用的C#隐蔽执行技术教学文档
1. 技术概述
本技术研究旨在通过C#实现隐蔽的非托管代码执行,核心目标是规避安全产品的检测机制(如API Hooking、IAT检测等)。主要包含两大技术方向:
- 动态调用(DInvoke) - 运行时手动加载DLL并通过函数指针调用函数
- 系统调用(Syscall) - 直接进行系统调用,避免用户层API调用
两项技术均基于CLR内存复用机制实现隐蔽性。
2. 核心概念区分
2.1 非托管代码 vs 托管代码
- 非托管代码:直接在处理器运行的机器码,无需中间翻译
- 托管代码:运行于CLR环境,需要将MSIL中间语言翻译为机器码
2.2 .NET程序编译与执行流程
| 阶段 | 输入 | 输出 | 核心组件 |
|---|---|---|---|
| 编译时 | C#/VB等高级语言代码 | Microsoft中间语言(MSIL) | 对应语言编译器 |
| 运行时 | MSIL | 机器码(原生代码) | JIT编译器 |
| 执行阶段 | 机器码 | 操作系统服务调用 | CLR |
3. JIT编译器与内存特征
3.1 JIT编译逻辑
- 仅在代码首次调用时将MSIL编译为机器码
- 编译结果存储于JIT Code Heap(RWX权限内存区域)
- 后续调用直接执行机器码,避免重复编译
3.2 内存关键发现
- CLR分配的Private属性RWX内存中包含大量0字节空闲区域(代码洞穴)
- 这些区域可复用为临时代码存储区,无需额外内存分配
- 可能因CFG保护和硬件强制堆栈保护(如Intel CET或AMD Shadow Stack)导致Guard Page
4. 动态调用(DInvoke)技术
4.1 实现原理
- 运行时加载DLL(不产生静态导入记录)
- 借助函数指针定位非托管函数
- 通过.NET的Delegate API包装函数指针实现动态调用
4.2 优势场景
- 手动映射PE模块
- 执行系统调用
- 避免可疑导入
- 规避API挂钩(API Hooking)
- 规避IAT中可疑导入的检测
5. CLR内存复用技术
5.1 技术实现
- 枚举内存区域寻找RWX权限区域
- 定位连续的零字节序列(代码洞穴)
- 通过直接操作内存指针
byte* array = (byte*)addr绕过.NET内存安全检查 - 实现对代码洞穴的"写入/擦除"操作
5.2 关键技术点
- 复用CLR分配的RWX内存区域存储并执行汇编代码(shellcode)
- 无需额外内存分配
- 执行后清除代码以降低检测率
- 不调用任何内存分配或内存保护函数
- 使用Windows组件管理的合法内存区域
- 减少与操作系统的交互
6. 直接系统调用实现
6.1 技术基础
- 基于SharpASM技术
- 借鉴ElephantSe4l技术动态获取NTDLL中Zw*函数的系统调用号
- 无需从磁盘读取NTDLL(避免被安全产品标记为可疑)
6.2 实现方法
- 通过PEB(进程环境块)直接从内存中访问NTDLL
- 动态检索系统调用号
- 实现C#中直接系统调用
- 替换DInvoke调用方式
7. 检测与规避
7.1 检测手段
- 模块加载事件关联
- 内存扫描
- ETW监控
- 行为分析
7.2 应对策略
- 复用合法内存区域减少可疑行为
- 执行后清除代码痕迹
- 避免磁盘操作(如读取NTDLL)
- 减少系统交互频率
8. 实践注意事项
8.1 环境配置
- 创建C#的.Net Framework空项目
- 分析时选择x86架构,实际应用选择x64架构
- 整个流程调用可能会失败,需要多次尝试
8.2 已知问题
- 并发执行冲突
- 代码覆盖崩溃
- 核晶模式下的检测规避(部分环境不可用)
9. 测试结果
9.1 安全产品检测情况
- MSF:未检测到(效果较好)
- 卡巴斯基:强力检测(HEUR:Trojan.MSIL.Agent.gen和HEUR:Trojan.MSIL.Shella.gen)
- Windows Defender:未检测到(通过)
9.2 结论
技术具备一定隐蔽性,但对抗高级安全产品仍需改进
10. 未来改进方向
- 增强对抗高级EDR的能力
- 优化内存操作稳定性
- 改进并发处理机制
- 扩展系统调用支持范围
- 增强代码混淆和反分析能力
11. 总结
本文介绍的技术通过结合DInvoke动态调用和CLR内存复用机制,实现了在C#环境中较为隐蔽的非托管代码执行。通过复用JIT编译器分配的RWX内存区域,避免了可疑的内存分配行为,同时通过直接系统调用减少了用户层API的调用痕迹。这项技术为红队操作提供了更加隐蔽的攻击手段,但同时也指出了当前技术的局限性和未来改进方向。
注意:本技术仅用于安全研究和防御目的,请勿用于非法活动。