CN114981811A - 用于软件安全的装置和方法 - Google Patents
用于软件安全的装置和方法 Download PDFInfo
- Publication number
- CN114981811A CN114981811A CN202080094081.XA CN202080094081A CN114981811A CN 114981811 A CN114981811 A CN 114981811A CN 202080094081 A CN202080094081 A CN 202080094081A CN 114981811 A CN114981811 A CN 114981811A
- Authority
- CN
- China
- Prior art keywords
- read
- memory
- processor
- value
- tag
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1466—Key-lock mechanism
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/79—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
提供了一种装置,包括处理器和耦合到所述处理器的存储器。所述处理器用于将指针值加载到第一处理器寄存器中。所述指针值包括目标存储器位置的地址。然后,所述处理器执行从只读存储器加载操作。所述从只读存储器加载操作使所述处理器验证所述目标存储器位置是否标记为只读,当所述目标存储器位置标记为只读时,所述处理器将目标数据值加载到第二处理器寄存器中。当所述目标存储器位置未标记为只读时,所述处理器用于生成存储器故障。
Description
技术领域
所公开实施例的各方面大体上涉及计算机安全,更具体地,涉及防止利用编码弱点。
背景技术
许多传统的计算装置(例如手机、个人电脑、汽车等)执行高度敏感的计算机应用程序,例如金融应用程序、在线商店和关键***控制,其中软件安全至关重要。存储器不安全的编程语言(例如C和C++)可能会与不安全的编程实践和编码缺陷结合起来,使攻击者有机会利用代码。通过利用代码中的弱点,攻击者可以改写计算机存储器中的值,并获得对软件程序的完全或部分控制,并可能访问底层计算机***本身。
可以采用防止这些类型攻击的传统技术,例如堆栈canaries、地址空间布局随机化(address space layout randomization,ASLR)等。不利的是,这些方法只提供统计保护,不提供确定性保护。此外,堆栈canaries等技术也会增加内存占用和编程复杂性,这通常会导致执行时间增加。
因此,需要改进的方法和装置,其可以提供确定性保护,防止软件利用,而不增加复杂性或增加资源使用。因此,希望提供解决上述至少一些问题的方法和装置。
发明内容
所公开实施例的各方面涉及适于提供确定性保护,防止软件利用而不增加复杂性或增加资源使用的装置和方法。所公开实施例用于提供指针篡改的改进的确定性检测和攻击避免。该目的和其它目的通过独立权利要求请求保护的主题来实现。在从属权利要求中提供了其它有利修改。
根据第一方面,通过一种装置获得上述以及其它目的和优点。在一个实施例中,所述装置包括处理器和耦合到所述处理器的存储器。所述处理器用于将指针值加载到第一处理器寄存器中。所述指针值包括目标存储器位置的地址。然后,所述处理器执行从只读存储器加载操作,所述从只读存储器加载操作使所述处理器验证所述目标存储器位置是否标记为只读,当所述目标存储器位置标记为只读时,所述处理器将目标数据值加载到第二处理器寄存器中。当所述目标存储器位置未标记为只读时,所述处理器用于生成存储器故障。
在编程攻击期间,攻击者可能会试图用自己的数据替换有效的目标数据,以改变程序流程或触发其它未经授权的行为。为此,攻击者可能会使用包括攻击者的数据的不同存储器地址修改指针。由于难以修改只读存储器映射,攻击者的数据可能存储在可写存储器位置。因此,通过验证目标数据存储在标记为只读的位置中,可以检测到试图从可写存储器位置加载数据的攻击,并且可以生成故障以改变程序流程并可以避免攻击。
根据第一方面,在所述装置的一种可能的实现方式中,所述处理器包括内存标签扩展,所述目标存储器位置与目标标签相关联。所述处理器用于将所述指针值加载到所述第一处理器寄存器中,其中,所述指针值还包括关联标签。所述从只读存储器加载操作使所述处理器:将所述关联标签设置为第一标签值,其中,所述第一标签值对应于只读标签值;验证所述目标标签是否等于所述第一标签值。当所述目标标签等于所述第一标签值时,所述处理器将所述数据值加载到所述第二处理器寄存器中。当所述目标标签不等于所述第一标签值时,所述处理器生成存储器故障。利用内存标签扩展执行从只读存储器加载操作可以具有确定性安全益处,而不会产生与扩展处理器的指令集架构以包括额外的特殊用途加载指令相关联的成本。
根据第一方面,在所述装置的一种可能的实现方式中,所述处理器包括指针验证特征,并且所述处理器用于将所述指针值加载到所述第一处理器寄存器中。所述指针值包括指针验证码,所述指针验证码基于只读修饰符。所述处理器执行所述从只读存储器加载操作,其中,所述从只读存储器加载操作使所述处理器基于所述只读修饰符验证所述指针验证码。当所述指针验证码有效时,所述处理器将所述数据值加载到所述第二处理器寄存器中;或当所述指针验证码无效时,所述处理器生成存储器故障。利用指针验证特征执行从只读存储器加载操作可以具有所公开实施例的改进的安全益处,而不会产生与扩展指令集架构以包括额外的特殊用途加载指令相关联的成本。
根据第一方面,在所述装置的一种可能的实现方式中,所述装置还包括存储器管理单元,所述处理器用于基于缓存值和转译后备缓冲区验证所述目标存储器位置是否标记为只读。使用如MMU等存储器管理硬件验证只读标记提高了计算装置的整体性能。
根据第一方面,在所述装置的一种可能的实现方式中,所述存储器故障使所述处理器改变程序流程并执行纠正动作。在检测到指针篡改时改变程序流程支持通过纠正操作(例如中止程序执行)避免攻击。
根据第二方面,通过一种方法获得上述以及其它目的和优点。在一个实施例中,所述方法包括将指针值加载到第一处理器寄存器中。所述指针值包括目标存储器位置的地址。所述方法包括执行从只读存储器加载操作,其中,所述从只读存储器加载操作包括:验证所述目标存储器位置是否标记为只读;当所述目标存储器位置标记为只读时,将所述数据值加载到第二处理器寄存器中。当所述目标存储器位置未标记为只读时,所述方法生成存储器故障。
在编程攻击期间,攻击者可能会试图用自己的数据替换有效的目标数据,以改变程序流程或触发其它未经授权的行为。为此,攻击者可以修改指针,以指向攻击者的数据,该攻击者的数据可能位于可写存储器位置。由于所描述的实施例验证目标数据的只读属性,因此检测到试图从可写存储器位置加载数据的攻击,并生成故障以改变程序流程,并避免为攻击提供机会。
根据第二方面,在所述装置的一种可能的实现方式中,所述目标存储器位置与目标标签相关联,所述方法包括将所述指针值加载到所述第一处理器寄存器中,其中,所述指针值还包括关联标签。所述方法执行所述从只读存储器加载操作,其中,所述从只读存储器加载操作包括:将所述关联标签设置为第一标签值,其中,所述第一标签值对应于只读标签值;验证所述目标标签是否等于所述第一标签值。当所述目标标签等于所述第一标签值时,所述方法将所述数据值加载到所述第二处理器寄存器中;或当所述目标标签不等于所述第一标签值时,生成存储器故障。利用内存标签扩展执行从只读存储器加载操作可以具有所公开实施例的改进的安全益处,而不会产生与扩展指令集架构以包括额外的特殊用途加载指令相关联的成本。
根据第二方面,在所述装置的一种可能的实现方式中,所述方法包括:将所述指针值加载到第一处理器寄存器中,其中,所述指针值还包括指针验证码,所述指针验证码基于只读修饰符;执行所述从只读存储器加载操作。所述从只读存储器加载操作包括:基于所述只读修饰符验证所述指针验证码;当所述指针验证码有效时,将所述数据值加载到所述第二处理器寄存器中。当所述指针验证码无效时,生成存储器故障。存储器故障使计算装置可以从无效指针条件中恢复,例如通过中止正在执行的程序,从而避免可能已经发起的任何攻击。利用指针验证特征执行从只读存储器加载操作可以具有所公开实施例的改进的安全益处,而不会产生与扩展指令集架构以包括额外的特殊用途加载指令相关联的成本。
根据第三方面,通过非瞬时性计算机可读介质获得上述和其它目的和优点,所述非瞬时性计算机可读介质上存储有程序指令,当处理器执行所述程序指令时,所述程序指令使所述处理器执行根据权利要求6至8中任一项所述的方法。非瞬时性计算机可读介质提供了在同一或其它处理器上分发和重用该方法的手段。
示例性实施例的这些和其它方面、实现方式和优点将从结合附图考虑的本文描述的实施例中变得显而易见。但应理解,此类描述和附图仅用于说明的目的,而不能作为对所公开发明的限制;对本发明的任何限制,应参考所附权利要求书。本发明的附加方面和优点将在随后的说明书阐述,并且,部分方面和优点在说明书中显而易见,或者可以通过实施本发明而了解。此外,本发明的方面和优点可以通过所附权利要求书中特别指出的手段或结合方式实现和获得。
附图说明
在本发明的以下详述部分中,将参考附图中所示出的示例性实施例来详细解释本发明,其中:
图1示出了结合所公开实施例的各方面,描述受保护的从只读存储器加载操作的示例性装置的示意性框图;
图2示出了结合所公开实施例的各方面,描述对无保护加载操作的攻击的示例性装置的示意性框图;
图3示出了结合所公开实施例的各方面,描述检测到的攻击的示例性装置的示意性框图;
图4示出了所公开实施例的各方面提供的示例性方法的流程图;
图5示出了结合所公开实施例的各方面,用于执行从只读存储器加载操作的示例性方法的流程图;
图6示出了结合所公开实施例的各方面,用于执行从只读存储器加载操作的示例性方法的流程图。
具体实施方式
图1示出了所公开实施例的各方面提供的示例性装置100的示意性框图。所公开实施例的各方面旨在防止利用存储器不安全的计算语言(例如C及其衍生语言C++和Objective C)中的编程弱点。
如图1所示,装置100(也可以称为计算装置)包括通信耦合到存储器104的处理器102。虽然图1仅示出了一个存储器104,但应理解,存储器104可以包括一个或多个存储器块或模块。存储器104可以是各种类型的易失性和非易失性计算机存储器的组合,例如只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁盘或光盘、闪存或其它合适类型的计算机存储器。
在一个实施例中,处理器102用于将指针值120加载到第一处理器寄存器112中。在本示例中,指针值120包括目标存储器位置108的地址。处理器102用于执行从只读存储器加载操作。从只读存储器加载操作使处理器102验证目标存储器位置108是否标记为只读。当目标存储器位置108标记为只读时,处理器102用于将数据值118加载到第二处理器寄存器114中。如果目标存储器位置108未标记为只读,则处理器用于生成存储器故障310。以这种方式,所公开实施例的各方面用于提供指针篡改的改进的确定性检测和攻击避免。
处理器102可以是任何合适类型的计算机处理装置。例如,处理器102可以是单个处理设备,或者可以包括多个处理设备,包括专用设备,例如数字信号处理(digitalsignal processing,DSP)设备、微处理器、专用处理设备、并行处理核心或通用计算机处理器。在某些实施例中,处理器102和存储器104可以并入片上***(system on a chip,SoC)设备或芯片组中。处理器102用于从存储器104读取程序指令,并执行本文描述的任何方法和过程。处理器102还可以包括与图形处理单元(graphics processing unit,GPU)协同工作的CPU,图形处理单元可以包括数字信号处理器(digital signal processor,DSP)或其它专用图形处理硬件。
在所示的实施例中,处理器102结合加载-存储架构或指令集架构(instructionset architecture,ISA),其中,处理器指令被组织成两类:用于在存储器104与处理器寄存器112、114之间加载和存储数据的存储器访问指令,以及在一个或多个处理器寄存器112、114之间执行的运算逻辑单元(arithmetic logic unit,ALU)操作。
当准备用于执行的计算机程序时,处理器102用所需的数据和/或程序指令填充多个存储器位置106。每个存储器位置可以与访问限制116相关联或用其标记,其中,访问限制116控制在计算机程序执行期间允许的访问类型。某些位置将被标记为只读(READ),这表示在程序执行期间不能写入或以其它方式修改数据,而其它存储器位置可以被标记为可读和可写(READ&WRITE)。可写数据是指在程序执行期间可以修改值的数据或存储器位置。
例如,在程序执行期间将需要的数据值118可以加载到存储器位置108中。然后,存储器位置108可以被标记(116)为只读(READ)。例如,当已知数据值118在计算机程序的整个执行过程中保持恒定时,或者当数据值对程序的操作至关重要并且修改可能导致不希望的行为时,可以完成这种只读标记(READ)。
在计算机程序的执行期间,通过将指针值120加载(122)到第一处理器寄存器112中,从存储器104检索所需的数据值118。指针值120包括存储器地址。在程序的正常执行期间,存储器地址对应于目标数据值118的存储器位置。指针还可以包括应与目标数据值118相关联的预期访问限制的指示,例如目标数据值118被标记为只读(READ)的指示。
然后,处理器102执行特殊加载操作,以从目标存储器位置108检索目标数据值118,并将数据值118加载到处理器寄存器114中。特殊加载操作(本文称为从只读存储器加载操作)用于验证与目标存储器位置108相关联的访问限制(READ)实际上是只读的,并且仅在确定(124)目标存储器位置108为只读(READ)时加载数据值118。当目标存储器位置108不是只读时,从只读存储器加载操作用于生成存储器故障。当目标存储器位置108是只读时,将目标数据值118加载(126)到处理器寄存器114中,在处理器102的后续操作期间,可以使用目标数据值118或对其操作。当目标存储器位置108不是只读时,即目标存储器位置是可写的,生成存储器故障,使处理器102可以改变程序流程并适当地处理存储器故障或从存储器故障中恢复。
在图1的示例性实施例中,当目标存储器位置108不是只读(READ)时,处理器102可以推断攻击正在进行,并且处理器102可以采取适当的动作来终止当前执行的程序或以其它方式保护装置100免受未经授权的访问。
在某些实施例中,装置100可以包括专用硬件,例如存储器管理单元(memorymanagement unit,MMU)或存储器保护单元(memory protection unit,MPU),以促进和加速存储器访问。例如,在一个实施例中,MMU用于缓存与目标存储器位置108相关联的只读属性或只读标记。然后,可以在转译后备缓冲区(translation look aside buffer,TLB)中检查只读标记(READ),这些TLB存在于包括MMU的许多传统处理器架构中。
图2示出了所公开实施例的各方面提供的示例性装置100的示意性框图。在示例性装置100中,处理器102结合了传统的加载操作以及上文参考图1描述的新公开的从只读存储器加载操作。
考虑攻击者如何利用传统的加载操作来访问未授权的资源,这是很有启发性的。图2描述了利用传统的加载指令用攻击者数据204替换只读数据值118的场景。在所描绘的场景中,攻击者希望用不同的攻击者数据202替换只读数据118。为了完成这种替换,攻击者将攻击者数据204放置在可写存储器位置中,并使用攻击者数据204的存储器位置212修改指针202。处理器102将在计算机程序的执行过程中,将修改后的指针202加载(206)到处理器寄存器112中。然后,处理器102将使用修改后的指针值202访问(208)包括攻击者数据204的新存储器位置212。
与上述从只读存储器操作加载相比,传统的加载操作不会检查与存储器位置212相关联的读取和写入(READ&WRITE)访问属性,因此将会将攻击者数据204加载(210)到第二处理器寄存器114中。在执行传统的加载操作之后,攻击者已经成功地用自己的攻击者数据204替换原始只读程序数据118。
现在参考图3,示出了如何在装置100中使用新公开的从只读存储器加载操作来检测上文参考图2所述的攻击并从中恢复的描述。图3示出了如图2所示的相同装置100的示意性框图。与图2中描述的场景相比,图3中描述的场景在加载只读数据118时使用从只读存储器加载操作。
如上所述,攻击者希望用自己的攻击者数据304替换只读数据118。为此,攻击者将攻击者数据304放置在可写存储器位置312中,并使用攻击者数据304的存储器位置修改指针302。然后,将修改后的指针302加载到第一处理器寄存器112中。在图3中描述的场景中,在加载数据时使用新公开的来自只读操作的加载。来自只读操作的加载访问由修改后的指针302标识的存储器位置312,与传统的加载操作相比,来自只读存储器操作的加载验证目标存储器位置312是否标记为只读。由于攻击者数据位于可写存储器位置312中,只读验证失败,生成(310)存储器故障,并且攻击者数据304没有加载到第二处理器寄存器中。生成的存储器故障310使处理器102改变程序流程,从而使处理器102有机会适当地从攻击中恢复。
有利地,上文参考装置100描述的示例性实施例的几种实现方式可以用于在各种计算装置内提供改进的软件安全。在一个实施例中,可以扩展现有的指令集架构,以包括基于上文公开的从只读存储器加载操作的新加载指令集。新指令集可以适于仅从标记为只读的存储器位置或地址加载数据。有利地,来自只读存储器指令的新加载集可以添加到传统的指令集架构中,例如由ARM HOLDINGS设计的ARMv8架构和由加州大学伯克利分校设计的RISC-V架构提供的指令集。
或者,在某些实施例中,可以实现上述从只读存储器加载操作,在计算机程序的编译和构建期间将新的设计模式结合在程序代码中。
在一个实施例中,编译器可以适于使用内存着色或内存标记特征(例如在某些ARMv8处理器架构中可用的内存标签扩展(memory tag extension,MTE)特征),以在对程序的源代码进行编译时创建从只读存储器加载操作。例如,可以为只读数据保留一个或多个不同的标签值。然后,从只读存储器加载操作可以在访问目标存储器位置之前将与已知为只读的存储器位置相关联的标签设置为保留标签值。然后,当目标存储器位置与保留标签值不关联时,用于访问目标存储器位置的处理器或存储器子***将生成存储器故障。
在一个示例性实施例中,指针验证特征(例如由ARMv8架构提供的指针验证扩展或类似的指令集架构扩展)可以用于提供本文公开的从只读存储器加载操作保护。编译器可以适于通过在生成只读存储器位置的指针验证码期间使用一组不同的修饰符来标记只读存储器位置。这可以通过生成指针验证码(pointer authentication code,PAC)并将PAC关联或将PAC与存储器地址一起包括在每个指针值中来实现。基于只读修饰符值生成对应于只读存储器位置的PAC,并且基于不同或正常的修饰符值生成对应于可写存储器位置的PAC。例如,只读修饰符值可以通过反转正常修饰符值中的一个或多个比特来确定。
为了有利地利用上述安全优点,从只读存储器加载操作应在编译时合并到计算机程序中。编译器可以确定存储器访问何时在统计上是目标只读存储器已知的,并标记这些已知的只读访问。只读访问可以根据需要使用上述任何示例性实施例或使用上文公开实施例的组合来标记和保护。
当编译的程序运行时,处理器102将强制标记为只读(READ)的存储器位置映射到只读存储器区域。这些只读存储器区域可以根据需要通过使用MMU或MPU或其它合适的存储器管理方法来管理或强制。
例如,当使用MMU时,与目标存储器位置相关联的只读属性可以从大多数传统MMU中可用的转译后备缓冲区(translation look-aside buffer,TLB)中缓存和检查。因此,可以包括新颖的从只读存储器加载操作,而不需要大量性能成本。
图4示出了所公开实施例的各方面提供的示例性方法400的流程图。所公开实施例的各方面旨在防止利用存储器不安全的计算语言(例如C及其衍生语言C++和Objective C)中的编程弱点。示例性方法400提供了以前在计算装置(例如,使用基于加载-存储指令集架构的处理器的计算装置等)中没有的显著的安全相关优点。流行的加载-存储处理器架构包括流行的ARMv8和RISC-V处理器架构。
示例性方法400在加载和准备用于执行的程序期间开始。处理器将目标数据值加载(402)到存储器中,并将关联的目标存储器位置标记(404)为只读。本文所使用的术语“目标数据”或“目标数据值”是指加载到处理器寄存器中的数据值,术语“目标存储器位置”是指存储目标数据值的存储器位置或存储器地址。将目标存储器位置标记为只读可以以任何合适的方式完成,并允许在访问存储器位置时检测存储器位置的只读属性,而不实际将目标数据值加载到处理器寄存器中。例如,目标存储器位置可以通过如MMU或MPU等存储器子***映射为只读。或者,如下文将详细描述的,目标存储器位置可以基于内存着色或内存标记方法,或通过指针验证机制被标记为只读。
在程序执行期间,当处理器需要使用目标数据值时,处理器将会将指针值加载(406)到第一处理器寄存器中。加载的指针值包括目标数据值的存储器地址,并且当需要时可以包括目标存储器位置的只读属性的指示。
然后,处理器执行从只读存储器加载操作或过程414。该从只读存储器加载操作414确保加载到处理器寄存器中的目标数据实际上是只读值,并且没有被攻击者提供的值替换。
在加载目标数据值之前,处理器验证(408)目标存储器位置是否标记为只读。在一个实施例中,目标存储器位置可以通过在处理器或合适的存储器管理子***(例如MMU或MPU)内映射被标记为只读并且在关联程序的执行期间不可修改。
当目标存储器位置被标记为只读时,将目标数据值加载(410)到所需的处理器寄存器中,在该处理器寄存器中,目标数据值可供执行的计算机程序的后续部分使用。一旦目标数据被加载(410),程序执行可以根据正常程序流程继续(416)。
当目标存储器位置未标记为只读时,验证(408)失败,并生成(412)存储器故障。生成(412)存储器故障改变执行程序的正常流程,并允许适当地处理(418)故障。例如,当验证失败时,攻击可能正在进行,并且可能希望通过终止程序的执行并从存储器卸载其内容来处理故障418。在某些实施例中,通过记录关于故障的信息来处理故障418可以有利于促进攻击源的标识并减轻其影响。
在某些实施例中,方法400可以通过扩展现有指令集架构(例如上述ARMv8或RISC-V架构)来执行,以包括新的加载指令集,该新的加载指令集用于专门从标记为只读的存储器位置或存储器地址加载。新的加载指令集(本文称为来自只读指令的加载)适于当被引用的存储器位置是可写的或不是只读时生成存储器故障,并仅在引用的存储器位置标记为只读时加载包括的数据值。
在一个实施例中,编译器适于利用内存标记特征来提供来自只读操作的加载,而不扩展处理器架构以包括专用指令。合适的内存着色或标记功能的一个示例是ARMv8架构提供的内存标签扩展(memory tag extension,MTE)。例如,MTE为每个存储器地址添加一个标签(如四位),并为每个存储器颗粒分配一个标签值。在读取或写入存储器位置时,添加到存储器地址的标签值必须与分配给对应存储器位置的标签值匹配。当标签值不匹配时,生成存储器故障,或者当标签值匹配时,允许读取或写入操作正常进行。
在编译计算机程序期间,可以为只读存储器位置保留一个或多个不同的标签值。这些保留的标签值在本文称为只读标签值。只读存储器位置将被分配只读标签值,而可写存储器位置将被分配剩余的未保留标签值之一。编译器将确保与用于从只读位置加载数据的存储器地址或指针值关联的标签值设置为所需的只读标签值。在加载和准备用于执行的编译程序时,通过将合适的只读标签值分配给对应的存储器位置,只读存储器位置将被标记为只读。
现在参考图5,示出了所公开实施例的各方面提供的示例性方法500的流程图。示例性方法500执行从只读存储器加载操作,用于阻止软件攻击,例如基于指针值修改的攻击。
示例性方法500在指针值被加载(406)到第一处理器寄存器中之后开始。在示例性实施例中,加载的指针值包括要加载到第二处理器寄存器中的目标数据值的存储器地址,并且还包括关联标签。如上所述,关联标签是二进制值,例如四位二进制值,用于控制存储器位置的读取和写入。虽然使用四位二进制值作为示例,但本领域技术人员将容易认识到,在不偏离所公开实施例的精神和范围的情况下,可以有利地使用多于或少于四位。
在示例性实施例中,关联标签被设置(502)为只读标签值。用于设置关联标签的只读标签值与加载程序期间分配给目标存储器位置的标签值相同。在加载目标数据值之前,将分配给目标存储器位置的标签值与加载指针中设置的只读标签值进行比较(504)。当标签值匹配(510)时,将目标数据值加载(506)到第二处理器寄存器中,当标签值不匹配(512)时,生成(508)存储器故障。生成(508)存储器故障改变了执行程序的控制流程,从而有机会避免攻击。
在示例性方法400的一个实施例中,有利的是,采用指针验证机制以帮助执行从只读存储器加载操作414。
指针验证机制是处理器扩展,它包括存储在存储器位置中的内存指针中的指针验证码(pointer authentication code,PAC)。PAC是基于密钥、上下文值和指针值或存储器地址生成的。这些密钥是短暂的,可以根据启动或根据进程生成。可选地,修饰符或盐值可以在编译时确定,并在生成PAC时包括在内。当指针从存储器加载时,可以对PAC进行验证,以防止篡改。验证需要了解修饰符,因此,通过使用为只读存储器位置保留的特殊修饰符,基于只读修饰符验证PAC还提供了目标存储器位置标记为只读的验证。本文所使用的术语“只读修饰符”或“只读修饰符值”是指保留用于生成只读存储器位置的PAC的特殊修饰符值。编译器负责生成合适的签名和验证指令,并确定只读修饰符值和其它修饰符值。
参考图6,示出了结合所公开实施例的各方面,用于执行从只读存储器加载操作的示例性方法600的流程图。示例性方法600示出了从只读存储器加载操作,其适合用作上文参考图4所述的示例性方法400中的从只读存储器加载操作414。在上述示例性方法400的上下文中描述示例性的从只读存储器加载操作600,以帮助理解。
在一个实施例中,在结合指针验证机制的处理器上采用示例性方法400。一个实施例将目标数据值加载(402)到存储器中,并将存储器标记(404)为只读。将存储器标记为只读可以如上所述通过基于MMU、MPU或其它合适的存储器管理方案将目标存储器位置映射为只读来完成。然后,将指针加载(406)到第一处理器寄存器中。
加载的指针包括存储器地址,还包括PAC,其中,PAC基于只读修饰符。在示例性实施例中,当为已知为只读的存储器位置生成PAC时使用的修饰符与用于其它存储器位置(例如用于可写存储器位置)的修饰符的计算方式不同。例如,在用于为只读存储器地址生成PAC的修饰符中,位可以被反转,而当修饰符用于为可写存储器位置生成PAC时,位不会被反转。使用不同的修饰符(例如具有反转位的修饰符)确保对应于可写存储器地址的PAC至少在统计上不会与对应于指向只读存储器位置的合法指针的PAC匹配。
示例性的来自只读存储器的加载方法600验证(608)PAC是基于只读修饰符生成的。在PAC验证608期间使用只读修饰符确保目标存储器位置标记为只读。因此,成功的PAC验证可以用于验证目标存储器位置是否为只读。
有效的指针验证码表示包括在加载指针中的PAC是基于只读修饰符生成的。因此,基于只读修饰符验证包括在加载指针中的PAC提供了目标存储器位置是只读的指示。当PAC有效620时,将数据值加载(610)到第二处理器寄存器中。
当指针验证码无效622时,目标存储器位置可以不是只读的。无效的PAC会导致无效的存储器指针,当用于访问存储器时,该存储器指针会生成(612)存储器故障。存储器故障改变执行程序的控制流程,从而允许执行一组替代操作或步骤,以确保以合适的方式处理故障。例如,由试图从可写存储器位置加载已知只读值引起的存储器故障可能指示攻击正在进行中,并且可以中止正在执行的程序。例如,处理生成的存储器故障(例如在步骤418中执行的处理)可以包括在审计或其它合适的日志中记录与存储器故障原因有关的信息,然后从存储器中刷新正在执行的程序。
在某些实施例中,可能希望包括在本文中称为来自可写存储器操作的加载的附加专用加载操作。从可写存储器加载操作与上述从只读存储器加载操作类似,但会验证不同的存储器访问属性。与从只读存储器加载操作相比,当目标存储器位置标记为可写时,从可写存储器加载操作将加载目标数据值,当目标存储器位置标记为只读时,将生成存储器故障。
因此,尽管文中已示出、描述和指出应用于本发明的示例性实施例的本发明的基本新颖特征,但应理解,本领域技术人员可以在不脱离本发明的精神和范围的情况下,对所示出的设备和方法的形式和细节以及设置操作进行各种省略、取代和改变。进一步,明确地希望以大体相同的方式执行大体相同的功能以实现相同结果的那些元件的所有组合均在本发明的范围内。此外,应认识到,结合所公开的本发明的任何形式或实施例进行展示和/或描述的结构和/或元件可作为设计选择的通用项而并入所公开或描述或建议的任何其它形式或实施例中。因此,其意图仅如所附权利要求的范围所表明的那样加以限制。
Claims (9)
1.一种装置(100),其特征在于,包括通信耦合到存储器(104)的处理器(102),其中,所述处理器(102)用于:
将指针值(120)加载到第一处理器寄存器(112)中,其中,所述指针值(120)包括目标存储器位置(108)的地址;
执行从只读存储器加载操作,其中,所述从只读存储器加载操作使所述处理器(102):
验证所述目标存储器位置(108)是否标记为只读;
当所述目标存储器位置(108)标记为只读时,将数据值(118)加载到第二处理器寄存器(114)中,或
当所述目标存储器位置(108)未标记为只读时,生成存储器故障(310)。
2.根据权利要求1所述的装置(100),其特征在于,所述处理器(102)包括内存标签扩展,所述目标存储器位置(108)与目标标签相关联,其中,所述处理器(102)用于:
将所述指针值(120)加载到所述第一处理器寄存器(112)中,其中,所述指针值还包括关联标签;
执行所述从只读存储器加载操作,其中,所述从只读存储器加载操作使所述处理器(102):
将所述关联标签设置为第一标签值,其中,所述第一标签值对应于只读标签值;
验证所述目标标签是否等于所述第一标签值;
当所述目标标签等于所述第一标签值时,将所述数据值(118)加载到所述第二处理器寄存器(114)中;或
当所述目标标签不等于所述第一标签值时,生成存储器故障。
3.根据权利要求1所述的装置(100),其特征在于,所述处理器(102)包括指针验证特征,并且所述处理器(102)用于:
将所述指针值(120)加载到第一处理器寄存器(112)中,其中,所述指针值(120)包括指针验证码,并且所述指针验证码基于只读修饰符;
执行所述从只读存储器加载操作,其中,所述从只读存储器加载操作使所述处理器(102):
基于所述只读修饰符验证所述指针验证码;
当所述指针验证码有效时,将所述数据值(118)加载到所述第二处理器寄存器(114)中;或
当所述指针验证码无效时,生成存储器故障。
4.根据上述权利要求中任一项所述的装置(100),其特征在于,所述装置(100)还包括存储器管理单元(128),所述处理器(102)用于基于缓存值和转译后备缓冲区验证所述目标存储器位置(108)是否标记为只读。
5.根据上述权利要求中任一项所述的装置(100),其特征在于,所述存储器故障使所述处理器(102)改变程序流程并执行纠正动作。
6.一种方法(400),其特征在于,包括:
将指针值加载(406)到第一处理器寄存器中,其中,所述指针值包括目标存储器位置的地址;
执行(414)从只读存储器加载操作,其中,所述从只读存储器加载操作包括:
验证(408)所述目标存储器位置是否标记为只读;
当所述目标存储器位置标记为只读(420)时,将所述数据值加载(410)到第二处理器寄存器中;或
当所述目标存储器位置未标记为只读(422)时,生成(412)存储器故障。
7.根据权利要求6所述的方法(400),其特征在于,所述目标存储器位置与目标标签相关联,
所述指针值还包括关联标签;所述方法(400)还包括:
执行(414)所述从只读存储器加载操作,其中,所述从只读存储器加载操作(414)包括:
将所述关联标签设置(502)为第一标签值,其中,所述第一标签值对应于只读标签值;
验证(504)所述目标标签是否等于所述第一标签值;
当所述目标标签等于所述第一标签值(510)时,将所述数据值加载(506)到所述第二处理器寄存器中;或
当所述目标标签不等于所述第一标签值(512)时,生成(508)存储器故障。
8.根据权利要求6所述的方法(400),其特征在于,所述指针值还包括指针验证码,所述指针验证码基于只读修饰符;所述方法(400)还包括:
执行(414)所述从只读存储器加载操作,其中,所述从只读存储器加载操作包括:
基于所述只读修饰符验证(608)所述指针验证码;
当所述指针验证码有效(620)时,将所述数据值加载(610)到所述第二处理器寄存器中;或
当所述指针验证码无效(622)时,生成(612)存储器故障。
9.一种非瞬时性计算机可读介质,其特征在于,存储有程序指令,当处理器执行所述程序指令时,所述程序指令使所述处理器执行根据权利要求6至8中任一项所述的方法(400)。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/EP2020/051773 WO2021148134A1 (en) | 2020-01-24 | 2020-01-24 | Apparatus and method for software security |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114981811A true CN114981811A (zh) | 2022-08-30 |
Family
ID=69192085
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080094081.XA Pending CN114981811A (zh) | 2020-01-24 | 2020-01-24 | 用于软件安全的装置和方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114981811A (zh) |
WO (1) | WO2021148134A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11989280B2 (en) | 2021-09-17 | 2024-05-21 | Microsoft Technology Licensing, Llc | Pointer authentication failure detection |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8464011B2 (en) * | 2008-10-27 | 2013-06-11 | Advanced Micro Devices, Inc. | Method and apparatus for providing secure register access |
US9514305B2 (en) * | 2014-10-17 | 2016-12-06 | Qualcomm Incorporated | Code pointer authentication for hardware flow control |
US10936713B2 (en) * | 2015-12-17 | 2021-03-02 | The Charles Stark Draper Laboratory, Inc. | Techniques for metadata processing |
-
2020
- 2020-01-24 CN CN202080094081.XA patent/CN114981811A/zh active Pending
- 2020-01-24 WO PCT/EP2020/051773 patent/WO2021148134A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2021148134A1 (en) | 2021-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11113384B2 (en) | Stack overflow protection by monitoring addresses of a stack of multi-bit protection codes | |
US9514305B2 (en) | Code pointer authentication for hardware flow control | |
TWI352289B (en) | Apparatus of providing extended memory protection | |
JP5500458B2 (ja) | プロセッサメインメモリのメモリコンテンツのセキュリティ保護 | |
US8375219B2 (en) | Program and operation verification | |
US20150058979A1 (en) | Processing system | |
CN105637486B (zh) | 内存完整性检查 | |
CN111837111A (zh) | 用于存储有界指针的装置和方法 | |
JP2011170836A (ja) | 情報処理装置及びプログラム、情報処理方法、記録媒体 | |
CN112639789A (zh) | 用于存储器完好性检查的完好性树 | |
TW201945940A (zh) | 隨機標籤設定指令 | |
JP2021512400A (ja) | メモリ・アクセスにおける保護タグ・チェックの制御 | |
US7774587B2 (en) | Dynamic redundancy checker against fault injection | |
US20230236925A1 (en) | Tag checking apparatus and method | |
Unterguggenberger et al. | Multi-tag: A hardware-software co-design for memory safety based on multi-granular memory tagging | |
CN114981811A (zh) | 用于软件安全的装置和方法 | |
TWI787451B (zh) | 用於資料處理的方法、設備、電腦程式、與儲存器媒體 | |
US9639477B2 (en) | Memory corruption prevention system | |
CN112948863B (zh) | 敏感数据的读取方法、装置、电子设备及存储介质 | |
US11914522B2 (en) | Verifying address translation integrity | |
US11113399B2 (en) | Electronic apparatus and control method of electronic apparatus | |
CN111898120A (zh) | 控制流完整性保护方法及装置 | |
EP3387535B1 (en) | Apparatus and method for software self test | |
CN111566628B (zh) | 控制存储器访问中的守卫标签检查的设备和方法 | |
Huang et al. | Fast Out-of-Band Data Integrity Monitor to Mitigate Memory Corruption Attacks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |