黑客攻防技术宝典Web实战篇第2版—第7章 攻击会话管理

7.1 状态要求

1、HTTP是无状态的,基于请求-响应模型,每条消息代表一个独立的事物。

2、大多数Web站点实际为Web应用程序,他们允许用户注册登录,购买销售,记住用户喜好,它们可以根据用户的单机和输入,动态建立的内容提供丰富、多媒体形式的使用体验。为了执行这些功能,应用程序就需要使用会话。

3、为了分辨客户端及做到保密的作用,每个会话使用令牌或标识符,极大多数令牌用cookie实现。虽然这种机制有利于会话数据传输,但攻击者也能通过某种手段获取cookie,从而冒充该用户。

4、会话机制中存在的漏洞:

①会话令牌生成过程中的薄弱环节

②在整个生命周期中处理会话令牌的薄弱环节

5、会话替代方案:并非都使用会话,一些具备验证机制、功能复杂的安全性至关重要的应用程序选择使用其他技术管理状态,

①HTTP验证:在HTTP验证中,客户端组件使用HTTP消息头通过浏览器直接与验证机制交互,而不是通过包含在任意单独页面中的针对特定应用程序的代码与验证机制交互。

②无会话状态机制:一些应用程序并不发布会话令牌管理用户与应用程序的交互状态,而是传送所有必要数据(一般保存在cookie或隐藏表单字段中),由客户端管理状态。

 

7.2 会话令牌生成过程中的薄弱环节

1、很多时候生成令牌时并不安全、易被攻击者得到其他用户令牌。

 

7.2.1 令牌有一定含义

1、一些令牌是用户信息的十六进制形式,不安全。可以使用用户多种信息,多种转码方式(XOR/Base64/ASCII十六进制)等组成令牌。

 

7.2.2 令牌可预测

1、一些令牌不包含用户信息,但包含某种顺序或模式,攻击者也可据此推断其他令牌,因此具有可预测性。

2、令牌可能会更复杂,主要包括以下内容:

①隐含序列:令牌原始形式进行分析可能无法预测,但对其进行解码或解译就可以揭示其中包含的序列。

②一些Web服务器应用程序用时间作为令牌值的输入,通过某种算法生成会话令牌。

③生成的数字随机性不强:计算机中数据极少完全随机,一般通过软件使用技巧生成位随机数字。

④测试随机性强度:测试标准方法是应用统计假设测试原则,采用严格测试查找令牌样本的非随机性,步骤如下:

 

7.2.3 加密令牌

1、EBC加密令牌:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。但缺点是同样的明文组会得到同样的密文组。

2、CBC密码:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。

 

7.3 会话令牌处理中的薄弱环节

1、即使令牌很难加以分析或者预测,但如果生成令牌时不对其进行小心处理,它的会话机制仍然易于受到各种攻击。

7.3.1 在网络上泄露令牌

1、如果通过网络以非加密方式传送会话令牌,就会出现此方面的漏洞。

 

7.3.2 在日志中泄露令牌

1、除在网络通信中明文传送会话令牌外,各种系统日志也常常将令牌泄露给为授权方。

2、会话令牌出现在系统日志中的原因:

①应用程序使用URL查询字符串,而不是使用HTTP cookie或者POST请求主体作为令牌传输机制

②管理员或其他人员在监控或控制应用程序运行状态时记录信息。

 

 

7.3.3 令牌—会话映射易受攻击

1、由于应用程序将在生成和处理的会话令牌与令牌所属的用户会话之间进行对应的过程中存在最薄弱的环节,会话管理机制因此存在各种常见的漏洞。

2、最简单的漏洞就是允许同一个账户同时分配多个有效的令牌,应用程序使用“静态”令牌是一种较为特殊的缺陷。

7.3.4 会话终止易受攻击

1、会话终止好处:

①降低攻击者截获、猜测或滥用有效会话令牌的可能性。

②确保共享计算环境中会话的安全。

 

7.3.5 客户端暴露在令牌劫持风险之中

1、攻击者可以采用各种方法向应用程序的其他用户发动攻击:

①攻击者可通过跨站点脚本攻击查询用户的cookie,获得他们的会话令牌,然后将其传送到自己控制的任何服务器。

②攻击者可以使用其他针对用户的攻击,以不同方式劫持会话。

 

7.3.6 宽泛的cookie范围

1、cookie工作机制:服务器使用HTTP响应消息头Set-cookie发布一个cookie,然后浏览器在随后的请求中使用Cookie消息头向这台服务器重新提交这个cookie。

2、cookie机制允许服务器指定将每个cookie重新提交到哪个域和URL,因此Set-cookie使用domain和path属性。

3、cookie域限制

 

4、cookie路径限制

与cookie范围域限制一样,服务器可以在Set-cookie指令中插入一个path属性,改变这种默认属性行为,如果应用程序返回以下HTTP消息头:

那么这个浏览器会将这个cookie重新返回到/apps/路径的所有子目录中。

相比于基于域的cookie范围,这种基于路径的限制比同源策略更为严格,但这种防御机制几乎无效。

 

7.4 保障会话管理的安全

7.4.1 生成强大的令牌

1、用于在连接请求中重新表示用户身份的令牌,在其生成过程中,不应给攻击者任何机会。

2、最有效的令牌生成机制应当具备以下两点:

①使用数量庞大的一组可能值

②包含强大的伪随机源,确保令牌以无法预测的方式平均分布在可能值范围内。

3、令牌只包含识别标识符,不应包含其他任何信息。

7.4.2 在整个生命周期保障令牌的安全

1、在令牌整个生命周期中都应该保证其安全性。

①令牌只能通过HTTPS传送。

②不能再URL中传送会话令牌,易受到会话固定攻击,可能使令牌出现在各种日志机制中。

③应总执行退出功能。

④会话处于非活动状态时,应执行会话终止。

⑤防止并行登录

⑥如果应用程序包含可以查看令牌的管理或诊断功能,应对这种功能加以保护,防止未授权访问。

⑦尽可能限定会话cookie的域和路径范围。

⑧严格审查应用程序代码库,确保删除任何跨站点脚本漏洞。

⑨不应接受用户提交、但服务器并不认可的任意令牌。

⑩在进行重要操作时,重复确认或重新验证机制。

7.4.3 日志、监控与警报

1、日志与监控警报提供反常行为的记录和监控

①应用程序应监控包含无效令牌的请求。

②虽难避免会话令牌蛮力攻击,但可将包含无效令牌源IP屏蔽一段时间。

③对蛮力攻击保留详细日志。

④尽可能向用户警报与会话有关的反常事件。

 

7.5 小结

1、攻击者在攻击应用程序时,会话管理机制中存在的诸多漏洞会为他们提供大量攻击目标。

7.6 问题

1、登录一个应用程序后,服务器建立以下cookie

Set-cookie: sessid=amltMjM6MTI0MToxMTk0ODcwODYz;

一个小时后,再次登录并得到以下cookie

Set-cookie: sessid=amltMjM6MTI0MToxMTk0ODc1MTMy;

通过这些cookie,可以得出什么推论?

答:sessid cookie包含一个Base64编码的字符串。解码收到的两个cookie可得到以下值:

jim23:1241:1194870863

jim23:1241:1194875132

解码后的cookie包含三个以分号分隔的数据项。初看来,这三个值可能包含用户名、数字用户标识和一个不断变化的数值。最后一项包含10个数字,看起来像一个Unix时间值。转换这两个值后得到以下信息:

Mon, 12 Nov 2007 12:34:23 UTC

Mon, 12 Nov 2007 13:45:32 UTC

这表示创建会话的时间。

因此,会话令牌似乎由有意义的用户相关数据和一个可预测的数据项构成。理论上,可以实施蛮力攻击来猜测发布给其他应用程序用户的令牌。

 

2. 某个应用程序使用由6个字符组成的数字字母会话令牌和由5个字符组成的数字字母密码。它们全都由某种无法预测的算法随机生成。其中哪一个最有可能成为蛮力猜测攻击的目标?列出影响你做出决策的各种不同因素。

答:与由5个字符组成的密码相比,由6个字符组成的会话令牌的可能值要多得多。因此,似乎较短的密码是最有价值的攻击目标。

但是,针对密码的蛮力攻击与针对会话令牌的蛮力攻击之间存在一些重要的差异。在尝试猜测密码时,必须同时提交用户名和密码,因此每个请求最多只能针对一个账户发动攻击,甚至可能无法针对任何账户发动攻击。你可能已经知道一些用户名,或者能够枚举出用户名,或者可能需要同时猜测用户名和密码。登录机制可能包含多个阶段,或者响应速度较慢。登录机制还可能实施了账户锁定机制,这会显著降低你的攻击速度。

另一方面,在尝试猜测会话令牌时,通常可以同时针对多个用户。应用程序中可能有20、2000或0位已登录用户。如果某位用户当前并未登录,则无法以这种方式对其实施攻击。在收到大量无效令牌时,应用程序根本没有办法实施任何类型的“锁定”。正常情况下,令牌猜测攻击的速度非常快,通常,包含无效令牌的请求会立即收到包含错误消息或重定向的响应。

简言之,这个问题并没有确定的答案。哪一个是最有价值的目标,将取决于你的目的和应用程序的其他因素。如果许多用户都已登录并且只需要攻破其中一位用户,则最好是针对会话实施攻击。如果希望攻破某个极少登录的管理账户,则实施密码猜测攻击会更加有效。

 

3、登录位于以下URL的一个应用程序后:

https://foo.wahh-app.com/login/home.php

服务器建立以下cookie

Set-cookie: sessionId=1498172056438227; domain=foo.wahhapp.

com; path=/login; HttpOnly;

然后访问下面的URL。浏览器会将sessionId cookie提交给哪些URL?(选出全部答案。)

(1) https://foo.wahh-app.com/login/myaccount.php

(2) https://bar.wahh-app.com/login

(3) https://staging.foo.wahh-app.com/login/home.php

(4) http://foo.wahh-app.com/login/myaccount.php

(5) http://foo.wahh-app.com/logintest/login.php

(6) https://foo.wahh-app.com/logout

(7) https://wahh-app.com/login/

(8) https://xfoo.wahh-app.com/login/myaccount.php

答:(1) 是。其中的域和路径均与cookie范围相匹配。

(2) 否。其中的域与cookie的域范围不同,也不是它的子域。

(3) 是。其中的域是范围中指定的域的子域,且路径与范围相匹配。

(4) 是。其中的域和路径均与cookie范围相匹配。虽然采用了HTTP协议,但并未指定secure标记,因此仍然会传送该cookie。

(5) 是。其中的域与cookie范围相匹配。由于路径范围在/login后并没有斜线,因此,该范围将不仅包括路径/login/,而且包括任何其他与/login前缀匹配的路径。

(6) 否。其中的路径与cookie范围不匹配。

(7) 否。其中的域是在范围中指定的域的父域。

(8) 否。其中的域与cookie的域范围不同,也不是它的子域。

 

4. 所针对的应用程序除使用主会话令牌外,还使用每页面令牌。如果收到一个不按顺序发送的每页面令牌,整个会话将被终止。假设发现了某种缺陷,可通过它预测或截获应用程序发布给当前正在访问应用程序的其他用户的令牌,那么是否能够劫持他们的会话?

答:攻击者仍有可能实施会话劫持攻击。如果攻击者获得了发布给某个用户的令牌,就可以立即使用那些令牌提出请求,并且服务器将接受这些请求。但是,如果该用户随后向应用程序提出另一个请求,其提交的每页面令牌将出现顺序错误,整个会话将被终止。因此,如果用户仍然在与应用程序交互,则实施攻击的可能性会非常低。如果攻击者只希望利用用户的权限执行特定操作,则可以实施一次脚本攻击,在有限的时间间隔内执行所需操作。

 

5. 登录一个应用程序后,服务器建立以下cookie

Set-cookie: sess=ab11298f7eg14;

单击“退出”按钮后,应用程序执行以下客户端脚本:

document.cookie=”sess=”;

document.location=”/”;

通过这种行为,可以得出什么结论?

答:退出功能存在缺陷。

上述脚本将使浏览器中当前保存的会话令牌失效,也就是说,随后的任何请求将不会提交之前的令牌值。然后,该脚本将启动一个指向应用程序起始页面的重定向。任何访问受保护功能的尝试将遭到拒绝,因为相关请求并不属于通过验证的会话的一部分。

但是,客户端应用程序并未将已执行了退出操作这一信息传达给服务器。服务器上的用户会话将仍处于活动状态,如果将之前发布的令牌提交给服务器,服务器将继续接受该令牌。在会话超时或以其他方式被清除之前,这种情况会一直持续。在这段时间内,已通过某种方式截获或猜测出令牌值的攻击者就可以继续使用令牌来劫持用户的会话。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值