IIS版ModSecurity扩展正式发布:增强Web应用安全防护

微软宣布为IIS平台推出ModSecurity扩展RC版本,提供针对跨站脚本、请求伪造等Web漏洞的虚拟补丁防护。文章详细介绍了安装配置方法,并通过CVE-2011-3414和CVE-2012-1859案例展示规则配置实践。

宣布IIS版ModSecurity扩展可用性

在线服务中的漏洞(如跨站脚本、跨站请求伪造甚至信息泄露)是微软安全响应中心(MSRC)的重点关注领域。过去几年中,微软开发了多种能够缓解特定Web漏洞的工具(例如UrlScan)。为此我们参与了一项社区工作,将流行的开源模块ModSecurity引入IIS平台。昨日在拉斯维加斯Black Hat大会上,我们宣布了RC版本的可用性,并预计稳定版本即将发布。

安装

尽管ModSecurity的IIS组件源代码已完全公开且二进制构建过程有公开说明(参见SourceForge代码库中的mod_security/iis/winbuild/howto.txt),但强烈不建议非研究或非开发目的自行构建模块。

适用于IIS 7及更高版本的ModSecurity标准MSI安装程序可从ModSecurity项目的SourceForge文件库获取,未来指定的维护者将持续更新最新补丁和模块次要版本。

配置

IIS安装程序不会干扰当前运行的Web应用程序。这意味着安装后必须重启或回收应用程序池才能将新模块加载到应用程序池进程中。对于该模块的RC版本,每次修改ModSecurity配置文件后也强烈建议执行重启/回收操作:

![应用池回收示意图]

模块成功加载到应用程序池进程后,应用程序事件日志中会记录一系列信息事件:

![事件日志示意图]

运行阶段生成的消息和通知(包括用户定义规则和系统特定事件或错误)将发送到同一应用程序事件日志存储库。

要将ModSecurity配置文件应用到Web应用程序或路径,需使用IIS配置架构扩展,如下例所示:

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <ModSecurity enabled="true" configFile="c:\inetpub\wwwroot\test.conf" />
  </system.webServer>
</configuration>

其中c:\inetpub\wwwroot\test.conf是常规ModSecurity配置文件,包含与Apache Web服务器相同的指令。

防护示例

ModSecurity最常见的应用是称为"虚拟补丁"的防护层(参见资源部分[5])。我们以两个近期漏洞为例展示如何在运行ModSecurity的IIS服务器环境中配置该防护层。

CVE-2011-3414

2011年12月,ASP.NET中修复了一个允许攻击者在大多数ASP.NET Web应用程序上造成过度处理器负载的漏洞。该哈希冲突问题要求攻击者向服务器发送大型(通常为1MB或4MB)POST请求,其中包含数万个特殊命名的参数。至少有四种方法可以缓解此类攻击:

  1. 限制请求体大小
  2. 限制参数数量
  3. 识别重复负载
  4. 根据PoC数据检查参数名称

检查重复负载存在的方法最为复杂,可以在ModSecurity中使用以下规则链实现:

1
2
3
4
5
6
SecRule &ARGS "@ge 1000" "chain,id:1234,phase:2,t:none,deny,msg:'Possible Hash DoS Attack Identified.',tag:'http://blogs.technet.com/b/srd/archive/2011/12/27/more-information-about-the-december-2011-asp-net-vulnerability.aspx?Redirected=true'"
SecRule REQUEST_BODY "^\w*?=(.*?)&\w*?=(.*?)&\w*?=(.*?)&\w*?=(.*?)&" "chain,capture"
SecRule TX:1 "@streq %{tx.2}" "chain,setvar:tx.hash_dos_match=+1"
SecRule TX:2 "@streq %{tx.3}" "chain,setvar:tx.hash_dos_match=+1"
SecRule TX:3 "@streq %{tx.4}" "chain,setvar:tx.hash_dos_match=+1"
SecRule TX:HASH_DOS_MATCH "@eq 3"

当此规则加载到IIS服务器配置中且在受保护路径上发起攻击时,Windows应用程序事件日志将记录来自ModSecurity的访问拒绝消息:

![哈希DoS攻击阻止示意图]

同时攻击者将看到HTTP 403响应,在攻击到达ASP.NET脆弱组件之前即被阻止。

CVE-2012-1859

2012年7月,微软修复了Microsoft SharePoint 2010中的一个典型反射型跨站脚本漏洞。要利用此漏洞,攻击者只需诱使用户点击恶意URL,例如:

1
http://sharepoint/_layouts/scriptresx.ashx?culture=en-us&name=SP.JSGrid.Res&rev=laygpE0lqaosnkB4iqx6mA%3D%3D&sections=All<scriptalert('Hacked>!!!')</script>z

攻击者注入的脚本可以获取受害者通过被黑SharePoint服务器可访问的完整数据集。

一种可能的阻止方法是白名单方法:允许仅包含有效字符的sections参数URL通过,同时阻止所有其他URL。以下是实现字母数字字符检查的ModSecurity规则:

1
2
SecRule REQUEST_FILENAME "@contains /_layouts/scriptresx.ashx" "chain,phase:1,block,msg:'SharePoint Sections Param Violation - Illegal Chars"
SecRule ARGS:sections "!@rx ^\w+$"

通过ModSecurity配置文件包含到SharePoint web.config文件中的此规则,在相应SharePoint URL中发现任何无效字符(表明可能的攻击尝试)时生成以下事件:

![SharePoint攻击阻止示意图]

反馈

我们鼓励您下载并试用此工具。如果您有任何使用体验的反馈,可以通过switech@microsoft.com联系我们。

致谢

以下人员为ModSecurity的多平台工作做出了贡献:

Microsoft – ModSecurity IIS移植

  • Greg Wroblewski – 高级安全开发人员
  • Suha Can – 安全研究员/开发人员

Trustwave - ModSecurity

  • Ziv Mador – 安全研究总监
  • Ryan Barnett – 安全研究主管
  • Breno Pinto – ModSecurity研究员和开发人员

开源社区 - Nginx安全移植

  • Alan Silva - Locaweb软件工程师

我们要感谢Microsoft IIS团队的Wade Hilmo和Nazim Lala,他们在解决许多技术问题方面提供了支持和帮助。最后,感谢Russ McRee的幕后合作和鼓励,推动了这项工作的启动。

资源

[1] ModSecurity主页: http://www.modsecurity.org/
[2] OWASP ModSecurity核心规则集: https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
[3] http://blog.modsecurity.org/files/enough_with_default_allow_r1_draft.pdf
[4] http://www.modsecurity.org/documentation/Securing_Web_Services_with_ModSecurity_2.0.pdf
[5] https://www.blackhat.com/presentations/bh-dc-09/Barnett/BlackHat-DC-09-Barnett-WAF-Patching-Challenge-Whitepaper.pdf
[6] http://holisticinfosec.blogspot.com/2012/12/toolsmith-modsecurity-for-iis.html

  • Greg Wroblewski, Microsoft安全工程中心
  • Ryan Barnett, Trustwave
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计