Page 346 - 《软件学报》2021年第12期
P. 346

4010                                Journal of Software  软件学报 Vol.32, No.12, December 2021

         用内存损坏,然后将控制流重定向至攻击者指定的内存位置,使程序脱离正常执行流程,按攻击者的意图执行.
             (3)  侧信道攻击(side channel attack,简称 SCA).
             这类攻击往往从外部发起,围绕构成系统的硬件设备的物理特征或电气特性实施,意图通过测量、统计、
         物理观察等手段推测和获取系统敏感信息,造成信息泄露.获得的信息更可作为其他攻击的基础,形成组合攻
         击,进一步损害系统安全性.
             针对上述安全威胁,学术界和工业界提出了许多安全策略.本文将相关方案要点梳理总结如下.
             (1)    引入安全硬件,将软件安全威胁转移到硬件层面解决.
             (2)    模糊易受攻击的敏感信息,增大攻击者搜索和获取敏感信息的时间或技术成本.
             (3)    保护信息流完整性,保障程序执行安全.
             (4)    设置配套验证机制,及时发现攻击行为.
             (5)    必要时采用冗余设计,增加系统容错性,减少对特定设备的依赖.
             以下是对各类有代表性的安全威胁及其应对措施的详细介绍和分析.
         4.3.1    硬件微架构攻击的防御
             (1)  威胁分析
             硬件微架构是指令集体系结构在处理器中具体执行方法的体现,直接关系到指令系统实现系统功能的能
         力.由于硬件的生存周期相对较长,一般可达数年之久,通常需要经过多次的微代码更新来解决安全或功能性问
         题,因此微架构与微代码的设计在引入一定的灵活性的同时,也留给了恶意攻击侵入的空间.例如,微码木马可
         以事先被注入到系统的供应链中,并在硬件更新时完成潜入;当满足特定执行条件时,即可释放和执行所载有的
         恶意微码,对系统造成侵害.2021 年,Nils Albartus 等人       [120] 研究了嵌入式硬件环境下的微码木马,揭示了这一侵
         害方式的具体流程,并在一次攻击实验中成功获取了特定于架构的 AES 秘钥.
             (2)  解决方案
             应对硬件微架构攻击,可以从供应链安全和微架构安全两方面着手.供应链安全可从源头切断恶意微码的
         注入渠道,从而避免硬件微架构攻击的发生;微架构安全需要在恶意微码已经侵入时进行有效遏制,增加恶意攻
         击成功实施的困难程度.通常,微码木马包括触发器和有效负载两部分,前者用于在特定条件下触发木马,后者
         包含具体的恶意攻击代码,并将在木马被触发时发动攻击.因此,对微码进行加密或对敏感区域进行隔离,以防
         止相关信息泄露达成触发条件,是一种常见的做法.2020 年,Lee 等人                    [121] 提出了一套可定制的可信执行环境
         (trusted execution  environments,简称 TEE)开放框架 Keystone,通过构建可重用的 TEE 核心原语,实现了对不受
         信任组件的可编程层的隔离.
         4.3.2    程序劫持攻击的防御
             (1)  威胁分析
             程序劫持攻击是通过对程序的控制流进行干扰、误导、破坏,使程序按攻击者意图执行的一种攻击手段.
         制造并利用内存损坏,然后将控制流重定向至攻击者指定的内存位置,是程序劫持攻击中的典型做法                                    [122] .例如,
         缓冲区溢出攻击      [123] 可以通过构造足够长度的字符串,充满并溢出缺乏边界保护机制的缓冲区,将含有恶意代码
         地址的数据送入保存返回地址的内存区域,覆盖原有的程序返回地址.这样,在当前程序块返回时,便将自动执
         行恶意代码.Cowan 等人在他们的工作           [124] 中描述了这个过程,如图 6(a)所示.
             (2)  解决方案
             控制流完整性(control-flow integrity,简称 CFI) [125] 是应对程序劫持攻击的主要技术措施.它的核心思想是为
         程序构造对应的控制流图(control flow graph,简称 CFG),并保证程序在执行过程中严格遵守该控制流图,而不会
         跳转到图以外的其他地址范围之中.关于如何保证程序的执行严格遵守控制流图,研究人员提出了许多具体的
         方法.例如,在上文提到的缓冲区溢出攻击场景                [123] 中,基于金丝雀字(canary)的攻击检测技术便是一种可行的设
         计.金丝雀字是置于返回地址边缘的一段特殊字符,当溢出发生时,金丝雀字将首先被改变.因此,只需核对金丝
         雀字是否正确,即可判断当前是否已遭到缓冲区溢出攻击.图 6(b)描述了利用金丝雀字技术检测缓冲区溢出攻
   341   342   343   344   345   346   347   348   349   350   351