CN104504329A - 一种程序运行时处理器指令校验方法 - Google Patents

一种程序运行时处理器指令校验方法 Download PDF

Info

Publication number
CN104504329A
CN104504329A CN201410835359.0A CN201410835359A CN104504329A CN 104504329 A CN104504329 A CN 104504329A CN 201410835359 A CN201410835359 A CN 201410835359A CN 104504329 A CN104504329 A CN 104504329A
Authority
CN
China
Prior art keywords
address
code segment
instruction
processor
branch target
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
CN201410835359.0A
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.)
PLA Equipment College
Original Assignee
PLA Equipment College
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 PLA Equipment College filed Critical PLA Equipment College
Priority to CN201410835359.0A priority Critical patent/CN104504329A/zh
Publication of CN104504329A publication Critical patent/CN104504329A/zh
Priority to PCT/CN2015/081034 priority patent/WO2016107082A1/zh
Pending legal-status Critical Current

Links

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
    • 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/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities

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)
  • Virology (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明涉及一种程序运行时处理器指令校验方法,该方法包括以下内容:在程序运行之前,计算出程序所有代码段中每条正确指令的地址,然后将正确指令的地址转换成地址校验数据,最后在程序运行过程中,当处理器计算出一条分支转移指令的分支目标地址,未提交结果时,对计算出的分支目标地址进行校验,本发明可用于阻止利用程序非正常指令序列构造出的恶意代码在处理器上执行。

Description

一种程序运行时处理器指令校验方法
技术领域
本发明涉及一种程序运行时处理器指令校验方法,属于计算机安全领域,用于阻止利用程序非正常指令序列构造出的恶意代码在处理器上执行。
背景技术
利用软件漏洞进行代码注入攻击是长期以来最流行的一种恶意代码攻击手段。但是近年来的计算机系统均引入了一种软硬件结合的存储保护机制该保护机制使得代码注入攻击变得非常困难。机制规定了操作系统一个存储页的写入和执行是互斥的,即存放可执行代码的内存页不能被写入,可写入内存页中的内容不能被执行。这意味着即使恶意代码被植入一个内存页,由于这个内存页不能被执行,所以恶意代码也不能发挥作用。
但是,近年来出现的代码重用攻击技术成为了新的利用软件漏洞进行恶意代码攻击的手段。代码重用攻击不用进行代码注入,而是通过一系列分支转移指令(包括跳转指令、函数调用指令、函数返回指令等)将程序已有的代码(包括系统运行库中的代码)重新组织,构成恶意代码序列进行攻击。由于代码重用攻击不用向内存页中写入代码数据,而是利用程序已有的代码,所以机制对代码重用攻击是完全无效的。
代码重用攻击对于CISC指令集处理器(如目前广泛使用的x86系列处理器)的威胁要远大于RISC指令集处理器。这是因为在RISC处理器中,所有指令长度均是一致的,每条指令的起始地址都是指令长度的整倍数。RISC处理器在执行指令时,不接受起始于非指令长度整倍数地址的指令。但是CISC处理器的指令长度是不固定的。以x86处理器为例,指令长度可以是1个字节至16个字节。这意味着代码段中的任何一个地址都可能是一条新指令的起始地址。因此,在CISC处理器上构造恶意代码要比在RISC处理器上容易。目前已公布的研究显示,面向x86处理器的代码重用攻击所使用的90%以上的恶意代码都是由程序的非正常指令序列构成。由此可见,如果能够阻止这些非正常指令序列的执行,将会极大地降低计算机系统被进行代码重用攻击的风险。
目前,采用CISC指令集的计算机系统(如使用x86系列处理器的计算机)没有任何保护机制来阻止上述非正常指令序列的执行。一些学术研究虽然提出了防止非正常x86指令执行的方法,但均采用软件手段实现,这些方法均要求应用程序必须在一个软件虚拟机环境中运行,从而导致应用程序的运行性能大大降低。本发明提出了一种软硬件相结合的保护机制来阻止处理器执行非正常指令序列,该机制不依赖于虚拟机环境,应用程序不用进行任何修改,且程序运行性能损失非常小。本发明的方法可以应用于x86以及其他CISC处理器系列。到目前为止,采用类似方法来实现阻止非正常指令执行的方法尚未见报道。
发明内容
本发明目的在于降低计算机系统被进行代码重用以及其他利用非正常指令进行恶意代码攻击的风险。
本发明一种程序运行时处理器指令校验方法,其特征是该校验方法步骤如下:
(1)在程序运行之前,计算出程序所有代码段中每条正确指令的地址,其方法是:
对于每个代码段,通过代码段信息获取该代码段起始处第一条指令的地址,然后从第一条指令起对该代码段进行反汇编,并通过反汇编依次获得该代码段中所有指令的长度,此后每条指令的地址即为前一条指令的地址加上前一条指令的长度;
(2)将正确指令的地址转换成地址校验数据,其方法是:
将地址上连续的代码段合并为一个代码段进行处理,设合并后代码段的起始加载地址是a0,结束地址为a1,对于a0至a1范围内的每一个地址,当该地址是一条正确指令的起始地址,则用一位“1”来表示,否则用一位“0”来表示,或用一位“0”表示一条正确指令的起始地址,一位“1”表示否,在程序运行过程中,地址校验数据放在内存中,供处理器校验指令时进行查询,将所有合并后代码段的起始加载地址、代码段的大小和地址校验数据的地址记录到一个表中,供程序运行时查询使用;
(3)在程序运行过程中,当处理器计算出一条分支转移指令的分支目标地址,未提交结果时,对计算出的分支目标地址进行校验,设待校验的分支目标地址为at,其校验方法是:
1)通过一个分支目标校验缓存对该地址at进行校验,该分支目标缓存中存放了刚成功执行过的分支指令的分支目标地址,当待校验的分支地址at与分支目标缓存中的一个地址一致,则校验成功,处理器则继续正常执行,否则需执行2),
2)首先找到地址at所对应的代码段,即要知道地址at是在哪个代码段的地址范围内,当没有找到对应的代码段,则地址at为非法地址,此时引发处理器异常,终止校验过程;当找到地址at对应的代码段后,设该代码段的第一个指令的起始地址为a0,则根据地址at相对于a0的偏移量找出相应的地址校验数据,其方法是:设该代码段的地址校验数据存放于地址ac处,取出地址处的一个字节,其中运算表示不超过n的最大整数,n为0~264之间的实数,该字节的第(a1-a0)%8+1位即为地址at的校验数据,其中%表示取模运算;当校验数据表明地址at为一条正确指令的起始地址,则校验成功,处理器继续正常执行,并用地址at更新分支目标校验缓存,否则校验失败,引发处理器异常。
本发明的有益效果:该方法阻止应用程序非正常指令的执行达99%以上,并阻止代码重用攻击达90%以上,且硬件与软件开销均小于已报道的其他同类方法。
具体实施方式
下面以采用x86系列处理器,操作系统为Linux的计算机系统为例,说明本发明的具体实施方式,下面叙述中所提到的内存地址均是指虚地址。
1、操作系统加载完应用程序或动态共享库后,计算出各个代码段中每条正确指令的地址:
ELF格式是目前Linux操作系统所采用的可执行文件格式,当ELF格式的可执行程序或共享库加载到内存后,操作系统即获知每个代码段的第一条指令在内存中的起始地址。根据x86指令集的编码规则,从第一条指令处开始,依次将整个代码段的二进制数据反汇编成合法的x86指令序列,并且根据第一条指令地址和反汇编出的每条指令长度,依次计算出每条指令在内存中的地址。
2、将步骤1中计算出的正确指令地址转换成地址校验数据:
将地址上连续的多个代码段合并为一个代码段进行处理,合并后代码段的起始加载地址是A,结束地址为B,对于A至B范围内的每一个地址,当该地址是一条正确指令的起始地址,则用一位“1”来表示,否则用一位“0”来表示。因为地址校验数据是只读的,所以该数据放在程序的代码段空间中,处理器访问时通过指令cache或单独的指令校验cache访问。此外,将所有合并后代码段的起始加载地址、代码段的大小和地址校验数据的地址记录到一个表中,记作代码段校验查询表,作为操作系统进程数据结构的一部分,供程序运行时查询使用。
3、在程序运行过程中,当处理器计算出一条分支转移指令的分支目标地址但还未提交结果时,对计算出的分支目标地址进行校验:
当流水线的提交单元要提交一条非直接分支指令的结果时,对分支指令的分支目标地址进行校验,当该分支目标地址合法时,处理器继续正常执行,否则将引发一个处理器异常。该校验过程如下:
(1)首先,通过分支目标校验缓存对分支目标地址进行校验,该分支目标校验缓存中存放了最近成功执行过的分支指令的分支目标地址。硬件实现上,该分支目标校验缓存设置在处理器的提交单元附近。当待校验的分支目标地址命中该缓存时,表明该分支目标合法,此时处理器继续正常执行。没有命中,则需进行步骤(2);
(2)x86处理器含有一个分支预测器,分支预测器位于处理器的取指单元附近,所以访问分支预测器的延迟要大于直接访问提交单元附近的分支目标校验缓存,但分支目标校验缓存通过设置较少的校验项以节省硬件开销。分支预测器中存在一个BTB(分支目标缓存)部件,当待校验分支目标地址没有命中提交单元附近的分支目标校验缓存时,查询分支预测器中的BTB,命中则表明该分支目标合法,此时处理器继续正常执行,否则需进行步骤(3);
(3)通过代码段校验查询表缓存来查找该分支目标地址所处的代码段。代码段校验查询表缓存是存放在内存中的代码段校验查询表在处理器里的一个部分缓存映像。当待校验的分支目标地址在代码段校验查询表缓存中找到相应的代码段信息时执行步骤(4),否则引发一个中断,在中断过程中操作系统在完整的代码段校验查询表中查找待校验的分支目标地址所对应的代码段,查找失败则表明该分支目标地址非法,引发处理器异常,当找到相应的代码段,则用该代码段信息更新代码段校验查询表缓存,中断返回,继续执行步骤(4);
(4)设待校验的分支目标地址为at,在步骤(3)中查询到的代码段的第一条指令地址为a0,代码段的地址校验数据存放于内存地址ac处,则在内存地址处的字节的第(at-a0)%8+1位为地址at的校验数据。为了正确访问该地址,需经将地址通过指令翻译后备缓冲器转换成物理地址,然后通过1级指令cache和二级cache等访问该地址处的校验数据。获得校验数据后,校验数据为“1”则表明地址at为一条正确指令的起始地址,处理器继续正常执行,并用地址at更新分支目标校验缓存,否则校验失败,引发处理器异常。
将该实例应用在装有Intel Corei7处理器和Linux操作系统的计算机上进行测试,测试结果表明本方法阻止应用程序非正常指令的执行达100%,并阻止了94%的代码重用攻击,计算机系统增加的开销为0.03%,而已报道同类方法的开销均在20%以上。

Claims (1)

1.一种程序运行时处理器指令校验方法,其特征是该校验方法步骤如下:
(1)在程序运行之前,计算出程序所有代码段中每条正确指令的地址,其方法是:
对于每个代码段,通过代码段信息获取该代码段起始处第一条指令的地址,然后从第一条指令起对该代码段进行反汇编,并通过反汇编依次获得该代码段中所有指令的长度,此后每条指令的地址即为前一条指令的地址加上前一条指令的长度;
(2)将正确指令的地址转换成地址校验数据,其方法是:
将地址上连续的代码段合并为一个代码段进行处理,设合并后代码段的起始加载地址是a0,结束地址为a1,对于a0至a1范围内的每一个地址,当该地址是一条正确指令的起始地址,则用一位“1”来表示,否则用一位“0”来表示,或用一位“0”表示一条正确指令的起始地址,一位“1”表示否,在程序运行过程中,地址校验数掘放在内存中,供处理器校验指令时进行查询,将所有合并后代码段的起始加载地址、代码段的大小和地址校验数据的地址记录到一个表中,供程序运行时查询使用;
(3)在程序运行过程中,当处理器计算出一条分支转移指令的分支目标地址,未提交结果时,对计算出的分支目标地址进行校验,设待校验的分支目标地址为at,其校验方法是:
1)通过一个分支目标校验缓存对该地址at进行校验,该分支目标缓存中存放了刚成功执行过的分支指令的分支目标地址,当待校验的分支地址at与分支目标缓存中的一个地址一致,则校验成功,处理器则继续正常执行,否则需执行2),
2)首先找到地址at所对应的代码段,即要知道地址at是在哪个代码段的地址范围内,当没有找到对应的代码段,则地址at为非法地址,此时引发处理器异常,终止校验过程;当找到地址at对应的代码段后,设该代码段的第一个指令的起始地址为a0,则根据地址at相对于a0的偏移量找出相应的地址校验数掘,其方法是:设该代码段的地址校验数据存放于地址ac处,取出地址处的一个字节,其中运算表示不超过n的最大整数,n为0~264之间的实数,该字节的第(at-a0)%8+1位即为地址at的校验数据,其中%表示取模运算;当校验数据表明地址at为一条正确指令的起始地址,则校验成功,处理器继续正常执行,并用地址at更新分支目标校验缓存,否则校验失败,引发处理器异常。
CN201410835359.0A 2014-12-30 2014-12-30 一种程序运行时处理器指令校验方法 Pending CN104504329A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410835359.0A CN104504329A (zh) 2014-12-30 2014-12-30 一种程序运行时处理器指令校验方法
PCT/CN2015/081034 WO2016107082A1 (zh) 2014-12-30 2015-06-09 一种程序运行时处理器指令校验方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410835359.0A CN104504329A (zh) 2014-12-30 2014-12-30 一种程序运行时处理器指令校验方法

Publications (1)

Publication Number Publication Date
CN104504329A true CN104504329A (zh) 2015-04-08

Family

ID=52945725

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410835359.0A Pending CN104504329A (zh) 2014-12-30 2014-12-30 一种程序运行时处理器指令校验方法

Country Status (2)

Country Link
CN (1) CN104504329A (zh)
WO (1) WO2016107082A1 (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105354104A (zh) * 2015-10-22 2016-02-24 上海华为技术有限公司 一种定位非法地址的装置以及方法
WO2016107082A1 (zh) * 2014-12-30 2016-07-07 中国人民解放军装备学院 一种程序运行时处理器指令校验方法
CN109254898A (zh) * 2018-09-18 2019-01-22 南京科远自动化集团股份有限公司 一种软件模块执行顺序监视方法及监视系统
CN110135152A (zh) * 2019-03-28 2019-08-16 江苏通付盾信息安全技术有限公司 应用程序攻击检测方法及装置
CN110516438A (zh) * 2018-05-21 2019-11-29 深信服科技股份有限公司 一种可执行文件反汇编的方法、系统及相关组件
CN107798241B (zh) * 2016-09-07 2020-01-31 龙芯中科技术有限公司 攻击检测装置、系统及方法
CN110780925A (zh) * 2019-09-02 2020-02-11 芯创智(北京)微电子有限公司 一种指令流水线的预译码系统及方法
CN115408104A (zh) * 2022-08-25 2022-11-29 科东(广州)软件科技有限公司 一种映像的加载方法与装置及生成方法与装置

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111158660B (zh) * 2019-12-10 2023-06-02 上海航天控制技术研究所 一种多模式星载软件eeprom在轨编程方法
CN111832012B (zh) * 2020-07-15 2024-04-05 北京经纬恒润科技股份有限公司 一种ecu及其启动方法
CN111984410A (zh) * 2020-08-18 2020-11-24 上海睿赛德电子科技有限公司 一种在嵌入式系统中低资源占用的内存保护系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101350051A (zh) * 2007-07-19 2009-01-21 上海市闵行中学 一种缓冲区溢出的保护方法
US20120167120A1 (en) * 2010-12-22 2012-06-28 F-Secure Corporation Detecting a return-oriented programming exploit
CN103345445A (zh) * 2013-07-02 2013-10-09 华中科技大学 基于控制流检测的抗错误注入攻击的安全芯片设计方法
US20140123281A1 (en) * 2012-10-31 2014-05-01 Stephen A. Fischer Detection of return oriented programming attacks

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5313634A (en) * 1992-07-28 1994-05-17 International Business Machines Corporation Computer system branch prediction of subroutine returns
US6247146B1 (en) * 1998-08-17 2001-06-12 Advanced Micro Devices, Inc. Method for verifying branch trace history buffer information
EP2300952B1 (en) * 2008-05-30 2012-07-11 Nxp B.V. A method for adapting and executing a computer program and computer program product and computer architecture therefor
US9372991B2 (en) * 2012-03-06 2016-06-21 International Business Machines Corporation Detecting malicious computer code in an executing program module
CN104504329A (zh) * 2014-12-30 2015-04-08 中国人民解放军装备学院 一种程序运行时处理器指令校验方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101350051A (zh) * 2007-07-19 2009-01-21 上海市闵行中学 一种缓冲区溢出的保护方法
US20120167120A1 (en) * 2010-12-22 2012-06-28 F-Secure Corporation Detecting a return-oriented programming exploit
US20140123281A1 (en) * 2012-10-31 2014-05-01 Stephen A. Fischer Detection of return oriented programming attacks
CN103345445A (zh) * 2013-07-02 2013-10-09 华中科技大学 基于控制流检测的抗错误注入攻击的安全芯片设计方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016107082A1 (zh) * 2014-12-30 2016-07-07 中国人民解放军装备学院 一种程序运行时处理器指令校验方法
CN105354104B (zh) * 2015-10-22 2019-03-26 上海华为技术有限公司 一种定位非法地址的装置以及方法
CN105354104A (zh) * 2015-10-22 2016-02-24 上海华为技术有限公司 一种定位非法地址的装置以及方法
CN107798241B (zh) * 2016-09-07 2020-01-31 龙芯中科技术有限公司 攻击检测装置、系统及方法
CN110516438A (zh) * 2018-05-21 2019-11-29 深信服科技股份有限公司 一种可执行文件反汇编的方法、系统及相关组件
CN110516438B (zh) * 2018-05-21 2023-11-07 深信服科技股份有限公司 一种可执行文件反汇编的方法、系统及相关组件
CN109254898A (zh) * 2018-09-18 2019-01-22 南京科远自动化集团股份有限公司 一种软件模块执行顺序监视方法及监视系统
CN109254898B (zh) * 2018-09-18 2021-09-24 南京科远智慧科技集团股份有限公司 一种软件模块执行顺序监视方法及监视系统
CN110135152A (zh) * 2019-03-28 2019-08-16 江苏通付盾信息安全技术有限公司 应用程序攻击检测方法及装置
CN110135152B (zh) * 2019-03-28 2021-07-02 江苏通付盾信息安全技术有限公司 应用程序攻击检测方法及装置
CN110780925A (zh) * 2019-09-02 2020-02-11 芯创智(北京)微电子有限公司 一种指令流水线的预译码系统及方法
CN115408104A (zh) * 2022-08-25 2022-11-29 科东(广州)软件科技有限公司 一种映像的加载方法与装置及生成方法与装置
CN115408104B (zh) * 2022-08-25 2023-08-11 科东(广州)软件科技有限公司 一种映像的加载方法与装置及生成方法与装置

Also Published As

Publication number Publication date
WO2016107082A1 (zh) 2016-07-07

Similar Documents

Publication Publication Date Title
CN104504329A (zh) 一种程序运行时处理器指令校验方法
US9921842B2 (en) Guest instruction block with near branching and far branching sequence construction to native instruction block
US10185567B2 (en) Multilevel conversion table cache for translating guest instructions to native instructions
US10394563B2 (en) Hardware accelerated conversion system using pattern matching
US10241795B2 (en) Guest to native block address mappings and management of native code storage
US9710387B2 (en) Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
KR101844521B1 (ko) 크로스-페이지 프리페칭 방법, 장치, 및 시스템
US9753856B2 (en) Variable caching structure for managing physical storage
US10042776B2 (en) Prefetching based upon return addresses
US9336125B2 (en) Systems and methods for hardware-assisted type checking
CN103488461A (zh) 使用快速索引树实现加速分支预测的系统和方法
US20140289475A1 (en) Cache memory device, information processing device, and cache memory control method
CN110968349A (zh) 一种抵御投机执行侧信道攻击的处理器缓存技术方案
CN112596792B (zh) 分支预测方法、装置、介质及设备
CN111259384B (zh) 一种基于缓存随机无效的处理器瞬态攻击防御方法
US10445241B2 (en) Prefetching using offset data to access a pointer within a current data element for use in prefetching a subsequent data element
US7983894B2 (en) Data processing
Cai et al. JVM virtual method invoking optimization based on CAM table
Tan et al. A segment-based approach of defending against buffer overflow attacks
Liu Input division for binary translation

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20150408