edk2 security boot校验流程

news2024/11/26 3:57:02

edk2整体架构

在这里插入图片描述

关于安全校验的核心逻辑

Code\Edk2\MdeModulePkg\Universal\SecurityStubDxe\SecurityStub.c

  Status = gBS->InstallMultipleProtocolInterfaces (
                  &mSecurityArchProtocolHandle,
                  &gEfiSecurity2ArchProtocolGuid,
                  &mSecurity2Stub,
                  &gEfiSecurityArchProtocolGuid,
                  &mSecurityStub,
                  &gSecurityManagementProtocolGuid,
                  &mSecurityManagement,
                  NULL
                  );

Code\Edk2\MdeModulePkg\Core\PiSmmCore\Dispatcher.c

  if (mSecurity2 == NULL) {
    gBS->LocateProtocol (&gEfiSecurity2ArchProtocolGuid, NULL, (VOID**)&mSecurity2);
  }
  if (mSecurity == NULL) {
    gBS->LocateProtocol (&gEfiSecurityArchProtocolGuid, NULL, (VOID**)&mSecurity);
  }

Code\Edk2\MdeModulePkg\Core\PiSmmCore\Dispatcher.c

    SecurityStatus = mSecurity2->FileAuthentication (
                                  mSecurity2,
                                  OriginalFilePath,
                                  Buffer,
                                  Size,
                                  FALSE
                                  );

    SecurityStatus = mSecurity->FileAuthenticationState (
                                  mSecurity,
                                  AuthenticationStatus,
                                  OriginalFilePath
                                  );

这三段分别是注册安全句柄,获取安全句柄和使用安全句柄,所有的安全逻辑貌似都是从这里触发的。

再往核心出发就可以看到:
EFI_SECURITY_ARCH_PROTOCOL mSecurityStub = {
SecurityStubAuthenticateState
};

EFI_SECURITY2_ARCH_PROTOCOL mSecurity2Stub = {
Security2StubAuthenticate
};

以及Security2StubAuthenticate的实现:
在这里插入图片描述

可以发现stub 又由RegisterSecurity2Handler注册。

在这里插入图片描述

这边注册由较多的安全校验函数如下:
在这里插入图片描述

DxeImageAuthenticationStatusHandler                //未找到调用处
DxeImageVerificationHandler
DxeTpm2MeasureBootHandler
DxeTpmMeasureBootHandler                           //未找到调用处
DxePlatformImageVerificationHandler                //未找到调用处

其中Code\Build\AlderLakeIoTPkg\DEBUG_VS2017\X64\MdeModulePkg\Universal\SecurityStubDxe\SecurityStubDxe\DEBUG\AutoGen.c

VOID
EFIAPI
ProcessLibraryConstructorList (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
  EFI_STATUS  Status;
......

  Status = DxeImageVerificationLibConstructor (ImageHandle, SystemTable);
  ASSERT_EFI_ERROR (Status);

  Status = DxeTpm2MeasureBootLibConstructor (ImageHandle, SystemTable);
  ASSERT_EFI_ERROR (Status);

}

再往上是_ModuleEntryPoint

FileAuthentication

所以结论是FileAuthentication 调用了DxeImageVerificationHandler / DxeTpm2MeasureBootHandler实现了镜像校验。

            Status = Tcg2MeasureGptTable (Tcg2Protocol, Handle);
            DEBUG ((EFI_D_INFO, "DxeTpm2MeasureBootHandler - Tcg2MeasureGptTable - %r\n", Status));
    DbStatus = IsSignatureFoundInDatabase (
                 EFI_IMAGE_SECURITY_DATABASE1,
                 mImageDigest,
                 &mCertType,
                 mImageDigestSize,
                 &IsFound
                 );
    if (EFI_ERROR (DbStatus) || IsFound) {
      //
      // Image Hash is in forbidden database (DBX).
      //
      DEBUG ((DEBUG_INFO, "DxeImageVerificationLib: Image is not signed and %s hash of image is forbidden by DBX.\n", mHashTypeStr));
      goto Done;
    }

调试开关和日志打印

  IN  CONST EFI_DEVICE_PATH_PROTOCOL   *File, OPTIONAL

  EFI_DEVICE_PATH_PROTOCOL            *DevicePathNode;
  EFI_DEVICE_PATH_PROTOCOL            *OrigDevicePathNode;
  OrigDevicePathNode = DuplicateDevicePath (File);

    DEBUG_CODE_BEGIN ();
      CHAR16                            *ToText;
      ToText = ConvertDevicePathToText (
                 DevicePathNode,
                 FALSE,
                 TRUE
                 );
      if (ToText != NULL) {
        DEBUG ((DEBUG_INFO, "The measured image path is %s.\n", ToText));
        FreePool (ToText);
      }
    DEBUG_CODE_END ();

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

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

相关文章

神经网络架构设计常见问题及解答

如果你是人工神经网络 (ANN) 的初学者,你可能会问一些问题。 比如要使用的隐藏层数量是多少? 每个隐藏层有多少个隐藏神经元? 使用隐藏层/神经元的目的是什么? 增加隐藏层/神经元的数量总是能带来更好的结果吗? 使用什…

JAVA_SE 银行存钱(控制台程序)

仓库地址:https://gitee.com/ThMyGitee/Bank.git CSDN的友友们,项目如果适合您的话,麻烦给个小小的Star,谢谢啦! JAVA_SE 银行存钱(控制台程序) 1.流程图 2.开发环境 JDK1.8 IDEA 2019.33.界面运行 模拟转账业务&…

复习V2+V3之——02 事件处理

事件处理 事件的基本使用 1.使用v-on:xxx 或者 xxx 绑定事件,其中xxx是事件名 一般来说用 xxx 这种方式多一点 2.事件的回调函数需要配置在 methods 对象中,最终会在 vm 上面 3.methods中配置的函数,不要用箭头函数!否则this…

python爬虫哪个库用的最多

目录 常用的python爬虫库有哪些 1. Requests: 2. BeautifulSoup: 3. Scrapy: 4. Selenium: 5. Scrapy-Redis: 哪个爬虫库用的最多 Scrapy示例代码 总结 常用的python爬虫库有哪些 Python拥有许多常用的爬虫库…

node版本控制工具nvm使用笔记

由于不同的项目所需要的node环境不同,所以在运行支持node 12或者node 16版本的项目时卸载安装不同版本的node非常麻烦,恰巧公司有一个热心的同事告诉我可以使用nvm来进行版本控制,我使用了之后发现确实好用,写一篇笔记记录一下。 …

每天晚上12点服务器关机,第二天6点自动唤醒

每天晚上12点服务器关机,第二天6点自动唤醒。 作用主要有4个: 1、防黑:上班时黑客很少攻击,容易被发现。下班了、睡了,是黑客攻击的主要时间段。晚上关机,就直接没法攻击了。 2、省电。 3、电脑开了一天…

三勾商城java多端+多店+新零售商城系统

三勾商城是开发友好的微信小程序商城,框架支持SAAS,支持发布 iOS Android 公众号 H5 各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)等多个平台,不可多得的二开神器, 为大中小企业提供极致的移动电子…

FlutterUnit 周边 | 深入分析 iOS 手势回退问题

theme: cyanosis 1. 问题的出现 由于之前一直在 Android 机子上测试,没在 iOS 上跑过。最近 FlutterUnit 发布了 iOS 版本,收到了最多的反馈就是:返回滑动 失效。 起初我以为只是 WillPopScope 的锅,但我发现,很多普通…

多元回归预测 | Matlab基于遗传算法(GA)优化径向基神经网络(GA-RBF)的数据回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于遗传算法(GA)优化径向基神经网络(GA-RBF)的数据回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空…

java的BigDecimal操作

1.保留两位小数不进位 public static void main(String[] args) {BigDecimal bigDecimal1 new BigDecimal("1234.8888");String bigDecimal1s bigDecimal1.setScale(2, RoundingMode.DOWN).toPlainString();System.out.println(bigDecimal1s);}结果: …

为什么不建议项目中使用触发器

1.什么是触发器 触发器(trigger)是一种数据库对象,可以看作由事件来触发的特殊存储过程。当一个特定的事件发生时,会自动执行在数据库表上的某些操作,比如当对一个表进行操作(insert,delete&am…

关系型数据库中如何进行事务管理

关系型数据库中如何进行事务管理 在关系型数据库中,事务管理是一项非常重要的功能。它允许数据库管理员在一个或多个数据库操作中实现原子性、一致性、隔离性和持久性(ACID)。 事务是一组数据库操作,它们必须全部执行或全部回滚…

【ACL2023】基于电商多模态概念知识图谱增强的电商场景图文模型FashionKLIP

近日,阿里云机器学习平台PAI与复旦大学肖仰华教授团队、阿里巴巴国际贸易事业部ICBU合作在自然语言处理顶级会议ACL2023上发表基于电商多模态概念知识图谱增强的电商场景图文模型FashionKLIP。FashionKLIP是一种电商知识增强的视觉-语言模型。该论文首先设计了从大规…

String类1

String类 单个字符可以用char类型保存,多个字符组成的文本就需要保存在String对象中,String通常被称为字符串,一个对象最多占用4GB的文本类容。 声明字符串 1.字符串必须包含在“”中 例:”234”、”你好!” 2.声明字…

GOLANG进阶:govalidator过滤器,MD5,JWT身份验证,redis

1.govalidator过滤器:类似于正则匹配,主要放在结构体注释部分,有些验证没有,需要自己替换(把required部分替换成正则表达式) 引入资源包(两种方式): go get github.com/…

ubuntu重启后,docker容器中的mysql怎么重启

1、第一次安装的时候,参考使用docker安装mysql主从集群_docker mysql主从集群_veminhe的博客-CSDN博客 这篇博客操作的。 2、但是突然有一天,我的腾讯云主机被迫重启了,发现docker容器中的mysql挂掉了 3、搜资料看下 参阅了Docker启动mysq…

css之:is()、:where()和:has()伪元素的运用、使用、important

文章目录 简介1、:is()2、:where()3、:has() 简介 :is()、:where()和:has()伪元素是CSS中用于样式化元素的非常强大的工具。它们是在CSS选择器Level4规范中引入的。它们允许我们将样式应用于符合特定条件的任何元素,例如元素的类型、元素的位置和元素的后代。 1、:i…

科研热点|国自然会评季:地方高校申请国家基金难度有多大?

2022年国自然放榜后,一位评审专家的函评意见引发关注。 这位专家在一份函评意的第四部分其他建议中写到: 地方高校的老师不容易。申请人发表了不少好论文,但从未获得过基金支持,应该支持这种在没有项目和条件下还很好开展了研究…

Kubernetes中Pod的升级和回滚

Kubernetes中Pod的升级和回滚 本文说说 Pod 的升级和回滚问题。 当集群中的某个服务需要升级时,我们需要停止目前与该服务相关的所有 Pod,然后下载新版本镜像并创建新的 Pod。如果集群规模比较大,则这个工作变成了一个挑战,而且…

【Linux】 Linus世界,WIndows VS Linux

文章目录 前言WindowsLinux操作系统Windows VS Linux收费情况技术支持安全性开源 区别 前言 在电脑世界有两种十分常见的电脑操作系统——Linux与和Windows,相信对电脑有一定了解的人对它们一定并不陌生!但是在我们的使用过程中,是否有什么事…