UEFI secure boot(3)- 安全引导的实现

1、先决条件

1)固件必须支持UEFI和SecureBoot。

2)固件必须支持Setup Mode,或至少清除密钥。

3)一个PKI,以及一种管理(生成和签名)您的X.509证书的方法。

2、生成及添加密钥

参考上述签名过程,简言之,配置包括:

1). 生成初始的已允许数据库(Allowed Database)

2). 生成初始的被禁止数据库(Forbidden Database)

3). 生成初始的秘钥交换秘钥数据库(KEK Database)

4). 设置平台秘钥(PK)

 

当上述的最后一步完成时,平台将退出setup模式,并且任何涉及到以上数据库的更新都要授权(即要求包含数字签名)。

如果已允许数据库中还包含了grub的签名信息或者加载的grub已被db公钥签名,安全引导配置至此已全部完成。如果平台的默认启动模式是安全引导,那么平台还需要将安全引导变量(Secure Boot variable)设置为True;以便告知OS Loader安全引导已启用。

3、现场维护时

我们前文提到过,安全启动设备部署好以后,有时会需要修改一些与安全启动相关的数据库中的内容。比如发现了一个固件映像是容易受到安全威胁的,那么他就不应该再被添加到安全引导的过程中。同样,平台所有者有时候想要添加一个新的KEK签名来允许对Allowed或Forbidden数据库进行更灵活的更新。

我们可以通过在UEFI运行时的一些特殊的变量来进行管理。一如前文所讲,任何涉及到已认证变量的更新都要求签名,签名必须采取PKCS#7的形式,并且必须包含时间戳,以便UEFI运行时Variable服务验证此次更新不是旧版更新的重放(避免重放攻击)。

更新上述数据库中的内容时,通过UEFI运行时的一些特殊的变量来进行管理,涉及到的要认证更新的变量必须具有签名以及时间戳。否则更新不予理会。

4、故障恢复时

当一个新驱动被发现与平台不兼容或者包含了使其不适合在设备上使用的bug。而由于安全引导不允许固件的程序回滚,如果不在设计时对这种情况加以预防,当设备真正遇到这种情况时驱动就会彻底不可用。

有两种方式来避免这种情况的发生:

1). 可以为当前存在用户提供旧有的的比较稳定的固件来替代有问题的固件。

2). 对老的固件映像重新签名,添加新的时间戳使它通过验证。

这样一种“恢复”机制的存在,在不损害系统安全的情况下增强了系统的健壮性 (可以理解为系统的抗干扰和自修复的能力)。

UEFI安全引导的用途还包括调用OS加载器(OS Loader)。加载内核可能有以下几种情况出现:

1. 本地存储(系统在硬盘)

大多数情况下,操作系统都是存放在本地存储器上的,例如本地的硬盘。UEFI引导管理器首先验证grub的签名,如果通过,就将权限移交。在获得控制权后,frub将加载os,并在此过程中的某一时刻调用 ExitBootServices() 。该调用结束后,只有UEFI运行时服务仍然可用。

由于UEFI变量服务属于运行时服务,因此操作系统仍可能执行与安全引导有关的变量的更新,然而,验证这种更新的有效性的仍然通过固件。

2. 可移动介质与网络启动

UEFI也允许从移动介质加载操作系统。UEFI引导管理器读取引导顺序变量以确定是否优先从可移动介质或者从固定本地存储开始引导。第三种是基于网络的操作系统加载。例如使用PXE下载一个OS Loader。在这过程中,安全引导仍然会验证OS Loader的有效性。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值