TPM之VMK密封

本篇文章主要介绍基于TPM的Bitlocker全盘加密时,VMK密钥的密封(Seal)流程,至于TPM、Bitlocker、密钥保护器、VMK密钥等这些东西是什么,这里不做解释,需要自己脑补一下(╮(╯▽╰)╭)。

首先看看一张结构图(来自网络),了解一下TPM加密的基本框架与流程:

04a5ce19a1a946c2bfbee76d6281f543.jpeg

同样,基于TPM的安全启动链也不做过多解释,简单说就是当电脑通过TPM进行全盘加密后,后期对电脑的改动影响系统启动,PCR校验不通过时,触发输入恢复密钥的“蓝屏”。

2005b1517d7f4612bed1831b5f8c915f.png

 在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”选项,这样在随后的抓包中才能看到抓包的数据内容。

右键菜单项 

f45f1e29eb744c03b4a45ad61ac4b063.jpeg

最终配置 

启用基于TPM的Bitlocker加密,之后便可以抓到一堆IRP通信的数据包,可以对抓取到的数据包做一些过滤,仅保留感兴趣的数据。

c7a75839917a4b7399b555eb93de7362.jpeg

设置过滤条件 

3bf2df0f7561407f84107b715d42ee5e.jpeg

过滤后的数据详情 

直接通过IRPMon查看抓取的数据比较麻烦,这里通过导出抓取的数据,在编辑器gvim中查看。同时,IRPMon支持自己开发插件来解析抓取的数据,如果有时间的话,可以自己开发一个插件,用来解析TPM的数据包。

在菜单项中,选择“Action” -> “Save..”,在弹出的对话框中选择文件格式为“JSON Array [*.json]”格式,最后将其按json格式保存到文件。

通过分析保存的json格式的文件,分析时,只关注“Major Function”的值为“DeviceIOControl”的数据包,并且“Data0”的数据为“0201”或“0202”开头的数据包。在追踪完一些文件句柄以及句柄关联的数据后,最终确定该句柄(0xFFFFAF0BB990187B0)就是密封VMK密钥时,与TPM设备通信的文件句柄。

9233d89027284cbabc69014fa1d50b80.png

 图中的Data0字段后的十六进制值是发送到TPM的数据包,可以通过在线工具tpmstream对Data0的数据进行翻译,转换为按TPM协议结构方式展示(这里需要将“0201”或“0202”修改为“8001”或“8002”才能正确展示),TPM通过协议可以参考这里和这里。

c3c827c7accf4cada30d917911b82802.png

 通过对整个会话数据包的分析,得到与TPM交互的如下VMK密封创建过程,最后的TPM_CC_Create交互包含VMK明文密钥以及加密后的信息,存储在FVE metadata结构中。

7756f6bd8530444897ba8a07a2c942c1.png

PCR校验位图解释如下

fa95cbb095f64ee29f7b73ea96d628a0.png

这里的预期的Hash值计算公式如下

预期Hash = Hash(PCR0 || PCR2 || PCR4 || PCR11)

5002d969d01c45b1b15bb7304baf1279.jpeg

这里的PCR11之所以设定为0,来自微软的解释。

9fb8978b14914ddb94512fbe58cef669.png

随后,该预期Hash值存储在加密后的磁盘上,位于FVE metadata中,解封VMK密钥时用到此值

4bacc2adc5ff4721a6efec2862593f0f.jpeg

下图是执行TPM的TPM_CC_Create命令时包含的即将密封的VMK密钥

通过该VMK密钥,可实现提取TPM加密磁盘的恢复密钥,这里通过我开发的恢复密钥提取工具实现

下图为TPM_CC_Create命令执行后的Response结果,其中的一些数据最后保存在加密磁盘的FVE metadata数据中,在解封时用于解密VMK密钥

TPM_CC_Create命令返回的Response部分数据 

Response中数据存储在磁盘中的FVE 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS】输入框焦点控制实现键盘显隐

【HarmonyOS】输入框焦点控制实现键盘显隐 问题背景: 鸿蒙中输入框控件,TextInput最常见的控制,即:针对输入框焦点控制,获取焦点,失去焦点。达到用户方便操作输入和退出输入。 因为输入框一定会伴随着键盘…

42.开发中对String.format()的使用之空位补齐

用于空位补齐 Int x1; //对于传入的数字做处理,如果传入的数字不足三位,则使用数字0自动补齐 String numString.format(“%”3”d”,x); System.out.println(“num”num);//输出结果为:001 也可以简写成: String num2String…

2024年大屏幕互动源码+动态背景图和配乐素材+搭建教程

2024年大屏幕互动源码动态背景图和配乐素材搭建教程 php宝塔搭建部署活动现场大屏幕互动系统php源码 运行环境:PHPMYSQL 下载源码地址:极速云

jenkins禁用所有job

背景 需要对jenkins做迁移,但是老的jenkins需要保留一段时间,先把老的jenkins所有job禁用掉 禁用多分支pipeline 找到Manage Jenkins>Script Console 输入下面的脚本 import hudson.model.*disableChildren(Hudson.instance.items)def disableChi…

数据库设计:实体关系图

一个良好的设计对于数据库系统至关重要,它可以减少数据冗余,确保数据的一致性和完整性,同时使得数据库易于维护和扩展。 实体关系图(Entity-Relationship Diagram、ERD)是一种用于数据库设计的结构图,它描…

Webrtc支持HEVC之FFMPEG支持HEVC编解码(一)

一、前言 Webrtc使用的FFMPEG(webrtc\src\third_party\ffmpeg)和官方的不太一样,使用GN编译,各个平台使用了不一样的配置文件 以Windows为例,Chrome浏览器也类似 二、修改配置文件 windows:chromium\config\Chrome\win\x64 其他平台: chromium\config\Chrome\YOUR_SYS…

java函数式接口

函数式接口定义:接口中有且仅有一个抽象方法的接口即为函数式接口,可以使用FunctionalInterface检查定义的接口是否是一个函数式接口,函数式接口可以采用lambda表达式。语法格式如下: import java.util.function.Consumer; Func…

ARM32开发——第一盏灯

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 开发流程需求分析项目新建代码编写GPIO初始化 程序编译程序烧录烧录扩展(熟悉)官方烧录器烧录(…

自制F1C200S demo板(八、Linux初学3)

uboot执行流程学习 uboot执行流程文件路径: 1、uboot/arch/arm/cpu/arm926ejs/start.S,执行结束会跳转到_main部分,处于下一路径中 2、uboot/arch/arm/lib/crt0.S,执行到 mov r0, #0 bl board_init_f 会跳转到void …

今日总结2024/5/31

今日熟悉了常用库函数,并查集,常用建边方式 明天蓝桥杯国赛随缘了,第一次估计也是最后一次了 LQOJ.269 排列序数 如果用 a b c d 这 4 个字母组成一个串,有 4!24 种,如果把它们排个序,每个串都对应一个序号&#xf…

陪玩小程序都需要怎么做?

开发陪玩小程序需要进行全面的需求分析、功能规划、技术选型、界面设计等一系列步骤。陪玩小程序作为一种新兴的网络服务平台,为用户提供了寻找游戏伙伴、预约陪玩服务等功能,满足了用户在游戏领域的社交互动和技能提升需求。具体分析如下: 需…

一份不知道哪里来的第十五届国赛模拟题

这是一个不知道来源的模拟题目,没有完全完成,只作代码记录,不作分析和展示,极其冗长,但里面有长按短按双击的复合,可以看看。 目录 题目代码底层驱动主程序核心代码关键:双击单击长按复合代码 …

Flutter 中的 SliverPadding 小部件:全面指南

Flutter 中的 SliverPadding 小部件:全面指南 Flutter 是一个功能丰富的 UI 框架,由 Google 开发,允许开发者使用 Dart 语言来构建高性能、美观的跨平台应用。在 Flutter 的滚动组件体系中,SliverPadding 是一个用来为其子 Slive…

今日学会的,刘姥姥进大观园

Git - First-Time Git Setup 下载了Git,会用Git了? 还有这个:学习 HTML5 Canvas 这一篇文章就够了 | 菜鸟教程 (runoob.com) JavaScript 用法 | 菜鸟教程 (runoob.com) 看到这个真的是受益匪浅,我终于懂了一直有的疑惑。 3D可…

js 正则匹配返回所有匹配到的范围

js正则默认不返回匹配到的范围,有些场景用起来就不太方便。如果想针对于匹配到的位置多次操作就要另外想个办法了。 indexOf 这个只能获取到第一个出现的位置,其他位置不太行,这个方法好像就行不通了。 自己一个个找,写个kmp算法感…

Mock的用法

1. 引入unittest包,再从包里引用mock类 import unittest from unittest import Mock 2. mock的作用,做挡板或者用来做一些单元测试过程中复杂的数据的模拟 demo Demo() #把mock的值赋值给demo的get()方法,这样在调用这个方法时&#xff0…

RAG技术探索

什么是RAG 1 RAG原理 RAG(Retrieval Augmented Generation, 检索增强生成),即LLM在回答问题或生成文本时,先会从大量文档中检索出相关的信息,然后基于这些信息生成回答或文本,从而提高预测质量。RAG模型尤…

数据在内存中的存储<C语言>

导言 在计算机中不同类型的数据在计算机内部存储形式各不相同,弄懂各种数据在计算机内部存储形式是有必要的,C语言的学习不能浮于表面,更要锻炼我们的“内功”,将来在写程序的时候遇见各种稀奇古怪的bug时,也便能迎刃而…

天文学专业大学院校排名(2024最新排行榜)

序号 学校代码 学校名称 学科名称 评估结果 1 10284 南京大学 天文学 A 2 10358 中国科学技术大学 天文学 A 3 10001 北京大学 天文学 B- 4 10248 上海交通大学 天文学 C 5 10027 北京师范大学 天文学 C- 天文学专业排名前5名的大学有&#xff1…

pipeline在计算机领域有什么贴切的翻译

在计算机领域,"pipeline"一词通常被翻译为“流水线”。这个术语指的是一种技术或架构,其中多个处理阶段按顺序执行,使得数据可以在一个阶段完成处理后立即被送入下一个阶段,从而提高效率和性能。在不同的上下文中&#…