深入解析IIS Raid技术原理

16 人参与

在分析IIS Raid时,往往会把注意力局限在表面的DLL加载上,实际上它的“隐蔽”来自于对IIS请求管线的深度劫持——一次请求可以在不触发任何日志的情况下,被注入任意PowerShell指令。

IIS Raid的核心机制

IIS Raid并非传统的外部后门,而是利用原生的IIS native module接口,将自定义的HttpModule注册到GlobalModule列表。模块在OnBeginRequest阶段拦截HttpRequest对象,读取特定的自定义Header(如X-CT-BALA),并将Header值与硬编码密码进行比对。匹配成功后,模块直接调用system()PowerShell.exe -EncodedCommand执行传入的payload,随后把执行结果写入自定义响应Header返回给客户端。

请求拦截与指令注入的细节

关键在于pHttpRequest->GetHeader的调用时机。IIS的请求处理是分层的:BeginRequest → AuthenticateRequest → ResolveRequestCache → ... → EndRequest。Raid选择在BeginRequest阶段介入,意味着后续的URL映射、身份验证甚至错误处理都被绕过。此时,IIS的RequestHeaders集合尚未被清洗,攻击者只需在HTTP请求中加入Header: X-CT-BALA: SIMPLEPASSHeader: X-Command: [Base64],即可实现“零痕迹”执行。

  • 模块加载:通过appcmd.exe install moduleapplicationHost.config写入路径。
  • 密码校验:Header字段名与密码均可在源码Functions.h中自定义,降低被特征扫描捕获的概率。
  • 指令执行:Payload采用Base64或URL编码,避免在明文HTTP流中暴露。
  • 结果回传:执行结果被写入自定义响应Header(如X-Result),客户端脚本解析后展示。

“如果你把IIS当成普通的Web服务器来防御,Raid的存在就像是隐形的后门钥匙。”

从防御视角看,最直接的手段是禁用未签名的全局模块、审计applicationHost.configglobalModules节点,并在WAF层面拦截异常Header。事实上,有企业在部署后仅用AppCmd.exe uninstall module便清除了潜在的持久化威胁。到底还有哪些细节被忽视?这正是安全团队需要持续追踪的“灰色地带”。

参与讨论

16 条评论
  • 黄山毛峰

    头一次听说IIS还能这样被利用🤔

    回复
  • 药师陈

    求问怎么检测这种模块

    回复
  • 石匠尤

    之前公司服务器就被类似手法搞过

    回复
  • 行者不眠

    禁用未签名模块真的有用吗

    回复
  • WitheringBehemoth

    这技术也太隐蔽了吧

    回复
  • 死侍

    完全看不懂,太专业了

    回复
  • 无羁的浪子

    这个比传统后门高明多了

    回复
  • 猎户陈

    X-CT-BALA这个特征记住了

    回复
  • 开心超人

    WAF规则能拦住吗

    回复
  • 宇宙无敌美少女

    感觉防御起来好麻烦

    回复
  • 梅超风

    这种攻击方式666

    回复
  • 往昔客

    有没有更详细的检测方案

    回复
  • 冥界来信

    企业安全真的防不胜防

    回复
  • 碧空鹰

    连日志都不触发太可怕了

    回复
  • 赤眉军师

    AppCmd卸载确实简单有效

    回复
  • 泡泡糖梦

    Header自定义这点挺隐蔽的

    回复