前言: 2004年,IBM在13th USENIXSecurity Symposium上发表文章《Design and Implementation of a TCG-based Integrity MeasurementArchitecture》,第一次提出了IMA架构。该架构通过在内核中进行patch,实现当应用程序运行、动态链接库加载、内核模块加载时,将用到的代码和关键数据(如配置文件和结构化数据)做一次度量,将度量结果扩展到PCR10,并创建与维护一个度量列表ML。当挑战者发起挑战时,将度量列表与TPM签名的PCR度量值发送给挑战者,以此来判断平台是否可信。
第1章 完整性度量介绍
可信计算的实现方案依赖于TPM。TPM拥有三个可信根:
1)可信度量根:负责对平台进行度量;
2)可信存储根:负责密钥等的存储;
3)可信报告根:将度量的结果与日志反馈给挑战者,挑战者在收到度量结果与度量日志后可进行重新计算并与预期做对比,进而验证平台是否可信。
可信计算方案的一个重要环节就是对系统平台进行完整性度量,从系统启动开始,对BIOS、grub、kernel以及操作系统启动后的应用程序等均需进行度量。TPM中使用PCR(Platform Configure Register)对度量结果进行记录。
PCR主要操作有两种:重置与扩展。在系统上电时对24个PCR(TPM1.2版本)进行清零,此后每次度量结果的存储均依靠扩展运算SHA1(PCR|| new measurement)实现,同时将度量的文件名称、路径以及度量结果存入度量日志/列表(Measurement Log/List)这样从理论上来说,PCR能够度量无限次,但会导致ML过大。
第2章 IMA的三个机制
2.1 Measurement Mechanism
IMA的度量机制依靠TPM的PCR(重置与扩展)完成,每个PCR有160bit,IMA采用的是PCR10,其运算如下:
SHA1(..SHA1(SHA1(0|| m1)|| m2)..|| mi)
TPM的PCR寄存器只支持重置与扩展,因此恶意代码无法进行“任意”的篡改。而在执行恶意操作前,系统已经将恶意代码的度量值写入到PCR中,因此恶意代码是无法绕过度量机制的。
2.2 Integrity Challenge Mechanism
2.2.1 Integrity Challenge Protocol(文中提出的)
完整性挑战协议:
用于挑战者与平台之间传输数据,最主要的数据就是ML和TPM Aggregate,该协议通过TPM和密码学理论保证传输的数据是机密的、完整的。该协议号称能够阻止:1)重放攻击;2)篡改攻击;3)假面攻击。
目前该部分现在通常称为“远程证实”。
远程证实包括两种方式:1)隐私签证机构PCA;2)直接匿名认证DAA。比较让人不太理解的是,文章中并没有提到PCA或者DAA,也许是由于文章行文时间较早,还没有考虑相关问题。
完整性挑战协议时序:(C为挑战者,AS:为证实服务端)
C :create non-predictable 160bit nonce 2. C → AS : ChReq(nonce) 3a. AS : load protected AIKpriv into TPM 3b. AS : retrieve Quote = sig{P CR, nonce}AIKpriv 3c. AS : retrieve Measurement List ML 4. AS → C: ChRes(Quote, ML) 5a. C : determine trusted cert(AIKpub) 5b. C : validate sig{P CR, nonce}AIKpriv 5c. C : validate nonce and ML using P CR
2.2.2 远程证实
在IMA能够对应用程序运行时加载的模块、动态链接库及程序本身进行度量,以及TPM能够实现可信启动(将平台上电到操作系统启动进行度量并写入度量日志)的条件下,挑战者由远程挑战平台是否可信的过程称为远程证实。TCG对远程证实提供两种方案,一种借助隐私签证机构PCA(Privacy CA),通过PCA对TPM身份验证、颁发证书AIK,并且对网内的TPM密钥管理分发、注销等等,然而,由于TCG组织假定PCA为完全可信的第三方,在PCA与平台串通后,挑战者无法知道挑战的平台是否已经被篡改,PCA与挑战者串通后,远程证实也失去存在的意义。另一种做法称为直接匿名认证(DAA),根据零知识证明技术进行TPM身份的认证。
远程证实流程:
1)平台向PCA申请AIK证书
2)PCA颁发AIK证书
3)平台响应挑战者
2.3 Integrity Validation Mechanism
挑战者通过完整性挑战协议获得了平台的TPM Aggregate和ML,可以实施很多策略来验证平台的信息是否可信。如通过与可信的度量值进行比较,就是一种最简单的验证策略。
更复杂的验证策略包括:多测量值评估等。
新的程序版本、未知程序、修改后的恶意程序都会产生未知指纹,位置指纹会被挑战者发现,从而判断该平台不可信。
第3章 原型实现
1)实验环境:
在Redhat 9.0基础上基于LSM实现,内核版本为2.6.5。
2)时间效率:
采用度量缓存技术,缓存命中率为99.9%,因此总的开销非常小。
3)防绕过安全措施:
1)加入检查点来防止文件系统的卸载后篡改;
2)度量失败会直接使TPMAggregate无效化;
3)利用度量计数器来防止ToC-ToU攻击;
4)利用busy lock防止sysfs文件系统被卸载;
5)加入检查点来防止篡改dirtyflag。