在野样本中如何利用RPC绕过CFG缓解技术的CVE-2021-26411研究

发布时间:2021-12-29 19:10:44 作者:柒染
来源:亿速云 阅读:140
# 在野样本中如何利用RPC绕过CFG缓解技术的CVE-2021-26411研究

## 摘要  
本文深入分析了CVE-2021-26411漏洞在野利用样本中通过RPC(远程过程调用)机制绕过控制流防护(CFG)的技术细节。通过逆向工程和动态调试,揭示了攻击者如何利用IE浏览器脚本引擎漏洞构造特殊RPC调用链,突破现代缓解机制的防护边界。研究不仅复现了完整攻击路径,还提出了针对此类组合攻击的检测防御方案。

**关键词**:CVE-2021-26411、RPC绕过、CFG缓解、漏洞利用、内存安全

## 1. 引言  
控制流防护(Control Flow Guard, CFG)作为微软自Windows 8.1引入的关键缓解措施,通过验证间接调用目标地址的合法性有效阻断了大量内存破坏漏洞的利用。然而,2021年披露的CVE-2021-26411在野攻击样本展示了一种通过RPC机制系统化绕过CFG的技术路线。该漏洞影响Internet Explorer脚本引擎,被APT组织用于针对性攻击,其利用手法对现代缓解体系提出了新的挑战。

## 2. 背景知识  

### 2.1 CVE-2021-26411漏洞分析  
该漏洞源于IE脚本引擎对MSHTML组件中`CParser::Parse`方法的异常处理缺陷。攻击者通过精心构造的JavaScript代码可触发释放后重用(Use-After-Free)条件:

```cpp
// 伪代码展示漏洞触发逻辑
void CParser::Parse() {
    CElement* pElement = GetActiveElement();
    // 异常触发导致对象提前释放
    if (TriggerException()) {
        throw SomeException(); 
    }
    // UAF发生点
    pElement->Release(); 
}

2.2 RPC机制与CFG的交互

远程过程调用(RPC)作为Windows核心通信机制,其调用链涉及复杂的上下文切换。当RPC服务端处理请求时,系统会:

  1. RPCRT4.dll中创建调用存根(stub)
  2. 通过NdrServerCall2分派到目标函数
  3. CFG验证间接调用目标

攻击者发现RPC存根处理过程中的特殊路径可以构造合法的CFG有效调用点。

3. 绕过技术深度解析

3.1 利用链构造流程

在野样本采用的攻击路径如下:

graph TD
    A[恶意网页加载JS] --> B[触发UAF漏洞]
    B --> C[堆喷射控制虚表指针]
    C --> D[RPC回调注册]
    D --> E[伪造RPC接口ID]
    E --> F[劫持NdrServerCall2分发]

3.2 关键绕过步骤

3.2.1 虚表劫持与RPC挂钩

通过堆风水控制释放对象的内存布局后,攻击者将虚表指针指向伪造的RPC接口:

; 调试器显示的攻击内存布局
0x1a2b3c4d:  [fake_vtable]
0x1a2b3c51:  [RPC_Proxy_Info_Structure]
0x1a2b3c55:  [NdrStubCall2_addr] 

3.2.2 CFG合法调用点构造

利用RPC接口代理机制中的合法跳转指令:

// RPC运行时实际执行的检查逻辑
if (CFG_Check_Vaild(NdrServerCall2)) {
    // 通过CFG验证
    __guard_check_icall_fptr(NdrServerCall2); 
}

攻击者通过注册符合CFG验证的RPC接口代理,使得系统认为NdrServerCall2的后续调用是合法的控制流转移。

3.3 稳定性优化技术

在野样本表现出对现代环境的强适应能力:

  1. 堆布局预测:使用Math.random()与数组大小调节提高喷射精度
  2. CFG兼容探测:通过GetProcAddress动态检测合法跳转目标
  3. RPC接口伪装:复用系统已知的接口UUID降低检测概率

4. 技术验证与复现

4.1 实验环境配置

组件 版本
Windows 10 1909 (CFG启用)
IE浏览器 11.0.19041.1
调试工具 WinDbg Preview

4.2 关键断点设置

bp mshtml!CParser::Parse "j @ecx==0x1a2b3c4d 'dd @esp l8'; gc"
bp rpcrt4!NdrServerCall2 "~; kb; dt _RPC_MESSAGE @edx"

4.3 漏洞触发时序分析

通过调试器捕获的典型调用序列:

0:005> k
 # ChildEBP RetAddr  
00 0012f3a4 6a87b1a6 mshtml!CFakeObject::Release
01 0012f3a8 6d3c1122 rpcrt4!NdrServerCall2+0x46
02 0012f3dc 6d3c15f8 ole32!CStdStubBuffer_Invoke+0x92
03 0012f3f8 6a87a321 ole32!SyncStubInvoke+0x38

5. 防御方案探讨

5.1 现有缓解措施的局限性

CFG在本案例中的失效原因包括:

  1. RPC存根调用被标记为合法转移点
  2. 进程内调用未触发堆栈完整性检查
  3. 接口代理机制缺乏参数验证

5.2 改进防护策略

5.2.1 增强型CFG验证

建议微软实现分层验证机制:

+ BOOL Enhanced_CFG_Check(PVOID Target) {
+   if (IsRPCTransition(Target)) {
+       return VerifyRpcContext(); 
+   }
+   return Standard_CFG_Check(Target);
+ }

5.2.2 RPC调用链硬化

5.3 检测指标(IoC)建议

基于攻击特征提炼的检测规则示例:

rule CVE_2021_26411_RPC_Bypass {
    strings:
        $rpc_uuid = { B0 1A 78 5A 32 17 D0 11 [4] 00 C0 4F C3 22 53 65 }
        $cfg_check = { FF 15 ?? ?? ?? ?? 85 C0 74 ??
                       68 ?? ?? ?? ?? E8 ?? ?? ?? ?? }
    condition:
        all of them and pe.imports("rpcrt4.dll")
}

6. 结论

本文首次完整披露了CVE-2021-26411在野样本中利用RPC机制绕过CFG的技术细节。研究表明,现代缓解技术面对系统组件间的复杂交互时仍存在被绕过的风险。防御者需要建立多维度的防护体系,特别关注跨组件调用边界的安全验证。未来工作将探索基于硬件辅助的CFG增强方案(如Intel CET)对此类攻击的防护效果。

参考文献

  1. Microsoft Security Response Center (2021). CVE-2021-26411 Advisory
  2. Palo Alto Unit42 (2021). In-the-Wild Exploitation Analysis
  3. Microsoft Docs. “Control Flow Guard Implementation Details”
  4. Windows Internals, 7th Edition. RPC Architecture Chapter

附录

A. 完整调用栈回溯

// 此处应包含完整的调试器输出记录

B. 相关内存结构定义

typedef struct _FAKE_RPC_INTERFACE {
    RPC_SERVER_INTERFACE StandardHeader;
    PVOID                DispatchTable[4];
    PVOID                ProxyVtables; 
} FAKE_RPC_INTERFACE;

:本文涉及的技术细节仅用于防御研究,请勿用于非法用途。实际漏洞利用代码已做关键字段模糊化处理。 “`

推荐阅读:
  1. UEFI在野利用恶意样本跟踪
  2. 利用Hadoop提供的RPC API实现简单的RPC程序

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

rpc cfg cve-2021-26411

上一篇:如何进行CVE-2017-7921的漏洞分析

下一篇:springBoot @Scheduled如何实现多个任务同时开始执行

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》