当前位置: 首页 > 专利查询>南京大学专利>正文

基于二进制的内存篡改攻击的检测和漏洞定位系统技术方案

技术编号:4148037 阅读:405 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了基于二进制的内存篡改攻击的检测和漏洞定位系统,包括代码转换单元用于将x86二进制代码转换成Valgrind中间代码形式VEX;基本块数据依赖关系记录单元;代码插入单元包括颜色传播代码插入部分、攻击检测代码插入部分和内存污染指令记录代码插入部分,用于动态染色分析功能,随着程序的执行能够有效地检测出内存数据的异常,并且记录污染内存的写指令;漏洞定位单元包括被篡改的内存地址定位部分和篡改该内存的指令定位部分,用于找到被外部输入篡改的内存地址,以及通过前面单元所记录的信息找到篡改该内存的写指令的地址,即完成最终的定位。本发明专利技术能够有效地检测到内存篡改攻击并能够准确地定位到漏洞的位置。

【技术实现步骤摘要】

本专利技术涉及一种程序在遭受内存篡改攻击的检测和漏洞定位的方法和工具,特别 是在没有源代码的二进制级别基础上,通过对二进制程序进行运行时的动态分析和跟 踪来检测程序内存篡改攻击并定位漏洞位置的基于二进制的内存篡改攻击的检测和漏 洞定位系统。
技术介绍
目前,大多数的网络攻击以及蠕虫病毒都是由内存相关的程序漏洞所导致的,内 存漏洞能够导致,攻击者通过恶意输入对内存进行任意读写操作,从而控制程序行为, 甚至获取系统root权限。许多漏洞仅仅存在于那些采用不安全语言(例如C/C++)编 写的程序中。在C语言中,由于不存在强类型检查和缓冲区边界检査,程序中就可能 存在内存相关的漏洞。缓冲区溢出、堆篡改和格式化字符串是三种常见的内存漏洞。 缓冲区溢出是由对缓冲区进行读写时没有进行边界检查导致的;堆篡改是由于堆 的管理数据结构被破坏所导致;格式化字符串则是源于对标准输入输出函数不规范的 使用。许多研究人员都提出了针对此类安全问题的检测和防范方法,但是,这些方法通 常只关注攻击检测和攻击过滤,而没有找到程序漏洞所在的位置,这对于程序员进行 漏洞程序的彻底修复并没有实质的帮助。目前,专门针对内存漏洞定位方面的工作并不多。几个跟漏洞定位相关的工作都 至少存在如下中的某个缺点(1)实现细节过于复杂;(2)存在固有的不精确性;(3) 效率低下;(4)没有对库函数做特殊的处理。
技术实现思路
专利技术目的本专利技术针对现有技术的不足,提供了一种基于二进制的内存篡改攻击 的检测和漏洞定位系统。技术方案本专利技术公开了一种基于二进制的内存篡改攻击的检测和漏洞定位系统, 包括以下部分代码转换单元、基本块数据依赖关系单元、代码插入单元以及漏洞定 位单元;所述代码转换单元用于将二进制级别的代码转换成Valgrind中间代码形式VEX;所述基本块数据依赖关系记录单元,用于记录数据之间的相互依赖关系,为漏洞 定位单元中定位被篡改的内存地址部分提供数据依赖信息;所述代码插入单元包括颜色传播代码插入部分、攻击检测代码插入部分和内存污 染指令记录代码插入部分;5其中,颜色代码插入部分用于实现动态染色分析功能;攻击检测代码插入部分用 于检测内存数据的异常,即访存操作或无条件跳转操作的地址操作数被污染;内存污 染指令记录代码插入部分用于记录污染内存的写指令。所述漏洞定位单元包括被篡改的内存地址定位部分和篡改该内存的指令定位部分;其中,被篡改的内存地址定位部分通过基本块内数据依赖关系记录单元所记录的 信息找到被外部输入篡改的内存地址;篡改该内存的指令定位部分通过内存污染指令 记录代码插入部分所记录的信息找到篡改该内存的写指令的地址,即完成最终的定位。本专利技术中,基本块数据依赖关系记录单元进行,包括以下步骤-步骤SIOO,在Valgrind生成的中间代码VEX中判断语句类型,若语句为临时变量 写语句Ist一WrTmp,则跳到步骤S200;若语句为寄存器写语句1st—Put或Ist_PutI,则 跳到步骤S300;否则,跳到步骤S1100;步骤S200,判断临时变量写语句1st—WrTmp中源表达式的类型,若表达式为内存 读操作Iex_Load,则跳到步骤S400;若表达式为寄存器读操作Iex一Get或Iex_GetI, 则跳到步骤S500;否则,跳到步骤S800;步骤S300,判断寄存器写语句Ist—Put或IsLPutl中源表达式的类型,若表达式为 临时变量读表达式lex—RdTmp,跳到步骤S600;否则跳到步骤S1100;步骤S400,判断内存读取表达式lex—Load中源内存是否被污染(英文为taint), 若是,跳到步骤S700;否则跳到步骤S1100;步骤S500,判断寄存器读表达式lex—Get或lex—Getl中源寄存器是否被污染,若 是,跳到步骤S900;否则跳到步骤S1100;步骤S600,判断临时变量读表达式Iex—RdTmp中临时变量是否被污染,若是,跳 到步骤S1000;否则跳到步骤S1100;步骤S700,记录被污染的内存地址和目标临时变量,跳到步骤S1100;步骤S800,记录源临时变量和目的临时变量之间的依赖关系,跳到步骤S1100;步骤S900,通过记录的依赖关系找到污染源寄存器的内存地址,并记录该内存地 址与目的临时变量,跳到步骤S1100;步骤SIOOO,通过记录的依赖关系找到污染源临时变量的内存地址,并记录该内存 地址与目的寄存器,跳到步骤S1100;步骤SllOO,在VEX中间代码上进行代码插入。本专利技术中,步骤S1100所述代码插入单元进行,包括以下步骤步骤S1200,插入颜色传播代码来实现动态染色过程,跳到步骤S1300;步骤S1300,判断VEX语句的类型,若语句为内存写语句IsLStore,则跳到步骤 S1400;若语句包含内存读表达式Iex一Load或为无条件跳转操作,则跳到步骤S1500; 否则,跳到步骤S1600;步骤S1400,插入记录污染内存数据的写指令的代码,跳到步骤S1500;步骤S1500,插入检测访存操作(访存操作包括内存写和内存读两类操作)或无条 件跳转操作的地址表达式是否被污染(即内存数据的异常)的代码,用来检测内存篡 改,跳到S1600;步骤S1600,程序运行时如果检测到异常,则定位漏洞。本专利技术中,所述步骤S1200颜色传播代码插入部分包括以下步骤步骤S1201,判断该语句处是否是read或recv系统调用语句,表明此时为外部输 入进入程序的时刻,若是,则跳到步骤S1202;否则跳到步骤S1203;步骤S1202,将存放外部输入数据的内存进行染色,跳到步骤S1300;步骤S1203,根据颜色传播规则,即若一个指令的任一源操作数被污染,则该指令 的目的操作数也将随着该指令的执行而被污染,在VEX中间代码上,插入进行颜色传 播的代码,跳到步骤S1300;步骤S1300,进一步地判断该VEX语句的类型。本专利技术中,所述步骤S1400内存污染指令记录代码插入部分包括以下步骤步骤S1401,判断内存写语句1st—Store的源操作数是否被污染,若是,则跳到步骤 S1402;否则,跳到步骤S1500步骤S1402,将内存写语句1st—Store的地址W和该语句的目的内存地址M —起记 录下来,记为(M, W),跳到步骤S1500;步骤S1500,插入检测访存操作或无条件跳转操作的地址操作数是否被污染的代码。本专利技术中,所述步骤S1600程序漏洞定位单元进行,包括以下步骤 步骤S1601,在Valgrind平台上运行经过代码插入的程序,跳到步骤S1602; 步骤S1602,判断程序运行是否结束,若是,则跳到步骤S1606;否则,跳到步骤 S画;步骤S1603,攻击检测代码插入部分(222)所插入的代码会检测访存操作或无条 件跳转操作中的地址操作数是否被污染,若是,则跳到步骤S1604;否则,跳到步骤 S薩;步骤S1604,利用由数据依赖关系记录单元(21)记录的数据依赖关系回溯找到被 篡改的内存地址M',跳到步骤S1605;步骤S1605,利用步骤S1604找到的M,和步骤S1402所记录的(M, W)找到篡 改M,的写指令的地址W',跳到S1606; 步骤S1606,程序运行结束。本专利技术中代码转换本文档来自技高网...

【技术保护点】
一种基于二进制的内存篡改攻击的检测和漏洞定位系统,其特征在于,包括以下部分:代码转换单元(20)、基本块数据依赖关系记录单元(21)、代码插入单元(22)以及漏洞定位单元(23); 所述代码转换单元(20)用于将二进制级别的代码转换成 Valgrind中间代码形式VEX; 所述基本块数据依赖关系记录单元(21),用于记录基本块内数据之间的相互依赖关系,为漏洞定位单元(23)中定位被篡改的内存地址部分提供数据依赖信息; 所述代码插入单元(22)包括颜色传播代码插 入部分(221)、攻击检测代码插入部分(222)和内存污染指令记录代码插入部分(223); 其中,颜色代码插入部分(221)用于实现动态染色分析功能;攻击检测代码插入部分(222)用于检测内存数据的异常;内存污染指令记录代码插入部分( 223)用于记录污染内存的写指令; 所述漏洞定位单元(23)包括被篡改的内存地址定位部分(231)和篡改该内存的指令定位部分(232); 其中,被篡改的内存地址定位部分(231)通过基本块内数据依赖关系记录单元(21)所记录的信 息找到被外部输入篡改的内存地址;篡改该内存的指令定位部分(232)通过内存污染指令记录代码插入部分(223)所记录的信息找到篡改该内存的写指令的地址,即完成最终的定位。...

【技术特征摘要】
1、一种基于二进制的内存篡改攻击的检测和漏洞定位系统,其特征在于,包括以下部分代码转换单元(20)、基本块数据依赖关系记录单元(21)、代码插入单元(22)以及漏洞定位单元(23);所述代码转换单元(20)用于将二进制级别的代码转换成Valgrind中间代码形式VEX;所述基本块数据依赖关系记录单元(21),用于记录基本块内数据之间的相互依赖关系,为漏洞定位单元(23)中定位被篡改的内存地址部分提供数据依赖信息;所述代码插入单元(22)包括颜色传播代码插入部分(221)、攻击检测代码插入部分(222)和内存污染指令记录代码插入部分(223);其中,颜色代码插入部分(221)用于实现动态染色分析功能;攻击检测代码插入部分(222)用于检测内存数据的异常;内存污染指令记录代码插入部分(223)用于记录污染内存的写指令;所述漏洞定位单元(23)包括被篡改的内存地址定位部分(231)和篡改该内存的指令定位部分(232);其中,被篡改的内存地址定位部分(231)通过基本块内数据依赖关系记录单元(21)所记录的信息找到被外部输入篡改的内存地址;篡改该内存的指令定位部分(232)通过内存污染指令记录代码插入部分(223)所记录的信息找到篡改该内存的写指令的地址,即完成最终的定位。2、 根据权利要求l所述的基于二进制的内存篡改攻击的检测和漏洞定位系统,其 特征在于,所述基本块数据依赖关系记录单元(21)包括以下步骤步骤S100,在Valgrind生成的中间代码VEX中判断语句类型,若语句为临时变量 写语句,则跳到步骤S200;若语句为寄存器写语句,则跳到步骤S300;否则,瑕fe到步 骤S1100;步骤S200,判断临时变量写语句中源表达式的类型,若表达式为内存读取操作, 则跳到步骤S400;若语句为寄存器读取操作,则跳到步骤S500;否则,跳到步骤S800;步骤S300,判断寄存器写语句中源表达式的类型,若表达式为临时变量读取操作, 跳到步骤S600;否则,跳到步骤S1100;步骤S400,判断内存读取表达式中源内存是否被污染,若是,跳到步骤S700;否 则跳到步骤S1100;步骤S500,判断寄存器读取表达式中源寄存器是否被污染,若是,跳到步骤S900; 否则跳到步骤S1100;步骤S600,判断临时变量读取表达式中临时变量是否被污染,若是,跳到步骤S1000;否则跳到步骤S1100;步骤S700,记录被外部输入污染的内存的地址和目标临时变量,跳到步骤S1100; 步骤S800,记录源临时变量和目的临时变量之间的依赖关系,跳到步骤S1100; 步骤S900,通过记录的依赖关系找到污染源寄存器的内存地址,并记录该内存地址与目的临时变量,跳到步骤S1100;步骤SIOOO,通过记录的依赖关系找到污染源临时变量的内存地址,并记录该内存地址与目的寄存器,...

【专利技术属性】
技术研发人员:茅兵谢立房陈
申请(专利权)人:南京大学
类型:发明
国别省市:84[中国|南京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1