CN117642741A - 用于指针认证的装置和方法 - Google Patents

用于指针认证的装置和方法 Download PDF

Info

Publication number
CN117642741A
CN117642741A CN202280049880.4A CN202280049880A CN117642741A CN 117642741 A CN117642741 A CN 117642741A CN 202280049880 A CN202280049880 A CN 202280049880A CN 117642741 A CN117642741 A CN 117642741A
Authority
CN
China
Prior art keywords
pointer
signature
address
address prediction
instruction
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
Application number
CN202280049880.4A
Other languages
English (en)
Inventor
亚历山大·阿尔佛雷德·霍尔农
伊恩·迈克尔·考尔菲尔德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN117642741A publication Critical patent/CN117642741A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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/54Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)

Abstract

一种装置具有用于执行指令的处理电路和用于存储地址预测信息的地址预测存储电路,该地址预测信息用于预测要由该处理电路执行的即将到来的指令。该处理电路响应于用于生成指针的指针签名的指令,基于该指针的地址和密码密钥生成该指针的该指针签名。该地址预测存储电路还被配置为存储该指针的地址预测信息,该地址预测信息包括该指针。该处理电路响应于用于认证给定指针的指令,基于该给定指针的地址预测信息获得所预测指针签名;将所预测指针签名与由用于认证的该指令标识的指针签名进行比较;以及响应于该比较检测到匹配,确定该给定指针有效。

Description

用于指针认证的装置和方法
本公开涉及数据处理领域。更具体地,本公开涉及指针认证。
数据处理装置采用指针认证来防止对指针的意外或恶意修改。这种修改可能被用来更改程序流,并由此允许执行非预期的和潜在恶意的代码或者允许以恶意方式执行通常安全的代码。指针认证可涉及生成指针的指针签名或指针认证代码。该指针签名可基于密码密钥并使用密码操作来生成,使得在不知道密码密钥的情况下,不能轻易地生成有效的指针签名。指针稍后可被认证或验证以标识自生成指针签名以来指针是否已被篡改。如果指针已被修改,则装置可检测到指针签名不是指针的正确指针签名,并且确定指针无效。
在一个示例性布置中,提供了一种装置,该装置包括:处理电路,该处理电路用于执行指令;地址预测存储电路,该地址预测存储电路用于存储用于预测要由该处理电路执行的即将到来的指令的地址预测信息;其中该处理电路响应于用于生成指针的指针签名的指令,至少部分地基于该指针的地址和密码密钥生成该指针的该指针签名;该地址预测存储电路被配置为存储该指针的地址预测信息,该地址预测信息至少包括该指针;并且该处理电路响应于用于认证给定指针的指令:基于该给定指针的地址预测信息获得所预测指针签名;将所预测指针签名与由用于认证的该指令标识的指针签名进行比较;以及响应于该比较检测到匹配,确定该给定指针有效。
在另一个示例性布置中,提供了一种认证指针的方法,该方法包括:响应于用于生成指针的指针签名的指令,至少部分地基于该指针的地址和密码密钥生成该指针的该指针签名;在地址预测存储电路中存储该指针的地址预测信息,该地址预测信息至少包括该指针,该地址预测信息用于预测由处理电路执行的即将到来的指令;以及响应于接收到用于认证给定指针的指令:基于该给定指针的地址预测信息获得所预测指针签名;将所预测指针签名与由用于认证的该指令标识的指针签名进行比较;以及响应于该比较检测到匹配,确定该给定指针有效。
将参考如附图所示的本发明的实施方案,仅以举例的方式进一步描述本发明,其中:
图1是其中可采用本文所述的技术的装置的框图;
图2是与进入函数和从函数返回相关联的程序代码的示例;
图3A和图3B分别示意性地示出了用于生成和认证指针的方法;
图4A示意性地示出了用于生成指针签名的方法,其中地址预测信息存储到地址预测存储电路;
图4B示意性地示出了用于利用从地址预测信息获得的所预测指针签名来认证指针的第一方法;
图4C示意性地示出了用于利用从地址预测信息获得的所预测指针签名来认证指针的第二方法;
图5A至图5C是示出可用本发明技术实现的效率改进的时序图;
图6示出了增强指针,其中用指针签名替换指针的位的子集;
图7示出了指针的示例性地址预测信息;
图8是示出生成指针签名的方法的流程图;并且
图9是示出认证指针的方法的流程图。
在参考附图讨论实施方案之前,提供了对实施方案的以下描述。
如前所提及,指针认证可用于检测指针何时已被修改。处理电路可被布置为基于指针的地址生成指针签名(或指针认证代码)。指针签名可通过对指针的地址执行的密码操作和存储在装置中的密码密钥的方式来生成。
例如,当要将指针存储在存储器系统中时,可生成指针签名。例如,在函数调用时,处理电路可被布置为在存储器系统中存储指示在函数返回时程序流应分支到的返回地址的指针。为了防止对存储在存储器系统中的指针的意外或恶意修改,处理电路可在将指针存储到存储器系统之前生成指针的指针签名或指针认证代码。指针签名稍后可被认证(或验证)以确定在引用与指针相关联的存储器位置之前(例如,在从函数返回之前)指针是否已被篡改。
在认证指针签名时,处理电路确定指针签名是否对应于从存储器系统检索的指针的存储器地址。这可例如通过使用相同密码操作并且基于从存储器系统检索的指针以及用于生成测试签名的密码密钥生成测试签名来进行。如果该测试签名与从存储器系统检索的签名匹配,则处理电路可确定指针签名有效,并且因此可使用该指针。另一方面,如果签名不匹配,则处理电路可确定签名无效。在该基础上,处理电路可阻止使用该指针和/或引发异常。
因此,该技术可用于检测对指针的修改。也就是说,如果在已生成签名之后指针的地址被修改,则认证过程将生成与指针签名不同的测试签名,并且处理电路将检测到指针签名对于该指针无效。因此,如果在不知道用于生成签名的密码密钥和密码操作的情况下,存储器系统中的指针的地址被恶意地或意外地修改,则不可生成所修改的指针的有效签名,并且因此指针签名将无效。
因此,该方法提供了防止对指针的修改的增加的安全性。由于当控制程序流时(例如,在指针指示返回地址的情况下)可能引用此类指针,因此能够检测这种修改特别重要。否则,攻击者对指针的修改可允许处理电路分支到代码的非预期部分,从而允许攻击者在处理电路上运行恶意代码。
然而,基于由用于认证给定指针的指令标识的该给定指针执行的指针签名的认证可能导致给定指针的使用的延迟。例如,认证过程可能需要等待从存储器系统提取指针和指针签名,并且因此在已检索到指针之前,认证过程(其可能耗费若干处理器循环来完成)不能执行。因此,虽然指针认证可提高安全性,但由于在可起始认证过程之前需要等待提取指针,因此它还可能向引用指针的过程增加若干循环。
然而,发明人认识到,通常在此类装置中,地址预测机制(例如,分支预测机制)将甚至在已检索到指示位置的指针之前就以高度的准确性预测程序流将分支到的地址。准确的地址预测在函数返回的情况下可特别相关,在这种情况下,地址预测电路以调用-返回堆栈的形式维护地址预测结构。在函数调用时,返回地址被推送到调用-返回堆栈,并且因此通过在函数返回时从调用-返回堆栈弹出地址,可甚至在已完全解析返回地址之前就以高水平的准确性预测返回地址(例如,通过标识链接寄存器中的返回地址或者通过从存储器系统提取返回地址)。
因此,根据本文所述的技术,处理电路使用存储在地址预测存储电路中的地址预测信息来执行认证过程。以这种方式,甚至在已标识到指针之前就可起始认证过程,从而避免/减少由于认证指针的需要而导致的延迟。因此,该方法在维护安全性的同时提高了认证过程的效率。
根据本文所述的技术,装置的处理电路对用于生成指针的指针签名的指令作出响应。处理电路被配置为响应于该指令,至少部分地基于给定指针的地址和密码密钥生成指针的指针签名。用于生成指针签名的指令的形式可取决于处理电路所使用的指令集架构(ISA)。例如,ISA可包括专门指示要生成指针签名的指令,或者指令可间接地指示要生成指针签名(例如,可响应于用于将存储器地址存储到存储器系统的指令而生成指针签名)。可使用各种操作来生成指针签名,但在一些示例中,将散列函数应用于给定指针的地址与密码密钥的组合,或者可使用密码密钥将分块加密应用于地址。在这些示例中的任一个示例中,还可引入盐值(salt)来提高安全性。也就是说,可在对给定指针的地址进行密码操作之前将盐值(其可包括上下文信息诸如堆栈指针)与该地址组合,由此进一步隐藏所使用的地址和所得密码密钥之间的关联。密码密钥可存储在仅响应于用于生成/认证指针的指令而可访问的特殊目的寄存器中。在一些示例中,装置存储用于与用于生成指示应使用哪个密钥的指针的指令一起进行指针认证的多个密码密钥。该方法允许针对其中可应用指针认证的不同上下文保留不同密钥。
本文所述的元件可在专用电路中实现,或者实现为通用电路的逻辑元件。处理电路可例如包括中央处理单元(CPU)、图形处理单元(GPU)或它们的部分。
装置还可包括地址预测存储电路,该地址预测存储电路用于存储用于预测要由处理电路执行的即将到来的指令的地址预测信息。例如,地址预测存储电路可在用于预测分支的存在、分支的目标和/或是否将采用分支的分支预测电路内实现。例如,地址预测存储电路可以是被配置为存储关于分支指令的目标的信息的分支目标缓冲器。另外地或另选地,地址预测存储电路可实现用于在从函数返回时预测返回地址的调用-返回堆栈。
根据本文所述的技术,地址预测存储电路被配置为存储针对其生成指针签名的指针的地址预测信息。该地址预测信息至少包括给定指针,但也可包括另外的信息,诸如指针签名和/或指示生成指针签名时处理电路的状态的上下文信息,如下面将更详细讨论的。该地址预测信息可用于预测要由处理电路执行的即将到来的指令(例如,在分支预测中)。
装置可执行地址预测以预测要由处理电路执行的即将到来的指令。这些预测可用于推测性地提取要执行的指令,由此在发生分支时减少处理电路的执行的延迟。因此,当发生分支时(诸如在函数返回时),通常甚至在完全解析地址之前就以高度的准确性预测程序流将分支到的存储器地址。
然而,根据本文所述的技术,当认证指针及其签名时,也使用存储在地址预测存储电路中的地址预测信息。响应于用于认证指针的指令,处理电路被配置为基于地址预测信息获得所预测指针签名。由于地址预测信息通常很早就可用(在已检索到指针本身之前),因此处理电路可不必在开始获得所预测指针签名之前等待检索指针。因此,通过利用来自地址预测信息的所预测指针签名,可消除指针认证过程的延迟。当由用于认证的指令标识的指针签名和基于地址预测信息的所预测指针签名都可用时,处理电路将指针签名与所预测指针签名进行比较。基于比较的结果,处理电路确定给定指针是否有效。如果所预测指针签名与由用于认证的指令标识的指针签名匹配,则处理电路可确定指针有效。如果所预测指针签名和由用于认证的指令标识的指针签名不同,则处理电路可执行辅助认证过程以确认指针的真实性,引发异常和/或阻止使用该指针。
在一些示例中,处理电路还被配置为执行地址预测信息中所预测的指针和由用于认证的指令标识的指针之间的比较。该比较可用于确定是否正确地预测指针。在一些示例中,地址预测机制可能不正确地预测地址,在这种情况下,来自地址预测信息的指针将与由用于认证的指令标识的指针不匹配。在比较确定不正确地预测指针的地址的这种情况下,可忽略(如从地址预测信息获得的)所预测指针签名和由用于认证的指令标识的指针签名之间的比较的结果,并且基于由用于认证的指令标识的指针重复认证过程。
用于认证给定指针的指令可例如是特定指令或者在ISA中提供的多个特定指令中的一个特定指令。在这种情况下,指令可指示要执行认证,并且可标识要针对其执行认证的特定指针。在一些示例中,指令标识其中存储指针的寄存器,然而,指令可另选地指示存储器中存储要认证的指针的位置。然而,在一些示例中,用于认证的指令不是专用认证指令,并且处理电路替代地被配置为响应于任何合适形式的指令而间接地指示可执行认证。例如,处理电路可被配置为响应于指示程序流应分支到由特定指针指示的存储器位置的分支指令而执行认证。以这种方式,分支指令可隐式地指示要认证特定指针。
在一些示例中,用于认证指针的指令的执行触发处理电路执行认证过程。然而,在一些示例中,处理电路设置有专用电路,该专用电路被配置为在处理电路的流水线中较早标识这种指令并且在用于认证的指令的执行之前开始获得地址预测信息。以这种方式,处理电路能够进一步减少指针认证过程对可引用指针的速度的影响,同时维护由认证指针提供的安全性。在一个示例中,处理电路被配置为在由处理电路实施的流水线的解码级处标识指示认证指针的请求的指令或指令序列。响应于该标识,处理电路修改指令以使处理电路执行认证。这可例如通过以下方式而发生:用由地址预测电路预测的返回地址补充所标识的指令以产生使处理电路基于该返回地址生成认证代码的指令,或修改指令以触发存储在地址预测存储电路中的指针签名与由用于认证的指令标识的指针签名的比较。
如上所述,处理电路利用从地址预测信息获得的所预测指针签名,并将其与由用于认证的指令标识的指针签名进行比较。通过从地址预测信息获得所预测指针签名,可消除基于由用于认证的指令标识的指针生成签名的成本的至少部分。从地址预测信息获得该所预测指针签名可以多种方式实现。
在一些示例中,地址预测存储电路被配置为另外存储指针的指针签名。因此,当地址预测信息被用于认证指针时,给定指针的地址预测信息包括给定指针本身和给定指针的所预测指针签名两者。因此,获得所预测指针签名涉及标识存储在地址预测存储电路中的所预测指针签名,然后可将所预测指针签名与由用于认证的指令标识的指针的指针签名进行比较。通过另外将指针签名存储在地址预测信息中,不仅处理电路能够获得要认证的指针签名可与其进行比较的所预测指针签名而不必等待标识和检索由用于认证的指令标识的指针,而且该方法还避免了必须执行密码操作来生成用于认证的指针签名。由于可直接从地址预测存储电路检索所预测指针签名,因此消除了执行密码操作来生成用于在认证过程中进行比较的签名的潜在的相当大的成本。因此,可更快速地执行指针认证过程,从而减少指针认证对处理电路的效率的影响,同时维护由指针认证提供的附加安全益处。
用于从地址预测电路获得所预测指针签名的另一个方法涉及至少部分地基于来自地址预测信息的给定指针的地址和密码密钥生成所预测指针签名。通过以这种方式根据存储在地址预测信息中的指针计算所预测指针签名,地址预测存储电路就不需要将指针签名本身存储在地址预测信息中。这可减少地址预测信息在地址预测存储电路中占用的空间。该方法还可更适合于以下情况:由于可能需要从现有地址预测存储电路对这种电路进行修改而难以或不可能扩展地址预测存储电路来存储指针签名。尽管从地址预测信息生成所预测指针签名仍利用密码操作,但该方法仍可允许与基于由用于认证的指令标识的指针生成用于比较的签名的情况相比更高效地执行认证过程。具体地,由于地址预测信息在预测即将到来的地址中的作用,地址预测信息可用可早于可标识到用于认证的指令的目标。因此,处理电路可在已确定由用于认证的指令标识的指针之前,开始生成用于与由用于认证的指令标识的指针签名进行比较的所预测指针签名。
在一些示例中,处理电路被配置为仅基于所考虑的指针的地址和密码密钥生成指针签名。然而,在这种情况下,无论在程序流中何处遇到该指针,相同的指针签名可能对于特定指针地址都有效。因此,与能够另外考虑生成和认证指针时处理电路的执行状态的装置相比,该装置可能更易受重放攻击。尽管攻击者可能难以生成任意指针的有效指针签名,但如果攻击者能够确定针对特定存储器位置的有效创建的指针签名,则攻击者可能够在不同的上下文中重复使用所述指针和指针签名组合以将程序流转向由指针引用的存储器位置,即使并非预期从该位置执行指令。
为了减轻此类重放攻击,处理电路可被配置为进一步基于与处理电路的当前执行状态相关联的上下文信息生成指针签名。例如,处理电路可被配置为基于生成指针签名时堆栈指针的位置生成指针签名。如本文所用,堆栈指针是指存储器系统中对应于由处理电路引用的程序堆栈的顶部的位置。通过考虑生成指针签名时的上下文信息(例如,堆栈指针),如果该指针签名在上下文信息不同的其他地方被重复使用,则认证过程将确定指针签名无效,即使指针签名正被重复用于与最初针对其生成指针签名的指针具有相同地址的指针。
在处理电路利用上下文信息(例如,堆栈指针)来生成指针签名的情况下,处理电路可被配置为将该上下文信息存储为地址预测信息的一部分。例如,当生成指针签名时或者响应于另一个触发项(例如,在函数调用时),上下文信息可与指针本身一起存储为地址预测信息的一部分。以这种方式,与生成指针签名时处理电路的执行状态相关联的上下文信息可供处理电路在认证指针时使用。处理电路因此可被配置为在认证指针时考虑该上下文信息。这可通过以下方式来进行:从地址预测信息获得上下文信息,将上下文信息与指示执行认证时处理电路的处理状态的当前上下文信息进行比较,并且如果所预测指针签名和来自地址预测信息的上下文信息两者与它们与之比较的对应指针签名和上下文信息匹配,则确定给定指针有效。该方法允许在认证过程中检查上下文信息,而不需要执行密码操作来产生新的指针签名。因此,处理电路能够提供由考虑上下文信息提供的针对重放攻击的增加的安全性,同时仍以高效方式执行认证过程。
其中在认证过程期间可考虑上下文信息的另一种方式是通过至少部分地基于来自地址预测信息的给定指针的地址、密码密钥和与处理电路的状态相关联的上下文信息从地址预测信息生成所预测指针签名。在一些示例中,处理电路被配置为将上下文信息存储为地址预测信息的一部分,并且用于生成所预测指针签名的上下文信息是来自地址预测信息的上下文信息。然而,在其中上下文信息不可存储在地址预测存储电路中的一些示例中,处理电路被配置为基于指示执行认证时处理电路的执行状态的当前上下文信息生成所预测指针签名。
尽管本文所述的技术通常可应用于需要生成和认证指针签名的情况,但这些技术在应用于函数调用和返回时可特别有益。在函数调用时,程序流通常分支到正被调用的函数的位置,并且指示返回地址的返回指针存储在链接寄存器中。然后可将链接寄存器的内容写入装置的存储器系统。在函数返回时,执行函数之后,从存储器系统(或直接从链接寄存器)检索返回地址,并且程序流返回到由返回指针指示的存储器位置。因此,对存储在存储器系统中的返回指针的恶意或无意修改造成将程序流转向非预期位置的风险。例如,攻击者可修改存储在存储器系统中的返回地址,使得在函数返回时,处理电路将程序流转向由攻击者指定的位置,由此允许攻击者执行存储在该位置处的恶意代码。因此,函数调用和返回表示其中可采用指针认证的重要情形。
因此,在一些示例中,处理电路被配置为结合函数调用操作来生成指针签名。该处理电路可被配置为响应于函数调用操作而直接生成该指针签名,其中函数调用充当用于生成指针签名的指令。另选地或另外地,处理电路可响应于特定签名生成指令而生成指针签名,其中该签名生成指令在函数开始处的程序代码中找到。在此类情形中,给定指针可以是用于标识要在函数返回操作之后执行的下一个指令的返回指针。通常,该指针将指示在导致进入函数的分支指令之后的指令。处理电路可被配置为认证该返回指针以准备进行函数返回操作。类似于函数调用操作,处理电路可响应于返回指令本身而认证返回指针,或者程序代码可包含触发处理电路执行认证的特定签名认证指令。为了减少指针认证过程对执行函数返回所耗费的时间的影响,处理电路可在执行用于认证的指令之前开始认证过程,而不是响应于在处理电路的流水线中较早检测到的用于认证的指令而开始从地址预测信息获得所预测指针签名。
通常,可为函数调用和返回提供特别准确的地址预测。由于使用堆栈结构可良好地表示潜在嵌套函数调用的分级结构,因此可向装置提供维护调用-返回堆栈的调用-返回堆栈存储电路。返回地址在函数调用时被推送到调用-返回堆栈,这意味着可通过从调用-返回堆栈弹出最近的条目来准确且快速地预测用于函数返回操作的返回地址。因此,在一些示例中,地址预测存储电路是用于存储调用-返回预测信息的调用-返回堆栈存储电路,该调用-返回预测信息用于预测要在函数返回操作之后执行的指令的返回存储器地址。通过利用存储在调用-返回堆栈存储电路中的地址预测信息,装置能够利用地址的快速且准确的预测来使得能够高效地认证所遇到的返回地址的认证。
在装置需要将指针和对应指针签名彼此相关联地存储的情况下,这可通过单独地但在相关位置中(例如,在存储器系统中的后续存储器位置中)存储指针和指针签名来进行。然而,在一些指令集架构(ISA)中,为指针分配的位多于由每个指针的存储器地址的唯一位占据的位。在此类示例中,指针的位的集合(例如,最高有效位)可始终具有相同值(例如,零)。在此类情况下,处理电路可被配置为用指针签名替换这些位中的至少一些位,以创建增强指针。通过存储该增强指针来代替单独地存储指针和指针签名,装置可减少在指针和指针签名一起存储(例如,在存储器系统中或在地址预测存储电路中)的情况下所占据的空间。
在一些示例中,响应于在从地址预测信息获得的所预测指针签名与由用于认证的指令标识的指针签名的比较(以及其中执行这种比较的上下文信息的比较)中检测到失配,处理电路被配置为确定给定指针无效。
然而,在一些示例中,并且基于即使由用于认证的指令标识的指针签名对于其相关联的指针有效但仍然可在比较中检测到失配的认识(例如,在地址预测电路预测到错误地址的情况下),处理电路被配置为响应于在比较中检测到失配而执行辅助认证过程。在需要该辅助认证过程的情形中,通过执行辅助认证过程,可延迟指针的认证。然而,在预测经常正确并且存在相对少的无效指针情况的情况下,在第一实例中通过利用地址预测信息实现的节省可超过当在比较中检测到失配时必须执行辅助认证过程的成本。
辅助认证过程可基于从由用于认证的指令标识的指针生成测试指针签名。然后可将该测试指针签名与指针签名进行比较。如果处理电路检测到测试指针签名和由用于认证的指令标识的指针签名之间的匹配,则处理电路可基于地址预测信息确定即使在认证过程中最初检测到失配,但给定指针仍然有效。
另一方面,如果在辅助认证过程中检测到失配,则处理电路可被配置为在该阶段确定给定指针无效。
可实现对确定指针无效的多个可能的响应。由于指针无效可指示指针使用不安全,因此在一个示例中,处理电路可阻止引用该指针和/或引发异常。
现在将参考附图描述特定示例。
图1是其中可采用本文所述的技术的装置2的框图。应当理解,这是装置2的部件的子集的高级表示,并且装置2可包括未示出的许多其他部件。装置2包括用于执行指令的处理电路10。处理电路10经由包括多个级别的高速缓存42、44、46的高速缓存分级结构耦接到主存储器48。在该示例中,1级指令高速缓存42、1级数据高速缓存44、数据和指令之间共享的2级高速缓存46以及主存储器48构成装置2的存储器系统40。然而,应当理解,其他高速缓存分级结构也是可能的,并且这仅仅是一个示例。
处理电路10具有提取级12,该提取级寻求从将需要由处理电路10执行的存储器指令进行提取。提取级12具有对分支预测电路20(或一般地,地址预测电路)的访问权限,以预测通过计算机程序的指令流,并且因此预测接下来应提取哪些指令。分支预测电路20利用由地址预测存储电路22实现的地址预测存储来存储用于预测要执行的即将到来的指令的地址的数据。在该示例中,地址预测存储电路22是存储用于预测程序流在函数返回操作之后将返回到的位置的调用-返回堆栈预测信息的调用-返回堆栈存储电路。然而,应当认识到,本文所述的技术可与任何合适形式的地址预测一起使用,并且地址预测存储电路22可替代地为存储关于处理电路10所遇到的分支的目标地址的信息以用于预测未来分支指令的目标的分支目标缓冲器(BTB)。在该示例中,由于预测准确性高,因此使用调用-返回堆栈存储电路。
然后,由提取级12提取的指令被传递到解码级14,在该解码级处,这些指令被解码以便产生所解码指令(有时也称为微操作或宏操作),然后将这些所解码指令存储在发布级16内。一旦源操作数可用于那些所解码指令,那些所解码指令就可传递到执行级18以供执行。当执行指令时,可从寄存器30检索所需的源操作数值,并且可将由执行那些指令产生的结果存储回寄存器30中的指定寄存器中。
可执行加载指令和存储指令以将数据值从寄存器30存储到存储器系统40中或者从存储器系统40检索要存储在寄存器30中的数据。如图1所示,当执行加载指令或存储指令时,执行级将与L1数据高速缓存44接口连接,并且从那里接口连接到一个或多个较低级别的高速缓存46/主存储器48。
处理电路10可将存储器地址以指针的形式存储在寄存器30和/或存储器系统40中。确保这些指针在存储在寄存器30和/或存储器系统40中和稍后引用之间不被篡改或以其他方式更改可为重要的。这是因为在处理电路10的操作依赖于指针的地址的情况下,对指针的更改可能影响处理电路10的操作。例如,在指针用于指示要在计算中使用的数据的位置的情况下,对指针的修改可能导致在计算中使用错误的数据,由此导致意外的行为。在指针用于指示包含要由处理电路10执行的指令的存储器位置的情况下,确保指针的完整性特别重要。在这种情况下,对指针的修改可能导致处理电路10执行错误的代码。如果无意中发生,则这可能导致意外的或未定义的行为。然而,对指针的故意修改也可能被攻击者用来将程序流转向存储恶意代码的存储器位置,由此允许攻击者在处理电路10上运行恶意代码。
为了检测对指针的修改并由此提高安全性,装置2实施指针认证。指针认证涉及以在没有正确授权的情况下难以或不可能进行的方式生成指针签名。稍后可认证指针以确定指针和指针签名是否彼此对应。如果指针和指针签名不对应,则这可指示指针或指针签名已被篡改或者指针正被以非预期的方式使用。
如本文所述的指针认证利用密码密钥来生成和认证指针。如图1所示,寄存器30包括单个密码密钥寄存器32,然而,应当理解,寄存器30可包括用于存储在不同场景中使用的密码密钥的多个密码密钥寄存器。
在一些示例中,指针认证还利用上下文信息来验证其中生成指针签名的上下文对应于其中认证指针的上下文。这可帮助减轻其中来自一个上下文的有效指针签名被复制并用于并非预期的上下文中的重放攻击。在图1所示的示例中,寄存器30包括存储堆栈指针的当前位置的堆栈指针寄存器34。堆栈指针用于指示存储器系统40中与程序堆栈的末端(其也可称为程序堆栈的顶部)相关联的位置,在该位置处存储与最近的调用(例如,最近翻函数调用)相关联的数据。
将参考图3A至图3B和图4A至图4C更详细地讨论如何生成和认证指针签名。
为了减少执行指针认证的影响,处理电路10基于地址预测存储电路22中的地址预测信息利用由分支预测器20执行的地址预测。如果处理电路10不利用该地址预测信息,处理电路10否则可能必须等待直到指示要执行指针认证的指令到达执行级18。由于指针认证过程本身在需要执行的时钟循环的数量和所消耗的功率方面可能相对成本高昂,所以通过避免或减少该指针认证的影响,可使处理电路10的操作更高效。
然而,由于地址预测电路(例如,分支预测器20)通常能够以高水平的准确性预测分支/返回指令将把程序流转向的地址,因此处理电路10被布置为基于所预测指针开始执行认证过程。因此,处理电路10不需要在可确定目标地址并开始认证之前等待直到分支/返回指令到达执行级18。
处理电路10因此被布置为标识用于认证指针的指令,并且使用地址预测信息执行认证过程。以这种方式,减少了指针认证对处理电路10的影响。
处理电路10可响应于装置2所支持的指令集架构(ISA)中提供的特定认证指令而执行认证过程,或者认证的需要可由另一个指令/指令序列暗示。例如,处理电路10可响应于分支或返回指令而认证由分支或返回指令标识的指针。在这种情况下,分支/返回指令本身是用于认证指针的指令。
在地址预测存储电路22是调用-返回堆栈存储电路并且指针生成和指针认证分别与函数调用和函数返回相关联的情况下,如所描述的基于地址预测信息执行指针认证过程可特别有益。
图2中示出了这种场景。图2是与进入函数和从函数返回相关联的程序代码的示例。如图2所示,函数以PACIASP指令开始。PACIASP是用于生成指针签名的指令,并且标识要针对其生成指针签名的指针、密码密钥、以及要用于生成指针签名的呈堆栈指针形式的上下文信息。在该示例中,PACIASP指令隐式地将存储在链接寄存器中的指针标识为要针对其生成签名的指针。指针签名与指针组合以形成增强指针,该增强指针被存储到寄存器。在该示例中,要针对其生成指针签名的指针标识当从函数返回时程序流应转向的返回地址。通常,该返回地址将是在调用函数的指令之后的地址。该指针在进入函数之后被存储在链接寄存器中,并且在PACIASP指令之后用增强指针替换。
如图2所示,PACIASP指令之后是STP指令,该STP指令是用于将帧指针(fp)寄存器和链接寄存器(lr)的内容存储到特定存储器位置的指令。在该示例中,参考存储在堆栈指针34中的堆栈指针(sp)来定义fp寄存器和链接寄存器的内容所存储到的存储器位置。由于链接寄存器包含(包括指针签名的)增强指针,因此是将增强指针存储到存储器系统40。
根据本文所述的技术,地址预测存储电路22被配置为存储指针的地址预测信息。这可在函数调用时通过将包括返回地址的地址预测信息推送到由地址预测存储电路22维护的调用-返回堆栈来执行。例如,处理电路可被布置为检测指令或指令序列(例如,分支与链接/函数调用指令,后跟指针签名生成指令),并且响应于该检测,将具有指针签名的地址预测信息存储到地址预测存储电路。
在函数的主体之后,函数包括用于将先前存储到存储器系统48的帧指针和增强返回地址指针加载回到fp寄存器和链接寄存器中的LDP指令。LDP指令之后是AUTIASP指令。AUTIASP指令是用于认证链接寄存器的内容的指令。如果先前存储到存储器系统40的增强返回地址指针尚未被篡改,则预计处理电路10确定指针签名正确并且因此该指针有效。在这种情况下,处理电路10可仅用指示返回地址的指针替换链接寄存器中的增强指针。另一方面,如果指针已被修改,则指针签名将不太可能对应于该指针,并且因此处理电路10将确定该指针无效。在这种情况下,处理电路10可阻止使用该指针和/或引发异常。
构成函数的最后指令是返回(RET)指令,响应于该RET指令,程序流转向由返回指针指示的位置。
根据本文所述的技术,处理电路10利用呈存储在调用-返回堆栈中的调用-返回预测信息形式的地址预测信息来执行认证。具体地,处理电路10可被配置为标识与返回指针的认证相关联的指令或指令序列,之后进行返回操作。响应于该序列的检测,处理电路10开始使用预测返回地址的地址预测信息来执行认证过程。例如,处理电路10可响应于在流水线中比执行级18早的AUTIASP(或类似)指令后跟RET指令的组合而开始基于地址预测信息获得所预测指针签名,然后可将所预测指针签名与从存储器系统40加载的指针签名进行比较,之后实际执行加载和认证指令。
图3A和图3B分别示意性地示出了用于生成和认证指针签名的方法。图3A至图3B所示的方法不利用地址预测信息。
图3A示意性地示出了用于使用密码密钥340生成指针310的指针签名330的方法。该方法还可利用上下文信息350来将所生成的指针签名330链接到生成签名330时的上下文信息350的值。这可帮助防止其中以并非预期的方式使用针对指针310有效生成的指针签名330的重放攻击。由于指针签名330是指针310的有效签名,因此除非签名依赖于上下文信息350,否则可能难以检测到这种重复使用。
如图3A所示,使用指针310、密码密钥340和上下文信息350(如果使用的话)执行密码操作以产生指针签名330。可使用各种密码操作来生成指针签名330,然而,在一些示例中,密码操作是单向操作,使得不能仅基于由此产生的签名来推断输入。密码操作可利用已知的密码技术来生成签名。在一些示例中,使用轻量级对称分块加密(例如,QARMA加密)或轻量级密码散列函数(例如,Keccak散列)来提供高水平的安全性,同时还在执行密码操作所需的处理资源和功率方面保持高效。在一些示例中,使用高级加密标准(AES)来实现附加安全性,但需要更多的计算资源来执行。然而,一般来讲,应当理解,可使用任何合适的密码算法来生成密码签名。
一旦已生成指针签名330,就将指针签名330与指针310相关联地存储。虽然指针310和指针签名330可例如存储在单独的寄存器中或存储在相邻的存储器位置处,如图3A所示,但指针310和指针签名330被组合以形成增强指针320,该增强指针可例如存储在寄存器或存储器位置中。如将参考图6所解释的,通过用指针签名330替换指针310的位的子集来形成增强指针320,从而提供存储指针310和指针签名330两者的高效方式。
图3B示意性地示出了可通过其认证指针310的方法。在该示例中,从增强指针320获得要认证的指针310和指针310的指针签名330。然后执行与参考图3A所讨论的相同的密码操作,以从指针310、密码密钥340和上下文信息352(如果使用的话)生成测试签名360。上下文信息352(例如,堆栈指针)是与执行认证时处理电路10的执行状态相关联的上下文信息,并且因此在指针签名330在其并非预期用于的上下文中被重复使用的情况下可不同于用于生成指针签名330的上下文信息350。
将测试签名360与指针签名330进行比较,以确定签名是否匹配。如果指针已被篡改(例如,指针的地址被更改)或者当执行认证时处理电路10的上下文信息352与生成指针签名330时使用的上下文信息350不匹配,则测试签名360和指针签名330将很可能不同。因此,处理电路10被配置为在两个签名匹配的情况下确定指针310有效,并且在指针签名不匹配的情况下确定该指针无效。以这种方式,可认证指针310。
如上所述,通过生成测试签名并比较这两个签名来认证指针签名。这种方法通常可高效地执行并且利用现有功能来生成指针签名,然而,应当理解,根据本公开,可使用认证指针签名的其他方法。
生成测试签名360所需的密码操作在其由处理电路10执行所需的时钟循环的数量方面可能成本高昂。然而,该成本的至少部分可通过利用装置2内可能已经提供的地址预测技术来消除,如现在将参考图4A至图4C所解释的。
图4A至图4C示出了用于以减少因执行指针认证对处理电路10的效率施加的影响的方式来生成和认证指针签名的示例性方法。图4A至图4C的一些特征对应于所描述的图3A至图3B的特征。在这种情况下,将不重复对类似特征的描述。
图4A示意性地示出了用于生成指针签名330的方法,其中地址预测信息存储到地址预测存储电路22。图4A所示的方法类似于参考图3A所解释的方法,然而,在这种情况下,该方法另外涉及将地址预测信息370存储在地址预测存储电路22中。
地址预测信息370包括指针310,并且在一些示例中另外包括作为密码操作的结果生成的指针签名330和/或在生成指针签名330中使用的上下文信息350。地址预测信息350可以是将由装置2以任何方式存储以用于地址预测目的的信息,或者地址预测信息350可被扩展或引入以支持本文所述的高效指针认证技术。
图4B至图4C示出了用于利用存储在地址预测存储电路22中的地址预测信息370来认证指针签名330的两种方法。
根据这些方法中的第一种方法,并且如图4B所示,存储在地址预测存储电路22中的地址预测信息370包括所预测指针372、所预测指针签名374、以及对应于生成所预测指针签名374时处理电路10的执行状态的上下文信息354。图4B的方法因此对应于图4A所示的指针生成方法的具体实施,其中存储到地址预测存储电路22的地址预测信息370包括指针310、签名330和上下文信息350(如果使用的话)。
所预测指针签名374通过标识地址预测信息370内的签名来获得,并且与由用于认证的指令标识的指针签名330进行比较。在这种情况下,该指针签名330从增强指针320获得。如果指针签名330和所预测指针签名374不匹配,则处理电路可确定指针310无效。然而,在该示例中,指针签名330和所预测指针签名374的失配替代地触发辅助认证过程。该辅助认证过程对应于参考图3B所描述的方法。由于认识到签名的失配可能并不始终对应于无效指针,而是其他因素可能导致失配,因此执行该辅助认证过程。例如,如果指针被错误地预测,则所预测指针签名374可能不匹配指针签名330。
如图4B所示,处理电路10被配置为还将所预测指针372与由用于认证的指令标识的指针310进行比较。这些指针的失配也触发辅助认证过程。
另外,在其中使用上下文信息的示例中,处理电路10被配置为将从地址预测信息370获得的上下文信息354与跟执行认证时处理电路10的执行状态相关联的当前上下文信息352进行比较。上下文信息的失配可指示指针正被不正确地重复使用。
如果在这些比较中的所有比较中检测到匹配,则处理电路10可确定指针310有效并且允许使用指针310。
根据图4B所示的方法,仅基于利用从地址预测信息370获得的信息进行的比较,就可执行成功的认证过程。实际上,通过利用用于所预测指针签名374的存储在地址预测信息370中的签名,处理电路10就不需要作为认证的一部分执行密码操作。这可减少处理电路10上的处理负载,并且加快认证过程。由于地址预测信息370相比指针310和指针签名330更早可用,因此处理电路10能够减少在指针310被标识并且对处理电路10可访问的点之后认证指针所需的循环的量。
图4C示意性地示出了用于认证指针310的第二种方法,该第二种方法利用从地址预测信息370获得的所预测指针签名374。根据该方法,同样将由用于认证的指令标识的指针310与所预测指针372进行比较。
然而,如图4C所示,地址预测信息370不包括所预测指针签名。相反,在使用上下文信息的情况下,通过基于密码密钥340、来自地址预测信息370的所预测指针372和上下文信息352使用密码操作生成所预测指针签名374,来从地址预测信息获得所预测指针签名374。用于生成所预测指针签名374的上下文信息352可以是存储在地址预测信息370中的上下文信息352,或者如图4C所示,可以是与执行认证过程时处理电路10的执行状态相关联的当前上下文信息352。
将所预测指针签名374与由用于认证的指令标识的指针签名330进行比较,并且如果正在使用来自地址预测信息370的上下文信息354,则还比较上下文信息。如以上参考图4B所解释的,如果在这些比较中的所有比较中检测到匹配,则处理电路10可确定指针310有效。然而,如果在这些比较中的任何比较中检测到失配,则可执行辅助认证过程。
尽管在该方法中仍执行密码操作,但密码操作是为了使用地址预测信息370生成所预测指针签名374而执行。因此,用于生成所预测指针签名374的密码操作不依赖于由用于认证的指令标识的指针310的地址。这意味着当地址预测信息370可用(这通常在可标识到指针310之前)时就可开始密码操作。因此,与要求由用于验证的指令标识的指针310在可执行密码操作之前可用的方法相比,处理电路10能够更早地开始生成所预测指针签名374。因此,该方法减少了在执行指针认证时引入的延迟。
该方法还可在地址预测信息370仅包括所预测指针372的情况下实施,这意味着地址预测存储电路22不需要被扩展以存储指针签名,由此增加了可用于所预测指针的存储量并且减少了现有微架构所需的修改量。
图5A至图5C示出了示出可用本发明技术实现的效率改进的时序图。图5A至图5C中的每一者中示出了所标识的指令沿着处理电路的流水线级的前进。如图所示,每个指令需要四个时钟循环来完成,但应当理解,在其他示例中,每个指令可需要不同数量的时钟循环并且一般来讲每指令的时钟循环数量不需要相同。
图5A示出了在执行认证时不利用地址预测信息的装置上执行的指令的时序图。如图所示,认证过程(如由AUTIASP指令指示的)在加载(LDP)已完成之前不能开始。这是因为认证利用由加载指令加载的指针。一旦LDP指令处于流水线的wr级,加载数据就变得可用,并且仅可转发到iss级中的AUTIASP指令。因此,如图所示,AUTIASP在时序图中与LDP偏移。在与认证并行执行返回(RET)的情况下,可看出,图5A所描绘的整个加载、认证和返回操作耗费七个时序区段来完成。如果每个所示流水线级耗费一个时钟循环来完成,则操作因此需要七个时钟循环来完成。
图5B中示出了相同指令的时序图,但在该示例中,处理电路10利用地址预测信息370在已完成加载之前开始执行认证过程。在该示例中,指针认证是成功的,并且因此允许发生返回而无需除认证过程之外的任何进一步处理。因此,可在四个时序区段(在流水线的每个所示级需要一个时钟循环来完成的情况下相当于四个时钟循环)中执行整个加载、认证和返回操作。通过在执行认证过程时利用地址预测信息,可使得函数返回更高效,同时受益于由指针认证提供的增加的安全性。
图5C示出了其中处理电路10使用地址预测信息执行认证过程,但在比较中检测到失配(例如,由于返回地址的错误预测)的示例。因此,在基于地址预测信息的认证过程之后,以与针对图5A执行的认证类似的方式执行辅助认证过程。因此,在检测到失配并且执行辅助认证过程的情况下,加载、认证和返回需要八个时序区段来完成。尽管这比图5A的示例中所需的七个时序区段长,但在足够小比例的函数返回时需要辅助认证过程的情况下,由利用地址预测信息提供的益处可超过在检测到失配的情况下的附加成本。这在其中调用-返回堆栈可用于以高水平的准确性预测将需要的返回地址并且因此错误预测的机会较低的函数返回时尤其如此。
图6示出了增强指针600,其中用指针签名604替换指针的位的子集。在一些指令集架构(ISA)中,指针中可用于存储存储器地址的位的数量可大于用于指示存储器地址的存储器地址的位的数量。例如,ISA可支持指向地址存储器的64位指针,其中这些位中仅48位实际上用于标识存储器位置,并且最高位被忽略。在此类示例中,处理电路10可利用指针的最高位来存储附加信息,由此创建增强指针。由于存储结构诸如高速缓存42、44、46和主存储器48可能已经被布置为存储64位指针,因此该方法可允许在不减少可用于存储指针的空间的情况下存储附加信息。
如图6所示,增强指针600包括地址位606,在该地址位中存储实际用于标识存储器位置的存储器地址的位。尽管指针中剩余位的值通常可全部为零,但对于增强指针,这些位中的至少一些被用于存储指针签名604。在不需要所有未使用的位来存储指针签名604的情况下,增强指针600还可用于存储另外的信息602,诸如用于存储器标记的标记。
如图6所示,用指针签名604替换指针的较高位以形成增强指针600。然而,在一些示例中,指针和指针签名可在被存储之前以其他方式组合。例如,可用算术运算(例如,通过对指针与指针签名进行异或运算)来组合指针签名和指针。
图7示出了指针的示例性地址预测信息700。如图7所示,对于每个指针,地址预测存储电路22存储指针的地址704和指针签名702。地址704和指针签名702可一起表示如参考图6所描述的增强指针。地址预测信息700还包括指示生成指针签名702时处理电路10的执行状态的上下文信息706。在该示例中,上下文信息706是生成指针签名702时的堆栈指针的值。地址预测信息708还包含用于指示特定条目700是否有效的有效标志708。
图7示意性地示出了存储在地址预测存储电路22中的信息的示例,然而,应当理解,在其他示例中,可存储更多、更少或不同的信息。例如,在一些示例中,不存储指针签名702、上下文信息706和/或有效标志708。
图8是示出根据本文所述的技术生成指针签名的方法的流程图。
在步骤802中,处理电路10检测用于生成指针签名的指令。该指令可以是专用指针签名生成指令或者可隐式地指示要生成指针签名。用于生成指针的指令标识要针对其生成签名的指针,并且还可指示要使用的密码密钥和/或用于控制指针签名生成的其他参数。
响应于用于生成指针签名的指令,在步骤804处,处理电路10被配置为基于指针的地址和密码密钥生成指针签名。
然后,在步骤806中,将至少指针以地址预测信息的形式存储到地址预测存储电路22。地址预测信息还可包括指针签名和/或在生成指针签名时使用的上下文信息。
图9是示出根据本文所述的技术认证给定指针的方法的流程图。
在步骤902处,处理电路10检测用于认证给定指针的指令。该指令可以是专用认证指令,或者认证的需要可由另一个指令诸如功能返回指令隐式地指示。用于验证给定指令的指令标识给定指令和与给定指令相关联的指针签名。
在步骤904处,基于给定指针的地址预测信息获得所预测指针签名904。在一些示例中,该获得包括标识存储在给定指针的地址预测信息中的指针签名,然而,在一些示例中,使用对地址预测信息中的指针执行的密码操作来生成所预测指针签名。
在步骤906处,将所预测指针签名与由用于认证的指令标识的指针签名进行比较。如步骤908所示,如果检测到匹配,则处理电路10在步骤912处确定给定指针有效。然而,如果所预测指针签名与如由用于认证的指令标识的给定指针的指针签名不匹配,则在步骤914中执行辅助认证过程以更确切地确定指针是否有效。
本文所描述的概念可体现于用于制造体现所描述概念的装置的计算机可读代码中。例如,计算机可读代码可在半导体设计和制造过程的一个或多个阶段(包括电子设计自动化(EDA)阶段)使用,以制造包括体现这些概念的装置的集成电路。以上计算机可读代码可另外地或另选地使得能够对体现本文所描述概念的装置进行定义、建模、模拟、验证和/或测试。
例如,用于制造体现本文所描述概念的装置的计算机可读代码可体现在定义这些概念的硬件描述语言(HDL)表示的代码中。例如,代码可定义用于定义体现这些概念的装置的一个或多个逻辑电路的寄存器传送级(RTL)抽象。代码可用Verilog、SystemVerilog、Chisel或VHDL(超高速集成电路硬件描述语言)以及诸如FIRRTL的中间表示来定义体现装置的一个或多个逻辑电路的HDL表示。计算机可读代码可提供使用系统级建模语言诸如SystemC和SystemVerilog体现概念的定义或概念的其他行为表示,这些行为表示可由计算机解译以使得能够对概念进行模拟、功能和/或形式验证和测试。
附加地或另选地,计算机可读代码可以体现一个或多个网络列表的计算机可读表示。可以通过向RTL表示应用一个或多个逻辑合成过程来生成一个或多个网络列表。另选地或另外地,一个或多个逻辑合成过程可从计算机可读代码生成待加载到现场可编程门阵列(FPGA)中以将FPGA配置为体现所描述概念的位流。FPGA可出于在制造集成电路之前验证和测试概念的目的被部署,或者FPGA可直接部署在产品中。
计算机可读代码可包括用于制造装置的代码表示的混合,例如包括RTL表示、网表表示或在半导体设计和制造过程中用于制造体现本发明的装置的另一计算机可读定义中的一者或多者的混合。另选地或另外地,概念可在半导体设计和制造过程中用于制造装置的计算机可读定义和定义一旦制造就将由所定义装置执行的指令的计算机可读代码的组合中定义。
此类计算机可读代码可设置在任何已知的暂态计算机可读介质(诸如通过网络进行的有线或无线代码传输)或非暂态计算机可读介质诸如半导体、磁盘或光盘中。使用计算机可读代码制造的集成电路可包括诸如以下中的一者或多者的部件:中央处理单元、图形处理单元、神经处理单元、数字信号处理器或单独或共同体现概念的其他部件。
在本申请中,字词“被配置为……”用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可以具有提供所限定的操作的专用硬件,或者可以对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。

Claims (18)

1.一种装置,所述装置包括:
处理电路,所述处理电路用于执行指令;
地址预测存储电路,所述地址预测存储电路用于存储用于预测要由所述处理电路执行的即将到来的指令的地址预测信息;
其中所述处理电路响应于用于生成指针的指针签名的指令,至少部分地基于所述指针的地址和密码密钥生成所述指针的所述指针签名;
所述地址预测存储电路被配置为存储所述指针的地址预测信息,所述地址预测信息至少包括所述指针;并且
所述处理电路响应于用于认证给定指针的指令:
基于所述给定指针的所述地址预测信息获得预测的指针签名;
将所述预测的指针签名与由用于认证的所述指令标识的指针签名进行比较;以及
响应于所述比较检测到匹配,确定所述给定指针有效。
2.根据权利要求1所述的装置,其中:
所述给定指针的所述地址预测信息还包括所述指针签名;并且
所述处理电路被配置为通过标识所述给定指针的所述地址预测信息中的所述指针签名来获得所述预测的指针签名。
3.根据权利要求1所述的装置,其中:
所述处理电路被配置为通过至少部分地基于来自所述地址预测信息的所述给定指针的地址和所述密码密钥生成所述预测的指针签名来获得所述预测的指针签名。
4.根据任一前述权利要求所述的装置,其中:
所述处理电路被配置为进一步基于与所述处理电路的当前执行状态相关联的上下文信息生成所述指针签名。
5.根据权利要求4所述的装置,其中:
所述处理电路被配置为维护指示存储器系统中对应于由所述处理电路引用的程序堆栈的末端的位置的堆栈指针;并且
所述上下文信息包括所述堆栈指针。
6.根据权利要求4或5所述的装置,其中:
所述处理电路被配置为将所述上下文信息存储为所述地址预测信息的一部分;并且
所述处理电路响应于接收到用于认证所述给定指针的所述指令:
从所述给定指针的所述地址预测信息获得所述上下文信息;
将所述上下文信息与跟所述处理电路的所述当前状态相关联的当前上下文信息进行比较;以及
另外响应于检测到所述上下文信息和所述当前上下文信息之间的匹配,执行所述确定所述给定指针有效。
7.根据权利要求4或5所述的装置,其中:
获得所述预测的指针签名包括至少部分地基于来自所述地址预测信息的所述给定指针的地址、所述密码密钥和与所述处理电路的状态相关联的上下文信息来生成所述预测的指针签名。
8.根据权利要求7所述的装置,其中:
用于生成所述预测的指针签名的所述上下文信息是与生成所述预测的指针签名时所述处理电路的执行状态相关联的当前上下文信息。
9.根据权利要求7所述的装置,其中:
所述处理电路被配置为从所述地址预测信息获得用于生成所述预测的指针签名的所述上下文信息。
10.根据任一前述权利要求所述的装置,其中:
所述处理电路被配置为结合函数调用操作来生成所述指针签名;
所述给定指针是用于标识要在函数返回操作之后执行的下一个指令的返回指针;并且
所述处理电路被配置为认证所述返回指针以准备进行所述函数返回操作。
11.根据任一前述权利要求所述的装置,其中:
所述地址预测存储电路是用于存储调用-返回预测信息的调用-返回堆栈存储电路,所述调用返回预测信息用于预测要在函数返回操作之后执行的指令的返回存储器地址。
12.根据任一前述权利要求所述的装置,其中:
所述处理电路被配置为通过用所述指针签名替换所述指针的一部分来基于所述给定指针和所述指针签名生成增强指针,并且将所述增强指针存储在所述地址预测存储电路和存储器系统中的至少一者中。
13.根据任一前述权利要求所述的装置,其中:
所述处理电路被配置为响应于所述比较检测到失配,确定所述给定指针无效。
14.根据权利要求1至12中任一项所述的装置,其中:
响应于所述比较检测到失配,所述处理电路被配置为执行辅助认证过程,所述辅助认证过程包括:
至少部分地基于所述给定指针的所述地址和所述密码密钥生成测试指针签名;
将所述测试指针签名与由用于认证的所述指令标识的所述指针签名进行比较;以及
响应于检测到所述测试指针签名和由用于认证的所述指令标识的所述指针签名之间的匹配,确定所述给定指针有效。
15.根据权利要求14所述的装置,其中:
所述处理电路被配置为响应于所述辅助认证过程中的所述比较检测到失配,确定所述给定指针无效。
16.根据权利要求13或15所述的装置,其中:
所述处理电路被配置为响应于确定所述给定指针无效,引发异常。
17.一种认证指针的方法,所述方法包括:
响应于用于生成指针的指针签名的指令,至少部分地基于所述指针的地址和密码密钥生成所述指针的所述指针签名;
在地址预测存储电路中存储所述指针的地址预测信息,所述地址预测信息至少包括所述指针,所述地址预测信息用于预测由处理电路执行的即将到来的指令;以及
响应于接收到用于认证给定指针的指令:
基于所述给定指针的所述地址预测信息获得预测的指针签名;
将所述预测的指针签名与由用于认证的所述指令标识的指针签名进行比较;以及
响应于所述比较检测到匹配,确定所述给定指针有效。
18.一种计算机可读介质,所述计算机可读介质用于存储用于制造装置的计算机可读代码,所述装置包括:
处理电路,所述处理电路用于执行指令;
地址预测存储电路,所述地址预测存储电路用于存储用于预测要由所述处理电路执行的即将到来的指令的地址预测信息;
其中所述处理电路响应于用于生成指针的指针签名的指令,至少部分地基于所述指针的地址和密码密钥生成所述指针的所述指针签名;
所述地址预测存储电路被配置为存储所述指针的地址预测信息,所述地址预测信息至少包括所述指针;并且
所述处理电路响应于用于认证给定指针的指令:
基于所述给定指针的所述地址预测信息获得预测的指针签名;
将所述预测的指针签名与由用于认证的所述指令标识的指针签名进行比较;以及
响应于所述比较检测到匹配,确定所述给定指针有效。
CN202280049880.4A 2021-07-15 2022-07-07 用于指针认证的装置和方法 Pending CN117642741A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2110180.3 2021-07-15
GB2110180.3A GB2608855B8 (en) 2021-07-15 2021-07-15 Apparatus and method for pointer authentication
PCT/GB2022/051754 WO2023285785A1 (en) 2021-07-15 2022-07-07 Apparatus and method for pointer authentication

Publications (1)

Publication Number Publication Date
CN117642741A true CN117642741A (zh) 2024-03-01

Family

ID=77443514

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280049880.4A Pending CN117642741A (zh) 2021-07-15 2022-07-07 用于指针认证的装置和方法

Country Status (5)

Country Link
EP (1) EP4371020A1 (zh)
KR (1) KR20240027130A (zh)
CN (1) CN117642741A (zh)
GB (1) GB2608855B8 (zh)
WO (1) WO2023285785A1 (zh)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2547249B (en) * 2016-02-12 2019-09-11 Advanced Risc Mach Ltd An apparatus and method for generating signed bounded pointers
US11144631B2 (en) * 2018-09-11 2021-10-12 Apple Inc. Dynamic switching between pointer authentication regimes
CN112579176B (zh) * 2020-12-17 2023-03-28 成都海光微电子技术有限公司 记录地址历史的装置和方法

Also Published As

Publication number Publication date
WO2023285785A1 (en) 2023-01-19
EP4371020A1 (en) 2024-05-22
GB2608855B (en) 2024-02-21
GB2608855B8 (en) 2024-03-06
GB202110180D0 (en) 2021-09-01
GB2608855A (en) 2023-01-18
KR20240027130A (ko) 2024-02-29

Similar Documents

Publication Publication Date Title
US9767284B2 (en) Continuous run-time validation of program execution: a practical approach
TWI470547B (zh) 非循序執行微處理器及其操作方法
CN103093150A (zh) 一种基于可信芯片的动态完整性保护方法
US10867031B2 (en) Marking valid return targets
Kim et al. Reinforcing meltdown attack by using a return stack buffer
CN112148372A (zh) 用于推测性侧信道攻击的硬件加载强化
CN114662426A (zh) 检测瞬态执行攻击的仿真状态
US11468168B1 (en) Systems and methods for optimizing authentication branch instructions
CN112596792A (zh) 分支预测方法、装置、介质及设备
CN117642741A (zh) 用于指针认证的装置和方法
JP2019200523A (ja) 演算処理装置及び演算処理装置の制御方法
CN113360190A (zh) 可调整分支预测方法和微处理器
Zhang et al. RAGuard: An Efficient and User-Transparent Hardware Mechanism against ROP Attacks
US20150178130A1 (en) Method and System for Secure Data Processing
US12008149B2 (en) Method and system for on demand control of hardware support for software pointer authentification in a computing system
US11816484B2 (en) Hardware verification of dynamically generated code
US20220188463A1 (en) Method and system for on demand control of hardware support for software pointer authentification in a computing system
US20230418934A1 (en) Control flow integrity to prevent potential leakage of sensitive data to adversaries
US20240086526A1 (en) Mitigating pointer authentication code (pac) attacks in processor-based devices
US20230259605A1 (en) Authentication code generation/checking instructions
US20240126554A1 (en) Store to load forwarding using hashes
US7822953B2 (en) Protection of a program against a trap
Ghosh Trustguard: A containment architecture with verified output
JP2023554266A (ja) コンピューティング・システムにおけるソフトウェア・ポインタ認証のためのハードウェア・サポート
WO2024059407A1 (en) Mitigating pointer authentication code (pac) attacks in processor-based devices

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication