本单元解释了 Web 应用程序安全的意义并介绍了重要术语。传统的防御模型太依赖防火墙和主机防护,对连接到恶意网络或对无赖雇员公开的 Web 应用程序来说是不够用的。应当采用安全的设计和开发指南来设计和构建应用程序,这些设计方法和开发指南遵循合理的安全原则。
本单元提出一种深入的防护策略,通过在三个层次上应用安全性来确保 Web 应用程序的安全:网络层、主机层和应用程序层。
目标
使用本单元:
•
检查安全、身份验证、授权、审核、机密性、完整性和可用性的基本情况。
•
理解威胁、缺陷和攻击之间的相互关系。
•
定义并了解如何使用网络和主机安全配置的类别。
•
定义并了解如何使用应用程序缺陷的类别。
•
理解核心安全原则。
•
学会如何构建一个安全的 Web 应用程序并认识到威胁建模的重要性。
•
理解安全性的整体方法的好处。
应用于
Web 应用程序
如何使用本单元
使用本单元来理解与 Web 应用程序安全相关的核心概念。
本单元将给出指南的其余部分的框架,提供需要考虑的安全区域的相关信息。这些区域包括:
•
使用网络和主机配置类别。根据这些类别提供的框架,能够系统地评价或保证服务器配置的安全,而不是在特别的基础上应用安全设置。该指南中始终使用这些配置类别,帮助加强网络和服务器基础设施。
•
使用应用程序缺陷的类别。该指南中始终将这些类别作为框架使用。它们代表安全错误最常出现的区域,并包括对应用程序开发人员和架构师的指导。
•
对安全性采用以原则为基础的方法。安全如同软件工程的许多方面一样,遵照以原则为基础的方法。学习并应用本单元概括的一些原则。
简介
当听到有人谈论 Web 应用程序安全时,通常都倾向于立刻想到破坏 Web 站点、窃取信用卡号码、使用拒绝服务攻击轰击 Web 站点的攻击者。也可能想到病毒、特洛伊木马和蠕虫。这些是最受关注的问题类型,因为他们代表了目前 Web 应用程序面临的一些最重要的威胁。
这些仅仅是面临的一些问题。经常忽略其他的重要问题。恶意管理员、不满意的雇员和误打误撞偶然发现敏感数据的临时用户所制造的内部威胁都会造成重大风险。可能忽视了其中最大的问题。
Web 应用安全的解决方案不仅仅是技术问题。它是一个涉及人和实践的不断发展的过程。
我们是安全的——我们有防火墙
这是一个普遍的误解;依赖威胁而定。例如,防火墙可能没有检测到发送到 Web 应用程序的恶意输入。另外,还要考虑到恶意管理员对于应用程序进行直接访问的情况。
防火墙有其地位吗?它们当然有。防火墙对于封闭端口是很有用的。一些防火墙应用程序可以检查通信,并提供非常高级的保护措施。防火墙是安全的一个必备部分,但它们本身并不是一个完整的解决方案。
同样的情况对于安全套接字层 (SSL) 也是适用的。SSL 对于将网络中的通信数据进行加密是很有用的。然而,它并不验证应用程序的输入或当使用配置很差的服务器时对您进行保护。
安全究竟是什么?
从根本上说安全与保护资产有关。资产可能是实体的内容,例如 Web 页或客户数据库;也可以不是实体的,例如公司的名声。
安全是一种途径,而不是目的。当对基础结构和应用程序进行分析时,发现潜在的威胁并理解每个威胁代表的风险程度。安全是与风险管理和实施有效的对策相关的。
安全的基础
安全依赖如下元素:
•
身份验证
身份验证提出这样的问题:您是谁?这是唯一地识别出应用程序和服务的客户端的过程。可能是最终用户、其他服务、进程或计算机。在安全说法中,称经过身份认证的客户端为主体。
•
授权
授权提出这样的问题:您能做什么?这是对经过身份认证的客户端允许访问的资源及执行的操作进行管理的过程。资源包括文件、数据库、表、行等等,以及系统级的资源,如注册表项和配置数据。操作包括对事务的执行,例如购买产品、把钱从一个帐户转到另一个帐户、或提高客户的信用等级。
•
审核
有效的审核和日志记录是不能否认的关键。不能否认保证一个用户不能否认执行了一项操作或开始了一个事务。例如,在一个电子商务系统中,需要不能否认机制来确保顾客不能否认订购了 100 本某种书。
•
机密性
机密性,也称保密性,是确保数据保持专用和机密的过程,未授权用户或通过网络监控通信流量的窃听者无法查看该数据。加密通常被用于加强机密性。访问控制列表 (ACL) 是加强机密性的另一方法。
•
完整性
完整性保证数据不出现意外或蓄意(恶意)篡改的情况。和保密性一样,完整性也是一个主要关注点,特别是对经过网络传送的数据。传输中数据的完整性通常是通过使用哈希技术和消息验证码提供的。
•
可用性
从安全的观点来看,可用性表示系统对于合法用户是始终有效的。许多使用拒绝服务攻击的攻击者的目的是使应用程序崩溃或使其完全应接不暇,使得其他用户无法访问该应用程序。
威胁、缺陷和攻击的定义
威胁是任何潜在的事件、恶意的或其他将损害资产的情况。换句话说,威胁是任何可能出现于资产中的有害事件。
缺陷是使得威胁有可能发生的弱点。这可能是由于不合理的设计、配置错误或不适当和不安全的编码技术。不可靠的输入确认是应用程序层缺陷的一个例子,可能导致输入攻击。
攻击是利用缺陷或执行威胁的行为。攻击的例子包括向应用程序发送恶意的输入或冲击一个网络试图使其拒绝服务。
总而言之,威胁是会对资产起到负面影响的潜在事件,然而一个成功的攻击会利用系统中的缺陷。
如何构建一个安全的 Web 应用程序?
不知道威胁的情况下是不可能设计并构建一个安全的 Web 应用程序的。威胁建模是一个日益重要的原则,它被推荐用来构成应用程序设计阶段的一部分。威胁建模的目的是分析应用程序的体系结构和设计,找出可能允许不经意的用户或恶意攻击者危及系统的安全的潜在缺陷区域。
知道威胁后,应用长期经过验证的安全原则进行安全设计。作为开发人员,必须遵照安全编码技术来开发安全、可靠和能够抗攻击的解决方案。要在其上部署应用程序软件的服务器上的安全的网络、主机和应用程序配置必须支持应用程序层软件的设计和开发。
保证网络、主机和应用程序的安全
“网络中的缺陷会允许恶意用户利用主机或应用程序。主机中的缺陷会允许恶意用户利用网络或应用程序。应用程序中的缺陷会允许恶意用户利用网络或主机。”
–Carlos Lyons, Corporate Security, Microsoft
为构建安全的 Web 应用程序,需要一个应用程序安全的整体方法且安全必须应用于整个三层中。该方法如图 1 所示。
图 1. 安全性的整体方法
保证网络的安全
安全的 Web 应用程序依赖于安全的网络基础结构。网络基础结构包括路由器、防火墙和交换机。安全的网络的作用不仅是保护其自身免受基于 TCP/IP 的攻击,还要实施对策,例如安全的管理接口和可靠的密码。安全的网络还要负责保证正在传输的通信量的完整性。如果知道与网络层有关的可能有害的端口、协议或通信,在该层解决那些潜在的威胁。
网络组件的类别
本指南把网络安全分成了如表 1 中所示的单独的组件类别。
表 1. 网络组件的类别
组件
说明
路由器
路由器是最外层的网络环路。它们把数据包送往应用程序所需的端口和协议。该环路阻止常见 TCP/IP 缺陷。
防火墙
防火墙阻止应用程序不使用的协议和端口。此外,防火墙可提供特定应用程序的筛选功能来阻止恶意通信,从而加强网络通信的安全。
交换机
交换机用来对网络进行分段。它们常被忽略或被过份地信任。
保证主机的安全
保证主机安全时,无论是 Web 服务器、应用程序服务器或数据库服务器,本指南把不同的安全配置设置分成单独的类别。按照这种方法,可以注意特定的类别并检查安全性,或应用与该特定类别相关的安全设置。按照这种方法在服务器上安装新软件时,可以评估安全设置的影响。例如,可以提出如下问题:该软件创建新的帐户吗?该软件添加任何默认服务吗?该服务以什么身份运行?是否创建了任何新的脚本映射?