Trusted Execution Technology (TXT) --- 启动控制策略(LCP)篇
版权声明:本文为博主原创文章,未经博主允许不得转载。http://www.cnblogs.com/tsec/p/8428631.html
在TXT平台中,启动控制策略(Launch Control Policy, LCP)是第一个应用于证明的属主控制策略。在TXT基本原理篇,介绍了LCP的基本概念,本文将主要讲述LCP在做什么工作,LCP的重要性以及会有怎样的影响。
1. LCP工作原理
下图给出了度量启动的时间轴,TBOOT module为平台设置了Measurement Launch,然后调用SENTER指令。
针对OS/VMM做Measured Launch,首先会将Post-Launch(MLE)代码载入一段连续内存中,然后将这段代码的基址和平台属主LCP数据结构的基址写入到一个address table中。此时,就可以调用GETSEC[SENTER]指令,CPU Microcode加载SINIT ACM到CPU internal RAM,通过签名验证之后执行该ACM。SINIT ACM中包含有一个LCP引擎,用于处理启动控制策略。
一个启动控制策略实际由两部分组成:
- NV Policy Data:存储在TPM NVRAM,以防被篡改,类似于策略索引,包含有Policy Data Structure的度量值。
- Policy Data Structure:大量且可变的策略信息,可理解为已知良好的度量值列表。
既然NV Policy Data中包含有Policy data structure的hash值,那么SINIT ACM可以通过度量存储在disk上的policy data structure,并将度量值与存储在NV policy data中的hash值相比较,来验证policy data structure的完整性。如此,任何尝试或者替换属主policy的恶意操作都将被SINIT ACM发现,从而导致TXT Reset。TXT Reset意味着平台已经检测到威胁并禁止进一步执行度量启动。只有在平台policy data structure是有效的时候,ACM才会继续处理LCP。
2. LCP的作用
从本质上讲,LCP是否为一个有效的policy,主要取决于OS/VMM是否被允许执行度量启动,当OS/VMM进行Measured Launch初始化时,该policy才会被评估。策略评估包含以下几个部分:
- 由PCONF策略指定哪些平台配置时可信的;
- 由MLE策略执行哪个OS/VMM是可信的;
- 由SINIT策略指定哪个ACM版本时可信的;
- 覆盖平台供应商设置的平台默认策略。
启动控制策略的流程可参考下图。
一个LCP可能包含多达8个Policy Data Structure,每个Policy Data Structure又可以包含0个或1个PCONF元素和0或1个MLE元素。
2.1 指定平台配置(PCONF元素)
LCP允许平台属主指定可信的平台配置,即创建一个PCRInfo列表,每个PCRInfo结构描述了一个可以接受的平台配置。在TXT系列的Measurement篇中,讲述了PCR0~PCR7的度量过程,这8个PCR可以被认为时度量平台配置。PCRInfo实际是一个Hash值,指定了由哪些PCR(0~7)来创建一个PCRInfo结构。例如,平台属主可以指定PCR0、PCR2、PCR4、PCR5来产生一个hash值,从而创建一个PCRInfo。需要说明的是,PCR0作为可信度量核根(CRTM),必须要被指定。为了创建PCONF元素,平台属主可以利用当前平台的PCR创建相应的PCRInfo,也可以使用其它平台已知良好的PCRInfo,PCONF元素的内容仅仅是PCRInfo的列表。
在Measured Launch时,LCP引擎评估每一个PCONF元素中的PCRInfo。首先,通过从TPM NVRAM中读取指定PCR的当前度量值来生成一个hash值,讲该hash值与PCONF元素中的PCRInfo列表进行比较,若存在一个PCRInfo与之匹配,则判断PCONF策略true,意味着,当前平台满足策略,当前平台配置可信;否则,PCONF策略为false,意味着当前平台不满足LCP策略,从而导致TXT Reset。这里有个例外,若LCP中不存在PCONF元素,意味着不需要评估平台是否可信。
2.2 指定可信OS(MLE元素)
LCP允许平台属主指定哪些OS可以 执行度量启动,且在SENTER指令之后,首先被度量和执行的code被称为Measured Launched Environment(MLE),即度量过的启动环境。对于Intel TXT平台,TBOOT通常被用作MLE code。若MLE code通过LCP,意味着MLE code是可信的,因此,当MLE code被执行后,首先启用和执行所有保护机制,创造出一个安全的启动环境。然后,MLE code再去加载、度量、验证内核code或其它driver程序。平台属主会对内核和其它模块进行签名,并将验证签名的公钥放到MLE code中,由于MLE通过了LCP,MLE code中的公钥是可信的,若签名验证通过,则执行内核。
因此,能否建立起MLE环境,能否安全启动OS,是通过MLE code的度量值来确定的。从前文中,我们知道Policy data structure会包含有0或1个MLE元素,其中是一个已知良好的MLE度量值的列表。在度量启动时,LCP引擎评估MLE策略,比较实际的MLE度量值和MLE策略中的度量值,若存在匹配,那么MLE元素为true,否则为false,将导致TXT reset。
2.3 指定可信的SINIT ACM
平台属主会通过LCP指定最低版本的SINIT ACM,目的是防止恶意代码使用旧的ACM,并利用其已知的漏洞。目前,Intel有能力做到撤销旧版本的BIOS ACM和SINIT ACM。
3. 总结
TXT平台启动以及LCP流程如下图所示,
Trusted Execution Technology (TXT) --- 启动控制策略(LCP)篇的更多相关文章
- Trusted Execution Technology (TXT) --- 基本原理篇
版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.cnblogs.com/tsec/p/8409600.html 1. Intel TXT 介绍 TXT是Trusted Ex ...
- Trusted Execution Technology (TXT) --- 度量(Measurement)篇
版权声明:本文为博主原创文章,未经博主允许不得转载.http://www.cnblogs.com/tsec/p/8413537.html 0. 导读 TXT基本原理篇介绍了TXT安全度量的基本概念,包 ...
- TEE(Trusted Execution Environment)简介【转】
转自:https://blog.csdn.net/fengbingchun/article/details/78657188 TEE(Trusted Execution Environment),可信 ...
- spring-boot-2.0.3启动源码篇二 - run方法(一)之SpringApplicationRunListener
前言 Springboot启动源码系列还只写了一篇,已经过去一周,又到了每周一更的时间了(是不是很熟悉?),大家有没有很期待了?我会尽量保证启动源码系列每周一更,争取不让大家每周的期望落空.一周之中可 ...
- spring-boot-2.0.3启动源码篇 - 阶段总结
前言 开心一刻 朋友喜欢去按摩,第一次推门进来的是一个学生美眉,感觉还不错:后来经常去,有时是护士,有时是空姐,有时候是教师.昨天晚上推门进去的是一个女警察,长得贼好看,身材也很好,朋友嗷的一声就扑上 ...
- Note: ENDBOX: Scalable Middlebox Functions Using Client-Side Trusted Execution
ENDBOX enable secure networking by client-Side trusted execution. What ENDBOX is a scalable middlebo ...
- spring-boot-2.0.3启动源码篇四 - run方法(三)之createApplicationContext
前言 此系列是针对springboot的启动,旨在于和大家一起来看看springboot启动的过程中到底做了一些什么事.如果大家对springboot的源码有所研究,可以挑些自己感兴趣或者对自己有帮助 ...
- spring-boot-2.0.3启动源码篇三 - run方法(二)之prepareEnvironment
前言 此系列是针对springboot的启动,旨在于和大家一起来看看springboot启动的过程中到底做了一些什么事.如果大家对springboot的源码有所研究,可以挑些自己感兴趣或者对自己有帮助 ...
- spring-boot-2.0.3启动源码篇一 - SpringApplication构造方法
前言 spring-boot-2.0.3应用篇 - shiro集成,实现了spring-boot与shiro的整合,效果大家也看到了,工程确实集成了shiro的认证与授权功能.如果大家能正确搭建起来, ...
随机推荐
- iOS学习——iOS项目Project 和 Targets配置详解
最近开始学习完整iOS项目的开发流程和思路,在实际的项目开发过程中,我们通常需要对项目代码和资料进行版本控制和管理,一般比较常用的SVN或者Github进行代码版本控制和项目管理.我们iOS项目的开发 ...
- set排序(个人模版)
set排序: #include<stdio.h> #include<string.h> #include<iostream> #include<set> ...
- 【Java学习笔记之四】java进制转化
十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...
- Gym 100952I&&2015 HIAST Collegiate Programming Contest I. Mancala【模拟】
I. Mancala time limit per test:3 seconds memory limit per test:256 megabytes input:standard input ou ...
- [51nod1310]Chandrima and XOR
有这样一个小到大排列的无穷序列S:1, 2, 4, 5, 8......,其中任何一个数转为2进制不包括2个连续的1.给出一个长度为N的正整数数组A,A1, A2......An记录的是下标(下标从1 ...
- SPI、I2C、UART(转)
UART与USART(转) UART需要固定的波特率,就是说两位数据的间隔要相等. UART总线是异步串口,一般由波特率产生器(产生的波特率等于传输波特率的16倍).UART接收器.UART发送器组成 ...
- sizeof与strlen的不同
sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型. 该类型保证能容纳实现所建立的最大对象的字节大小. sizeof是算符,strlen是函数. si ...
- 利用nginx 虚拟主机、请求转发实现不同端口web访问
一个服务器上挂一个网站实在是有点浪费:一个服务器上可以放多个网站:可以开启nginx的虚拟主机功能:利用访问的路径或者域名不同访问不同的文件夹:例如: 1.一台服务器上放多个网站使用nginx的配置文 ...
- Effective Java 第三版——25. 将源文件限制为单个顶级类
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Sqoop导入导出的几个例子
Sqoop导入导出的几个例子 http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_importing_data_into_hive no ...