本文目录导读:

在手机软件(移动应用)的安全测试中,识别和定位防守漏洞通常被称为渗透测试或安全审计,由于手机App不仅仅是单一的软件,它通常由客户端(App本身)、服务端(云端API)和传输层(网络协议)三部分组成,因此漏洞的定位也需要分层次进行。
以下是一个系统性的识别与定位方法论,供安全研究人员或开发者自查参考:
第一层:客户端(App 本体)漏洞识别与定位
这是攻击面最广的区域,主要关注代码逻辑和逆向工程。
-
静态分析(代码审查):
- 工具:Jadx(反编译APK)、GDA、MobSF(移动安全框架)。
- 定位重点:
- 硬编码密钥/账号:搜索
password、secret_key、api_key、access_token等关键词,在定位到后,检查是否被用于加密通信或访问管理后台。 - 不安全的本地存储:查看
SharedPreferences、SQLite数据库、本地日志(Logcat)文件,看是否存放了明文密码或敏感数据。 - 组件导出漏洞:在
AndroidManifest.xml或 Info.plist 中,检查android:exported="true"的组件,看是否可以被外部恶意应用调用(如劫持WebView界面、Service泄露数据)。
- 硬编码密钥/账号:搜索
-
动态调试(运行态监控):
- 工具:Frida(动态插桩)、Xposed(框架)、Objection(运行时探索)。
- 定位重点:
- Root/模拟器检测绕过:定位
RootCheck函数,看是否存在绕过检测后进入特权模式的风险。 - 内存数据泄露:在输入密码后,使用Frida dump内存,定位是否在释放前有明文残留。
- 逻辑绕过:针对支付、VIP权益功能,动态修改返回值(例如将支付成功的返回码从
0改为1),定位服务端是否对返回值有二次校验。
- Root/模拟器检测绕过:定位
-
组件暴露测试(UI层):
- 操作:应用切换后台,使用
adb shell dumpsys activity查看Activity栈。 - 定位:检查是否存在页面劫持(Activity重定向)或敏感信息(如验证码)在切后台时的截屏泄露。
- 操作:应用切换后台,使用
第二层:服务端(云端API)漏洞识别与定位
手机App的防守核心往往在云端,因为客户端代码可以被篡改,但云端数据相对安全。
-
接口越权(横向与纵向):
- 工具:Burp Suite、Charles、抓包助手。
- 定位方法:
- 注册两个普通用户A和B,使用A的Token访问B的订单接口(如
GET /api/order?id=B的ID)。 - 定位依据:如果B的数据返回,说明存在越权漏洞(IDOR),此时需要定位到中间层代理代码,缺失了用户身份与资源ID的匹配校验。
- 注册两个普通用户A和B,使用A的Token访问B的订单接口(如
-
服务端信任客户端输入:
- 操作:篡改请求包中的
role字段(从user改为admin),或修改price字段。 - 定位:如果服务端返回了管理员权限数据,说明服务端没有对Token中的角色Claims进行二次校验,完全信任了客户端明文传输的数据。
- 操作:篡改请求包中的
-
数据传输安全(中间人攻击):
- 工具:mitmproxy、Burp Suite。
- 定位:
- 抓取流量,观察协议是否为
HTTPS。 - 如果是HTTPS,检查证书校验:尝试安装自定义CA证书后是否仍能抓包,如果能,说明客户端存在证书固定(Pinning)缺陷或未启用二次校验,导致数据可被窃听。
- 抓取流量,观察协议是否为
-
业务逻辑漏洞(薅羊毛/竞态条件):
- 定位:使用
OKHttp或Python脚本并发发送领取优惠券或积分请求(如Thread 100并发)。 - 现象:如果服务端成功创建了超过限制次数的订单或优惠券,说明服务端在 “检查余额” 和 “扣减余额” 之间没有加锁(存在TOCTOU竞态条件)。
- 定位:使用
第三层:传输链路与底层系统
-
协议降级攻击(SSL Stripping):
- 工具:BetterCAP、sslstrip2。
- 定位:在公共Wi-Fi下,监听手机网络流量,查看是否被降级为
HTTP明文传输(这种情况多发生在老旧App或配置错误的广播接收器中)。
-
中间件/第三方SDK漏洞:
- 定位:查看App依赖的第三方库版本(如
JSON解析库、图片加载库)。 - 匹配CVE库:如果App集成了包含已知漏洞的库(如旧版
WebView组件或SQLite版本),可尝试针对性利用(例如利用WebView的addJavascriptInterface接口执行系统命令)。
- 定位:查看App依赖的第三方库版本(如
核心思维:从“现象”倒推“漏洞点”
当定位具体防守漏洞时,推荐使用“缺陷场景”来精确锚定:
| 现象(观察到的结果) | 对应的漏洞点(根因) |
|---|---|
| 登录抓包时,密码是明文或Base64 | 客户端未采用RSA/AES加密,或HTTPS配置不强制(存在中间人风险)。 |
| 修改返回包中的金额/积分后,界面显示变多且可提现 | 服务端API缺失对前端数据的签名校验。漏洞点:服务端接口逻辑。 |
| 退出登录后,使用旧Token还能访问用户信息 | Token吊销机制失效。漏洞点:服务端缓存或会话管理策略。 |
| App在无网络时崩溃 | 客户端代码对异常处理不当(崩溃点定位:Crash日志中的异常堆栈)。 |
最直接的定位工具链(针对高级攻防)
如果你需要更底层的内存和指令级定位,可以使用以下组合:
-
Frida:
frida-trace -U -i "encrypt" 应用包名直接Hook住加解密函数。objection -g 包名 explore快速列出所有类和方法,定位最核心的“校验类”。
-
LLDB(iOS) / GDB(Android):当App进行越狱/Root检测时,通过断点回溯调用栈,精准定位到
jailbreak_detect()函数的具体代码行。 -
Unicorn Engine:用于模拟执行脱壳后的内存片段,定位加壳或混淆代码中的核心逻辑。
特别提醒(重要)
- 合法性:任何测试操作必须在你有明确授权的系统和网络(如公司环境、自家应用、攻防演练靶场)中进行,未经授权对他人应用进行“漏洞挖掘”属于违法行为。
- 防守方视角:作为防御方,利用上述思路排查漏洞时,重点关注越权(IDOR)和敏感数据泄露,这两类问题占移动端安全漏洞的70%以上。
如果你正在测试的是一个“黑盒”(没有源码)环境,建议优先从抓包(Burp Suite)开始,因为通信流量往往能最快定位到接口逻辑缺陷。
标签: 漏洞定位