我可以有把握地说,对于Windows服务器管理员来说普遍的目标是拥有适当弹性的系统。世界上有很多网络安全威胁,你最不希望发生的是在世界的另一头,或者在你的组织内部有人利用了IIS或者Windows的漏洞,而这一切都是本来可以避免的。
你可能无法触及应用层面的漏洞,但是在服务器层面你有很多事情可以做到使基于IIS的系统更加安全。通过回顾我多年的网站安全评估项目,可以指出以下最影响Windows服务器的IIS漏洞。
未处理异常(HTTP 500 错误)的产生
这会泄露敏感的配置信息和促进SQL注入攻击。在服务器方面的解决方法是在以下服务器的web.conf文件中取消详细的错误信息。
<customErrors mode="RemoteOnly" defaultRedirect="AppErrors.aspx">
<error statusCode="404" redirect="NoSuchPage.aspx"/>
<error statusCode="403" redirect="NoAccessAllowed.aspx"/>
<error statusCode="500" redirect="RequestNotAllowed.aspx"/>
</customErrors>
视图状态加密和MAC被禁用
这会导致攻击者篡改敏感参数从而获得非授权访问。在服务器方面的解决方法是在以下服务器的web.conf文件中对所有的应用页面启用视图状态哈希和MAC。
<system.web>
<pages viewStateEncryptionMode="Always">
<pages enableViewStateMac="true"/>
<machineKey validation="3DES"/>
</system.web>
非加密的HTTP连接被允许
这会导致登录信息和其他敏感信息的暴露,因为任何与Web服务器来往的信息都会以明文方式传输。在服务器方面的解决方法是使其需要TLS版本1.1以及对整个网页/应用都进行加密。
SSL版本2和3以及弱加密算法被启用
这可以促进中间人攻击以及导致敏感信息泄露。服务器端解决的方法是使其需要TLS版本1.1和取消弱密码算法例如RC4。
跨框架脚本成为可能
这可以促进点击挟持和误导用户点击一些不同于他们认为正在点击的内容。服务器端的解决方法是根据你的具体需求设置X-Frame-Options头部为DENY,SAMEORIGIN 或 ALLOW-FROM。
敏感的服务器目录和文件是公众可以访问的
这可以暴露系统配置信息,代码和敏感信息。服务器的解决方法对于公众用户只开放必要的权限。
没有打Windows补丁
这可能导致任何攻击,小至拒绝服务攻击,大至使用例如Metasploit工具得到Web服务器的完整远程权限。服务器方面的解决方法是给你的服务器打补丁,这个操作很简单。即使你打算将来这个服务器需要从生产环境中下线,你也需要始终全盘的为服务器打补丁,这样才能打造一个安全的Web环境。
大多数的漏洞可能不会被认为是“关键的”,但是它们一定是长期会有问题的。如你所见,他们解决起来是相对简单的。事实上,解决他们唯一的消耗只是你的时间而已。找到并且解决这些问题,业务的安全会取得成功,并且会有助于漏洞扫描和安全评估报告看上去很干净。
一旦你处理完网页服务器基本面的安全之后,你可以为你的Web应用向更大——一般也更复杂——的安全缺陷考虑。这包括了跨站脚本(一种最常见的漏洞)、SQL注入(一种没那么常见但很致命的漏洞)、弱用户认证和会话管理。到了这里,才是乐趣的真正开始。