OWASP前10大A07認證及驗證機制失效,瞭解如何修補及預防!
使用者的身份在一個資訊系統中是最重要的事,我們可以去確認使用者的身份驗證與session 的管理,必須通過認證才可以使用系統,認證相關的問題有以下幾點:
- 允許攻擊者用有效使用者的名稱跟密碼列表的撞庫自動攻擊
今天使用者在 Facebook 、 Yahoo、Instagram大型的網站上,使用了一些小型網站的帳號密碼,也就是兩個網站的帳密是同樣的密碼的時候,如果小型的網站的密碼外洩了,那使用者在大型網站的權限也會有危險。
- 允許暴力或其他自動化攻擊
攻擊者可以透過登入介面,做大量的封包測試時,可以去破解存取控制的項目。
- 允許使用預設的密碼
像是Password 1或 admin/admin的帳號密碼,使用預設密碼是不被允許的,和 Security Misconfiguration 一樣,使用預設值一定會有一些問題的情況。
- 使用不安全的知識相關的問答
忘記密碼的流程,或者是資安上的確認,像是提到的你家住哪?你的國小念哪裡?你爸媽的名字?諸如此類這樣子的問答,都是會讓權限控制失效的情況。
- 密碼使用明碼,或是用很脆弱的演算法去做儲存的情況
今天伺服器被攻陷了,攻擊者就可以透過一些手段,將資料庫的密碼做 Dump把它倒出來,那 Dump 出來用Rainbow Table 做破解。
- 下一個是多因素的認證是無效的,或是他原本就沒有做實作
多因子認證目前是在各大網站中非常重要的實作。
- 在 URL 裡面透露了 Session 的 ID
當網站跳轉時,使用者的 Session ID帶進去跳轉的資料裡面,那資料可能被洩漏了。
- 登入後沒做 Session ID 的 rotation
也就是所謂的 Session Fixation 的問題。
- Session 的 ID 並沒有被註銷
使用者按了登出後,基本上這個 session 還是可以被使用的。或是session 沒有設定效期,當外洩了一週、兩週,甚至一個月的情況下,都還有使用者的身份。
A07 認證及驗證機制失效如何做修補跟預防
1.在可能的情況下,使用多因子的認證去防止撞庫攻擊、暴力破解、或是重複利用的情況,故多因子認證的確是最有效的方式之一。
2.預設的認證資訊的狀況,特別是管理者的情況,管理者後台的帳密是預設值的情況下, 駭客可以輕鬆的做入侵的行為。
3.檢查使用者是否脆弱的密碼,這個密碼是不是在最差密碼的清單裡面,可以做一個實作的狀況。
4.密碼的長度、複雜度跟輪換的政策,比方說一季換一次密碼,這個密碼的長度跟複雜度都需要有一個規則,這樣可以有效保護使用者的權限的。
5.所有登入的結果都用同一個相同的訊息回應,好比說是密碼錯誤,或是帳號錯誤都會回應登入錯誤的情況,可以讓攻擊者在測試帳號密碼達到一個混淆的效果。
6.限制或是增加登入失敗的延遲,當一個駭客暴力破解一個帳號密碼時,失敗五次之後,需要等待三分鐘,失敗二十次之後,需要等待半個小時這樣可以有效減緩暴力破解的情況。另外,iPhone基本上只要打錯密碼,它會慢慢延長鎖定的時間。
7.使用伺服器端去做一個 session 的管理,使亂數可以更隨機、安全的使用。
A07 認證及驗證機制失效情境的範例
情境一:撞庫的攻擊。當使用者使用了同一組帳號密碼,在各大網站做使用的時候,攻擊者非常容易可以使用這些帳密做跨站的登入,應用程式在撰寫的程式時候,可以將一萬個最容易使用的密碼的資料在程式裡面做檢查。
情境二:大多數的攻擊都是使用同一種密碼是一個很大的問題。通常會希望有一個密碼的政策,讓每一個使用者頻繁的換密碼,因此權限可以做好保護,或是使用多因子認證去做強化。
情境三:是網站本身的 session 時間是沒有被設定的。一般的使用者在一台公用電腦去使用他的 Facebook,或是Instagram沒有登出,其他人就可以使用他的權限。
總結
相對應的 CWE 列表多數都是一些帳號密碼的問題,及認證略過的狀況。包含了 Session Fixation,Session 保護,還有一些程式本身原本的權限是寫死在程式碼裡面的情況。