通常,Web应用程序服务器需要对外开放访问,这也意味着它们会面临各种潜在的威胁。
这些威胁中,有些是可以预见的并且容易防范,但还有一些是未知的,可能让人措手不及。为了尽可能降低后一种情况发生的可能性,我们总结了一系列基本技巧,以确保Web应用程序服务器尽可能安全可靠。
在开始介绍这些技巧之前,请务必了解Web应用程序服务器不是一个孤立的个体。服务器是Web应用程序环境的核心组成部分,它使得Web应用程序的托管和运行成为可能。因此,为了确保安全,你必须考虑围绕它的所有组件,并保护整个Web应用程序环境。
托管和运行Web应用程序的基本环境包括操作系统(例如Linux、Windows)、Web服务器软件(例如Apache、Nginx)以及数据库服务器。如果这些组件中的任何一个被入侵,攻击者就可能获得访问权限,并执行他们想做的任何恶意操作。
保护上述环境的首要基本步骤是详细阅读每个组件的安全指南和最佳实践列表。接下来,我们来回顾一些适用于几乎所有Web应用程序环境的常识性安全准则。
防火墙的真相
你可能会快速浏览此项,并想,“还好,我已经有防火墙保护我的网络了。”但最好先冷静一下。
你的网络防火墙可能正在处理你的网络边界,阻止坏人进入,并允许好人进入,但可以肯定的是,它也为攻击者闯入你的Web应用程序服务器打开了大门。
为什么呢?
很简单:你的网络防火墙必须至少允许端口80和443(即HTTP和HTTPS)上的入站流量,而它并不知道谁或什么正在通过这些端口。
你需要保护你的应用程序的是一个Web应用程序防火墙(WAF)。它专门分析Web流量,并阻止任何利用跨站脚本攻击或代码注入等漏洞的尝试。WAF的操作类似于典型的防病毒和反恶意软件:它在数据流中查找已知的模式,并在检测到恶意请求时将其阻止。
为了有效,WAF需要不断更新其数据库,以识别新的威胁模式,从而能够阻止它们。基于模式的攻击预防的问题在于,你的Web应用程序可能成为你的WAF尚未识别出的新威胁的首个目标。
因此,除了网络防火墙之外,你的Web应用程序还需要额外的保护层。
扫描Web特定漏洞
同样,不要仅仅因为你的网络安全扫描程序说没有问题,就认为你的Web应用程序服务器没有漏洞。
网络扫描程序无法检测到特定于应用程序的漏洞。为了检测和消除这些漏洞,你必须对应用程序进行一系列测试和审计,例如渗透测试、黑盒扫描和源代码审计。但这些方法都不是绝对万无一失的。理想情况下,你应该尽可能多地执行这些测试,以消除所有漏洞。
例如,像Invicti这样的安全扫描仪可以确保没有可利用的代码进入生产环境。但是,可能存在只能通过人工代码审计检测到的逻辑漏洞。人工审核除了成本高昂之外,也是一种容易出错的人工操作。在不花费大量资金的情况下进行此类审核的一个好方法是将其纳入开发过程,主要是通过对你的开发人员进行安全教育。
教育你的开发人员
开发人员倾向于认为他们的应用程序运行在一个理想的世界中,在这个世界里资源是无限的,用户不会犯错,也没有恶意的人。不幸的是,他们迟早需要面对现实世界的问题,特别是那些与信息安全有关的问题。
在开发Web应用程序时,编码人员必须了解并实施安全机制,以确保程序没有漏洞。这些安全机制应该成为开发团队必须遵守的最佳实践指南的一部分。
软件质量审计用于确保符合最佳实践。最佳实践和审计是检测逻辑漏洞的唯一方法,例如在URL中传递未加密且可见的参数,攻击者可以轻松更改这些参数以达到自己的目的。
关闭不必要的功能
假设你的Web应用程序尽可能无错误,并且Web环境是安全的,接下来让我们看看在服务器本身上可以做些什么来保护它免受攻击。
一个基本的常识性建议是减少潜在的攻击入口点。如果攻击者可以利用Web服务器的任何组件,那么整个服务器都可能处于危险之中。
列出服务器上所有打开的端口和正在运行的服务或守护进程,并关闭、禁用或停用任何不必要的端口。服务器不应运行除Web应用程序之外的任何其他服务,因此请考虑将所有附加功能移动到网络中的其他服务器。
为开发、测试和生产使用单独的环境
开发人员和测试人员需要在他们工作的环境中获得一些在生产应用程序服务器上不应拥有的权限。即使你完全信任他们,他们的密码也可能容易泄露,落入不法之徒的手中。
除了密码和权限之外,在开发和测试环境中,通常存在一些后门、日志文件、源代码或其他调试信息,这些信息可能会暴露数据库的用户名和密码等敏感数据。Web应用程序的部署过程应由管理员完成,管理员必须确保在应用程序安装到生产服务器后,不会暴露任何敏感信息。
相同的隔离概念也需要应用于应用程序的数据。测试人员和开发人员总是更喜欢使用真实数据,但授予他们访问生产数据库甚至其副本的权限并不是一个好主意。除了明显的隐私问题之外,数据库还可能包含显示内部服务器设置的配置参数,例如端点地址或路径名等。
保持服务器软件更新
虽然这看起来很明显,但这是最容易被忽视的任务之一。SUCURI发现,59%的CMS应用程序都已过时,存在风险。
每天都会出现新的威胁,防止这些威胁危害你的服务器的唯一方法是始终安装最新的安全补丁。
我们之前提到过,网络防火墙和网络安全扫描仪不足以防止针对Web应用程序的攻击。但是,它们对于保护你的服务器免受常见的网络安全威胁(例如DDoS攻击)至关重要。因此,请务必确保你始终更新这些应用程序,并确保它们有效地保护你的业务应用程序。
限制访问和权限
一个基本的安全措施是对远程访问流量(例如RDP和SSH)进行加密和隧道传输。减少允许远程访问的IP地址列表也是一个好主意,确保阻止任何来自其他IP地址的远程登录尝试。
管理员有时会授予服务帐户所有可能的权限,因为他们知道这样做“一切都会正常运行”。但这并不是一个好做法,因为攻击者可以利用服务中的漏洞来渗透服务器。如果这些服务以管理员权限运行,它们可能会控制整个服务器。
安全性与实用性之间的良好平衡要求每个帐户(登录帐户和服务帐户)都只具有执行其工作所需的权限,而不具备其他权限。
例如,你可以为管理员定义不同的帐户来执行不同的任务:一个用于备份,一个用于清理日志文件,另一个用于更改服务配置,等等。这同样适用于数据库帐户:应用程序通常只需要读取和写入数据的权限,而不需要创建或删除表的权限。因此,它应该使用权限受限的帐户运行,以执行其需要执行的任务。
密切关注服务器日志
日志文件的存在是有原因的。
管理员应该定期监控它们,以便在任何可疑行为造成任何损害之前发现它。通过分析日志文件,你可以发现大量信息,帮助你更好地保护你的应用程序。如果发生攻击,日志文件可以向你显示攻击的开始时间和方式,有助于更好地控制损害。
你还必须有一个自动化的过程来删除旧的日志文件或修剪过时的信息,以防止它们消耗服务器的所有可用存储空间。
额外提示:保持信息畅通
互联网上有许多免费且有用的信息,你可以利用这些信息来改善你的Web应用程序。不要错过信誉良好的安全博客(例如这篇文章)上的任何新帖子,并随时了解安全和网络行业正在发生的事情。
教程、课程、视频和书籍也是有用知识的来源。练习每周花费一两个小时来了解行业新闻——这会让你安心,因为你知道自己正在做正确的事情来确保应用程序的安全。