您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 一种基于安全状态跟踪检查的漏洞静态检测方法研究与实施
1《计算机学报》2009年5期一种基于安全状态跟踪检查的漏洞静态检测方法研究与实施梁彬侯看看石文昌梁朝晖(中国人民大学信息学院北京100872)(数据工程与知识工程教育部重点试验室北京100872)摘要:现有的采用基于源代码分析的漏洞静态检测方法中存在的主要问题是误报率和漏报率较高。主要原因之一是缺乏对数据合法性检查与非可信数据源等程序安全相关元素的精确有效的识别分析。本文提出了一种基于数据安全状态跟踪和检查的安全漏洞静态检测方法。该方法对漏洞状态机模型的状态空间进行了扩展,使用对应多个安全相关属性的向量标识变量安全状态,细化了状态转换的粒度以提供更为精确的程序安全行为识别;在漏洞状态机中引入了对合法性检查的识别,有效降低了误报的发生;建立了系统化的非可信数据鉴别方法,可防止由于遗漏非可信数据源而产生的漏报。基于此方法的原型系统的检测实验表明:本文方法能够有效检测出软件系统中存在的缓冲区溢出等安全漏洞,误报率明显降低,并能避免现有主流静态检测方法中存在的一些严重漏报。关键词:漏洞检测;静态分析;状态机;漏报;误报中图分类号:TP309ResearchandEnforcementofaStaticVulnerabilitiesDetectionMethodBasedonSecurityStateTracingandCheckingLIANGBinHouKan-KanSHIWen-ChangLIANGZhao-Hui(SchoolofInformation,RenmingUniversityofChina,Beijing100872)(MOEKeyLaboratoryofDataEngineeringandKnowledgeEngineering,Beijing100872)AbstractThemainproblemofexistingstaticvulnerabilitydetectionmethodsbasedsourcecodeanalysisistheirhighfalsepositiveandfalsenegative.Onemainreasonislackofaccurateandeffectiveidentificationandanalysisofsecurity-relatedprogramelements,e.g.datavalidationchecking,tainteddatasource,etc.Astaticvulnerabilitydetectionmethodbasedondatasecuritystatetracingandcheckingisproposed.Inthismethod,thestatespaceofstatemachinemodelisextended;thesecuritystateofavariableisidentifiedbyavectorthatmaycorrespondtomultiplesecurity-relatedpropertiesratherthanbyasingleproperty;fine-grainedstatetransitionisprovidedtosupportaccuraterecognitionofprogramsecurity-relatedbehaviors;therecognitionofvalidationcheckingisintroducedinvulnerabilitystatemachinetoreducefalsepositives;andasystematicdiscriminationmechanismforuntrustworthydataisconstructedtopreventfalsenegativesresultfromneglectinguntrustworthydatasources.Theexperimentalresultsofaprototypesystemshowthatthismethodcaneffectivelydetectbufferoverflowandothertype’svulnerabilitiesinsoftwaresystems,andwithobviouslylowerfalsepositivethanexistingmainstreamstaticdetectionmethodsandavoidsomeseriousfalsenegativeofthesemethods.Keywordsvulnerabilitiesdetection,staticanalysis,statemachine,falsenegative,falsepositive本课题得到国家自然科学基金项目(60703102,60873213)、北京市自然科学基金项目(4082018)和国家863项目(2007AA01Z414)的资助。梁彬,男,1973年生,博士,副教授,主要研究方向为信息安全与系统软件,Email:liangb@ruc.edu.cn.侯看看,女,1986年生,硕士研究生,主要研究方向为静态分析。石文昌,男,1964年生,博士,教授,博士生导师,主要研究方向为信息安全、可信计算与系统软件。梁朝晖,女,1968年生,博士,讲师,主要研究方向为信息安全、网络通信。2《计算机学报》2009年5期1引言大多数信息安全事件的根源在于计算机软件系统中存在有安全漏洞(Vulnerability)[1]。要杜绝这类安全事件,最根本的办法在于在软件发布前检测出安全漏洞并修正。为了提高漏洞检测的效率,安全界对自动化的漏洞检测技术进行了研究,主要有动态分析(DynamicAnalysis)和静态分析(StaticAnalysis)两类。动态检测工具使用较容易[2],且确实能够发现一些安全漏洞,但测试用例对程序逻辑的覆盖率问题限制了动态检测工具的发掘能力,难于发现隐藏较深的安全漏洞。静态漏洞分析技术主要通过对系统代码进行程序分析(ProgramAnalysis)以发现各种安全漏洞[3],例如缓冲区溢出、非法指针引用、竞争条件等等。与动态分析相比,静态分析技术能够支持更为有效的深度漏洞检测。漏报(FalseNegative)和误报(FalsePositive)是各种安全漏洞检测技术所要共同面对的问题。近年来,漏洞静态检测技术已经取得了很大的进展,研究人员已经提出和实现了一些漏洞静态检测方法和工具,目前已在操作系统等复杂系统的漏洞检测中得以应用[4]。但仍然存在着误报率和漏报率较高的问题,影响着静态漏洞检测方法进一步推广应用。这与检测模型和安全相关程序特征的识别有着密切的关系。首先,现有静态检测方法采用单一的性质标识对程序数据安全性质进行描述,这种一元的描述机制难以进行细粒度的数据状态分析和精确跟踪分析多种平行发展的数据安全相关性质,不能很好地全面覆盖安全漏洞的激发条件。直接导致的一个严重问题是缺乏对非可信数据合法性检查的有效识别,从而产生大量的误报。目前的检测方法仅仅集中于跟踪分析数据的可信性,一元的安全性质标识往往被完全用于描述数据的可信性,无法精确跟踪对非可信数据所实施的合法性检查,混淆了未经合法性检查的和已经过检查的非可信数据。现实中,几乎所有的软件系统都要处理各种各样的非可信数据,而大部分非可信数据在引用前都经过了相应的合法性检查,消除了其导致危险操作的可能性。因此,这种混淆的后果会将大量安全的非可信数据操作识别为安全漏洞,将导致大量的安全程序片段被错误地检测为含有安全漏洞,从而产生大量的误报。例如,根据文献[5]数据,Johnson等人使用CQUAL系统对Linux内核代码进行的用户态/内核态指针引用漏洞检测,由于缺乏对合法性检查的有效识别,误报率在95%以上。如此高的误报率需要投入大量的资源进行后期人工分析,大大增加了漏洞静态检测技术推广应用的难度。其次,虽然个别的漏洞静态检测方法实现了部分的合法性检查识别,但对合法性检查是否有效缺乏必要的深入分析,未能区分出实现上存在缺陷的无效的合法性检查,从而产生漏报。以斯坦福Engler等人研发的静态漏洞检测系统MC所采用的方法为例[6],MC中用于检测内存操作长度越界漏洞的RangeChecker中引入了对非可信数据的上/下界检查的识别,由于模型表示空间的限制,其仅仅检测长度参数是否经过了相应的算术比较,而并不关心参与比较的上/下界值的类型。而入侵者能利用一个负值的整数绕开与常量或有符号上界值进行的上界比较,触发安全漏洞。在现实世界中,最近几年此类安全漏洞已经大量出现在各种平台系统中,例如Linux内核中的蓝牙设备驱动有符号缓冲区索引安全漏洞①。由于缺乏必要的检查有效性识别,MC未能检测出此漏洞。此外,现有静态检测方法对于数据可信性的鉴别也缺乏清晰的概念模型,在实际应用中容易遗漏一些较隐蔽的非可信数据源,导致对部分非可信数据跟踪分析的缺失而产生漏报。以MC所采用的方法为例,在其对Linux内核的漏洞检测中,遗漏了内核对用户文件的装载解析这一非可信数据源,导致了对可执行文件解析所引发的安全漏洞的误报。针对以上问题,本文提出了一种对程序数据安全状态进行跟踪检查的漏洞静态检测方法。在此方法中,使用有限状态机模型描述程序数据安全性质的变化,对描述数据安全状态的状态空间进行了扩展,采用了多元的状态描述机制,使用一个对应多个安全相关属性的布尔向量标识变量安全状态,更为清晰地反映了变量安全性质的变化,细化了状态转换的粒度以提供更为精确的程序特征识别。在此基础上,利用多元的安全状态设置在跟踪分析数据可信性的同时引入了对合法性检查及其有效性的识别,有效降低了由此引起的误报和漏报的发生。此外,在本文方法中还引入了可信边界与可信边界入口的概念,以可信边界的界定为线索建立了系统化的非可信数据鉴别方法,防止了由于遗漏非可信数据源而产生的漏报。为验证方法的①LinuxKernelBluetoothSignedBufferIndexVulnerability.=CVE-2005-07503《计算机学报》2009年5期有效性,作者基于编译技术实现了一个可实际运行的原型检测系统DELTA(DEtectvuLnerabilitywithsTaticAnalysis)。使用DELTA对Linux内核代码的漏洞检测实验表明,本文方法能够有效检测出系统中存在的安全漏洞,并能避免其他主流静态检测工具中存在的漏报和误报,为提高软件质量及安全性提供了有效可行的方法及工具。本文第2节给出了一种基于程序安全状态的安全漏洞检测方法;第3节描述了DELTA的设计及实现;第4节描述了对Linux操作系统内核源代码的静态检测实验,展示了方法的应用效果;第5节介绍相关工作并进行了分析比较;最后是全文的总结。2检测方法2.1概述本文检测方法的基本思想是对程序状态的跟踪和检查。如图1所示,在本文中将使用基于有限状态机模型的漏洞状态机描述程序变量安全状态的转换规则,针对待检测漏洞设置相应的漏洞状态机规定相关数据的状态转换;并对程序各可能执行路径进行静态遍历并识别当前操作,对当前操作所涉及的程序变量根据状态机赋予其对应的安全状态;在安全相关操作处设置检查点(Checkpoint),以检测操作数据是否具有期望的安全状态,若出现与期望安全状态不符的情况,则表示发现了一个可能的安全漏洞。图1检测方法示意图以拷贝超长数据所导致的缓冲区溢出漏洞为例,当使用内存拷贝函数memcpy根据一个未经上界检查的用户输入的操作长度参数复制超长的数据至目标缓冲区时,将发生缓冲区溢出。此时,安全漏洞的相关要素为:安全相关操作——内存拷贝函数;操作数据状态——用户输入的(非可信的)、未经上界检查的操作长度参数。内存拷贝操作将为一个安全检查点,检测系统所期望的操作长度参数为一个可信数据或经过上界检查的非可信数据。当一个用户输入的数据进入系统处理流
本文标题:一种基于安全状态跟踪检查的漏洞静态检测方法研究与实施
链接地址:https://www.777doc.com/doc-2825867 .html