3.2.6 弥补及防御措施

3.2.6 弥补及防御措施

Web应用程序的基本安全问题(所有用户输入都不可信)致使应用程序实施大量安全机制来抵御攻击。尽管其设计细节与执行效率可能千差万别,但几乎所有应用程序采用的安全机制在概念上都具有相似性。

Web应用程序采用的防御机制由以下几个核心因素构成。

(1)处理用户访问应用程序的数据与功能,防止用户获得未授权访问。

(2)处理用户对应用程序功能的输入,防止错误输入造成不良行为。

(3)防范攻击者,确保应用程序在成为直接攻击目标时能够正常运转,并采取适当的防御与攻击措施挫败攻击者。

(4)管理应用程序本身,帮助管理员监控其行为,配置其功能。

1.处理用户访问

几乎任何应用程序都必须满足一个中心安全要求,即处理用户访问其数据与功能。在通常情况下,用户一般分为几种类型,如匿名用户、正常通过验证的用户和管理用户。而且,许多情况下,不同的用户只允许访问不同的数据。例如,Web邮件应用程序的用户只能阅读自己的而非他人的电子邮件。大多数Web应用程序使用三层相互关联的安全机制处理用户访问:

(1)身份验证;

(2)会话管理;

(3)访问控制。

上述每一个机制都是应用程序受攻击面的一个关键部分,对于应用程序的总体安全状况极其重要。由于这些机制相互依赖,因此根本不能提供强大的总体安全保护,任何一个部分存在缺陷都可能使攻击者自由访问应用程序的功能与数据。

2.处理用户输入

回想一下本书描述的基本安全问题:所有用户输入都不可信。大量针对认Web应用程序的不同攻击都与提交错误输入有关,攻击者专门设计这类输入,以引发应用程序设计者无法预料的行为。因此,能够安全处理用户输入是对应用程序安全防御的一个关键要求。

应用程序的每一项功能以及几乎每一种常用的技术都可能出现输入方面的漏洞。通常来说,输入确认(input validation)是防御这些攻击的必要手段。然而,任何一种保护机制都不是万能的,防御恶意输入也并非如听起来那样简单。

3.处理攻击者

任何设计安全应用程序的开发人员必须基于这样一个假设:应用程序将成为蓄意破坏且经验丰富的攻击者的直接攻击目标。能够以受控的方式处理并应对这些攻击.是应用程序安全机制的一项主要功能。这些机制通常结合使用一系列防御与攻击措施,以尽可能地阻止攻击者,并就所发生的事件,通知应用程序所有者以及提供相应的证据。为处理攻击者而采取的措施一般由以下任务组成:

(1)处理错误;

(2)维护审计日志;

(3)向管理员发出警报;

(4)应对攻击。

4.管理应用程序

任何有用的应用程序都需要进行管理与维护,这种功能通常是应用程序安全机制的一个重要组成部分,可帮助管理员管理用户账户与角色、应用监控与审计功能、执行诊断任务并配置应用程序的各种功能。

许多应用程序一般通过相同的Web界面在内部执行管理功能,这也是它的核心非安全功能。在这种情况下,管理机制就成为应用程序的主要受攻击面。它吸引攻击者的地方主要在于它能够提升权限,以下举例说明。

(1)身份验证机制中存在的薄弱环节使攻击者能够获得管理员权限,迅速攻破整个应用程序。

(2)许多应用程序并不对它的一些管理功能执行有效的访问控制。利用这个漏洞,攻击者可以建立一个拥有强大特权的新用户账户。

(3)管理功能通常能够显示普通用户提交的数据。管理界面中存在的任何跨站点脚本缺陷都可能危及用户会话的安全。

(4)因为管理用户被视为可信用户,或者由于渗透测试员只能访问低权限的账户,所以管理功能往往没有经过严格的安全测试。而且,它通常需要执行相当危险的操作,包括访问磁盘上的文件或操作系统命令。如果一名攻击者能够攻破管理功能,就能利用它控制整个服务器。