掌桥专利:专业的专利平台
掌桥专利
首页

基于多编码模式CPU的代码注入型攻击防护方法及装置

文献发布时间:2023-06-19 09:30:39


基于多编码模式CPU的代码注入型攻击防护方法及装置

技术领域

本发明涉及计算机安全技术,具体涉及一种基于多编码模式CPU的代码注入型攻击防护方法及装置。

背景技术

在冯.诺伊曼体系结构计算机中,指令代码和数据共同存储在RAM(Random AccessMemory随机存取存储器)等存储区域中,CPU(Central Processing Unit中央处理单元)从RAM取出指令并执行,由此完成各种既定程序,这就是著名的存储程序计算机原理。这种设计方式无法直接从内存的二进制形式上区分数据和代码,从而给了用户数据中包含的代码得以执行的机会,是目前计算机系统中很多漏洞存在的本质原因。

代码注入型攻击(Code Injection Attack)是目前最常见而且破坏性很大的攻击,攻击者通过一定的方法将恶意代码注入到用户的进程,并通过溢出等手段改变程序正常的控制流,使程序执行恶意代码从而实现某种攻击目的。注入的本质是,把用户输入的数据当代码执行,这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。

一个简单的代码注入型攻击示例如图1所示。在图1下方是一个函数申请的缓冲区,在图1上方是该函数的栈。由于栈是低地址方向增长的,因此局部数组buffer的指针在缓冲区的下方。当把data的数据拷贝到buffer内时,超过缓冲区区域的高地址部分数据会“淹没”原本的其他栈帧数据。攻击者在缓冲区的靠底部位置注入了攻击代码(shellcode),并在该函数原先的返回地址所在栈中的位置填写了新的地址指向注入的shellcode的起始地址。这样当函数返回时,注入的攻击代码shellcode就会被CPU执行。

目前已提出的代码注入防护方法基本可分为两类:(1)静态的解决方案(staticsolution):通过使用安全的编程语言、对源代码的静态检查、对编译器的增强、使用特殊的安全函数库等,从源代码级别消除代码注入攻击的危害;(2)运行时解决方案(run-timesolution):这一类方案通过使用局部或者全局的砂箱或虚拟机、指令随机化(randomizedinstruction set emulation,简称RISE)和地址空间随机化(address space layoutrandomization,简称ASLR),可以在极低的漏警概率下有效地阻断代码注入攻击,不需要重写重编译源代码。但是总体来说,这些方案存在多方面局限性。第一,性能损耗大;第二,防护对象受限,防护范围小;第三,防护能力不足(漏防);第四,需要修改源代码。

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于多编码模式CPU的代码注入型攻击防护方法,本发明通过软硬件结合的方式,实现对计算机所执行的指令代码的高熵随机化,使攻击者无法通过注入预先设计好的代码序列实施所期望的攻击,从而对代码注入型的攻击进行有效防护。

为了解决上述技术问题,本发明采用的技术方案为:

一种基于多编码模式CPU的代码注入型攻击防护方法,包括:

1)操作系统加载包含多种指令编码模式的代码子段的软件执行体;

2)在软件执行体的执行过程中,CPU核检测指定的异常/中断,若检测到指定的异常/中断则跳转执行下一步;

3)控制该CPU核的译码器进行随机编码模式切换,并根据切换后的编码模式针对软件执行体中对应指令编码模式的代码子段进行译码并执行,使得如果攻击者注入的攻击代码被送入该CPU核执行时会因为和译码器无法匹配而导致执行失败。

可选地,步骤1)中操作系统加载包含多种指令编码模式的代码子段的软件执行体的步骤包括:将软件执行体包含多种指令编码模式的代码子段准备对应编码的代码段内存副本并提供运行切换的机制支持,使CPU解码规则切换时,CPU的运行环境能够切换到不同的代码段副本所对应的硬件执行环境,所述硬件执行环境包含通用寄存器、状态和控制寄存器、堆栈寄存器以及指令寄存器;同时操作系统对于内核或核外进程包括数据段、堆栈段在内的其它段采用唯一的内存副本,使得在多数的解码规则切换时,这些其它段中的数据内容不进行修正就能为切换后的代码子段所使用。

可选地,所述提供运行切换的机制支持的步骤包括:虚存叠加式管理机制通过将软件执行体的多种指令编码模式的代码子段的页表项叠加在同样的页目录项上进行实施,当CPU在进行随机编码模式切换时,仅需要暂停执行体现场,然后更改页目录项中的值就可以更换不同指令编码模式的代码子段,并冲刷旁路转换缓冲TLB的内容使原先的虚地址映射失效。

可选地,步骤1)之前还包括编译生成包含多种指令编码模式的代码子段的软件执行体的步骤,且在编译生成软件执行体时针对软件执行体的代码段按照指定的指令编码模式种类生成对应的多种代码子段,所述多种代码子段之间的每条指令仅是将指令集编码进行替换的一一映射,使得多种代码子段之间使用完全一样的地址布局设计、对应的指令访问的寄存器内容和内存虚地址完全一样。

可选地,所述CPU核的译码器包括多个前端译码单元及其对应的配置寄存器,每一个前端译码单元用于在对应的配置寄存器中配置有效时执行一种预设的随机编码模式的译码。

可选地,所述CPU核的译码器前端设有编码缓存、钥匙寄存器和转换运算单元,所述钥匙寄存器包括与多种指令编码模式一一对应的钥匙代码,所述转换运算单元用于将从编码缓存中取出的指令代码、从钥匙寄存器中取出的对应指令编码模式的钥匙代码进行指定的可逆运算处理、获得译码器的真正输入编码。

可选地,步骤2)中指定的异常/中断为来自随机触发器,所述随机触发器包括个随机数发生器和定时器,其中随机数发生器生成的随机数被作为定时器从当前时间开始的触发延迟,当定时器触发时,一方面将会生成一个指定的异常/中断通知CPU核,另一方面会启动随机数发生器生成下一个定时器的随机延迟,所述CPU核在收到指定的异常/中断后开始进行随机编码模式切换时,通过访问随机数发生器的方式来确定指定的指令编码模式。

可选地,所述多种指令编码模式包括一种本原编码模式,所述本原编码模式为CPU复位启动时所执行的指令译码的编码模式;步骤1)之前还包括操作系统初始化的步骤:

S1)上电后所有CPU核自动处于本原指令解码规则状态;

S2)固件进行基本初始化,并从内存或磁盘加载系统映像并转入内核执行;

S3)所有CPU核进行主从判定,确定主CPU核和从CPU核,从CPU核进入睡眠;

S4)主CPU核从操作系统内核编码的本原编码模式的代码子段执行初始化代码,并通过同传统操作系统基本相同的操作步骤初始化系统,执行的操作包括:异常处理向量初始化、cache使能、建立基本页表、虚拟地址映射使能、初始化总线/UI设备/存储设备、唤醒所有从核;从核被唤醒后执行本原编码模式子段的本地核初始化代码;内核进入正常运行状态。

此外,本发明还提供一种基于多编码模式CPU的代码注入型攻击防护装置,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述的基于多编码模式CPU的代码注入型攻击防护方法的步骤,或者所述存储器中存储有被编程或配置以执行所述的基于多编码模式CPU的代码注入型攻击防护方法的计算机程序。

此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行所述的基于多编码模式CPU的代码注入型攻击防护方法的计算机程序。

和现有技术相比,本发明具有下述优点:本发明通过操作系统加载包含多种指令编码模式的代码子段的软件执行体;在软件执行体的执行过程中,CPU核检测指定的异常/中断,若检测到指定的异常/中断则控制该CPU核的译码器进行随机编码模式切换,并根据切换后的编码模式针对软件执行体中对应指令编码模式的代码子段进行译码并执行,使得如果攻击者注入的攻击代码被送入该CPU核执行时会因为和译码器无法匹配而导致执行失败。本发明通过软硬件结合的方式,实现对计算机所执行的指令代码的高熵随机化,使攻击者无法通过注入预先设计好的代码序列实施所期望的攻击,从而对代码注入型的攻击进行有效防护。而且,本发明能做到对任意的直接注入CPU指令序列的代码注入攻击的防护,本发明不但适用于针对用户程序的代码注入攻击防护,也适用于针对操作系统和内核程序的代码注入攻击的防护,本发明不需要获得和修改程序源代码。

附图说明

图1为现有的一种代码注入型攻击示例。

图2为本发明实施例方法的基本流程示意图。

图3为本发明实施例中对现有计算机系统的改进扩展示意图。

图4为本发明实施例中作为对比的常规CPU的译码器相关结构。

图5为本发明实施例中一种译码器的改进方式。

图6为本发明实施例中另一种译码器的改进方式。

图7为本发明实施例中随机触发器的结构示意图。

图8为本发明实施例中操作系统的模块结构示意图。

图9为本发明实施例中包含两种指令编码模式的代码子段的软件执行体实例。

图10为本发明实施例中代码子段虚存叠加式内存管理和切换实施例。

图11为本发明实施例中启动和运行流程实施流程图。

具体实施方式

如图2所示,本实施例基于多编码模式CPU的代码注入型攻击防护方法包括:

1)操作系统加载包含多种指令编码模式的代码子段的软件执行体;

2)在软件执行体的执行过程中,CPU核检测指定的异常/中断,若检测到指定的异常/中断则跳转执行下一步;

3)控制该CPU核的译码器进行随机编码模式切换,并根据切换后的编码模式针对软件执行体中对应指令编码模式的代码子段进行译码并执行,使得如果攻击者注入的攻击代码被送入该CPU核执行时会因为和译码器无法匹配而导致执行失败。

在实施代码注入攻击时,攻击者所注入的代码一般是同CPU的指令编码匹配的硬编码,本实施例的目的是在计算机在运行期间,将送入CPU的代码序列中的代码编码形式进行随机化,但保持语义不变,使攻击者事先注入的确定性代码序列无法被正常执行。本实施例基于多编码模式CPU的代码注入型攻击防护方法通过CPU核的译码部件的译码规则进行高频度地随机地变换,操作系统根据对应的译码规则选取对应规则的程序二进制编码进行切换执行,如果攻击者注入的代码被送入CPU核执行时,会因为和译码器无法匹配而执行失败。

作为一种可选的实施方式,本实施例基于多编码模式CPU的代码注入型攻击防护方法采用硬件部分、软件部分改进结合的方式来实现前述方法。如图3所示,硬件部分、软件部分改进包括:(1)CPU多模式译码单元硬件扩展;(2)硬件的随机触发器支持;(3)操作系统的多编码模式程序支持;(4)操作系统的软件编码快速切换支持。

(1)CPU多模式译码单元硬件扩展。

为了使CPU能够对多种指令编码模式进行解码并在模式间切换,本实施例提出CPU多模式译码单元硬件扩展,要求CPU核的解码器支持同一套指令集的多种编码规则,并且不同编码规则下的指令编码有相同长度,并且是一一对应的,CPU在解码器之外的部件同传统CPU兼容并有相同的工作和使用方式,CPU核上有专门的寄存器用于配置和指示CPU当前的译码规则。为了实现CPU多模式译码单元硬件扩展,需要对上述CPU的译码器结构进行改进。图4为常规的CPU结构,包含存储控制单元、前端译码单元、执行单元等主要单元。指令的执行流程为,指令由取指部件通过存储控制单元送到前端译码单元,前端译码单元译码后发出控制信号由执行单元进行数据运算、数据传送等操作。

图5为本实施例中能够对两重指令编码形式的代码进行译码的CPU的译码器结构的一种改进方式。参见图5,该CPU核的译码器包括多个前端译码单元及其对应的配置寄存器,每一个前端译码单元用于在对应的配置寄存器中配置有效时执行一种预设的随机编码模式的译码。该改进方式在图3所示常规CPU结构的基础上增加了一个前端译码单元,前端译码单元1和前端译码单元2能够分别对两重不同指令编码形式的代码译码,并可通过控制寄存器对编码形式进行选择。通过上述对CPU的组成和设计实施改进,使CPU可以对同一种指令集的多重编码形式进行译码,并能对使用哪种编码形式译码进行控制和切换。

图6是本实施例中对一个指令集的任意多重编码形式进行选择性解码的CPU的译码器结构的一种改进方式。参见图6,该CPU核的译码器前端设有编码缓存、钥匙寄存器和转换运算单元,所述钥匙寄存器包括与多种指令编码模式一一对应的钥匙代码,所述转换运算单元用于将从编码缓存中取出的指令代码、从钥匙寄存器中取出的对应指令编码模式的钥匙代码进行指定的可逆运算处理、获得译码器的真正输入编码。这种设计在前端译码单元增加了一个编码转换过程,该过程通过将所取指令代码同一个钥匙寄存器中的钥匙代码进行某种可逆的运算,生成译码器的真正输入编码,之后再进行正常的译码和执行操作。

为了实现CPU多模式译码单元硬件扩展,本实施例中针对CPU的功能改进包括:CPU核的译码器支持同一套指令集的多种编码规则;不同编码规则下的指令编码有相同长度,并且是一一对应的;CPU在解码器之外的部件同传统CPU兼容并有相同的工作和使用方式;CPU核上有专门的寄存器用于规定和指示CPU当前的解码规则;

(2)硬件的随机触发器支持。

编码模式的切换可通过CPU的中断(或者异常)机制完成。每一次中断的处理都存在同编码模式切换无关的开销,因此本实施例推荐(但不强制)每一次切换相关的中断到来时,都进行代码子段的切换,否则这次中断只引发现场的保存和恢复,相当于一次多余的操作,浪费了CPU资源。从安全角度上,本实施例需要这种中断到来的时机是随机的。综合这些考虑,本实施例推荐采用一个可配置硬件方式能够随机性的生成中断,从而随机性地引发编码模式的切换。推荐有专门的随机触发器能够用于自动引发指令集的解码规则转换,并在转换前生成相应的异常/中断,CPU对该异常/中断有专门的支持。

程序执行过程中,CPU通过取指令部件自动执行下一条指令,需要一个外在机制能够让CPU切换解码模式并从对应的另一个代码子段取指令,这种外在机制一般由中断或者异常实现,本实施例统一称为异常/中断。由于本实施例方法需要对指令编码模式进行高频度的随机切换,因此中断引发的额外开销将非常显著,如果一次相关中断中只做判断,不引发实际的编码切换,这个中断处理所耗费的CPU资源就完全是浪费的。例如可以利用一个高精度定时器生成固定频率的中断,每个中断处理时,通过生成随机数的方式判断是否需要切换,这样也能实现随机切换编码模式的效果,但不做切换的中断处理就会浪费大量CPU时间。为了避免这种浪费,本实施例进一步要求这种中断的触发时机本身具备随机性,中断之间的间隔是随机的,当中断到来时,其处理机制必然引发编码模式切换。因此,本实施例步骤2)中指定的异常/中断为来自随机触发器。

如图7所示为本实施例中给出的具体的随机触发器的设计实例,随机触发器包括个随机数发生器和定时器,其中随机数发生器生成的随机数被作为定时器从当前时间开始的触发延迟,当定时器触发时,一方面将会生成一个指定的异常/中断通知CPU核(CPUcore),另一方面会启动随机数发生器生成下一个定时器的随机延迟,所述CPU核在收到指定的异常/中断后开始进行随机编码模式切换时,通过访问随机数发生器的方式来确定指定的指令编码模式。本实施例中该定时器为高精度定时器(其精度和CPU主频保持一个量级),可确保CPU核在收到随机中断并开始进行编码切换操作时,可以通过访问随机数发生器的方式来生成对待要切换的编码模式的选择决策。

(3)操作系统的多编码模式程序支持

为了能够适应CPU译码规则可转换的运行机制,操作系统需要为其上运行的绝大多数代码准备对应编码的代码段内存副本,并提供运行时切换的机制支持,使CPU译码规则切换时,CPU的运行环境能够切换到不同的代码段副本所对应的硬件执行环境。对应CPU的译码规则,其上执行的程序编码模式也要进行相应切换。程序编码模式切换执行工作原理是,系统通过一个随机发生机制引发操作系统执行切换动作,并根据可选规则将待取指令切换到包含不同的编码模式的代码子段。编码模式的切换使将要执行的二进制代码的编码失去可预测性,当这种随机切换的粒度足够细时,攻击者注入的代码序列将必然是一个非法的代码序列并在执行时产生异常而无法成功实施攻击。

操作系统负责为程序在多模指令编码CPU上的执行和编码形式的切换提供必要支持。为了能够适应CPU编码规则可转换的运行机制,操作系统需要为其上运行的绝大多数代码准备对应编码的代码段内存副本,并提供运行切换的机制支持,使CPU解码规则切换时,CPU的运行环境能够切换到不同的代码段副本所对应的硬件执行环境(包含通用寄存器、状态和控制寄存器、堆栈寄存器以及指令寄存器)。出于数据一致性的要求和对性能的考虑,操作系统对于内核或核外进程的其它段(数据段、堆栈段等)采用唯一的内存副本。在多数的解码规则切换时,这些段中的数据内容不必要进行修正就能为切换后的代码所使用。

程序编码规则切换执行工作原理是,1)系统通过一个随机发生机制引发操作系统执行切换动作,使操作系统暂停当前的程序执行,2)并根据可选规则将待取指令切换到包含不同的编码形式的代码子段。

编码规则的切换使将要执行的二进制代码的编码失去可预测性,当这种随机切换的粒度足够细时,攻击者注入的代码序列将必然是一个非法的代码序列并在执行时产生异常而无法成功实施攻击。程序编码规则的切换可以包含内核态的切换或者用户进程态的切换两种模式,可以分别实施或者仅实施其中一种,主要在于指令编码的切换并附带尽量少的寄存器或内存内容转换。

支持多编码模式运行时随机切换的操作系统结构相对与常规操作系统的主要区别在于:(1)对多编码模式的支持,也就是对每个可切换编码规则的程序执行体(内核、核外进程等)都会在其内存空间中建立多个代码子段副本;(2)操作系统内核在内存管理方面支持对自身代码段多副本以及应用代码子段多副本的地址空间分派和管理功能;(3)操作系统内核支持对当前运行程序执行体进行指令编码切换(即在其代码段副本间切换)的中断生成和处理机制,这里我们将CPU解码规则的切换视为程序执行体在其代码子段副本间切换的一部分组成机制;

本实施例步骤1)中操作系统加载包含多种指令编码模式的代码子段的软件执行体的步骤包括:将软件执行体包含多种指令编码模式的代码子段准备对应编码的代码段内存副本并提供运行切换的机制支持,使CPU解码规则切换时,CPU的运行环境能够切换到不同的代码段副本所对应的硬件执行环境,所述硬件执行环境包含通用寄存器、状态和控制寄存器、堆栈寄存器以及指令寄存器;同时操作系统对于内核或核外进程包括数据段、堆栈段在内的其它段采用唯一的内存副本,使得在多数的解码规则切换时,这些其它段中的数据内容不进行修正就能为切换后的代码子段所使用。

本实施例中支持多编码模式运行时随机切换的操作系统的运行结构如图8所示,其中主要突出展示了该操作系统和常规宏内核操作系统(如Linux)的区别。其中,用户态的复合代码段进程即为软件执行体产生的进程,其中包含多种指令编码模式的代码子段,每一种指令编码模式对应一种指令编码规则;内核态则用于提供切换机制,除了常规宏内核操作系统(如Linux)的常规内核功能模块以外,还包括:

复合代码段内存管理模块,用于将软件执行体包含多种指令编码模式的代码子段准备对应编码的代码段内存副本;

代码切换异常管理,用于在切换异常时进行错误处理;

代码切换上下文管理,用于在切换时进行现场保存和恢复;

代码切换策略管理,用于控制切换的方式。

支持多编码模式运行时随机切换的操作系统的显著特征是支持复合代码段的软件执行体运行。这里软件执行体包括了用户态进程和内核,也就是独立拥有完整虚地址运行空间的软件单位。支持多编码模式运行时随机切换的操作系统为支持编码模式切换特别对执行体的代码段进行了扩展,使多种编码模式的代码段和多种地址的代码段共存并支持动态在CPU上切换运行,本实施例将这种形式的代码段称为复合代码段,将其中的具体指令集和布局的表示执行体逻辑完整语义行为的子段(即传统代码段)称为代码子段。图9展示了这种复合代码段的具体实例和设计方式。在该实例中,针对CPU提供的两种指令编码模式(A模式和B模式),复合代码段中包含了两个按照不同需求编译出的独立代码子段,分别是:A代码子段和B代码子段。实际系统还能支持更多指令编码模式,增加运行时的随机性。如图9所示,A代码子段和B代码子段的关系是两个子段的每条指令仅是将指令集编码进行替换的一一映射,使用完全一样的地址布局设计,即对应的指令访问的寄存器内容和内存虚地址完全一样。

本实施例中,步骤1)之前还包括编译生成包含多种指令编码模式的代码子段的软件执行体的步骤,且在编译生成软件执行体时针对软件执行体的代码段按照指定的指令编码模式种类生成对应的多种代码子段,所述多种代码子段之间的每条指令仅是将指令集编码进行替换的一一映射,使得多种代码子段之间使用完全一样的地址布局设计、对应的指令访问的寄存器内容和内存虚地址完全一样。

(4)操作系统的软件编码快速切换支持。

操作系统进行编码切换的实质开销主要由两个方面构成,一是对于程序现场的保存和恢复,二是对编码切换时程序中断现场的语义转换。本实施例提出相应的软硬件机制,一方面尽量避免或减少程序现场的保存和恢复需要的操作,另一方面通过提出新的操作系统的虚拟内存管理机制,使编码模式切换时程序中断现场的语义转换保持较少的开销。

本实施例要求CPU进行编码模式切换的频度很高,才能有效的“切断”注入代码的执行,这就对编码模式切换的速度提出了高要求。而操作系统进行编码切换的实质开销主要由两个方面构成,一是对于程序现场的保存和恢复,二是对编码切换时程序中断现场的语义转换。本实施例这样划分的原因是传统的进程调度或者切换主要是现场的保存和恢复,而现场的语义转换就成为本实施例额外增加的一个步骤。程序现场一般是指程序被中断时的CPU寄存器现场,本实施例仅仅切换编码模式,并不切换程序本体,因此为了降低现场的保存和恢复开销,最好是保持寄存器现场不变,并避免同内存之间做保存和恢复寄存器的操作。

本实施例先说明怎样避免做保存和恢复寄存器的操作,在稍后的内存管理部分说明怎样保持寄存器现场不变。一般情况下,CPU要做计算和函数调用仅依赖通用寄存器和栈指针寄存器(有可能是通用寄存器的一部分),本实施例要求CPU能提供额外的通用寄存器和栈指针寄存器来完成编码切换动作需要的这些操作,从而避免直接的寄存器现场保存和恢复操作。如果硬件没有提供额外寄存器,本实施例也可以通过限制对通用寄存器个数的使用,将需要保存和恢复的寄存器现场保持最小化,从而减低保存和恢复开销。

本实施例中,前述提供运行切换的机制支持的步骤包括:虚存叠加式管理机制通过将软件执行体的多种指令编码模式的代码子段的页表项叠加在同样的页目录项上进行实施,当CPU在进行随机编码模式切换时,仅需要暂停执行体现场,然后更改页目录项中的值就可以更换不同指令编码模式的代码子段,并冲刷旁路转换缓冲TLB的内容使原先的虚地址映射失效。本实施例提出虚存叠加式管理机制实现较小的现场语义转换开销。如图10所示,以两种编码模式的切换为例,虚存叠加式管理机制通过将两个(相异编码模式的)代码子段的页表项叠加在同样的页目录项上进行实施,当CPU在切换指令集(但保持代码子段地址布局不变)时,仅需要暂停执行体现场,然后更改页目录项中的值就可以更换代码子段,此时还应该冲刷TLB(Translation Lookaside Buffer)的内容,使原先的虚地址映射失效即可。虚存叠加式管理使CPU切换指令集时,前后对应的两个代码子段能够使用相同的寄存器语义和内存数据值语义,这样最大限度的降低了切换开销,保证切换性能。

本实施例中,多种指令编码模式包括一种本原编码模式,本原编码模式为CPU复位启动时所执行的指令译码的编码模式;如图11中子图a所示,步骤1)之前还包括操作系统初始化的步骤:

S1)上电后所有CPU核自动处于本原指令解码规则状态;

S2)固件进行基本初始化,并从内存或磁盘加载系统映像并转入内核执行;

S3)所有CPU核进行主从判定,确定主CPU核和从CPU核,从CPU核进入睡眠;

S4)主CPU核从操作系统内核编码的本原编码模式的代码子段执行初始化代码,并通过同传统操作系统基本相同的操作步骤初始化系统,执行的操作包括:异常处理向量初始化、cache使能、建立基本页表、虚拟地址映射使能、初始化总线/UI设备/存储设备、唤醒所有从核;从核被唤醒后执行本原编码模式子段的本地核初始化代码;内核进入正常运行状态。

然后,内核加载其它编码模式的代码子段到内存,并建立对应的虚存映射页表项,这些页表项没有在当前页表的页目录中建立连接,所以没有真正使能。此时,物理内存里已经载入了多个内核代码子段,包括本原指令编码子段,本原指令编码地址布局异构子段,非本原指令编码子段,非本原指令地址布局异构子段等。内核以本原指令模式加载并运行各应用态进程的执行体,并为各代码子段以及各数据段建立虚存映射。内核选择适当的时机使能随机切换中断发生源,使随机切换中断到来时,其中断处理机制立刻切换指令编码模式或者地址布局。该时机可以是内核初始化完毕时,也可以是已经加载并运行了应用态进程时,如图11中子图(b)所示。鉴于异常/中断机制的特殊性,其处理代码全部用本原指令编码实现和执行,CPU核在中断发生时会自动切换其译码单元到本原指令编码模式,并在完成处理后恢复内核或应用态上下文时切换所需指令编码模式。

此外,本实施例还提供一种基于多编码模式CPU的代码注入型攻击防护装置,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行前述的基于多编码模式CPU的代码注入型攻击防护方法的步骤,或者所述存储器中存储有被编程或配置以执行前述的基于多编码模式CPU的代码注入型攻击防护方法的计算机程序。

此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行前述的基于多编码模式CPU的代码注入型攻击防护方法的计算机程序。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

相关技术
  • 基于多编码模式CPU的代码注入型攻击防护方法及装置
  • 基于代码注入和行为分析的应用程序防攻击方法和系统
技术分类

06120112192474