IBM Rational AppScan:利用 cookie 篡改来攻击 Web 应用程序

94 篇文章 1 订阅
78 篇文章 0 订阅
这篇文章阐述了为什么会话管理和会话管理安全性都是复杂的工作,这就是为什么它们经常会留给商业产品来处理。这篇文章描述这两个商业应用程序引擎的语言符号是怎样产生的。作者分析了每个机制的能力,阐述了它的弱势,还论证了这样的弱势怎样才能被利用,从而执行模拟和私人违规攻击。他还讨论了攻击性的可行性。最后,他提出一种将安全性从功能中分开的会话管理的方法,并且后者由应用程序引擎实施,但是前者是由一个专门的应用程序安全产品所提供的。

cookie 篡改风险的特征

cookie 篡改 (cookie poisoning) 是一项主要以获取模拟和隐私权泄密著称的技术,通过维护客户(或终端用户)身份的会话信息操纵来实现的。通过打造这些 cookie ,一个黑客可以模拟一个有效的客户,因此获取详细信息并执行代表病毒的行为。这种打造的能力,像会话 cookie (或者更通俗地说,会话标识)源自于这些标识不是以安全的方式产生的事实。

内部会话维护的无休止工作

在 Web 应用程序程序设计中,会话管理是复杂且笨拙的。程序设计者会担心会话管理的许多方面,它能够将他/她从主要目标中的注意力分散:执行这个使此网站唯一且有用的商业逻辑。

具体问题:

  • 会话的创建和识别:您如何能够确定何时的确需要一个新的会话,而且它确实已经创建了?程序设计者必须鉴定有一个客户确实需要一个会话,并创建这个会话以及为这个客户分配一个会话。
  • 并发问题:当两个客户同时访问这个网站时,每个都需要一个新的会话,就有必要确保这个会话创建过程仍然能够正确地运行。
  • 会话的终止和暂停:是什么导致一个会话终止的呢?这些终止的会话资源是如何被重新循环使用的呢?当正在进行终止过程时客户访问这个网站,又会发生什么情况呢?当客户访问带有就的会话的网站时会发生什么情况呢?
  • 会话数据存储,多个服务器,失败。会话的数据储存在什么地方呢?磁盘上?随机存储器上?会有什么样的高性能惩罚?如果一个客户访问第一个服务器(并建立一个会话跟它一起),然后被(负载均衡服务器)导向到第二个服务器,那么在一个多服务器站点将会发生什么?如果原始服务器坏掉,对这个客户会话数据将会有什么样影响?

安明智,下面这些点非常重要,值得思考:

  • 一个客户要想预测另一个客户所接受的,或者正在接受的,或者即将接受的标识,几乎是不可能的。这很显然是一个必须防止的模拟攻击,因此也会违背隐私权。
  • 此外,理想的情况是,当访问一个站点时,客户不能够预测下一个他们即将获取的标识。这对当它来回漫游(不受阻碍)时最小化窃取标识的损坏很有用处,而且在它储存在客户的计算机上也很有用。
  • 任何标识都应该有一个合理的期限——可再次将它被窃取的损坏程度降到最低。

正如您所说,要实现所有的请求并不十分容易,尤其是当这个会话机制发展成无线自组织网时。就会有更复杂的安全需求来明确开发人员,尤其是对安全并不十分熟悉的人员,他们更容易遗忘。

在标识中有很多安全不足的例子。这些在 MIT Laboratory for Computer Science 的著作中有很好的证明(请看Dos and Don'ts of Client Authentication on the Web由 Kevin Fu, Emil Sit, Kendra Smith, 以及 Nick Feamster 合著)。这样,我们就清楚生产一个良好的会话管理解决方案是相当困难的,更不用说一个安全的会话管理解决方案了。这就是为什么应用服务器如此这样受人欢迎的原因之一。

应用服务器和引擎:解决方案和问题

一个 Application Server(或者 Application Engine)就是一个软件程序,是用来使这个应用程序开发者的工作更轻松。它通常会为程序开发者提供编写 HTML 网页的便利,而且这些网页中带有服务器嵌入的指导,指示这个服务器来执行各种任务。大多数应用服务器会为程序开发者提供自动管理会话的环境,将程序开发人员从上面板块中所有提到的担忧中解救出来。

应用服务器的案例:

  • Microsoft® ASP .NET, 是在 IIS 顶端进行运行的
  • Macromedia
  • ColdFusion
  • Apache Tomcat
  • Apache JServ
  • PHP
  • BEA WebLogic
  • IBM ® WebSphere® Application Server。

Security Space Web 网站的 Internet Cookie Report 网页通过将这些 cookie 的名称和发行它们的服务器联合起来,从而提供了一些频率分析。当然,这样说是不全面的,因为一些服务器和站点以参数的形式而不是 cookie 的形式来使用标识的。

应用程序引擎的上面反应了这样一个事实:他们完全将程序开发者从会话管理的担忧中释放出来。会话管理功能的各个方面,通常以更好的方式来管理,而并非内部程序员所能达到的。

应用程序引擎的下面反应了这样的事实:他们看起来是把程序员从标识安全性问题的担忧中释放出来。然而我们可以从损害的事实显示中看到,远不是这样的。事实上,一些十分受欢迎的应用程序殷勤根本就不提供安全标识。因此,程序员对安全性就有错误的意识。

我的合作伙伴和我检测到这些标识是由两个十分受欢迎的应用服务器所产生的。在这两个案例中,我们曾经证明这个标识并不是像它看起来那样的随意,它只是可能(在一个案例中,比较简单)会预测下一个会话(是不同客户的会话)标识的值。

案例 1. 打败一个基于时间的标识

这次攻击的目标是一个非常受欢迎的商业应用程序引擎。这个产品利用两个 cookie 来鉴定一个会话。由两个 cookie 形成的这对来鉴定一个会话。第一个 cookie 仅仅是一个计算器,每次有新的会话时就会增加。它大概能确保不可能有两对是相同的。第二个 cookie 是标识 cookie ,显然是通过“不可预知”来确保这对的安全。假设可以很轻松地预测第一个 cookie ,那么我们这里所关注的第一个 cookie ,就会被标识为TOKEN

第一眼看到的时候,TOKEN 看起来是一个随机的八进制数字的序列。这里的熵是108 = 226.57,它可能是经过充分的考虑过,尝试如此多的请求(一亿次)次数是可行的,而不是一个没有控制警告和人们注意的网站。但是靠近看就会发现,事实上, TOKEN 符合以下的方程式:

我们用t表示 GMT 时间,按秒计算,因为 01/01/1970 00:00,与这个应用服务器上的设置一样。

我们用m表示这个应用服务器上最小单位毫秒。

那么: TOKEN= ( 31415821 * (t+m) + 1 ) mod 100000000

我们注意到十分有趣的是,t可以从服务器返回到客户的 HTTP Date 标头中提取出来,与这个 cookie 第一次的设置一起。这意味着 TOKEN cookie 是完全可预测的。事实上,如果有人了解 cookie 所产生时的时间排列 T </- t < T+ΔT (按秒) ,他就可以推断出 TOKEN 有一个ΔT+1000 值,而不是一些值的简短列表。对服务器测试几千个以上的值可能要花几分钟,在这段时间受害者就可能仍然活跃。这就是一次攻击算法的大概要点:

			获取第一对 (id1, TOKEN1)。记录 t1 –   
服务器时间(从 Date HTTP 标头开始)
等待ΔT 秒钟。获取第二对 (id22, TOKEN2)。
记录 t2–服务器时间从 Date HTTP 标头开始)。
如果 (id2 > id1 +1) 开始 //
我们在这里插入看一个受害者会话。
对于 (x= t1 ; x < t2+1000 ; x++) //
它只是ΔT+1000 迭代开始
尝试这对 (id1 +1, ( 31415821 * x + 1 ) mod 100000000) 终止

事实上,通过利用这样的事实在某些案例中改进这个算法是可能的,在有些操作系统上,最小单位的计数器并没有精确到毫秒的粒度,而是较粗糙的10毫秒的粒度。这可被用来减少更多的搜索空间。

上面所描述的攻击可以使攻击者来扮演一个受害者的角色,假定这样的受害者被分配到两个由站点 cookie 构成的样例攻击者之间。因为攻击者可以任意重复很多次这样的算法,这样攻击者就可能为客户获取这些 cookie ,以抽样这个站点(就是说,每分钟一个请求)为代价,此外,每次发现新客户时就有1060个请求。正如上面所暗示的,在更近的间隔(每次一秒)中抽样以及利用时钟最小单位粒度的问题是有可能的,在这样的案例中很可能达到每个新客户100个请求。

如果在网络拥挤时下载这个站点执行了一个客户的模拟尝试,那么额外的数百或者数千计的请求就会不被注意,至少不会立即被注意。

案例 2. 当 Random() 不是随机时

在这个例子中,我们处理一个仍旧流行的(然而有些过时的)应用程序引擎。这个引擎为每个新会话产生一个单独的 cookie (我们称它为ID),包括三个强制性的区域(F1,F2,以及F3)以及一个可选择的(服务器配置从属)区域(F4,在句号之前)的多连环体。这些区域如下所示:





本文转自IBM Developerworks中国

      请点击此处查看全文

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值