資安JAVA(三十): Authentication

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 30 – AUTHENTICATION
作者:John Melton
What is it and why should I care?
請靠近點,以便鑑別您的身分。
鑑別(Authentication)是一個確認你的身分是否為真的過程。通常使用者會以自己的ID和相關證據以證明身分。實際的情況是,使用者用代號和密碼來通過系統的認證。鑑別是應用程式安全中最重要的部分,因為他是使用者所有行為的起點。許多資安解決方案都是基於使用者身分已通過鑑別的前提,也就是假設使用者身分無誤。然而鑑別身分是有難度的,需要花很多心力來做。

What should I do about it?

前面的一篇文章已經談過鑑別了,所以我會介紹一些沒講過的東西。就從大家都懂的部分開始吧。

鑑別行為應經過安全通道(Authenticate over a secure channel)
以 Web 應用程式為例,就是 SSL/TLS,經由加密通道的鑑別行為才能避免中間人竄改,它的好處簡單明瞭。

登出功能(Logout feature)
一旦使用者登入,必能夠登出。請盡量讓登出按鈕位於版面上顯見之處,讓使用者能輕鬆的結束此次的session。

提供相關功能
當系統有了鑑別的流程後,也必須提供讓使用者能更改密碼、重設密碼的功能,此外也需要提供鎖定帳戶功能以避免暴力破解法。這幾種是常見的基本功能,你還可以加入更多。值得注意的是,要小心實作這些功能,避免影響到系統的運作。

顯示通用錯誤訊息(Use generic error messages)
你要小心不要讓錯誤訊息洩漏了重要資訊。常看到的是當使用者輸入錯誤的代號和密碼時,系統卻回覆"使用者代號不存在"、"密碼錯誤"的詳細資訊。實際上系統只需要回覆"登入失敗"的訊息就好,別讓其他人知道太多細節。

好好的管理 session
這個議題也可以分開來獨立討論。對於 J2EE 的人們,你應該多加利用 J2EE 內建的 session 管理機制(jessionid)。如果有無狀態session的需求,可以試試看 REST 。使用時請注意你的系統是否合適,還有安全性方面的議題。

單一簽入(Single sign on)
若組織中的單一簽入有規劃良好的實作功能,幫助很大。大部分都是這樣運作的:
  *使用者從不同進入點登入時都是使用相同的身分鑑別機制。
  *使用者登入後的 credentials 通用於所有系統。
無論哪一種方式,使用者的身分資料和鑑別機制都只需要執行一次。因此鑑別的流程千萬不要出錯。

接著,我們來討論比較少被人注意的問題。

重要交易功能需經過再次驗證(Re-authentication high value transactions)
如果已經通過鑑別的使用者要執行某些重要功能,像是線上購物、線上轉帳、醫療紀錄等等,你應該再次驗證使用者的身分。如此才能保證當下瀏覽網站的使用者為本人,以避免他人利用合法使用者短暫離開但session仍然有效的期間直接執行重要功能。

多因子鑑別(Use multi-factor authentication)
這是很昂貴的方案,能大幅增加安全性。許多線上系統利用傳送通關代號到使用者的手機,來增加身分鑑別的強度。攻擊者就算竊取使用者的帳號和密碼,沒有手機仍然是無法登入。

外包鑑別機制(Outsource authentication)
過去幾年,讓其他人來幫你驗證使用者的身分已經越來越普遍了。一般而言,你可以利用有知名度的供應商( google / twitter / facebook )幫你鑑別使用者身分。所有的鑑別行為都在供應商那邊執行,再通知你通過與否,你再決定比爾是否能夠登入到你的系統。只要你檢查比爾的 token 是正確的就能讓比爾繼續操作系統。大部分組織都不會考慮這樣的方式,除非你的網站要利用供應商的服務,來讓網站瘦身(並且相信那些供應商的高手們)。目前大部分的供應商都用  OAuth 協定。

結論是,身分鑑別對於是應用程式中關鍵的一環。要做好並不容易,以上的步驟能幫助你改善鑑別機制。

參考資料
———–
https://www.owasp.org/index.php/Authentication_Cheat_Sheet
https://www.owasp.org/index.php/Top_10_2010-A3-Broken_Authentication_and_Session_Management
https://www.owasp.org/index.php/Guide_to_Authentication
https://www.owasp.org/index.php/Testing_for_authentication
https://www.owasp.org/index.php/Session_Management_Cheat_Sheet
http://www.jtmelton.com/2010/06/16/the-owasp-top-ten-and-esapi-part-8-broken-authentication-and-session-management/
http://oauth.net/
http://www.ibm.com/developerworks/cn/web/wa-jaxrs/


———–———–
資安Java: 上一篇 || 下一篇
———–———–

留言

這個網誌中的熱門文章

資安JAVA(八):HTTP強制傳輸安全(HSTS)

以 SharpPcap 實作可收聽封包的 C# 程式

資安JAVA(四):Session Cookie HTTPOnly Flag