http://mdsec.net/auth/369/
http://mdsec.net/auth/372/
http://mdsec.net/auth/374/
除在网络通信中明文传送会话令牌外,各种系统日志也常常将令牌泄露给未授权方。虽然这种情况很少发生,但由于除了处在网络适当位置的窃听者之外,还有其他各种潜在的攻击者都能查阅这些日志,这种泄露通常会造成更严重的后果。
许多应用程序为管理员和其他支持人员提供监控和控制应用程序运行时状态(包括用户会话)的功能。例如,帮助用户解决疑难的服务台工作人员可能会要求用户提供用户名、通过列表或搜索功能定位他们当前的会话,并查看与会话有关的细节。或者管理员可能会在调查一起违反安全事件的过程中查询最近会话的日志记录。通常,这种监控和控制功能会泄露每个会话的令牌。而且,这种功能一般没有得到良好的保护,允许未授权用户访问当前会话令牌列表,因而劫持所有应用程序用户的会话。
会话令牌出现在系统日志中的另一个主要原因是应用程序使用URL查询字符串,而不是使用HTTP cookie或POST请求主体作为令牌传输机制。例如,在Google上查询inurl:jsessionid即可确定数千个在以下URL中传送Java平台会话令牌(称作jsessionid)的应用程序:
http://www.webjunction.org/do/Navigation;jsessionid=
F27ED2A6AAE4C6DA409A3044E79B8B48?category=327
如果应用程序以这种方式传送会话令牌,它们的会话令牌就可能出现在各种未授权用户能够访问的系统日志中,例如:
用户浏览器的日志;
Web服务器日志;
企业或ISP代理服务器日志;
任何在应用程序主机环境中采用的反向代理的日志;
应用程序用户通过单击站外链接访问的任何服务器的Referer日志,如图7-11所示。
图7-11 当会话令牌出现在URL中时,只要用户点击站外链接或浏览器加载站外资源,会话令牌就会在Referer消息头中传送
上面描述的最后一种情况为攻击者提供了一种截获应用程序会话令牌的非常有效的方法。例如,如果一个Web邮件应用程序在URL中传送会话令牌,那么攻击者就可以向应用程序的用户发送一封电子邮件,在里面包含一个连接到他控制的Web服务器的链接。如果任何用户访问这个链接(如单击它,或者他们的浏览器加载了包含在HTML格式的电子邮件中的图像),攻击者就会实时收到该用户的会话令牌。然后,攻击者只需在他的服务器上运行一段脚本,就可以劫持每一个令牌的会话,并执行某种恶意操作,如发送垃圾邮件、获取个人信息或修改密码。
注解
追踪通过HTTPS访问的页面中包含的站外链接时,当前版本的Internet Explorer中并不包含Referer消息头。在这种情况下,只要站外链接也通过HTTPS访问,即使它属于另一个域,Firefox中也包含Referer消息头。因此,即使使用SSL,插入在URL中的敏感数据也容易在Referer日志中泄露。