CN103729295A - 一种污点传播路径分析方法 - Google Patents
一种污点传播路径分析方法 Download PDFInfo
- Publication number
- CN103729295A CN103729295A CN201310750615.1A CN201310750615A CN103729295A CN 103729295 A CN103729295 A CN 103729295A CN 201310750615 A CN201310750615 A CN 201310750615A CN 103729295 A CN103729295 A CN 103729295A
- Authority
- CN
- China
- Prior art keywords
- dependence
- fundamental block
- variable
- phi
- analysis
- 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.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种污点传播路径分析方法,解决的技术问题是利用程序依赖性来进行分析污点传播路径。步骤一、利用LLVM编译器架构分析程序,将源代码转换为中间语言IR表示,LLVM的IR表示是基于静态单一赋值形式;步骤二、在步骤一得到的IR表示上进行一个基本块内的变量数据依赖分析;步骤三:在步骤一得到的IR表示上进行基本块之间的控制依赖分析;步骤四:处理基本块聚合处的PHI节点的依赖:在静态单一赋值形式表示中,PHI函数被放在基本块聚合处,用于选择变量的在各个分支的不同实例,根据步骤二、步骤三的分析结果,求出PHI函数左边变量的依赖关系,将各基本块到基本块聚合处的依赖联系起来,从而分析出污点传播路径。
Description
技术领域
本发明涉及一种污点传播路径分析方法,属于软件检测技术领域。
背景技术
污点传播分析起源于Perl的Tainting机制。目前应用于软件缺陷检测、基于类型的漏洞特征的自动生成、软件测试等方面。通常将外部输入的不可信数据标记为污点,污点传播分析是跟踪和预防污点不正确使用的过程,发现污点传播路径对发现潜在脆弱性意义重大。
污点分析将外部流入程序的数据标记为污点,然后跟踪污点数据在程序中的传播过程。其总体思想:1)标记污点数据源;2)记录污点数据的传播;3)污点数据使用告警,当监测到污点数据流入与安全相关的敏感函数内,标记此处为潜在的漏洞存在点,如strcpy函数。
现有的污点传播分析技术主要有静态和动态方法,静态方法是在程序的控制流图的基础上对信息流进行污点传播的分析,现有的在信息流上进行的污点分析的研究,有时候会导致污点变量的误判;动态方法是动态的运行被测程序,一次只能分析一条数据流,通常借助插装技术,但是这些额外的检测操作会一定程序的影响程序的性能。本文将致力于污点传播路径的分析,根据污点传播的特点,可以得知污点在程序中的传播就是某一个特殊变量在程序中的传播,实际上为某一变量值通过程序依赖进行污点属性的传递,主要是基于数据依赖、控制依赖和PHI节点的依赖进行污点传播的,通过程序依赖完成了污点的传播过程,从而分析了污点传播路径。通过分析所得路径,当路径中某处安全敏感的函数引用到污点数据,我们就能够发现到一个潜在的危险点,对软件漏洞的挖掘有重要的意义。
然而现有的污点分析技术对污点传播路径方面的研究比较少,较多的关注在污点的发现上。动态污点分析方面已有的研究都需要借助插装技术,这样需要耗费一定的性能,同时需要特定的输入来驱动程序的运行,对于构造特定的输入需要耗费一定的时间。
发明内容
针对上述现有技术,本发明要解决的技术问题是利用程序依赖性来进行分析污点传播路径。
为了解决上述技术问题,本发明采用如下技术方案:
一种污点传播路径分析方法,包括如下步骤:
步骤一、利用LLVM编译器架构分析程序,将源代码转换为中间语言IR表示,LLVM的IR表示是基于静态单一赋值形式;
步骤二、在步骤一得到的IR表示上进行一个基本块内的变量数据依赖分析;
步骤三:在步骤一得到的IR表示上进行基本块之间的控制依赖分析;
步骤四:处理基本块聚合处的PHI节点的依赖:在静态单一赋值形式表示中,PHI函数被放在基本块聚合处,用于选择变量的在各个分支的不同实例,根据步骤二、步骤三的分析结果,求出PHI函数左边变量的依赖关系,将各基本块到基本块聚合处的依赖联系起来,从而分析出污点传播路径。
与现有技术相比,本发明具有以下有益效果:
1)采用的中间形式是基于静态单一赋值形式(SSA),保证了每个被使用的变量都有唯一的定义,因此数据流分析可以更加简单,同时对一个变量的不相关的多次使用,在SSA中会转变成对不同变量的使用,能消除冗余的依赖关系;
2)本发明对比了基本块的控制依赖的定义和后支配边界的定义,两者定义一样,故采用后支配边界来计算基本块间的控制依赖关系,消除了错误的控制依赖关系;
3)本发明将基本块间的控制依赖关系利用分支控制变量转化为变量间的依赖关系,体现了污点是变量的特性;
4)本发明增加了PHI节点的依赖分析,从而将污点变量依赖传递过程从条件分支跳转处到基本块聚合处结合为一个整体,即贯通了整个污点变量从源头到引用处传递过程。
附图说明
图1为本发明源代码转换为中间语言IR表示;
图2为本发明依赖性关系示意图。
具体实施方式
下面将结合附图及具体实施方式对本发明做进一步的描述。
首先对本发明中的术语进行阐述:
静态单一赋值:Static Single-Assignment,这是一种中间表示形式。之所以称之为单赋值,是因为每个名字在SSA中仅被赋值一次。
后支配:我们说基本块Y后支配基本块X,如果每条从X到程序Exit处的路径P包含Y,记为Y PDom X。即Y是X的后必经节点。
后支配边界(Post dominance frontier):DF(Y)={X|Z是X的后继节点使得Y后支配Z且Y不后支配节点X,即Z∈succeed(X)使得Y PDom Z且Y┐(PDom)X}.
分支控制变量:假设基本块B包含了变量v的定义或者使用语句,B的后必经节点边界集合为DF(B).对于任意一个Bi∈DF(B),若Bi的最后一条语句是条件判断语句P,判断条件为Ci,那么v的分支控制变量为Ci构成的集合,BCV(v)={Ci|i∈N}。
基本块:是指程序顺序执行的语句序列,其中只有一个入口和一个出口,序列入口就是其中的第—个语句,序列出口是下一入口语句(下一入口语句),序列或遇到条件分支跳转语句(包括该语句)停止,或遇到程序结束语句停止。
PHI节点:在SSA表示中,PHI函数所在基本块,PHI函数被放在基本块的聚合处,用来选择同一变量的不同实例。
数据依赖:通过简单的算术运算及赋值表达式实现。
控制依赖:通过条件分支跳转语句实现。
PHI节点的依赖:包括PHI节点的数据依赖和控制依赖。
LLVM(Low Level Virtual Machine):是一套编译器的基础设施,目前编译器前端支持C、C++等语言。
中间语言表示IR:LLVM的组成部分,一种中间语言表示形式。
程序依赖:包括数据依赖、控制依赖和PHI节点的依赖。
本发明所述的一种污点传播路径分析的方法,包括如下部分:
1、源代码转换为LLVM的中间语言IR表示
本部分是将源码转换为LLVM中间表示IR,将下述源码生成如图1表示的中间表示。分析程序以编译器架构作为实验平台,这里采用了LLVM编译器,选它最重要的原因是它有表现形式很好的中间语言IR。
其中源代码如下:
LLVM(Low Level Virtual Machine)是一套编译器的基础设施,目前编译器前端支持C、C++等语言。LLVM由三部分组成:中间表示IR;用于分析、优化等工作的集成库;及建立在集成库基础上的工具。IR是一个有着明确的语义的语言,而且是基于SSA形式的,有利于做信息流的分析,比如每个虚拟寄存器都在具体的一条指令中写出,寄存器的使用都在定义的范围之内;LLVM指令集中包含了PHI指令。SSA格式提供了一个压缩的DEF-USE图,这能简化很多数据流优化,而且LLVM对每个函数在其表示中都明确的生成控制流图(CFG)(图2),本发明在利用LLVM进行程序分析的过程中,此图提供逻辑上的帮助,并不会显式的表示,一个函数是一系列的基本块,而每个基本块都是以终止指令结尾的LLVM指令序列,每个终止指令都指明其后继块。
2、对IR表示进行数据依赖分析
本部分主要对于一个基本块内的顺序执行语句做数据依赖分析。变量x的相关信息(如污点属性)直接通过赋值或者算术运算传递下去。做数据依赖,我们主要关注的LLVM中间表示里的指令有这几类:二元操作指令(代数运算、移位运算、逻辑运算)、类型转换指令、比较指令、PHI指令。除去PHI指令,其他三类数据依赖都是左边依赖于右边各个操作数。如图2所示,本文例举基本块A内的依赖性关系。假设变量b为外部输入污点数据,那么通过语句5,6的执行,那么变量c和e也是污点数据,其传播路径是4->5->6。对于图1源码的IR表示,变量%e数据依赖于%mul,而%mul依赖于%1和%2,回溯至%2依赖于外部输入数据%b,因此b的污点属性经过一系列的算术运算和赋值语句传递到变量e。
3.对IR表示进行控制依赖分析
本部分基于后支配边界,借助了LLVM里PostDominanceFrontier类来实现,找到每个基本块的后支配边界,从而找到基本块内包含某个变量v的定义或者使用语句的分支控制变量BCV(v)。控制依赖是在基本块之间进行分析,即变量x的相关信息通过包含x的条件表达式间接传递给变量y。
基本块Y如果控制依赖于基本块X满足下面条件:
1)存在从X到Y的一条路径P:X->Z1->Z2->…->Zn->Y,Y所有的Zi的后必经节点;
2)Y不是X的后必经节点。
根据控制依赖和后必经边界的定义,找寻基本块之间的控制依赖关系转换为求基本块的后必经边界。我们所说的污点传播是污点变量的传播,因此控制依赖也需要变换为包含在条件语句里的变量间的控制依赖关系。
本实施例中,针对图2的控制流图,可以求出每个基本块的后必经边界,分别如下:
DF(A)={}
DF(B)={A}
DF(C)={A}
DF(D)={}
从图1可以知道基本块B、C有变量x的定义及使用,根据分支控制变量的定义,可知BCV(x)={e>c}。
4、PHI节点的依赖性
PHI函数定义为,
φ(v)=(v1,b1,v2,b2,v3,b3,…)
其中,v,vi表示变量,v位于PHI函数所在基本块内定义使用的变量,bi表示基本块。因为PHI函数包含了数据依赖和控制依赖两部分,这里需要对其进行单独处理。
Dependence(v)=∪(DataDep(vi)∩BCV(bi))∪BCV(b)
其中,b为函数所在的基本块。
针对示例,这里:
φ(%7)=(%5,B,%6,C)
Dependence(x)=Dependence(%7)=
结合步骤2的数据依赖关系和步骤3的控制依赖关系,可知变量x控制依赖于e和c,从而最终依赖于外部输入数据b,这样就可以得出污点数据的传递路径4->5->6->7->13。
Claims (1)
1.一种污点传播路径分析方法,其特征在于,包括如下步骤:
步骤一、利用LLVM编译器架构分析程序,将源代码转换为中间语言IR表示,LLVM的IR表示是基于静态单一赋值形式;
步骤二、在步骤一得到的IR表示上进行一个基本块内的变量数据依赖分析;
步骤三:在步骤一得到的IR表示上进行基本块之间的控制依赖分析;
步骤四:处理基本块聚合处的PHI节点的依赖:在静态单一赋值形式表示中,PHI函数被放在基本块聚合处,用于选择变量的在各个分支的不同实例,根据步骤二、步骤三的分析结果,求出PHI函数左边变量的依赖关系,将各基本块到基本块聚合处的依赖联系起来,从而分析出污点传播路径。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310750615.1A CN103729295A (zh) | 2013-12-31 | 2013-12-31 | 一种污点传播路径分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310750615.1A CN103729295A (zh) | 2013-12-31 | 2013-12-31 | 一种污点传播路径分析方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103729295A true CN103729295A (zh) | 2014-04-16 |
Family
ID=50453376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310750615.1A Pending CN103729295A (zh) | 2013-12-31 | 2013-12-31 | 一种污点传播路径分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103729295A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107545174A (zh) * | 2017-08-22 | 2018-01-05 | 武汉大学 | 一种基于llvm的抵御控制流劫持的系统和方法 |
CN109002712A (zh) * | 2018-06-22 | 2018-12-14 | 北京大学 | 一种基于值依赖图的污染数据分析方法、系统与电子设备 |
CN110209397A (zh) * | 2019-05-13 | 2019-09-06 | 矩阵元技术(深圳)有限公司 | 一种数据处理方法、装置及系统 |
CN111813675A (zh) * | 2020-07-08 | 2020-10-23 | 北京嘀嘀无限科技发展有限公司 | Ssa结构解析方法、装置、电子设备和存储介质 |
CN111966718A (zh) * | 2020-09-09 | 2020-11-20 | 支付宝(杭州)信息技术有限公司 | 用于应用系统的数据传播追踪的系统及方法 |
CN112528240A (zh) * | 2020-12-02 | 2021-03-19 | 上海交通大学 | 面向密码代码的自动化程序敏感数据保护方法 |
CN112967059A (zh) * | 2021-05-18 | 2021-06-15 | 支付宝(杭州)信息技术有限公司 | 一种测试资损监控系统的变异智能合约生成方法和系统 |
CN113254945A (zh) * | 2021-06-08 | 2021-08-13 | 中国人民解放军国防科技大学 | 基于污点分析的web漏洞静态检测方法、系统和介质 |
CN114389978A (zh) * | 2021-12-21 | 2022-04-22 | 中国人民解放军32802部队 | 一种基于静态污点分析的网络协议侧信道检测方法和系统 |
CN114546561A (zh) * | 2022-02-22 | 2022-05-27 | 湖南泛联新安信息科技有限公司 | 一种程序静态分析结果中最佳修复点的展示方法 |
CN115604026A (zh) * | 2022-11-24 | 2023-01-13 | 清华大学(Cn) | 针对tcp/ip分层网络模型的交互式安全性分析方法及系统 |
CN116431474A (zh) * | 2023-03-03 | 2023-07-14 | 北京交通大学 | 一种基于静态分析的程序源码的安全配置项约束提取方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101650651A (zh) * | 2009-09-17 | 2010-02-17 | 浙江大学 | 一种源代码级别程序结构的可视化方法 |
CN102054149A (zh) * | 2009-11-06 | 2011-05-11 | 中国科学院研究生院 | 一种恶意代码行为特征提取方法 |
CN102081719A (zh) * | 2009-12-01 | 2011-06-01 | 王伟 | 基于动态污染传播的软件安全测试系统及方法 |
US20110145918A1 (en) * | 2009-12-15 | 2011-06-16 | Jaeyeon Jung | Sensitive data tracking using dynamic taint analysis |
CN103177210A (zh) * | 2013-04-02 | 2013-06-26 | 中国人民大学 | 一种在Android中植入动态污点分析模块的方法 |
JP2013149134A (ja) * | 2012-01-20 | 2013-08-01 | Nec Corp | ソースコードの静的解析装置、システム、方法、及びそのためのプログラム |
-
2013
- 2013-12-31 CN CN201310750615.1A patent/CN103729295A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101650651A (zh) * | 2009-09-17 | 2010-02-17 | 浙江大学 | 一种源代码级别程序结构的可视化方法 |
CN102054149A (zh) * | 2009-11-06 | 2011-05-11 | 中国科学院研究生院 | 一种恶意代码行为特征提取方法 |
CN102081719A (zh) * | 2009-12-01 | 2011-06-01 | 王伟 | 基于动态污染传播的软件安全测试系统及方法 |
US20110145918A1 (en) * | 2009-12-15 | 2011-06-16 | Jaeyeon Jung | Sensitive data tracking using dynamic taint analysis |
JP2013149134A (ja) * | 2012-01-20 | 2013-08-01 | Nec Corp | ソースコードの静的解析装置、システム、方法、及びそのためのプログラム |
CN103177210A (zh) * | 2013-04-02 | 2013-06-26 | 中国人民大学 | 一种在Android中植入动态污点分析模块的方法 |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107545174B (zh) * | 2017-08-22 | 2020-03-10 | 武汉大学 | 一种基于llvm的抵御控制流劫持的系统和方法 |
CN107545174A (zh) * | 2017-08-22 | 2018-01-05 | 武汉大学 | 一种基于llvm的抵御控制流劫持的系统和方法 |
CN109002712A (zh) * | 2018-06-22 | 2018-12-14 | 北京大学 | 一种基于值依赖图的污染数据分析方法、系统与电子设备 |
CN109002712B (zh) * | 2018-06-22 | 2020-11-03 | 北京大学 | 一种基于值依赖图的污染数据分析方法、系统与电子设备 |
CN110209397B (zh) * | 2019-05-13 | 2023-09-01 | 矩阵元技术(深圳)有限公司 | 一种数据处理方法、装置及系统 |
CN110209397A (zh) * | 2019-05-13 | 2019-09-06 | 矩阵元技术(深圳)有限公司 | 一种数据处理方法、装置及系统 |
CN111813675A (zh) * | 2020-07-08 | 2020-10-23 | 北京嘀嘀无限科技发展有限公司 | Ssa结构解析方法、装置、电子设备和存储介质 |
CN111966718A (zh) * | 2020-09-09 | 2020-11-20 | 支付宝(杭州)信息技术有限公司 | 用于应用系统的数据传播追踪的系统及方法 |
CN111966718B (zh) * | 2020-09-09 | 2024-03-15 | 支付宝(杭州)信息技术有限公司 | 用于应用系统的数据传播追踪的系统及方法 |
CN112528240A (zh) * | 2020-12-02 | 2021-03-19 | 上海交通大学 | 面向密码代码的自动化程序敏感数据保护方法 |
CN112967059A (zh) * | 2021-05-18 | 2021-06-15 | 支付宝(杭州)信息技术有限公司 | 一种测试资损监控系统的变异智能合约生成方法和系统 |
CN113254945A (zh) * | 2021-06-08 | 2021-08-13 | 中国人民解放军国防科技大学 | 基于污点分析的web漏洞静态检测方法、系统和介质 |
CN114389978A (zh) * | 2021-12-21 | 2022-04-22 | 中国人民解放军32802部队 | 一种基于静态污点分析的网络协议侧信道检测方法和系统 |
CN114389978B (zh) * | 2021-12-21 | 2024-04-02 | 中国人民解放军32802部队 | 一种基于静态污点分析的网络协议侧信道检测方法和系统 |
CN114546561A (zh) * | 2022-02-22 | 2022-05-27 | 湖南泛联新安信息科技有限公司 | 一种程序静态分析结果中最佳修复点的展示方法 |
CN114546561B (zh) * | 2022-02-22 | 2024-05-24 | 湖南泛联新安信息科技有限公司 | 一种程序静态分析结果中最佳修复点的展示方法 |
CN115604026A (zh) * | 2022-11-24 | 2023-01-13 | 清华大学(Cn) | 针对tcp/ip分层网络模型的交互式安全性分析方法及系统 |
CN116431474A (zh) * | 2023-03-03 | 2023-07-14 | 北京交通大学 | 一种基于静态分析的程序源码的安全配置项约束提取方法 |
CN116431474B (zh) * | 2023-03-03 | 2023-09-12 | 北京交通大学 | 一种基于静态分析的程序源码的安全配置项约束提取方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103729295A (zh) | 一种污点传播路径分析方法 | |
JP7201078B2 (ja) | データ引数を動的に識別し、ソースコードを計装するためのシステムと方法 | |
US8527976B2 (en) | System and method for generating error traces for concurrency bugs | |
CN102110048B (zh) | 用于基于框架的应用程序的回归测试选择方法和装置 | |
Lakhotia et al. | An empirical investigation into branch coverage for C programs using CUTE and AUSTIN | |
CN102073588B (zh) | 一种基于代码静态分析的多线程死锁检测方法及系统 | |
CN105912381B (zh) | 一种基于规则库的编译期代码安全检测方法 | |
Hajnal et al. | A demand‐driven approach to slicing legacy COBOL systems | |
US20090193401A1 (en) | Path-sensitive analysis through infeasible-path detection and syntactic language refinement | |
Sung et al. | Modular verification of interrupt-driven software | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测系统 | |
CN103294596A (zh) | 一种基于程序不变量的合约式软件故障预警方法 | |
CN107085533A (zh) | 一种指针修改影响的分析方法和系统 | |
Lin et al. | Recovering fitness gradients for interprocedural Boolean flags in search-based testing | |
Hubert et al. | Separation Analysis for Weakest Precondition-based Verification | |
Nam et al. | A bug finder refined by a large set of open-source projects | |
Krinke | Slicing, chopping, and path conditions with barriers | |
CN101710303A (zh) | 基于流敏感上下文敏感指向图的内存泄漏检测方法 | |
Hermanns et al. | Hybrid debugging of java programs | |
Kallwies et al. | Symbolic runtime verification for monitoring under uncertainties and assumptions | |
Ortin et al. | Cnerator: A Python application for the controlled stochastic generation of standard C source code | |
Bartocci et al. | Mining hyperproperties using temporal logics | |
CN106021401A (zh) | 可扩展的基于倒排索引的实体解析算法 | |
Giet et al. | Towards zero alarms in sound static analysis of finite state machines | |
Wang et al. | Invariant based fault localization by analyzing error propagation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140416 |