关于软件安全
Norris 说:“对应用程序层的攻击正在增加。其证据是:缓冲区溢出类型的攻击和对缓冲区溢出根安全的破坏显著地增加 — 这二者都处于应用程序级。通常操作系统无法提供帮助,当然防火墙和病毒扫描程序不能对付这类攻击。”
Dan Norris,Celeritas Technologies Norris指出,这些攻击经常导致公司的敏感数据被发布到互联网上。“曾有些恶名昭著的攻击成为重大新闻,而现在公司不只是仅仅安装防火墙和病毒扫描程序。保护应用程序层的安全已变得更加重要。”
最近,一家制造公司聘请 Celeritas 来设计安全的、面向客户的门户。考虑到客户是美国联邦政府,安全性是头等大事。
安全性对比可使用性
现在保护应用程序经常意味着在可用性与保护级别之间进行选择-安排的保护级别越高就意味着用户必须通过更多的限制环节,从而减少了应用程序的可用性。
Norris解释说:“这始终是一种平衡艺术。对于真正的安全设置,我们通常安装应用程序,然后将安全性固定在应用程序停止运行的点,然后再略微回退一些。这样可能要花费很多时间和成本,因此您必须帮助客户确定他们实际上需要什么级别的安全性。”确定该需求必须平衡考虑攻击闯入的代价与最终用户的可访问性。Norris补充说:“对于我们的客户而言,被破坏的代价非常高,但他们也希望应用程序易于使用。”
Norris解释说客户希望使用已经部署的公共密钥基础架构(PKI)证书来认证Oracle应用服务器以及新的门户应用程序中。这样,用户可以继续在新的应用程序中使用他们原有的证书文件,同时保持一次性登录(SSO)操作。
Norris说:“最重要的因素是每个用户具有包括两个要素的认证。用户必须提供他们的PKI证书文件,然后还必须输入口令。”
这种两个要素的方法使事务对用户保持简单,而由于攻击者很可能不能同时获得两样信息,该方法仍可提供强大的前门安全性。攻击者可能会截取PKI证书,但不会得到口令,反之亦然,攻击者可能截获口令,但却缺少所需的PKI证书。这就像有锁却没有钥匙,或者有钥匙却没有锁。
Norris承认:“利用一次性登录来部署PKI登录是很繁重的工作。但在这种情况下,这些工作是值得的,因为最终用户可以在良好的保护下方便地进行一次性登录。”
除了Oracle应用服务器门户非常适用于PKI/SSO设计之外,Norris也喜欢Oracle应用服务器打开和关闭服务的便利性。他解释说:“多数人习惯于在操作系统中进行这项工作。您希望操作系统在具有最少量权限的情况下运行尽可能少的服务。使用Oracle,您也可以在应用程序层进行此项工作,只打开那些您需要的服务。由于Oracle应用服务器与PKI能够良好地协作,在认证用户后可以方便地打开更多的服务,从而在不降低应用程序整体功能的情况下确保了应用程序的安全。”
最初的步骤经常是些小事情
一旦确定了认证系统,并且将操作系统和应用程序服务减少到最小程度,就可以开始围绕应用程序本身构建安全性了。Norris建议从明显的地方开始。
他解释说:“我的第一步始终是服务器和网络组件的物理安全性。它们是否锁定并且安全?是否有人能够接触服务器并接出一根网络电缆?备份磁带是否放在安全的地方而不会被偷走?这些问题看似明显,但我们确实多次看到硬件上运行的安全代码并没有物理保护,特别是在较小的公司里。您无法确定谁从物理上接触了系统的某些部件。”
下一步,Norris确保登录、审计和用户帐号全部属于安全方法。他解释说:“对于需要登录、进行更改以及管理配置的系统管理员来说,我们只允许在UNIX系统中的加密终端会话。我们不允许任何人以组所有者的帐号直接登录到服务器,而是强制每个人以其自己正常的用户帐号登录,然后使用审计实用程序来查看谁在什么时间登录。如果这些帐号中的某个帐号有漏洞,我们会有审计线索来了解攻击者如何制造漏洞以及通过谁的帐号进入系统。”
此外,Norris在每个节点安装了入侵检测软件(IDS),对于服务器访问机制中的任何异常操作,该软件都会发出警告。他还安装了许多日志查看实用程序,确保使用任何易于检索的高亮显示关键数据来监视正常的UNIX系统日志。
Norris随后处理有关掩盖实际系统信息的问题。“作为安全性设计师,我希望确保攻击者尽可能少地了解我们的环境。如果他们了解我们正在运行某个版本的Apache,就不难去找到该特定版本的漏洞并利用它们。”
尽管Norris承认掩盖系统信息并不保证安全性,但他认为这样使得对系统的攻击更困难。Norris说:“掩盖信息经常会使攻击者感到沮丧,从而去寻找某些更易于攻击的地方,停止在我们这里浪费时间。”
Norris警告说:“正是这些小事情可能很重要。您可能拥有世界上最好的应用程序设计,但如果您疏漏了小事,就是让自己向攻击敞开大门。”
保护互联网层的安全
用户接触的第一层必须与它后面的任何一层同样安全。对于Norris的客户,这意味着所有互联网交互作用的单点登录。他解释说:“用户将看到的唯一东西是限制非常严格的前端防火墙的集群。”(参见下面的体系结构。)
防火墙集群允许通过的唯一通信是HTTPS,而只有这些端口被提供给实际认证的客户。他补充说:“这意味着如果某些人想攻击我们,他们只能在非常小的范围中进行。”
在防火墙后面是负载均衡器层。Norris以这种方式配置负载均衡器,只允许传递特定的URL请求,并且它们作为HTTPS协议的终点,将会终止硬件上的SSL连接。
Norris还使用负载均衡器本身作为其系统掩盖技术的一部分。他解释说:“面对我们的负载均衡器,攻击者很难弄清楚系统中有一台服务器还是二十台服务器。这是另一种使坏人感到沮丧的方法。”
在负载均衡器层后面是实际的Web服务器。Norris解释说,“在我们的案例中,我们使用Oracle应用服务器的中间层服务器。即使您到达这里的唯一方法是通过好几个安全层,我们仍会关闭任何不必要的服务,确保这些服务器上只运行最少量的服务。如果某些人确实偶然找到了攻击我们的方法,他们在进入系统后也找不到什么。”
在维持性能的同时保护应用程序层的安全
在互联网前端层的后面是应用服务器层及其与后端应用程序和数据库的交互部分。在这里Norris必须设计足够的安全性,并且还要维持高可用性和性能。
Norris解释说:“这是我们喜欢使用Oracle应用服务器集群的原因之一。除了可伸缩性及其Web高速缓存的故障切换特性之外,Oracle应用服务器还允许我们打开或关闭我们需要的服务。我们希望以这样的方式激活服务,以保持系统的安全性,但这样也节省了CPU和内存的开销。”
Norris还以这种方式使用负载均衡器,将许多安全套接字层(SSL)的管理与应用程序层相分离。SSL加密和解密会占用系统资源,因此处理这些功能是维持高性能的关键。
Norris解释说:“这个门户站点上没有任何信息能在互联网上不受阻碍地传送。由于这种加密/解密工作负载,我们决定在我们的负载均衡器集群中使用SSL终端,同时还可以在其中管理我们的SSL证书。”
数据流相当简单。负载均衡器上有接收HTTPS数据包的软件代理程序。代理程序与虚拟IP地址的不同之处在于,代理程序必须进行某些协议转换。在此文中,代理程序与SSL终端硬件协作,通过剥除数据包外围的加密和封装,将协议从HTTPS转换到HTTP。随后负载均衡器将HTTP请求发送到Web服务器;在此文中,将请求发送到运行Oracle应用服务器的中间层服务器。
Norris补充说,所获得的性能增益很难量化,但他指出,使用软件在服务器端执行SSL加密/解密操作与在专用硬件中执行该操作对比,其成本较为昂贵。
Norris说:“典型的数量是,使用软件时一台典型的主机可能每秒钟能够处理20到30个SSL连接。使用SSL加速硬件时,负载均衡器集群可以每秒钟处理完大约1000或更多的连接。因此它是效果显著的性能增强器。”
Norris还喜欢管理的便利性。“从长远来看,无论您扩展到多少个实际的中间层服务器,您都可以在单个位置管理您的所有SSL证书。”
Norris继续解释他的详细安全方法直至后端。在应用服务器集群的后面是另一对防火墙,它们从每个应用服务器节点接收SQL*Net通信,并允许这些通信传送到适当的数据库节点。
这第二层防火墙在门户信息库和数据库的前面建立起虚拟的“非军事化区”。这样,即使出现了应用程序层被破坏这样不太可能出现的情况,由于第二层防火墙的缘故,对实际数据的破坏也会受到限制。Norris 说:“使用防火墙放置DMZ确保了最后一级防护,保证攻击者无法到达数据库层。”
最后,使用实际应用程序集群(RAC)在共享磁盘环境中存放实际的门户信息库和必要的客户数据,后端本身可以保持高度可用和可伸缩。
Norris补充说:“不可否认后端上的RAC服务器略有些小,但是它可以向我们的RAC环境中动态添加其他节点,这使得我们最终不必过多担心满足可伸缩性的问题。”
对安全性设计师的建议
在考虑安全性问题时,顾问们需要了解他们的客户可以得到的不同选择。良好的安全性从设计的第一天开始,并贯彻到良好的管理和系统监管中。
Norris说:“要在安全性设计方面工作出色,您必须以没有危险的方式转移与安全性相关的风险。作为设计师,我们定期与客户讨论有关高可用性和可伸缩性的问题,并且必须以同样方式解释很多安全性问题--因为必须在设计和构建过程中做出决定。如果您试图在项目即将结束时解决安全性问题,当最后期限迫近而一片混乱时,项目很可能满是漏洞。在开始工作时要切记安全性问题,并帮助您的客户了解他们的选择。”
注:Dan Norris(norris@Celeritas.com) 是美国堪萨斯城的Celeritas Technologies,LLC的一位高级顾问。在他6年多的顾问经历中,他已帮助许多公司设计基础架构,使其高度可用并更加安全。他曾担任过很多职务,包括系统设计师、Unix系统管理员、Oracle数据库管理员、应用服务器管理员和安全性设计师。