mcpField
C
conducting-mobile-app-penetration-test

conducting-mobile-app-penetration-test

github.com/mukul975安全35.2k294 次安装9 周前更新
代码仓库

关于 conducting-mobile-app-penetration-test

这是一份面向移动应用安全测试人员的 iOS 和 Android 渗透测试技能,按静态分析、网络检查、数据存储及运行时测试组织流程,并涵盖 OWASP MASVS 评估。

主要功能

  1. 01分析 APK 与 IPA
  2. 02拦截并检查网络通信
  3. 03检查本地敏感数据存储
  4. 04测试身份验证与会话管理
  5. 05使用 Frida 进行运行时操纵
  6. 06检查篡改与设备检测机制

适用场景

  1. 01发布前评估移动应用安全
  2. 02检查移动银行或医疗应用的数据保护
  3. 03验证应用及其后端 API 的安全性
  4. 04评估 OWASP MASVS L1 和 L2 要求

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill conducting-mobile-app-penetration-test

安装后在 Claude Code 中输入/conducting-mobile-app-penetration-test确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
agent.py

详细介绍

开展移动应用渗透测试

何时使用

  • 在发布前测试移动应用,以识别安全漏洞和数据保护问题
  • 依据 OWASP MASVS(移动应用安全验证标准)L1 和 L2 级别开展合规性评估
  • 评估处理敏感数据的移动银行、医疗或政府应用的安全性
  • 测试与后端 API 交互的移动应用,以评估移动生态系统的端到端安全性
  • 评估移动应用对逆向工程、篡改和运行时操纵的抵抗能力

请勿使用于未经应用所有者书面授权的移动应用、分发修改或重新打包的应用,或在没有单独测试版本的情况下测试公共应用商店中的应用。

前置条件

  • 目标应用的 IPA(iOS)和 APK(Android)文件,或可通过私有分发渠道下载
  • 已 root 的 Android 设备或模拟器(Genymotion、Android Studio AVD),并安装 Frida、Objection 和 Magisk
  • 已越狱的 iOS 设备或 Corellium 虚拟设备,并安装 Frida、Objection 和 SSL Kill Switch
  • 静态分析工具:jadx(Android 反编译)、Hopper/Ghidra(iOS 二进制分析)、MobSF(自动化扫描)
  • 将 Burp Suite Professional 配置为代理,用于拦截移动应用流量,并在测试设备上安装 CA 证书

法律声明: 本技能仅用于授权的安全测试和教育目的。未经授权对您不拥有或没有书面许可测试的系统使用本技能是非法的,可能违反计算机欺诈相关法律。

工作流

步骤 1:静态分析

在不执行应用二进制文件的情况下对其进行分析:

Android 静态分析:

  • 反编译 APK:jadx -d output/ target.apk 以获取 Java/Kotlin 源代码
  • 检查 AndroidManifest.xml 中导出的组件(activity、service、receiver、content provider)、权限和可调试标志
  • 搜索硬编码密钥:grep -rn "api_key\|password\|secret\|token\|aws_" output/
  • 识别不安全的数据存储模式:包含敏感数据的 SharedPreferences、未加密的 SQLite 数据库、外部存储中的文件
  • 检查 WebView 漏洞:setJavaScriptEnabled(true)、addJavascriptInterface() 以及加载不受信任的内容
  • 运行 MobSF 自动化扫描:python manage.py runserver 并上传 APK 进行自动化静态分析

iOS 静态分析:

  • 解压 IPA 并定位 Mach-O 二进制文件
  • 使用 otool -L <binary> 列出链接的框架并识别第三方库
  • 使用 Ghidra 或 Hopper 分析硬编码的 URL、API 端点和嵌入式凭据
  • 检查 Info.plist 中允许不安全 HTTP 连接的 App Transport Security (ATS) 例外
  • 检查嵌入式 entitlements 是否存在过度权限
步骤 2:网络安全测试

拦截并分析所有网络通信:

  • 在测试设备上将 Burp Suite 配置为代理,并安装 Burp CA 证书
  • 在 Burp 捕获 API 流量的同时,操作所有应用功能
  • SSL/TLS 验证:验证应用是否正确验证服务器证书。如果应用无法通过代理连接,它可能实现了证书固定。
  • 证书固定绕过:
    • Android:使用 Frida 脚本:frida -U -f com.target.app -l ssl-pinning-bypass.js --no-pause
    • iOS:使用 SSL Kill Switch 或 Objection:objection -g "Target App" explore --startup-command "ios sslpinning disable"
  • API 流量分析:审查所有 API 调用是否存在以下情况:
    • 未加密传输敏感数据
    • URL 参数中的身份验证令牌(在日志中可见)
    • API 响应中的数据超出 UI 显示的内容
    • API 端点缺少身份验证或身份验证薄弱
  • WebSocket 和自定义协议:检查可能绕过标准代理拦截的非 HTTP 通信通道
第 3 步:数据存储分析

测试不安全的本地数据存储:

Android 数据存储:

  • 访问应用数据目录:/data/data/com.target.app/
  • 检查 SharedPreferences XML 文件中是否存储了凭据、令牌和 PII
  • 检查 SQLite 数据库:sqlite3 /data/data/com.target.app/databases/*.db ".dump"
  • 检查应用日志中是否存在敏感数据:logcat -d | grep -i "password\|token\|key"
  • 验证应用数据已从备份中排除:AndroidManifest.xml 中的 android:allowBackup="false"
  • 检查剪贴板是否存在敏感数据泄露

iOS 数据存储:

  • 检查 Keychain 中存储的凭据:objection -g "Target App" explore,然后 ios keychain dump
  • 检查 NSUserDefaults/plist 文件:find /var/mobile/Containers/Data/Application/ -name "*.plist" -exec plutil -p {} \;
  • 检查 SQLite 数据库和 Core Data 存储中是否存在未加密的敏感数据
  • 检查是否通过截图泄露数据(iOS 会在应用进入后台时截取屏幕截图)
  • 验证数据保护等级:敏感文件应使用 NSFileProtectionComplete
第 4 步:身份验证和会话管理

测试移动端特有的身份验证控制措施:

  • 生物识别绕过:测试能否通过 Frida hook 身份验证回调使其始终返回成功,从而绕过生物识别身份验证
  • 令牌存储:验证身份验证令牌是否存储在 Keychain(iOS)或 Android Keystore 中,而不是 SharedPreferences 或文件中
  • 会话超时:验证会话是否在合理的空闲超时后过期,以及注销时令牌是否在服务端失效
  • Root/越狱检测绕过:测试应用是否检测已 root/越狱的设备,以及该检测能否通过 Frida 或 Magisk Hide 绕过
  • 深度链接滥用:测试能否利用自定义 URL scheme 或通用链接绕过身份验证或访问受限功能
第 5 步:运行时操纵

测试应用对运行时攻击的抵抗能力:

  • Frida hook:使用 Frida 在运行时 hook 并修改应用函数:
    • 绕过 root 检测:hook 检测函数使其返回 false
    • 修改身份验证检查的返回值
    • 拦截加密函数,在加密前捕获明文数据
    • 通过 hook SSL 验证绕过证书固定
  • 方法交换(iOS):使用 Frida 替换 Objective-C 方法实现
  • Intent 操纵(Android):向导出的组件发送构造的 intent:adb shell am start -n com.target.app/.InternalActivity -e "user_id" "admin"
  • 篡改检测:修改 APK/IPA(添加代码、更改资源),重新签名并安装。验证应用是否检测到篡改。

关键概念

术语定义
OWASP MASTG移动应用安全测试指南;涵盖 iOS 和 Android 平台的移动应用安全测试综合手册
证书固定一种移动安全控制措施,限制应用信任哪些 TLS 证书,防止通过代理拦截发起的中间人攻击
Frida动态插桩工具包,可将 JavaScript 注入正在运行的进程,以 hook 函数、修改行为并绕过安全控制
Root/越狱检测应用层面的检查,用于检测设备是否已被修改以授予 root 访问权限,通常会在设备被入侵时阻止应用使用
Android KeystoreAndroid 上的硬件支持凭据存储,即使在已 root 的设备上也能保护加密密钥和机密免遭提取
App Transport Security (ATS)iOS 安全功能,默认强制使用 HTTPS 连接;ATS 例外可能表明网络通信不安全
深度链接用于打开移动应用中特定界面的 URL scheme,如果未正确验证,可能会绕过正常导航和身份验证流程

工具与系统

  • Frida / Objection:动态插桩工具,用于 hook 函数、绕过安全控制,并在运行时操纵应用行为
  • MobSF(Mobile Security Framework):面向 Android 和 iOS 应用的自动化静态与动态分析平台
  • jadx:Android 反编译器,可将 APK 字节码转换为可读的 Java 源代码,便于人工代码审查
  • Burp Suite Professional:HTTP 代理,用于在绕过证书固定后拦截和修改移动应用 API 流量

常见场景

场景:移动银行应用安全评估

背景:一家银行正在为 iOS 和 Android 推出新的移动银行应用。该应用处理账户查看、资金转账、账单支付和支票存款。由于涉及金融数据,需要符合 OWASP MASVS L2 合规要求。

方法:

  1. 对 Android APK 进行静态分析,发现 API 端点、硬编码的预发布服务器 URL,以及配置文件中的 AWS API 密钥
  2. 已实现证书固定,但可通过 Frida SSL pinning bypass 脚本绕过
  3. API 流量分析显示,余额查询端点返回与用户关联的所有账号,而不仅仅是所请求的账号
  4. 本地数据存储分析发现,该应用将最近 10 笔交易缓存到未加密的 SQLite 数据库中
  5. 生物识别认证绕过:对生物识别回调进行 Frida hook 后始终返回成功,无需指纹即可获得访问权限
  6. 存在 root 检测,但可通过 Magisk Hide 模块绕过,使该应用能够在已 root 的设备上运行并完全访问数据

陷阱:

  • 仅在模拟器上测试,遗漏硬件特定的安全功能(Android Keystore 硬件支持、iOS Secure Enclave)
  • 未同时测试 iOS 和 Android 版本,因为它们可能有不同的实现和不同的漏洞
  • 忽视后端 API 安全,理由是它“已单独测试过”,但移动应用调用 API 端点的方式可能与 Web 应用不同
  • 未测试证书固定绕过,导致网络分析不完整

输出格式

## Finding: Biometric Authentication Bypass via Frida Instrumentation

**ID**: MOB-003
**Severity**: High (CVSS 7.7)
**Platform**: Android and iOS
**OWASP MASVS**: MASVS-AUTH-2 (Biometric Authentication)

**Description**:
The mobile banking app's biometric authentication can be bypassed using Frida
dynamic instrumentation. The authentication callback function accepts a boolean
result from the biometric API, which can be hooked and forced to return true
without presenting a valid fingerprint or face scan.

**Proof of Concept (Android)**:
frida -U -f com.bank.mobileapp -l bypass-biometric.js --no-pause

// bypass-biometric.js
Java.perform(function() {
  var BiometricCallback = Java.use("com.bank.mobileapp.auth.BiometricCallback");
  BiometricCallback.onAuthenticationSucceeded.implementation = function(result) {
    console.log("[*] Biometric bypassed");
    this.onAuthenticationSucceeded(result);
  };
});

**Impact**:
An attacker with physical access to an unlocked device can bypass biometric
authentication and access the victim's bank accounts, initiate transfers,
and view financial data without biometric verification.

**Remediation**:
1. Implement server-side biometric verification using Android BiometricPrompt
   CryptoObject tied to a Keystore key
2. Require the biometric operation to decrypt a server-side challenge, making
   client-side bypass ineffective
3. Add runtime integrity checks to detect Frida and other instrumentation frameworks
4. Implement step-up authentication for high-risk operations (transfers > threshold)

评论

支持 Markdown