网站qq 微信分享怎么做,西安便宜做网站,建自己的个人网站,网址导航大全本篇文章主要介绍基于TPM的Bitlocker全盘加密时#xff0c;VMK密钥的密封#xff08;Seal#xff09;流程#xff0c;至于TPM、Bitlocker、密钥保护器、VMK密钥等这些东西是什么#xff0c;这里不做解释#xff0c;需要自己脑补一下#xff08;╮(╯▽╰)╭#xff09;…本篇文章主要介绍基于TPM的Bitlocker全盘加密时VMK密钥的密封Seal流程至于TPM、Bitlocker、密钥保护器、VMK密钥等这些东西是什么这里不做解释需要自己脑补一下╮(╯▽╰)╭。
首先看看一张结构图来自网络了解一下TPM加密的基本框架与流程 同样基于TPM的安全启动链也不做过多解释简单说就是当电脑通过TPM进行全盘加密后后期对电脑的改动影响系统启动PCR校验不通过时触发输入恢复密钥的“蓝屏”。 在Windows中用户层与内核层的交互通常使用DeviceIOControl这个API来进行。同样的具备TPM芯片的电脑在系统中存在一个\Device\TPM的设备以及对应的TPM驱动程序所以当对系统进行基于TPM芯片的Bitlocker加密时存在DeviceIOControl的交互下面通过抓包来窥探这一过程。
“工欲善其事必先利其器”这里介绍一个抓包工具IRPMon获取不到的你可能需要一个“梯子”。
IRPMon安装完成后打开软件在菜单项中选择“Action”-“Select drivers / devices...”随后弹出“Hook Drivers and Devices”对话框在该对话框的右侧树形控件中下拉寻找“\Driver\TPM”项如下图所示右击“\Driver\TPM”项在右键菜单中选择“Hooked”同时选中“Data”选项这样在随后的抓包中才能看到抓包的数据内容。 右键菜单项 最终配置
启用基于TPM的Bitlocker加密之后便可以抓到一堆IRP通信的数据包可以对抓取到的数据包做一些过滤仅保留感兴趣的数据。 设置过滤条件 过滤后的数据详情
直接通过IRPMon查看抓取的数据比较麻烦这里通过导出抓取的数据在编辑器gvim中查看。同时IRPMon支持自己开发插件来解析抓取的数据如果有时间的话可以自己开发一个插件用来解析TPM的数据包。
在菜单项中选择“Action” - “Save..”在弹出的对话框中选择文件格式为“JSON Array [*.json]”格式最后将其按json格式保存到文件。
通过分析保存的json格式的文件分析时只关注“Major Function”的值为“DeviceIOControl”的数据包并且“Data0”的数据为“0201”或“0202”开头的数据包。在追踪完一些文件句柄以及句柄关联的数据后最终确定该句柄0xFFFFAF0BB990187B0就是密封VMK密钥时与TPM设备通信的文件句柄。 图中的Data0字段后的十六进制值是发送到TPM的数据包可以通过在线工具tpmstream对Data0的数据进行翻译转换为按TPM协议结构方式展示这里需要将“0201”或“0202”修改为“8001”或“8002”才能正确展示TPM通过协议可以参考这里和这里。 通过对整个会话数据包的分析得到与TPM交互的如下VMK密封创建过程最后的TPM_CC_Create交互包含VMK明文密钥以及加密后的信息存储在FVE metadata结构中。 PCR校验位图解释如下 这里的预期的Hash值计算公式如下
预期Hash Hash(PCR0 || PCR2 || PCR4 || PCR11) 这里的PCR11之所以设定为0来自微软的解释。 随后该预期Hash值存储在加密后的磁盘上位于FVE metadata中解封VMK密钥时用到此值 下图是执行TPM的TPM_CC_Create命令时包含的即将密封的VMK密钥 通过该VMK密钥可实现提取TPM加密磁盘的恢复密钥这里通过我开发的恢复密钥提取工具实现 下图为TPM_CC_Create命令执行后的Response结果其中的一些数据最后保存在加密磁盘的FVE metadata数据中在解封时用于解密VMK密钥 TPM_CC_Create命令返回的Response部分数据
Response中数据存储在磁盘中的FVE