3.4.1 通用的最佳实践

下面的建议适用于任何Web平台,不管是通用的还是定制的。

在两个方向上都实施积极的网络访问控制!

我们希望在互联网发展到如此地步的时候,不需要再强调对Web服务器入站通信实施强有力的防火墙的必要性。TCP端口80(如果实施SSL/TLS则是443)是你在入站方向上向一般观众开放的唯一端口(显然,特定的用户团体需要用于内容管理、服务器管理等其他端口的特殊访问)。

尽管入站过滤已经得到广泛认可,但是忽略出站访问控制仍是一个常见的错误。攻击者在获得Web服务器上任何命令的运行能力时,首先要做的事情之一是“挖出”一个外向的Shell,或者建立一个出站连接,用于向受害机器上传更多的文件。使用Web服务器前的防火墙上合适的出站过滤可以阻止这些请求,显著地提高攻击者的门槛。最简单的规则是拒绝除了已经建立的连接之外的所有出站连接,这可以通过阻止所有仅带有TCP SYN标志的数据包来实现。这不会阻止合法入站请求的响应,服务器仍然能接受外部访问(你的入站过滤也很严格,对吗?)。

很重要的一点是,高级的攻击者可能能够阻止合法的出站连接,绕过出站过滤。但是,在我们的经验中,这实际上是很困难的,建立严格的出站访问控制仍然是Web服务器上能够实现的最重要的防御层。

应用最新的安全补丁

维护强壮和安全的Web平台的最有效方法是保证系统具备最新的安全补丁。这没有捷径:你必须持续地为平台和应用打上补丁。尽管你可以采取许多其他的步骤来更好地加固系统抵御攻击,但是在安全更新公布时应用到你的系统中是你所能做的最重要的事情。我们建议使用自动补丁工具如Microsoft Update服务来帮助保证最新的补丁。对于Apache,我们建议简单地订阅Apache公告列表,在新版本公布时通知你,这样就可以进行升级(链接参见本章结尾处的“参考与延伸阅读”)。

不要在源代码中放入私有数据

如果你培训开发团队不要犯这个经典的错误,就不需要对黑客广为传播的最新和最大的源代码泄露问题太过担心。最常见的一些错误包括:

·ASP脚本中的明文SQL连接串: 用SQL集成安全或者二进制COM对象代替。

·在应用配置文件中使用明文密码: 始终避免在global.asa或web.config等应用配置文件中的明文密码。考虑使用Microsoft DPAPI。

·使用带有.inc扩展名的包含文件: 将包含文件改名为.asp、.php或者对你的Web应用平台来说合适的扩展名。

·脚本中包含私有信息如电子邮件地址、目录结构信息和密码的注释: 不要编写易受攻击的文档。确保删除可能用来针对你的Web平台和应用信息。

定期扫描网络中的脆弱服务器

避免这些危害的最佳机制是定期扫描可能引发这些危害的漏洞。有许多非常有用的Web应用评估产品,如HP WebInspect和Watchfire AppScan。这些产品都能很好地识别Web平台、应用和配置漏洞。

提示  自动化Web安全评估工具的评论参见第10章。

了解遭到攻击的迹象

你总是希望像对待预防一样严肃地对待事故响应——对于脆弱的Web服务器尤其如此。为了了解你的服务器是否已经成为攻击的受害者,我们建议完成后述的规定调查活动,包括后述的经典技术。

在被侵害的Web服务器上使用netstat实用程序是识别奇怪的出入站连接的一种方法。正如我们所看到的,这些连接有时可能是实例化后续的漏洞利用的流氓shell。出站连接使得区分敌意连接和合法链接更加困难。

提示  在Windows XP及更新的版本中,netstat命令修改为显示使用TCP/IP端口的程序——使用-o开关。

另一个好的调查点是文件系统。许多固定的攻击在互联网上流行。这些攻击的许多相关文件最初由认真的安全研究人员公布,常常被“脚本小孩”重用。例如,IIS上的Sensepost.exe、Upload.asp、Upload.inc和Cmdasp.asp常被用于在系统上设置后门。特别要注意可写/可执行目录如IIS/scripts中未授权的文件。其他常见的IIS攻击常常利用如下文件:

你还应该考虑安装文件系统监控工具如Tripwire,它能在Web服务器上出现任何新的未授权文件时警告你。

最后,也可能是最明显的,Web服务器日常常常是第一个显示未授权活动的地方(除非攻击者实施了前面讨论过的日志逃避技术)。将分析日志文件作为标准操作程序的一部分常常能帮助你检测攻击和入侵。我们知道即使定期监控中等大小的Web服务器场的日志和文件系统也需要巨大的工作量,但是希望这些提示能在你已经发现服务器可能已经遭到入侵时对你有帮助。