Home 《安全处理器架构设计原理》笔记(一):基础
Post
Cancel

《安全处理器架构设计原理》笔记(一):基础

《安全处理器架构设计原理》(英文名为Principles of Secure Processor Architecture Design)隶属于Synthesis Lectures on Computer Architecture系列。硬件不同于软件那样容易被破解,且基于硬件的安全保护效率更高,对系统性能的影响更小,但在硬件中增加安全功能也充满挑战,一旦实现之后就很难改变,需要仔细设计,且设计时需要考虑到适用于未来的功能和算法。

背景

安全处理器架构在设计上提供了额外功能,这些功能可以是纯硬件的,也可以是硬件和软件结合实现的。安全处理器架构一般是商业处理器的扩展,基于x86等架构实现,这些功能的出现基于以下三个因素:

  • 软件的复杂性和缺陷:诸如操作系统、虚拟机之类的软件复杂性和规模逐渐上升,仅仅基于软件来提供安全性是不现实甚至不可能的,有必要实现硬件安全功能(如特权级或可信执行环境)来提供一个特殊的执行环境来执行部分可信代码。

  • 侧信道攻击:许多应用运行在云上,不同的用户共享相同的物理硬件,攻击者可以通过时间、功率、电磁等侧信道来攻击其他用户应用中的敏感信息,只有通过架构和硬件层面的改进才能缓解不同侧信道带来的影响。

  • 物理攻击:可以通过对内存总线甚至内存本身的监测来实现攻击,且随着云计算、嵌入式设备、物联网的普及,用户可能不再能够控制软件运行的硬件,需要新的机制来保护代码和数据。

Trusted Computing Base (TCB)

TCB是指为实现计算机系统安全保护的所有安全保护机制的集合。在安全处理器架构中,TCB由硬件和软件共同组成来提供一些安全功能。硬件安全架构中,所有安全机制都仅由硬件实现,硬件-软件安全架构中,硬件和软件(通常是操作系统、虚拟机等)一起工作来保护其他软件,后者可以提供更大的灵活性,但是会增大TCB,可能会导致更多的安全漏洞。安全处理器架构的目标是确保可信的硬件和可信的软件共同工作,为系统上运行的软件提供安全性和保护。

不可信的部分(包括硬件和软件)不一定是恶意的,只是不被信任。我们需要假设每个不受信任的硬件或软件都可能会破坏系统安全,同时也要考虑到外部攻击者,也就是对计算机系统的物理攻击。可信的部分也不一定是安全的,其中也可能包含漏洞和错误,但是在设计和实现过程中,需要确保这些部分确实是安全的。

柯克霍夫原则(Kerckhoffs’s Principle)

该原则说明,安全系统的TCB应该是公开的,除了加密密钥本身,其他部分不应该有任何隐藏。已经有许多反例,通过隐藏实现细节来实现安全功能,希望攻击者难以通过对系统进行逆向工程来破解,但设计者不应该低估任何攻击者和攻击形式。

安全威胁

攻击面

1-1 安全处理器的潜在攻击面

攻击面是所有可用于攻击系统的载体的集合,攻击向量是攻击者破坏系统安全的方式,上图展示了不同类型的攻击向量(左边)和系统中可能成为攻击目标的部分(右边)。载体可以是硬件或软件,可以由外部或内部进行攻击,硬件攻击可能来自不受信任的硬件或外部物理攻击,软件攻击可能来自不受信任的软件或本应受保护的软件,攻击目标可以是TCB硬件、软件、或其他受保护的软件。软件对软件的攻击可能是不受信任的操作系统攻击受保护的软件,软件对硬件的攻击可能是不受信任的软件使用缓存侧信道攻击以获取信息,硬件对硬件的攻击可能是不受信任的外设试图禁用内存加密。

被动和主动攻击

被动攻击是只观察系统的运行情况的攻击类型,比如可以监听系统内部或外部的通信来试图推断敏感信息或代码,典型的例子包括侧信道攻击,从系统中收集时间、功耗等数据。主动攻击指攻击者修改系统代码或数据,比如写入一些内存位置(如尝试改变内存中的加密密钥)或执行一系列的指令(如加热芯片导致其失效),对处理器的物理攻击也属于这一类攻击。

这些攻击可以进一步分类为窥探(snooping)、欺骗(spoofing)、拼接(splicing)、重放(replay)、干扰(disturbance)。

中间人(Man-in-the-middle)攻击

中间人攻击是对通信的攻击,拦截两个受信任的组件之间的通信。中间人攻击可以是被动的(接收数据,读取数据,然后发送到目的地,不做任何修改),也可以是主动的(接收数据后修改数据或注入一些新数据)。

侧信道和隐蔽信道攻击

隐蔽信道是一种本来并非用于在发送方和接收方之间传递信息的通信信道,通常利用一些特殊方法进行通信,比如计时、功率、热辐射、电磁辐射、声音等。设计时可以进行预防,例如通过适当的进程隔离或对缓存进行分区,但是许多隐蔽信道在设计时是没有考虑到的,有许多方法可以绕开这些隔离机制。

侧信道类似于隐蔽信道,但是发送方并不打算向接收方传递信息。类似于隐蔽信道,攻击者也可以通过计时等信息来获取信息。对隐蔽信道攻击而言,发送方和接收方都在攻击者控制之下,而对侧信道来说,发送方不受攻击者的控制。同样,设计时很难考虑到各种侧信道。

处理器的侧信道和隐蔽信道一般可分为基于时间的信道(例如一个进程大量访问内存导致其他进程内存访问变慢)、基于访问的信道(例如一个进程通过对自己的内存访问进行计时来探测缓存状态)、基于痕迹(trace)的信道(例如攻击者获得内存访问的序列,并通过测量功率来推断缓存是否命中)。

设计阶段后的硬件威胁

安全处理器设计的重点是最小化TCB,并对其进行保护,所有的安全保护措施都取决于TCB的可信度,在设计时应该尝试验证TCB。然而,当硬件和软件被设计出来后,仍然有许多潜在的威胁:

  • TCB中的缺陷或漏洞:按照定义,TCB是完全可信的,但软件和硬件设计安全验证本身就是个很大的研究领域,TCB中仍然可能存在缺陷和漏洞,需要注意如何避免。

  • 硬件木马和供应链攻击:处理器可能包含多个供应商的IP块,整个系统会在多个环节中进行设计和制造,然后再被交付给客户,这个环节中的每一方都可能在其中插入硬件木马,这也是个很大的研究领域。

  • 物理探测和侵入性攻击:真实设备中的处理器可能被轻易用物理手段进行攻击,比如通过标准接口从设备中读出数据(例如移除DRAM芯片,放在另一台计算机中来读取其中的数据)。侵入性攻击如移除处理器或存储器的封装来直接访问芯片上的电路,可能通过蚀刻(etching)或钻孔(drilling),使用光学显微镜和小型金属探针来检查电路,更复杂的攻击如可以使用聚焦离子束(focused ion beam, FIB)来探测芯片上的金属层和CMOS线路,可以通过增加互连线甚至添加新的晶体管来修改芯片结构。

基本安全概念

保密性(Confidentiality)、完整性(Integrity)和可用性(Availability)

保密性指防止将敏感信息泄露给未经授权的用户,完整性指防止随意修改敏感信息而不被发现,可用性指在有需求时可以向用户提供服务。对保密性来说,注意即使攻击者只获得部分敏感信息也是危险的,可以根据这些部分信息来进行暴力破解或猜测。完整性攻击不要求攻击者了解任何信息,只需要修改某些数据就可以破坏系统,比如某个保护位或是内存系统中的部分数据。攻击者可以通过耗尽系统中的内存或其他资源来使受保护的代码无法在合理时间内执行,让系统无法为用户提供服务。

认证(Authentication)

认证也就是说确定用户是谁,通常的方法是密码。认证本质上需要完整性,攻击者不能修改认证信息,也不能编造自己的信息。

安全性和可靠性

安全性的前提是假设系统已经可以提供可靠性,也就是对随机故障或错误的保护,比如宇宙射线导致DRAM中数据出现错误。当系统不够可靠时,系统仍然不应该向潜在的攻击者传递任何信息,也不应该允许修改信息。

对称密钥加密、公钥加密、随机数生成、哈希运算、物理不可克隆函数(PUF)

这一部分属于密码学的范畴,感兴趣的读者可以阅读原书相关章节或查阅资料。

1-2 有四个数据叶节点的哈希树,根节点的哈希值取决于所有数据节点的值

This post is licensed under CC BY 4.0 by the author.

Chisel笔记(三):一生一芯第三期项目中使用Chisel语言的一些心得体会

-