基于动态污点分析的漏洞攻击检测技术研究与实现

合集下载

基于动态污点分析的DOM XSS漏洞检测算法

基于动态污点分析的DOM XSS漏洞检测算法

基于动态污点分析的DOM XSS漏洞检测算法李洁;俞研;吴家顺【期刊名称】《计算机应用》【年(卷),期】2016(036)005【摘要】针对Web客户端中基于文档对象模型的跨站脚本攻击(DOM XSS)漏洞检测问题,提出一种基于动态污点分析的DOM XSS漏洞检测算法.通过构造DOM 模型和修改Firefox SpiderMonkey脚本引擎,利用动态的、基于bytecode的污点分析方法实现了DOM XSS漏洞的检测.对DOM对象类属性的扩展和SpiderMonkey字符串编码格式的修改可以完成污点数据标记;遍历JavaScript指令代码bytecode的执行路径,获得污点传播路径,实现污点数据集的生成;监控所有可能会触发DOM XSS攻击的输出点,实现DOM XSS漏洞的判定.在此基础上,利用爬虫程序设计并实现了一个互联网DOM XSS漏洞检测系统.实验结果表明,所提算法能有效检测网页存在的DOM XSS漏洞,其检测率可达92%.【总页数】5页(P1246-1249,1278)【作者】李洁;俞研;吴家顺【作者单位】南京理工大学计算机科学与工程学院,南京210094;南京理工大学计算机科学与工程学院,南京210094;南京理工大学计算机科学与工程学院,南京210094【正文语种】中文【中图分类】TP393.08【相关文献】1.基于DOM状态转换检测XSS漏洞 [J], 王丹;刘立家;林九川;赵文兵;杜晓林2.基于DOM型XSS漏洞攻击与防范技术研究 [J], 谢品章3.基于动态污点传播模型的DOM XSS漏洞检测 [J], 贾文超;汪永益;施凡;常超4.基于动态分析的XSS漏洞检测模型 [J], 谷家腾;辛阳5.基于动态污点分析的工控设备硬件漏洞挖掘方法研究 [J], 段斌; 李兰; 赖俊; 詹俊因版权原因,仅展示原文概要,查看原文内容请购买。

谈计算机安全漏洞动态检测的原理方法与实践

谈计算机安全漏洞动态检测的原理方法与实践

谈计算机安全漏洞动态检测的原理方法与实践计算机安全漏洞动态检测的原理方法与实践随着计算机技术的不断发展,计算机在现代社会中已经成为人们日常生活中不可分割的一部分。

然而,随着计算机应用的普及,各种计算机安全问题也随之产生。

其中最主要的问题之一便是计算机安全漏洞。

计算机安全漏洞指的是计算机软件或系统中存在的可以被攻击者利用的漏洞。

这些漏洞可能会导致信息泄露、系统瘫痪、甚至是严重的安全事故。

因此,计算机安全漏洞的发现和修复显得至关重要。

计算机安全漏洞的发现有两种手段,一种是静态分析,另一种是动态分析。

静态分析主要是基于漏洞分析、二进制分析等技术,对软件的静态信息进行分析,以发现程序中的漏洞。

这种方法发现漏洞的时间往往比较早,但是因为它只能对程序的静态信息进行分析,往往难以准确地确认漏洞的存在。

此外,它也不能很好地处理程序的复杂逻辑与动态行为。

动态分析主要是通过执行程序,对程序在运行时的动态行为进行监控分析,以发现程序中的漏洞。

这种方法虽然要比静态分析复杂一些,但是由于它能立即得到修复漏洞的建议,且往往具有更准确的漏洞检测效果,现在被广泛应用于计算机安全漏洞的发现和修复。

计算机安全漏洞的动态检测主要依赖于漏洞检测工具。

漏洞检测工具具有一系列现代技术,旨在分析和探测一般或特定类型的漏洞。

对于一个完整的漏洞检测工具来说,通常包括以下内容:数据采集、特征提取、漏洞分析和漏洞修复等步骤。

数据采集是漏洞检测的第一步。

数据采集通常分为几种类型:输入数据集、网络数据流量和静态分析数据集等。

输入数据集是指用来测试漏洞的输入数据。

网络数据流量是指通过网络流向计算机系统的数据流。

静态分析数据集是指对程序进行分析时采集到的相关数据。

一旦数据采集完成,就需要使用特征提取算法来对数据进行分析。

特征提取是漏洞检测的第二步。

特征提取是通过对数据集进行分析,从中提取出与漏洞相关的特征信息。

通常来说,提取特征信息的方法包括两种,一种是基于特定数据地分析方法,另一种是采用机器学习算法从数据中尝试发现潜在的漏洞特征。

基于二进制程序的动态污点分析技术研究综述

基于二进制程序的动态污点分析技术研究综述

第19卷 第2期2020年 4月 广州大学学报(自然科学版)JournalofGuangzhouUniversity(NaturalScienceEdition)Vol.19 No.2Apr. 2020 基金项目:国家自然科学基金资助项目(U1636215,61572492);广东省重点研发计划资助项目(2019B010137004,2019B010136001);广东省重点科技计划资助项目(LZC0023) 作者简介:黄冬秋(1995—),女,硕士研究生.E mail:2111806024@e.gzhu.edu.cn 通信作者.E mail:dr.yi.han@gmail.com文章编号:1671 4229(2020)02 0057 12基于二进制程序的动态污点分析技术研究综述黄冬秋1,韩 毅2,杨佳庚1,田志宏1(1.广州大学网络空间先进技术研究院,广东广州 510006;2.鹏城实验室网络空间安全研究中心,广东深圳 518055)摘 要:随着程序变得越来越庞大、难以处理,黑客攻击技术越来越复杂,网络空间安全形势日趋严峻,因此,实施有效的自动漏洞检测技术和相关修补技术以防御零day攻击变得愈发重要.动态污点分析技术是将不受信任来源的输入数据视为污染数据,然后监视程序的执行情况以跟踪污染数据传播,并检查污染数据何时被使用.该技术被广泛应用于程序分析、模糊测试、漏洞检测、信息泄露检测、逆向工程和恶意软件分析等安全领域.文章对目前比较流行的动态污点分析框架的研究现状和应用领域进行综述.首先,详细介绍了动态污点分析的支撑技术动态二进制插桩技术、虚拟化技术、虚拟机自省技术和弥合语义鸿沟技术等的基本原理、相关定义、面临的问题与存在的挑战;然后简单介绍动态污点分析技术的技术原理;接着,对比较流行的动态污点分析框架进行调研和分析,根据发展阶段和应用方向将动态污点分析技术划分为进程级动态污点分析技术和全系统级动态污点分析技术,并分别进行详细阐述;最后,简要分析了两类动态污点分析技术的缺点和不足,并展望该技术的研究前景和发展趋势.关键词:动态二进制插桩技术;动态污点分析技术;进程级动态污点分析技术;全系统级动态污点分析技术中图分类号:TP309.1 文献标志码:A0 引 言随着互联网技术的迅速发展,计算机信息技术已经渗透到人们生活的方方面面,计算机信息技术在带给人们便捷的同时,也带来了众多的安全隐患.例如,2019年2月,遗留19年之久的Win RAR高危代码执行漏洞,使5亿以上的用户陷入压缩危机;5月,堪比“永恒之蓝”的微软蠕虫级漏洞“BlueKeep”导致近100万台设备置于高危漏洞之下;7月,iOS系统的6个“无交互”安全漏洞,等等.据统计,2019年国家信息安全漏洞库(CNNVD)公布漏洞数量17316个,美国国家漏洞库(NVD)公布漏洞数量17314个,公共漏洞披露平台(CVE)公布漏洞数量16778个.倘若这些漏洞被一些国家级黑客组织利用,无疑将会成为国与国博弈的重要“军火武器”.计算机软件中的安全漏洞已成为信息系统安全的主要威胁,随着程序变得越来越复杂、庞大和难以处理,软件安全漏洞发掘分析技术成为安全界的研究热点.根据研究对象不同,软件安全漏洞挖掘技术可以划分为基于源码的漏洞挖掘和基于二进制文件的漏洞挖掘两大类.基于源码的漏洞挖掘首要条件是获取软件的源代码,安全人员可以通过分析开源项目的源代码发现项目中存在的安全漏洞.静态分析技术是基于源代码的漏洞挖掘的典型技术,通过词法分析、语法分析、语义分析等技术检测程序中潜在的安全问题.然而,并不是所有软件都是开放源代码,大多数商用软件的源代码很难获得,因此,安全人员引入基于目标代码的漏洞挖掘技术.基于二进制文件的漏洞挖掘技术首先将二进制文件进行反汇编,获取到二进制文件的汇编代码;然后对汇编代码进行切片[1];最后通过跟踪分析反汇编出来的代码,来判断是否存在漏洞.动态污点分析(DTA)技术作为有效而实用的信息流分析技术,被广泛应用于漏洞挖掘、未知漏洞检测、恶意软件检测和分析、漏洞利用等方面. 广州大学学报(自然科学版)第19卷 动态污点分析技术是将不受信任的来源的输入数据视为污染数据,然后监视程序的执行情况以跟踪污染数据传播(例如数据被污染操作),并检查污染数据何时被使用[2].例如,缓冲区溢出和格式化字符串之类的漏洞将受污染的数据用作跳转地址或格式化字符串.动态污点分析技术主要包含三个阶段(图1):①污点标记,即将来自不受信任来源的数据标记为污点数据,并设置污点标签,污点标记存储在污点标记图中,亦称为影子内存;②污点传播,即在程序执行过程中,提取程序语义信息,识别程序操作,根据污点传播规则判别每条指令对应的目标操作数是否被污染,寄存器和内存内容是否被非法改动;③污点检测,是在程序运行过程中,检测某一寄存器或内存位置中的数据是否被污染,以及对应的污染数据.图1 动态污点分析三个阶段(以一个污点字节为例)Fig.1 Threestagesofdynamictaintanalysis(Takeataintedbyteasanexample) 由于动态污点分析技术在网络空间安全中发挥着重要作用,越来越多的研究者开始关注动态污点分析技术,对动态污点分析技术进行研究、分析、改进和扩展,并制定符合目标需要的动态污点分析框架.本文从构建一个可用、可靠、高效的动态污点分析系统的角度出发,重点关注动态污点分析技术的研究现状、应用领域、存在的问题与挑战和未来发展方向等.1 二进制程序漏洞检测技术概述二进制程序漏洞挖掘是一个多种技术相互结合、共同使用和优势互补的过程,目前较为常见的二进制程序漏洞挖掘分析技术主要有手工测试技术、补丁比对技术、静态分析技术、动态分析技术、模糊测试技术和动态污点分析技术等.1.1 手工测试技术手工测试技术[3]是测试工程师将手动准备好的包含有效输入和无效输入的测试用例,发送给客户端或服务器目标服务程序,根据目标程序的状态和对不同输入的反应,识别程序问题的漏洞检测技术.它是软件测试中最严格和最古老的方法.这种漏洞检测技术可由测试者独立完成,不需要额外的辅助工具,但是高度依赖测试者,需要测试人员对测试程序比较了解.手工测试是一项繁重的工作,需要测试人员具有一定的耐心、观察力、投机性、创新性和开放性等技巧.在大型软件应用程序或数据集覆盖率非常大的应用程序上,很难进行重复的手动测试[4].1.2 补丁比对技术二进制补丁比对技术[5]主要用于对“已知”漏洞的挖掘,即通过对同一程序两个连续或接近版本进行比较,识别新版本中修补的内容.由于程序安全补丁会携带有关脆弱点信息,因此,通过程序分析技术提取补丁中的关键漏洞信息,推断程序漏洞利用的攻击代码是黑客进行漏洞利用的常用手段.经验丰富的安全专家或黑客甚至能在很短的时间完成漏洞挖掘和利用的过程,但这种方法不适合文件修改较多的情况.1.3 静态分析技术静态分析技术[6]是在没有数据输入且没有运行代码的情况下检查程序的源代码或者反汇编代码(这里指反汇编代码),通过词法分析、语法分析和语义分析等检测程序中潜在的安全问题.从汇编层面查找系统漏洞的方法是通用的,但这种方法却费时费力.另外,这种方法对分析人员技术水平要求较高,该方法的不足之处是无法检测到程序动态运行过程中产生的安全问题.85 第2期黄冬秋等:基于二进制程序的动态污点分析技术研究综述 1.4 动态分析技术动态分析技术是在调试器中对无源码的二进制程序执行运行时的分析,通过对正在运行的程序进行属性(运行状态、内存使用状况、寄存器的值等)分析,进而发现程序潜在的漏洞.尽管动态分析不能证明程序满足特定的属性,但是它可以检测到违反属性的行为,并且可以向程序员提供有关程序行为的有用信息.尽管动态分析技术可以满足某些安全检测的需要,但是这种技术效率低,对分析人员的技术水平要求较高.另外,在大型软件应用程序或数据集覆盖率非常大的应用程序上,动态分析技术具有很大的限制.1.5 模糊测试技术模糊测试技术通过向待测试的闭源软件输入一组随机数据,监视程序运行、记录程序运行中的异常行为,最后通过记录的异常行为,输入定位软件的错误位置.模糊测试技术的显著优点是与被测试程序的关联性较小,且操作简单.但模糊测试技术本身也有不少局限性,因此,研究者们经常通过引入一些新技术来提升模糊测试的代码覆盖率、测试用例的有效性和模型的智能性.例如,机器学习、符号执行和动态污点分析等技术经常被引入模糊测试模型中.1.6 动态污点分析技术动态污点分析技术能够从攻击者进行漏洞利用的本质出发,分析污点数据在程序运行过程中的流动路径和影响范围.从宏观层面分析,动态污点分析技术是基于动态二进制插桩技术,在不破坏程序原有逻辑的基础上插入一些信息收集代码,进而获得二进制程序运行过程中的相关信息;接着,增加一个污点标记来标识不安全数据或者被不安全数据污染的数据,污点信息存储在影子内存模块;根据程序的不同指令类型和指令操作数,设计相应的污点传播规则,传播程序执行过程中污点标记对寄存器和内存产生的影响;最后,通过分析程序的数据流特征,检测程序中潜藏的漏洞.2 基于二进制程序的DTA技术动态污点分析技术于2005年由Newsome等[2]在模型TaintCheck[2]中正式提出,动态污点分析中污点(Taint)的概念首先由脚本语言Perl引入.动态污点分析的提出主要基于以下现象:由于攻击者通常利用输入去替换程序执行过程中的某一受信任来源的值,进而非法更改程序的执行.例如,攻击者可能试图通过自己的数据去覆盖跳转地址或格式化字符串指向的值,达到成功利用的效果.动态污点分析能够实现在程序执行时跟踪和分析程序标记的数据流,主要包含污点标记、污点传播及污点检测等三个阶段.当内存字节被标记为污点源时,污点字节的污点信息会相应地存储在影子内存中.例如污染字节与未污染的字节进行add运算时,被污染运算结果的污染信息也会相应地存储在影子内存中,安全人员可以访问影子内存信息,查询对应字节的污染状态.2.1 污点标记动态污点分析将来自不受信任来源的数据标记为污点数据,并设置污点标签,污点标记存储在污点标记图中,亦称为影子内存.根据libdft[7]模型中的污点标记模型,可以得到如图2所示的污染标记图,示例中以一个bit位标识一个字节的污染状态,使用setb(addr)存储一个字节的污染状态,setw(addr)存储两个字节的污染状态.图2 污染标记图Fig.2 Taintbitmap95 广州大学学报(自然科学版)第19卷  污点标记方式很大程度影响着污点传播处理和污点信息存储的效率.污点标记粒度可以标记到内存块、单个字节、单个位等数据单元.污点标记粒度越小,所执行的动态污点分析会越细致,但需要更多的存储空间来存储标签.污点标签越大则通用性越强,需要更大的存储空间.2.2 污点传播动态污点分析的目的是跟踪污点源和污点槽之间的信息流动.污点传播主要用于确定程序执行时污点如何精确流动[8].例如,当指令的源操作数被污染时,指令的目的操作数也会变成污点数据.动态污点传播在程序执行过程中,提取程序语义信息,识别程序操作,根据污点传播规则判别每条指令对应的目标操作数是否被污染、寄存器和内存内容是否被非法改动.给定一个污点的传播规则,就可以通过动态污点分析语义定义的语义跟踪污点的传播.污点传播规则受污点标记粒度、指令类别等因素的影响.二进制代码级的污点传播分析有两种粒度:一种是直接分析X86等指令集,另一种是分析二进制代码翻译后的中间语言(IR)[9].例如,Pin框架直接基于X86指令集分析,DECAF++基于QE MU模拟器将二进制代码翻译成中间语言级别.QEMU使用TinyCodeGenerator(TCG)将目标代码翻译成主机代码.由于二进制级别指令集较为复杂,并不是所有的指令都是污点信息传播指令,因此,在编写污点传播规则时要有选择地编写指令的传播规则.污染传播指令可划分为五类:数据移动指令(LOAD、STORE、MOVE、PUSH和POP等[10])、算数运算指令(ADD、SUB和XOR等)、条件跳转指令(JZ)、函数级间接污染指令(strncpy函数对应的call指令)和函数级敏感函数指令(scanf、sprintf和strcpy等对应的call指令).污点传播过程中,不恰当的污点传播规则经常会引起“过污染”和“欠污染”问题.如图3所示,若寄存器eax被污染而寄存器ebx没有被污染,则寄存器eax的污染将保持不变,但是当寄存器ebx的值为0且ebx未受污染,污染规则未清除寄存器eax的污染,则这条规则是不合理的,将会导致过污染.过污染和欠污染问题是污点分析引擎面临的主要技术挑战.图3 过污染示意图Fig.3 Over taintingexample2.3 污点检测污点检测是在程序运行过程中,检测某一寄存器或内存位置中的数据是否被污染,以及对应的污染数据有哪些.污点数据越权使用是污点检测过程的重点,合理制定检测规则对污点检测结果的正确性至关重要,常见的检测规则有:将污点数据作为跳转地址、将污点数据作为执行的代码和污点数据受控写入等.例如,基于动态污点分析的漏洞类型检测系统在污点检测模块,会基于一定的安全规则检测出程序的潜在漏洞类型,如缓冲区溢出、格式化字符串和堆溢出等;基于动态污点分析的恶意代码通信协议逆向分析系统,会基于污点检测模块将网络数据流作为分析对象,依据协议字段的取值变化频率和特征推断得到协议格式.3 DTA相关技术本节将梳理进程级动态污点分析和全系统级动态污点分析中涉及到的相关理论背景,包括进程级动态二进制插桩(动态二进制插桩)、虚拟化和虚拟机自省等技术的基本原理、相关定义和面临的问题与存在的挑战.3.1 动态二进制插桩插桩技术是一种用于在应用程序中插入额外代码以观察其行为的技术[10].根据插桩的不同阶段和不同代码级别,通常划分为:基于源代码的插桩和基于中间代码的插桩、基于静态二进制的插桩和基于动态二进制的插桩.一般地,源代码插桩技术需要对源码进行修改和编译;基于中间代码06 第2期黄冬秋等:基于二进制程序的动态污点分析技术研究综述 的插桩需要有针对性地进行修改,实现难度较大,但通用性更强;静态二进制插桩技术在程序执行前插入额外的代码和数据并重组二进制程序;动态二进制插桩在程序运行时实时地插入额外代码和数据,进而观察程序的运行行为.动态二进制插桩分析关注的是程序运行时的真实行为,直接在程序执行过程中监视进程并插入指令流,探测程序运行的重要数据信息,通过对重要数据信息分析,进行程序分析、漏洞检测等.例如,利用一个动态二进制插桩工具实现简单的基本块的统计功能,为了实现这一点,需要基于DBI引擎的API来检测每个基本块的最后一条指令,并回调一个递增计数器的函数[10].目前应用比较广泛的动态二进制插桩框架主要有Dyninst[11]、DynamoRIO[12]、Pin[13]、Valgrind[14]、Triton[15]和Fri da[16]等.以PIN平台为例,动态二进制插桩框架如图4所示.图4 PIN平台动态二进制插桩框架Fig.4 DynamicbinaryinstrumentationframeworkbasedonPIN 动态二进制插桩技术正在被广泛应用于软件工程、程序分析和计算机安全等问题.例如,软件工程师希望通过动态二进制插桩系统了解自己所开发软件或系统的性能和运行行为,硬件工程师使用动态二进制插桩系统测试不受当前硬件支持的新指令,软件测试工程师使用动态二进制插桩系统对特定程序或系统通过插桩测试进行缺陷检测等.由于这种进程级别的二进制插桩框架分析程序和原始程序共享相同的地址空间,均可在CPUring3应用程序层或者ring0操作系统内核层执行,分析代码具有与被检测进程相同的特权[17],这种插桩技术用于分析恶意软件时,分析程序可能被篡改.因此,以Pin为代表的进程级动态污点分析框架无法检测操作系统内核漏洞.在分析恶意软件时,一旦分析程序被恶意篡改,将会直接导致分析结果出错.3.2 虚拟化技术一般地,全系统污点分析工具的实现基于虚拟化技术,分析进程与被检测进程执行完全隔离,被检测进程在来宾虚拟机内部执行,分析进程在来宾虚拟机外部执行,具有更好的透明性和抗篡改性.虚拟化是通过应用一种或多种概念或技术(例如硬件和软件分区、分时,部分或完整的机器仿真、模拟和服务质量等),将计算机资源划分为多个执行环境的框架或方法[18].虚拟化的起源可以追溯到六十年代和七十年代的大型机,虚拟化最初被认为是一种逻辑上划分大型机以允许多个应用程序同时运行的方法[19].维基百科对虚拟化这样定义:在计算中,虚拟化是指创建某物虚拟(而非实际)版本的行为,包括虚拟计算机硬件平台、存储设备和计算机网络资源等[20].现代计算机足够强大,可以使用虚拟化来呈现许多较小的虚拟机(VM)的错觉,每个虚拟机运行一个单独的操作系统实例[21].虚拟化的本质是给用户提供端到端的资源虚拟化服务,提高用户对资源的使用效率和管理能力.根据虚拟化的运行模式可划分为容器虚拟化、模拟器虚拟化和库虚拟化.例如模拟器QEMU就属于模拟器虚拟化,它通过模拟器模拟出所有的硬件.QEMU是纯软件实现的虚拟化模拟器,可以在虚拟机中运行未修改的目标操作系统(例如Windows或Linux)及其16 广州大学学报(自然科学版)第19卷 所有应用程序,非常灵活、可移植.我们最熟悉的就是QEMU可以模拟出一台能够独立运行操作系统的虚拟机.QEMU基于Hypervisor(虚拟机监视器)创建、运行和管理各个虚拟机,它的具体工作原理如下:虚拟机监视器Hypervisor从磁盘映像加载二进制机器代码,使用TCG(微代码生成器)将其转换为本机机器代码,连接到虚拟或实际设备,并启动软件MMU(软件内存管理单元),然后开始在磁盘映像中模拟操作系统.就当前来看,模拟器虚拟化持续扩张遇到的障碍主要集中在虚拟化的性能上.研究者们相继推出各种方法,进行提升模拟器虚拟化的性能.例如,开启KVM的QEMU[22]可以通过KVM模块提供的系统调用接口进行内核设置,为QEMU虚拟机提供一定的硬件虚拟化加速,从而提高虚拟机的性能.KVM是通过调用Linux本身内核功能,实现对CPU的底层虚拟化和内存虚拟化.3.3 虚拟机自省技术随着虚拟化技术在X86平台上突飞猛进的发展,虚拟化技术重新引起了虚拟化市场的广泛关注,导致了监控虚拟机行为的虚拟机自省技术及工作的迅速发展.虚拟机自省技术[23]由Garfinkel等在2003年提出.虚拟机自省技术根据从虚拟机外部检查和分析来宾虚拟机操作系统的内部状态信息,解决了“越来越多先进技术成功实现攻击或逃避入侵检测系统,进而防止入侵检测系统检测或报告出恶意活动”的问题,并在很大程度上增强了逃避和攻击的抵抗力.并避免了对抗对入侵检测系统攻击和躲避技术产生的两个相互矛盾的要求,即受监视系统状态的可见性和检测系统与攻击者之间的隔离度.虚拟机自省技术面临的主要挑战就是语义鸿沟[24]问题.通常,在进行虚拟机自省时,获取到的来宾虚拟机操作系统的管理程序视图只有硬件寄存器和原始二进制数据,没有高层语义信息,这种差异被称为语义鸿沟.为了弥合语义鸿沟,提高虚拟机自省的准确性和高效性,研究者们分别从虚拟化原理、操作系统原理等不同角度进行探讨.例如Garfinkel等[23]在提出虚拟机自省概念时,给出的采用结合操作系统接口库和Linux内核崩溃转储分析工具检查内存和寄存器等设备信息的方式弥合语义鸿沟;VMwatcher[25]通过解析内核数据结构(如文件、目录和进程)进行重构语义视图,获得虚拟机寄存器、内存和磁盘等状态的全部信息;VIX[26]参照虚拟机内部文件信息将读取到的字节信息还原成高级语义信息,另外,VIX提供了监控来宾虚拟机内部进程、网络端口等的命令和接口.常见的虚拟机自省工具有VMwatcher[25]、VIX[26]、Virtuoso[27]和VMST[28]等.4 基于二进制程序的DTA技术研究现状 动态污点分析在许多研究问题中具有举足轻重的作用,例如漏洞类型检测、恶意软件分析和协议逆向工程等.自2005年卡内基梅隆大学的New some等[2]基于开源模拟器Valgrind研发出的动态污点分析系统TaintCheck后,学术界相继推出多个动态污点分析模型.动态污点分析技术的发展主要分为两个阶段:2005-2008年主要集中在动态污点分析技术本身的研究,这一时期出现了完善动态污点分析理论的TaintCheck[2]、LIFT[29]和Dytan[30]等工具;2008年后关注点集中在污点分析方法和其他技术的融合,并出现了基于QEMU模拟器的全系统级动态污点分析系统.下面从进程级动态污点分析和全系统级动态污点分析两个方面,对不同时期的动态污点分析技术进行比较分析.4.1 进程级动态污点分析平台进程级动态污点分析系统以动态二进制插桩平台为支撑,跟踪记录程序指令的执行.笔者在第3部分已对动态二进制插桩平台进行了详细介绍,这里不再重复解释.下面从发行时间、插桩平台、主要技术点、是否开源等方面对上述提到的几种常见进程级动态污点分析平台进行综合比较分析,见表1.TaintCheck、LIFT和Dytan框架主要集中在动态污点分析技术本身的研究.TaintCheck利用插桩对商业软件漏洞进行自动检测、分析和漏洞特征生成,能够捕获到程序中覆盖返回地址、覆盖函数指针和格式化字符串漏洞等异常,但消耗的空间和时间代价较大.LIFT利用插桩检测破坏数据(返回地址、函数指针等)的各种类型安全攻击.Dytan基于插桩技术执行基于数据流和控制流的多污点标记和传播,对X86二进制程序进行污点分析.26。

基于模糊AHP理论和污点分析的路由器漏洞挖掘技术研究

基于模糊AHP理论和污点分析的路由器漏洞挖掘技术研究

Research on Vulnerability Mining of the Routers Based on Fuzzy AHP and Taint AnalysisA thesis submitted toNorthwest Universityin partial fulfillment of the requirementsfor the Degree of Masterin Information SecurityBy Wang RuiSupervisor: Zhao Jian ProfessorJune 2018摘要路由器无论是接收信息还是发送信息,都不可避免的会访问内部可信网络或外部不可信网络。

然而,随着科学技术的不断发展,威胁路由器安全的因素逐渐演变的更加多样且来源复杂,导致路由器中存在各种各样的漏洞。

为此,针对路由器漏洞的研究在漏洞挖掘领域受到了越来越多的关注。

本文首先采用层次分析-模糊综合评判算法(模糊AHP),以路由器的安全风险来源作为决策指标,对D-Link设备的整体安全进行评估。

然后,在此评估结果的基础上,具体分析造成该款D-Link设备不安全的原因,并以此为出发点,利用基于污点分析技术改进的Fuzzing测试方法对D-Link设备进行漏洞挖掘。

主要内容如下:(1)由于不同厂家的路由器设计模式不同,导致造成路由器不安全的因素多样且来源复杂。

本文选取具有代表性的D-Link路由器设备来进行研究,根据风险来源对造成路由器不安全的因素进行层次划分,然后利用模糊AHP建立了一套评估流程,实现了对D-Link的安全进行量化评估。

(2)提出了一种新颖的路由器漏洞挖掘方法,并基于Sulley将该方法实现为一种路由器漏洞检测框架。

其中,结合污点分析以及路由器文件系统加密存在于固件中的特性,设计了一种针对路由器的三阶段TPFTGM模块,利用TPFTGM具有针对性的特性,提高了对路由器进行漏洞挖掘的效率,同时优化了传统Fuzzing中由于测试用例过于盲目造成的高盲率、高漏警率、高误警率以及低代码路径覆盖率的问题。

基于污点分析的PHP漏洞检测

基于污点分析的PHP漏洞检测

第26卷,第1期中国传媒大学学报(自然科学版)2019年2月JOURNAL OF COMMUNICATION UNIVERSITY OF CHINA(SCIENCE AND TECHNOLOGY)Vol26,No1Feb,2019基于污点分析的PHP漏洞检测曹凯,何晶,范文庆,黄玮(中国传媒大学理工学部,北京100024)摘要:提出了一种基于变量回溯的污点分析算法来进行PHP漏洞检测:首先,基于PHP语法分析器PHP-Parser 对PHP进行词法和语法分析,产生抽象语法树,再由其产生对应的控制流图,然后在控制流图上实行污■点分析。

通过跟踪程序中可能导致漏洞的敏感函数中包含的危险参数,向前回溯处理,判断其是否来自于外部危险输入并判断是否经过了安全处理来确定漏洞釆用本方法对DVWA中的12个程序进行测试,发现了7个已知的漏洞,证明该方法具有较强的漏洞检测能力关键词:PHP;抽象语法树;控制流图;污点分析中图分类号:TP309.2文献标识码:A文章编号:1673-4793(2019)01-0033-06PHP Vulnerability Detection Based on Stain AnalysisCAO Kai,HE Jing,FAN Wen-qing,HUANG Wei(Faculty of Science and Technology,Communication University of China,Bt*i jing100024,China)Abstract:This paper proposes a taint analysis algorithm based on variable backtracking for PHP vulnera­bility detection.Firstly,this paper uses PHP一Parser to perform lexical and grammatical analysis on PHP and generate an Abstract Syntax Tree.Then generate a corresponding Control Flow Graph,and then per­form a taint analysis on the Control Flow Graph.By tracking the dangerous parameters contained in sensi・tive functions that may cause vulnerabilities in the program,traceback processing is performed to deter­mine whether it originates from an external hazard input and whether a security process has been deter­mined to determine the vulnerabilities.By using this method to test12programs in DVWA,7known vul-neral)ilities were discovered,which proved that this method has strong vulnerability detection capability. Key words:PHP;Abstract Syntax Tree;Control Flow Graph;taint analysis1引言PHP语言在网站服务端使用广泛,但由于固有的脆弱性,在编程过程中易产生各种漏洞。

漏洞挖掘场景下的污点分析技术分析

漏洞挖掘场景下的污点分析技术分析

漏洞挖掘场景下的污点分析技术分析1、污点分析基本原理污点分析是⼀个泛概念,它在不同的应⽤领域都可以发挥良好的作⽤,本⽂的讨论重点将聚焦在“⾯向⾃动化漏洞挖掘的污点追踪技术”,以漏洞挖掘fuzz这个场景为着眼点,详细阐述污点跟踪与分析的概念。

0x1:污点分析定义污点分析可以抽象成⼀个三元组<sources,sinks,processor>的形式,其中source 即污点源,代表直接引⼊不受信任的数据或者机密数据到系统中sink 即污点汇聚点,代表直接产⽣安全敏感操作(违反数据完整性)或者泄露隐私数据到外界(违反数据保密性)processor 即数据流处理,代表整个数据传输和处理的过程(例如加密、编码处理),外部输⼊的数据经过processor处理后会得到⼀个适合软件核⼼模块处理的数据形式.污点分析就是分析程序中由污点源引⼊的数据,在经过数据流处理后,传播到污点汇聚点后,是否符合预设的策略。

这⾥的策略是⼀个泛概念,例如:污点直接被传⼊了危险的函数中(例如eval)污点未经编码和转义处理,传⼊了输出函数中(例如xss漏洞)在漏洞挖掘中,processor往往指代⼀个“⽆害化处理模块”,例如html转义等。

0x2:识别污点源和汇聚点识别污点源和污点汇聚点是污点分析的前提。

⽬前,在不同的应⽤程序中识别污点源和汇聚点的⽅法各不相同,这其实是⼀个泛概念,在不同的场景下,污点源和汇聚点污点分析会表现出不同的形式,这⾥的场景例如:不同的系统模型编程语⾔之间的差异待跟踪分析的对象的差异以 Web 应⽤程序漏洞检测为例,污点源及其关键属性如下:对于污点汇聚点来说,可以从概念上⼤致分为3类:使⽤启发式的策略进⾏标记。

例如在webshell检测中,将来⾃程序外部输⼊的数据统称为“污点”数据,保守地认为这些数据有可能包含恶意的攻击数据根据具体应⽤程序调⽤的 API 或者重要的数据类型,⼿⼯标记源和汇聚点。

例如在webshell检测中,将file_get_contents这⼀类危险函数的执⾏结果标记为污点,继续后续的跟踪使⽤统计或机器学习技术⾃动地识别和标记污点源及汇聚点.0x3:污点传播分析讨论完污点源和汇聚点污点分析之后,我们来讨论污点传播分析。

基于动态测试的XSS漏洞检测方法研究

基于动态测试的XSS漏洞检测方法研究
曹黎波 曹天杰
( 中国矿业大学计算机科学与技术学院 江苏 徐州 2 2 1 1 1 6 )


X S S( C r o s s — s i t e S c i r p t i n g ) 漏洞是 We b应用程序最严 重的漏洞之一。针 对现有 动态检测方 法在检测效 率方面 的不足 , 提
第3 2卷 第 8期
2 0 1 5年 8月
计算 机应 用与 软件
C o mp u t e r Ap p l i c a t i o n s a n d S o f t w a r e
Vo 1 . 3 2 No. 8
Aug .2 01 5
基于动态测试 的 X S S漏 洞 检 测 方 法研 究
v e c t o r s t o t e s t ,we i f r s t s u b mi t l e g a l v e c t o r s f o r t e s t i n g i n o r d e r t o e x c l u d e t h e p a g e s d e i f n i t e l y wi t h o u t XS S v u l n e r bi a l i t i e s nd a t o c o l l e c t t h e
s u b mi t t h e c o r r e l a t e d a t t a c k v e c t o r s a c c o r d i n g t o o u t p u t p o i n t t y p e or f f u r t h e r t e s t i n g ,a n d a v o i d s t r a v e r s i n g a l l t h e a t t a c k v e c t o s .I r n a d d i t i o n, b y l o o k i n g or f t h e s p e c i i f c d a t a i n c o r r e s p o n d i n g p a g e o f o u t p u t p o i n t s o n l y ,i t i s a b l e t o e f f e c t i v e l y a v o i d t r a v e r s i n g ll a t h e p a g e s .E x p e r i me n t p r o v e s t h a t t h e p r o p o s e d me t h o d i s v e r y e f f e c t i v e i n i mp ov r i n g t h e e f i f c i e n c y o f XS S v u l n e r bi a l i t y d e t e c t i o n .

一种基于动态污点分析的Cisco IOS漏洞攻击检测方法

一种基于动态污点分析的Cisco IOS漏洞攻击检测方法

一种基于动态污点分析的Cisco IOS漏洞攻击检测方法
随着网络技术的不断发展,网络安全问题也越来越受到关注。

而Cisco IOS漏洞攻击是一种比较常见的网络安全问题,因此
如何有效地检测这种漏洞攻击成为了一个值得探讨的课题。

本文将介绍一种基于动态污点分析的Cisco IOS漏洞攻击检测方法。

动态污点分析是一种常见的漏洞分析技术,其基本思想是在程序执行过程中,动态跟踪程序的运行状况,确定输入和修改了哪些数据。

基于这些分析结果,可以有效地检测和防止漏洞攻击。

在本方法中,首先需要利用Cisco IOS的基本原理实现Cisco IOS虚拟机的动态跟踪。

将要分析的程序加载到虚拟机中,然
后在执行过程中动态记录程序的运行状况,包括函数调用、变量值修改以及流程控制等信息,以此来分析程序的行为和漏洞。

其次,本方法需要设计一种特定的污点标记方案,即在必要的位置添加污点标记,并跟踪这些标记的传递和使用。

当检测到攻击行为时,可以追踪到攻击者的相关操作,使得漏洞攻击的发现和处理更加准确和及时。

最后,本方法需要实现一个基于机器学习的漏洞攻击检测模型。

通过对Cisco IOS漏洞攻击行为进行分析,建立一个漏洞攻击
行为的特征向量,然后通过机器学习算法训练一个基于特征向量的漏洞攻击检测模型。

当检测到新的漏洞攻击行为时,通过该模型进行分析和判断,从而准确地发现和响应漏洞攻击。

总之,本方法提出了一种新的基于动态污点分析的Cisco IOS 漏洞攻击检测方法,该方法具有较高的精度和可靠性,可以有效地检测和防止Cisco IOS漏洞攻击,为网络安全提供了有力的保障。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘 要当今软件系统不断增加的规模和复杂度导致了越来越多的安全漏洞的出现。

其中最为著名的有缓冲区溢出漏洞、格式化字符串漏洞、SQL注入漏洞和跨站脚本漏洞等。

攻击者可以利用这些漏洞改变程序原来的执行流程,执行攻击者自己编写的恶意代码,破坏用户程序或者偷取用户敏感信息。

鉴于漏洞攻击所造成的强大破坏力以及对信息安全的威胁,国内外在漏洞攻击检测方面已有了一些较深入的研究。

然而目前这些技术存在诸多不足,基于编译时期动态跟踪污点信息的检测技术,不能检测针对用非类型安全语言编写的应用程序。

基于源代码分析的检测技术,不能检测针对第三方库的漏洞攻击,并且缺少运行时信息的支持,有较高的误报漏报率。

本文在对漏洞攻击原理的深入分析以及对国内外相关研究技术的大量调研基础上提出了一种新型的漏洞攻击检测技术—基于动态污点分析的漏洞攻击检测技术。

该方法动态的跟踪程序运行时对数据的处理,并记录处理过程中数据的传播,找出目的数据结果与源数据之间的依赖关系,从而达到检测漏洞攻击的目的。

本文的主要贡献如下:(1)实现了基于控制流的污点信息传播方法。

本文不仅实现了基于数据流的污点传播过程,同时也考虑到了信息流的控制依赖关系。

提出了启发式的CFG动态构建,通过指令映射、基本块组合和postdominate树构造,建立起信息流之间的控制依赖关系,并且通过控制流分析算法实现了基于控制流的污点传播过程。

(2)实现了更为严谨的安全检测策略。

本文通过对目前主流漏洞攻击原理的深入分析,提出使用MBSL语言结合正则表达式更为严谨的定义了安全检测策略,解决了宽松的安全检测策略所带来的漏报问题,能够检测出更多种类的漏洞攻击。

(3)实现了基于动态污点分析的漏洞攻击检测原型系统。

该系统通过动态跟踪二进制目标程序运行时的信息流传播,检测并阻止外部不可信数据用于非安全的数据操作,从而扼制了攻击的源头。

该系统不需要对目标程序源代码进行分析,能够适用于商业软件,并且在漏洞攻击检测上有着较低的漏报和误报率。

本文最I后的系统测试从功能和性能两个方面证明了原型系统的可行性和有效性。

关键词:动态污点分析,信息流,控制流,漏洞攻击IIABSTRACTThe increasing size and complexity of modern software systems lead to an increasing number of security vulnerabilities. Well-known examples include buffer overflow,format string,SQL injection,and cross-site scripting vulnerability.These vulnerabilities allow malicious users to launch attacks by executing arbitrary code, causing severe damages to the running process or stealing sensitive data on a vulnerable system. In view of the vulnerabilities caused by destructive power, and threats to information security, the detection of exploits at home and abroad have some more in-depth study. However, these technologies has many deficiencies, stain information, detection technology based on compile-time dynamic tracking applications written for non-type-safe language can not be detected. Detection techniques based on source code analysis , can not detect exploits against third-party libraries, and the lack of information in the run-time support, have a higher false positive and false negative rate.In this thesis, a new type of exploit detection technology - based on dynamic taint analysis, exploit detection technology exploits the principle of in-depth analysis and related technology research basis.Tracking program for the method of dynamic run-time data processing, and record the spread of data processing to identify the dependencies between the purpose of data results with the source data, so as to achieve the purpose of detecting exploits.The main contribution of this thesis is as follows:(1) implemented a spread based on the control flow of the stain. This article not only to achieve a stream-based stain communication process, but also takes into account the information flow control dependencies. Proposed heuristic CFG dynamically build through the instruction mapping, the basic block combination and pdom of tree construction, and establish control dependencies between information flow and control flow analysis algorithm based on control flow stain communication process, to solve the dynamic taint analysis detected blind spot problem.(2)Establish a more rigorous safety testing strategy. This article by the mainstreamIIIexploits the principle of in-depth analysis of MBSL language combined with the regular expression more rigorous definition of the safety testing strategies to solve the problem of lax security testing strategy underreporting can detect a wider range of exploits.(3)implemented a prototype detection system based on dynamic taint analysis exploits. The system by dynamically tracking the spread of the flow of information in the binary object program at run time to detect and prevent untrusted external data for non-safety data manipulation, and thereby contain the source of the attack. The system does not need to analyze the target program source code, can be applied to all commercial software, exploit detection, low false negative and false positive rate. The last experiment of this paper from two aspects of the functionality and performance to prove the feasibility and effectiveness of the prototype system.Key words: dynamic tainting,information flow,control flow, exploitIV目录第一章 绪论 (1)1.1研究目的与意义 (1)1.2研究现状 (3)1.3论文主要工作 (5)1.4论文的组织结构 (5)第二章 漏洞攻击与检测技术相关研究 (6)2.1漏洞攻击技术研究 (6)2.1.1 安全漏洞简介 (6)2.1.1.1 安全漏洞定义 (6)2.1.1.2 安全漏洞分类 (7)2.1.2 缓冲区溢出攻击 (8)2.1.2.1 缓冲区溢出原理 (8)2.1.2.2 栈溢出攻击技术 (9)2.1.2.3 堆溢出攻击技术 (11)2.1.3 SQL注入攻击 (13)2.1.4 格式化字符串攻击 (14)2.1.5 目录遍历攻击 (15)2.2漏洞攻击检测防御技术研究 (17)2.2.1 传统的检测技术研究 (17)2.2.1.1 非执行栈技术 (17)2.2.1.2 非执行堆与数据技术 (17)2.2.1.3 内存映射技术 (18)2.2.1.4 地址空间随机化技术 (18)2.2.1.5 误用攻击检测 (19)V2.2.1.6 异常攻击检测 (19)2.2.2 动态污点分析技术研究 (20)2.2.2.1 动态污点分析概述 (20)2.2.2.2 动态污点分析原理 (21)2.2.2.3 动态污点分析研究现状 (23)2.2.2.4 现有技术的不足和本文解决方案 (26)2.3本章小结 (27)第三章 原型系统设计与实现 (29)3.1系统设计 (29)3.1.1 系统功能与结构图 (29)3.1.2 系统模块划分 (30)3.2模块设计 (31)3.2.1 污点标记模块的设计 (31)3.2.2 数据流分析模块设计 (32)3.2.3 控制流分析模块设计 (35)3.2.4 污点检测模块设计 (38)3.3系统实现 (40)3.3.1系统底层工具Pin (40)3.3.2配置文件解析与系统初始化 (42)3.3.3 污点标记模块实现 (45)3.3.3.1 标记网络与文件I/O数据的实现 (45)3.3.3.2 标记函数特定的参数实现 (48)3.3.3.3 标记任意内存地址实现 (48)3.3.3.4 影子内存和污点标记结构 (48)3.3.4数据流分析模块实现 (50)3.3.5控制流分析模块实现 (54)3.3.5.1基本块的实现(Basic Block) (54)3.3.5.2构建CFG和pdom树 (55)3.3.6污点检测模块实现 (58)VI3.4本章小结 (59)第四章 系统测试 (60)4.1功能评估测试 (60)4.2性能评估测试 (63)4.2.1 兼容性和误报率测试 (63)4.2.2污点传播策略对结果的影响测试 (64)4.2.3 系统性能测试 (66)4.3本章小结 (68)第五章 结束语 (69)5.1论文的主要成果、创新和不足 (69)5.2未来研究工作 (71)致谢.. (72)参考文献 (73)攻硕期间取得的研究成果 (77)VII第一章绪论1.1 研究目的与意义互联网使信息的发布、共享和流通更加快速与便捷,其上丰富的应用服务使得人们生活方式发生着翻天覆地的变化。

相关文档
最新文档