OWASP Mobile Top 10 : 2023 簡介
Published in
7 min readOct 24, 2023
以下是針對 2023 年最新 OWASP Mobile Top 10 的簡要介紹。
M1: Improper Credential Usage (憑證使用不當)
WHY:
- 憑證寫死(Hardcoded)
- 不安全的憑證傳輸
- 不安全的憑證儲存
- 弱用戶身分驗證
HOW:
- 避免憑證寫死(Hardcoded)
- 傳輸過程中對憑證進行加密
- 不要在終端裝置上儲存使用者憑證
- 實施強大的用戶身份驗證協定(如2FA)
EXAMPLE:
M2: Inadequate Supply Chain Security (供應鏈安全不足)
WHY:
- 第三方元件缺乏安全性
- 惡意內部威脅(例如惡意開發人員或供應商)
- 測試和驗證不充分
- 缺乏安全意識
HOW:
- 在整個行動應用程式開發生命週期中實施安全編碼實踐、程式碼審查和測試,以識別和減少漏洞。
- 確保安全的應用程式簽署和分發過程,以防止攻擊者簽署和分發惡意程式碼。
- 僅使用受信任且經過驗證的第三方程式庫或元件來降低漏洞風險。
- 建立應用程式更新、修補程式和發布的安全控制,以防止攻擊者利用應用程式中的漏洞。
- 透過安全測試、掃描或其他技術監控和偵測供應鏈安全事件,及時發現事件並做出回應。
EXAMPLE:
M3: Insecure Authentication/Authorization (不安全的身份驗證/授權)
WHY:
- 存在不安全直接物件參考 (IDOR) 漏洞
- 忽略對後端隱藏功能的授權檢查
- 不安全的授權傳輸(將使用者角色或權限傳輸)
- 允許匿名後端 API 執行
- 本機儲存密碼或共用機密
- 弱密碼策略
- 單純使用 FaceID 和 TouchID 等功能
HOW:
- 避免弱身份驗證設計模式
- 在伺服器端執行所有身份驗證請求 (設所有客戶端授權都可以被繞過)
- 用戶端資料存儲,從使用者登入憑證安全性衍生的加密金鑰對資料加密
- 避免使用可欺騙的值進行使用者身份驗證(如裝置識別碼或地理位置)
- 不要允許使用者提供 4 位 PIN 碼作為身份驗證密碼
- 後端系統應獨立驗證經過驗證的使用者的角色和權限
- 執行本機完整性檢查以偵測未經授權的程式碼變更
EXAMPLE:
M4: Insufficient Input/Output Validation (輸入/輸出驗證不足)
WHY:
- 輸入驗證不充分
- 輸出驗證不足(輸出淨化不充分)
- 忽略特定於上下文的驗證
- 無法驗證資料完整性
- 不良的安全編碼實務
HOW:
- 使用嚴格的驗證技術來驗證和清理使用者輸入
- 實施輸入長度限制並拒絕意外或惡意資料
- 正確清理輸出資料以防止跨站點腳本 (XSS) 攻擊
- 顯示或傳輸資料時使用輸出編碼技術
- 據資料上下文(例如檔案上傳、資料庫查詢)執行特定驗證,以防止 Path Traversal或注入等攻擊
- 實施資料完整性檢查以偵測和防止資料損壞或未經授權的修改
- 遵循安全編碼實踐,例如使用參數化查詢(Parameterized Queries)和 Prepared Statements來防止 SQL injection
- 定期進行安全評估,包括滲透測試和程式碼審查,以識別和解決漏洞
EXAMPLE:
M5: Insecure Communication (不安全的傳輸)
WHY:
- 缺乏憑證檢查:行動應用程式無檢查伺服器提供的證書
- 使用弱演算法:客戶端成功與伺服器協商使用弱密碼套件
- 隱私資訊洩露:透過非安全通道而不是透過 SSL/TLS 將個人識別資訊傳輸到端點
- 憑證資訊外洩:允許對手以明文形式攔截這些憑證
- 繞過雙重認證:透過非安全通道而不是透過 SSL/TLS 從端點接收 Session ID
HOW:
- 避免覆寫 SSL 驗證方法以允許不受信任的證書
- 使用受信任的 CA 提供者簽署的憑證 (不允許錯誤憑證)
- 使用具有適當密鑰長度的強大的 Cipher Suites
- 使用金鑰鏈中的受信任憑證驗證端點伺服器的身份後才能建立安全連線
- 將任何敏感資料提供給 SSL 通道之前對其套用單獨的加密層
EXAMPLE:
M6: Inadequate Privacy Controls (隱私控制不足)
WHY:
- 不安全的資料儲存與通訊(參見M5、M9)
- 具有不安全身份驗證和授權的資料存取(請參閱M3、M1)
- 對應用程式沙箱的內部攻擊(請參閱M2、M4、M8)
HOW:
- 個人識別資訊 (PII) 進行匿名或模糊處理
- PII應在過期後刪除
- 使用者是否可以同意可選的 PII 使用
- 使用密封在裝置 TPM 中的金鑰進行 PII 加密
- 記錄敏感資料或洩漏到剪貼簿或 URL 查詢參數等不應洩漏 PII
EXAMPLE:
M7: Insufficient Binary Protections (二進位碼保護不足)
WHY:
- 逆向工程:應用程式二進位檔案被反編譯並掃描以獲取有價值的信息,例如金鑰、演算法或漏洞。
- 程式碼竄改:應用程式二進位檔案被操縱。例如:刪除許可證檢查、規避付費,或該應用程式可能會被操縱以包含惡意程式碼。
HOW:
- 防止逆向工程:免費和商業混淆工具、加殼加固
- 建立安全機制:完整性檢查偵測程式碼竄改和防止重新發布
EXAMPLE:
M8: Security Misconfiguration (安全設定錯誤)
WHY:
- 未審查預設設定:使用預設配置而不審查安全性設定、權限和預設憑證。
- 缺乏安全通訊:使用未加密或弱加密的通訊通道。
- 存取控制薄弱或缺失:允許未經授權存取敏感功能或資料。
- 未能更新或修補:未對應用程式或底層元件套用必要的安全性更新或修補程式。
- 敏感資料儲存不當:以純文字或弱保護格式儲存敏感資料。
- 不安全的文件提供者路徑設定:供內部應用程式使用的文件內容提供者會暴露給其他應用程式或用戶。
HOW:
- 保護預設配置:確保預設設定和配置得到適當保護,並且不會暴露敏感資訊或提供不必要的權限。
- 預設憑證:避免使用寫死的預設憑證。
- 不安全的權限:避免儲存具有過於寬鬆的權限(例如全域可讀和/或全域可寫入)的應用程式檔案。
- 最小權限原則:僅請求應用程式正常運作所需的權限。
- 安全網路設定:禁止明文流量並盡可能使用憑證綁定。
- 停用偵錯:停用應用程式生產版本中的偵錯 (Debug)功能。
- 停用備份模式 (Android):透過在 Android 裝置上停用備份模式。
EXAMPLE:
M9: Insecure Data Storage (不安全的資料儲存)
WHY:
- 缺乏存取控制
- 加密不足
- 非預期的資料外洩或共享
- 會話(Session)管理不善
- 輸入驗證不足
- 雲端儲存配置錯誤
- 第三方函式庫漏洞
HOW:
- 使用強加密
- 安全資料傳輸
- 實施安全儲存機制
- 採用適當的存取控制
- 驗證輸入和清理資料
- 應用安全會話管理
- 定期更新和修補依賴項
EXAMPLE:
M10: Insufficient Cryptography (弱密碼學)
WHY:
- 弱加密演算法
- 密鑰長度不足
- 金鑰管理不當
- 有缺陷的加密實作
- 資料/加密金鑰的不安全儲存
- 缺乏安全傳輸層
- 驗證和身份驗證不充分
- 雜湊缺乏加鹽
HOW:
- 使用強加密演算法
- 確保足夠的密鑰長度
- 遵循安全金鑰管理實務
- 正確實施加密
- 加密金鑰的安全儲存
- 採用安全傳輸層
- 驗證和身份驗證
- 定期更新安全措施
- 進行安全測試
- 遵循行業標準和最佳實踐
- 使用強雜湊函數並實作加鹽
- 使用金鑰衍生函數 (KDF)
EXAMPLE: