摘要:
- 发现:大量应用不使用安卓提供的可信环境(TEE),只有极少数正确使用了最安全的配置(SE安全元件,or StrongBox)
- 原因:使用TEE对大部分加密进行硬件存储是可行的,但是使用安全元件会有严重性能损失。
前置知识(Android可信环境分类):
- software based,最不安全,直接dump内存就能提取密钥
- TEE,稍微安全一些,使用keystore api访问。仍然存在安全隐患。
- SE,安全元件,独立的CPU内存存储,放篡改特性。抵御更强的攻击,更安全,但是性能损失大,不是默认配置。
研究方法:
- 数据集:AndroiZoo选择了在Google Play上架,下载数量超过1w次的约50万个软件
- 数据安全标签:爬取了这些应用在Play商店上由开发者自行报告的“数据安全”信息,以识别哪些应用承认自己收集了敏感用户数据。
- 开发了一个叫做Keydroid的工具,通过关键字筛选出使用了Keystore的应用,后使用soot框架生成调用图,深入分析api使用方法:自己写的/第三方库
软件统计发现:
- 使用TEE,SE的软件很少
- 大多使用第三方库,可能供应链投毒等(也许开发者不知道使用了这些功能)
- 密钥认证(指纹,PIN)较少
- 为了兼容第三方库,禁用IND-CPA策略
密钥存储性能:
- TEE对于中小型数据(1MB)的性能开销忽略不计
- Strongbox:1MB 37s,(Pixel 8),
- 硬件生成rsa开销大,Strongbox需要9s
Survey(这也是安全科研吗?):
- 处理敏感数据但未使用硬件密钥库的开发者:兼容旧版本设备,性能担忧,项目开发时间早
- 主动禁用Strongbox:没人回复(
局限性:
- 只进行了静态分析,没有动态分析。(当然动态分析50w个成本就很大了)