CN115374440A - 安全防御方法和电子装置 - Google Patents

安全防御方法和电子装置 Download PDF

Info

Publication number
CN115374440A
CN115374440A CN202211029408.2A CN202211029408A CN115374440A CN 115374440 A CN115374440 A CN 115374440A CN 202211029408 A CN202211029408 A CN 202211029408A CN 115374440 A CN115374440 A CN 115374440A
Authority
CN
China
Prior art keywords
value
address
coprocessor
instruction
jump destination
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
CN202211029408.2A
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.)
Beijing Eswin Computing Technology Co Ltd
Original Assignee
Beijing Eswin Computing Technology Co 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 Beijing Eswin Computing Technology Co Ltd filed Critical Beijing Eswin Computing Technology Co Ltd
Priority to CN202211029408.2A priority Critical patent/CN115374440A/zh
Publication of CN115374440A publication Critical patent/CN115374440A/zh
Priority to US18/147,882 priority patent/US20240070263A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • 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/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Virology (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Storage Device Security (AREA)

Abstract

本公开的实施例提供了一种安全防御方法和电子装置。该安全防御方法用于运行操作任务的主处理器,包括:向协处理器发送掩码配置指令,以在协处理器的掩码寄存器保存掩码配置,其中,该掩码配置用于协处理器在加密过程或验证过程中对接收的目的地址值进行掩码处理;向协处理器发送对应于操作任务的参考地址配置指令,以在协处理器的参考地址寄存器保存参考地址,其中,该参考地址用于协处理器在验证过程进行验证操作。该安全防御方法可以用于防止缓冲区溢出攻击等。

Description

安全防御方法和电子装置
技术领域
本公开的实施例涉及一种安全防御方法和电子装置。
背景技术
近些年来影响计算机系统安全的最常见的漏洞之一就是缓冲区溢出攻击。一次成功的缓冲区溢出攻击可以修改计算机系统运行控制流,例如,可以修改程序的返回地址、调用函数的EBP,或者修改函数指针、GOT表等,从而将程序引向攻击者预设的攻击程序,以执行恶意代码而造成整个程序的崩坏,又或者让攻击者获取部分系统的控制权,造成整个计算机系统的安全危机。因此,对于缓冲区溢出攻击的防御具有极其重要的现实意义。
总体来说,缓冲区溢出攻击可以分为两种模式:(一)直接篡改EIP等程序运行关键数据;(二)通过缓冲区溢出修改指针变量等,间接篡改EBP和EIP等关键数据。
为了缓解内存安全违例的威胁,人们也提出了一些技术。这些技术比如ASLR机制,该机制通过在初始化程序的地址空间之时,随机一个偏移量加到在存放关键数据的栈、堆等内存段的起始地址前,加大攻击者跳转到内存特定位置的难度。又例如DEP机制,该机制实现了地址的W⊕X原则,即可写入的地址不可执行,可执行的地址不可写入,该机制通过将数据段的地址空间通过标志位设置为不可执行来阻止攻击者执行注入的恶意程序段,一旦系统从这些地址空间进行取指令时,CPU就会报内存违例异常,进而杀死进程。栈空间也被操作系统设置了不可执行属性,因此普通的攻击代码(shellcode)注入无法执行。
上述两种预防机制在一定程度上很好的保护了计算机系统中程序的运行,但是针对更加复杂的攻击手段,这两种预防机制则起不到很好的效果。例如,针对ASLR机制保护,随机化只是将每次库函数加载地址随机,库函数间相对地址不变,因此攻击者可以通过GOT表来泄漏库函数地址,以此推导出运行程序中其他函数的地址;例如,针对DEP机制,保护攻击者可以利用动态链接库或者程序中已经存在的代码段构造栈中的返回地址和数据实现Ret2libc攻击。
之后Stack Canary作为一种更加有效的预防机制被提出。Stack Canary机制可以通过在缓冲区和返回地址间插入一个Canary Word,当缓冲区被溢出时,在返回地址被覆盖之前Canary Word会首先被覆盖。通过检查Canary Word的值是否被修改,就可以判断是否发生了溢出攻击。然而如果使用Canary Word值插在缓冲区末尾,会有一些系统函数允许写入Canary Word值导致溢出攻击依旧可行。
发明内容
针对上述缓冲区溢出攻击,本公开的实施例提供了一种安全防御方法和电子装置。
本公开的至少一实施例提供了一种操作任务的安全防御方法,用于运行所述操作任务的主处理器,包括:向协处理器发送掩码配置指令,以在所述协处理器的掩码寄存器保存掩码配置,其中,所述掩码配置用于所述协处理器在加密过程或验证过程中对接收的目的地址值进行掩码处理;向所述协处理器发送对应于所述操作任务的参考地址配置指令,以在所述协处理器的参考地址寄存器保存参考地址,其中,所述参考地址用于所述协处理器在所述验证过程进行验证操作。
本公开的至少一实施例提供了一种电子装置,包括主处理器、与所述主处理器通信的协处理器以及存储器,其中,所述存储器上存储有计算机可执行代码,所述计算机可执行代码被所述主处理器和所述协处理器执行时用于实施上述安全防御方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了根据本公开的至少一实施提供处理装置及其协处理器的示意图。
图2A示出了根据本公开至少一个实施例的操作指令至少部分格式的示意图。
图2B示出了根据本公开至少一个实施例的操作指令的示例的示意图。
图3示出了根据本公开至少一个实施例的参考地址包括基地址无用高位以及部分有效高位的示例。
图4A示出了根据本公开至少一个实施例的安全防御方法中的加密操作的一个示例。
图4B示出了根据本公开至少一个实施例的安全防御方法中的验证/解密操作的一个示例。
图4C示出了根据本公开至少一个实施例的安全防御方法中的验证/解密操作的相对于图4A和图4B的变型示例。
图5示出了根据本公开至少一实施例的在主处理器执行的安全防御方法的框图。
图6为本公开至少一个实施例提供的一种电子装置的示意框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本公开的至少一实施例提供了一种使用硬件协同处理计算机缓冲区溢出安全问题的安全防御方法及其处理装置以及该处理装置包括的协处理器,可以缓解计算机缓冲区溢出的威胁,该安全防御方法及其处理装置相较于软件形式的指针加密设计,通过协处理器辅助加密和验证(解密),可以有效避免系统运行效率降低,并且不会产生额外的内存开销,在大幅提高安全性的情况下,系统性能损耗不明显,可高效地解决计算机缓冲区溢出的安全防御问题。
图1示出了根据本公开的至少一实施提供处理装置及其包括的协处理器。如图1所示,该处理装置10包括一个或多个主处理器(或主处理器核)100和一个或多个协处理器(或协处理器核)200。主处理器100包括通信接口110,且通过通信接口110与协处理器200通信。主处理器100配置为运行至少一项计算机程序,得到对应于该计算机程序的进程,并且例如该进程可以包括多个并行线程,且在计算机程序运行的过程中该进程或该进程的线程之一可以发送操作指令到协处理器200,以配置协处理器200,或调用对协处理器200以实现安全防御功能。该计算机程序包括系统程序和/或应用程序,该系统程序例如为操作系统。该处理装置通过协处理器辅助加密和解密,可高效地解决计算机缓冲区溢出的安全防御问题。
在本公开中,使用“操作任务”来指代进程或线程。这里,进程用于描述一个计算机程序的执行过程,操作系统为每个进程分配有独立的地址空间等资源;线程隶属于某个进程,在该进程的地址空间内执行。在操作系统内,多个进程可以并行交替执行,对于每个进程创建并维护进程控制块(PCB),用于描述该进程的当前情况以及控制进程运行的信息;对于同一个进程,多个线程可以并行交替执行,对于每个线程可以创建并维护线程控制块(TCB),用于描述该线程的当前情况以及控制进程运行的信息,而这些线程的有关资源分配等信息已经记录于所属的对应进程的PCB中(也即线程的PCB与所属的进程的相同),因此TCB的内容较对应的PCB的内容少。在本公开的实施例中,在进程或线程运行的过程中存在执行指令序列跳转的情形或使用函数指针的情形。
如图1所示,在至少一个实施例中,用于操作任务的安全防御的协处理器200包括控制模块201、译码器202、验证模块203和密钥寄存器204。
控制模块201在该协处理器200中,根据操作指令所指示的需完成的操作,发出各种操作控制信号,控制被控对象完成指令的执行。控制模块201与其他组成部件通信连接,以提供操作控制信号。
译码器202用于对协处理器200接收到操作指令进行解析,确定这条操作指令的操作码是什么,以决定操作的性质和方法,由此控制模块201可以(按照一定时序)发出各种操作控制信号。
例如,验证模块203可以采用加密算法或验证算法,例如采用对称加密算法或消息验证码(MAC)算法等,以用于加密操作和验证操作。发送方和接收方采用相同密钥和相同算法,对接收的待加密消息进行运算,并比较运算结果以进行验证。
当验证模块203配置为采用加密算法时,对接收的待加密消息(明文)进行加密运算得到加密后信息(密文)。例如,加密模块203配置为根据接收的密钥和待加密消息(明文),对待加密消息(明文)进行加密运算得到加密后信息(密文),所得到的密文可以用于后续解密或验证操作。例如,在本公开的实施例中,待加密消息为跳转目的地址值。
例如,该加密模块可以采用对称加密算法,例如,可以采用DES(Data EncryptionStandard)加密算法,也即,例如该验证模块可以是DES加密模块。DES加密算法是对称的,使用同一个密钥来加密数据和解密数据。DES加密模块加密解密使用的是同一个密钥,并通过分组加密的方式以64bit大小的明文为基本组进行分组加密,最终将生成的数据按位进行拼接组成最后的密文。DES分组的大小例如是64位,如果加密的数据长度不是64位的倍数,可以按照某种具体的规则来填充位。
例如,当验证模块203配置为采用验证算法时,采用密钥对接收的待加密消息(原始消息)使用消息验证码(MAC)算法进行运算生成MAC值,此时验证模块203可以是消息验证码模块。例如,所得到的MAC值和原始消息一起传输,接收方使用相同密钥且采用相同的算法再生成MAC值,然后进行比较,一旦两个MAC值相同表示MAC验证正确,否则验证失败。例如,MAC算法可以是HMAC(Hash-based Message Authentication Code)算法,其使用Hash算法作为加密基元。
密钥寄存器204配置为用于保存密钥参考值,且提供该密钥参考值用于产生验证模块在加密过程或验证过程中所需要使用的密钥。该密钥参考值例如为随机数,例如可以从主处理器100一侧获取的,或者是在该协处理器200内本地生成的。对于在该协处理器200内本地生成密钥参考值的示例,如图1所示,协处理器200还可以进一步包括随机数生成模块207,该随机数生成模块207配置为生成随机数,例如,可以使用各种可用的算法或原理来生成所需的随机数,所得到的随机数的位数例如可以是64位、128位等,本公开的实施例对此不作限制。
如下面所述,密钥参考值是与在主处理器上运行的进程是一一对应的(例如是与程序绑定的),用于标识该进程。例如,对应于一项程序的密钥参考值是在每次该程序被加载到系统中作为进程运行时随机分配的,例如保存在该进程的PCB中。
在至少另一个实施例中,协处理器200还可以进一步包括参考地址寄存器205,该参考地址寄存器205用于存储与操作任务对应的参考地址,该参考地址用于在解密验证阶段用于恢复返回目的地址(具体参见后面的说明)。
在至少另一个实施例中,协处理器200还可以进一步包括掩码寄存器206,该掩码寄存器206用于存储掩码配置,该掩码配置例如是包括多个位的二进制数值,其对应于一定的模式(这里可简称“第一模式”),例如,该掩码配置的二进制数值中为1的位表示,被处理二进制数值中对应的位将被保留,对应地,该掩码配置的二进制数值中为0的位表示,被处理二进制数值中对应的位将被置零,对应的掩码运算例如为与(AND)运算。例如,掩码配置为8位的10100000,被处理二进制数值也为8位,则使用该掩码配置进行掩码运算后,被处理二进制数值的第7位和第5位将被保留,而其余位被置零;又例如,掩码配置为32位的FF000000,被处理二进制数值也为32位,则使用该掩码配置进行掩码运算后,被处理二进制数值的高8位将被保留,而其余位被置零。
例如,掩码寄存器206和参考地址寄存器205的值仅可通过与数据操作相关的MSET与BSET指令进行修改。
通信接口110用于处理主处理器100和协处理器200之间通信。该通信接口110例如可以是独立于主处理器100和协处理器200的一个装置或模块,分别与主处理器100和协处理器200通信;或者,该通信接口110例如可以是主处理器100的一部分,与处理装置10包括协处理器200之内的其他组件或部件通信。该通信接口110例如可以根据一定的通信协议进行构建,例如可以包括一个或多个缓存区,以缓存传送的一种或多种消息。
主处理器除了包括常规的取值单元、译码单元、执行单元、至少一级缓存、存储管理单元(MMU)等,在一项程序的运行过程中还维护有对应于该程序的进程的进程控制块(Process Control Block,PCB),该PCB是对应的进程存在的唯一标志,系统通过PCB对进程进行控制和调度。
在工作过程中,主处理器100上运行的程序(进程)通过至少一个操作指令来操作协处理器200。图2A示出了根据本公开至少一个实施例的操作指令至少部分格式的示意图。如图2A所示,该操作指令可以包括如下字段/位:
·操作码(opcode)字段,指示指令将要进行的操作;
·目的寄存器(rd)字段;
·源寄存器(rs)字段,根据需要,该源寄存器字段可以包括一个或多个源寄存器,例如第一源寄存器(rs1)或第二源寄存器(rs2);
·寄存器占用状态字段,包括多位,分别对应于目的寄存器以及源寄存器(一个或多个),例如,在同时具有前述寄存器rs1、rs2、rd的情形,分别包括xs1、xs2、xd这三个位,其中,xs1位表示是否占用第一源寄存器,xs2位表示协处理器是否占用第二源寄存器,xd位表示是否占用目的寄存器等。
该操作指令中各个字段的大小以及顺序等则可以根据不同的指令集进行相应地改变,本公开的实施例对此不作限制。
在本公开的至少一个实施例中,按照如上格式定义了例如下示例性的六条操作指令,从而可以控制协处理器以完成安全防御操作,用于解决计算机缓冲区溢出的安全防御问题。
如图1所示,主处理器100通过通信接口110将操作指令(cmd)发送给协处理器200,以及根据发送给协处理器200的操作指令,将相关寄存器(源寄存器rs1和/或源寄存器rs2)的值发送给协处理器200;协处理器200通过该通信接口110将操作结果(包括目的寄存器rd的寄存器号以及返回值)返回给主处理器100。例如,通信接口110还可以标记协处理器200的状态(例如busy(忙)、idle(闲)等),主处理器100可以读取该状态;又例如,通信接口110还可以根据需要具有访问主处理器100一侧的内存、引发中断等功能。
例如,下文所描述的“跳转目的存储地址”可以是程序调用函数时在跳转前保存的当前程序地址(程序计数器的值)的存储地址,而“跳转目的地址值”则是在该存储地址中存储的地址值(即程序计数器的值);又例如,“跳转目的存储地址”可以是程序创建函数指针时函数指针值的存储地址(即指针地址),而“跳转目的地址值”则是在该存储地址中存储的地址值(即指针值)。
这些操作指令包括:
指令0(INSTRUCTION_0):密钥参考值加载指令,例如,对应的进程开始工作或者在进程切入时,使用该指令指示协处理器将该指令rs1字段指定的第一源寄存器中存储的值(密钥参考值)加载到协处理器的密钥寄存器中,或者使用该指令指示协处理器产生密钥参考值并且将该密钥参考值存储到协处理器的密钥寄存器中。例如,该执行该指令0之前,在主处理器一侧先将密钥参考值从进程对应的进程控制块(PCB,Process Control Block)复制到第一源寄存器中。
指令1(INSTRUCTION_1):密钥参考值存储指令,例如,在程序对应的进程切出或结束时,使用该指令指示协处理器将密钥寄存器中的存储的密钥参考值取出并存入到该指令的rd字段指定的目的寄存器中,由此例如可以进一步将该密钥参考值存储在主处理器上中对应于操作任务(例如进程或线程)的进程控制块(PCB)内,随程序的其他关键信息一同被安全地保存。
该密钥参考值是与程序一一对应的,并且例如在每一个时刻协处理器的密钥寄存器中存储的密钥参考值都是唯一的,由此使用该密钥参考值可以进一步提高安全性。
指令2(INSTRUCTION_2):掩码配置指令,例如,在程序对应的进程开始工作时,使用该指令指示协处理器将该指令的rs1字段指定的第一源寄存器中的存储的值载入到掩码寄存器中以提供掩码配置,该掩码配置用于指明按照一定模式(第一模式)在输入的跳转目的地址值中哪几位将作为验证值存放位置,例如,该第一模式指定跳转目的地址值(地址值)中的高m位用于存放验证值,或者高m位中选择的n位(例如奇数位或偶数位)用于存放验证值。
在一些实施例中,掩码配置例如是固化在协处理器中的,那么此时协处理器中例如可以不包括掩码寄存器,相应地,也无需该掩码配置指令。
指令3(INSTRUCTION_3):参考地址配置指令,例如,在程序对应的进程工作过程中,例如在开始工作时,使用该指令指示协处理器将该指令的rs1字段指定的第一源寄存器中的存储的值(参考地址值)载入到协处理器的参考地址寄存器中,用于验证通过后进行跳转目的地址值(地址值)的恢复。例如,该执行该指令3之前,在主处理器一侧先将参考地址值例如从进程对应的进程控制块(PCB)复制到第一源寄存器中。
例如,用于不同的程序的参考地址彼此不同。例如,该参考地址可以是在操作系统中为对应的程序(进程)所分配的地址空间的虚拟地址的基地址或物理地址的基地址,或者是基地址的一部分(例如其高位的一部分)。计算机系统中每个虚拟地址包括虚拟基地址+偏移值,同样地,每个物理地址包括物理基地址+偏移值。通常,操作系统为不同的进程分配不同的地址空间,彼此不重叠,因此不同的进程的基地址彼此不同,另一方面,属于同一进程的多个线程可以具有相同的基地址。
在本公开的至少一些实施例中,掩码配置和参考地址彼此配合使用,例如,掩码配置用于仅对地址中对应于参考地址的部分(位)进行处理,例如,将使用掩码配置将地址中的基地址部分提取出来(即将偏移值部分置零而基地址部分保持不变),或将基地址部分移除(即将基地址部分置零而偏移值部分保持不变)。
例如,在64位架构中,位宽为64位(bit),然而计算机系统中的虚拟地址通常不会使用全部64位;例如,RISC-V指令集中虚拟地址目前通常使用sv32、sv39和sv48三种分页模式。因此,系统的虚拟地址的基地址中在高位存在无用位(例如,这些无用位均为0),因此,在本公开的至少一个实施例中,仅利用基地址中这些无用高位来存放验证值(验证码),或者还可以利用一部分基址值的有效高位来存放验证值(验证码);在仅利用无用高位的示例中,由于基址值的有效位没有被修改,所以可以无需考虑用于恢复跳转目的地址值的对应的基址值。又例如,在32位架构中,位宽为32位(bit),此时系统大多采用物理地址,由于系统内存(或者给进程分配的地址空间)通常相对较小(例如小于4G,例如1G),因此物理地址的基地址中仍然可能存在一些无用高位,另一方面,对于程序而言,基址值的有效高位通常在程序的已经分配的地址空间范围内不会发生改变,如使用4级页表的情况下,通常第0级页表和第1级页表可能程序的运行过程中不会改变,因此,在本公开的至少一个实施例中,利用基地址无用高位以及部分或全部有效高位来存放验证值(验证码),此时则需要考虑用于恢复目的地址的对应的基址值。基址值由在主处理器上运行的系统(软件)维护。
图3示出了参考地址包括基地址无用高位以及部分有效高位的示例。
指令4(INSTRUCTION_4):跳转目的加密指令,该指令的rs1字段指定的第一源寄存器中存储的值为跳转目的地址值,例如待加密指针;该指令的rs2字段指定的第二源寄存器中存储的值为跳转目的存储地址,例如指针地址;该指令的rd字段指定的目的寄存器用于存储输出的加密跳转目的地址值。
具体而言,将该指令的rs1字段指定的第一源寄存器中存储的值(跳转目的地址值,例如待加密指针)根据掩码配置移除预定模式(例如称为“第一模式”)指示的部分位,得到第一中间值;基于跳转目的存储地址、对应于当前进程或线程对应的密钥参考值和第一中间值进行验证运算,得到加密结果值;将所得到的加密结果根据掩码配置,保留前述预定模式指示的部分位后,再与跳转目的地址值进行验证运算(例如异或运算),得到加密跳转目的地址值(例如加密指针),然后将该加密跳转目的地址值输出到该指令的rd字段指定的目的寄存器中。
例如,在一个示例中,在程序对应的进程或线程的工作过程中,使用上述指令将指示协处理器将该指令的rs2字段指定的第二源寄存器中存储的值(跳转目的存储地址,例如指针地址)与密钥寄存器中的密钥参考值进行运算(例如异或运算)以得到密钥;将该第一中间值例如作为明文以及上述密钥一起输入验证模块中进行验证运算,以得到加密结果值。
例如,在另一个示例中,在进程或线程的工作过程中,使用上述指令将指示协处理器将该指令的rs2字段指定的第二源寄存器中存储的值(跳转目的存储地址,例如指针地址)与第一中间值进行运算(例如异或运算),得到第一中间计算结果值,由密钥寄存器中的密钥参考值得到密钥;将该第一中间计算结果值作为明文以及上述密钥一起输入验证模块中进行验证运算,得到加密结果值。
指令5(INSTRUCTION_5):跳转目的验证指令,将该指令的rs2字段指定的第二源寄存器中存储的值为跳转目的存储地址,例如指针地址;该指令的rs1字段指定的第一源寄存器中存储的值为已加密跳转目的地址值,例如已加密指针;该指令的rd字段指定的目的寄存器用于存储输出的复原的跳转目的地址值。
具体而言,将该指令的rs1字段指定的第一源寄存器中存储的值(已加密跳转目的地址值,例如已加密指针)根据掩码配置移除预定模式(例如“第一模式”)指示的部分位,得到第一中间值;基于跳转目的存储地址、对应于当前进程或线程对应的密钥参考值和第一中间值进行验证运算,得到加密结果值;将所得到的加密结果根据掩码配置,将所得到的加密结果根据掩码配置保留前述预定模式指示的部分位后,得到第二中间值,将该第二中间值与参考地址寄存器中的参考地址值进行验证运算(例如异或运算),得到用于验证的第三中间值,如果第三中间值和已加密跳转目的地址值包括的验证值(第四中间值)相同则验证通过,如果验证通过,则可以使用参考地址值与已加密跳转目的地址值得到复原的(或解密的)跳转目的地址值,将该复原的跳转目的地址值被写入到该指令的rd字段指定的目的寄存器中,否则触发异常(报警),例如将异常信息反馈给主处理器。将已加密跳转目的地址值根据掩码配置保留前述预定模式指示的部分位后,得到上述第四中间值。
例如,在一个示例中,在程序对应的进程或线程的工作过程中,使用上述指令将指示协处理器将该指令的rs2字段指定的第二源寄存器中存储的值(跳转目的存储地址,例如指针地址)与密钥寄存器中的密钥参考值进行运算(例如异或运算)以得到密钥;将该第一中间值作为例如明文以及上述密钥一起输入验证模块中进行验证运算,得到加密结果值。
例如,在另一个示例中,在进程或进程的工作过程中,使用上述指令将指示协处理器将该指令的rs2字段指定的第二源寄存器中存储的值(跳转目的存储地址,例如指针地址)与第一中间值进行运算(例如异或运算),得到第一中间计算结果值,由密钥寄存器中的密钥参考值得到密钥;将该第一中间计算结果值作为明文以及上述密钥一起输入验证模块中进行验证运算,得到加密结果值。
当协处理器接收到主处理器发送的上述操作指令之一时,协处理器的译码器对接收的操作指令进行译码,从而确定指令的操作内容,控制模块根据译码得到的操作内容产生控制信号以进行所需要的操作,例如,从主处理器的某一寄存器(例如第一源寄存器或第二源寄存器)读取值,将读取的值存入协处理器中的某一处理器,或者将协处理器中的值写入到主处理器中的某一寄存器(例如目的寄存器)等。
例如,本公开的至少实施例对于主处理器100、协处理器200以及通信接口110的规格没有限制,例如,主处理器100和协处理器200可以是基于X86、MIPS、ARM、RISC-V等指令集架构的,而通信接口110则与相应的指令集或架构匹配。
例如,在一个实施例中,主处理器100和协处理器200基于RISC-V指令集架构,例如,主处理器100可以采用Rocket核心、Boom核心(例如SonicBoom核心)、Freedom SOC核心等;例如,通信接口110为RoCC接口,例如,该RoCC接口采用的通信协议为Chisel(Constructing Hardware in an Scala Embedded Language)定义的DecoupledIO协议,DecoupledIO协议一种基于FIFO的类似ready/valid协议。对应地,在该实施例中,所采用的示例性的操作指令如图2B所示,该示例性的操作指令符合RISC-V标准中自定义指令的格式要求,共有32位,具有包括如下字段/位:
·opcode字段为指令的操作码;
·rd字段为目的寄存器,位于主处理器中;
·rs2字段为第二源寄存器,位于主处理器中;
·rs1字段为第一源寄存器,位于主处理器中;
·xs1位表示协处理器是否读取第一源寄存器中的值;
·xs2位表示协处理器是否读取第二源寄存器中的值;
·xd位表示协处理器是否写回目的寄存器;
·funct7字段表示7位的功能码,可由用户自行扩展以控制协处理器完成不同操作。
本公开的一些实施例还提供了一种安全防御方法,该安全防御方法基于上述至少一个实施例的协处理器或处理装置。
例如,在本公开至少一实施例的处理装置中,当编译一项程序时,或者在加载运行一项程序时,分析该程序的源码或可执行代码,定位到需要调用函数而向返回地址ra赋值的代码,在对返回地址值(跳转目的地址值)ra赋值的代码前插入对返回地址值ra加密的跳转目的加密指令,使得程序对应的进程或线程运行到此处时,调用协处理器对返回地址值进行加密,并存储在相应的存储地址经加密的返回地址值;然后,再定位到后面使用返回地址值ra的代码,在使用跳转目的地址值ra的代码前插入解密经加密的返回地址值ra的跳转目的验证指令,使得程序运行到此处时对从相应的存储地址获取经加密的返回地址值,然后调用协处理器对进行经加密的返回地址值进行验证,并且在验证通过的情况下从协处理器获取所需的返回地址值ra。
例如,在本公开至少一实施例的处理装置中,当编译一项程序时,或者在加载运行一项程序时,分析该程序的源码或可执行代码,定位到创建函数指针且向函数指针fp赋予函数指针值(跳转目的地址值)的代码,在向函数指针fp赋值的代码前插入对函数指针值加密的跳转目的加密指令,使得程序对应的进程或线程运行到此处时,调用协处理器对产生的函数指针值进行加密,并在对应的存储地址存储经加密的函数指针值;然后,再定位到使用函数指针值fp的代码,在使用函数指针值fp的代码前插入解密经加密的函数指针值的跳转目的验证指令,使得程序运行到此处时,从对应的存储地址获取经加密的函数指针值,然后调用协处理器对经加密的函数指针值进行验证,并且在验证通过的情况下从协处理器获取所需的函数指针值fp。
例如,在本公开至少一实施例的处理装置中,当编译一项程序时,或者在加载运行一项程序时,分析该程序的源码或可执行代码,在程序开始位置处插入密钥参考值加载指令,使得程序对应的进程或线程运行到此处时,通过执行该密钥参考值加载指令,将对应于该程序的密钥参考值加载到协处理器的密钥寄存器中。或者,在操作任务对应的进程启动或切出之后再切入时,运行密钥参考值加载指令,使得程序将对应于该程序的密钥参考值加载到协处理器的密钥寄存器中。例如,在开始运行一项程序时,执行该密钥参考值加载指令以完成初始化过程。
例如,当密钥参考值是在主处理器运行的系统中通过调用密钥参考值生成模块(例如随机数生成模块)得到的时,则主处理器在执行该密钥参考值加载指令之前,产生与程序对应的密钥参考值,将该参考值存入某一寄存器R1中,将密钥参考值加载指令中rs1寄存器修改为指向寄存器R1,然后将密钥参考值加载指令发送到协处理器进行处理,协处理器可以读取寄存器R1的值。当密钥参考值是在协处理器中产生的时,则可以将密钥参考值加载指令中rs1寄存器进行无效处理,然后将密钥参考值加载指令发送到协处理器进行处理,协处理器无需从主处理器一侧读取值。
例如,在本公开至少一实施例的处理装置中,当加载运行一项程序时,当该程序对应的进程被切出或结束时,系统可以执行密钥参考值存储指令,将对应于该程序的密钥参考值从协处理器的密钥寄存器读出并存储在协处理器之外,例如存储在处理器的进程控制块中;或者,当该程序被结束时,不执行密钥参考值存储指令,协处理器的密钥寄存器的值在之后将后续的程序对应的密钥参考值覆盖。
例如,在本公开至少一实施例的处理装置中,当编译一项程序时,或者在加载运行一项程序时,分析该程序的源码或可执行代码,在程序开始位置处插入掩码配置指令,使得程序运行到此处将掩码配置加载到协处理器的掩码寄存器中。或者,在主处理器上运行的操作系统启动时,运行掩码配置指令,使得程序运行到此处将掩码配置加载到协处理器的掩码寄存器中。
例如,在本公开至少一实施例的处理装置中,当编译一项程序时,或者在运行一项程序时,分析该程序的源码或可执行代码,例如,在程序开始位置处插入参考地址配置指令,使得程序对应的进程或线程运行到此处将参考地址加载到协处理器的参考地址寄存器中。或者,在程序对应的进程启动或切出之后再切入时,运行参考地址配置指令,使得程序对应的进程或线程运行到此处将参考地址加载到协处理器的参考地址寄存器中。如上所述,参考地址可以是仅包括系统所使用的虚拟地址或物理地址的基地址的无用高位,或者在没有无用高位的情况下包括部分或全部基地址,或者包括基地址的无用高位和部分有效高位。
对本公开的至少一实施例的安全防御方法进行说明,例如该实施例的方法的由协处理器执行。
首先,对加密操作部分的示例进行说明。
根据本公开的一实施例,协处理器接收用于在主处理器上运行的一程序的操作任务(例如进程或线程)的跳转目的加密请求,该跳转目的加密请求以跳转目的加密指令的方式从主处理器发送到该协处理器,其中,该跳转目的加密请求包括用于获取对应于该程序的第一跳转目的存储地址和第一跳转目的地址值的信息。例如,该第一跳转目的存储地址和第一跳转目的地址值分别是程序对应的进程或线程调用函数时的返回地址值的存储地址(返回地址)和返回地址值,或者是创建的函数指针值的存储地址(指针地址)和函数指针值。
使用掩码配置,将第一跳转目的地址值进行第一掩码处理,移除第一跳转目的地址值中符合第一模式的数据位,得到第一中间跳转目的地址值。
基于第一跳转目的存储地址、对应于操作任务的密钥参考值和第一中间跳转目的地址值进行验证运算,得到第一加密结果值。例如,该密钥参考值存储在协处理器中的密钥参考值寄存器中;对于线程的情形,与该线程对应的密钥参考值与该线程所属的进程的密钥参考值相同。
使用掩码配置,将第一加密结果值进行第二掩码处理,保留第一加密结果值中符合第一模式的数据位,得到第一中间加密结果值。
将第一中间加密结果值与跳转目的地址值进行验证运算,得到第一加密跳转目的地址值,返回第一加密跳转目的地址值,例如以此作为对跳转目的加密请求的响应。
例如,基于第一跳转目的存储地址、对应于操作任务的密钥参考值和第一中间跳转目的地址值进行验证运算,得到第一加密结果值,包括如下情形:
例如,使用第一跳转目的存储地址和对应于操作任务的密钥参考值得到第一密钥,然后基于第一密钥,对第一中间跳转目的地址值进行验证运算,得到第一加密结果值;或者,使用第一跳转目的存储地址和第一中间跳转目的地址值得到第一中间计算结果值,然后基于对应于操作任务的密钥参考值,对第一中间计算结果值进行验证运算,得到第一加密结果值。
其次,对验证(解密)操作部分的示例进行说明。
根据本公开上述实施例的一示例,协处理器接收用于在主处理器上运行的一程序的操作任务(例如进程或线程)的跳转目的验证请求,该跳转目的验证请求以跳转目的验证指令的方式从主处理器发送到该协处理器,其中,跳转目的验证请求包括用于获取对应于给程序的第二跳转目的存储地址和第二跳转目的地址值的信息。这里的第二转目的值是已加密的跳转目的地址值。
使用掩码配置,将第二跳转目的地址值进行第一掩码处理,移除第二跳转目的地址值中符合第一模式的数据位,得到第二中间跳转目的地址值。
基于第二跳转目的存储地址、对应于操作任务的密钥参考值和第二中间跳转目的地址值进行验证运算,得到第二加密结果值。同样地,例如,该密钥参考值存储在协处理器中的密钥参考值寄存器中;对于线程的情形,与该线程对应的密钥参考值与该线程所属的进程的密钥参考值相同。
使用掩码配置,将第二加密结果值进行第二掩码处理,保留第二加密结果值中符合第一模式的数据位,得到第二中间加密结果值。
将第二中间加密结果值与预存的对应于该操作任务的符合第一模式的参考地址进行消息验证运算,得到第三加密中间结果值。
使用掩码配置,将第二跳转目的地址值进行第三掩码处理,保留第二跳转目的地址值符合第一模式的数据位,得到第四加密中间结果值。
将第三加密中间结果值和第四加密中间结果值进行比较,其中,该比较的结果用于确定验证通过与否。
例如,基于第二跳转目的存储地址、对应于操作任务的密钥参考值和第二中间跳转目的地址值进行验证运算,得到第二加密结果值,包括如下情形:
使用第二跳转目的存储地址和对应于操作任务的密钥参考值得到第二密钥,然后基于第二密钥,对第二中间跳转目的地址值进行验证运算,得到第二加密结果值;或者,使用第二跳转目的存储地址和第二中间跳转目的地址值得到第二中间计算结果值,然后基于对应于操作任务的密钥参考值,对第二中间计算结果值进行验证运算,得到第二加密结果值。
根据本公开上述实施例的一示例,除了上述加密过程和验证(解密)过程外,例如,上述安全防御方法还包括:获取密钥参考值。例如,获取密钥参考值,包括:在程序对应的进程在主处理器上开始时或切入时,接收密钥参考值加载指令;根据密钥参考值加载指令,从协处理器之外获得密钥参考值或者在协处理器之内产生密钥参考值,并且存储密钥参考值。
根据本公开上述实施例的一示例,例如,上述安全防御方法还包括:将密钥参考值取出保存到协处理器之外。将密钥参考值取出保存到协处理器之外,包括:在操作任务对应的进程在主处理器上被切出时,接收密钥参考值存储指令;根据密钥参考值存储指令,将协处理器存储的密钥参考值保存到协处理器之外。
根据本公开上述实施例的一示例,例如,上述安全防御方法还包括:接收掩码配置并将掩码配置保存在协处理器之内。接收掩码配置并将掩码配置保存在协处理器之内,包括:在程序对应的进程在主处理器上开始时,接收掩码配置指令;根据掩码配置指令,在协处理器之内保存掩码配置。
根据本公开上述实施例的一示例,例如,上述安全防御方法还包括:保存对应于操作任务的符合第一模式的参考地址。保存对应于程序的操作任务的参考地址,包括:在进行消息验证运算之前,接收参考地址配置指令;根据参考地址配置指令,在协处理器之内保存对应于操作任务的符合第一模式的参考地址。例如,第一模式为第一数量的高位数据位,参考地址为对于第一数量的高位数据位的基地址。
根据本公开上述实施例的一示例,例如,上述安全防御方法中,验证运算包括对称加密运算或消息验证码(MAC)算法,例如,该对称加密运算包括DES加密运算,该消息验证码算法包括基于哈希的消息验证码(HMAC)算法。
根据本公开上述实施例的一示例,例如,上述安全防御方法中,验证运算包括异或运算。
根据本公开上述实施例的一示例,例如,上述安全防御方法中,第一跳转目的存储地址为程序返回地址或函数指针地址,第一跳转目的地址值为程序返回地址值或函数指针地址值。
根据本公开上述实施例的一示例,例如,上述安全防御方法中,响应于验证通过,基于第二中间跳转目的地址值返回对应于程序的待用跳转目的地址值。
根据本公开上述实施例的一示例,例如,上述安全防御方法中,基于第二中间跳转目的地址值返回对应于程序的待用跳转目的地址值,包括:响应于参考地址为对应于程序的基地址,结合第二中间跳转目的地址值和参考地址得到待用跳转目的地址值。
根据本公开上述的实施例,例如,以第一跳转目的存储地址和第一跳转目的地址值分别是创建的函数指针值的存储地址(指针地址)和函数指针值为例,且以掩码配置的第一模式为对应于被处理地址中的全部基地址为例,参考图4A所示,对上述安全防御方法中的加密操作的一个示例进行说明。
如图4A所示,函数指针值(地址值)包括基地址(Base)和偏移值(Offset),掩码配置的第一模式为:掩码(Mask)与函数指针值的宽度相同且对应于基地址的部分为1而对应于偏移值的部分为0。协处理器在接收到跳转目的加密指令之后,通过该指令中记载的源寄存器rs1获取函数指针值,通过该指令中记载的源寄存器rs2获取函数指针地址(p_addr),从掩码寄存器获取已经保存的掩码(Mask)配置,从密钥参考值寄存器获取已经保存的密钥参考值(Key)。
将掩码Mask取反得到新的掩码~Mask,将函数指针值与取反后的掩码~Mask进行掩码运算,这里为与(AND)运算,得到第一中间值,该第一中间值与输入的函数指针值相比,去除了基地址(Base)部分(即将基地址部分置零)而仅保留了偏移值(Offset)部分;将函数指针地址与密钥参考值进行例如异或(XOR)运算,得到密钥;将该密钥以及第一中间值(例如明文)使用验证模块进行验证运算得到第二中间值,该第二中间值为密文(MAC);将该第二中间值与掩码Mask进行与(AND)运算,得到第三中间值,该第三中间值与第二中间值相比,去除了对应于偏移值的部分,也即仅保留了所得到的密文中对应于基地址的高位部分;将该第三中间值与输入的函数指针值进行异或(XOR)运算,得到加密后的函数指针值,该加密后的函数指针值包括在对应于基地址的高位部分的经加密和验证运算所得到的验证值(MAC’)部分,以及包括原函数指针值中的偏移值。
根据本公开上述实施例,例如,以第一跳转目的存储地址和第一跳转目的地址值分别是创建的函数指针值的存储地址(指针地址)和函数指针值为例,且以掩码配置为第一模式对应于处理地址中全部基地址为例,参考图4B所示,对上述安全防御方法中的验证/解密操作的一个示例进行说明。
如图4B所示,同样地,函数指针值(地址值)包括基地址(Base)和偏移值(Offset),掩码配置的第一模式为:掩码(Mask)与函数指针值的宽度相同且对应于基地址的部分为1而对应于偏移值的部分为0;加密后的函数指针值包括在对应于基地址的高位部分的经加密和验证运算所得到的验证值(MAC’)部分和包括原函数指针值中的偏移值(Offset)。协处理器在接收到跳转目的验证指令之后,通过该指令中记载的源寄存器rs1获取已加密的函数指针值,通过该指令中记载的源寄存器rs2获取函数指针地址(p_addr),从掩码寄存器获取已经保存的掩码(Mask)配置,从密钥参考值寄存器获取已经保存的密钥参考值(Key),从参考地址寄存器获取已经保存的作为参考地址的基地址(Base)。
将掩码Mask取反得到新的掩码~Mask,将已加密函数指针值与取反后的掩码~Mask进行与(AND)运算,得到第一中间值,该第一中间值与输入的已加密的函数指针值相比,去除了验证值(MAC’)部分而仅保留了偏移值(Offset)部分;将函数指针地址与密钥参考值进行异或(XOR)运算,得到密钥;将该密钥以及第一中间值使用验证模块进行验证运算得到第二中间值,该第二中间值为密文(MAC);将该第二中间值与掩码Mask进行与(AND)运算,得到第三中间值,该第三中间值与第二中间值相比,去除了对应于偏移值的部分,也即仅保留了所得到的密文中对应于基地址的高位部分;将该第三中间值与基地址进行异或(XOR)运算,得到第四中间值,该第四中间值在对应于基地址的高位部分为计算后的验证值(MAC”),将该计算后的验证值(MAC”)与经加密的函数指针值中的验证值(MAC’)进行比较,如果二者相同,则表示验证通过,否则即触发异常(Interrupt),也即用于进行验证的(经加密的)函数指针值被修改了,不再是最初在加密时返回的经加密的函数指针值了。
在验证通过的情形,结合基地址与输入的经加密的函数指针值中的偏移值得到解密后的函数指针值,即结合基地址和第一中间值得到解密后的函数指针值,将该解密后的函数指针返回给主处理器(即写入目的寄存器rd中)。
为了进行上述比较,可以先经加密的函数指针值与掩码Mask进行与(AND)运算得到第五中间值,该第五中间值相对于输入的经加密的函数指针值,去除了偏移值而仅保留了输入的验证值(MAC’)。将第四中间值和第五中间值进行比较就实现了将计算后的验证值(MAC”)和输入的验证值(MAC’)之间的比较。
图4C示出了对于图4A和图4B所示的示例的变型,其与图4A和图4B所示的示例的区别在于,用于得到验证值的验证运算的输入不同。如图4C所示,在将函数指针值与取反后的掩码~Mask进行掩码运算(与(AND)运算),得到第一中间值之后,将该第一中间值与函数指针地址(p_addr)进行例如异或(XOR)运算得到第一中间结果值,使用密钥参考值作为密钥,将该第一中间结果值使用验证模块进行验证运算得到第二中间值,该第二中间值为例如密文(MAC)。该变型示例的其余部分与图4A和图4B所示的示例相同,因此不再赘述。
本公开的一些实施例还提供了一种协处理器,用于执行上述安全防御方法。
根据本公开的至少一个实施例,例如参考图1所示,所提供的协处理器用于程序的安全防御,包括译码器、密钥寄存器、验证模块和控制模块。
该译码器配置为对输入协处理器的操作指令进行译码,其中,操作指令包括跳转目的加密指令,其中,跳转目的加密指令包括用于获取对应于操作任务的第一跳转目的存储地址和第一跳转目的地址值的信息。
该密钥寄存器配置为存储对应于操作任务的密钥参考值。
该控制模块配置为,使用掩码配置,将第一跳转目的地址值进行第一掩码处理,移除第一跳转目的地址值中符合第一模式的数据位,得到第一中间跳转目的地址值。
该验证模块配置为,基于第一跳转目的存储地址、对应于操作任务的密钥参考值和第一中间跳转目的地址值进行验证运算,得到第一加密结果值。
对应地,该控制模块还配置为,使用掩码配置,将第一加密结果值进行第二掩码处理,保留第一加密结果值中符合第一模式的数据位,得到第一中间加密结果值,将第一中间加密结果值与跳转目的地址值进行验证运算,得到第一加密跳转目的地址值,返回第一加密跳转目的地址值,例如以此作为对跳转目的加密请求的响应。
基于第一跳转目的存储地址、对应于操作任务的密钥参考值和第一中间跳转目的地址值进行验证运算,得到第一加密结果值,包括如下情形:
例如,使用第一跳转目的存储地址和对应于操作任务的密钥参考值得到第一密钥,然后基于第一密钥,对第一中间跳转目的地址值进行验证运算,得到第一加密结果值;或者,例如,使用第一跳转目的存储地址和第一中间跳转目的地址值得到第一中间计算结果值,然后基于对应于操作任务的密钥参考值,对第一中间计算结果值进行验证运算,得到第一加密结果值。
根据本公开上述实施例的一示例,例如,该协处理器还包括参考地址寄存器,其中,该参考地址寄存器配置为存储对应于操作任务的基地址。
操作指令还包括跳转目的验证指令,跳转目的验证指令包括用于获取对应于程序的第二跳转目的存储地址和第二跳转目的地址值的信息;对应地,控制模块还配置为,使用掩码配置,将第二跳转目的地址值进行第一掩码处理,移除第二跳转目的地址值中符合第一模式的数据位,得到第二中间跳转目的地址值。该验证模块还配置为,基于第二跳转目的存储地址、对应于操作任务的密钥参考值和第二中间跳转目的地址值进行验证运算,得到第二加密结果值。对应地,该控制模块还配置为,使用掩码配置,将第二加密结果值进行第二掩码处理,保留第二加密结果值中符合第一模式的数据位,得到第二中间加密结果值,将第二中间加密结果值与预存的对应于操作任务的符合第一模式的参考地址进行消息验证运算,得到第三加密中间结果值;使用掩码配置,将第二跳转目的地址值进行第三掩码处理,保留第二跳转目的地址值符合第一模式的数据位,得到第四加密中间结果值,将第三加密中间结果值和第四加密中间结果值进行比较,其中,该比较的结果用于确定验证通过与否。
基于第二跳转目的存储地址、对应于操作任务的密钥参考值和第二中间跳转目的地址值进行验证运算,得到第二加密结果值,包括如下情形:
例如,使用第二跳转目的存储地址和对应于操作任务的密钥参考值得到第二密钥,然后基于第二密钥,对第二中间跳转目的地址值进行验证运算,得到第二加密结果值;或者,例如,使用第二跳转目的存储地址和第二中间跳转目的地址值得到第二中间计算结果值,然后基于对应于操作任务的密钥参考值,对第二中间计算结果值进行验证运算,得到第二加密结果值。
根据本公开上述实施例的一示例,例如,操作指令还包括参考地址配置指令,对应地,控制模块还配置为,根据参考地址配置指令在协处理器之内保存对应于操作任务的符合第一模式的参考地址。
根据本公开上述实施例的一示例,例如,第一模式为第一数量的高位数据位,参考地址为对于第一数量的高位数据位的基地址。
根据本公开上述实施例的一示例,例如,该协处理器还包括掩码寄存器,其中,掩码寄存器配置为存储掩码配置。
根据本公开上述实施例的一示例,例如,操作指令还包括掩码配置指令,对应地,控制模块还配置为,根据掩码配置指令获取掩码配置,并将掩码配置存储在掩码寄存器中。
根据本公开上述实施例的一示例,例如,操作指令还包括密钥参考值加载指令,对应地,控制模块还配置为,根据密钥参考值加载指令,从协处理器之外获得密钥参考值或者在协处理器之内产生密钥参考值,并且在密钥参考值寄存器中存储密钥参考值。
根据本公开上述实施例的一示例,例如,该协处理器还包括随机数生成模块,该随机数生成模块配置为在协处理器之内产生密钥参考值,之后将该密钥参考值保存在密钥寄存器中。
根据本公开上述实施例的一示例,例如,操作指令还包括密钥参考值存储指令,对应地,控制模块还配置为,根据密钥参考值存储指令将协处理器存储的密钥参考值保存到协处理器之外。
根据本公开上述实施例的一示例,例如,控制模块还配置为,响应于验证通过,基于第二中间跳转目的地址值返回对应于程序的待用跳转目的地址值。
根据本公开上述实施例的一示例,例如,控制模块还配置为,响应于参考地址为对应于程序的基地址,结合第二中间跳转目的地址值和参考地址得到待用跳转目的地址值。
根据本公开上述实施例的一示例,例如,验证模块为DES验证模块或消息验证模块。
接下来,对本公开的至少一实施例的安全防御方法进行说明,例如该实施例的方法的由主处理器执行。图5示出了根据本公开至少一实施例的在主处理器执行的安全防御方法的框图。如图5所示,当一程序运行时,将根据需要,执行加载密钥参考值、存储密钥参考值、掩码配置、参考地址配置、加密目的地址值以及解密目的地址值等操作,具体的示例如下所述。
根据本公开的一实施例,主处理器运行程序,在该程序的运行过程中,向协处理器发送掩码配置指令,以在协处理器的掩码寄存器保存掩码配置,其中,掩码配置用于协处理器在加密过程或验证过程中对接收的目的地址值进行掩码处理;向协处理器发送对应于程序的参考地址配置指令,以在协处理器的参考地址寄存器保存参考地址,其中,参考地址用于协处理器在验证过程中得到对应于程序的解密后的待用跳转目的地址值。
根据本公开上述实施例的一示例,例如,该安全防御方法还包括:在操作任务对应的进程在主处理器上开始时或切入时,向协处理器发送密钥参考值加载指令,以在协处理器的密钥参考值寄存器中保存密钥参考值,其中,密钥参考值用于协处理器在加密过程或验证过程中产生密钥。
根据本公开上述实施例的一示例,例如,密钥参考值加载指令包括主处理器中保存密钥参考值的源寄存器,以使得协处理器从源寄存器读取密钥参考值,或者,密钥参考值加载指令指示协处理器产生密钥参考值。
根据本公开上述实施例的一示例,例如,该安全防御方法还包括:在主处理器产生密钥参考值并将密钥参考值存入源寄存器。
根据本公开上述实施例的一示例,例如,密钥参考值为随机数。
根据本公开上述实施例的一示例,例如,该安全防御方法还包括:在操作任务对应的进程在主处理器上被切出时,向协处理器发送密钥参考值存储指令;接收并保存协处理器根据密钥参考值存储指令返回的密钥参考值。
根据本公开上述实施例的一示例,例如,将密钥参考值保存在对应于操作任务的进程控制块(PCB)中。
根据本公开上述实施例的一示例,例如,参考地址符合掩码配置所定义的第一模式。
根据本公开上述实施例的一示例,例如,第一模式为第一数量的高位数据位,参考地址为对于第一数量的高位数据位的基地址。
根据本公开上述实施例的一示例,例如,该安全防御方法还包括:向协处理器发送跳转目的加密指令,其中,跳转目的加密指令包括用于获取对应于程序的第一跳转目的存储地址和第一跳转目的地址值的信息,协处理器根据掩码配置、第一跳转目的存储地址和第一跳转目的地址值进行加密操作得到的第一加密跳转目的地址值;从协处理器接收第一加密跳转目的地址值。
根据本公开上述实施例的一示例,例如,第一跳转目的存储地址为程序返回地址或函数指针地址,第一跳转目的地址值为程序返回地址值或函数指针地址值。
根据本公开上述实施例的一示例,例如,该安全防御方法还包括:向协处理器发送跳转目的验证指令,其中,跳转目的验证指令包括用于获取对应于程序的第二跳转目的存储地址和第二跳转目的地址值的信息,第二跳转目的地址值是已加密的跳转目的地址值,协处理器根据掩码配置、第二跳转目的存储地址和第二跳转目的地址值进行验证操作;响应于验证通过,从协处理器接收对应于程序的解密后的待用跳转目的地址值,或者,响应于验证不通过,从协处理器接收异常信息,其中,协处理器根据参考地址以及第二跳转目的地址值得到待用跳转目的地址值。
根据本公开至少一些实施例的安全防御方法,对于返回目的地址值进行加密的机制包括,结合返回目的存储地址(addr)以及与进程对应的密钥参考值,对返回目的地址值(例如返回地址ra、函数指针fp等)进行加密存储,得到密文;根据协处理内存储的掩码配置(Mask)决定验证值(MAC)放置到加密后的目的地址值中的哪些位。在程序运行的过程中,当需要使用返回目的地址值时,使用验证指令指示协处理器进行解密,通过比较验证值(MAC)是否发生变化来防御可能的攻击,验证通过后得到解密后的待用目的地址值,将其载入主处理器的寄存器,使其指向正确的目的地址,从而实现目的地址值的解密/验证过程。通过上述机制,可以使得返回目的地址值被加密隐藏,即使攻击者通过各种攻击手段更改程序的控制流方向,也无法实际改变最终解密后得到的待用目的地址值指向的位置,从而无法定位到攻击代码的位置,由此本公开的实施例可以防御缓冲区溢出攻击。
本公开的一些实施例还提供了一种处理装置,参见图1的框图所示,该处理装置包括上述任一协处理器以及与主处理器,其中,主处理器配置为运行程序,产生操作任务且发送操作指令到协处理器,协处理器配置为执行上述用于操作任务的安全防御方法。
本公开的一些实施例还提供了一种电子装置,该电子装置包括主处理器、协处理器以及存储器,其中,存储器上存储有计算机可执行代码,计算机可执行代码被主处理器和协处理器执行时用于实施上述安全防御方法。
在上述实施例中,主处理器和协处理器通过通信接口进行通信。例如,主处理器为RISC-V处理器,通信接口为RoCC接口。
图6为本公开至少一个实施例提供的一种电子装置的示意框图。本公开实施例中的电子装置可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图6示出的电子装置1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
例如,如图6所示,在一些示例中,电子装置1000包括处理装置,该处理装置可以包括上述任一实施例的处理装置,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储装置1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。在RAM 1003中,还存储有计算机系统操作所需的各种程序和数据。处理器1001、ROM 1002以及RAM1003通过总线1004被此相连。输入/输出(I/O)接口1005也连接至总线1004。
例如,以下部件可以连接至I/O接口1005:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置1006;包括诸如液晶显示器(LCD)、扬声器、振动器等的输出装置1007;包括例如磁带、硬盘等的存储装置1008;例如还可以包括诸如LAN卡、调制解调器等的网络接口卡的通信装置1009。通信装置1009可以允许电子装置1000与其他设备进行无线或有线通信以交换数据,经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸存储介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储装置1008。虽然图6示出了包括各种装置的电子装置1000,但是应理解的是,并不要求实施或包括所有示出的装置。可以替代地实施或包括更多或更少的装置。
例如,该电子装置1000还可以进一步包括外设接口(图中未示出)等。该外设接口可以为各种类型的接口,例如为USB接口、闪电(lighting)接口等。该通信装置1009可以通过无线通信来与网络和其他设备进行通信,该网络例如为因特网、内部网和/或诸如蜂窝电话网络之类的无线网络、无线局域网(LAN)和/或城域网(MAN)。无线通信可以使用多种通信标准、协议和技术中的任何一种,包括但不局限于全球移动通信系统(GSM)、增强型数据GSM环境(EDGE)、宽带码分多址(W-CDMA)、码分多址(CDMA)、时分多址(TDMA)、蓝牙、Wi-Fi(例如基于IEEE 802.11a、IEEE 802.11b、IEEE 802.11g和/或IEEE 802.11n标准)、基于因特网协议的语音传输(VoIP)、Wi-MAX,用于电子邮件、即时消息传递和/或短消息服务(SMS)的协议,或任何其他合适的通信协议。
例如,电子装置1000可以为手机、平板电脑、笔记本电脑、电子书、游戏机、电视机、数码相框、导航仪、家用电器、通信基站、工业控制器、服务器等任何设备,也可以为任意的数据处理装置及硬件的组合,本公开的实施例对此不作限制。
对于本公开,还有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上仅是本公开的示范性实施方式,而非用于限制本公开的保护范围,本公开的保护范围由所附的权利要求确定。

Claims (15)

1.一种操作任务的安全防御方法,用于运行所述操作任务的主处理器,包括:
向协处理器发送掩码配置指令,以在所述协处理器的掩码寄存器保存掩码配置,其中,所述掩码配置用于所述协处理器在加密过程或验证过程中对接收的目的地址值进行掩码处理;
向所述协处理器发送对应于所述操作任务的参考地址配置指令,以在所述协处理器的参考地址寄存器保存参考地址,其中,所述参考地址用于所述协处理器在所述验证过程进行验证操作。
2.根据权利要求1所述的安全防御方法,还包括:
在所述操作任务对应的进程在主处理器上开始时或切入时,向所述协处理器发送密钥参考值加载指令,以在所述协处理器的密钥参考值寄存器中保存密钥参考值,其中,所述密钥参考值用于所述协处理器在所述加密过程或验证过程中产生密钥。
3.根据权利要求2所述的安全防御方法,其中,所述密钥参考值加载指令包括所述主处理器中保存所述密钥参考值的源寄存器,以使得所述协处理器从所述源寄存器读取所述密钥参考值,或者,
所述密钥参考值加载指令指示所述协处理器产生所述密钥参考值。
4.根据权利要求3所述的安全防御方法,还包括:
在所述主处理器产生所述密钥参考值并将所述密钥参考值存入所述源寄存器。
5.根据权利要求2-4任一所述的安全防御方法,其中,所述密钥参考值为随机数。
6.根据权利要求2所述的安全防御方法,还包括:
在所述操作任务对应的进程在所述主处理器上被切出时,向所述协处理器发送密钥参考值存储指令;
接收并保存所述协处理器根据所述密钥参考值存储指令返回的所述密钥参考值。
7.根据权利要求6所述的安全防御方法,其中,将所述密钥参考值保存在所述主处理器中对应于所述操作任务的进程控制块(PCB)中。
8.根据权利要求1所述的安全防御方法,其中,所述参考地址符合所述掩码配置所定义的第一模式。
9.根据权利要求8所述的安全防御方法,其中,所述第一模式为第一数量的高位数据位,所述参考地址为对于所述第一数量的高位数据位的基地址。
10.根据权利要求1所述的安全防御方法,还包括:
向所述协处理器发送跳转目的加密指令,其中,所述跳转目的加密指令包括用于获取对应于所述操作任务的第一跳转目的存储地址和第一跳转目的地址值的信息,所述协处理器根据所述掩码配置、所述第一跳转目的存储地址和所述第一跳转目的地址值进行所述加密过程得到的第一加密跳转目的地址值;
从所述协处理器接收所述第一加密跳转目的地址值。
11.根据权利要求10所述的安全防御方法,其中,所述第一跳转目的存储地址为操作任务返回地址或函数指针地址,所述第一跳转目的地址值为操作任务返回地址值或函数指针地址值。
12.根据权利要求1所述的安全防御方法,还包括:
向所述协处理器发送跳转目的验证指令,其中,所述跳转目的验证指令包括用于获取对应于所述操作任务的第二跳转目的存储地址和第二跳转目的地址值的信息,所述第二跳转目的地址值是已加密的跳转目的地址值,所述协处理器根据所述掩码配置、所述第二跳转目的存储地址和所述第二跳转目的地址值进行所述验证操作;
响应于验证通过,从所述协处理器接收对应于所述操作任务的解密后的待用跳转目的地址值,或者,响应于所述验证不通过,从所述协处理器接收异常信息,其中,所述协处理器根据所述参考地址以及所述第二跳转目的地址值得到所述待用跳转目的地址值。
13.一种电子装置,包括主处理器、与所述主处理器通信的协处理器以及存储器,
其中,所述存储器上存储有计算机可执行代码,所述计算机可执行代码被所述主处理器和所述协处理器执行时用于实施如权利要求1-12任一所述的安全防御方法。
14.根据权利要求13的处理装置,其中,所述主处理器和所述协处理器通过通信接口进行通信。
15.根据权利要求14的处理装置,其中,所述主处理器为RISC-V处理器,所述通信接口为RoCC接口。
CN202211029408.2A 2022-08-24 2022-08-24 安全防御方法和电子装置 Pending CN115374440A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202211029408.2A CN115374440A (zh) 2022-08-24 2022-08-24 安全防御方法和电子装置
US18/147,882 US20240070263A1 (en) 2022-08-24 2022-12-29 Security defending method and electronic apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211029408.2A CN115374440A (zh) 2022-08-24 2022-08-24 安全防御方法和电子装置

Publications (1)

Publication Number Publication Date
CN115374440A true CN115374440A (zh) 2022-11-22

Family

ID=84068312

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211029408.2A Pending CN115374440A (zh) 2022-08-24 2022-08-24 安全防御方法和电子装置

Country Status (2)

Country Link
US (1) US20240070263A1 (zh)
CN (1) CN115374440A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113673002A (zh) * 2021-08-09 2021-11-19 中国科学院软件研究所 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法
CN117075969A (zh) * 2023-08-28 2023-11-17 中国科学院软件研究所 面向risc-v处理器特权指令集一致性的形式验证方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113673002A (zh) * 2021-08-09 2021-11-19 中国科学院软件研究所 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法
CN113673002B (zh) * 2021-08-09 2023-05-16 中国科学院软件研究所 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法
CN117075969A (zh) * 2023-08-28 2023-11-17 中国科学院软件研究所 面向risc-v处理器特权指令集一致性的形式验证方法及装置

Also Published As

Publication number Publication date
US20240070263A1 (en) 2024-02-29

Similar Documents

Publication Publication Date Title
US10853270B2 (en) Cryptographic pointer address encoding
US9514285B2 (en) Creating stack position dependent cryptographic return address to mitigate return oriented programming attacks
US10303901B2 (en) Secure processor and a program for a secure processor
US7657760B2 (en) Method for sharing encrypted data region among processes in tamper resistant processor
CN115374440A (zh) 安全防御方法和电子装置
JP4115759B2 (ja) 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム
KR101504857B1 (ko) 보안 시스템에서 랜덤하게 할당된 메모리 범위로 jit를 지원하는 시스템 및 방법
CN109522736B (zh) 一种在操作系统中进行密码运算的方法和系统
US20120260106A1 (en) System and method for binary layout randomization
CN101072097B (zh) 用于受信数据处理的方法和系统
KR100745430B1 (ko) 인사이퍼링 또는 디사이퍼링 방법, 장치 및 컴퓨터 판독 가능 기록 매체
US20180082057A1 (en) Access control
KR100619657B1 (ko) 메모리 관리 유닛, 코드 검증 장치 및 코드 복호 장치
CN113673002A (zh) 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法
CN110750791B (zh) 基于内存加密保障可信执行环境抗物理攻击的方法及系统
CN108959129B (zh) 一种基于硬件的嵌入式系统机密性保护方法
JP5575950B2 (ja) 無線端末装置およびシステム保護方法
CN115329322A (zh) 安全防御方法、协处理器以及处理装置
CN115994389A (zh) 一种基于risc-v架构的硬件内存加密系统及其应用
JP2004272816A (ja) マルチタスク実行システム及びマルチタスク実行方法
JP2019074913A (ja) 情報処理装置および情報処理装置のデータ処理方法
WO2021117524A1 (ja) 実行ファイル生成装置、方法、およびプログラムが記録された非一時的記憶媒体
CN117786699A (zh) 芯片初始化方法、装置、模块、电子设备和存储介质
CN116860666A (zh) 一种gpu内存保护方法、装置、芯片及电子设备

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