CN110727598A - 基于动态污点跟踪的二进制软件脆弱性检测系统及方法 - Google Patents
基于动态污点跟踪的二进制软件脆弱性检测系统及方法 Download PDFInfo
- Publication number
- CN110727598A CN110727598A CN201910981024.2A CN201910981024A CN110727598A CN 110727598 A CN110727598 A CN 110727598A CN 201910981024 A CN201910981024 A CN 201910981024A CN 110727598 A CN110727598 A CN 110727598A
- Authority
- CN
- China
- Prior art keywords
- taint
- standard library
- instruction
- software
- mark
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
- G06F11/3093—Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出一种基于动态污点跟踪技术的二进制软件脆弱性检测系统及方法,主要解决现有技术运行时开销大、适用性差及因语义信息不全面造成的欠污染的问题。检测系统包括污点标记模块、脆弱性检测模块、污点传播分析模块以及API调用处理模块。API调用处理模块和污点传播分析模块确定系统的污点源与检测点;污点标记模块分配污点标记存储结构;污点传播分析模块和API调用处理模块跟踪被监控软件运行过程中指令、内核系统调用以及C标准库函数的污点标记传播;脆弱性检测模块检测污点数据的传播是否触发了软件脆弱性检测规则。本发明提高了系统动态污点跟踪的效率与准确性,扩展了系统的适用性,可用于对二进制软件进行脆弱性检测。
Description
技术领域
本发明属于信息安全技术领域,特别涉及一种二进制软件脆弱性检测系统及方法,可用于Linux环境下的ELF文件格式或Windows环境下的PE文件格式,利用动态污点分析技术,对二进制软件进行脆弱性检测,以检测二进制软件存在的脆弱性以及抵御软件在运行过程中遭受的脆弱性攻击。
背景技术
随着计算机技术的发展,计算机软件已经渗透到国防、企业以及个人等重要领域,一些关键软件一旦遭到破坏,会对整个计算机信息系统造成不可估量的损失,因此计算机软件的安全性问题一直是信息安全研究的重要课题。
软件脆弱性即软件中客观存在的缺陷或弱点,能够被攻击者访问和利用,并导致系统的安全威胁与损害。典型的软件脆弱性包括:敏感信息泄露脆弱性、非法操作脆弱性以及缓冲区溢出脆弱性等。
动态污点跟踪技术是一种在程序运行过程中,通过实时监控应用程序的污点数据在系统中的传播过程,判断污点数据能否从污点源传播到检测点并触发软件脆弱性,检测污点数据的非法使用,对软件脆弱性进行有效分析的技术。动态污点跟踪能够在程序运行时实时跟踪污点数据的传播,监控和记录程序运行时各存储单元数据的状态,精确指导污点标记传播的过程;并且可以直接应用于未修改的二进制文件,如闭源二进制软件。因此利用动态污点跟踪技术检测软件脆弱性具有实时、适用范围广且准确度高的特点。
现有的基于动态污点跟踪技术的软件脆弱性检测系统通常基于动态二进制插桩工具实现,通过动态二进制插桩工具在被监控程序指令流的特定位置插桩污点传播代码来实现污点传播逻辑,进而动态检测软件的脆弱性。
论文“libdft:Practical Dynamic Data Flow Tracking for CommoditySystems”(ACM SIGPLAN Notices,2012,47(7):121-132)公开了一种通用的二进制软件污点跟踪系统,该系统以动态二进制插桩工具Pin为基础,实现了针对x86程序的动态污点跟踪。但是,该系统在被监控软件执行的每条指令前都插桩了用于污点跟踪的代码,从而被监控软件的运行时开销显著增大;并且该系统对被监控软件用户空间的程序代码仅考虑了指令级语义信息的污点传播逻辑,并未考虑更高级语义信息的污点传播逻辑,如函数级的语义信息,从而易造成欠污染的问题。
论文”TaintEraser:Protecting Sensitive Data Leaks Using Application-Level Taint Tracking”(ACM SIGOPS Operation System Review,2011,45(1):142-154)通过优化动态污点跟踪技术,提出了一种保护敏感信息泄露的系统TaintEraser,该系统通过分析特定应用,对于应用中特定函数的指令级动态污点跟踪进行过滤,在一定程度上减少了跟踪负载。但是,该系统由于只针对特定软件的敏感信息泄露脆弱性进行检测,因而适用性差;并且该系统对于高级语义信息(如函数级)的污点传播逻辑考虑不全面,从而易产生欠污染的问题。
专利“一种针对二进制文件的漏洞定位发掘系统和方法”(专利申请号:CN201811361437.2,申请公布号:CN109460641A)公开了一种漏洞定位发掘方法。该方法利用了基于中间代码的静态污点分析技术,可以针对补丁文件加快漏洞定位。但是,该方法采用的静态污点分析技术无法实时获取程序的运行时信息,并且无法对程序运行时所依赖的动态库进行分析,因而存在漏洞定位准确率低的问题。
发明内容
本发明的目的在于针对上述现有技术的不足,提出一种基于动态污点跟踪的二进制软件脆弱性检测系统及方法,用于解决现有技术中存在的动态污点跟踪性能开销大,适用性差,以及污点传播逻辑语义信息不全面造成的欠污染的问题。
为实现上述目的,本发明采取的技术方案是这样实现的:
一、基于动态污点跟踪的二进制软件脆弱性检测系统,是利用动态二进制插桩工具实现,其特征在于,包括:
污点标记模块,用于存储被监控软件进程地址空间以及线程通用寄存器中数据的污点标记,并为污点传播分析模块以及API调用处理模块提供污点标记操作功能;
脆弱性检测模块,用于检测被监控软件运行过程中是否触发了事先制定的软件脆弱性检测规则,并采取相应的安全响应措施,为污点传播分析模块以及API调用处理模块提供软件脆弱性检测功能;
污点传播分析模块,用于实现针对CPU架构基本指令集语义的污点标记传播,并为每个基本指令类型提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的指令类型为检测点,以调用脆弱性检测模块进行脆弱性检测;
API调用处理模块,用于实现针对操作系统内核系统调用以及C标准库函数语义的污点标记传播,以提高系统动态污点跟踪的精确度以及效率,并提供接口以根据不同的软件脆弱性检测规则,指定相关的系统调用或C标准库函数为污点源或检测点,以调用污点标记模块对引入的敏感数据设置污点标记或调用脆弱性检测模块进行脆弱性检测。
进一步,所述的污点标记模块提供的污点标记操作功能,包括:设置污点标记、清除污点标记以及获取污点标记。
进一步,所述的API调用处理接口模块,包括:
系统调用处理子模块,用于根据内核系统调用的语义信息,传播内核系统调用的污点标记,并为每个内核系统调用提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的系统调用为污点源或检测点,以调用污点标记模块对引入的敏感数据设置污点标记或调用脆弱性检测模块进行脆弱性检测;
C标准库调用处理子模块,用于根据C标准库函数的语义信息,传播C标准库函数调用的污点标记,并为每个C标准库函数提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的C标准库函数为污点源或检测点,以调用污点标记模块对引入的敏感数据设置污点标记或调用脆弱性检测模块进行脆弱性检测。
二.基于动态污点跟踪的二进制软件脆弱性检测方法,其特征在于,包括如下:
1)根据软件脆弱性检测规则,确定检测系统的污点源与检测点:
1a)API调用处理模块指定产生不可信输入的系统调用或C标准库函数为污点源,通过对这些污点源函数的执行进行监控,以调用污点标记模块对被监控软件引入的敏感数据设置污点标记;
1b)污点传播分析模块以及API调用处理模块指定潜在软件脆弱性触发点的指令类型、系统调用以及C标准库函数为检测点,通过对这些检测点相关的指令、系统调用以及C标准库函数的执行进行监控,以调用脆弱性检测模块对被监控软件进行脆弱性检测;
2)污点标记模块分配污点标记存储结构,存储被监控软件进程地址空间以及线程通用寄存器中数据的污点标记;
3)跟踪被监控软件运行过程中指令、系统调用以及C标准库函数的污点标记传播:
3a)污点传播分析模块在被监控软件从污点源引入污点数据后,对被监控软件执行的除C标准库函数外的用户空间指令,进行语义信息的污点标记传播跟踪;对于被监控软件执行的C标准库函数内部的指令,则不进行污点跟踪;
3b)系统调用处理子模块对被监控软件运行过程中产生在C标准库函数外的内核系统调用进行语义信息的污点标记传播跟踪;对于被监控软件产生在C标准库函数内部的内核系统调用,则不进行污点跟踪;
3c)C标准库调用处理子模块对被监控软件运行过程中产生的C标准库函数调用进行语义信息的污点标记传播跟踪;
4)脆弱性检测模块检测被监控软件运行过程中,污点数据的传播是否触发了软件脆弱性检测规则,若是,则结束监控,并采取相应的安全响应措施;否则,返回步骤3)。
本发明与现有技术相比,有如下优点:
第一,由于本发明对C标准库函数进行了函数语义信息的污点标记传播抽象,对于C标准库函数内部指令级以及系统调用级的动态污点跟踪进行过滤;同时检测系统仅在被监控软件从污点源引入污点数据后对被监控软件执行的指令进行动态污点跟踪,有效减少了检测系统动态污点跟踪的性能开销,提高了检测系统动态污点跟踪的效率。
第二,由于本发明对内核系统调用以及C标准库进行了函数语义信息的污点标记传播抽象,有效解决了动态二进制插桩工具无法对操作系统内核指令进行动态污点跟踪的局限性;并且充分考虑了函数级语义信息的污点传播逻辑,从而有效提高了检测系统动态污点跟踪语义信息污点传播逻辑的准确性与全面性,改善了动态污点跟踪技术由于污点传播逻辑语义信息不全面而造成的欠污染的问题。
第三,由于本发明可以根据不同的软件脆弱性检测规则,通过检测系统提供的接口指定相关的指令类型、系统调用或者C标准库函数为污点源或检测点,从而能有效针对多种应用的不同软件脆弱性进行检测,扩展了本发明的适用性。
附图说明
图1是本发明的检测系统结构示意图;
图2是本发明的检测方法实现总流程图;
图3是本发明方法中跟踪指令污点标记传播的子流程图;
图4是本发明方法中跟踪内核系统调用污点标记传播的子流程图;
图5是本发明方法中跟踪C标准库函数调用污点标记传播的子流程图。
具体实施方式
以下结合附图对本发明的实施例作进一步详细描述。
参照图1,本发明的检测系统包括污点标记模块1、脆弱性检测模块2、污点传播分析模块3以及API调用处理模块4,其中:
所述污点标记模块1,用于存储被监控软件进程地址空间以及线程通用寄存器中数据的污点标记,并为污点传播分析模块3以及API调用处理模块4提供污点标记操作功能,该污点标记操作功能包括:设置污点标记、清除污点标记以及获取污点标记。
所述脆弱性检测模块2,用于检测被监控软件运行过程中是否触发了事先制定的软件脆弱性检测规则,并采取相应的安全响应措施,为污点传播分析模块3以及API调用处理模块4提供软件脆弱性检测功能,典型的软件脆弱性检测规则包括:敏感信息泄露脆弱性检测规则和非法操作脆弱性检测规则。
该敏感信息泄露脆弱性检测规则,是用文件读相关的内核系统调用以及C标准库函数作为污点源,从系统敏感文件的读写缓冲区引入污点数据;用网络发送相关的内核系统调用作为检测点,若这些内核系统调用的发送缓冲区被污染,即认为被监控软件存在敏感信息泄露脆弱性;
该非法操作脆弱性检测规则,是用网络接收相关内核系统调用作为污点源,从不可信的外部网络引入污点数据;用跳转类、返回类以及函数调用类指令作为检测点,若这些指令为间接跳转或间接调用指令,且指令的操作数被污染,即认为被监控软件存在非法操作脆弱性。
所述污点传播分析模块3,用于实现针对CPU架构基本指令集语义的污点标记传播,并为每种基本指令类型提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的指令类型为检测点,以调用脆弱性检测模块2进行脆弱性检测;
所述API调用处理接口模块4,用于实现针对操作系统内核系统调用以及C标准库函数语义的污点标记传播,以提高系统动态污点跟踪的精确度以及效率,并提供接口以根据不同的软件脆弱性检测规则,指定相关的系统调用或C标准库函数为污点源或检测点,以调用污点标记模块1对引入的敏感数据设置污点标记或调用脆弱性检测模块2进行脆弱性检测。该模块包括系统调用处理子模块41与C标准库调用处理子模块42,其中:
系统调用处理子模块41,用于根据内核系统调用的语义信息,传播内核系统调用的污点标记,并为每个内核系统调用提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的系统调用为污点源或检测点,以调用污点标记模块1对引入的敏感数据设置污点标记或调用脆弱性检测模块2进行脆弱性检测;
C标准库调用处理子模块42,用于根据C标准库函数的语义信息,传播C标准库函数调用的污点标记,并为每个C标准库函数提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的C标准库函数为污点源或检测点,以调用污点标记模块1对引入的敏感数据设置污点标记或调用脆弱性检测模块2进行脆弱性检测。
参照图2,本发明利用上述检测系统进行二进制软件脆弱性检测的方法,其实现步骤如下:
步骤1,根据软件脆弱性检测规则,确定检测系统的污点源与检测点。
1.1)API调用处理模块4指定脆弱性检测规则相关的产生不可信输入的系统调用或C标准库函数为污点源,通过对这些污点源函数的执行进行监控,以调用污点标记模块1对被监控软件引入的敏感数据设置污点标记;
1.2)污点传播分析模块3以及API调用处理模块4指定脆弱性检测规则相关的潜在软件脆弱性触发点的指令类型、系统调用以及C标准库函数为检测点,通过对这些检测点相关的指令、系统调用以及C标准库函数的执行进行监控,以调用脆弱性检测模块2对被监控软件进行脆弱性检测。
步骤2,污点标记模块1分配污点标记存储结构,该污点标记存储结构包括影子内存和影子寄存器,分别用来存储被监控软件进程地址空间以及每个执行线程通用寄存器中数据的污点标记。
步骤3,跟踪被监控软件运行过程中指令、系统调用以及C标准库函数的污点标记传播。
步骤3.1,污点传播分析模块3在被监控软件从污点源引入污点数据后,对被监控软件执行的除C标准库函数外的用户空间指令,进行语义信息的污点标记传播跟踪;对于被监控软件执行的C标准库函数内部的指令,则不进行污点跟踪。
参照图3,本步骤的具体实现如下:
3.1.1)将被监控二进制软件分解为一系列的程序基本块,程序基本块是以入口指令或跳转目标指令为起始,以控制转移指令为终点的指令序列,其中控制转移指令具体包括返回类、跳转类以及函数调用类指令;
3.1.2)利用动态二进制插桩工具拦截被监控软件当前正待执行的程序基本块,并判断该程序基本块是否有效,若有效,则执行步骤3.1.3),否则,跟踪结束;其中程序基本块有效即为该拦截的程序基本块正常可执行,程序基本块无效即该拦截的程序基本块为空;
3.1.3)判断被监控软件是否从污点源引入了污点数据,若是,则执行步骤3.1.4),否则,在被监控软件执行3.1.2)拦截的程序基本块后,返回步骤3.1.2)拦截被监控软件下一个待执行的程序基本块;
3.1.4)获取3.1.2)拦截的程序基本块中正待分析的第一条指令,并判断该指令是否有效,若有效,则执行步骤3.1.5),否则,被监控软件执行插桩后的程序基本块,之后返回步骤3.1.2)拦截下一个待执行的程序基本块;其中指令有效即为该获取的指令正常可执行,指令无效即该获取的指令为空;
3.1.5)利用二进制解码工具XED解码3.1.4)获取的指令的指令类型,并判断该指令类型是否为检测点,若是,则先利用动态二进制插桩工具在该指令前插桩调用脆弱性检测模块2进行脆弱性检测的代码,再执行步骤3.1.6),否则,直接执行步骤3.1.6);
3.1.6)判断3.1.4)获取的指令是否为C标准库函数内部指令,若是,则返回步骤3.1.4)获取下一条待分析的指令,否则,执行步骤3.1.7);
3.1.7)利用二进制解码工具XED解码3.1.4)获取的指令的操作数类型信息以及操作数长度信息,该操作数类型信息包括寄存器类型、存储器类型以及立即数类型,该操作数长度信息包括字节、字、双字以及四字;
3.1.8)根据3.1.4)获取的指令的语义信息,以及步骤3.1.7)解码关于该指令的操作数类型与长度信息,利用动态二进制插桩工具在该指令前插桩语义信息的污点标记传播逻辑,返回步骤3.1.4)获取下一条待分析的指令。该语义信息的污点标记传播逻辑包括:污点标记合并传播逻辑、污点标记传送传播逻辑以及污点标记清除传播逻辑,其中:
污点标记合并传播逻辑,用于算术运算或逻辑运算指令inst(op_dst,op1,op2,...)的污点标记传播,该合并传播逻辑为tag_dst=tag_dst|tag_src1|tag_src2|...,其中tag_dst为目的操作数op_dst对应的污点标记,tag_src1为第一源操作数op1对应的污点标记,tag_src2为第二源操作数op2对应的污点标记,当源操作数为立即数时,看作该操作数无污点标记;
污点标记传送传播逻辑,用于数据传送指令inst(op_dst,op_src)的污点标记传播,该传送传播逻辑为tag_dst=tag_src,其中tag_dst为目的操作数op_dst对应的污点标记,tag_src为源操作数op_src对应的污点标记,当源操作数为立即数时,看作该操作数无污点标记;
污点标记清除传播逻辑,用于单一源操作数为立即数的数据传送指令、运算得0的算术逻辑运算指令以及返回CPU状态信息的特殊指令的污点标记传播,该清除传播逻辑为其中tag_dst为这些指令的目的操作数对应的污点标记。
步骤3.2,系统调用处理子模块41对被监控软件运行过程中产生在C标准库函数外的内核系统调用进行语义信息的污点标记传播跟踪;对于被监控软件产生在C标准库函数内部的内核系统调用,则不进行污点跟踪。
参照图4,本步骤的具体实现如下:
3.2.1)利用动态二进制插桩工具拦截被监控软件当前正待执行的系统调用,并判断该系统调用是否有效,若有效,则执行步骤3.2.2),否则,跟踪结束;其中系统调用有效即为该拦截的系统调用正常可执行,系统调用无效即该拦截的系统调用为空;
3.2.2)判断3.2.1)拦截的系统调用是否产生于C标准库函数内部,若是,则被监控软件执行该系统调用后,返回步骤3.2.1)拦截下一个待执行的系统调用,否则,执行步骤3.2.3);
3.2.3)在被监控软件进入3.2.1)拦截的系统调用前,利用动态二进制插桩工具获取被监控软件传递给该系统调用的参数;
3.2.4)判断3.2.1)拦截的系统调用是否为检测点,若是,则先调用脆弱性检测模块2进行脆弱性检测,再执行步骤3.2.5),否则,直接执行步骤3.2.5);
3.2.5)在被监控软件退出3.2.1)拦截的系统调用后,利用动态二进制插桩工具获取该系统调用的返回值;
3.2.6)根据3.2.1)拦截的系统调用的语义信息,以及3.2.3)与3.2.5)获取的该系统调用的参数以及返回值信息,调用污点标记模块1,实现对该系统调用语义信息的污点标记传播逻辑;
3.2.7)判断3.2.1)拦截的系统调用是否为污点源,若是,则先调用污点标记模块1,对被监控软件引入的敏感数据设置相应的污点标记,再返回步骤3.2.1)拦截下一个待执行的系统调用,否则,直接返回步骤3.2.1)拦截下一个待执行的系统调用。
步骤3.3,C标准库调用处理子模块42对被监控软件运行过程中产生的C标准库函数调用进行语义信息的污点标记传播跟踪。
参照图5,本步骤的具体实现如下:
3.3.1)利用动态二进制插桩工具拦截被监控软件当前正待执行的C标准库函数调用,并判断该C标准库函数调用是否有效,若有效,则执行步骤3.3.2),否则,跟踪结束;其中C标准库函数调用有效即为该拦截的C标准库函数调用正常可执行,C标准库函数调用无效即该拦截的C标准库函数调用为空;
3.3.2)判断3.3.1)拦截的C标准库函数调用是否产生于其他C标准库函数内部,若是,则被监控软件执行该C标准库函数调用后,返回步骤3.3.1)拦截下一个待执行的C标准库函数调用,否则,执行步骤3.3.3);
3.3.3)在被监控软件进入3.3.1)拦截的C标准库函数前,利用动态二进制插桩工具获取被监控软件传递给该C标准库函数的参数;
3.3.4)判断3.3.1)拦截的C标准库函数是否为检测点,若是,则先调用脆弱性检测模块2进行脆弱性检测,再执行步骤3.3.5),否则,直接执行步骤3.3.5);
3.3.5)在被监控软件退出3.3.1)拦截的C标准库函数后,利用动态二进制插桩工具获取该C标准库函数调用的返回值;
3.3.6)根据3.3.1)拦截的C标准库函数的语义信息,步骤3.3.3)与3.3.5)获得的对该C标准库函数调用的参数和返回值信息,以及对应CPU架构、编译器的函数调用约定,调用污点标记模块1,实现对该C标准库函数调用语义信息的污点标记传播逻辑;
3.3.7)判断3.3.1)拦截的C标准库函数是否为污点源,若是,则先调用污点标记模块1,对被监控软件引入的敏感数据设置相应的污点标记,再返回步骤3.3.1)拦截下一个待执行的C标准库函数调用,否则,直接返回步骤3.3.1)拦截下一个待执行的C标准库函数调用。
步骤4,脆弱性检测模块2检测被监控软件运行过程中,污点数据的传播是否触发了软件脆弱性检测规则,若是,则结束监控,并采取相应的安全响应措施;否则,返回步骤3。
以上描述和实施例,仅为本发明的优选实例,不构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解本发明内容和设计原理后,都可能在基于本发明的原理和结构的情况下,进行形式上和细节上的各种修正和改变,但是这些基于本发明的修正和改变仍在本发明的权利要求的保护范围之内。
Claims (8)
1.一种基于动态污点跟踪的二进制软件脆弱性检测系统,基于动态二进制插桩工具实现,其特征在于,包括:
污点标记模块(1),用于存储被监控软件进程地址空间以及线程通用寄存器中数据的污点标记,并为污点传播分析模块(3)以及API调用处理模块(4)提供污点标记操作功能;
脆弱性检测模块(2),用于检测被监控软件运行过程中是否触发了事先制定的软件脆弱性检测规则,并采取相应的安全响应措施,为污点传播分析模块(3)以及API调用处理模块(4)提供软件脆弱性检测功能;
污点传播分析模块(3),用于实现针对CPU架构基本指令集语义的污点标记传播,并为每个基本指令类型提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的指令类型为检测点,以调用脆弱性检测模块(2)进行脆弱性检测;
API调用处理模块(4),用于实现针对操作系统内核系统调用以及C标准库函数语义的污点标记传播,以提高系统动态污点跟踪的精确度以及效率,并提供接口以根据不同的软件脆弱性检测规则,指定相关的系统调用或C标准库函数为污点源或检测点,以调用污点标记模块(1)对引入的敏感数据设置污点标记或调用脆弱性检测模块(2)进行脆弱性检测。
2.根据权利要求1所述的系统,其特征在于,所述的污点标记模块(1)提供的污点标记操作功能,包括:设置污点标记、清除污点标记以及获取污点标记。
3.根据权利要求1所述的系统,其特征在于,所述的API调用处理接口模块(4),包括:
系统调用处理子模块(41),用于根据内核系统调用的语义信息,传播内核系统调用的污点标记,并为每个内核系统调用提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的系统调用为污点源或检测点,以调用污点标记模块(1)对引入的敏感数据设置污点标记或调用脆弱性检测模块(2)进行脆弱性检测;
C标准库调用处理子模块(42),用于根据C标准库函数的语义信息,传播C标准库函数调用的污点标记,并为每个C标准库函数提供一个接口,这些接口用于根据不同的软件脆弱性检测规则,指定相关的C标准库函数为污点源或检测点,以调用污点标记模块(1)对引入的敏感数据设置污点标记或调用脆弱性检测模块(2)进行脆弱性检测。
4.一种基于动态污点跟踪的二进制软件脆弱性检测方法,其特征在于,包括如下:
1)根据软件脆弱性检测规则,确定检测系统的污点源与检测点:
1a)API调用处理模块(4)指定产生敏感输入的系统调用或C标准库函数为污点源,通过对这些污点源函数的执行进行监控,以调用污点标记模块(1)对被监控软件引入的敏感数据设置污点标记;
1b)污点传播分析模块(3)以及API调用处理模块(4)指定潜在软件脆弱性触发点的指令类型、系统调用以及C标准库函数为检测点,通过对这些检测点相关的指令、系统调用以及C标准库函数的执行进行监控,以调用脆弱性检测模块(2)对被监控软件进行脆弱性检测;
2)污点标记模块(1)分配污点标记存储结构,存储被监控软件进程地址空间以及线程通用寄存器中数据的污点标记;
3)跟踪被监控软件运行过程中指令、系统调用以及C标准库函数的污点标记传播:
3a)污点传播分析模块(3)在被监控软件从污点源引入污点数据后,对被监控软件执行的除C标准库函数外的用户空间指令,进行语义信息的污点标记传播跟踪;对于被监控软件执行的C标准库函数内部的指令,则不进行污点跟踪;
3b)系统调用处理子模块(41)对被监控软件运行过程中产生在C标准库函数外的内核系统调用进行语义信息的污点标记传播跟踪;对于被监控软件产生在C标准库函数内部的内核系统调用,则不进行污点跟踪;
3c)C标准库调用处理子模块(42)对被监控软件运行过程中产生的C标准库函数调用进行语义信息的污点标记传播跟踪;
4)脆弱性检测模块(2)检测被监控软件运行过程中,污点数据的传播是否触发了软件脆弱性检测规则,若是,则结束监控,并采取相应的安全响应措施;否则,返回步骤3)。
5.根据权利要求4所述的方法,其特征在于所述3a)的实现步骤如下:
3a1)将被监控二进制软件分解为一系列的程序基本块,程序基本块是以入口指令或跳转目标指令为起始,以控制转移指令为终点的指令序列,其中控制转移指令具体包括返回类、跳转类以及函数调用类指令;
3a2)利用动态二进制插桩工具拦截被监控软件当前正待执行的程序基本块,并判断该程序基本块是否有效,若有效,则执行步骤3a3),否则,跟踪结束;其中程序基本块有效即为该拦截的程序基本块正常可执行,程序基本块无效即该拦截的程序基本块为空;
3a3)判断被监控软件是否从污点源引入了污点数据,若是,则执行步骤3a4),否则,在被监控软件执行3a2)拦截的程序基本块后,返回步骤3a2)拦截被监控软件下一个待执行的程序基本块;
3a4)获取3a2)拦截的程序基本块中正待分析的第一条指令,并判断该指令是否有效,若有效,则执行步骤3a5),否则,被监控软件执行插桩后的程序基本块,之后返回步骤3a2)拦截下一个待执行的程序基本块;其中指令有效即为该获取的指令正常可执行,指令无效即该获取的指令为空;
3a5)利用二进制解码工具XED解码3a4)获取的指令的指令类型,并判断该指令类型是否为检测点,若是,则先利用动态二进制插桩工具在该指令前插桩调用脆弱性检测模块(2)进行脆弱性检测的代码,再执行步骤3a6),否则,直接执行步骤3a6);
3a6)判断3a4)获取的指令是否为C标准库函数内部指令,若是,则返回步骤3a4)获取下一条待分析的指令,否则,执行步骤3a7);
3a7)利用二进制解码工具XED解码3a4)获取的指令的操作数类型信息以及操作数长度信息,该操作数类型信息包括寄存器类型、存储器类型以及立即数类型,该操作数长度信息包括字节、字、双字以及四字;
3a8)根据3a4)获取的指令的语义信息,以及步骤3a7)解码关于该指令的操作数类型与长度信息,利用动态二进制插桩工具在该指令前插桩语义信息的污点标记传播逻辑,返回步骤3a4)获取下一条待分析的指令。
6.根据权利要求4所述的方法,其特征在于所述3b)的实现步骤如下:
3b1)利用动态二进制插桩工具拦截被监控软件当前正待执行的系统调用,并判断该系统调用是否有效,若有效,则执行步骤3b2),否则,跟踪结束;其中系统调用有效即为该拦截的系统调用正常可执行,系统调用无效即该拦截的系统调用为空;
3b2)判断3b1)拦截的系统调用是否产生于C标准库函数内部,若是,则被监控软件执行该系统调用后,返回步骤3b1)拦截下一个待执行的系统调用,否则,执行步骤3b3);
3b3)在被监控软件进入3b1)拦截的系统调用前,利用动态二进制插桩工具获取被监控软件传递给该系统调用的参数;
3b4)判断3b1)拦截的系统调用是否为检测点,若是,则先调用脆弱性检测模块(2)进行脆弱性检测,再执行步骤3b5),否则,直接执行步骤3b5);
3b5)在被监控软件退出3b1)拦截的系统调用后,利用动态二进制插桩工具获取该系统调用的返回值;
3b6)根据3b1)拦截的系统调用的语义信息,以及3b3)与3b5)获取的该系统调用的参数以及返回值信息,调用污点标记模块(1),实现对该系统调用语义信息的污点标记传播逻辑;
3b7)判断3b1)拦截的系统调用是否为污点源,若是,则先调用污点标记模块(1),对被监控软件引入的敏感数据设置相应的污点标记,再返回步骤3b1)拦截下一个待执行的系统调用,否则,直接返回步骤3b1)拦截下一个待执行的系统调用。
7.根据权利要求4所述的方法,其特征在于所述3c)的实现步骤如下:
3c1)利用动态二进制插桩工具拦截被监控软件当前正待执行的C标准库函数调用,并判断该C标准库函数调用是否有效,若有效,则执行步骤3c2),否则,跟踪结束;其中C标准库函数调用有效即为该拦截的C标准库函数调用正常可执行,C标准库函数调用无效即该拦截的C标准库函数调用为空;
3c2)判断3c1)拦截的C标准库函数调用是否产生于其他C标准库函数内部,若是,则被监控软件执行该C标准库函数调用后,返回步骤3c1)拦截下一个待执行的C标准库函数调用,否则,执行步骤3c3);
3c3)在被监控软件进入3c1)拦截的C标准库函数前,利用动态二进制插桩工具获取被监控软件传递给该C标准库函数的参数;
3c4)判断3c1)拦截的C标准库函数是否为检测点,若是,则先调用脆弱性检测模块(2)进行脆弱性检测,再执行步骤3c5),否则,直接执行步骤3c5);
3c5)在被监控软件退出3c1)拦截的C标准库函数后,利用动态二进制插桩工具获取该C标准库函数调用的返回值;
3c6)根据3c1)拦截的C标准库函数的语义信息,步骤3c3)与3c5)获得的对该C标准库函数调用的参数和返回值信息,以及对应CPU架构、编译器的函数调用约定,调用污点标记模块(1),实现对该C标准库函数调用语义信息的污点标记传播逻辑;
3c7)判断3c1)拦截的C标准库函数是否为污点源,若是,则先调用污点标记模块(1),对被监控软件引入的敏感数据设置相应的污点标记,再返回步骤3c1)拦截下一个待执行的C标准库函数调用,否则,直接返回步骤3c1)拦截下一个待执行的C标准库函数调用。
8.根据权利要求5所述的方法,其特征在于,步骤3a8)中的指令污点标记传播逻辑,包括:
污点标记合并传播逻辑,用于算术运算或逻辑运算指令inst(op_dst,op1,op2,...)的污点标记传播,该合并传播逻辑为tag_dst=tag_dst|tag_src1|tag_src2|...,其中tag_dst为目的操作数op_dst对应的污点标记,tag_src1为第一源操作数op1对应的污点标记,tag_src2为第二源操作数op2对应的污点标记,当源操作数为立即数时,看作该操作数无污点标记;
污点标记传送传播逻辑,用于数据传送指令inst(op_dst,op_src)的污点标记传播,该传送传播逻辑为tag_dst=tag_src,其中tag_dst为目的操作数op_dst对应的污点标记,tag_src为源操作数op_src对应的污点标记,当源操作数为立即数时,看作该操作数无污点标记;
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910981024.2A CN110727598B (zh) | 2019-10-16 | 2019-10-16 | 基于动态污点跟踪的二进制软件脆弱性检测系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910981024.2A CN110727598B (zh) | 2019-10-16 | 2019-10-16 | 基于动态污点跟踪的二进制软件脆弱性检测系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110727598A true CN110727598A (zh) | 2020-01-24 |
CN110727598B CN110727598B (zh) | 2022-03-04 |
Family
ID=69221343
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910981024.2A Active CN110727598B (zh) | 2019-10-16 | 2019-10-16 | 基于动态污点跟踪的二进制软件脆弱性检测系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110727598B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113176990A (zh) * | 2021-03-25 | 2021-07-27 | 中国人民解放军战略支援部队信息工程大学 | 一种支持数据间关联分析的污点分析框架及方法 |
CN116451228A (zh) * | 2023-04-23 | 2023-07-18 | 北京安普诺信息技术有限公司 | 动态污点追踪方法、装置及相关在线污点传播分析系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120304010A1 (en) * | 2011-05-25 | 2012-11-29 | Microsoft Corporation | Code coverage-based taint perimeter detection |
CN104750602A (zh) * | 2013-12-27 | 2015-07-01 | 阿里巴巴集团控股有限公司 | 一种动态污点数据分析方法及装置 |
CN105808430A (zh) * | 2016-03-03 | 2016-07-27 | 中国科学院软件研究所 | 一种多语义动态污点分析方法 |
CN108846282A (zh) * | 2018-06-04 | 2018-11-20 | 西安电子科技大学 | 基于静态污点分析的安卓应用程序权限泄露漏洞检测方法 |
-
2019
- 2019-10-16 CN CN201910981024.2A patent/CN110727598B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120304010A1 (en) * | 2011-05-25 | 2012-11-29 | Microsoft Corporation | Code coverage-based taint perimeter detection |
CN104750602A (zh) * | 2013-12-27 | 2015-07-01 | 阿里巴巴集团控股有限公司 | 一种动态污点数据分析方法及装置 |
CN105808430A (zh) * | 2016-03-03 | 2016-07-27 | 中国科学院软件研究所 | 一种多语义动态污点分析方法 |
CN108846282A (zh) * | 2018-06-04 | 2018-11-20 | 西安电子科技大学 | 基于静态污点分析的安卓应用程序权限泄露漏洞检测方法 |
Non-Patent Citations (3)
Title |
---|
CHAO FENG: "A Static taint Detection Method for Stack Overflow Vulnerabilities in binaries", 《IEEE》 * |
宋铮: "二进制程序动态污点分析技术研究综述", 《信息网络安全》 * |
王中华: "Android 智能终端安全综述", 《通信学报》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113176990A (zh) * | 2021-03-25 | 2021-07-27 | 中国人民解放军战略支援部队信息工程大学 | 一种支持数据间关联分析的污点分析框架及方法 |
CN113176990B (zh) * | 2021-03-25 | 2022-10-18 | 中国人民解放军战略支援部队信息工程大学 | 一种支持数据间关联分析的污点分析框架及方法 |
CN116451228A (zh) * | 2023-04-23 | 2023-07-18 | 北京安普诺信息技术有限公司 | 动态污点追踪方法、装置及相关在线污点传播分析系统 |
CN116451228B (zh) * | 2023-04-23 | 2023-10-17 | 北京安普诺信息技术有限公司 | 动态污点追踪方法、装置及相关在线污点传播分析系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110727598B (zh) | 2022-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109002721B (zh) | 一种信息安全漏洞的挖掘分析方法 | |
Schwartz et al. | All you ever wanted to know about dynamic taint analysis and forward symbolic execution (but might have been afraid to ask) | |
EP1870829B1 (en) | Securing software by enforcing data flow integrity | |
US9548986B2 (en) | Sensitive data tracking using dynamic taint analysis | |
US9824214B2 (en) | High performance software vulnerabilities detection system and methods | |
Pawlowski et al. | MARX: Uncovering Class Hierarchies in C++ Programs. | |
CN103995782B (zh) | 一种基于污点不变集的污点分析方法 | |
CN112733150B (zh) | 一种基于脆弱性分析的固件未知漏洞检测方法 | |
CN111695119A (zh) | 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法 | |
US10599852B2 (en) | High performance software vulnerabilities detection system and methods | |
US8510604B2 (en) | Static data race detection and analysis | |
Zhang et al. | Static program analysis assisted dynamic taint tracking for software vulnerability discovery | |
CN110727598B (zh) | 基于动态污点跟踪的二进制软件脆弱性检测系统及方法 | |
Kirsch et al. | PwIN–Pwning Intel piN: Why DBI is unsuitable for security applications | |
Moffie et al. | Hunting trojan horses | |
Mallissery et al. | Pervasive micro information flow tracking | |
Li et al. | Natidroid: Cross-language android permission specification | |
Mallissery et al. | Identification of data propagation paths for efficient dynamic information flow tracking | |
Tang et al. | Dynamic taint analysis for vulnerability exploits detection | |
Galea et al. | SUDUTA: Script UAF Detection Using Taint Analysis | |
Kleidermacher | Integrating static analysis into a secure software development process | |
Situ et al. | Automatic detection and repair recommendation for missing checks | |
Ashouri et al. | Hybrid taint flow analysis in Scala | |
Shudrak | WinHeap explorer: Efficient and transparent heap-based bug detection in machine code | |
Braunsdorf et al. | Compiler-based attack origin tracking with dynamic taint analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |