一种针对缓冲区溢出攻击的硬件保护装置转让专利

申请号 : CN201610597170.1

文献号 : CN106295322B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王翔庞树松王维克赵宗民何展宏王晓翠徐洋

申请人 : 北京航空航天大学

摘要 :

本发明提供一种针对缓冲区溢出攻击的硬件保护装置,它直接和处理器相连,监控程序的执行过程,它由四部分组成:包括串行外设接口模块,即SPI模块,处理器接口模块,内存控制模块,安全标记模块;内存控制模块为核心模块,其他模块以所述内存控制模块为中心进行连接,SPI模块为内存控制模块提供数据下载接口,处理器接口模块为内存控制模块提供处理器的接口,安全标记模块为内存控制模块中所存储的数据进行加密处理;本发明安全性强于一般的软件保护,同时减小了硬件资源的开销,不占用系统的内存资源,执行效率高,具有良好的移植性,只要修改几个关键参数,就能适应不同架构的处理器上。

权利要求 :

1.一种针对缓冲区溢出攻击的硬件保护装置,所述硬件保护装置直接和处理器相连,监控程序的执行过程,其特征在于:硬件保护装置由四部分组成:包括串行外设接口模块,即SPI模块,处理器接口模块,内存控制模块,安全标记模块;内存控制模块为核心模块,其他模块以所述内存控制模块为中心进行连接,SPI模块为内存控制模块提供数据下载接口,处理器接口模块为内存控制模块提供处理器的接口,安全标记模块为内存控制模块中所存储的数据进行加密处理;

所述SPI模块是外部设备与内存控制模块的通信接口,通过此模块使上位机能够初始化内存控制模块中的存储模块;该SPI模块的结构是:对外有四根线接口SDI即主设备数据输入、SDO即主设备数据输出、SCK即时钟信号、CS即从设备片选信号;SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输;数据输出通过SDO线,数据在时钟上升沿及下降沿时改变,在紧接着的下降沿及上升沿被读取,完成一位数据传输;

所述处理器接口模块是外部处理器与内存控制模块连接接口,使所述的硬件保护装置能够实时监控处理器的运行状态;该处理器接口模块的结构是:由32位指令总线和32位地址总线组成;

所述内存控制模块由存储模块和查找模块组成;查找模块用于对存储模块中存储的信息进行搜索;

该存储模块的结构是一片随机存取存储器即RAM,其中存储着程序的正常执行信息;

该查找模块通过二分法对该存储模块中的内容进行查找,并返回查找结果;

所述安全标记模块是用于哈希值计算,用于计算内存控制模块中所存储数据的哈希值;该安全标记模块的结构是:此模块内部为哈希加密模块,其内部采用一个新的轻量级哈希函数来对输入的消息进行加密处理,将输入长度为512字节加密为16位;

在程序执行之前要通过专门的提取工具,此提取工具用于对可执行文件的离线分析,并提取出程序安全运行的代码;通过SPI接口下载到存储模块中;因此当外界植入的恶意代码执行时,所述的硬件保护装置会检测到当前执行的代码并不是存储模块中所存储的代码,此时便会发出预警,阻止程序继续执行;以指令基本块为基本单位,指令基本块指一个代码片段,此片段中只包含会顺序运行的指令;也即,不包含任何分支跳转指令;为了加强安全性,并不是直接把指令存入所述的硬件保护装置的存储器中,而是对这些指令进行了处理,将每个指令基本块的指令进行哈希运算,计算出一个16位的校验值作为硬件保护装置中的内容;在程序的执行的过程中,首先会对指令基本块的起始地址进行查找,找到硬件保护装置中对应的指令基本块,所述的硬件保护装置中的安全标记模块会对当前执行的指令基本块的哈希值进行实时的运算,当一个指令基本块运行结束后,与安全装置中的对应的指令基本块的哈希值进行对比,当两者不一致时,判断受到了恶意代码的攻击。

说明书 :

一种针对缓冲区溢出攻击的硬件保护装置

技术领域

[0001] 本发明提供一种针对缓冲区溢出攻击的硬件保护装置,它涉及嵌入式处理器的缓冲区溢出攻击的硬件保护装置。属于嵌入式系统安全技术领域。

背景技术

[0002] 缓冲区溢出是一种非常普遍、非常危险的漏洞,并成为了当前重要的安全威胁之一。在各种安全报告中,缓冲区溢出漏洞始终是其中很重要的一部分。缓冲区溢出攻击很容易被攻击者利用,因为C和C++等语言并没有自动检测缓冲区溢出操作,同时程序编写人员在编写代码时也很难始终检查缓冲区是否可能溢出。利用溢出,攻击者可以将期望数据写入漏洞程序内存中的任意位置,甚至包括控制程序执行流的关键数据(比如函数调用后的返回地址),从而控制程序的执行过程并实施恶意行为。
[0003] 缓冲区溢出的常用攻击方法是将恶意代码shellcode注入到程序中,并用其地址来覆盖程序本身函数调用的返回地址,使得返回时执行此恶意代码而不是原本应该执行的代码。也就是说,这种攻击在实施时通常首先要将恶意代码注入目标漏洞程序中。但是,程序的代码段通常设置为不可写,因此攻击者需要将此攻击代码置于堆栈中。于是为了阻止此种类型的攻击,缓冲区溢出防御机制采用了非执行堆栈技术,这种技术使得堆栈上的恶意代码不可执行。
[0004] 综上所述,现有针对缓冲区溢出攻击的保护方案存在以下问题:
[0005] (1)以上针对缓冲区溢出攻击的保护方法都是从软件角度,这样会增加软件的复杂度,而且作为保护作用的代码本身也是受攻击的对象,无法抵御物理攻击。
[0006] (2)目前的防御方法会增加系统的负担,影响处理器性能。同时,也容易导致程序运行时崩溃。

发明内容

[0007] 1.目的:本发明的目的是提供一种针对缓冲区溢出攻击的硬件保护装置,能有效的阻止多种缓冲区溢出攻击。它在嵌入式处理器内部增加一个硬件保护装置来保证程序的正确执行。
[0008] 2.技术方案:
[0009] 本发明设计一种针对缓冲区溢出攻击的硬件保护装置,它直接和处理器相连,监控程序的执行过程。
[0010] 本发明所述的硬件保护装置,由四部分组成:包括串行外设接口模块,即SPI模块,处理器接口模块,内存控制模块,安全标记(例如哈希值计算)模块。它们之间的关系是,内存控制模块为核心模块,其他模块以所述内存控制模块为中心进行连接,SPI模块为内存控制模块提供数据下载接口,处理器接口模块为内存控制模块提供处理器的接口,安全标记模块为内存控制模块中所存储的数据进行加密处理。
[0011] 所述SPI模块是外部设备与内存控制模块的通信接口,通过此模块使上位机能够初始化内存控制模块中的存储模块;该SPI模块的结构是:对外有四根线接口SDI(主设备数据输入),SDO(主设备数据输出),SCK(时钟信号),CS(从设备片选信号)。SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输。
[0012] 所述处理器接口模块是外部处理器与内存控制模块连接接口,使本发明所述的硬件保护装置能够实时监控处理器的运行状态;该处理器接口模块的结构是:由32位指令总线和32位地址总线组成。
[0013] 所述内存控制模块主要由存储模块和查找模块组成;它们之间的关系是查找模块用于对存储模块中存储的信息进行搜索。
[0014] 该存储模块的结构是一片随机存取存储器(RAM),其中存储着程序的正常执行信息。
[0015] 该查找模块通过二分法对该存储模块中的内容进行查找,并返回查找结果。
[0016] 所述安全标记模块是用于哈希值计算,用于计算内存控制模块中所存储数据的哈希值;该安全标记模块的结构是:此模块内部为哈希加密模块,其内部采用一个新的轻量级哈希函数(已申请专利)来对输入的消息进行加密处理,将输入长度为512字节加密为16位。
[0017] 在程序执行之前要通过专门的提取工具(已申请专利),此提取工具主要用于对可执行文件的离线分析,并提取出程序安全运行的代码。通过SPI接口下载到存储模块中;因此当外界植入的恶意代码执行时,本发明所述的硬件保护装置会检测到当前执行的代码并不是存储模块中所存储的代码,此时便会发出预警,阻止程序继续执行;为了节省资源开销,并不是对代码进行直接的存储,而是以指令基本块为基本单位,指令基本块指一个代码片段(通常指汇编代码),此片段中只包含会顺序运行的指令;也即,不包含任何分支跳转指令;为了加强安全性,我们并不是直接把指令存入本发明所述的硬件保护装置的存储器中,而是对这些指令进行了处理,将每个指令基本块的指令进行哈希运算,计算出一个16位的校验值作为硬件保护装置中的内容。在程序的执行的过程中,首先会对指令基本块的起始地址进行查找,找到硬件保护装置中对应的指令基本块,本发明所述的硬件保护装置中的安全标记模块会对当前执行的指令基本块的哈希值进行实时的运算,当一个指令基本块运行结束后,与安全装置中的对应的指令基本块的哈希值进行对比,当两者不一致时,可以判断受到了恶意代码的攻击。
[0018] 3、优点及功效:
[0019] 这种硬件辅助的嵌入式系统硬件保护装置具有以下几个优点:
[0020] 本发明所述的硬件保护装置为纯硬件电路,并且没有接入到处理器的内部总线,软件不能通过总线去访问硬件保护装置,所以安全性强于一般的软件保护。
[0021] 本发明采用的硬件保护装置与处理器并行执行,所以硬件保护装置在执行的过程中不会影响处理器的正常运行,不会占用系统的内存资源,执行效率高。
[0022] 本发明所述的硬件模块在对程序监控过程中进行了加密压缩处理,进一步增加了系统的安全性,同时减小了硬件资源的开销。
[0023] 本发明所述的硬件模块具有良好的移植性,只要修改几个关键参数,就能适应不同架构的处理器上。

附图说明

[0024] 图1是本发明的硬件保护装置的结构框图。
[0025] 图2是本发明的硬件保护装置与外部处理器的关系图。
[0026] 图中符号说明如下:
[0027] 图1中SPI是指串行外设接口(Serial Peripheral Interface)的缩写。是一种高速的,全双工,同步的通信总线。

具体实施方式

[0028] 见图1、图2所示,其具体实施方式如下:
[0029] 本发明设计一个针对缓冲区溢出攻击的硬件保护装置,它主要由以下几部分组成。SPI(串行外设接口)模块,处理器接口模块。内部处理模块主要包括计数器模块,安全标记模块,内存控制模块。它们之间的关系为内存控制模块为最主要的模块,其他模块以它为中心进行连接。其中SPI模块为其提供下载接口;内存控制模块通过处理器接口与处理器进行连接;哈希用于计算代码的校验值存储在内存控制模块的存储模块中。
[0030] 图1描述了硬件保护装置的架构,在其工作之前需要将通过提取工具可执行代码部分进行离线提取,通过SPI接口下载到存储模块中作为程序实际运行时的对比装置。处理器接口主要与处理器的Program Counter(PC)和Instruction Register(IR)总线进行连接,实时监控程序的运行状态,并将IR通过安全标记模块计算其哈希值,然后与内存控制模块中存储的离线值进行对比。安全标记模块是哈希值计算模块,它主要是由异或电路实现。
[0031] 图2描述了硬件保护装置在片上系统上的应用。其连接在处理器与缓存之间,并反馈信号到处理器。在程序开始运行时,硬件保护装置会检测到第一个指令基本块的第一条指令已经开始运行,其进入监控状态。此时硬件保护装置会记录此时指令的哈希值。当硬件保护装置检测到指令基本块结束,其会将当前指令基本块所记录指令的哈希值和硬件保护装置中的值进行比较。假如两个值不相等,那么可以判断发生了缓冲区溢出攻击。之后,硬件保护装置会搜索下一指令基本块的起始地址,此处为了提高搜索效率,采取二分法查找,假如此时在硬件保护装置所存储的内容中找到了指令基本块,那么可以判断此段代码在硬件保护装置中,假如没有找到指令基本块的开始地址,那么断定出现了不存在的指令基本块的错误,此时判断发生了攻击。在检测到错误信息之后会发出中断信号反馈到处理器。