JAVA年度安全 第一周 防御Session Fixation

来源:互联网 发布:license.lic 破解软件 编辑:程序博客网 时间:2024/05/14 16:11

http://www.jtmelton.com/2012/01/02/year-of-security-for-java-week-1-session-fixation-prevention

这是神马东西,我为啥要关心?

Session Fixation,常用的定义:session劫持的一个变种。最常见的基本流程是:

1、攻击者从应用中获取一个可用的session id

2、攻击者强迫受骗者使用这个session id

3、攻击者通过受骗者正在使用的session id获取受骗者账户的访问权限。

2步诱使受骗者使用这个session id才是攻击的精髓。常见的做法仅仅是给受骗者发送一个带有某个网站session idurl链接。

很明显,一个用户能够控制其他用户的账户是一个严重的问题,那么。。。

我应该做什么?

幸运的是解决这个问题通常很简单。简单的建议:

当用户成功登陆后,废弃用户的session(译者注:网站在用户登陆后,废弃用户登录前使用的session

解决Session Fixation的常见流程如下:

1、用户输入正确的凭证

2、系统成功认证用户信息

3、当前session中的所有需要被保留的信息都存放到一个临时位置

4、废弃当前sessionHttpSession.invalidate())

5、创建新的session(new session ID)

6、将临时位置中的信息放入新session

7、用户使用新的session id成功登陆访问页面

ESAPI工程中有一段有用的代码来展示如何改变session标示。

http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org/owasp/esapi/reference/DefaultHTTPUtilities.java(参考changeSessionIdentifier方法)

还可以采用其他的方法来提供更多的保障来避免这种情况。下面列出我的一些想法:

1、检查用户是否试图使用一个废弃的session id登陆(需要维护一个LRU cache来保存废弃的session id列表)

2、检查用户是否试图使用一个已经在其他ip上使用过的session id(需要使用map来维护这些数据)

3、如果发现一些明显的恶意行为,考虑使用类似AppSensor(作者的广告)的工具来保护你的应用,并且能够让你知道这些攻击。

正如你所知,session fixation是一个严重问题,但是有很简单的解决方案。如果可能的话,你最好的措施是引入一些“企业级”框架中(例如ESAPI)的合适解决方案,这样就能够在你的所有应用中通用这个方案。

参考
———–
https://www.owasp.org/index.php/Session_fixation
http://www.acros.si/papers/session_fixation.pdf
http://cwe.mitre.org/data/definitions/384.html
http://projects.webappsec.org/w/page/13246960/Session%20Fixation