可信计算笔记(1)

术语:

Measured Launched Environment (MLE)

Safer Mode Extensions (SMX)

Intel® Trusted Execution Technology (Intel ® TXT)

 

 

1.假设:

使用TCG提供的服务和保护措施来(1)使得挑战方能够将信任建立在认证系统(度量环境)的平台配置中(2)能够向挑战者确保经过度量环境(measurement environment)编辑的度量列表(measurement list)没有被篡改。

假定TPM硬件按照TPM规范正常运行,而且TPM被正确的嵌入在平台上,可以保证对BIOS、引导加载程序(bootloader)和其余系统部件正确地被度量。

假定代码度量能够充分的描述其行为,因此,self-changing代码能够被评估,因为代码改变自身的能力会在度量过程中体现出来,而且可以在验证中被考虑。认为内核代码只能通过加载/卸载模块来改变。基于恶意DMA传输的重写核心(kernel)代码的方法没有强调,然而,DMA上的代码要被度量,因此需要进行评估。

假定,挑战方持有一个有效、且可信的证书,该证书被绑定到认证(attessting)系统的TPMRSA什么密钥AIK pub,挑战方将使用AIK pub来验证引用(quoted)的认证系统TPM中的寄存器内容,该操作运行在使用这些寄存器来确认度量列表之前。

假定对度量数据没有任何机密性的要求。

对于系统完整性度量结果的解释需要依赖于挑战者的运行时程序(run-time),因为确认结果必须被安全的计算(compute)、解释(interprete)和发生作用(acted upon)。假定挑战者能够安全可靠地决定哪个度量值可以被信任,那么就可以通过将这些度量值和可信度量结果进行比较,或者通过将该决定权给可信第三方,由可信方根据通用的策略(比如通用评估准则)来签名(sign)该可信度量结果。

2.完整性度量系统架构的设计

完整性度量系统架构由以下三个主要部件构成:

1)被认证系统的度量策略:用来决定运行时环境中的哪些部件需要度量、什么时候度量以及怎样维护度量结果。

2)完整性挑战策略:该策略允许授权的挑战者检索计算平台上的度量列表,验证度量列表的新鲜性和完整性。

3)完整性确认策略:确认度量列表是完整的、没有被篡改和新鲜的,而且确认所有的运行时组件度量列表描述可信赖的代码和配置文件。

下图描述了这些策略是如何实现远程认证的:

1 基于TPM的完整性度量

度量过程是由所谓的度量代理发起的,该度量代理引起对一个文件的度量,a)并存储度量结果到系统内核中的一个有序列表中, b)向TPM报告对于度量列表的扩展操作。

此时,完整性挑战机制就允许远程挑战者来请求度量列表,同时包括经TPM签名的度量列表(图1中的步骤1)。当收到该挑战时,认证系统首先从TPM取回(retrieves)签名后的集合(图1中的23步),然后从内核中取回度量列表(图1中的步骤4)。然后将两者都返回认证方(图1中的步骤5)。最后,认证方就可以验证消息的有效性,并且推理认证系统运行时完整性的可信程度(图1中的步骤6)。

3.度量策略

当一个新的可执行文件被加载后,该可执行文件能够度量其它可执行的内容以及敏感数据文件时,度量策略就形成了度量基准。Idea是:BIOS和引导加载程序度量初始化内核代码,然后使得内核度量对于其自身的改变(比如,模块的载入)并且创建用户级进程。内核对用户级进程使用相同的方法。用户级进程用来度量载入到processes中的可执行代码(比如动态装入程序loader和通过mmap载入的httpd)。然后,该代码就可以度量后续安全敏感的输入(比如配置文件或者被httpd度量的脚本代码)。挑战者的信任就依赖于其对被度量代码对安全敏感输入度量的信任上,保护其自身不会收到没有被度量的输入,而且保护系统启动过程中需要依赖的数据的安全性。操作系统可以通过强制性的访问控制策略来限制恶意输入或者没有经过度量的输入,保护数据不被修改,从而对应用程序提供更进一步的保护措施。

整个度量的过程为:使用SHA1哈希文件的整个内容,产生160bit的哈希值,因为其单向性,所以可以用来唯一的标识该文件的内容。不同的文件类型、版本和扩展部分可以使用其独特的fingerprints来进行标识

每一个哈希值都被记录在一个度量列表中,该度量列表显示了认证系统的完整性历史。不允许对该度量列表的修改,以抵制攻击者隐藏完整性相关的行为,但是实际中可能存在对度量列表的修改,为了使得挑战者能够感知到该事件(比如阻止一个已经被破坏的系统的欺骗),引入了TPM

TPM提供了一系列受保护的数据寄存器——平台配置寄存器,该寄存器中的内容只能被两个函数进行修改第一个functionrebooting平台,该过程清除所有的PCRs中的值为0;第二个functionTPM_extend函数,该函数执行的操作是:

假设TPM按照TCG规范的方式运行,而且不存在直接的物理攻击,所以系统就没有办法来改变PCR寄存器的值。

任何执行的度量在被度量组件在影响和潜在的毁坏系统之前,都需要被集合到TPMPCR中(也就是通过TPM_extend操作来执行)。所以,任何被度量的软件在获得直接的控制权之前(可执行程序)或者间接控制权(系统配置的静态数据文件)之前都会被记录。比如,如果i执行了对m1mi的度量,那么在已经选择的PCR中收集的信息就包括SHA1(…SHA1(SHA1(0||m1)m2)…||mi)。所以,TPM的受保护的存储就可以阻止对于设备或系统软件的修改。而且使用SHA1的单向函数性可以阻止恶意系统通过调整系统中PCR的值来伪造一个指定的系统。一旦一个恶意组件获得了控制权,那么对认证方隐藏该组建的存在及fingerprint就太晚了。

因此,尽管被毁坏的系统可以操作度量列表,但是该操作可以通过重新计算aggregate列表并和安全存储在TPM中的aggregate进行比较来检测到(怎样计算??)。

3完整性挑战策略

完整性挑战协议描述挑战方是如何安全的从验证系统(attesting system)中恢复度量值和有效信息的。恢复认证信息时,该协议必须保护不受以下攻击的危害:

1)重放攻击:一个恶意的认证系统重放认证信息;

2)篡改:当度量列表及TPM aggregate传送给挑战方时,恶意的认证系统或者中间人攻击者可能会篡改度量列表及TPM aggregate

3)假冒(masquerading):一个恶意的认证系统或者中间人可以使用另一个系统或度量列表或TPM aggregate来替换原来的度量列表和TPM aggregate。(假设使用策略在一个安全传输过程中都已经被用到,从而可以保证对真实性和机密性的需求——比如使用经授权和保护的SSL安全机制)。

该协议的具体过程如下图3所示:

 

3 完整性挑战协议

其中C表示挑战方,AS表示认证系统。具体过程是:

1)挑战方C首先创建一个不可预期的160bit随机数nonce

2)在对AS发送挑战请求消息时,将该nonce发送给AS

3aAS调用使用SRK(只有TPM知道该密钥)进行加密的一个AIK密钥到TPM中。(至于2048bitAIK是怎样安全地在TPM中创建、相应的AIK公钥是如何安全的被可信第三方认证的都在TPM主规范中进行了描述)

3bAS请求TPM芯片产生Quote,该Quote为:

Quote=sig{PCRnonce}AIKpriv

3cAS取回所有的度量结果的有序列表ML(在该例子中,是从kernel中取回的)

4AS将取回的所有ML、签名的aggregateQuote中的nonce发送挑战者C

5aC首先取回一个可信证书certAIKpub)。该AIK证书将QUOTE中的验证密钥AIKpub和特定的系统和状态绑定在了一起,其相应的私钥只有TPM直到,而且从来不会在未保护的情况下输出,因此挑战方可以通过将AS的唯一标识和通过certAIKpub)所给的标识进行比较来发现是否存在假冒。但是该证书需要被验证是有效的,比如通过验证可信发布方(trusted issuing party)的证书撤销列表来确认。

5bC验证签名是否有效

5cC验证QUOTE的新鲜性,从而验证PCR(也就是度量aggregate)的新鲜性。如果nonces match as long步骤2中的nonce是唯一且不可预期的,那么就可以说新鲜性得到了保证。一旦AS收到两次收到同样的一个nonce或者AS可以预期该nonce

猜你喜欢

转载自blog.csdn.net/cicisensy/article/details/3914534