CN107291617B - 一种基于隐式污点传播的漏洞分析方法 - Google Patents
一种基于隐式污点传播的漏洞分析方法 Download PDFInfo
- Publication number
- CN107291617B CN107291617B CN201710451044.XA CN201710451044A CN107291617B CN 107291617 B CN107291617 B CN 107291617B CN 201710451044 A CN201710451044 A CN 201710451044A CN 107291617 B CN107291617 B CN 107291617B
- Authority
- CN
- China
- Prior art keywords
- program
- taint
- instruction
- backtracking
- propagation
- 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.)
- Active
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/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于隐式污点传播的漏洞分析方法,其步骤为:提取待分析程序的控制流图;计算上述控制流图中每一条指令的前后必经节点的控制依赖关系;启动上述程序并监控该程序执行的每一条指令;将监控到的该程序调用的读数据操作函数的返回值加入到污点记录中;追踪程序执行的指令,计算正向污点传播过程,直到程序出现异常或中止分析过程;如果仅有计算正向污点传播过程得到的显式污点传播路径,则从程序中存在的控制流劫持点为起点开始逆向回溯,若出现回溯中断,则采用隐式污点传播,使回溯过程能够继续进行。
Description
技术领域
本发明涉及网络安全技术领域,尤其涉及一种基于隐式污点传播的漏洞分析方法。
背景技术
当前软件漏洞分析主要采用污点传播分析方法,但传统的污点传播通常针对于数据依赖进行分析,对于文件类漏洞分析效果较好,但无法追踪Java Script等脚本引发的浏览器漏洞,其原因是此类脚本程序通常采用解析执行,在程序逻辑上表现为输入数据产生控制依赖影响程序执行的隐式污点传播过程。因此,提高针对控制依赖的隐式污点传播分析能力十分必要。
当前基于显式污点传播的分析技术,通常使用如下几种方法:
1、拦截接收外部输入数据的函数,当数据被读入到系统中时,给数据所在的内存控件打上污点标记。
目前的显式污点传播分析方法,主要拦截操作系统中读取文件、接收网络数据、读取注册表等函数,当函数返回时,其返回值中的缓冲区即为读取到的数据,可将该缓冲区数据标记为污点。
2、拦截程序执行的每一条指令,追踪污点数据使用情况。
监控系统的执行指令主要方式是使用调试器附加到目标进程上,或者使用虚拟机从虚拟CPU层面监控程序执行的每一条指令,分析指令的操作数,如果操作数引用了污点数据,则将计算结果也标记为污点,依该规则迭代,直到程序执行完成或用户停止该分析过程。
现有软件漏洞分析中的污点传播分析方法代表性工作包括BitBlaze系统、Panda平台、DECAF平台等,这些系统主要针对于数据依赖产生的显式污点传播实现。当前浏览器大量使用Java Script技术,漏洞攻击代码使用Java Script控制内存布局、覆盖控制流转移地址,这些操作都通过脚本解析引擎对输入的脚本字符串进行解析实现,输入的脚本内容并不与程序产生直接的数据依赖关系,现有漏洞分析方法基于显式污点传播实现,只根据指令和输入数据之间的数据依赖关系展开分析,当分析脚本类漏洞时,会产生分析过程中止的情况,无法达到分析效果。
发明内容
本发明的目的是提供一种基于隐式污点传播的漏洞分析方法,通过该分析方法能够快速确定是哪些输入数据影响了漏洞的控制流劫持点,实现对脚本类程序引发的漏洞分析中控制依赖引起的污点传播过程的监控。
针对上述目的,本发明所采用的技术方案为:
一种基于隐式污点传播的漏洞分析方法,其步骤包括:
1)提取待分析程序的控制流图(CFG,Control Flow Graph);
2)计算上述控制流图中每一条指令的前后必经节点的控制依赖关系;
3)启动上述程序并监控该程序执行的每一条指令;
4)将监控到的该程序调用的读数据操作函数的返回值加入到污点记录中;
5)追踪程序执行的指令,计算正向污点传播过程,直到程序出现异常或中止分析过程;
6)如果仅有步骤5)中计算得到的显式污点传播路径,则从程序中存在的控制流劫持点为起点开始逆向回溯,若出现回溯中断,则采用隐式污点传播;所述隐式污点传播包括以下步骤:
a)确定污点在逆向回溯传播过程中出现回溯中断的指令I;
b)分析步骤2)中得到的控制依赖关系,寻找指令I所依赖的指令J;
c)将指令J作为新起点加入到回溯路径中;
d)由指令J开始继续向前回溯,直到到达原始的污点数据。
进一步地,该方法步骤还包括:当逆向回溯到达原始的污点数据时输出污点回溯结果。
更进一步地,所述污点回溯结果是指回溯得到的指令序列、回溯到达的原始输入数据。
进一步地,步骤1)中使用IDA Pro对待分析程序进行静态分析得到该程序的控制流图。
进一步地,步骤3)中所述程序在操作系统中使用调试工具或插装工具启动和监控,且启动时拦截该程序的文件读写、网络接收、注册表查询函数。
进一步地,步骤4)中所述污点是指监控到的该程序调用的文件读写、网络接收、注册表查询函数的返回值。
进一步地,步骤5)中所述正向污点传播是指分析每一条指令的源操作数和目的操作数,根据现有的显式污点传播规则进行计算,直至程序执行出现异常或中止分析过程;其中所述中止分析过程是指研究人员根据自身经验认为漏洞已经触发进而中止分析的过程。
进一步地,步骤6)中所述控制流劫持点是指程序发生异常时控制流转移的指令,且被劫持的目标地址通常是攻击者通过构造输入数据写入。
进一步地,步骤6)还包括:当通过隐式污点传播连接断开的传播过程,连接上的指令在显式污点传播路径上时,则以该指令为起点继续逆向回溯。
本发明的有益效果在于:本发明提供一种基于隐式污点传播的漏洞分析方法,通过将静态分析和动态分析结果相结合,实现对漏洞分析中控制依赖引起的污点传播过程的监控,进而解决动态污点传播方法针对脚本类程序引发的漏洞分析能力不足的问题,达到污点传播过程中对漏洞完整、准确分析的目的,且相对于现有的基于显式污点传播的漏洞分析方法,具有更高的准确度和更好的分析能力。
附图说明
图1为本发明一种基于隐式污点传播的漏洞分析方法流程图。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
本发明提供一种基于隐式污点传播的漏洞分析方法,其流程图如图1所示,包括以下步骤:
1)使用IDA Pro对待分析程序进行静态分析得到该程序的控制流图,计算该控制流图中每一条指令的前后必经节点的控制依赖关系,并将该控制依赖关系存入磁盘文件中;其中该文件格式可由用户自定义,能够准确描述控制依赖关系即可。
本发明采用编写IDA Pro插件的方式,从软件可执行程序的入口点开始,首先构造程序的控制流图,构造控制流图已有很成熟的算法,此处不再赘述。通过分析程序的控制流图,计算其中每一条指令的前后必经节点,根据前后必经节点的关系,确定每一条指令的控制依赖范围,其中前后必经节点的计算方法和控制依赖范围计算也基于现有的成熟算法实现。在计算得到控制依赖范围后,将节点的控制依赖关系保存到磁盘文件中。
2)启动上述程序并监控该程序执行的每一条指令;其中所述启动和监控该程序可以通过Ollydbg、Windbg等调试工具或PIN等插装工具实现。
本发明采用编写Windbg插件的方式,通过Windbg启动程序,且启动的同时拦截该程序的文件读写、网络接收、注册表查询函数,并监控程序的API调用和运行指令。
3)将监控到的该程序调用的读数据操作函数(如ReadFile、MapViewOfFile等)的返回值加入到污点记录中,即输入到程序的数据被标记为污点。
所述污点是指监控到的该程序调用的文件读写、网络接收、注册表查询函数的返回值。例如,拦截系统中的ReadFile、recv等输入函数,获取函数的返回值和传出参数,通常情况下,这些函数的返回值和传出参数标识了系统从外部得到的额外数据,将该部分数据作为污点进行标记并加入到污点记录中。
4)追踪程序执行的指令,根据现有的显式污点传播规则计算正向污点传播过程,直到程序出现异常或中止分析过程。其中所述中止分析过程是指研究人员根据自身经验认为漏洞已经触发进而中止分析的过程。
所述正向污点传播是指分析每一条指令的源操作数和目的操作数,根据现有的显式污点传播规则进行计算,直至程序执行出现异常或中止分析过程。例如,分析指令的操作数,如果操作数引用了污点,那么该指令作为污点传播指令被记录,指令执行后影响的寄存器、内存也被标记为污点。
5)针对脚本引发的漏洞,如果仅有步骤4)中根据现有的显式污点传播规则计算得到的显式污点传播路径,则从程序中存在的控制流劫持点为起点开始逆向回溯,若出现回溯中断的情况,即尚未回溯到原始的污点数据,但指令的操作数和前面的污点数据不发生关联(即指令不在显式污点传播路径上)。此时采用隐式污点传播分析方法分析漏洞,使回溯过程能够继续进行。
所述控制流劫持点是指程序发生异常时控制流转移的指令,被劫持的目标地址通常是攻击者通过构造输入数据写入。例如栈溢出漏洞,函数返回的ret指令为其控制流劫持点,则从ret指令开始逆向回溯,首先能够看到的是ret引用了堆栈中的返回地址,根据返回地址向上寻找修改了堆栈中内容的指令。
当通过隐式污点传播连接断开的传播过程,连接上的指令在显示污点传播路径上时,则以该指令为起点继续逆向回溯;当指令不在显示污点传播路径上(即出现回溯中断)时采取如下步骤:
a)确定污点在逆向回溯传播过程中不在污点传播路径上的指令,即污点逆向回溯过程中当前状态下的最后一条指令,将其设为I;
b)分析步骤1)中得到的控制依赖关系,寻找指令I所依赖的指令,将其设为J;
c)由于指令J直接影响到了指令I的赋值,将指令J作为新起点加入到逆向回溯路径中;
d)由指令J开始继续向前回溯,直到到达原始的污点数据,若出现指令不在显示污点传播路径上时则继续执行步骤a)至步骤d)。
6)当逆向回溯到达原始的污点数据时输出污点回溯结果。所述污点回溯结果是指回溯得到的指令序列、回溯到达的原始输入数据。
下面为一按照本发明方法各步骤进行漏洞分析的实施例的具体过程:
假设存在如下的脚本代码:
假设在该脚本代码中,对象B引发了程序漏洞。在程序中实际上是由于‘CREATE_OBJ’引发了对象B的创建,在显式污点传播中,输入数据的显式污点正向传播到varInput=‘CREATE_OBJ’指令为止。在显示污点传播分析中,将以控制流劫持点为起点,根据现有的显式污点传播规则,逆向计算污点传播的过程实施回溯,控制流劫持点逆向回溯到达objectB=new object()指令会中止。此时,通过采用隐式污点传播分析方法,可以知道object B=new object()指令实际控制依赖于varInput=‘CREATE_OBJ’指令,此时,回溯路径成功接上,可继续向前回溯一直达到最初输入的Java Script脚本。
本发明提出的基于隐式污点传播的漏洞分析方法,对于本领域的技术人员而言,可以根据需要自己配置所要监控的接口,从而全面分析漏洞机理。
以上实施仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (9)
1.一种基于隐式污点传播的漏洞分析方法,其步骤包括:
1)提取待分析程序的控制流图;
2)计算上述控制流图中每一条指令的前后必经节点的控制依赖关系;
3)启动上述程序并监控该程序执行的每一条指令;
4)将监控到的该程序调用的读数据操作函数的返回值加入到污点记录中;
5)追踪程序执行的指令,计算正向污点传播过程,直到程序出现异常或中止分析过程;正向污点传播过程是指分析每一条指令的源操作数和目的操作数,根据现有的显式污点传播规则计算得到显式污点传播路径,直至程序执行出现异常或中止分析过程;
6)如果仅有步骤5)中计算得到的显式污点传播路径,则从程序中存在的控制流劫持点为起点开始逆向回溯,若出现回溯中断,则采用隐式污点传播;所述隐式污点传播包括以下步骤:
a)确定污点在逆向回溯传播过程中出现回溯中断的指令I;
b)分析步骤2)中得到的控制依赖关系,寻找指令I所依赖的指令J;
c)将指令J作为新起点加入到回溯路径中;
d)由指令J开始继续向前回溯,直到到达原始的污点数据。
2.如权利要求1所述的方法,其特征在于,该方法步骤还包括:当逆向回溯到达原始的污点数据时输出污点回溯结果。
3.如权利要求2所述的方法,其特征在于,所述污点回溯结果是指回溯得到的指令序列、回溯到达的原始输入数据。
4.如权利要求1所述的方法,其特征在于,步骤1)中使用IDA Pro对待分析程序进行静态分析得到该程序的控制流图。
5.如权利要求1所述的方法,其特征在于,步骤3)中所述程序在操作系统中使用调试工具或插装工具启动和监控,且启动时拦截该程序的文件读写、网络接收、注册表查询函数。
6.如权利要求1所述的方法,其特征在于,步骤4)中所述污点是指监控到的该程序调用的文件读写、网络接收、注册表查询函数的返回值。
7.如权利要求1所述的方法,其特征在于,步骤5)中所述中止分析过程是指研究人员根据自身经验认为漏洞已经触发进而中止分析的过程。
8.如权利要求1所述的方法,其特征在于,步骤6)中所述控制流劫持点是指程序发生异常时控制流转移的指令,且被劫持的目标地址是攻击者通过构造输入数据写入。
9.如权利要求1所述的方法,其特征在于,步骤6)还包括:当通过隐式污点传播连接断开的传播过程,连接上的指令在显式污点传播路径上时,则以该指令为起点继续逆向回溯。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611216511 | 2016-12-26 | ||
CN2016112165112 | 2016-12-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107291617A CN107291617A (zh) | 2017-10-24 |
CN107291617B true CN107291617B (zh) | 2020-08-11 |
Family
ID=60096787
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710451044.XA Active CN107291617B (zh) | 2016-12-26 | 2017-06-15 | 一种基于隐式污点传播的漏洞分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107291617B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110661804B (zh) * | 2019-09-29 | 2021-12-31 | 南京邮电大学 | 一种针对防火墙的污点分析漏洞检测方法 |
CN111240991B (zh) * | 2020-01-20 | 2023-03-14 | 重庆富民银行股份有限公司 | 一种抗隐式污点传播的动态污点检测方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101616151A (zh) * | 2009-07-31 | 2009-12-30 | 中国科学院软件研究所 | 一种自动化的网络攻击特征生成方法 |
CN102622536A (zh) * | 2011-01-26 | 2012-08-01 | 中国科学院软件研究所 | 一种恶意代码捕获方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8893280B2 (en) * | 2009-12-15 | 2014-11-18 | Intel Corporation | Sensitive data tracking using dynamic taint analysis |
-
2017
- 2017-06-15 CN CN201710451044.XA patent/CN107291617B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101616151A (zh) * | 2009-07-31 | 2009-12-30 | 中国科学院软件研究所 | 一种自动化的网络攻击特征生成方法 |
CN102622536A (zh) * | 2011-01-26 | 2012-08-01 | 中国科学院软件研究所 | 一种恶意代码捕获方法 |
Non-Patent Citations (1)
Title |
---|
污点分析中的隐式污染检测方法;刘杰 等;《计算机工程》;20121231;第38卷(第23期);28-32 * |
Also Published As
Publication number | Publication date |
---|---|
CN107291617A (zh) | 2017-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101519845B1 (ko) | 안티디버깅 방법 | |
US10089126B2 (en) | Function exit instrumentation for tail-call optimized code | |
US8806447B2 (en) | Step-type operation processing during debugging by machine instruction stepping concurrent with setting breakpoints | |
US8843899B2 (en) | Implementing a step-type operation during debugging of code using internal breakpoints | |
US9785536B2 (en) | Code injection for conditional breakpoints | |
US9900324B1 (en) | System to discover and analyze evasive malware | |
US20140365833A1 (en) | Capturing trace information using annotated trace output | |
US20140033178A1 (en) | Method and apparatus for reverse debugging source code using causal analysis | |
KR102013657B1 (ko) | 연관된 다중 파일 정적 분석 장치 | |
US10129275B2 (en) | Information processing system and information processing method | |
CN107291617B (zh) | 一种基于隐式污点传播的漏洞分析方法 | |
US8826235B2 (en) | Step granularity selection in a software debugger | |
US10997055B2 (en) | Methods, circuits, apparatus, systems and associated software modules for evaluating code behavior | |
US9626281B2 (en) | Call stack display with program flow indication | |
KR100781554B1 (ko) | 실시간 컴퓨터 프로그램의 디버깅 방지 방법 및 그 기록매체 | |
US9846631B2 (en) | Methods, circuits, apparatus, systems and associated software modules for evaluating code behavior | |
US10713145B2 (en) | Automated debugging with combined static and dynamic analysis | |
KR102090229B1 (ko) | 바이너리에 대한 보안 취약점 및 그 원인 위치의 식별 방법 및 그 장치 | |
Weng et al. | Argus: Debugging performance issues in modern desktop applications with annotated causal tracing | |
US20220335135A1 (en) | Vulnerability analysis and reporting for embedded systems | |
US10650148B2 (en) | Determine protective measure for data that meets criteria | |
KR101947737B1 (ko) | 명시적 및 암시적 정보 흐름 추적 방법 및 그 장치 | |
US10296432B2 (en) | Systems and methods for invasive debug of a processor without processor execution of instructions | |
KR102421394B1 (ko) | 하드웨어와 소프트웨어 기반 트레이싱을 이용한 악성코드 탐지 장치 및 방법 | |
US9389866B2 (en) | Computer program instruction 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 |