[網站漏洞] 002 Broken Authentication vulnerabilities 身份驗證漏洞

本篇文章介紹 OWASP top 10 中 2017 第二名的 broken authentication 針對身份驗證相關的漏洞,身份驗證原理,以及常見的三種身份驗證漏洞成因,最後附上與身份驗證防禦的方式。

身份驗證定義 Authentication

身份驗證因素

身份驗證是伺服器會透過「身份驗證因素」確認使用者的身份的過程,目前有三種驗證因素

  1. You know:knowledge factors
    • 你知道的事物,密碼、安全提示的答案
  2. You have: possession factors
    • 你擁有的物品:手機、安全碼(簡訊、信箱)
  3. You are: inherence factors
    • 你的生物特徵:指紋、人臉
  • 身份驗證機制:驗證一種到多種因素。
  • 身份驗證(authentication) vs 授權(authorization)

    • 身份驗證:我說我是飛飛,我有飛飛的密碼,可以正常登入。
    • 授權:我的權限是管理員,我可以刪除留言、文章。

    不安全的身份驗證 Broken Authentication

    1. 驗證機制脆弱,無法防禦「暴力攻擊」
    2. 程式碼有問題,可以「繞過」身份驗證機制,又稱 broken authentication。

      > A2:2017-Broken Authentication

    身份驗證影響

    1. 登入系統管理員(最高權限)控制整個網站、系統。
    2. 登入一般使用者,取得商業的敏感資料。
    3. 增加攻擊者進一步的攻擊思路。

    漏洞類型

    1. 密碼相關的身份驗證弱點
    2. 多驗證因素身份驗證弱點
    3. 其他身份驗證弱點

    密碼相關的身份驗證弱點

    很多網站都是透過「帳號」、「密碼」進行驗證,因此目標是:找到帳號跟密碼。

    Brute-force attacks

    • 爆破帳號
    • 爆破密碼
    • 枚舉帳號

    繞過保護機制(保護機制可能有缺陷)

    • 帳號鎖定
    • IP 鎖定

    HTTP 基本驗證機制

    Authorization: Basic base64(username:password)

    多驗證因素身份驗證弱點

    繞過雙重身份驗證

    • 雙因素驗證邏輯有問題: 使用 Cookie 確認 username
    • 爆破二階段驗證碼

    其他身份驗證弱點

    網站允許記憶登入狀態

    • Cookie 爆破 Cookie
      • Cookie –> 可能為 帳號+時間戳
      • Cookie 內包含帳號密碼

    重新設定使用者密碼

    • 使用信箱發送密碼
    • 使用 URL 重設密碼

    更新使用者密碼

    • 不需要輸入原本的密碼就可以修改

    防禦身份驗證漏洞

    1. 注意自己的密碼,在安全的機制無法防禦自己洩漏密碼
    2. 有效的密碼策略
    3. 防止帳號枚舉,不管帳號存不存在,都出現相同的狀態碼
    4. 防止暴力破解,加入驗證碼,限定帳號登入次數
    5. 進行 code Review 確認無身份驗證漏洞
    6. 注意密碼重設或密碼更改的功能
    7. 適當的雙因素驗證

    參考資料

    飛飛
    飛飛