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

一种基于指针分析的软件漏洞检测方法技术

技术编号:10385651 阅读:143 留言:0更新日期:2014-09-05 12:12
一种基于指针分析的软件漏洞检测方法,步骤如下:借助插装软件,有3个主要的插装操作,分别完成基本数据类型恢复、复杂数据类型恢复和漏洞检测:基本数据类型恢复的插装,插装操作为:在属于类型敏感类指令集合的指令后面插入类型收集代码,然后根据不同的汇编指令插入不同的类型传播代码;复杂数据类型恢复的插装,插装操作为:在内存申请类指令集合后面插入指针收集代码,根据不同的汇编指令插入指针分析代码,在指针分析的过程中便实现了对复杂数据类型的恢复;漏洞检测的插装,插装操作为:在程序的外部输入位置插入污染标记代码,根据汇编指令插入污点传播代码,在安全敏感点插入安全检测代码。

【技术实现步骤摘要】
一种基于指针分析的软件漏洞检测方法
本专利技术涉及复杂数据类型相关的软件漏洞检测方法,特别涉及一种基于指针分析的软件漏洞检测方法。
技术介绍
软件漏洞是系统容易受到攻击,影响系统的可用性。软件漏洞中,复杂数据类型相关的漏洞占了较大的比例,而且在能被利用实现攻击的漏洞中占比更大。通过对程序的分析和检测,发现并排除软件漏洞是常用方法。对可执行程序实现有效的漏洞检测,复杂数据类型的恢复是关键。目前对于复杂数据类型的恢复,大多采用单纯的类型推导或者对复杂数据类型访问间隔进行分析的方法,没有充分利用指针变量信息,使得复杂数据类型的恢复不够精确。因此,为充分利用复杂数据类型使用时指针变量的关键因素,本专利技术提出基于指针分析的软件漏洞检测方法。本专利技术提出一种基于指针集合分析的复杂数据类型恢复和漏洞检测方法。根据类型敏感点以及类型推导恢复出基本数据类型。复杂数据类型的使用总是和指针操作联系在一起,通过跟踪内存的申请和返回中指针的使用来构建指针集合,根据指针集合的变迁和使用的分析,恢复出复杂数据结构。基于指针集合分析来恢复复杂数据类型具有较高的精确性。基于精确的复杂数据类型信息,通过污染分析实施软件漏洞检测,可提高漏洞检测的准确性。本方法的实施有利于发现并排除软件中脆弱性,对于提高系统的安全性具有重要意义。
技术实现思路
本专利技术目的是,提出一种基于指针集合分析的复杂数据类型恢复和漏洞检测方法。根据类型敏感点以及类型推导恢复出基本数据类型,通过对指针使用的分析,恢复出复杂数据结构。借助Valgrind插装软件对待分析程序插装分析代码。在完成插装之后,执行插装后的程序便可以实现程序数据类型分析和漏洞检测的目的。本专利技术的技术方案是:一种基于指针分析的软件漏洞检测方法,步骤如下:借助插装软件,有3个主要的插装操作,分别完成基本数据类型恢复、复杂数据类型恢复和漏洞检测:基本数据类型恢复的插装,其输入文件为要插装的可执行程序,插装操作为:在属于类型敏感类指令集合的指令后面插入类型收集代码,然后根据不同的汇编指令插入不同的类型传播代码;基本数据类型指程序中int、float等基本变量类型;在程序分析的过程中,当遇到库函数调用、系统调用、特殊指令时,在其后插入类型收集代码,以便从中提取出相关的类型信息;根据汇编指令的特征,插入对得到的类型信息进行类型推导的代码以及类型生成代码;插装后的可执行程序运行时,便得到了基本数据类型信息;复杂数据类型恢复的插装,其输入文件为恢复出来的基本数据类型以及要插装的可执行程序,插装操作为:在内存申请类指令集合后面插入指针收集代码,根据不同的汇编指令插入指针分析代码,在指针分析的过程中便实现了对复杂数据类型的恢复;复杂数据类型主要指数组和结构体,此类变量操作均是通过指针实现;在程序分析的过程中,在程序申请内存类指令的后面插入指针收集代码,然后根据汇编指令的特点插入其对应的指针传播、分析以及复杂数据结构重构代码;插装后的可执行程序运行时,便得到了复杂数据类型信息;漏洞检测的插装,其输入文件为恢复出来的复杂数据类型以及要插装的可执行程序,插装操作为:在程序的外部输入位置插入污染标记代码,根据汇编指令插入污点传播代码,在安全敏感点插入安全检测代码;在插装后的程序执行时,当安全检测代码检测到某个变量既包含污染属性又包含安全敏感属性,便判定出可能的安全漏洞;以带有数据类型信息的可执行程序为输入,进行漏洞检测代码的插装;使用污染分析的方法,在程序外部输入的指令后面插入污染标记代码;将内存写操作所涉及的变量标记为敏感变量,在敏感变量后面插入敏感标记代码;根据汇编指令特点插入其对应的污染传播代码;插装后的可执行程序运行时,经过污染传播,当一个变量同时拥有污染和敏感两个属性时,则判断此处易形成漏洞。本专利技术有益效果是,根据类型敏感点以及类型推导恢复出基本数据类型。复杂数据类型的使用总是和指针操作联系在一起,通过跟踪内存的申请和返回中指针的使用来构建指针集合,根据指针集合的变迁和使用的分析,恢复出复杂数据结构。基于指针集合分析来恢复复杂数据类型具有较高的精确性。基于精确的复杂数据类型信息,通过污染分析实施软件漏洞检测,可提高漏洞检测的准确性。本方法的实施有利于发现并排除软件中脆弱性,对于提高系统的安全性具有重要意义。附图说明图1基于指针分析的软件漏洞检测流程示意图;图2基本数据类型恢复的插装流程图;图3复杂数据类型恢复的插装流程图;图4漏洞检测的插装流程图;图5插装的初始化指针信息处理流程图;图6插装的传递类型信息处理流程图;图7插装的更新指针集合属性信息处理流程图。具体实施方式如图1所示,Valgrind是一个插装软件,可以实现对可执行程序的动态分析。借助此平台完成对可执行程序的插装。对插装之后的程序进行执行,所插装的代码便得到了执行,进而实施数据类型恢复和软件漏洞检测。启动Valgrind程序,指定使用的插装操作、要插装的程序、库函数查询文件以及输出文件等,便可实现相应的插装操作。3个主要插装操作分别为基本数据类型恢复、复杂数据类型恢复以及漏洞检测。基本数据类型恢复的插装,其输入文件为要插装的可执行程序,插装操作为:在属于类型敏感类指令集合的指令后面插入类型收集代码,然后根据不同的汇编指令插入不同的类型传播代码。复杂数据类型恢复的插装,其输入文件为恢复出来的基本数据类型以及要插装的可执行程序,插装操作为:在内存申请类指令集合后面插入指针收集代码,根据不同的汇编指令插入指针分析代码,在指针分析的过程中便实现了对复杂数据类型的恢复。漏洞检测的插装,其输入文件为恢复出来的复杂数据类型以及要插装的可执行程序,插装操作为:在程序的外部输入位置插入污染标记代码,根据汇编指令插入污点传播代码,在安全敏感点插入安全检测代码。在插装后的程序执行时,当安全检测代码检测到某个变量既包含污染属性又包含安全敏感属性,便判定出可能的安全漏洞。在基本数据类型恢复的插装中,需要用到库函数查询表。此表用来提供类型敏感类指令的具体类型信息,存储在配置文件FunInfo.conf中,Valgrind以字符串形式把表读入内存中。当检测到相关的库函数调用时,以函数名为关键字查询该表,得到具体的类型信息。表的结构是:函数名、参数个数、参数1类型、参数2类型、返回结果参数类型,以换行作为一个函数信息的结束。为记录基本和复杂数据类型信息,使用的以下数据结构。变量标记标识每个寄存器、内存位置变量,包括变量地址、时间戳、变量长度。变量地址表示变量申请的内存位置或所用寄存器名称,时间戳是变量首次使用时的指令地址,变量长度表示变量在内存中的长度,以字节为单位。指针属性链表节点。属性链表用来表明指针的属性,其每个节点表示该指针所指向复杂数据结构中的一个基本数据变量结构,包含该变量在复杂数据结构中的起始位置、结束位置、类型信息。指针集合属性是一个链表结构,其头结点记录的是该指针所指向空间的内存长度。随着程序执行,复杂数据结构恢复模块会不断的更新属性信息。其更新的方式为在该链表中加入后续节点以不断识别结构体信息。指针集合是指向具有相同结构体的指针的集合。其指针集合标记包括指针指向地址、时间戳、指针集合属性。指针指向地址表示指针指向的内存位置的首地址,时间戳表示该指针集合被创建时的本文档来自技高网...
一种基于指针分析的软件漏洞检测方法

【技术保护点】
一种基于指针分析的软件漏洞检测方法,其特征是步骤如下:借助插装软件,有3个主要的插装操作,分别完成基本数据类型恢复、复杂数据类型恢复和漏洞检测: 基本数据类型恢复的插装,其输入文件为要插装的可执行程序,插装操作为:在属于类型敏感类指令集合的指令后面插入类型收集代码,然后根据不同的汇编指令插入不同的类型传播代码;基本数据类型指程序中int、float等基本变量类型;在程序分析的过程中,当遇到库函数调用、系统调用、特殊指令时,在其后插入类型收集代码,以便从中提取出相关的类型信息;根据汇编指令的特征,插入对得到的类型信息进行类型推导的代码以及类型生成代码;插装后的可执行程序运行时,便得到了基本数据类型信息; 复杂数据类型恢复的插装,其输入文件为恢复出来的基本数据类型以及要插装的可执行程序,插装操作为:在内存申请类指令集合后面插入指针收集代码,根据不同的汇编指令插入指针分析代码,在指针分析的过程中便实现了对复杂数据类型的恢复;复杂数据类型主要指数组和结构体,此类变量操作均是通过指针实现;在程序分析的过程中,在程序申请内存类指令的后面插入指针收集代码,然后根据汇编指令的特点插入其对应的指针传播、分析以及复杂数据结构重构代码;插装后的可执行程序运行时,便得到了复杂数据类型信息; 漏洞检测的插装,其输入文件为恢复出来的复杂数据类型以及要插装的可执行程序,插装操作为:在程序的外部输入位置插入污染标记代码,根据汇编指令插入污点传播代码,在安全敏感点插入安全检测代码;在插装后的程序执行时,当安全检测代码检测到某个变量既包含污染属性又包含安全敏感属性,便判定出可能的安全漏洞;以带有数据类型信息的可执行程序为输入,进行漏洞检测代码的插装;使用污染分析的方法,在程序外部输入的指令后面插入污染标记代码;将内存写操作所涉及的变量标记为敏感变量,在敏感变量后面插入敏感标记代码;根据汇编指令特点插入其对应的污染传播代码;插装后的可执行程序运行时,经过污染传播,当一个变量同时拥有污染和敏感两个属性时,则判断此处易形成漏洞。...

【技术特征摘要】
1.一种基于指针分析的软件漏洞检测方法,其特征是步骤如下:借助插装软件,有3个主要的插装操作,分别完成基本数据类型恢复、复杂数据类型恢复和漏洞检测的插装:基本数据类型恢复的插装,其输入文件为要插装的可执行程序,插装操作为:在属于类型敏感类指令集合的指令后面插入类型收集代码,然后根据不同的汇编指令插入不同的类型传播代码;基本数据类型指程序中int、float基本变量类型;在程序分析的过程中,当遇到库函数调用或系统调用特殊指令时,在其后插入类型收集代码,以便从中提取出相关的类型信息;根据汇编指令的特征,插入对得到的类型信息进行类型推导的代码以及类型生成代码;插装后的可执行程序运行时,便得到了基本数据类型信息;复杂数据类型恢复的插装,其输入文件为恢复出来的基本数据类型以及要插装的可执行程序,插装操作为:在内存申请类指令集合后面插入指针收集代码,根据不同的汇编指令插入指针分析代码,在指针分析的过程中便实现了对复杂数据类型的恢复;复杂数据类型指数组和结构体,此类变量操作均是通过指针实现;在程序分析的过程中,在程序申请内存类指令的后面插入指针收集代码,然后根据汇编指令的特点插入其对应的指针传播、分析以及复杂数据结构重构代码;插装后的可执行程序运行时,便得到了复杂数据类型信息;漏洞检测的插装,其输入文件为恢复出来的复杂数据类型以及要插装的可执行程序,插装操作为:在程序的外部输入位置插入污染标记代码,根据汇编指令插入污染传播代码,在安全敏感点插入安全检测代码;在插装后的程序执行时,当安全检测代码检测到某个变量既包含污染属性又包含安全敏感属性,便判定出可能的安全漏洞;以带有数据类型信息的可执行程序为输入,进行漏洞检测代码的插装;使用污染分析的方法,在程序外部输入的指令后面插入污染标记代码;将内存写操作所涉及的变量标记为敏感变量,在敏感变量后面插入敏感标记代码;根据汇编指令特点插入其对应的污染传播代码;插装后的可执行程序运行时,经过污染传播,当一个变量同时拥有污染和敏感两个属性时,则判断此处易形成漏洞。2.根据权利要求1所述的基于指针分析的软件漏洞检测方法,其特征是采用插装软件Valgrind,实现对可执行程序的动态分析;借助Valgrind平台完成对可执行程序的插装;对插装之后的程序进行执行,所插装的代码便得到了执行,进而实施数据类型恢复和软件漏洞检测;启动Valgrind程序,指定使用的插装操作、要插装的程序、库函数查询文件以及输出文件,便能实现相应的插装操作;在基本数据类型恢复的插装中,需要用到库函数查询表;此表用来提供类型敏感类指令的具体类型信息,存储在配置文件FunInfo.conf中,Valgrind以字符串形式把表读入内存中;当检测到相关的库函数调用时,以函数名为关键字查询该表,得到具体的类型信息;表的结构是:函数名、参数个数、参数1类型、参数2类型、返回结果参数类型,以换行作为一个函数信息的结束;为记录基本和复杂数据类型信息,使用的以下数据结构:变量标记标识每个寄存器、内存位置的变量,内存位置的变量包括变量地址、时间戳、变量长度;变量地址表示变量申请的内存位置或所用寄存器名称,时间戳是变量首次使用时的指令地址,变量长度表示变量在内存中的长度,以字节为单位;指针属性链表节点:属性链表用来表明指针的属性,其每个节点表示该指针所指向复杂数据结构中的一个基本数据变量结构,包含该变量在复杂数据结构中的起始位置、结束位置、类型信息;指针集合属性是一个链表结构,其头结点记录的是该指针所指向空间的内存长度;随着程序执行,复杂数据结构恢复模块会不断的更新属性信息;其更新的方式为在该链表中加入后续节点以不断识别结构体信息;指针集合是指向具有相同结构体的指针的集合;其指针集合标记包括指针指向地址、时间戳、指针集合属性;指针指向地址表示指针指向的内存位置的首地址,时间戳表示该指针集合被创建时的指令地址,指针集合属性表示指针集合的属性。3.根据权利要求1所述的基于指针分析的软件漏洞检测方法,其特征是基本数据类型恢复的插装流程实现对基本数据类型恢复的代码插装;依据汇编指令对类型推导的影响将其分为三类指令集合,分别为类型敏感类指令集合、拷贝类指令集合、运算操作类指令集合;分别定义如下:类型敏感类指令集合为{abs,strcmp,strcpy,strcat,strlen,strtol,strdup,memcpy,fork,FLD,FTS,FCOM,FADD,FSUB,FMUL,FDIV,FSQRT,FSCALE,FPREE,FABS,FCHS,FCOS,FSIN,FPTAN,FYL2X,F2XM1,FINT,FCLEX,FNOP,FXCH,FFREE,FINCSTP,FDECSTP},其中类型敏感类指令集合包含所有的库函数调用;拷贝类指令集合为{MOV,MOVS,MOVZ,STOS,STOZ,PUSH,POP,XCHG,PUSHA,POPA,PUSHAD,POPAD,XADD},运算操作类指令集合为{ADD,SUB,MUL,IMUL,DIV,IDIV};Valgrind对程序进行一些初始化后将程序指令放在IRSB区块内;通过区块地址便可以取得需要分析的指令,进而进行插装;在插装的过程中,每当遇到一个变量时便插装创建变量标记的代码;在插装后的程序执行时对变量标记里的属性进行完善,变量标记信息以字符串的形式写入到记录信息中,最后记录文件中记录着恢复出来的变量信息;基本数据类型恢复的插装的具体步骤为:步骤20为起始动作;步骤21通过IRSB区块取下一条指令;步骤22判断程序指令是否取完,若是转步骤29,否则转步骤23;步骤23判断该指令是否在类型敏感类指令集合中,若是转步骤24,否则转步骤25;步骤24插入类型搜集代码,插入代码的功能为根据库函数查询表得到的类型信息,标记内存变量的类型;插入完成后转到步骤21;步骤25判断该指令是否在拷贝类指令集合中,若是转步骤26,否则转步骤27;步骤26为插入类型传递代码,插入代码的功能为将源操作数的类型传递给目的操作数;步骤27判断该指令是否在运算操作类指令集合中,若是转步骤28,否则转步骤29;步骤28为插入类型合并代码,其插入代码的功能为将已恢复的操作数的类型传递给未恢复类型的操作数;步骤29为结束状态,插装完成;在插装过程完成后,生成一个插装后的可执行程序;执行插装之后的可执行程序便可以生成基本数据类型信息。4.根据权利要求1所述的基于指针分析的软件漏洞检测方法,其特征是复杂数据...

【专利技术属性】
技术研发人员:曾庆凯李会朋
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

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

1