一种多语义动态污点分析方法与流程

文档序号:13215961阅读:551来源:国知局
技术领域本发明属于计算机技术领域,具体涉及一种多语义动态污点分析方法。

背景技术:
动态污点分析(DynamicTaintAnalysis,简称DTA)技术从基本原理上来讲,其主要是通过跟踪外部不可信数据在程序内部的处理逻辑,并通过污点扩散规则来发现程序敏感位置中可能隐藏的污点数据内容,最终利用该机制来解决程序安全性分析中的相关问题,例如恶意代码检测、软件漏洞挖掘以及敏感数据保护等。经过多年的发展,DTA技术已经成为软件安全性分析领域中的一种重要方法。据相关统计,自2004年至2015年间,和动态污点传播相关的研究成果多达百余项。其中,2004年由斯坦福大学J.Chow等人提出的TaintBochs系统在DTA方法的基础上首次分析了系统中敏感数据的生命周期问题,并发现许多知名软件(例如,Mozilla浏览器、Apache服务器以及Perl脚本解析引擎等)存在敏感数据泄露的风险。此外,2005年由卡内基梅隆大学的J.Newsome等人提出的TaintCheck系统首次通过DTA方法对CodeRed、Slammer等恶意蠕虫进行较好的检测和分析。最后,2010年由宾夕法尼亚大学的W.Enck、杜克大学的P.Gilbert以及英特尔实验室的B.G.Chun合作完成了著名开源系统—TaintDroid,该系统更是将DTA技术应用在了智能终端上的用户隐私保护问题。尽管已经有众多研究者根据DTA技术取得了很多瞩目的成绩,但是对于DTA技术本身来说,仍面临着众多难以解决的问题:(1)DTA技术适合于解决数据流相关的问题,而对于控制流相关问题来说,由于需要引入过多的污点数据,导致无法有效分析;(2)DTA技术存在误报和漏报的问题,由于现有污点内存映射机制无法实现bit级的一一映射,因此在实际传播分析的过程中,难以避免出现误报和漏洞问题;(3)DTA技术在分析过程中碰到的污点数据主要是代表了程序从外部接收的不可信内容,因此存在语义单一的问题,即一次DTA分析往往只能对一种语义的污点数据进行传播分析。目前,由于问题(1)和问题(2)已有相关研究人员提出了初步的解决方案。例如,2011年加州伯克利大学以及卡内基梅隆大学的M.G.Kang等人结合静态分析技术提出了DTA++来解决控制流相关的问题。此外,2014年美国雪城大学的H.Yin等人提出了DECAF系统,该系统首次通过理论证明的方式给出了基于Bit级的污点传播规则,尽可能的消除了DTA技术中的误报和漏报问题。对于问题(3)来说,目前尚未有相关的解决方案,如果需要对多个语义的数据内容进行动态污点分析,则现有方案一般都是通过多次分析的方式来解决,这种方式费时费力,难以应用在实际场景中。

技术实现要素:
针对现有DTA技术存在语义单一的问题,本发明的目的在于提供一种多语义动态污点分析方法,通过不同的污点类型来表明程序中不同语义的污点数据,并设置每种类型的污点传播规则和默认传播规则,进而通过一次分析即可完成多语义污点传播过程。一种多语义动态污点分析方法,其步骤如下:1、根据在一次动态污点分析过程中同时跟踪多种语义信息数据的配置要求,对每种待跟踪语义信息数据设定唯一的污点语义类型;2、根据每种污点语义类型,监控程序运行过程中是否有该污点语义类型的语义信息数据产生函数的调用进而判断是否在程序中引入了相应的污点源,如果有相应污点源的产生,则以影子内存的方式进行记录;3、在程序动态执行的过程,根据监控到的每条指令语义信息以及操作数的污点状态进行污点传播计算,并将最终的结果记录到影子内存;4、在进行传播计算后,根据已有污点语义类型中预置的程序敏感指令集合来判定当前目标程序执行的指令是否为敏感指令,如果是则进行污点检测,并且如果在该指令位置上存在对应类型的污点,则调用其处理方法。程序敏感指令集合是指检测污点可能被误用的一系列指令集合,包括程序跳转指令JMP以及方法调用指令CALL/RET等;这些信息只需要提前写到配置文件即可。进一步,在上述步骤1)中的污点语义类型包括类型标识、传播规则集合、程序敏感点以及污点处理方法;步骤2)中的影子内存包括污点语义信息数据对应的内存地址或者寄存器编号、污点语义信息数据的长度以及污点语义类型,污点语义类型为空表示未被感染。此外,在步骤3)中提到的污点传播计算流程主要包括以下三个过程:即首先在程序动态执行过程提取程序当前执行指令的语义信息;其次,根据提取的语义信息得到该指令的指令操作数,然后根据待分析指令操作数的地址来查询其对应的影子内存中污点状态,如果污点语义类型不为空且对应的传播规则集合中包含有该指令操作码的具体传播规则,则按照该规则进行污点传播计算,否则按照预置的默认传播规则计算;最后,将传播计算结果记录在该指令目的操作数对应的影子内存,同时如果该指令属于程序敏感指令集合且该指令操作数中存在污点,则调用该污点语义类型中的污点处理方法。本发明的优点和积极效果如下:1、本发明在传统DTA的基础上,给出了多语义污点类型的相关描述,增强了污点分析方法的描述能力;2、本发明通过为每种语义污点定义特殊的规则集合和处理方法,保证在污点传播计算过程中,既能对多种污点类型进行统一的传播计算,同时也能够对特殊类型的污点数据进行特殊处理,从而提高了污点分析方法的处理能力;3、本发明通过在一次动态分析的过程中对多种语义污点进行传播计算,提高了动态污点传播方法的分析效率。综上,本发明提出的多语义动态污点分析方法,解决现有DTA技术中语义单一的问题,为推动DTA技术应用在更多的实际问题中起到了基础支撑作用。附图说明图1为多语义动态污点分析流程图。图2为多语义动态污点传播计算流程图。具体实施方式下面结合附图详细说明本发明的技术方案:如图1所示,一种多语义动态污点分析方法,包括以下阶段:1.根据多语义污点配置生成不同的污点语义类型首先解析多语义动态污点分析的配置要求,即提取同时跟踪多少种不同的污点语义类型,其次结合每种污点语义类型,初始化相关的实例参数。具体的,本发明使用实例参数TT=(T,L,C,R,P,F)来描述污点语义类型,其中T表示唯一的类型标示,例如0表示普通文件类型污点,1表示网络数据类型污点;L为污点语义类型,C表示程序中产生该种污点语义类型污点的所有方法,例如ReadFile表示产生文件类型污点的方法,recv表示网络数据类型污点的方法;R表示该种污点语义类型污点对应的传播规则集合,例如“T=1的污点的减法操作进行漂白”;P表示该种污点语义类型污点对应的程序敏感点集合,例如“T=1的程序敏感点程序调用send方法的入口处”;F表示在程序敏感点P存在该种污点语义类型污点时需要调用的处理方法,例如“当T=1的污点进入到send方法的入口处时要进行告警通知处理”。2.监控程序动态运行过程中调用的所有方法,并结合每种污点语义类型中的TT.C来识别程序中的污点源及其类型;在定义污点语义类型的过程中,我们给出了程序中生成每种类型污点的方法集合C。在程序执行的过程中,通过典型动态指令插装技术可提取到程序调用的方法CS=(IP,NAME),其中IP表示指令动态运行的地址集合,NAME表示方法名称。因此,通过实时比对的方法,我们可以在程序运行的过程中识别出是否有污点源产生,如果有,本发明将使用影子内存的方式进行记录,其中影子内存SM=(A,S,TT),A表示污点内存地址或者寄存器编号,S表示污点数据长度,TT表示对应的污点语义类型,如果TT为空,则表明该内存数据没有被任何污点源感染。3.在引入污点源的基础上,根据程序动态执行的每条指令的语义信息进行相关的多语义污点传播计算,并在程序敏感点处检查是否存在污点,如果存在则调用污点处理方法,否则继续执行;本发明在多语义污点传播计算的阶段主要以程序动态监控得到的指令序列为输入对象,图2所示显示了多语义污点传播的整个流程,具体内容如下:(1)根据程序动态监控获取到的每条指令提取其语义信息IS,其中IS=(OPC,SRC,DST),OPC为指令的操作码,SRC为指令的源操作数集合,DST为指令的目的操作数集合;(2)根据IS.SRC的地址进而查询其在影子内存SM中对应的污点类型TT,并判断是否为空,为空表示该条指令中不涉及污点数据,跳转至步骤(1),否则继续以下步骤;(3)如果TT不为空,则判断该类型污点对应的特殊规则集合TT.R中是否有该操作码对应的规则,如果有则按照该规则进行传播计算,如果没有则以OPC的默认传播规则进行计算;(4)在进行完传播计算以后,我们将结果记录在IS.DST地址对应的影子内存SM中,进而完成该条指令的污点传播计算过程;(5)最后判断当前执行指令是否属于某一个污点语义类型中的程序敏感点,如果不是敏感点则返回步骤(1),否则调用相应的污点处理方法;(6)根据处理方法返回的结果来判断是否完成分析任务,如果完成则整个污点分析过程结束,否则返回步骤(1)。本发明提出的多语义动态污点分析方法,对于本领域的技术人员而言,可以根据需要自己部署不同的程序动态监控方案,以及在传播过程中添加更加复杂的传播规则,可以根据情况针对每种语义类型部署不同的传播规则、程序敏感点以及处理方法,从而获得达到特定需求的分析目的。尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1