本单元从威胁、对策、缺陷、攻击的角度来分析 Web 应用程序安全。当结合安全性特性设计、实现和部署应用程序时,这有助于更好地理解攻击者的想法。从攻击者的角度考虑问题,并了解他们的可能手段,在采取对策时会更有效。本单元介绍传统的攻击者采用的方法,并对典型的攻击进行剖析。
本单元开始介绍了攻击者使用的常见方法,以危及 Web 应用程序的安全,并建议采用 STRIDE 方法对威胁进行分类。然后,介绍了可能危及网络、主机基础结构和应用程序安全的主要威胁。了解这些威胁和适当的对策,为威胁建模过程提供了重要的信息。
本单元使您可以找出在特定情况下的具体威胁,并根据它们对系统构成的危险程度区分优先次序。
目标
使用本单元:
| • |
开始以攻击者的方式考虑问题。 |
| • |
了解常用于对威胁进行分类的 STRIDE 方法。 |
| • |
识别与对抗网络、主机和应用程序级威胁。 |
应用于
Web 应用程序
如何使用本单元
本单元找出了一组常用的网络、主机和应用程序级威胁,并找出了应对每种威胁建议采取的对策。
本单元没有对威胁进行详细列表,但重点介绍了多种主要威胁。有了这些攻击者如何进行操作的信息和知识,您就可以识别其他的威胁。
您需要了解最可能影响系统的威胁,这样就可以构建有效的威胁模型。这些威胁模型是“威胁建模”单元的主题。
要想充分利用本单元:
| • |
熟悉影响网络、主机与应用程序的具体威胁。尽管攻击者的目标可能是一样的,但威胁对于系统的各个不同部分来说是特有的。 |
| • |
利用威胁识别危险并规划对这些威胁的对抗措施。 |
| • |
对缺陷采取对策。本单元对对策进行了总结。利用本手册的第 3 部分,“构建安全 Web 应用程序”,和第 4 部分,“保护网络、主机和应用程序”,了解实现对策的详细情况。 |
当设计、构建并保护新的系统时,要考虑本单元概述的威胁。这些威胁的存在与平台或者使用的技术无关。
开始之前
开始威胁建模过程之前,了解下面的基本术语非常重要:
| • |
资源。有价值的资源,如数据库或者文件系统的数据,或者系统资源。 |
| • |
威胁。潜在事件 — 恶意的或者其他方式 — 可能会损害资源。 |
| • |
缺陷有可能造成威胁的缺陷 |
| • |
攻击(或者利用)。所采取的损害资源的行为 |
| • |
对策。一种应对威胁与减轻危险的保护措施 |
剖析攻击
通过了解以 Web 应用程序为目标时攻击者使用的基本方法,您将可以更好地配备防护措施,因为您知道您的对手是什么。攻击者方法的基本步骤总结如下,并用图 1 进行说明:
| • |
调查与评估 |
| • |
利用与渗透 |
| • |
提高特权 |
| • |
维护访问 |
| • |
拒绝服务 |
调查与评估
按顺序进行调查与评估潜在的目标。通常,攻击者采取的第一步就是调查潜在的目标,以确定和评估它的特点。这些特点可能包括,它支持的服务和协议,以及潜在的缺陷和入口点。攻击者利用在调查与评估阶段收集的信息来规划首次攻击。
例如,通过测试来查看 Web 页中的任何控件是否会对输出进行回应,攻击者可能检测到一个跨站点脚本编写 (XSS) 缺陷。
利用与渗透
调查完潜在的目标后,下一步就是利用与渗透。如果网络和主机已经完全地保护起来,您的应用程序(前门)就成为下一个攻击渠道。
对于攻击者,进入应用程序的最简单方法就是通过合法用户使用的同一入口 — 例如,通过应用程序的登录页或者不需要身份验证的网页。
提高特权
攻击者设法危害应用程序或者网络之后,他们会立即尝试通过将代码注入应用程序或者利用 Windows® 2000 操作系统创建一个身份验证会话,以提高特权。特别是,他们会寻求帐户提供管理特权,这些帐户是管理员组的成员。他们还寻求本地系统帐户提供的高级特权。
在整个应用程序中使用最小特权服务帐户是防护特权提高攻击的主要手段。同时,许多网络级提高特权攻击需要一个交互登录会话。
维护访问
可以访问系统后,攻击者还要采取措施以使将来访问时更轻松,并可以掩饰他的或她的踪迹。使将来可以更轻松访问的常见方法包括,安置后门程序或者利用缺乏严格保护的现有帐户。掩饰踪迹通常包括清除日志和隐藏工具。这样,审核日志就是攻击者的一个主要目标。
应当保护日志文件,还应定期分析日志文件。分析日志文件经常可以在损失造成之前发现早期的尝试闯入的迹象。
拒绝服务
不能进行访问的攻击者经常会安置一个拒绝服务攻击,阻止其他人使用这个应用程序。对于其他攻击者,从一开始拒绝服务选择就是他们的目标。SYN Flood 攻击就是一个例子,攻击者利用一个程序来发送大量的 TCP SYN 请求,以填充服务器上挂起的连接队列。这就阻止了其他用户建立网络连接。
了解威胁分类
由于具体的攻击和攻击技术有许多变体,因此根据攻击者试图实现的目标来考虑威胁是十分有用的。这就将注意的焦点从识别每一种具体的攻击 — 这确实是达到目标的一种手段,改变为注意可能攻击的目标结果。
STRIDE
可以根据攻击的目标和目的对应用程序面临的威胁进行分类。有关威胁分类的应用知识有助于您组织安全策略,这样您就可以有计划地对威胁进行回应。STRIDE 是 Microsoft 使用的对不同威胁类型进行分类的首字母缩写词。STRIDE 代表:
| • |
欺骗。欺骗 就是试图通过使用假身份访问系统。这可以通过使用盗窃来的用户凭据或者假 IP 地址而实现。当攻击者以合法用户或者主机的身份成功访问系统后,就可以开始提高特权或者滥用授权了。 |
| • |
篡改。篡改 就是未经授权就对数据进行更改,例如当数据流过两个计算机间的网络时。 |
| • |
否认。否认 就是用户(合法的或者非法的)否认他们曾执行过特定操作或者事务的能力。审核不足,则很难检验否认攻击。 |
| • |
信息泄漏。信息泄漏不必要地暴露私有数据。例如,用户查看他或者她没有被授权打开的表或者文件的内容,或监视通过网络传输的、明文形式的数据。一些信息泄漏缺陷的示例包括,使用隐藏的窗体字段、嵌入在 Web 页中的注释包含有数据库连接字符串和连接细节,以及可能导致暴露给客户端的内部系统级别细节的差劲的异常处理。这些信息对攻击者来说都是非常有用的。 |
| • |
拒绝服务。拒绝服务 就是使系统或者应用程序不可使用的过程。例如,拒绝服务攻击可以这样实现:通过请求来冲击服务器,以消耗掉所有的系统可用资源,或者通过给服务器传递格式错误的输入数据以使一个应用程序进程崩溃。 |
| • |
提高特权。提高特权 在这样的情况下就会出现:具有有限特权的用户假冒特权用户的身份来对应用程序进行特权访问。例如,具有有限特权的攻击者可能会提高他的或者她的特权级别来损害并控制更高特权与受信任的进程或帐户。 |
STRIDE 威胁与对策
STRIDE 所描述的每一类威胁都具有一套对应的对抗技术,应当使用这些技术来降低危险。表 1 对这些技术进行了小结。对策适当与否取决于特定的攻击。稍后,本单元将对网络、主机以及应用程序级的更多威胁、攻击和采用的对策进行介绍。
|
盗用用户身份 |
使用强身份验证。 不要以明文的形式存储机密信息(例如,密码)。 不要在线路上以明文的形式传递凭据。 用安全套接字层 (SSL) 保护身份验证 cookie。 |
|
篡改数据 |
使用数据散列法与签名。 使用数字签名。 使用强授权。 在通信链路之间使用防篡改协议。 使用可提供消息完整性的协议保护通信链路。 |
|
否认 |
创建安全的审计追踪。 使用数字签名。 |
|
信息泄漏 |
使用强授权。 使用强加密技术。 使用可提供消息保密性的协议保护通信链路。 不要以明文的形式存储机密信息(例如,密码)。 |
|
拒绝服务 |
使用资源与带宽调节技术。 验证与筛选输入。 |
|
提高特权 |
遵循最低特权原则,并使用最低特权服务帐户运行进程以及访问资源。 |
||||||网络威胁与对策
构成网络基础结构的主要组件有路由器、防火墙和交换机。它们担当网关守卫的角色,保护您的服务器和应用程序不受攻击与入侵。攻击者可能使用配置很差的网络设备。常见的缺陷包括脆弱的默认安装设置、对外开放的访问控制以及缺少最新安全补丁的设备。主要的网络级威胁包括:
| • |
信息收集 |
| • |
探查 |
| • |
欺骗 |
| • |
会话劫持 |
| • |
拒绝服务 |
信息收集
可以用与其他类型系统相同的方法发现网络设备并对其进行剖析。通常,攻击者最初是扫描端口。识别出开放端口后,他们利用标题抓取与枚举的方法检测设备类型,并确定操作系统和应用程序的版本。具有这些信息后,攻击者可以攻击已知的缺陷,这些缺陷可能没有更新安全补丁。
阻止信息收集的对策包括:
| • |
配置路由器,限制它们对足迹请求的响应。 |
| • |
配置承载网络软件(例如,软件防火墙)的操作系统,通过禁用不使用的协议和不必要的端口,可以阻止足迹。 |
探查
探查 或者窃听 就是监视网络上数据(例如明文密码或者配置信息)传输信息的行为。利用简单的数据包探测器,攻击者可以很轻松地读取所有的明文传输信息。同时,攻击者可以破解用轻量级散列算法加密的数据包,并解密您认为是安全的有用负荷。探查数据包需要在服务器/客户端通信的通道中安装数据包探测器。
帮助阻止探查的对策包括:
| • |
使用强有力的物理安全措施并适当对网络进行分段。这是阻止传输信息在本地被收集的第一步。 |
| • |
通信完全加密,包括对凭据的身份验证。这可以防止攻击者使用探查到的数据包。SSL 与 IPSec(Internet 协议安全性)就是这种加密解决方案的示例。 |
欺骗
欺骗就是一种隐藏某人在网上真实身份的方式。为创建一个欺骗身份,攻击者要使用一个伪造的源地址,该地址不代表数据包的真实地址。可以使用欺骗来隐藏最初的攻击源,或者绕开存在的网络访问控制列表(ACL,它根据源地址规则限制主机访问)。
虽然不可能根据精心制作的欺骗数据包追踪到原始的发送者,但是组合筛选规则可以防止欺骗数据包起源于您的网络,使您可以拦截明显的欺骗数据包。
防止欺骗的对策包括:
| • |
筛选看上去是来自周边内部 IP 地址的传入数据包。 |
| • |
筛选看上去是源于无效本地 IP 地址的外出数据包。 |
会话劫持
也称为中间人攻击,会话劫持欺骗服务器或者客户端接受:上游主机就是真正的合法主机。相反,上游主机是攻击者的主机,它操纵网络,这样攻击者的主机看上去就是期望的目的地。
帮助防止会话劫持的对策包括:
| • |
使用加密的会话协商。 |
| • |
使用加密的通信通道。 |
| • |
及时获取有关平台补丁的信息,修补 TCP/IP 缺陷,例如可预测的数据包序列。 |
拒绝服务
拒绝服务就是拒绝合法用户访问服务器或者服务。SYN FLOOD 攻击就是网络级拒绝服务攻击的常见示例。该攻击容易发起并且不容易追踪。攻击的目的是给服务器发送大量的请求,从而超过它的处理能力。该攻击利用的是 TCP/IP 连接建立机制中的一个潜在缺陷,并冲击服务器的挂起连接队列。
防止拒绝服务的对策包括:
| • |
使用最新的服务包。 |
| • |
通过应用适当的注册表设置强化 TCP/IP 堆栈,以增大 TCP 连接队列的大小,缩短建立连接的周期,并利用动态储备机制来确保连接队列永远不会耗尽。 |
| • |
使用网络入侵检测系统 (IDS),因为这可以自动检测与回应 SYN 攻击。 |
主机威胁与对策
主机威胁针对构建应用程序的系统软件。这包括 Windows 2000、Internet 信息服务 (IIS)、.NET Framework 和 SQL Server 2000,是哪一种取决于特定的服务器角色。主要的主机级威胁包括:
| • |
病毒、特洛伊木马和蠕虫 |
| • |
足迹 |
| • |
剖析 |
| • |
破解密码 |
| • |
拒绝服务 |
| • |
任意执行代码 |
| • |
未授权访问 |
病毒、特洛伊木马和蠕虫
病毒就是一种设计的程序,它进行恶意的行为,并破坏操作系统或者应用程序。除了将恶意的代码包含在表面上是无害的数据文件或者可执行程序中外,特洛伊木马很像一种病毒。除了可以从一个服务器自我复制到另一个服务器,蠕虫类似于特洛伊木马。蠕虫很难检测到,因为它们不是定期创建可以看见的文件。通常只有当它们开始消耗系统资源时,才能注意到它们,因为这时系统运行缓慢或者其他执行的程序停止运行。红色代码蠕虫就是最臭名远扬、攻击 IIS 的蠕虫,它的存在依靠的是某特定 ISAPI 筛选器中的缓冲区溢出缺陷。
虽然这三种威胁是实实在在的攻击手段,同时它们会对 Web 应用程序、这些应用程序所在的主机以及用来传递这些应用程序的网络造成重大的威胁。通过许多缺陷,例如默认设置的脆弱性、软件错误、用户错误和 Internet 协议固有的缺陷,这些攻击在任何系统上都有可能取得成功。
用来对付病毒、特洛伊木马和蠕虫的对策包括:
| • |
保持当前采用最新的操作系统服务包和软件补丁。 |
| • |
封锁防火墙和主机的所有多余端口。 |
| • |
禁用不使用的功能,包括协议和服务。 |
| • |
强化脆弱的默认配置设置。 |
足迹
足迹的示例有端口扫描、ping 扫描以及 NetBIOS 枚举,它可以被攻击者用来收集系统级的有价值信息,有助于准备更严重的攻击。足迹揭示的潜在信息类型包括帐户详细信息、操作系统和其他软件的版本、服务器的名称和数据库架构的详细信息。
帮助防止足迹的对策包括:
| • |
禁用多余的协议。 |
| • |
用适当的防火墙配置锁定端口。 |
| • |
利用 TCP/IP 与 IPSec 筛选器来进行更深一步的防护。 |
| • |
配置 IIS,防止通过标题抓取泄漏信息。 |
| • |
配置 IDS,利用它获取足迹模式并拒绝可疑的信息流。 |
破解密码
如果攻击者不能够与服务器建立匿名连接,他或者她将尝试建立验证连接。为此,攻击者必须知道一个有效的用户名和密码组合。如果您使用默认的帐户名称,您就给攻击者提供了一个顺利的开端。然后,攻击者只需要破解帐户的密码即可。使用空白或者脆弱的密码可以使攻击者的工作更为轻松。
帮助防止破解密码的对策包括:
| • |
所有的帐户类型都使用强密码。 |
| • |
对最终用户帐户采用锁定策略,限制猜测密码而重试的次数。 |
| • |
不要使用默认的帐户名称,重新命名标准帐户,例如管理员的帐户和许多 Web 应用程序使用的匿名 Internet 用户帐户。 |
| • |
审核失败的登录,获取密码劫持尝试的模式。 |
拒绝服务
可以通过多种方法实现拒绝服务,针对的是基础结构中的几个目标。在主机上,攻击者可以通过强力攻击应用程序而破坏服务,或者攻击者可以知道应用程序在其上寄宿的服务中或者运行服务器的操作系统中存在的缺陷。
帮助防止拒绝服务的对策包括:
| • |
配置应用程序、服务和操作系统时要考虑拒绝服务问题。 |
| • |
保持采用最新的补丁和安全更新。 |
| • |
强化 TCP/IP 堆栈,防止拒绝服务。 |
| • |
确保帐户锁定策略无法被用来锁定公认的服务帐户。 |
| • |
确信应用程序可以处理大流量的信息,并且该阀值适于处理异常高的负荷。 |
| • |
检查应用程序的故障转移功能。 |
| • |
利用 IDS 检测潜在的拒绝服务攻击。 |
任意执行代码
如果攻击者可以在您的服务器上执行恶意的代码,攻击者要么就会损害服务器资源,要么就会更进一步攻击下游系统。如果攻击者的代码所运行的服务器进程被越权执行,任意执行代码所造成的危险将会增加。常见的缺陷包括脆弱的 IID 配置以及允许遍历路径和缓冲区溢出攻击的未打补丁的服务器,这两种情况都可以导致任意执行代码。
帮助防止任意执行代码的对策包括:
| • |
配置 IIS,拒绝带有“../”的 URL,防止遍历路径的发生。 |
| • |
利用严格的 ACL,锁定系统命令和实用工具。 |
| • |
保持使用最新的补丁和更新,确保新近发现的缓冲区溢出尽快打上补丁。 |
未授权访问
不足的访问控制可能允许未授权的用户访问受限制信息或者执行受限制操作。常见的缺陷包括,脆弱的 IIS Web 访问控制,这又包括 Web 权限和脆弱的 NTFS 权限。
帮助防止未授权访问的对策包括:
| • |
配置安全的 Web 权限。 |
| • |
利用受限制的 NTFS 权限锁定文件和文件夹。 |
| • |
使用 ASP.NET 应用程序中的 .NET Framework 访问控制机制,包括 URL 授权和主要权限声明。 |
应用程序威胁与对策
分析应用程序级威胁的较好方法就是根据应用程序缺陷类别来组织它们。本单元随后几节使用的以及贯穿本手册的不同类别威胁,与应用程序的主要威胁都小结在表 2 中。
|
输入验证 |
缓冲区溢出,跨站点脚本编写,SQL 注入,标准化 |
|
身份验证 |
网络窃听,强力攻击, 词典攻击,重放 cookie,盗窃凭据 |
|
授权 |
提高特权,泄漏机密数据,篡改数据,引诱攻击 |
|
配置管理 |
未经授权访问管理接口,未经授权访问配置存储器,检索明文配置数据,缺乏个人可记帐性,越权进程和服务帐户 |
|
敏感数据 |
访问存储器中的敏感数据;窃听网络;篡改数据 |
|
会话管理 |
会话劫持;会话重放;中间人 |
|
加密技术 |
密钥生成或密钥管理差;脆弱的或者自定义的加密术 |
|
参数操作 |
查询字符串操作;窗体字段操作;cookie 操作;HTTP 标头操作 |
|
异常管理 |
信息泄漏;拒绝服务 |
|
审核和日志记录 |
用户拒绝执行某项操作;攻击者利用没有跟踪记录的应用程序;攻击者掩饰他或者她的跟踪记录 |
输入验证
如果攻击者发现,您的应用程序没有设定输入数据的类型、长度、格式或者范围,输入验证就成为了一个安全问题。然后,攻击者就可以提供精心打造的输入,这会损害您的应用程序。
如果网络和主机级的入口点被完全保护起来,应用程序公开的公用接口就成为唯一的攻击源。应用程序输入既是测试系统的一种手段,也是为攻击者执行代码的一种方式。您的应用程序是否盲目地信任输入?如果是这样,您的应用程序可能会很容易受下列因素的影响:
| • |
缓冲区溢出 |
| • |
跨站点脚本编写 |
| • |
SQL 注入 |
| • |
标准化 |
| • |
下一节将详细考察这些缺陷,这包括什么因素有可能造成这些缺陷。 |