漏洞背景
2017年4月ShadowBrokers泄露的Eternal Synergy是利用SMBv1协议认证漏洞(CVE-2017-0143)的攻击工具,该漏洞影响Windows 8及以下系统,微软在MS17-010补丁中修复。与常规漏洞不同,该漏洞主要通过数据包层面的操作实现利用。
漏洞原理
核心问题在于SMB协议处理TRANSACTION时未严格校验消息类型:当存在SMB_COM_WRITE_ANDX事务时,若后续收到MID等于该事务FID的SMB_COM_TRANSACTION_SECONDARY消息,系统会错误地将后者纳入当前事务。由于WRITE_ANDX会动态更新InData指针(指向缓冲区末尾),而TRANSACTION_SECONDARY直接使用该指针写入数据,导致缓冲区越界写入。
|
|
利用技术
1. 事务劫持
攻击者通过以下步骤控制事务结构:
- 创建常规TRANSACTION作为控制事务(InData=0xfffff8a00167f110)
- 发送特制WRITE_ANDX消息使InData偏移0x200字节(变为0xfffff8a00167f310)
- 通过TRANSACTION_SECONDARY消息(dataDisplacement=0x5020)覆盖相邻事务的OtherInfo字段
2. 内存读写原语
写原语:
- 劫持受害事务的InData指针指向目标地址
- 发送数据包时,内核会将包内容写入被篡改的地址
读原语:
- 修改受害事务的OutData指针(偏移0x88)
- 设置关键字段:SetupCount=4, MaxSetupCount=0, MaxDataCount=0x20000
- 触发事务响应时,内核会将目标内存内容通过SMB响应返回
3. 代码执行
- 泄露srv!SrvTransaction2DispatchTable地址
- 覆盖TRANS2_SESSION_SETUP处理函数指针(dispatchTable[0xe])
- 发送TRANSACTION2消息触发shellcode执行
现代系统防护
该漏洞利用技术受以下防护机制制约:
- HVCI:阻止执行未签名内核代码
- CFG:防止通过篡改函数指针劫持控制流
技术亮点
- 纯数据包层面的漏洞利用,无需本地shellcode
- 通过事务结构泄露实现内核地址嗅探
- 利用ntoskrnl.exe的RWX段(0x271000偏移处)作为暂存区
|
|
结论
Eternal Synergy展示了协议状态机漏洞的复杂利用方式,其创新性的纯数据包攻击模式为后续SMB协议安全设计提供了重要参考。微软通过增强事务验证机制和引入硬件级防护有效遏制了此类攻击。