6.1 Web应用程序会话状态
由于会话管理机制是Web应用程序的一个基本安全组件,它们成为针对应用程序的恶意攻击的主要目标。如果攻击者能够破坏应用程序的会话管理,他就能轻易避开其实施的验证机制,不需要用户证书即可伪装成其他应用程序用户。如果攻击者以这种方式攻破一个管理用户,那么他就能够控制整个应用程序。在多种情况下Web服务器必须共享知识的会话状态,会议资料必须在群集节点之间运行Web服务器软件的共享。
节点之间共享一个集群的会话状态的方法包括以下内容。
(1)多播会话信息的成员节点。
(2)与合作伙伴共享的会话信息节点采用分布式共享存储器或存储虚拟化。
(3)利用节点之间共享会话信息网络接口。
(4)存储在一个共享的文件系统。
绝大多数的Web站点实际为Web应用程序,它们允许用户注册与登录;帮助用户购买及销售产品;能够在用户下次访问时记住他的喜好;可根据用户的单击和输入,通过动态建立的内容提供丰富、多媒体形式的使用体验。为执行这些功能,应用程序就需要使用会话。
在大多数情况下,应用程序使用HTTP Cookies作为在服务器与客户间传送这些会话令牌的传输机制。有两个HTTP头部和Cookies有关:Set-Cookies和Cookies。
Set-Cookies由服务器发送,它包含在响应请求的头部中,用于在客户端创建一个Cookies。
Cookies由客户端发送,包含在HTTP请求的头部中。注意:只有Cookies的domain和path与请求的URL匹配才会发送这个Cookies。
Set-Cookies Header Set-Cookies响应头的格式如下所示: Set-Cookies: <name>=<value>[; <name>=<value>]... [; expires=<date>][; domain=<domain_name>] [; path=<some_path>][; secure][; httponly]
注意
临时Cookies(没有expires参数的Cookies)不能带有domain选项。当客户端发送一个HTTP请求时,会将有效的Cookies一起发送给服务器。如果一个Cookies的domain和path参数和URL匹配,那么这个Cookies就是有效的。
但是现实生活中并非每一种应用程序都使用会话,一些具备验证机制、功能复杂的安全性至关重要的应用程序选择使用其他技术管理状态。常见的有两种会话替代方案。
(1)HTTP验证。
使用各种验证技术(基本、摘要、NTML验证等)的应用程序有时避免使用会话。在HTTP验证中,客户组件使消息头通过浏览器直接与验证机制交互,而不是通过包含在任何单独页面中的针对特殊应用程序的代码与验证机制交互。一旦用户在浏览器对话框中输入他的证书,浏览器将会在随后向相同服务器提出的每个请求中重复提交这些证书(或重复执行任何必要的握手)。这种做法等同于应用程序使用基于表单的验证,并在每个应用程序页面插入一个登录表单,要求用户通过他们执行的每一项操作重复验证自己的身份。因此,如果使用基于HTTP的验证,应用程序可以不必使用会话,而通过多个请求重复确定用户身份。然而,基于互联网的应用程序很少使用HTTP验证。而且,由于发展完善的会话机制能够提供其他用途非常广泛的功能,实际上,几乎所有的Web应用程序都采用这种机制。
(2)无会话状态机制。
一些应用程序并不发布会话令牌管理用户与应用程序的交互状态,而是传送所有必要数据(一般保存在或隐藏在表单字段中),由客户管理状态。实际上,这种机制以类似于ASP. NET ViewState的方式使用无会话状态。为保证这种机制的安全,必须对通过客户传送的数据加以适当保护。这通常要求建立一个包含所有状态信息的二进制巨对象,并使用一种公认的算法对这些数据进行加密或签名,还必须在数据中包含足够的上下文,以防止攻击者将在应用程序某个位置收集到的状态对象提交到另一个位置,造成某种意外行为。应用程序还必须在对象的数据中包含一个终止时间,执行与会话超时相同的功能。
这种标准的会话管理机制非常容易受到各种类型的攻击。当攻击会话机制时,攻击者的主要目标是以某种方式劫持一名合法用户的会话,并因此伪装成这名用户。如果该用户已经通过应用程序的验证,攻击者就可以访问属于这名用户的私有数据,或者以他的身份执行未授权操作。如果该用户未能通过验证,攻击者仍然能够查看用户在会话过程中提交的敏感信息。
事实证明,一些非定制会话管理解决方案易于受到各种攻击,导致用户的会话被攻破。此外,一些开发者发现,他们需要比内置解决方案所提供的控制更加全面的会话行为控制,或者希望避免基于Cookies的解决方案中存在的一些固有漏洞。鉴于这些原因,安全性至关重要的应用程序(如电子银行)通常使用预定义或并非基于Cookies的会话管理机制。
会话管理机制中存在的漏洞主要分为两类。
一是会话令牌生成过程中的薄弱环节。
二是在整个生命周期过程中处理会话令牌的薄弱环节。
本章我们将分别分析这些弱点,描述在现实世界的会话管理机制中常见的各种漏洞,以及黑客是如何发现并利用这些漏洞的,最后将描述应用程序为防止这些攻击所应采取的防御措施。
Burp Suite是用于攻击Web应用程序的集成平台,它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。所有的工具都共享一个能处理并显示HTTP消息、持久性、认证、代理、日志、警报的一个强大的可扩展的框架。
Burp Suite能高效率地与单个工具一起工作。例如,一个中心站点地图是用于汇总收集到的目标应用程序信息,并通过确定的范围来指导单个程序工作。
在一个工具处理HTTP请求和响应时,它可以选择调用其他任意的Burp工具。例如,代理记录的请求可被Intruder用来构造一个自定义的自动攻击的准则,也可被Repeater用来手动攻击,也可被Scanner用来分析漏洞,或者被Spider(网络爬虫)用来自动搜索内容。应用程序可以是“被动地”运行,而不是产生大量的自动请求。Burp Proxy把所有通过的请求和响应解析为连接和形式,同时站点地图也相应地更新。由于完全地控制了每一个请求,你就可以以一种非入侵的方式来探测敏感的应用程序。
当你浏览网页(这取决于定义的目标范围)时,通过自动扫描经过代理的请求就能发现安全漏洞。
下面介绍Burp Suite的安装要求及过程。
Burp Suite安装要求:Java的V1.5 +安装(推荐使用最新的JRE),下载地址:http://java.sun.com/j2se/downloads.html。
Burp Suite下载地址:http://portswigger.net/burp/download.html。
Burp Suite的安装步骤如下。
1 下载完成后可以双击可执行的burpsuite_free_v1.6.32.jar文件。如果无法运行,可输入命令Java -jar burpsuite_v1.4.jar运行。
2 在弹出的对话框中,复选框默认已选,不用更改,单击“I Accept”按钮,如图6-1所示。
图6-1 接受协议
3 在弹出的对话框中单击“Leave”按钮,如图6-2所示。
图6-2 不删除文件
4 至此Burp Suite安装成功,如图6-3所示。
图6-3 安装完成
5 代理功能能截获并修改请求。为了拦截请求,并对其进行操作,必须通过Burp Suite配置浏览器。可单击“Proxy”按钮,在弹出的选项中单击“Options”按钮,最后选择浏览器配置127.0.0.1:8080,如图6-4所示。
图6-4 配置浏览器