输入验证漏洞检测中的疑点标记和传播方法研究

2016-05-23 01:39:15许庆光刘峻宇
关键词:传播路径

许庆光,李 强,余 祥,刘峻宇

(合肥电子工程学院 网络工程系,安徽 合肥 230037)

输入验证漏洞检测中的疑点标记和传播方法研究

许庆光,李强*,余祥,刘峻宇

(合肥电子工程学院 网络工程系,安徽 合肥230037)

摘要:研究基于静态污点分析技术可用于输入验证漏洞检测的疑点分析方法以及疑点标记和疑点传播路径问题,定义疑点源、疑点传播路径概念和疑点属性的4个状态,制定疑点属性状态间的转换规则,设计疑点源标记与疑点传播路径获取算法.实验结果表明,该方法能够较准确地标记程序中的疑点源并获取其在程序中的传播路径.

关键词:输入验证漏洞;漏洞检测;静态分析;传播路径

随着社会信息化程度的日益提高,软件应用范围越来越广,人们对软件的依赖程度也越来越高,软件安全性问题也就越来越受到人们的关注.根据中国国家信息安全漏洞库统计,2014年每月新增安全漏洞数在600个左右.在众多安全漏洞中,应用软件诱发的安全漏洞占所有漏洞的68%左右,输入验证漏洞在其公布的20多种漏洞类型中始终居高不下,如表 1所示.

表1 2014年每月输入验证漏洞数量与排名统计表

输入验证漏洞是指在没有对外部输入数据进行验证的前提下、对该数据进行安全敏感的使用所引发的安全性问题[1].输入验证漏洞形成的根源就是软件中对各种输入操作没有进行验证或是验证不完备.输入验证漏洞引发的跨站脚本、SQL注入等漏洞攻击导致数亿用户资料外泄和财产损失的现象比比皆是.因此,需要对应用软件中存在的输入验证漏洞进行检测.可用于输入验证漏洞检测的方法有:基于软件需求规格说明的安全测试、基于程序切片的漏洞检测、基于安全漏洞规则的漏洞检测[2-8].

1疑点分析方法

基于软件需求规格说明的安全测试、基于程序切片的漏洞检测和基于安全漏洞规则的漏洞检测的3种方法可以通过程序源码的分析对输入验证漏洞进行检测.分析程序源码,将程序源码的语法、语义特征、数据源、数据流向视为程序属性,通过这些属性,采用某种分析方法,即可实现对输入验证漏洞的检测,这就是静态污点分析技术.

静态污点分析技术是通过对软件接收的不可信数据属性的标记,跟踪不可信数据的输入,记录不可信数据的流向,跟踪其在程序中的传播,采用某种分析方法得到违反规则或者相应约束的脆弱性代码的一种信息流追踪与分析技术[9-10].

疑点分析方法是通过标记软件接收的未经验证或验证不充分的输入数据属性,记录该输入数据的流向,跟踪其在程序中的传播等过程检测输入验证漏洞的一种方法.以程序接收疑点源的语句为起点,以疑点在程序中最后一次被执行为终点的语句执行路径称为疑点传播路径.需要说明的是,这里的“疑点”是指起点处疑点源传播的疑点,而不是其他疑点源传播的疑点.疑点分析方法包括:疑点源标记方法、疑点传播路径获取方法、输入验证漏洞检测方法.

2输入验证漏洞检测中的疑点标记

2.1疑点源的确定

疑点源是指可能引起程序产生各类安全问题的数据来源[11],包括人机界面的输入、程序间传递的数据、数据库检索的数据、存储介质读取的数据、通过网络接收的数据等.未经验证的输入都被认为是不可信数据,即为疑点源,输入函数的参数是疑点的主要来源.

疑点源标记算法是在程序流程图的基础上对程序中输入的变量进行疑点源标记的方法,对其进行算法描述如下:

算法1疑点源标记算法

1.fc.id=get-id(fc);//获取输入FC的ID.

2.startpoint=get-start(fc.id);//访问FC的开始端点.

3.currentpoint=get-next(fc.id);//获取FC中的下一个图元.

4.if currentpoint==IO//如果当前图元为输入输出框.

5.get-sem(currentpoint);//获取当前图元的语义.

6.if sem(currentpoint)==IN//若当前图元表示输入.

7.vi=get-input(currentpoint);//获取输入的变量名称.

8.mark-vi=;//将输入的变量标记为疑点源.

9.else return step3;//返回第3步.

10. else if sem(currentpoint)==END;//当前图元是否为结束端点.

11. the algorithm is end;//算法结束.

12.else.

13. return step3;//返回第3步.

以上疑点源标记算法是识别程序流程图中的输入图元并将其输入的变量标记为疑点源的方法,疑点源在程序中传播的过程中,其疑点属性状态的变化根据2.3节中的疑点属性状态间的转换规则进行.

2.2疑点属性的标记

确定了疑点源后,应对疑点数据在程序中的传播进行分析,需要对疑点数据进行疑点属性的标记,确定疑点属性状态.变量x的疑点属性状态表示为:初始状态(initial)、净化状态 (untainted)、污染状态(tainted)、警报状态(alerted)4个属性特征状态.程序中变量的各个疑点属性的状态变化可用UML(unified modeling language)统一建模语言中的状态图来表示[12],如图1所示.

2.3疑点属性状态间的转换

将疑点分析方法用于输入验证漏洞检测中,不仅要关注疑点数据的引入,更重要的是发现疑点数据的传播和影响范围[13-15].

定义疑点属性在程序变量之间传播,∃vr、vt,当且仅当vr,vt∈V,并且vr到vt之间存在信息流.其中:V是包含程序中的变量实体集.

疑点传播路径中疑点属性的转换是通过程序中的赋值、运算、函数调用以及条件分支等操作来实现的,这些操作遵循如下规则:一是源规则TI(taint-import).源规则定义了不可信的数据进入程序中的位置,通过程序中的各类输入函数将不可信数据引入程序中,包括scanf()类、cin类、Updatedata(TRUE)、read()类、recv()类、gets()类等输入函数.源规则有:变量未经验证被赋值,表示为TI.二是依赖规则TD(taint-deliver).依赖规则定义了程序中的操纵疑点数据的方式,以赋值、运算、函数调用以及条件分支等形式对疑点数据进行操作,其疑点属性也随之发生转换.依赖规则包括:污染状态变量未经验证传递给其他变量、净化状态变量经过操作后被污染、净化状态变量传递给其他变量,分别表示为TD1、TD2、TD3.三是净化规则TF(taint-filter).净化规则定义了程序中对疑点数据的输入验证操作,经过输入验证后的疑点数据,其疑点属性转换为净化状态.净化规则包括:污染状态变量经过验证后被净化、初始状态变量经过验证后被赋值,分别表示为TF1、TF2.四是警报规则TA(taint-alert).警报规则定义了当疑点数据在程序中被用于危险的操作时即发出漏洞警报,危险函数包括数据库查询、执行系统命令、修改注册表、地址转移、系统调用、执行系统命令、输出信息等各类安全敏感的函数.警报规则有:污染状态变量被危险函数使用,表示为TA.在疑点属性标记上定义的4个状态之间在上述规则下可以相互转化,如图2所示.

图1 疑点属性状态图

图2 疑点属性状态转换图

3疑点传播路径的获取

根据源疑点数据(res)和目的疑点数据(tar)之间的传播关系,疑点传播路径可以分为数值依赖传播路径和结构依赖传播路径.通过变量实体间的赋值、函数调用等操作而产生的传播路径称为数值依赖传播路径;通过程序变量实体间控制条件分支的选择,以源疑点数据(res)作为判断条件,决定程序条件分支执行路径确定目的疑点数据(tar)值而形成的传播路径,称为分支结构依赖传播路径,简称结构依赖传播路径.

3.1数值依赖传播路径获取算法

数值依赖传播路径获取算法的功能是基于程序流程图,获取疑点在程序中的数值依赖传播路径.

3.1.1算法描述

算法2数值依赖传播路径获取算法

1.访问程序的一个疑点源,获取其在程序流程图中的位置,并标记疑点源为taint(R).

2.访问所有taint(R)直接参与的数值依赖运算,并将其返回值标记为taint(R,i),R表示taint(R,i)是由taint(R)数值依赖运算得到的,i从1到n,表示第i个由taint(R)参与运算的返回值:

2.1.获得当前语句的类型(TARi表示多个目的疑点数据tar的最终值);

2.2.获得该语句中的源数据的疑点属性;

2.3.若语句类型为简单计算功能的语句,包括赋值或者简单线性运算,则目标数据的疑点属性与源数据相同;

2.4.若语句类型为函数调用的语句,res为调用的参数,tar表示返回值,如果tar表示res作用是否成功,其值可能为0,1,则与res疑点属性无关;如果tar由res变化而来则目标数据的疑点属性与源数据相同;

2.5.若语句为执行输入验证功能的语句,则经过输入验证后,tar的疑点属性为untainted.

3.访问taint(R,i)直接参与的数值依赖运算,并将其返回值标记为taint(R,i,j),R和i的含义同第2步,j从1到n,表示第j个由taint(1,i)参与运算的返回值.

4.按照第2、3步中的方法遍历函数流程图,直至路径终点,该条路径终止,按照广度优先算法的思想继续访问下一个节点.

5.当所有以taint(R)为源节点的疑点传播路径都传播至路径终点时,对于疑点taint(R)的数值依赖传播算法结束,其疑点传播有效路径用疑点的标记表示为:taint(R)→taint(R,i)→taint(R,i,j) →taint(R,i,j,k)→taint(R,i,j,k,l).

算法2中,若有疑点参与的数值依赖运算发生在一个函数内,则根据本函数流程图跟踪疑点传播路径;若有疑点参与的数值依赖运算发生在同一个类的不同函数之间,则展开函数调用关系,再根据各个函数的流程图跟踪疑点传播路径;若有疑点参与的数值依赖运算发生在不同类之间,则展开类之间的使用关系图,再按需展开类中函数之间的调用关系,再根据各个函数的流程图跟踪疑点传播路径.

以程序流程图表示源码的程序结构,对于每一个标记的疑点源,其在程序流程图中传播的次数与其在程序中参与数据依赖传播的语句数n成正比,故对于一个疑点源来说,其执行算法2的时间复杂度是Ο(n).对于程序中标记的m个疑点源来说,其执算法2的时间复杂度是Ο(m*n).算法2的应用如例1所示.

3.1.2一个示例

例1IOCheck软件包中的一段代码:

1.string str,str1;

//str1为str的副本,在str1上实现操作,然后再映射到str上

2.while(true)

3.{cout≪"输入字符串(可输入一行任意多个字符): ";

4.getline(cin,str);

5.str1=str;//建立str的一个copy

6.system(str1);//执行系统命令}

该段代码的功能是对输入字符串的函数调用,其流程如图3所示.

图3 IOCheck软件示例代码的流程图及疑点传播示意图

根据算法1、2可得疑点源为str,第1行,变量str和str1的疑点属性都是initial(初始状态);第5行,将输入的字符串未经任何验证赋值给了str,str的疑点属性变为tainted(污染状态);第6行,通过赋值语句str1=str,str将tainted(污染状态)传播至str1;第7行,具有污染状态属性的str1又被system()函数调用,成为警报状态,这样就形成了由疑点源str为起点的疑点传播路径,用程序语句行号表示疑点传播路径:1→4→5→6.

3.2结构依赖传播路径获取算法

结构依赖传播路径获取算法的功能是基于程序流程图,跟踪由于分支结构依赖引起的疑点传播,获取疑点在程序中的结构依赖传播路径.

3.2.1算法描述

算法3结构依赖传播路径获取算法

1.访问程序的一个疑点源,获取其在程序流程图中的位置,并标记疑点源为taint(R).

2.访问所有taint(R)参与的结构依赖运算,在结构依赖的各个分支中新引入的不可信数据标记为taint(R-i);i从1到n,表示结构依赖于taint(R)的第i个疑点.

2.1.获取目的数据的汇合点TARi;

2.2.若TARi的值在汇合前存在两个不同的值,则TARi被标记为污染状态;

2.3.若TARi的值在汇合前所有条件分支的值均相同,则目标数据在汇合点处为常量,被标记为净化状态.

3.访问所有taint(R-i)参与的结构依赖运算,在结构依赖的各个分支中新引入的不可信数据标记为taint(R-i-j);i的含义同第2步,j从1到n,表示结构依赖于taint(R-i)的第j个疑点.

4.按照第2、3步中的方法遍历函数流程图,直至访问完所有taint(R)经过1次或多次参与的结构依赖运算,算法结束.若算法结束时的疑点标记为taint(R-i-j-k-l),则结构依赖疑点传播路径用疑点的标记表示为taint(1)→ taint(R-i)→ taint(R-i-j)→ taint(R-i-j-k)→ taint(R-i-j-k-l).

5.对于每个新增加的疑点,采用数值依赖疑点传播路径算法继续获取程序中的疑点传播路径.

算法3中,以程序流程图表示源码的程序结构,对于每一个标记的疑点源,其在程序流程图中传播的次数与其在程序中参与条件依赖传播的语句数n成正比,同时还跟条件分支数m成正比,故对于一个疑点源来说,其执行疑点属性显式传播算法的时间复杂度是Ο(m*n).对于实际的软件开发程序来讲,结构依赖传播的分支和传播的次数都比较小,所以其时间复杂度是可以接受的.算法3的应用如例2所示.

3.2.2一个示例

例2BankSystem软件包中的一段代码:

1.CString strUserName,m-strPin,strSQL;//定义用户名、密码及数据库查询语句

2.UpdateData(TRUE);//将数据更新到变量

3.if(strUserName=="admin")//根据用户名判断是否是管理员,对不同的数据库表进行查询

4.{strSQL.Format("select * from ADMINTABLE where USERNAME=‘%s’",strUserName);}

5.else

6.{strSQL.Format("select * from USERTABLE where USERNAME=‘%s’",strUserName);}

7.g-dataoperate.Operate(strSQL);//执行数据库查询语句

该段代码的功能是通过输入用户名字符串构造数据库查询语句,其流程如图4所示.

图4 BankSystem 软件示例代码的流程图

根据算法1、3可得疑点源为m-strPin、m-strUserName.第1行,变量m-strPin、m-strUserName和strSQL的疑点属性都是初始状态;第2行,将输入的内容未经任何验证赋值给了m-strPin和m-strUserName,然后m-strPin和m-strUserName的疑点属性变为污染状态;第3行,根据输入的用户名的不同,在第4行和第6行分别对strSQL进行了赋值,但是两条分支的赋值结果是不同的,所以strSQL的疑点属性变为污染状态;在第7行,具有污染状态属性的strSQL又被Operate()函数调用成为警报状态,这样就形成了由疑点源m-strUserName为起点的疑点传播路径,用程序语句行号表示疑点传播路径:1→2→4→7和1→2→6→7,如图5所示.

图5 例2中疑点传播示意图

根据算法2、3生成的疑点传播路径中由源疑点数据(res)直接流向目的疑点数据(tar),是直接疑点传播路径.疑点传播路径具有传递性的特征[16],多条直接疑点传播路径通过中间疑点数据传播构成的疑点传播路径称为疑点间接传播路径.

4实例分析与验证

为了验证提出的疑点分析方法中疑点标记算法和疑点传播路径获取算法的正确性和有效性,选取开源社区网站CSDN[11]中可下载的3个开源软件包IOCheck、BankSystem、LibrarySystem,对输入验证漏洞检测模型进行分析验证.

实例:IOCheck、BankSystem、LibrarySystem等3个软件包,其功能、程序大小和有效代码行数如表2所示.

表2 用来测试的软件包信息

验证内容:通过3个开源软件包,检测疑点传播路径获取算法的正确性和有效性.

验证环境:兼容机,Pentium(R) Dual-Core CPU,Microsoft Windows XP SP3,2.00 GB内存,Visual C++6.0,Logiscope6.0.其中,Logiscope6.0工具用来读取C/C++源码以及获取源码的程序流程图.

验证方法:先使用疑点传播路径获取算法1、2,再采用人工分析的方法获取开源软件包IOCheck、BankSystem、LibrarySystem中的疑点源数和疑点传播路径数,对用这两个不同方法疑点传播路径获取结果进行对比和分析,如表3所示.

表3 两种不同方法获取疑点传播路径的分析结果对比

从表3可以看出,采用疑点标记算法、疑点传播路径获取算法和人工分析标记与跟踪方法获取的疑点源数、疑点传播路径数是基本一致的.特别是在程序规模比较小的情况下,算法获取与人工获取一致,如IOCheck软件包.由于疑点标记算法、疑点传播路径获取算法不含输入验证漏洞的识别,而采用人工分析标记与跟踪方法时,人为去除一些不会产生漏洞的疑点传播路径,产生疑点传播路径获取算法和人工分析标记与跟踪方法获取的疑点源数、疑点传播路径数不相同的情况,如BankSystem、LibrarySystem软件包.

5结束语

论文提出的基于静态疑点分析技术的疑点分析方法通过疑点源识别、疑点属性标记、疑点数据在程序中传播路径的获取,解决了输入验证漏洞在程序中的位置问题.在此基础上,设计输入验证漏洞的检测算法,即可实现对输入验证漏洞的检测.对一些开源程序进行验证的结果表明,疑点属性标记和疑点传播路径获取方法能有效地获取疑点传播路径,从而确定了输入验证漏洞在程序源码中的位置,这为程序源码中输入验证漏洞的检测奠定了基础.下一步需要研究的工作是建立输入验证漏洞检测模型.

参考文献:

[1]郭瑞杰. 未输入验证安全漏洞检测系统的设计与实现[D]. 北京: 北京邮电大学网络技术研究院, 2009.

[2]HAYES J H, OFFUTT J. Input validation analysis and testing[J]. Empirical Software Engineering, 2012, 11 (4): 493-522.

[3]ALKHALAF M, BULTAN T, GALLEGOS J L. Verifying client-side input validation functions using string analysis[C]// IEEE ICSE, 2012: 947-948.

[4]RUI M, LINGKUI C, CHANGZHEN H, et al. A dynamic detection method to C/C++ programs memory vulnerabilities based on pointer analysis[C]// IEEE 11th International Conference on Dependable, Autonomic and Secure Computing, Beijing, 2013: 52-57.

[5]QU B, LIANG B, JIANG S, et al. Design of automatic vulnerability detection system for Web application program[C]// IEEE 4th International Conference on Software Engineering and Service Science (ICSESS),Wuhan, 2013: 89-92.

[6]EDWARD J S, THANASSIS A, DAVID B. All you ever wanted to know about dynamic taint analysis and forward symbolic execution [J]. IEEE Symposium on Security and Privacy, 2010,15(6):317-331.

[7]戚兰兰,温江涛,陈渝,等. 动静结合的整数溢出漏洞分析方法[J]. 清华大学学报(自然科学版), 2014, 54 (9): 1173-1178.

[8]PADMANABHUNI B M, TAN H B K. Predicting buffer overflow vulnerabilities through mining light-weight static code attributes[C]// IEEE International Symposium on Software Reliability Engineering Workshops (ISSREW), Nanyang, 2014: 317-322.

[9]YOUNG H C, TAI-MYOUNG C. A framework for dynamic taint analysis of binary executable File[C]// International Conference on Digital Object Identifier, ICTSA, 2013: 1-2.

[10]SUN F. A buffer overflow detection method based on taint analysis[J]. Science&Technology Vision, 2012, 24 (1): 119-120.

[11]孔德光,郑烇,帅建梅. 基于污点分析的源代码脆弱性检测技术[J]. 小型微型计算机系统, 2009 (1): 78-82.

[12]吴建,郑潮,汪杰. UML基础与Rose建模案例[M]. 2版. 北京: 人民邮电出版社, 2007: 76.

[13]ZHIGANG Z, FAN G. Malicious code detection by taint analysis[C]// International Conference on Multimedia Communications, RAID, 2010:206-209.

[14]LIU Z, ZHANG X, LI X. Proactive vulnerability finding via information flow tracking[C]// International Conference on Multimedia Information Network and Security, Florida, 2010:481-485.

[15]JIA W, WANG Y, SHI F, et al. Detecting DOM based XSS vulnerability based on dynamic taint propagation model[J]. Application Research of Computers, 2014, 31 (7): 2119-2122.

[16]LIU Y, MILANOVA A. Static analysis for inference of explicit information flow[C]// Proc of the ACM Sigplan-Sigsoft Workshop on Program Analysis for Software Tools and Engineering(PASTE), 2008: 50-56.

(责任编辑朱夜明)

Received date:2015-10-15

Foundation item:Supported by Anhui Provincial Natural Science Foundation of China (1508085SME219)

Author’s brief:MENG Fanming (1966-), male, born in Hefei of Anhui Province, Professor of Anhui University, Master student supervisor.

CLC number:O484.1Document code:AArticle ID:1000-2162(2016)03-0037-07

Controllable synthesis of anatase TiO2nanosheets and their photocatalytic mechanism

MENG Fanming, FAN Zhenghua, GONG Jinfeng, YUAN Jiangtao, LI Huijie

(School of Physics and Materials Science, Anhui University, Hefei 230601, China)

The research on the taint mark and propagation method in input validation vulnerability detection

XU Qingguang, LI Qiang*,YU Xiang, LIU Junyu

(Internet Engineering Department, Electronic Engineering Institute, Hefei 230037, China)

Abstract:Based on the static taint analysis technology that can be applied to input validation vulnerabilities detection, this paper analyzed issues related to taint mark and the taint propagation paths. Defined taint seed, taint propagation paths and the four different taint properties, formulated the rules of transferring between different properties, and further designed the algorithms to mark taints and get the taint propagation paths. Experimental results showed that these algorithms can precisely mark the taint seed in the program and get its propagation paths. AnataseTiO2 nanostructures were synthesized by a facile solvothermal method. The effects of ethanol, ethylene glycol, and glycerol on the morphology and photocatalytic activity of TiO2 nanostructures were investigated. The as-synthesized nanostructures have been characterized by X-ray diffraction (XRD), scanning electron microscopy (SEM), Raman spectroscopy (Raman), and UV-Vis absorption spectra (UV-Vis). It was found that the morphology changes from nanosheets to nanorods, and then to nanoparticles with the increase of viscosity. TiO2 nanosheets obtained with ethanol solution exhibited excellent photocatalytic activity, which could be attributed to the high UV light absorption resulted from multiple bounces of particles of UV light.

Key words:input validation vulnerability; vulnerability detection; static analysis; propagation path solvothermal method; synthesis; morphology; photocatalytic activity

中图分类号:TP393

文献标志码:A

文章编号:1000-2162(2016)03-0029-08

作者简介:许庆光(1989-),男,山东聊城人,电子工程学院硕士研究生;*李强(通信作者),电子工程学院教授,硕士生导师,E-mail:lychfeei@163.com.

基金项目:技术基础项目基金资助(72131022);电子工程学院科研基金资助项目(KY131546)

收稿日期:2015-01-06

doi:10.3969/j.issn.1000-2162.2016.03.006 10.3969/j.issn.1000-2162.2016.03.007

猜你喜欢
传播路径
习近平总书记系列重要讲话精神在高校学生中有效传播的路径研究
求知导刊(2017年1期)2017-03-24 13:12:19
新媒体时代马克思主义思想的传播路径
人民论坛(2017年4期)2017-02-23 21:46:34
高校思想政治教育“正能量”传播的路径研究
都市报传播城市文化的创新路径
新闻世界(2016年11期)2016-12-10 08:24:48
新媒体时代科普类微博的传播路径探析
新闻世界(2016年11期)2016-12-10 08:13:50
英文学术期刊办刊策略与传播路径研究
出版广角(2016年8期)2016-08-11 16:49:44
网民介入公共政策传播的路径及其风险规避
新闻世界(2016年8期)2016-08-11 08:14:30
浅析高校网络舆情的传播路径与应对策略
媒介融合背景下黄酒非遗文化数字记忆的内容、路径与问题
戏剧之家(2016年11期)2016-06-22 13:49:41
新媒体背景下庐山云雾茶旅游品牌传播路径研究
老区建设(2015年24期)2016-01-20 16:22:58