2002年12月,ACROS Security发布了关于会话完成的一篇文章,他们以此命名了一类攻击,攻击者为受害者选择会话ID,而不是用其他方法猜测或者捕捉(链接参见“参考与延伸阅读”)。
会话完成的工作方式如下:
1.攻击者登录一个有漏洞的应用,建立一个用于“困住”受害者的有效会话ID。
2.接着,他说服受害者登录同一个应用,使用相同的会话ID(ACROS的文章讨论了各种实现这一目的的方法,但是最简单的方案是简单地在邮件中发送给受害者一个查询串中带有陷阱会话ID的指向应用的链接)。
3.一旦受害者登录到应用,攻击者重放相同的会话ID,实际上劫持了受害者的会话(有人会说是受害者登录到攻击者的会话上)。
会话完成看上去像是攻击者美梦成真,但是这种攻击中的两个方面使得它不像原来宣传的那么有吸引力:
·攻击者必须说服受害者启动一个URL,用“陷阱”会话ID登录到应用。但是,如果你能够欺骗某人装入一个URI,那么就可以对他们作比修复一个会话ID更糟的事情。
·攻击者必须在受害者注销或者会话到期之前使用相同的陷阱会话ID登录到应用中(当然,如果Web应用不能恰当地处理陈旧的会话,就可能有个开放的窗口)。
会话完成对策
对于会话完成攻击也有一个实际上很简单的对策:对于每次成功的登录(也就是验证之后)生成新的会话,而且只允许服务器选择会话ID值。最后,使用服务器端逻辑确保会话超时,并设置绝对会话期限。
虽然会话完成漏洞曾经常见于Web应用(甚至在某些流行的Web应用框架中),但这种漏洞类型由于开发人员将大部分会话生成和管理委托给Web应用服务器,已经大体上过时了。当然,在安全评审中,应该检查自定义会话生成和管理功能,以发现这种漏洞和其他会话相关的漏洞。
注意 这些对策都纯粹是应用级的;Web平台不会保护你免遭会话完成攻击。