1.一种基于Android系统的启动过程完整性度量检测方法,其特征在于,包括以下步骤:
从加电开始,可信度量根CRTM引导Bootloader并验证其完整性,Bootloader是系统启动前的引导程序;
采用安全散列算法SHA-1对Bootloader运算得到实际度量值,将得到的实际度量值与RIM证书中的RIM值进行比对,如果对比结果一致,将结果存入平台配置寄存器存储可信根中;
然后CRTM将控制权移交给Bootloader;若比对结果不同,则开机失败,并将检验报告发送给用户;
在Bootloader度量内核的过程中,利用信任度量模型得出对于内核的综合度量值TValue,根据可信度阙值Tm,做出相应的信任决策,可信度阙值Tm用来作为信任决策的评判标准,如果系统内核是可信的,则TValue>Tm,则将结果存入平台配置寄存器存储可信根中,随后将控制权交给系统内核,否则系统无法继续启动,并将检验报告发送给用户,按照上述同样的方法,再对Android操作系统以及第三方应用程序进行度量,最终达到整个Android系统的可信。
2.根据权利要求1所述的一种基于Android系统的启动过程完整性度量检测方法,其特征在于,移动可信模块MTM规范了若干可信根,包括度量可信根RTM、存储可信根RTS、报告可信根RTR,其中RTM作为一个软件模块存入只读ROM中,在系统加电后第一个被执行且不可以被修改,用于MTM作为可信度量和验证的起点,存储可信根RTS和报告可信根RTR作为硬件模块包含于MTM之中,用于完整性存储和报告,MTM中还定义了参考完整性度量值RIM和RIM证书,RIM的值是要对实体的度量摘要,是提前写入信任根的安全存储区,是该实体符合期望的基准值,为每次系统完整性验证提供了参考依据,RIM证书是一个经过数字签名的完整性保护结构,里面包含着RIM的值,数字签名以及相关的一些附加信息。
3.根据权利要求2所述的一种基于Android系统的启动过程完整性度量检测方法,其特征在于,存储可信根RTS由可信平台度量配置寄存器PCR构成,PCR为160比特的存储位置,寄存器个数最少为16个,都存储在移动可信模块之中,它允许存储无限数量的度量值,还保持着度量的顺序,PCR保存着所有当前已经产生的度量值SHA-1的累积哈希值,160位的累积HASH值表示所有被度量过的组件完整性的状态。
4.根据权利要求1~3任一项所述的一种基于Android系统的启动过程完整性度量检测方法,其特征在于,信任度量模型表示为{V,E},其中V表示节点集合,E表示边集合,节点集合V为有限集合{rt,T},rt表示根目标,即rt表示为{TValue,TCount},TValue表示对各子目标度量完成后得到的综合度量值,TCount表示子目标的个数,TCount取值为{0…m},当TCount=0,即为需要度量的最小目标,不可再分,目标集合T={t1,t2,…tn},t={Name,Type,TValue,TCount},Name表示目标的名称,Type表示目标类型,边集合E为组合关系,边集合E代表权重值,权值的取值范围[0,1],且满足归一条件。
5.根据权利要求4所述的一种基于Android系统的启动过程完整性度量检测方法,其特征在于,所述步骤1中度量具体如下:
在Bootloader运行的过程中,Bootloader将系统内核映像ZImage和根文件系统映像Ramdisk.img从flash读到ARM中,当前控制权在Bootloader,对内核进行度量:将需要度量的系统内核设置为根目标rt,Android源码编译完成后产生ZImage、System.img、Ramdisk.img、Userdata.img、Recovery.img镜像,上述镜像包含Android启动与运行所需的文件与相关库,因而,对系统内核进行度量,即是对产生的所有镜像进行度量,在度量系统内核的过程中,将System.img、Ramdisk.img、ZImage、Recovery.img、Userdata.img镜像作为根目标的子目标;
不同镜像的重要程度以及受到入侵的可能性各不相同,因而对不同镜像应赋予不同的权值,ZImage是内核映像,System.img为系统镜像,用于存储Android系统的重要文件,包括包和库文件,内存磁盘文件Ramdisk.img存储Linux内核启动时所要装载的文件,Recovery.img镜像只用于刷机,Bootloader根据用户选择进入相应模式,不同模式均包含ZImage和Ramdisk.img文件,Userdata.img是用户数据镜像,存储和用户相关的数据,确定Android设备内存的大小;
根据上述各镜像重要程度以及面临风险的程度,设ZImage分配的权值为w1,设System.img分配的权值为w2,设Ramdisk.img分配的权值为w3,设Recovery.img分配的权值为w4,设Userdata.img分配的权值为w5,则对应权值的关系应为:w1+w2+w3+w4+w5=1;
w1>w2>w3>w4>w5;
所述内核镜像ZImage包含的子文件均为系统核心文件,因而在度量时将ZImage镜像整体度量;
所述System.img镜像包含如下子目录文件:app、bin、etc、fonts、framework、lib、media、priv-app、tts、usr以及vendor,度量时对这些目录的权重分配进行分析:各目录的权值分配顺序为:
framework>priv-app>app>xbin=bin=lib>etc>fonts=tts=media=user=vendorRamdisk.img中包含一些很重要的配置文件和内核启动完后加载的第一个进程init,init会分别解析init.rc和init.goldfish.rc配置文件初始化并装载系统库、程序直到开机完成,init进程还负责创建系统中包括Zygote进程在内的几个子进程,Zygote进程是所有JAVA进程的父进程,init动作执行分为四个时间段:early-init、init、early-boot、boot,根据配置文件在开机启动过程中被解析的顺序分配其权重值大小,分配的顺序为:init.rc>init.goldfish.rc>ueventd.rc>init.environ.rc>init.usb.rc>init.trace.rc因为Recovery.img由ZImage和Ramdisk.img构成,ZImage部分和正常启动的内核镜像是相同的,因此只需度量其自身的Ramdisk.img镜像即可,度量权重分配和上述一致,对于Userdata.img,只需度量与用户应用程序无关的nativebenchmark文件作为Userdata.img的度量值;
分配各个镜像对应的子目录的权重后,对一级子目录进行分别度量,度量结果用ei表示,其中i表示一级子目录的个数,若子目录度量结果与参考性完整度量值相同,则对应子目录的度量结果为1,否则结果为0,将子目录对应的权重表示为ai,其中i表示一级子目录的个数,则综合度量值TValue:TValue=∑ei*ai
对于二级目录的情况,采用类似上述描述的办法进行度量。