mirror of
https://github.com/sgInnora/alipay-deeplink-research
synced 2026-06-27 05:34:17 +08:00
feat: global navigation bar + verification badge across all 9 pages
- Unified nav bar with links to all research articles - Verification badge: Docker 37/37, Zenodo DOI, IACR 2026/526, Packet Storm - Mobile responsive hamburger menu - PoC payloads and evidence screenshots added - Draft articles and planning files included Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
242
wechat_privacy_article_draft.md
Normal file
242
wechat_privacy_article_draft.md
Normal file
@@ -0,0 +1,242 @@
|
||||
# 支付宝需要监控你的截屏、蓝牙和通话吗?一次完整的逆向工程分析
|
||||
|
||||
> 对支付宝APK (v10.8.30) 208个API拦截点、22个行为监控事件和97%无保护内部接口的代码级分析
|
||||
|
||||
**本文永久地址**: https://innora.ai/zfb/privacy-analysis.html
|
||||
**如果本文被删除,请访问上述地址阅读完整版。**
|
||||
|
||||
---
|
||||
|
||||
## 引言
|
||||
|
||||
当你打开支付宝扫码付款时,你可能不会想到:在你看不到的地方,支付宝正在监控你的截屏行为、剪贴板内容、蓝牙连接、通话状态,甚至你每一次切换页面的精确时间戳。
|
||||
|
||||
这不是猜测。这是对支付宝APK文件进行完整逆向工程后,从代码中直接提取的事实。
|
||||
|
||||
本文所有结论均来自对APK文件的静态反编译分析(工具:jadx、radare2、Ghidra),任何人都可以独立验证。完整分析代码已开源在GitHub。
|
||||
|
||||
---
|
||||
|
||||
## 一、208个API拦截点
|
||||
|
||||
支付宝内部存在一个名为**DexAOP**的字节码级拦截框架(代码路径:`com.alipay.dexaop`,包含1606个Java文件)。它在编译阶段就将拦截代码注入到Android系统API的调用链中。
|
||||
|
||||
我们统计了全部拦截点——**976个代理类 + 180个回调桩 = 覆盖208个API类别**:
|
||||
|
||||
| 拦截类别 | API数量 | 隐私影响 |
|
||||
|----------|---------|----------|
|
||||
| **蓝牙** | 17 | BLE/GATT/A2DP/HID全覆盖 |
|
||||
| **电话** | 17 | 通话状态、SIM卡、IMEI |
|
||||
| **网络/HTTP** | 15 | 拦截所有网络请求 |
|
||||
| **通讯录** | 12 | 完整通讯录访问 |
|
||||
| **传感器** | 10 | 加速度计、陀螺仪、生物识别 |
|
||||
| **录音** | 9 | 麦克风全链路拦截 |
|
||||
| **存储/文件** | 8 | 文件系统读写 |
|
||||
| **WiFi** | 5 | SSID、BSSID、WiFi扫描 |
|
||||
| **摄像头** | 5 | Camera + Camera2全部API |
|
||||
| **剪贴板** | 4 | 你复制的每一段文字 |
|
||||
| **GPS定位** | 3 | 精确地理位置 |
|
||||
| **NFC** | 6 | 非接触式支付+卡模拟 |
|
||||
| **加密操作** | 3 | Cipher/Signature/MAC |
|
||||
| **其他** | 92 | WebView、存储等 |
|
||||
| **合计** | **208** | |
|
||||
|
||||
### 超出支付安全范畴的拦截
|
||||
|
||||
我们理解支付APP需要一些权限来保障交易安全。但以下拦截远远超出了"支付安全"的边界:
|
||||
|
||||
- **Camera2 PreviewCallback** — 拦截摄像头的每一帧预览画面。扫码只需要识别结果,为什么要拦截预览帧?
|
||||
- **RingtoneManager** — 支付APP为什么关心你的铃声设置?
|
||||
- **所有加密操作** — 拦截Java层的`Cipher`(加密)、`Signature`(签名)和`MAC`(消息认证),意味着APP内任何组件的加密行为都在监控之下
|
||||
- **14个录音拦截点** — 覆盖麦克风访问的每一个环节,精确记录"录音开始"和"录音结束"时间戳
|
||||
|
||||
---
|
||||
|
||||
## 二、22个行为监控事件
|
||||
|
||||
除了208个API拦截,代码中还有一个独立的**行为监控系统**(代码路径:`com.taobao.wireless.security.adapter.datacollection`),通过BroadcastReceiver注册了22个监控事件。
|
||||
|
||||
**工作机制**:APP启动后3秒延迟激活。每个事件被记录为`(事件编号, 时间戳)`格式,每积攒10条批量上报服务器(事件ID `100184`)。
|
||||
|
||||
| 编号 | 监控什么 | 你可能想知道 |
|
||||
|------|---------|------------|
|
||||
| 0-1 | 屏幕亮/灭 | 知道你什么时候看手机 |
|
||||
| 2-3 | APP前/后台 | 知道你什么时候离开支付宝 |
|
||||
| 4 | 飞行模式 | 检测你是否断网 |
|
||||
| 5 | 系统时间修改 | 检测你是否改时间 |
|
||||
| **6** | **截屏** | **知道你截了支付页面的屏** |
|
||||
| **7** | **录屏** | **知道你是否在录屏** |
|
||||
| 8-10 | 蓝牙开关/连接/断开 | 追踪你的蓝牙外设 |
|
||||
| **11** | **通话状态** | **知道你什么时候接/打电话** |
|
||||
| 12 | 耳机插拔 | 知道你是否戴耳机 |
|
||||
| **13** | **剪贴板变化** | **你复制的内容被记录** |
|
||||
| 14 | 网络切换 | WiFi/移动网络变化 |
|
||||
| 15-21 | Activity生命周期×7 | 精确到每个页面的创建/暂停/销毁 |
|
||||
|
||||
### 远程开关
|
||||
|
||||
代码中有一个**OrangeConfig远程配置开关**(namespace: `securityguard_orange_namespace`,key: `132`),默认值`"0"`。服务器可以随时将其设为`"1"`来激活全部22个监控事件。
|
||||
|
||||
换句话说:**即使当前没开,服务器一个指令就能全部打开。**
|
||||
|
||||
### 截屏监控意味着什么?
|
||||
|
||||
当你截屏保存一个转账记录时——也许是为了留证据——支付宝会立即知道。当你打开录屏软件时,支付宝也会立即知道。
|
||||
|
||||
问一个直接的问题:**监控用户截屏和录屏,合理的业务场景是什么?** 如果答案是"防止敏感信息泄露",那反过来想:这不正是在阻止用户保留自己的交易证据吗?
|
||||
|
||||
---
|
||||
|
||||
## 三、29项设备超级指纹
|
||||
|
||||
支付宝代码中的`DeviceInfoCapturerFull`类包含一个29项`switch`语句(已通过3-LLM交叉验证确认),收集:
|
||||
|
||||
**硬件标识**: IMEI、OAID、WiFi MAC地址、MediaDrm ID
|
||||
**SIM卡**: 运营商信息、SIM序列号
|
||||
**系统**: 音频路由、屏幕分辨率、时区、语言
|
||||
**应用**: 已安装应用签名信息、已授予权限列表
|
||||
|
||||
这29项数据被组合生成一个叫**UMID**的跨安装持久化设备ID——你卸载支付宝重装,它依然能识别出这是同一部手机。该ID存储在系统KeyStore中,不会被常规清理删除。
|
||||
|
||||
**定期上报**:这些指纹数据不是一次性收集,而是定期上传服务器。
|
||||
|
||||
### 《个人信息保护法》怎么说?
|
||||
|
||||
第26条规定:收集个人信息应当限于实现处理目的的**最小范围**。
|
||||
|
||||
29项设备信息 + 跨安装追踪 + 定期上传 = "最小必要"吗?
|
||||
|
||||
在欧盟GDPR框架下,IMEI和MAC地址被明确归类为"个人数据"。新加坡PDPC已对此立案调查(案号#00629724)。
|
||||
|
||||
---
|
||||
|
||||
## 四、97%的内部接口没有权限保护
|
||||
|
||||
这可能是最令人震惊的发现。
|
||||
|
||||
支付宝使用一个叫**Ariver**的框架管理JSBridge接口——小程序和H5页面通过这些接口调用原生功能(支付、获取位置、读通讯录等)。
|
||||
|
||||
我们扫描了**全部408个BridgeExtension类**的`permit()`方法:
|
||||
|
||||
```
|
||||
有权限检查的接口: 12个 (2.9%)
|
||||
没有权限检查的接口: 396个 (97.1%)
|
||||
```
|
||||
|
||||
在Ariver框架代码中(`DefaultAccessController.java:132`),`permit()`返回`null`意味着**直接跳过所有权限检查**。
|
||||
|
||||
没有权限保护的高危接口包括:
|
||||
|
||||
- **6个支付类** — TradePayBridgeExtension、DCEPWalletBridgeExtension(数字人民币钱包)
|
||||
- **5个认证类** — LoginExtension、VerifyIdentityBridgeExtension
|
||||
- **3个NFC类** — NFCBridgeExtension、NfcPayExtension
|
||||
- **6个文件类** — FileBridgeExtension、UploadFileBridgeExtension
|
||||
- **6个硬件类** — ScanBridgeExtension(摄像头)、ClipboardBridgeExtension(剪贴板)、MakePhoneCallBridgeExtension(拨打电话)
|
||||
|
||||
396个无保护接口意味着:**一旦攻击者找到入口,几乎可以调用支付宝的任何功能——包括支付、定位和通讯录。** 而入口确实存在(详见我们提交的9个CVE漏洞)。
|
||||
|
||||
---
|
||||
|
||||
## 五、服务器可以远程修改你手机上的代码
|
||||
|
||||
在每一个安全关键方法中,我们都发现了一个`ChangeQuickRedirect`字段。这是一个叫**PatchProxy**的热修复框架——它允许服务器在**不经过应用商店审核、不需要用户同意**的情况下,远程修改支付宝在你手机上的运行行为。
|
||||
|
||||
被PatchProxy覆盖的方法包括:
|
||||
- TLS证书验证(可远程关闭HTTPS安全检查)
|
||||
- 权限检查(可远程关闭接口保护)
|
||||
- 签名验证(可远程关闭请求签名校验)
|
||||
- 支付校验(可远程修改支付流程)
|
||||
|
||||
通俗理解:**你手机上支付宝的代码不是固定的——蚂蚁集团的服务器随时可以改。**
|
||||
|
||||
热修复是行业常见做法。但关键区别在于:支付宝的热修复**覆盖了安全验证方法**(而非仅修复bug),用户**不会收到任何通知**,修改可以在**毫秒级**生效。
|
||||
|
||||
---
|
||||
|
||||
## 六、"说了什么就推荐什么"——技术解释
|
||||
|
||||
很多用户反映:和朋友聊天提到某个商品,打开支付宝就看到了推荐。
|
||||
|
||||
### 我们的结论:有能力,但没有发现后台偷录证据
|
||||
|
||||
代码中确实存在完整的录音基础设施:25+个录音相关Java文件、4种编码器(WAV/AAC/PCM/MP3)、14个麦克风API拦截点。但我们**没有找到后台静默录音的触发机制**——没有隐藏的后台Service,没有独立的音频上传通道。
|
||||
|
||||
更合理的技术解释是:
|
||||
|
||||
1. **同一WiFi → 家庭画像**:你和家人连同一个路由器,路由器MAC地址被共享,家人搜了什么你也会看到推荐
|
||||
2. **跨APP设备指纹**:UMID/OAID在多个阿里系APP间共享,淘宝的搜索影响支付宝的推荐
|
||||
3. **确认偏差**:你只记住了"准"的那几次,忘记了不准的几百次
|
||||
|
||||
---
|
||||
|
||||
## 七、行业对比
|
||||
|
||||
| 能力 | 支付宝 | 行业一般做法 |
|
||||
|------|--------|-------------|
|
||||
| API拦截 | 208个类别(DexAOP) | 30-50个(支付相关) |
|
||||
| 行为监控 | 22个事件(含截屏/录屏/剪贴板) | 5-8个(登录态/网络) |
|
||||
| 设备指纹 | 29项(跨安装追踪) | 10-15项 |
|
||||
| 内部接口保护 | 97%无权限检查 | 安全框架通常默认拒绝 |
|
||||
| 远程代码修改 | 覆盖安全验证方法 | 热修复通常不覆盖安全方法 |
|
||||
|
||||
---
|
||||
|
||||
## 八、如何自己验证
|
||||
|
||||
```bash
|
||||
# 1. 下载APK (APKPure, 版本10.8.30.8000)
|
||||
# 2. 反编译
|
||||
jadx -d output --show-bad-code Alipay.apk
|
||||
|
||||
# 3. 统计DexAOP拦截点
|
||||
grep -rn "proxy" output/sources/com/alipay/dexaop/ | wc -l
|
||||
|
||||
# 4. 搜索行为监控
|
||||
grep -rn "SCREEN_SHOT\|SCREEN_RECORD\|PrimaryClipChanged\|PHONE_STATE" output/sources/
|
||||
|
||||
# 5. 统计permit()返回null
|
||||
grep -A3 "public Permission permit()" output/sources/ | grep "return null" | wc -l
|
||||
|
||||
# 6. 查看远程开关
|
||||
grep -rn "securityguard_orange_namespace" output/sources/
|
||||
```
|
||||
|
||||
完整分析工具和结果:https://github.com/sgInnora/alipay-securityguard-analysis
|
||||
|
||||
---
|
||||
|
||||
## 九、厂商回应与后续
|
||||
|
||||
- **2026-03-07**: 我们向蚂蚁集团报告了17个安全漏洞
|
||||
- **2026-03-10**: 蚂蚁集团回复:**"正常功能"**
|
||||
- **2026-03-11**: 我们公开披露研究成果。4小时后,蚂蚁集团的律师事务所(北京格韵律师事务所)发出删除投诉
|
||||
- **2026-03-15**: 微信公众号4篇相关文章**全部被删除**,无任何事前通知,依据"《网络安全法》"
|
||||
- **2026-03-15**: 服务器端开始拦截我们的PoC验证请求(API返回空白页)
|
||||
- **2026-03-17**: 9个漏洞已提交国际CVE数据库,38个国家和地区的机构已回应
|
||||
|
||||
**厂商的应对模式**:口头否认 → 律师函 → 删除文章 → 服务器端封堵PoC → 平台全面审查
|
||||
|
||||
9个安全漏洞已提交国际CVE数据库(编号待分配)。研究成果已被Packet Storm Security收录发布(Advisory #217089),香港金管局、卢森堡CSSF、新加坡PDPC、英国FCA等机构已确认收到并启动处理程序。
|
||||
|
||||
---
|
||||
|
||||
## 我们的问题
|
||||
|
||||
1. **必要性**:支付宝拦截208个系统API、监控22种行为、收集29项设备指纹——这些都符合"最小必要"原则吗?
|
||||
2. **知情权**:用户是否被明确告知这些数据收集行为?隐私政策中是否逐项列明了截屏监控、剪贴板监控、通话状态监控?
|
||||
3. **97%**:97%的内部接口没有权限保护——这符合安全开发最佳实践吗?
|
||||
4. **远程控制**:服务器可以远程修改安全验证逻辑——用户是否应该有知情权?
|
||||
5. **全生态**:这个安全SDK被阿里系多款APP共享(淘宝、闲鱼、饿了么等)——10亿+用户是否意识到这一点?
|
||||
|
||||
---
|
||||
|
||||
**作者**: Jiqiang Feng / Innora AI Security Research
|
||||
**联系**: feng@innora.ai
|
||||
**完整报告**: https://innora.ai/zfb/
|
||||
**代码与工具**: https://github.com/sgInnora/alipay-securityguard-analysis
|
||||
**Packet Storm Advisory**: #217089
|
||||
|
||||
*本文基于v10.8.30.8000版本静态分析。厂商可能已通过服务器端热修复修改了部分行为,但客户端代码中的架构和能力仍然存在。*
|
||||
|
||||
**本文永久地址**: https://innora.ai/zfb/privacy-analysis.html
|
||||
**如果本文在任何平台被删除,请访问上述地址。这也是为什么我们需要一个不受单一平台审查的互联网。**
|
||||
Reference in New Issue
Block a user