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,一经查实,立即删除!

相关文章

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

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

数据库设计:实体关系图

一个良好的设计对于数据库系统至关重要,它可以减少数据冗余,确保数据的一致性和完整性,同时使得数据库易于维护和扩展。 实体关系图(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…

ARM32开发——第一盏灯

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

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

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

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

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

RAG技术探索

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

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

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

控制障碍函数CBF详解(附带案例实现)

控制障碍函数CBF详解(附带案例实现) 文章目录 控制障碍函数CBF详解(附带案例实现)1. Control Affine System2. Lyapunov Theory, Nagumos Theory, Invariance Principle3. Control Lyapunov Function (CLF) and CLF-QP4. Control …

算法(十二)分治算法

文章目录 算法概念算法例子字符串中小写转大写求X^n问题 算法概念 分治算法(divide and conquer)算法的核心思想其实就是"分而治之",将原问题划分成n个规模较小,并且结构与原问题相似的子问题,递归地解决这…

移植其他命令行Vivado IDE的工具

移植其他命令行Vivado IDE的工具 介绍 本章介绍如何迁移各种AMD命令行工具以在AMD中使用 Vivado™集成设计环境(IDE)。 迁移ISE Partgen命令行工具 ISE™Design Suite Partgen工具可获得: •系统上安装的所有设备的信息 •详细的包装信息 您可…

[openwrt-21.02]openwrt-21.02 make menuconfig不显示luci-app-firewall问题分析及解决方案

问题描述 make menuconfig在 在applications界面没有luci-app-firewall 问题分析 首先重新执行 ./scripts/feeds update -a ./scripts/feeds install -a 然后再次执行make menuconfig,依然不显示,所以不是feeds安装的问题 最后看到log有个openmptc…

记录mabatis-plus初体验

一、简介 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 测试问题现象:测试mabatis的crud方法 增加 批量删除都没有问题 单单就是这个根据ID删除有问题 解决方案:真的就是pom文件的问题 自己的版本是Intelli…

Fully Convolutional Networks for Semantic Segmentation--论文笔记

论文笔记 资料 1.代码地址 2.论文地址 https://arxiv.org/abs/1411.4038 3.数据集地址 论文摘要的翻译 卷积网络是强大的视觉模型,可以产生特征层次结构。我们表明,卷积网络本身,经过端到端,像素对像素的训练,在…

【新能源大巴BMS结构与乘用车的区别】

新能源大巴BMS结构与乘用车的区别 这篇文章主要介绍新能源大巴的电池和BMS的结构与乘用车的区别。 主要有,新能源大巴行业、新能源电池系统结构和新能源大巴的BMS系统。 第一部分 新能源大巴行业 其实数数全球的商用车(大巴卡车),大致的方向还是沿着就…

前端传String字符串 后端使用enun枚举类出现错误

情况 前端 String 后端 enum 前端 后端 报错 2024-05-31T21:47:40.61808:00 WARN 21360 --- [nio-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to con…

香港服务器无法访问是什么情况?

香港服务器无法访问是什么情况?简单来说,这意味着香港服务器没有响应请求,客户端无法访问。此错误可能由于多种原因而发生,包括网络连接问题、服务器停机、防火墙限制和 DNS 错误。当发生服务器无法访问错误时,它会影响您网站的性…

Qt for android : libusb在android中使用

简介 如何在Qt for Android中使用libusb, 其实libusb的文档里面都写的很清楚, 这里只是稍微做下整理。 libusb libusb github源码 libusb release的版本, 有编译好的静态 步骤 1. 下载libusb libusb v1.0.027 源码包 2. 整理提取libusb android使用源…

Docker 私有仓库部署和管理

目录 一、案例一 概述 二、案例一 前置知识点 2.1、什么是 Docker Compose 2.2、什么是 Consul 三、案例一 使用 docker Compose 搭建 Consul 集群环境 3.1、案例实验环境 3.2、案例需求 四、案例实施 4.1、Docker 网络通信 1)端口映射 2&#xf…

运筹学_3.运输问题(特殊的线性规划)

目录 前言3.1 平衡运输问题中初始基可行解确定运输问题平衡运输与非平衡运输平衡运输问题的数学模型单纯形法解决平衡运输问题,初始可行基的确认 3.2 平衡运输问题的最优解判别求检验数表上作业法 3.3 产销不平衡的运输问题运输问题中产大于销的问题运输问题中产小于…