软件的最大优势在于它可以改变——它可以针对新需求和新情况进行增强、升级、修复和修改。同时,软件的最大弱点是可以更改和修改以复制不良行为。
软件安全的一个主要目标是仅允许被授权实体更改软件,并防止未经授权的实体更改软件。如果做不到这一点,您希望能够检测软件是否已更改。这一目标,即预防和检测未经授权的更改,是受信任软件的核心。
问题是,你怎么知道你可以信任一个软件?一种方法是让您信任的实体证明该软件是可信的。这方面的一个例子是仅安装来自“已知良好”或受信任来源的软件。您还应该使用加密技术检查软件的签名。例如,开发人员可以使用Linuxrpm 软件包格式和 rpm 实用程序在安装之前验证其软件包的加密哈希。这是使用 rpm 的正常部分,有助于检测通过恶意操作或数据损坏修改的软件包。
然而,这仅仅是个开始——信任和验证必须贯穿整个软件开发链。例如,执行转速检查的软件必须是可信的。可以使用系统完整性实用程序检查 rpm 软件。但是,系统完整性实用程序也必须是可信的。这可以在Linux内核中完成(它集成了某些系统完整性检查功能。然后,Linux 内核必须由引导加载程序进行验证,这可以通过 UEFI 固件和安全启动进行验证。UEFI 固件可以检查其自身的完整性。是信任自始至终!
但 UEFI 固件是软件。特殊软件,具有多次完整性检查和特殊更新过程,但它仍然是软件。如果资源充足,即使是 UEFI 固件也可能受到损害。一旦系统固件遭到入侵,系统中的任何其他内容都无法信任。
在系统之外,公钥加密(PKC)可以提供一种强大的方法来验证系统的身份并执行安全操作。PKC 使用一对密钥 – 公钥和私钥。只要私钥受到保护,加密就是安全的。不幸的是,如果系统受到损害,私钥也会受到损害,并且实际的加密操作可能会被暂停。如果您需要信任系统,这不是一件好事!
一个答案是使用不可变的硬件。例如,通过在生产过程中熔断一组芯片级保险丝,可以在硬件中固定 CPU 序列号。不幸的是,此CPU序列号将由软件读取和传输。如果系统遭到入侵,软件可以返回任何序列号。
另一个答案是使用特殊的安全处理器 - 专用计算机,它只执行一小部分安全和加密功能,并提供不可变的硬件信任根,其中包括几个关键属性。在硬件信任根中,安全处理器及其软件和内存是独立的,旨在抵御物理攻击或危害。软件硬编码到芯片中,无法修改或更新;它是真正的只读。安全处理器中包含有限数量的非易失性存储;此存储器主要用于存储加密密钥和哈希。安全处理器包括一组强大的加密功能,包括加密和解密、哈希和加密密钥生成,所有这些都是使用定义良好的 API 执行的。
使用硬件信任根,可以在安全处理器内生成公钥和私钥对。私钥可以保留在处理器内部,永远不会暴露给系统。在此模式下,私钥永远不会存在于处理器之外,并且无法检索或泄露。
这种安全处理器可用于为构建可信系统提供起点,方法是使用它来证明最低级别的 UEFI [统一可扩展固件接口] 固件的完整性,然后构建完整且受信任的软件堆栈。这正是将受信任的处理模块 (TPM) 与 UEFI 安全启动结合使用以实现受信任启动时所做的操作。
TPM 在服务器、台式机和笔记本电脑系统中广泛使用。它还可用于高端物联网 (IoT) 和嵌入式系统。
TPM通常作为单独的芯片实现,安全处理器也被集成到标准CPU中。这方面的例子包括 ARM TrustZone 和 AMD 安全处理器。英特尔正在添加软件防护扩展 (SGX),提供硬件强制的安全功能。
不幸的是,这些安全功能并没有像它们应该的那样广泛使用。我鼓励任何实施安全敏感系统(实际上应该是所有系统)的人考虑在其系统上使用可用硬件信任根的安全功能。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !