介绍
这是一篇来自ICSE的论文《Large-scale Security Measurements on the Android Firmware Ecosystem》
专有名词介绍
ROM(Read Only Memory):手机存储系统的存储器。只能读,不能快速改写。可以简单认为是用来存储操作系统的。
pre-installed apps:安装在安全固件中的应用程序,系统应用在/system/app和/system/privapp文件夹中;第三方软件下载在/data/app文件中。
CPE:common platform enumeration,通用平台枚举项,它是对IT产品的统一命名规范,包括系统、平台和软件包等。
内容格式:
cpe:/<part>:<vendor>:<product>:<version>:<update>:<edition>:<language>
参数 | 含义 |
---|
a | 应用程序 | h | 硬件平台 | o | 操作系统 | vendor | 供应商 | product | 产品名称 | version | 版本号 | update | 更新包 | edition | 版本 | language | 语言项 |
NVD:National Vulnerability Database,国家漏洞数据库
TEE:Trusted Execution Environment,可信执行环境,与其相对应的是REE(Rich Execution Environment),一般也称TEE和REE为Security World和Normal World。Android都跑在Normal World中,但一些安全性较高行为,比如指纹比对,私钥签名的动作,都在Security World中。
指纹识别:常用来作为识别设备的标志符。如ROM的指纹识别是用来作为ROM映像的标识符。
Project Treble:谷歌在Android8之后设计的框架,Treble 提供了一个稳定的新供应商接口,供设备制造商访问 Android 代码中特定于硬件的部分,这样一来,设备制造商只需更新 Android 操作系统框架,即可跳过芯片制造商直接提供新的 Android 版本.
安卓固件(firmware)
介绍
安卓固件是提供低级别的系统控制并使硬件正常工作的系统软件,固件通常存储在特定类型的内存中,成为闪存ROM。因此也可以称固件为ROM映像。固件包括引导加载程序,Linux内核,安卓运行时框架,无线电固件和各种预装程序。固件通常以标准的压缩格式发布。
ROM文件结构
ROM文件脱壳后的结构:boot.img, vendor.img, recovery.img, system.img
- boot.img:包括在文件系统加载之前的内核映像和ramdisk映像,用来加载设备。
- system.img:属于文件系统映像,提供二进制文件和配置文件来启动Android操作系统,它可以是Yaffs2格式或者是sparse映像格式。
工具设计
思想方法
- 使用爬虫爬取ROM映像和目标CVE数据
- 使用分析工具进行大规模测量,分析工具包括爬虫模块,ROM解析器,补丁分析器和应用分析器。
数据集来源及工具原理
爬虫器
1. ROM映像数据集来源: (1)官方网站 (2)通过官方支持的渠道,在合法的下载网站通过修改关键字寻找下载地址。 (3)开源的存储库Android Dumps
2. CEV数据: (1)CVE官网中获取CVE ID,揭露时间和描述。 (2)从NVD中获得漏洞应用名字和版本的CPE信息,CPE信息的用途是将CPE信息与从ROM解析器收集的预装应用程序(如应用程序名称和版本)的元数据进行匹配,以过滤掉预装的应用程序相关的应用程序。
ROM解析器
ROM解析器用来输出脱壳的映像文件界相应的固件元数据,涉及两个关键步骤:ROM脱壳和数据提取。
1. ROM脱壳: (1)对于加密的ROM映像,使用动态的ADB调试,从运行的系统中获取解密秘钥。 (2)对于标准格式未压缩的ROM映像,使用官方工具simg2img获得。 (3)对于使用私有的格式或压缩格式的ROM映像,首先根据文件扩展名和格式特性来识别映像文件的格式,然后使用相应的公共解析工具脱壳。
2. 数据提取: 从ROM映像的属性文件中提出元数据用于子过程分析,包括指纹识别(识别ROM映像),安卓版本,构建时间,安全补丁等级(最新安全补丁更新时间),型号和供应商数据。
内部文件包括:预安装的应用程序包和可执行二进制文件。对于内部文件使用<FileMD5,vendor,ROM fingerprint>来标识文件来源。
补丁分析器
用于对ROM样本上安全补丁的完整性和有效性验证。
通过构建时间和安全补丁级别来检查固件是否及时修复AOSP安全补丁,用构架时间-补丁时间=推迟时间,一个月以内为正常延迟。
如:ROM映像中构建时间是2019-09-13,安全补丁时间是2019-08-05,推迟时间为39天=1.3月,并进行四舍五入,为1个月。
应用分析器
用于提取预安装应用程序的识别特征和漏洞特征。分为CVE匹配模块和风险检测模块。
1. CVE匹配模块: 1)提取预安装应用的识别特征,包括包名,版本,签名和文件MD5。
2)根据识别特征对应用程序和CVE进行匹配,检查相关代码和错误配置属性来确认是否存在已知漏洞
3)结合元组:<File MD5, vendor, ROM fingerprint>去建立每个CVE的影响元组,<CVE Num, package name, version, signature, File MD5, vendor, ROM fingerprint>
4)通过比较CVE揭露的时间和ROM映像建立的时间,可以得到没有修复的CVE的映像
2. 风险检测模块: 对预安装风险的测量,由于属性配置错误和密码误用比例最大,因此选用这两部分进行测量。
1. 属性配置错误 提取的安全特征存储在 AndroidManifest.xml文件中。
(1)exported component:如果一个Activity或Severice的属性的Public并涉及重要的功能
(2)可调式属性:debuggable的属性设置为true
(3)网络安全配置属性:如果不设置网络安全属性,会受到中间人攻击
(4)允许备份功能:如果允许备份属性功能设置为true,攻击者就能拿到应用的备份数据
(5)sharedUserID:如果设置为android.uid.system属性并有可以和其他第三方应用交互的exported component,攻击者就可以在不需要root用户的情况下,通过第三方软件操作操作系统特权权限
2. 密码误用
测量
测量主要针对四个方面:安卓手机供应商是否及时按AOSP安全补丁进行更新,供应商的补丁声明的可靠性,预下载应用是否包含未修复的CVE,非脆弱的预下载应用是否安全。
对更新延迟的测量
对更新延迟的测量指安卓手机供应商是否及时按AOSP安全补丁进行更新。 测量思路: 总体结果 --> Top 10的 ROM相关数据 --> 从一个具体的供应商出发分析补丁推迟原因 --> 测量合作与非合作、支持和非支持设备之间的补丁延迟情况 --> 对同一供应商的不同型号纵向变化测量。
对补丁缺失的测量
测量思路: 总体结果 --> Top 10的 ROM相关数据 --> 从一个具体的供应商出发分析补丁推迟原因 --> 测量合作与非合作、支持和非支持设备之间的补丁延迟情况 --> 对同一供应商的不同型号纵向变化测量。
预下载应用是否包含未修复的CVE
测量思路: 总体结果 --> 分析原因 --> 案例分析 --> 影响范围
非脆弱的预下载应用是否安全
测量思路: 总结结果 --> 分析出现结果的原因 --> 潜在漏洞来源(根据签名识别)–> 可利用性验证 --> 例子
|