資安JAVA(一):Session固定攻擊
來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 1 – SESSION FIXATION PREVENTION
作者:John Melton
內文:
What is it and why do I care?
標題:YEAR OF SECURITY FOR JAVA – WEEK 1 – SESSION FIXATION PREVENTION
作者:John Melton
內文:
What is it and why do I care?
Session 固定攻擊,屬於 Session挾持攻擊的一種。一般攻擊流程如下:
第一步,攻擊者取得網站發出的合法Session ID。
第二步,攻擊者強迫受害者使用同樣的Session ID。
第三步,攻擊者確認該Session ID已使用,且受害者已登入。攻擊者便可以用受害者身分登入。
第一步,攻擊者取得網站發出的合法Session ID。
第二步,攻擊者強迫受害者使用同樣的Session ID。
第三步,攻擊者確認該Session ID已使用,且受害者已登入。攻擊者便可以用受害者身分登入。
第二步是攻擊者的主要手段,執行方式通常是攻擊者送出包含Session ID的惡意連結給受害者。當使用者A能夠存取使用者B的帳號時,很明顯的會產生嚴重問題。
What should I do about it?
還好這個問題並不難解決。作者的建議是:當使用者合法登入後,廢止登入前的 Session 。
而解決方法的執行流程如下:
第一步,使用者輸入正確的帳密。
第二步,系統成功的鑑別使用者身分。
第三步,任何需要保留的Session資訊將被移動到暫存區。
第四步,設定Session為失效。(HttpSession#invalidate())
第五步,產生新的Session。(新Session ID)
第六步,將暫存區的Session資訊,覆蓋到新的Session中。
第七步,使用者以新Session ID 轉向到登入成功頁面。
以下列出OWASP的 ESAPI 的程式碼,示範如何更新Session ID:
(點選資料來源,重點在changeSessionIdentifier 方法。)
除此之外,還有一些技巧可以協助你:
1.確認是否某個使用者以失效的Session ID登入。(可以Least Recently Used 策略維護該ID清單。)
2.確認是否某個使用者以同樣的Session ID從不同的IP登入。(IP資料以地圖形式存放。)
3.假如你發現某些惡意行為,試著使用監視外掛(例如 OWASP 的 AppSensor)來保護你的網站,並在攻擊發生時能通知你處理。
總結以上,Session固定攻擊是很嚴重的問題,但解決辦法卻很簡單。你的最佳策略就是將適合的解決方案加入到您的企業 Framework 中(例如 OWASP 的 ESAPI ),這樣就能一次套用到所有網站。
參考資料:
TWISC@NTUST網路應用安全知識庫
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
———–———–
資安Java: 上一篇 || 下一篇
———–———–
What should I do about it?
還好這個問題並不難解決。作者的建議是:當使用者合法登入後,廢止登入前的 Session 。
而解決方法的執行流程如下:
第一步,使用者輸入正確的帳密。
第二步,系統成功的鑑別使用者身分。
第三步,任何需要保留的Session資訊將被移動到暫存區。
第四步,設定Session為失效。(HttpSession#invalidate())
第五步,產生新的Session。(新Session ID)
第六步,將暫存區的Session資訊,覆蓋到新的Session中。
第七步,使用者以新Session ID 轉向到登入成功頁面。
以下列出OWASP的 ESAPI 的程式碼,示範如何更新Session ID:
(點選資料來源,重點在changeSessionIdentifier 方法。)
public HttpSession changeSessionIdentifier(HttpServletRequest request) throws AuthenticationException
{
// 1.get the current session
HttpSession oldSession = request.getSession();
// 2.make a copy of the session content
Map temp = new ConcurrentHashMap();
Enumeration e = oldSession.getAttributeNames();
while (e != null && e.hasMoreElements())
{
String name = (String) e.nextElement();
Object value = oldSession.getAttribute(name);
temp.put(name, value);
}
// 3.kill the old session and create a new one
oldSession.invalidate();
HttpSession newSession = request.getSession();
User user = ESAPI.authenticator().getCurrentUser();
user.addSession( newSession );
user.removeSession( oldSession );
// 4.copy back the session content to new session
for (Map.Entry stringObjectEntry : temp.entrySet())
{
newSession.setAttribute(stringObjectEntry.getKey(), stringObjectEntry.getValue());
}
return newSession;
}
除此之外,還有一些技巧可以協助你:
1.確認是否某個使用者以失效的Session ID登入。(可以Least Recently Used 策略維護該ID清單。)
2.確認是否某個使用者以同樣的Session ID從不同的IP登入。(IP資料以地圖形式存放。)
3.假如你發現某些惡意行為,試著使用監視外掛(例如 OWASP 的 AppSensor)來保護你的網站,並在攻擊發生時能通知你處理。
總結以上,Session固定攻擊是很嚴重的問題,但解決辦法卻很簡單。你的最佳策略就是將適合的解決方案加入到您的企業 Framework 中(例如 OWASP 的 ESAPI ),這樣就能一次套用到所有網站。
參考資料:
TWISC@NTUST網路應用安全知識庫
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
———–———–
資安Java: 上一篇 || 下一篇
———–———–
Thanks and that i have a neat offer you: How Many Houses Have Been Renovated On Hometown home improvements
回覆刪除