一
(原始稿)第7章 攻击会话状态管理
HTTP协议在Web应用中没有定义一个用户的会话应该如何管理和跟踪。协议是为简单的文
档检索设计的不是为今天的复杂的Web应用设计的。比如,如果你去
http://www.acme.com并且想买最新的ACME Roadrunner Trap 2000并且点击买的按钮。购物车和命令处理将和
别的在线处理不一样。协议本身没有说明如何处理它。
跟踪一个用户会话的最基本的理由是为了应用需要用户来填认证信息。一旦用户认证了,
服务器就必须信任从该用户来的所有请求,但是忽略所有从没有认证的用户来的所有请求
。另外一个理由就是在线购物应用。这应用必须回答下面的问题:
· 用户在浏览什么?
· 用户选择什么来买?
· 用户决定买什么?
· 用户准备去买了么?
· 还是不是原来的用户?
这些对于黑客来说意味着什么?如果你将这些问题留给单个开发者和Web站点设计者来采
用他们自己的策略来实现会话状态管理,他们可能会错误并且导致安全问题。在这章,我
们给出一个总结关于基于客户的和基于服务器的会话状态管理技术并且总结攻击它们的方
法。
Web站点开发者已经设计了很多方法来实现会话状态管理技术并且和当前的HTTP协议的框
架融合。这些技术很聪明;然而,并不是它们都很安全。从安全的角度说技术的主要的不
同点是会话的状态在哪儿管理,在客户或者在服务器。
在我们讨论会话状态管理的细节之前,表7-1显示了应用通常用到的会话状态的信息。
(出书稿)第7章 攻击会话状态管理
HTTP协议没有定义在Web应用程序中应该如何管理和跟踪用户的会话。协议是为简单的文
档检索设计的,而不是为今天复杂的Web应用程序设计的。比如,如果你去
http://www.acme.com,想买最新的ACME Roadrunner Trap 2000,并且点击了"Buy"按钮
,购物车和订单处理过程将和别的在线商店不一样。协议本身没有说明如何处理它。
跟踪一个用户会话的最基本的原因是为了那些要求用户认证信息的应用程序。一旦认证了
一个用户,服务器就必须信任从该用户来的所有请求,而忽略所有没有被认证的用户的请
求。另外一个原因就是用于在线购物的应用程序。这种应用程序必须能够回答下面的问题
:
▼ 用户在浏览什么?
■ 用户选择购买什么?
■ 用户决定不购买什么?
■ 用户准备去购买了吗?
▲ 还是不是原来的用户?
这些对于黑客来说意味着什么?如果你将这些问题留给单个开发者和Web站点设计者,让
他们采用自己的策略来实现会话状态管理,他们可能会犯错误并且导致安全问题。在本章
中,我们给出客户端和服务器端会话状态管理技术的概貌,并介绍攻击这些技术的方法。
Web站点的开发者已经设计了很多方法来实现HTTP协议框架内的会话状态管理技术。这些
技术非常智能化;然而,它们并不都是安全的。从安全角度来看,这些技术的主要不同点
是在哪儿管理会话状态,是在客户端还是在服务器端。
在讨论会话状态管理技术的细节之前,表7-1显示了应用程序常用的会话状态信息。
二
(原始稿)7.1 客户端的技术
在James Bond的电影里面,每一个坏人都会解释他的邪恶的统治的地区图给007,相信一
个精心的陷阱或者古怪的势力压制联合载它阻止计划之前。Web应用通常共享坏人的暴露
的缺点(可能有一些站点也希望统治世界)。客户端的技术依靠发送状态信息到客户并且
相信客户能够返回信息且不改动这些信息。简短的说,客户不能被相信。任何时间信息离
开了服务器,一个cookie值,比如,客户能够修改cookie来保存任意的信息。如果你运行
一个Web服务器并且运行会话状态管理,这是一个安全的打赌一些状态信息被传送到客户
端。看起来也可能不安全。
客户端的技术规则的使用,因此它们必须有一些优点。客户端技术主要的优点是他们在负
载平衡的集群结构上运行的很好。到来的请求能够被分配到最小忙得服务器上不用担心服
务器如何来响应。服务器检查状态信息,在数据库里面查找用户,检查购物车,返回正确
的数据。另一方面,负载平衡器越来越智能能够通过多个服务器来处理单个的会话。
现在让我们来看看状态信息的载体。
(出书稿)7.1 客户端技术
在007的电影里面,每一个坏人都会把他在世界范围内的邪恶计划告诉007,他们相信一个
精心的陷阱或者邪恶势力可以阻止007破坏他们的计划。Web应用程序通常和坏人暴露缺点
的特点很相似(可能有一些站点也希望统治世界)。客户端技术依靠发送状态信息到客户
并且相信客户能够返回未经改动的信息。其实,客户是不可信的。无论何时,只要信息离
开了服务器,比如说,一个cookie值,客户就能够修改cookie来保存任意的信息。如果你
运行一个有会话状态管理的Web服务器,我敢打赌已经有一些状态信息被传送到客户端。
这可能不安全。
客户端技术已经广为使用,因为它们具有一些优点。客户端技术的主要优点是它们在负载
均衡的集群结构上运行的很好。到来的请求能够被分配到最空闲的服务器上,而不用担心
服务器如何来响应。服务器检查状态信息,在数据库里面查找用户,检查购物车,返回正
确的数据。另一方面,负载均衡器越来越智能,能够通过多个服务器来处理单个的会话。
现在,让我们来看看状态信息的载体。
三
(原始稿)7.3 会话ID分析
测试一个会话ID不必须要一个主动攻击。依靠如何传送,加密状态信息,你能够收集很多
关于应用程序的信息(内部密码和变量),其他用户(状态值的轮廓信息)或者服务器(
IP地址,系统时间)。任何关于应用程序收集的信息提供了应用程序的更多的线索或者如
何发现它的易攻击性。
7.3.1 内容分析
首要决定的事情是你要攻击谁。是传送的多个变量的状态信息还是一个?它是基于数字的
值还是字符串的?你能预见到下一个值是什么吗?字符串是加密的或是编码的?你能解码
吗?你能解密吗?
我们有很多问题关于状态信息的要问。这一部分将指引你正确的找到方法关于应用程序传
送的内容。
确定性的值
状态信息能够包含用户名,ID数字或者多个其他的特别的应用程序的项。也有其他得项来
组成会话标记。由于一个会话通常在一个时间点通常将一个用户联系到一个服务器。比如
一个时间邮戳,能够通过标记得值来识别当连续的增加的时候。我们列出了表7-4中常见
的几个项。当分析一个会话标记的时候要记住这些。一个时间邮戳可能被包含,比如但是
由Base64编码。
(出书稿)7.3 会话ID分析
测试一个会话ID不一定非得是一个主动攻击。依靠状态信息如何被传送、编码或者加密,
你能够收集很多关于应用程序(内部口令或变量)、其他用户(状态值中的配置信息)或
者服务器(IP地址,系统时间)的信息。任何关于应用程序的信息都有助于发现应用程序
更多的秘密或者它的脆弱点。
7.3.1 内容分析
首先要决定的事情是你要攻击谁。状态信息是在多个变量中传送的,还是只在一个变量中
传送?它是基于数值还是基于字符串?你能预见到下一个值是什么吗?字符串是加密的还
是编码的?你能解码吗?你能解密吗?
我们有很多关于状态信息的问题要问。这一部分将指引你找到正确的关于应用程序传送内
容的方法。
确定性的值
状态信息能够包含用户名、ID号,或者其他特定的应用程序选项。其他选项也可以组成会
话权标。由于一个会话通常在一个时间点将一个用户联系到一个服务器,因此你可以发现
非应用程序的数据。比如一个时间戳,能够通过连续增加的权标值来识别。我们在表7-4
中列出了几个常见的选项。当分析一个会话权标时要记住这些。例如,一个时间戳可能被
包含,但却是由Base64编码的。
四
(原始稿)7.4 总结
一个应用的会话管理暗示了几个安全方面:
? 认证 一个恶意的用户能猜到有效的会话ID来通过登陆的页面?改变状态信息从
"IsAuth=False"到"IsAuth=True"会怎么样?
? 授权 一个恶意的用户能不能抢劫另外一个会话?会话ID能不能改变来给一个用
户更大的好处?
? 输入有效和SQL入侵 会话变量被服务器审查?尽管状态信息通常是由服务器产
生,用户能任意修改它们的值。
? 状态信息 状态信息到底装着什么信息?它能被解码?或者被解密?
正确的会话管理是电子商务或者需要识别和跟踪用户所需要的。然后,大多数动态的,交
互的应用程序实现了一种形式的会话管理。会话管理的安全方面被强调是很重要的。
(出书稿)7.4 总结
一个应用程序的会话管理暗示了以下几方面的安全问题:
▼ 认证 一个恶意用户能通过猜测有效的会话ID绕过登录页面吗?将状态信息从
"IsAuth=False"改变到"IsAuth=True"会怎么样?
■ 授权 一个恶意用户能不能劫持另一个会话?能不能改变会话ID来假冒一个具有更大
权限的用户?
■ 输入验证和SQL注入 会话变量是否被服务器审查?尽管状态信息通常是由服务器产
生的,但是用户能任意修改它们的值。
▲ 状态信息 状态信息到底携带着什么信息?它能被解码或解密吗?
对电子商务应用程序或需要识别和跟踪用户的应用程序来说,正确的会话管理是必需的。
因此,大多数动态、交互式的应用程序实现了某种形式的会话管理。强调会话管理的安全
性是很重要的。
--
FROM 220.113.20.*