TPM:dTPM(硬件)和fTPM(固件模拟的软件模块)
转:Bitlocker、TPM和系统安全
自从微软在Windows Vista首次引入Bitlocker以来,它已经越来越多的出现在我们的周围。尤其是企业用户,Bitlocker的保护已经变得不可缺少。本文将深入讨论它的原理和如何提高它的安全性。
什么是Bitlocker?
BitLocker 驱动加密是集成在Windows Server 2008和Windows Vista及以后版本中的一个新的安全特性,它通过紧密集成在Windows操作系统中的方案,来帮助降低数据偷窃或丢失导致的泄露,被盗,或不正确地报废计算机硬件所带来的实际威胁。BitLocker 是一种全卷加密技术,如果计算机在所安装操作系统脱机时受损,则该技术可确保存储在此计算机上的数据不会暴露。 它是针对具有兼容的受信任的平台模块 (TPM) 微型芯片和 BIOS 的系统而设计的。 如果存在这些组件,则 BitLocker 将使用它们来增强对数据的保护,并帮助确保早期启动组件的完整性。 此功能通过加密整个卷来帮助防止数据被盗或未经授权查看。
简单来说,BitLocker会将Windows的安装分区或者其他用于保存文件的分区进行加密,并将密钥保存在硬盘之外的地方,并对早期启动组件完整性检查,合并到一起来增强数据保护。
BitLocker主要有两种工作模式:TPM模式和U盘模式,同时为了实现更高程度的安全,我们还可以同时启用这两种模式。本文主要讨论TPM模式。
TPM和Bitlocker
TPM(Trusted Platform Module,可信平台模块)是根据国际行业标准组织可信计算组(TCG,其中包括微软、英特尔和惠普等公司)规范制作的模块,可以是dTPM真实硬件也可以是fTPM等由固件模拟的软件模块。TPM 1.2最早大规模商用,现在TPM2.0也开始广泛使用了。
TPM的主要作用是利用安全的经过验证的加密密钥带来强大的设备安全性。TPM功能的核心是签注密钥,这是在生产过程中内置到TPM硬件的加密密钥。这个签注密钥的私钥部分绝不会出现在TPM外部或暴露给其他组件、软件、程序或个人。另一个关键密钥是存储根密钥,该密钥也存储在TPM内;它被用来保护其他应用程序创建的TPM密钥,使这些密钥只能由TPM通过被称为绑定的过程来解密,TPM也是通过该过程锁定数据到设备。与签注密钥不同,只有当TPM设备第一次被初始化或新用户获得所有权时,存储根密钥才会被创建。
TPM还可以通过平台配置寄存器(PCR)机制来记录系统的状态。这允许TPM进行预启动系统完整性检查,也被称为远程证明,这是一个功能强大的数据保护功能。通过将数据加密密钥存储在TPM中,数据可以有效地受到保护,其中TPM有一系列参考值来检查PCR们的状态。只有系统状态与存储的PCR值匹配,这些密钥才会启封和使用,并且,只有在满足特定硬件和软件条件时,才能够访问系统。
TPM是许多安全应用的核心,我们今后会单独介绍它。本文只要知道Bitlocker最关心的密钥存储和PCR即可。
Bitlocker原理
我们仅仅介绍使用了TPM的Bitlocker。这就要求计算机安装了TPM 1.2以上硬件(dTPM或者fTPM),其他没有任何要求。整个解密的流程图如下:
(图片来源MSDN)
图解顺序的步骤如下:
1. BIOS 启动并初始化TPM。并measure firmware部分敏感内容和启动分区以及bootloader,将结果放入PCR组。
2.如果 PCR 值与期望值相匹配,则 TPM 将使用存储根密钥 (SRK) 对卷主密钥 (VMK) 进行解密。
3. 从卷中读取加密 FVEK,并使用解密 VMK 对其进行解密。
4. 访问磁盘扇区时,使用 FVEK 进行解密。
5. 为应用程序和过程提供解密数据。
其中SRK存储在TPM芯片中,它是整个过程的信任根。BitLocker通过检测PCR组,对主启动记录 (MBR) 代码、NTFS 启动扇区、NTFS 启动块、启动管理器和其他重要组件进行检查,如果被更改,则第2步将出错,要求输入recovery PIN值。
Bitlocker作用以及局限
如前文所说,BitLocker会将Windows的安装分区或者其他用于保存文件的分区进行加密,并将密钥保存在硬盘之外的地方,并对早期启动组件完整性检查,合并到一起来增强数据保护。
1. Windows安装盘和其他资料盘的加密,保护了脱机攻击。即把磁盘拆下来到别的机器上读出结果来。这样就算你的笔记本硬盘丢失了,里面的重要信息别人也拿不走。注意这里bootloader所在的UEFI启动分区并没有加密。
2. 启动组件完整性检查,保证了如果启动组件被更改,就拒绝启动,防止被植入恶意代码,造成整个链条的崩溃。
但是启用TPM后,因为SRK存储在TPM中,而不是像USB方式那样随时带走。这样虽然便利,不需要开机输入密码,但是硬件整体丢失后也为窃贼造成了方便。所以微软推荐采取TPM加PIN码的方式,可以大大降低数据泄漏的风险。
安全性
Bitlocker采用AES128或者256来加密数据,十分安全。固件通过measure启动中关键组件并存入PCR中保证了启动路径不被攻击,听起来现在已经十分安全了,但是很久之前就被发现有一个漏洞:“邪恶女服务员攻击”。
它所描述的就是这样一种情形:当计算机主人离开旅馆客房,而计算机无人看守时,一个邪恶的女服务生或任何其他可以进入这个房间的人,就可以随意鼓捣这台计算机了。因为在系统引导期间,BitLocker需要与用户交互来获得一个口令:
而这个阶段在Bootloader,而bootloader所在的UEFI启动分区并没有加密。这就造成了可乘之机:
1. 该邪恶的女服务员将恶意软件放入U盘,开机直接进入shell,将恶意软件copy到UEFI分区并修改启动路径。
2. 主人回家开机。
3. 恶意软件模仿Bitlocker弹出需要密码的界面。
4. 主人不明就里,输入密码。
5. 恶意软件截获秘密,发送到特定邮箱。它清空自己痕迹并重新启动。
6. 由于恶意软件痕迹被完全清除,PCR正常,正牌Bitlocker要求密码,主人又看到密码界面,以为输错了,又输一遍,并顺利进入系统,一切正常。
7. 第二天,邪恶服务员乘主人不在,拿着密码开机并copy关键数据到U盘。
8. 邪恶女服务员消失。一个巨大的阴谋正在酝酿。。。。。。。OMG!!
有什么应对的办法吗?其实你一定还记得我们介绍过的UEFI安全启动吧(UEFI安全启动),它会验证Bootloader的签名,它和Bitlocker配合起来可以防止这个风险。
其他
有一些杂项需要说明一下:
1. Bitlocker不一定需要TPM. UEFI安全启动也不一定需要TPM。
2. Bitlocker并不会加密UEFI分区,因为UEFI固件不知道如何解密它。
3. Bitlocker和UEFI安全启动无关,Bitlocker也不一定要求UEFI。
4. Bitlocker加密硬盘会造成性能损失,对机械硬盘有5%-15%的性能降低,但对SSD影响较小。
5. Bitlocker和TPM+密码联合使用后,如果密码丢失或者TPM损坏(可能性很小),则需要Recovery PIN(超长)。如果Recovery PIN丢失,个人用户数据将会丢失(就算TPM拆下来也没有用)。企业用户可以启用BitLocker Active Directory Recovery Password Viewer (RSAT),这样Recovery PIN会存储在企业活动目录域服务器中,丢失后只要打个电话给IT就可以了,这也是为什么企业为什么不担心密码丢失而大规模使用Bitlocker的原因。详见(BitLocker Active Directory Recovery Password Viewer Overview)
更多系统安全文章:
老狼:Bitlocker、TPM和系统安全zhuanlan.zhihu.com老狼:趣话安全启动:迷思与启示zhuanlan.zhihu.com老狼:UEFI安全启动zhuanlan.zhihu.com老狼:基于静态可信根(SRTM)的Bitlocker的工作原理是什么?zhuanlan.zhihu.com
TPM:dTPM(硬件)和fTPM(固件模拟的软件模块)的更多相关文章
- 机械臂——arduino、marlin固件、printrun软件【转】
最近了解到,在市面上大多数机械臂控制都采用的arduino这个开源硬件来控制的,而我发现既然会单片机,就没有必要采用arduino来控制了,arduino只是一种为了简化编程而开发一种软硬件控制平台, ...
- 第四十节,requests模拟浏览器请求模块初识
requests模拟浏览器请求模块初识 requests模拟浏览器请求模块属于第三方模块 源码下载地址http://docs.python-requests.org/zh_CN/latest/use ...
- 基于iCamera测试模拟摄像头-TVP5150模块小结
基于iCamera测试模拟摄像头-TVP5150模块小结 首先先认识下模拟摄像头,相信大家都不陌生, CCD模拟摄像头 CMOS模拟摄像头 可以看到,ccd摄像头电路较复杂,接口少,而cmos摄像头, ...
- requests模拟浏览器请求模块初识
requests模拟浏览器请求模块初识 一.下载 requests模拟浏览器请求模块属于第三方模块 源码下载地址http://docs.python-requests.org/zh_CN/lates ...
- 单片机 MCU 固件打包脚本软件
1 前言 开发完 MCU 软件后,通常都会生成 hex 文件或者 bin 文件,用来做固件烧录或者升级,如果用来做产品开发,就涉及到固件版本的问题,初学者通常采用固件文件重命名来区分版本. 如果需 ...
- J-Link固件烧录以及使用J-Flash向arm硬件板下载固件程序
这篇文章的最初版本是在15年写的https://blog.csdn.net/u010592722/article/details/45575663,后来又遇到了一些新问题,故更新在了这里. 一.始于安 ...
- DxO FilmPack for Mac(胶片模拟效果软件)破解版安装
1.软件简介 DxO FilmPack 是 macOS 系统上由知名的 DxO Labs 出品的一套胶片模拟效果滤镜,拥有数十种电影风格的滤镜,今天和大家分享最新的版本,支持最新的 PhotoS ...
- noip模拟赛 软件software
地图上的 n个城市,由 n-1条道路连接,且任意两个城市连通.除 1号城市之外的每个都有 一台计算机,安装软件号城市之外的每个都有 一台计算机,安装软件一个 自己的安装时间.住在 1号城市的蒟蒻要给这 ...
- QT 模拟Visio软件通过拖动搭建流程图
探索中.. 1 https://bbs.csdn.net/topics/390848708 https://www.cnblogs.com/chinese-zmm/archive/2010/10/10 ...
随机推荐
- 2721: [Violet 5]樱花
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 547 Solved: 322[Submit][Status][D ...
- maven中的继承和聚合的关系
maven中的继承和聚合的关系:两者的目的是不一样的,聚合的目的是能够快速的构建项目,继承的目的是减少重复配置.聚合:定义一个聚合模块,然后在pom文件中添加<module></mo ...
- eclipse在linux下无故闪退解决
A fatal error has been detected by the Java Runtime Environment: SIGSEGV (0xb) at pc=0x00007f25d0b92 ...
- luogu P1260 工程规划(luogu wa)don't know way
题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...
- JSP高级功能-java之JSP学习第三天(非原创)
文章大纲 一.JSP 标准标签库(JSTL)二.JSP 连接数据库三.JSP XML 数据处理四.JSP JavaBean五.JSP 自定义标签六.JSP 表达式语言七.JSP 异常处理八.JSP 调 ...
- [译]在IB中实现自动布局
有关自动布局的其他文章: Autolayout Visual format language for autolayout Creating individual constraints 可怜的界面编 ...
- [Cocoa]深入浅出Cocoa多线程编程之 block 与 dispatch quene
深入浅出 Cocoa 多线程编程之 block 与 dispatch quene 罗朝辉(http://www.cppblog.com/kesalin CC 许可,转载请注明出处 block 是 Ap ...
- hdu4493(C++)
//卡格式的题目 #include<iostream> #include<iomanip>using namespace std;int main(){ int T,i; do ...
- 【Redmine】Redmine 3.0.1 安装与配置
Redmine安装 VM安装Linux 安装Bitnami Redmine 配置环境 1.VM安装Linux 使用虚拟机安装Linux 本文使用的是Centos(CentOS-6.3-x86_64-b ...
- VC6 在使用VC助手(Visual AssistX)在Win7下不能使用↑↓←→及回车键选择的解决的方法
VC6使用Visual AssistX版本号的问题,换一个版本号.如"Visual Assist X 10.8.2029"就可以解决. http://pan.baidu.com/w ...