"其为开源,故其安。"
吾常闻此言。其理简矣:若代码公之于众,必有人审之。其弊可察。众可匡之.
吾决试此假设于实据。
余取F-Droid所载十款流行开源安卓应用——此等应用,日日为万民所使——,以吾之静态分析安全扫描器试之。复亲手动核验每项发现,与反编译之APK代码相印证。
其果:十应用中,六十处确证之漏洞。
应用
吾有意择诸类知名且勤修之应用也。
- AntennaPod(天线Pod)播客管理器
- 比特币钱包— 数字货币之钱袋
- DAVx5— 日历/联系人同步
- GNUCash 安卓— 财务会计
- K-9 Mail(K-9邮件) — 邮件客户端
- KeePassDX — 密码管理器
- NewPipe — YouTube 前端
- Nextcloud — 云存储客户端
- Signal — 加密通讯软件
- VLC — 媒体播放器
此非废弃之旁支,乃成熟流行之应用,有活跃开发者之社群。其中或有处理极敏感之数据——密码、加密货币、私信、财务记录等。
方法论
于每应用吾:
- 下载APK自F-Droid
- 运行吾之静态分析扫描器(自动化SAST覆盖清单分析、smali代码分析、原生库检验、污染分析及加密校验)
- 反编译APK以apktool取smali码、manifest及资源
- 亲验诸得逆观实解之码——察所标之码,果为可乘之隙,抑或虚惊耳。
此最后之步,甚为紧要。自动化扫描器能生众多候选。无人工核验,则不知何为真实,何为虚妄。
吾所发现:五常之弱
遍察十应用,手核其得,显明之迹昭然若揭。谬误屡现,循环往复——无论应用之盛衰,所涉数据之敏钝,皆然。
1. 无权守之组件外泄
见于十之九应用
安卓之组件(活动、服务、接收者、内容提供者)宣示为 exported="true" 而无需任何权限与之交互。是故,凡同器所装之应用,皆可发此组件、授之数据,或自之受数据。
何以致危:于财货之应用,此或使恶应用得启“转账”之屏。于密码之管理,此或触数据库解锁之流。于邮件之客户端,此或启草拟之屏,预填数据。
其解法直截——或为无需外通之组件设exported="false",或加android:permission 限之,使惟其人得与之交焉。
2. 文件提供者路径过泛
见于十之四应用
安卓之FileProvider,旨在安全共享文件于诸应用间。然若提供者之路径配置含<root-path path="." />,则<external-path path="." />,此实授权于全文件系统或悉外部存储,以内容URI达之。
吾尝见应用,其FileProvider之配置,可通于/storage/(悉外部存储),全应用内目录,及至极者,全设备文件系统。
虽此等提供者多不外传,然其用之。grantUriPermissions="true" — 若有导出活动转发URI权限(此乃安卓常用之模式),则广路径可被利用.
3. 明文传输许可 + 用户CA信任
见于:十之六应用
多应用在其网络安全配置中设有cleartextTrafficPermitted="true",允无加密之HTTP连接。数者亦明确信任用户所装CA证书,<certificates src="user" />.
凡应用连及自设之服务器(如CalDAV、电邮、云存储),此中或有其意——用户须连其自设之服务器,其或用HTTP,或用自签之证书。然此配置,非独适用于自设之端点,乃通用于全局。凡应用所为之连——包括API调用、分析统计、更新查验——皆默许可被截取。
尤令人忧者一事:一媒体播放器以明文HTTP下载更新文件。同网之中,中间人攻击者可诈作合法更新,供一恶毒APK。
4. 密码实现之弱
见于十之三者:
其危其古,不一而足:
- SSL验证全然禁绝 — 有一应用,其法可直纳诸证,不验不拒。乃金融之应用,涉真金。
- ECB密文模式 — 一播放器之遥控功能,用AES于ECB模式,同文块生同密块。此乃典籍中密术之谬误。
-
java.util.Random于密术之境 — 非也SecureRandom,故其出可预。 - 信之先验,不固其本 — 一旦受其服务器之证,则永信不疑,纵其证易(此或示中间人攻击之兆)。
5. 亡防于覆面之攻
见于:十之八者
几无应用设之filterTouchesWhenObscured="true" 作用于敏感界面元素。此乃恶毒之应用,持覆盖权限者,可于应用之上绘制无形之层,窃取用户点击——或诱使用户误触非所愿之按钮。
此尤令人忧者:
- 密码管理器(窃取主密码输入)
- 加密货币钱包(确认交易)
- 证书信任对话框(接受恶意证书)
- OAuth登录界面(授权访问)
此意何为
开源非必即安。其意乃码之可用供审阅——然非也已矣已评。此乃流行善治之应用,有活跃社群,犹存安全之患,系统之评可察之。
此非以贬开发者。开源之持者,多志愿为之,功绩非凡。其旨在于,安全需专精专注。此乃建功能之异能,需专器专长以助之。
若汝之安卓应用掌管机要,如财货之讯、凭信之密、私语之属、康健之籍,则当受安全之察。非仅自动化扫描,数百候选即罢,实为审慎评估,每得皆核实,并明其境。
要义
自动扫描器寻得候选,未确认其漏洞。 无手验之,莫辨虚实。
同五弊之态,遍见于众应用。 导出组件,广文件供者,明文交通,弱密钥,缺叠层防护。此皆易得之果,任一安全检视当察之。
事境攸关,甚巨。 媒体播放器流式传输公共视频之明文交通,与银行应用中明文交通之风险不同。无背景之安全发现,不过报告一语耳。
开源使安全审查得以实现,非可替代之。 代码公开乃详尽分析之先决,非确保分析已行之保证。
吾乃专攻安卓应用安全之研习者。若欲论及汝应用之安危,不妨致信于yehor.mamaiev@gmail.com。











