CN116303042A - 一种基于污点分析的软件配置故障检测方法 - Google Patents

一种基于污点分析的软件配置故障检测方法 Download PDF

Info

Publication number
CN116303042A
CN116303042A CN202310283135.2A CN202310283135A CN116303042A CN 116303042 A CN116303042 A CN 116303042A CN 202310283135 A CN202310283135 A CN 202310283135A CN 116303042 A CN116303042 A CN 116303042A
Authority
CN
China
Prior art keywords
configuration
code
constraint
module
configuration parameter
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
Application number
CN202310283135.2A
Other languages
English (en)
Other versions
CN116303042B (zh
Inventor
李姗姗
王腾
何浩辰
陈振邦
陈立前
董威
张元良
贾周阳
黄响兵
胡柳敏
张晶莹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202310283135.2A priority Critical patent/CN116303042B/zh
Publication of CN116303042A publication Critical patent/CN116303042A/zh
Application granted granted Critical
Publication of CN116303042B publication Critical patent/CN116303042B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于污点分析的软件配置故障检测方法,目的是有效检测出软件系统中的配置故障。技术方案为:构建由配置参数分析与定位模块、数据流分析模块、控制流分析模块、配置约束提取模块、配置约束检查模块组成的配置故障检测系统;配置参数分析与定位模块定位配置变量在软件源码中的使用位置作为污点分析的入口;数据流分析模块利用入口集合定位数据流传播代码;控制流分析模块利用数据流传播集合定位控制流传播的代码块基本块;配置约束提取模块根据数据流传播代码和控制流传播的代码块基本块提取配置约束;配置约束检查模块检查目标配置文件中的配置参数设置是否满足约束,从而检测配置故障。采用本发明能有效检测出软件配置故障。

Description

一种基于污点分析的软件配置故障检测方法
技术领域
本发明涉及大型开源软件中配置故障检测领域,具体涉及一种基于代码污点分析的软件配置故障检测方法。
背景技术
当前信息化技术不断发展,软件系统在系统规模和软件功能方面发生了巨大变化。在系统规模方面,目前大部分常用的开源软件规模均已达到百万行量级且在不断增加。据Coverity公司年度开源软件代码分析报告指出,在过去3年中,Linux内核代码行数以每年百万行量级增长。另一方面,软件功能日益多样,复杂软件往往通过大量配置参数提高系统的高可定制性,用户可以通过不同配置参数的设置得到期望的功能和性能。本发明所涉及的配置参数即为软件提供给用户、供用户在软件部署后的设置以改变软件功能、特性等方面的接口(本发明所述配置是配置参数的统称)。然而功能的强大以及可定制性的提高使得配置的复杂性不断提高,给用户正确配置(即设置所有配置参数的值)带来了极大挑战,从而引发了大量配置故障。配置故障即为,因配置参数的值违反约束规则而引发的软件系统功能失效、崩溃等故障。数据显示,2019年谷歌公司云服务失效的最主要原因即来自于配置故障。
配置故障的严重性引起了学术界和工业界的广泛关注,部分工作研究配置故障发生前的检测技术,通过对用户设置的配置参数的值进行提前检查,从而检测出潜在的配置错误,并有效预防配置故障。相较于故障发生后的定位与诊断,配置故障检测技术能够在软件部署、使用前及早发现潜在的配置错误,从而避免配置故障带来的系统损失。
现有的配置故障检测方法主要包括以下步骤:第一步,提取配置参数需要满足的取值条件,即配置参数的约束信息(以下简称为配置约束);第二步,检查用户设置的配置取值是否满足配置参数的约束信息,从而检测出潜在的配置故障。因此,配置故障检测的关键在于提取配置参数的约束信息。
现有技术主要采用两类方法提取配置参数的约束信息。第一类方法,如JiaqiZhang等人在ASPLOS2014发表的“Encore:Exploiting System Environment andCorrelation Information for Misconfiguration Detection(利用系统环境关联关系实现配置故障诊断,以下简称背景技术一)”,主要基于自然语言处理和模式挖掘方法,利用预定义的约束规则模版,从真实世界的大量配置文件中归纳软件配置参数的约束信息。然而,此类方法有效性通常依赖于配置文件样本的多样性和数量。由于用户隐私数据保护和维护平台缺乏等因素,往往难以获取大量的配置文件样本,从而导致提取的配置参数的约束信息的正确性和数量降低。由于背景技术一提取配置参数的约束信息的局限性较大且效果不突出,因此通常采用其他技术提取软件配置参数的约束信息。
第二类方法,如TianyinXu等人在SOSP2013发表的“Do Not Blame Users forMisconfigurations(不要因为配置故障而责备用户)”中提出的配置约束提取方法,下简称背景技术二,通过静态程序分析方法跟踪配置参数在源码中的对应程序变量(后续简称为配置变量)的使用情况,并通过匹配预先定义的配置约束代码模式,实现配置参数的约束信息提取。此类方法缺乏支持跨函数的数据流传播方式,难以有效定位到配置相关代码,因此配置参数的约束信息提取结果的准确性和查全性受到影响,无法直接用于软件配置故障检测。
污点分析是一种通过数据流、控制流分析,找到与入口代码存在数据传播和控制传播的代码片段的程序定位技术。通过污点分析对配置相关代码进行定位,一方面能够帮助软件开发人员提升对于配置参数如何影响软件行为的理解,从而完善相关的设计实现,减少可能存在的软件缺陷;另一方面,污点分析的结果可以应用于配置故障检测和诊断技术,提升检测和诊断的效果。然而,由于大规模软件中配置相关代码的复杂性,例如在软件代码中配置经常作为函数的参数或返回值进行跨多层函数的数据流传播,而目前的污点分析方法缺少针对配置相关代码的复杂特性的支持,从而无法直接应用于配置参数的约束信息提取和故障检测等工作。目前还没有采用污点分析进行软件配置故障检测的技术方案的公开报导。
综上所述,如何利用污点分析有效定位配置相关代码,提取更多配置参数的约束信息,从而有效检测配置故障,是本领域技术人员正在探讨的热点问题。
发明内容
本发明要解决的技术问题是:针对现有配置参数的约束信息提取能力不足,无法有效检测配置故障的问题,提供一种基于污点分析的软件配置故障检测方法。通过对配置变量进行数据流和控制流污点分析,提取配置参数的约束信息,并根据提取的配置参数的约束信息检测配置故障。
为了解决上述技术问题,本发明技术方案是:首先,构建软件配置故障检测系统,软件配置故障检测系统由配置参数分析与定位模块、数据流分析模块、控制流分析模块、配置约束提取模块、配置约束检查模块组成。然后,配置参数分析与定位模块读入待检测软件源码S和目标配置参数集合,提取配置参数对应的配置变量(即配置参数在S中的对应程序变量)集合,定位配置变量在软件源码中的使用位置,并将配置变量在S中的使用位置作为污点分析的入口,将入口集合ES发送给数据流分析模块;数据流分析模块利用入口集合ES定位S中与目标配置参数之间存在数据流传播的代码,得到代码集合DFS,将DFS发送给控制流分析模块和配置约束提取模块;控制流分析模块利用DFS定位S中与目标配置参数之间存在控制流传播的代码基本块,得到代码基本块集合CFS,将CFS发送给配置约束提取模块。其次,配置约束提取模块根据DFS和CFS提取配置参数的约束信息,得到配置参数的约束信息集合ConstraintSet。最后,配置约束检查模块读入目标配置文件,通过检查目标配置文件中的配置参数设置是否满足ConstraintSet中的配置参数的约束信息以检测配置故障,得到存在错误设置的配置参数集合WC。
本发明包含以下步骤:
第一步:构建软件配置故障检测系统,软件配置故障检测系统由配置参数分析与定位模块、数据流分析模块、控制流分析模块、配置约束提取模块、配置约束检查模块组成。
配置参数分析与定位模块与数据流分析模块相连,从用户输入中读取待检测软件源码S和目标配置参数集合,利用S得到S中所有配置参数对应的程序变量,并定位配置变量在S中的使用位置,将配置变量在软件源码中的使用位置作为污点分析的入口,得到污点分析入口集合ES,将ES发送给数据流分析模块。
数据流分析模块与配置参数分析与定位模块、控制流分析模块、配置约束提取模块相连,从用户输入中读取S,从配置参数分析与定位模块中接收ES,利用ES定位S中与目标配置参数之间存在数据流传播的代码,得到代码集合DFS,将DFS发送给控制流分析模块和配置约束提取模块。
控制流分析模块与数据流分析模块、配置约束提取模块相连,从用户输入中读取S,从数据流分析模块接收DFS,利用DFS定位S中与目标配置参数之间存在控制流传播的代码基本块,得到代码基本块集合CFS,将CFS发送给配置约束提取模块。
配置约束提取模块与数据流分析模块、控制流流分析模块、配置约束检查模块相连,从数据流分析模块接收DFS,从控制流分析模块接收CFS,根据DFS和CFS提取配置参数的约束信息,得到配置参数的约束信息集合ConstraintSet,将ConstraintSet发送给配置约束检查模块。
配置约束检查模块与配置约束提取模块相连,接收用户输入的目标配置文件,从配置约束提取模块接收ConstraintSet,通过检查目标配置文件中的配置参数设置是否满足ConstraintSet中的配置参数的约束信息以检测目标配置文件的配置故障,得到存在错误设置的配置参数集合。
第二步,配置参数分析与定位模块利用软件源码S对目标配置参数集合中的目标配置参数进行分析定位,得到目标配置参数对应的程序变量以及在S的代码位置,将配置变量在S中的使用位置作为污点分析的入口,并把入口集合ES发送给数据流分析模块,方法是:
2.1配置参数分析与定位模块读入用户输入的待检测软件源码S和目标配置参数集合C,C={c1,c2,…,ci,…,cI},其中ci为C中第个i配置参数,其类型是常量字符串,I为集合中配置参数的总数,1≤i≤I;
2.2配置参数分析与定位模块使用Confmapper算法(参见Shulin Zhou等人在QRS-C2016发表的文章《Confmapper:Automated variable finding for configuration itemsin source code》(一种从软件源码中自动发现配置参数初始变量的方的第4页)分析C中I个目标配置参数的初始程序变量,由I个初始程序变量(即I个配置变量)构成配置变量集合VC,VC={vc1,vc2,…,vci,…,vcI},其中vci为配置参数ci对应的配置变量;
2.3配置参数分析与定位模块读取S中的每条代码语句,从S中筛选出存在VC中配置变量的语句,将所有存在配置变量的语句作为污点分析的入口,放到入口集合ES中,ES={E1,E2,…,Ei,…,EI},Ei为配置参数ci的入口集合,Ei={e1,e2,…,eni,…,eNi},Ni为配置参数ci所对应的代码定位入口个数,eni为集合Ei中第ni个入口代码,1≤ni≤Ni;方法为:
2.3.1初始化i=1;
2.3.2初始化
Figure BDA0004138799480000041
ni=1;
2.3.3遍历S中的每条代码语句,令其中任意一条代码语句为se,若se中存在变量vci,说明se为污点分析的入口代码,令eni=se,并将eni插入到Ei中,令ni=ni+1。直至遍历完S中的所有代码语句,此时令集合Ei中元素个数Ni=ni;将Ei插入到入口集合ES中。
2.3.4若i=I,说明VC中所有配置变量已经找到入口集合,得到ES,转2.4;否则,令i=i+1,转2.3.2;
2.4将ES发送给数据流分析模块;
第三步,数据流分析模块利用ES定位所有与目标配置参数集合中的目标配置参数之间存在数据流传播的代码,得到代码集合DFS,方法是:
3.1数据流分析模块读入用户输入的软件源码S,从配置参数分析与定位模块接收ES;
3.2数据流分析模块利用软件源码S,对ES中的入口代码进行数据流传播分析,得到数据流传播的代码集合DFS,DFS={DF1,DF2,...,DFi,...,DFI},其中DFi为配置参数ci的数据流传播代码集合,DFi={st1,st2,…,stmi,…,stMi},stmi为配置参数ci的第mi个数据流传播代码语句,Mi为ci的数据流传播代码语句总数,1≤mi≤Mi,数据流传播分析方法为:
3.2.1初始化数据流传播的代码集合
Figure BDA0004138799480000042
i=1;
3.2.2初始化配置参数ci的数据流传播代码集合
Figure BDA0004138799480000043
mi=1。令待分析的代码语句集合P=Ei,P中元素个数是动态变化的;
3.2.3取出集合P中第一个元素tmp,并将tmp从集合P中删除。令stmi=tmp,将stmi插入到集合DFi中;
3.2.4根据代码语句tmp的语句类型在源码S中找到tmp的数据流传播代码,并将数据流传播代码插入到集合P中,方法为:
3.2.4.1若tmp为函数调用语句类型,则令变量vp为tmp中与配置参数ci对应的参数变量,从S中找到存在变量vp的所有代码语句,并将这些代码语句中未曾插入到集合P的所有代码语句插入到集合P中,转3.2.5;否则,转3.2.4.2分析其他语句类型;
3.2.4.2若tmp为函数返回语句类型,则令函数fp为tmp所在函数的函数名,找到S中将函数fp返回值做为右值的所有赋值语句,并将这些赋值语句中未曾插入到集合P的所有代码语句插入到集合P中,转3.2.5;否则,转3.2.4.3分析其他语句类型;
3.2.4.3若tmp为赋值语句类型,则令变量vp为此赋值语句的左值,找到S中存在变量vp的所有代码语句,并将这些代码语句中未曾插入到集合P的所有代码语句插入到集合P中,转3.2.5;
3.2.5若集合P中元素个数为0,说明已经找到配置参数ci的全部数据流传播代码,令Mi=mi,转3.2.6;否则令mi=mi+1,转3.2.3;
3.2.6若i=I,说明对于所有配置参数已经完成数据流传播分析,转3.3;否则,将DFi插入到数据流传播代码集合DFS,令i=i+1,转3.2.2;
3.3将数据流传播代码集合DFS发送给控制流分析模块;
第四步,控制流分析模块从数据流分析模块接收DFS,利用DFS定位所有与目标配置参数集合中的目标配置参数之间存在控制流传播的代码基本块,得到代码基本块集合CFS,方法是:
4.1控制流分析模块读入用户输入的S,从数据流分析模块接收数据流传播的代码集合DFS。
4.2控制流分析模块利用S,对DFS中元素进行控制流传播分析,得到控制流传播的代码基本块集合CFS,CFS={CF1,CF2,...,CFi,...,CFI},其中CFi为配置参数ci的控制流传播的代码块基本集合,CFi={bt1,bt2,…,btwi,…,btWi},btwi为配置参数ci的第wi个控制流传播的代码基本块,Wi为ci的控制流传播的代码基本块总数,1≤wi≤Wi,控制流传播分析方法为:
4.2.1初始化控制流传播的代码基本块集合
Figure BDA0004138799480000051
i=1;
4.2.2初始化配置参数ci的控制流传播的代码块基本集合
Figure BDA0004138799480000052
4.2.3初始化mi=1;
4.2.4若DFi中的stmi为条件分支语句类型,则令代码基本块集合bps为条件分支语句stmi控制的代码基本块集合,bps={bp1,bp2,…,bpk,…,bpK},bpk为stmi控制的第k个代码基本块,K为集合bps的元素个数,1≤k≤K。将bps中所有元素插入到集合CFi中;
4.2.5若mi=Mi,说明已经找到配置参数ci的全部控制流传播的代码基本块,令Mi=mi,转4.2.6;否则令mi=mi+1,转4.2.4;
4.2.6若i=I,说明对于C中所有配置参数已经完成控制流传播分析,转4.3;否则,将CFi插入到CFS中,令i=i+1,转4.2.2;
4.3将控制流传播的代码基本块集合CFS发送给配置约束提取模块;
第五步,配置约束提取模块从数据流分析模块接收DFS,从控制流分析模块接收CFS,根据DFS和CFS提取配置参数的约束信息,得到配置参数的约束信息集合ConstraintSet,
″″
ConstraintSet={<c1,cmp1,ct1>,<c2,cmp2,ct2>,…,<cr,cmpr,ctr>,…<cR,cmpR,ctR>},其
中,<cr,cmpr,ctr>为三元组,代表ConstraintSet中第r个配置参数的约束信息,包含取值范围、数值依赖和控制依赖类型,R为ConstraintSet中配置约束个数,1≤r≤R。c′r为配置参数名,c′r属于目标配置参数集合C;ctr为常数或配置参数名;cmpr为逻辑判断符号,可选范围包括{>,≥,<,≤,=,≠,control},‘control’代表c′r与ctr存在控制依赖约束,其他逻辑判断符号代表c′r与ctr存在取值范围约束或数值依赖约束。提取配置约束过程需要从目标配置参数集合C中,依次枚举两个目标配置参数,方法为:
5.1初始
Figure BDA0004138799480000061
i=1,r=1;
5.2初始化j=1;
5.3若i=j,则转5.4分析配置参数ci的取值范围;否则,转5.5分析配置参数ci和cj的数值依赖和控制依赖;
5.4遍历DFi中的数据流传播代码,匹配配置参数ci的取值范围约束,方法为:
5.4.1初始化mi=1;
5.4.2若DFi中的stmi为条件分支语句,且stmi中存在与常数进行比较的判断表达式,则提取配置参数ci与此常数的判断表达式的逻辑判断符号cmp′和常数ct′,令c′r=ci,cmpr=cmp′,ctr=ct′,将<c′r,cmpr,ctr>插入到配置约束集合ConstraintSet中,令r=r+1。
5.4.3若mi=Mi,则说明检查完DFi中数据流传播代码,转5.7;否则,令mi=mi+1,转5.4.2;
5.5遍历DFi和DFj中的数据流传播代码,匹配配置参数ci和cj的数值依赖约束,方法为:
5.5.1初始化mi=1;
5.5.2初始化mj=1;
5.5.3若DFi中的stmi=stmj,且stmi为条件分支语句,则提取条件分支语句stmi中的逻辑判断符号cmp′,令c′r=ci,cmpr=cmp′,ctr=cj,将<c′r,cmpr,ctr>插入到配置约束集合ConstraintSet中,令r=r+1。
5.5.4若mj=Mj,说明检查完DFj中数据流传播代码,转5.5.5;否则,令mj=mj+1,转5.5.3;
5.5.5若mi=Mi,说明检查完DFi中数据流传播代码,转5.6;否则,令mi=mi+1,转5.5.2;
5.6遍历CFi中的控制流传播代码和DFj中的数据流传播代码,匹配配置参数ci和cj的控制依赖约束,方法为:
5.6.1初始化wi=1;
5.6.2初始化mj=1;
5.6.3若代码基本块btwi中包含代码语句stmj,令c′r=ci,cmpr=‘control’,ctr=cj,将配置参数的约束信息<c′r,cmpr,ctr>插入到配置参数的约束信息集合ConstraintSet中,令r=r+1,转5.7;否则,转5.6.4继续匹配控制依赖约束;
5.6.4若mj=Mj,说明检查完DFj中数据流传播代码,转5.6.5;否则,令mj=mj+1,转5.6.3;
5.6.5若wi=Wi,则说明检查完CFi中控制流传播代码,转5.7;否则,令wi=wi+1,转5.6.2;
5.7若j=I,说明对于目标配置参数ci,约束提取模块已提取出所有的配置约束,转5.8;否则,令j=j+1,转5.3;
5.8若i=I,说明约束提取模块已遍历全部目标配置项,转5.9;否则令i=i+1,转5.2;
5.9将ConstraintSet发送给配置约束检查模块;
第六步,配置约束检查模块根据从配置约束提取模块接收的ConstraintSet,检查目标配置文件中的配置参数设置是否满足ConstraintSet中的约束,从而检测配置故障,得到存在错误设置的配置参数集合WC,方法为:
6.1配置约束检查模块从配置约束提取模块接收ConstraintSet;
6.2初始化变量r=1,初始化存在错误设置的配置参数集合
Figure BDA0004138799480000071
6.3配置约束检查模块从用户输入中读取目标配置文件,检查目标配置文件中是否存
在对名称为ConstraintSet中cr(的配置参数的设置,若存在,转6.4检查配置约束是否满足;否则转6.5;
6.4检查目标配置文件中名称为cr′的配置参数取值设置是否满足ConstraintSet中配置
约束<cr,cmpr,ctr>。若不满足,表明目标配置文件中存在违反配置约束的配置参数设置,说明S的配置文件中存在配置故障,将配置参数cr′插入到集合WC中,转6.5;若满足,则直接转6.5;
6.5若r=R,表明已全部检查完ConstraintSet,转6.6;否则,令r=r+1,转6.3;
6.6检查结束,输出存在错误设置的配置参数的集合WC。
与现有技术相比,采用本发明能达到以下有益效果:
1、采用本发明能有效提取软件配置参数约束信息。采用本发明在5款大型开源软件MySQL、PostgreSQL、Vsftpd、OpenLDAP、Squid中共提取出859个配置参数约束信息,提取配置约束的个数比背景技术二多47个。
2、本发明可在软件部署使用前,有效检测潜在的配置故障,帮助软件运维和管理员找到存在错误设置的配置参数,提升软件运维效率。评估结果显示,本发明在50个人工生成的存在错误配置参数设置的目标配置文件中,可以发现94%的错误设置的配置参数,而背景技术二仅可发现88%的错误设置的配置参数,因此相比背景技术二,本发明更能有效检测出软件配置故障。
附图说明
图1是本发明的总体流程图;
图2是本发明第一步构建的软件配置故障检测系统的逻辑结构图。
具体实施方式
下面结合附图对本发明进行说明。
如图1所示,本发明包括以下步骤:
第一步:构建软件配置故障检测系统,软件配置故障检测系统如图2所示,由配置参数分析与定位模块、数据流分析模块、控制流分析模块、配置约束提取模块、配置约束检查模块组成。
配置参数分析与定位模块与数据流分析模块相连,从用户输入中读取待检测软件源码S和目标配置参数集合,利用S得到S中所有配置参数对应的程序变量,并定位配置变量在S中的使用位置,将配置变量在软件源码中的使用位置作为污点分析的入口,得到污点分析入口集合ES,将ES发送给数据流分析模块。
数据流分析模块与配置参数分析与定位模块、控制流分析模块、配置约束提取模块相连,从用户输入中读取S,从配置参数分析与定位模块中接收ES,利用ES定位S中与目标配置参数之间存在数据流传播的代码,得到代码集合DFS,将DFS发送给控制流分析模块和配置约束提取模块。
控制流分析模块与数据流分析模块、配置约束提取模块相连,从用户输入中读取S,从数据流分析模块接收DFS,利用DFS定位S中与目标配置参数之间存在控制流传播的代码基本块,得到代码基本块集合CFS,将CFS发送给配置约束提取模块。
配置约束提取模块与数据流分析模块、控制流流分析模块、配置约束检查模块相连,从数据流分析模块接收DFS,从控制流分析模块接收CFS,根据DFS和CFS提取配置参数的约束信息,得到配置参数的约束信息集合ConstraintSet,将ConstraintSet发送给配置约束检查模块。
配置约束检查模块与配置约束提取模块相连,接收用户输入的目标配置文件,从配置约束提取模块接收ConstraintSet,通过检查目标配置文件中的配置参数设置是否满足ConstraintSet中的配置参数的约束信息以检测目标配置文件的配置故障,得到存在错误设置的配置参数集合。
第二步,配置参数分析与定位模块利用软件源码S对目标配置参数集合中的目标配置参数进行分析定位,得到目标配置参数对应的程序变量以及在S的代码位置,将配置变量在S中的使用位置作为污点分析的入口,并把入口集合ES发送给数据流分析模块,方法是:
2.1配置参数分析与定位模块读入用户输入的待检测软件源码S和目标配置参数集合C,C={c1,c2,…,ci,…,cI},其中ci为C中第个i配置参数,其类型是常量字符串,I为集合中配置参数的总数,1≤i≤I;
2.2配置参数分析与定位模块使用Confmapper算法(参见Shulin Zhou等人在QRS-C2016发表的文章《Confmapper:Automated variable finding for configuration itemsin source code》(一种从软件源码中自动发现配置参数初始变量的方的第4页)分析C中I个目标配置参数的初始程序变量,由I个初始程序变量(即I个配置变量)构成配置变量集合VC,VC={vc1,vc2,…,vci,…,vcI},其中vci为配置参数ci对应的配置变量;
2.3配置参数分析与定位模块读取S中的每条代码语句,从S中筛选出存在VC中配置变量的语句,将所有存在配置变量的语句作为污点分析的入口,放到入口集合ES中,ES={E1,E2,…,Ei,…,EI},Ei为配置参数ci的入口集合,Ei={e1,e2,…,eni,…,eNi},Ni为配置参数ci所对应的代码定位入口个数,eni为集合Ei中第ni个入口代码,1≤ni≤Ni;方法为:
2.3.1初始化i=1;
2.3.2初始化
Figure BDA0004138799480000091
ni=1;
2.3.3遍历S中的每条代码语句,令其中任意一条代码语句为se,若se中存在变量vci,说明se为污点分析的入口代码,令eni=se,并将eni插入到Ei中,令ni=ni+1。直至遍历完S中的所有代码语句,此时令集合Ei中元素个数Ni=ni;将Ei插入到入口集合ES中。
2.3.4若i=I,说明VC中所有配置变量已经找到入口集合,得到ES,转2.4;否则,令i=i+1,转2.3.2;
2.4将ES发送给数据流分析模块;
第三步,数据流分析模块利用ES定位所有与目标配置参数集合中的目标配置参数之间存在数据流传播的代码,得到代码集合DFS,方法是:
3.1数据流分析模块读入用户输入的软件源码S,从配置参数分析与定位模块接收ES;
3.2数据流分析模块利用软件源码S,对ES中的入口代码进行数据流传播分析,得到数据流传播的代码集合DFS,DFS={DF1,DF2,...,DFi,...,DFI},其中DFi为配置参数ci的数据流传播代码集合,DFi={st1,st2,…,stmi,…,stMi},stmi为配置参数ci的第mi个数据流传播代码语句,Mi为ci的数据流传播代码语句总数,1≤mi≤Mi,数据流传播分析方法为:
3.2.1初始化数据流传播的代码集合
Figure BDA0004138799480000092
i=1;
3.2.2初始化配置参数ci的数据流传播代码集合
Figure BDA0004138799480000093
mi=1。令待分析的代码语句集合P=Ei,P中元素个数是动态变化的;
3.2.3取出集合P中第一个元素tmp,并将tmp从集合P中删除。令stmi=tmp,将stmi插入到集合DFi中;
3.2.4根据代码语句tmp的语句类型在源码S中找到tmp的数据流传播代码,并将数据流传播代码插入到集合P中,方法为:
3.2.4.1若tmp为函数调用语句类型,则令变量vp为tmp中与配置参数ci对应的参数变量,从S中找到存在变量vp的所有代码语句,并将这些代码语句中未曾插入到集合P的所有代码语句插入到集合P中,转3.2.5;否则,转3.2.4.2分析其他语句类型;
3.2.4.2若tmp为函数返回语句类型,则令函数fp为tmp所在函数的函数名,找到S中将函数fp返回值做为右值的所有赋值语句,并将这些赋值语句中未曾插入到集合P的所有代码语句插入到集合P中,转3.2.5;否则,转3.2.4.3分析其他语句类型;
3.2.4.3若tmp为赋值语句类型,则令变量vp为此赋值语句的左值,找到S中存在变量vp的所有代码语句,并将这些代码语句中未曾插入到集合P的所有代码语句插入到集合P中,转3.2.5;
3.2.5若集合P中元素个数为0,说明已经找到配置参数ci的全部数据流传播代码,令Mi=mi,转3.2.6;否则令mi=mi+1,转3.2.3;
3.2.6若i=I,说明对于所有配置参数已经完成数据流传播分析,转3.3;否则,将DFi插入到数据流传播代码集合DFS,令i=i+1,转3.2.2;
3.3将数据流传播代码集合DFS发送给控制流分析模块;
第四步,控制流分析模块从数据流分析模块接收DFS,利用DFS定位所有与目标配置参数集合中的目标配置参数之间存在控制流传播的代码基本块,得到代码基本块集合CFS,方法是:
4.1控制流分析模块读入用户输入的S,从数据流分析模块接收数据流传播的代码集合DFS。
4.2控制流分析模块利用S,对DFS中元素进行控制流传播分析,得到控制流传播的代码基本块集合CFS,CFS={CF1,CF2,...,CFi,...,CFI},其中CFi为配置参数ci的控制流传播的代码块基本集合,CFi={bt1,bt2,…,btwi,…,btWi},btwi为配置参数ci的第wi个控制流传播的代码基本块,Wi为ci的控制流传播的代码基本块总数,1≤wi≤Wi,控制流传播分析方法为:
4.2.1初始化控制流传播的代码基本块集合
Figure BDA0004138799480000101
i=1;
4.2.2初始化配置参数ci的控制流传播的代码块基本集合
Figure BDA0004138799480000102
4.2.3初始化mi=1;
4.2.4若DFi中的stmi为条件分支语句类型,则令代码基本块集合bps为条件分支语句stmi控制的代码基本块集合,bps={bp1,bp2,…,bpk,…,bpK},bpk为stmi控制的第k个代码基本块,K为集合bps的元素个数,1≤k≤K。将bps中所有元素插入到集合CFi中;
4.2.5若mi=Mi,说明已经找到配置参数ci的全部控制流传播的代码基本块,令Mi=mi,转4.2.6;否则令mi=mi+1,转4.2.4;
4.2.6若i=I,说明对于C中所有配置参数已经完成控制流传播分析,转4.3;否则,将CFi插入到CFS中,令i=i+1,转4.2.2;
4.3将控制流传播的代码基本块集合CFS发送给配置约束提取模块;
第五步,配置约束提取模块从数据流分析模块接收DFS,从控制流分析模块接收CFS,根据DFS和CFS提取配置参数的约束信息,得到配置参数的约束信息集合ConstraintSet,ConstraintSet={<c′1,cmp1,ct1>,<c′2,cmp2,ct2>,…,<c′r,cmpr,ctr>,…<c′R,cmpR,ctR>},其中,<c′r,cmpr,ctr>为三元组,代表ConstraintSet中第r个配置参数的约束信息,包含取值范围、数值依赖和控制依赖类型,R为ConstraintSet中配置约束个数,1≤r≤R。c′r为配置参数名,c′r属于目标配置参数集合C;ctr为常数或配置参数名;cmpr为逻辑判断符号,可选范围包括{>,≥,<,≤,=,≠,control},‘control’代表c′r与ctr存在控制依赖约束,其他逻辑判断符号代表c′r与ctr存在取值范围约束或数值依赖约束。提取配置约束过程需要从目标配置参数集合C中,依次枚举两个目标配置参数,方法为:
5.1初始
Figure BDA0004138799480000111
i=1,r=1;
5.2初始化j=1;
5.3若i=j,则转5.4分析配置参数ci的取值范围;否则,转5.5分析配置参数ci和cj的数值依赖和控制依赖;
5.4遍历DFi中的数据流传播代码,匹配配置参数ci的取值范围约束,方法为:
5.4.1初始化mi=1;
5.4.2若DFi中的stmi为条件分支语句,且stmi中存在与常数进行比较的判断表达式,则提取配置参数ci与此常数的判断表达式的逻辑判断符号cmp′和常数ct′,令c′r=ci,cmpr=cmp′,ctr=ct′,将<c′r,cmpr,ctr>插入到配置约束集合ConstraintSet中,令r=r+1。
5.4.3若mi=Mi,则说明检查完DFi中数据流传播代码,转5.7;否则,令mi=mi+1,转5.4.2;
5.5遍历DFi和DFj中的数据流传播代码,匹配配置参数ci和cj的数值依赖约束,方法为:
5.5.1初始化mi=1;
5.5.2初始化mj=1;
5.5.3若DFi中的stmi=stmj,且stmi为条件分支语句,则提取条件分支语句stmi中的逻辑判断符号cmp′,令c′r=ci,cmpr=cmp′,ctr=cj,将<c′r,cmpr,ctr>插入到配置约束集合ConstraintSet中,令r=r+1。
5.5.4若mj=Mj,说明检查完DFj中数据流传播代码,转5.5.5;否则,令mj=mj+1,转5.5.3;
5.5.5若mi=Mi,说明检查完DFi中数据流传播代码,转5.6;否则,令mi=mi+1,转5.5.2;
5.6遍历CFi中的控制流传播代码和DFj中的数据流传播代码,匹配配置参数ci和cj的控制依赖约束,方法为:
5.6.1初始化wi=1;
5.6.2初始化mj=1;
5.6.3若代码基本块btwi中包含代码语句stmj,令cr=ci,cmpr=‘control’,ctr=cj,
将配置参数的约束信息<cr,cmpr,ctr>插入到配置参数的约束信息集合ConstraintSet中,令r=r+1,转5.7;否则,转5.6.4继续匹配控制依赖约束;
5.6.4若mj=Mj,说明检查完DFj中数据流传播代码,转5.6.5;否则,令mj=mj+1,转5.6.3;
5.6.5若wi=Wi,则说明检查完CFi中控制流传播代码,转5.7;否则,令wi=wi+1,转5.6.2;
5.7若j=I,说明对于目标配置参数ci,约束提取模块已提取出所有的配置约束,转5.8;否则,令j=j+1,转5.3;
5.8若i=I,说明约束提取模块已遍历全部目标配置项,转5.9;否则令i=i+1,转5.2;
5.9将ConstraintSet发送给配置约束检查模块;
第六步,配置约束检查模块根据从配置约束提取模块接收的ConstraintSet,检查目标配置文件中的配置参数设置是否满足ConstraintSet中的约束,从而检测配置故障,得到存在错误设置的配置参数集合WC,方法为:
6.1配置约束检查模块从配置约束提取模块接收ConstraintSet;
6.2初始化变量r=1,初始化存在错误设置的配置参数集合
Figure BDA0004138799480000121
6.3配置约束检查模块从用户输入中读取目标配置文件,检查目标配置文件中是否存
在对名称为ConstraintSet中cr(的配置参数的设置,若存在,转6.4检查配置约束是否满足;否则转6.5;
6.4检查目标配置文件中名称为cr′的配置参数取值设置是否满足ConstraintSet中配置
约束<cr,cmpr,ctr>。若不满足,表明目标配置文件中存在违反配置约束的配置参数设置,说明S的配置文件中存在配置故障,将配置参数cr′插入到集合WC中,转6.5;若当前配置约束满足,则直接转6.5;
6.5若r=R,表明已全部检查完ConstraintSet,转6.6;否则,令r=r+1,转6.3;
6.6检查结束,输出存在错误设置的配置参数的集合WC。为了验证本发明提取配置约束的效果,在一台Ubuntu18.04操作系统,搭载8核Intel Core i7-9700K,32GB内存的计算机上开展本发明与背景技术的对比实验。主要编码语言为C++语言。实验选择MySQL、PostgreSQL、Vsftpd、OpenLDAP、Squid五款开源软件作为待检测软件(即软件源码S)进行评估,实验选择每个软件的配置文档中描述的配置参数作为目标配置参数,构成目标配置参数集合。由于背景技术一需要大量真实的配置文件样本,局限性较大且效果上不及背景技术二,因此仅和背景技术二进行比较。将软件源码S和目标配置参数集合作为输入,执行本发明步骤一到五,得到如表1所示的结果,本发明共提取出859个配置参数约束信息,在提取配置约束的个数比背景技术二多47个。
表1.本发明与背景技术二的提取配置约束能力对比
目标软件 本发明提取配置约束数量 背景技术二提取配置约束数量
MySQL 272 258
PostgreSQL 243 236
Vsftpd 158 153
OpenLDAP 27 22
Squid 159 143
总和 859 812
为了验证本发明检测配置故障的能力,实验对上述五款软件的每款软件人工生成10个存在错误配置参数设置的配置文件,作为目标配置文件,并执行本发明步骤六以检测人工生成的配置故障。结果如表2所示,本发明在50个人工生成的存在错误配置参数设置的目标配置文件中,可以发现94%(47/50)的错误设置的配置参数,背景技术二仅可发现88%(44/50)的错误设置的配置参数。
表2.本发明检测人工生成的配置故障能力
Figure BDA0004138799480000131
/>

Claims (5)

1.一种基于污点分析的软件配置故障检测方法,其特征在于包含以下步骤:
第一步:构建软件配置故障检测系统,软件配置故障检测系统由配置参数分析与定位模块、数据流分析模块、控制流分析模块、配置约束提取模块、配置约束检查模块组成;
配置参数分析与定位模块与数据流分析模块相连,从用户输入中读取待检测软件源码S和目标配置参数集合,利用S得到S中所有配置参数对应的程序变量,并定位配置变量在S中的使用位置,将配置变量在软件源码中的使用位置作为污点分析的入口,得到污点分析入口集合ES,将ES发送给数据流分析模块;
数据流分析模块与配置参数分析与定位模块、控制流分析模块、配置约束提取模块相连,从用户输入中读取S,从配置参数分析与定位模块中接收ES,利用ES定位S中与目标配置参数之间存在数据流传播的代码,得到代码集合DFS,将DFS发送给控制流分析模块和配置约束提取模块;
控制流分析模块与数据流分析模块、配置约束提取模块相连,从用户输入中读取S,从数据流分析模块接收DFS,利用DFS定位S中与目标配置参数之间存在控制流传播的代码基本块,得到代码基本块集合CFS,将CFS发送给配置约束提取模块;
配置约束提取模块与数据流分析模块、控制流流分析模块、配置约束检查模块相连,从数据流分析模块接收DFS,从控制流分析模块接收CFS,根据DFS和CFS提取配置参数的约束信息,得到配置参数的约束信息集合ConstraintSet,将ConstraintSet发送给配置约束检查模块;
配置约束检查模块与配置约束提取模块相连,接收用户输入的目标配置文件,从配置约束提取模块接收ConstraintSet,通过检查目标配置文件中的配置参数设置是否满足ConstraintSet中的配置参数的约束信息以检测目标配置文件的配置故障,得到存在错误设置的配置参数集合;
第二步,配置参数分析与定位模块利用S对目标配置参数集合中的目标配置参数进行分析定位,得到目标配置参数对应的程序变量以及在S的代码位置,将配置变量在S中的使用位置作为污点分析的入口,并把入口集合ES发送给数据流分析模块,方法是:
2.1配置参数分析与定位模块读入用户输入的待检测软件源码S和目标配置参数集合C,C={c1,c2,…,ci,…,cI},其中ci为C中第个i配置参数,其类型是常量字符串,I为集合中配置参数的总数,1≤i≤I;
2.2配置参数分析与定位模块分析C中I个目标配置参数的初始程序变量,由I个初始程序变量即I个配置变量构成配置变量集合VC,VC={vc1,vc2,…,vci,…,vcI},其中vci为配置参数ci对应的配置变量;
2.3配置参数分析与定位模块读取S中的每条代码语句,从S中筛选出存在VC中配置变量的语句,将所有存在配置变量的语句作为污点分析的入口,放到入口集合ES中,ES={E1,E2,…,Ei,…,EI},Ei为配置参数ci的入口集合,Ei={e1,e2,…,eni,…,eNi},Ni为配置参数ci所对应的代码定位入口个数,eni为集合Ei中第ni个入口代码,1≤ni≤Ni
2.4将ES发送给数据流分析模块;
第三步,数据流分析模块利用ES定位所有与目标配置参数集合中的目标配置参数之间存在数据流传播的代码,得到代码集合DFS,方法是:
3.1数据流分析模块读入用户输入的S,从配置参数分析与定位模块接收ES;
3.2数据流分析模块利用S,对ES中的入口代码进行数据流传播分析,得到数据流传播的代码集合DFS,DFS={DF1,DF2,...,DFi,...,DFI},其中DFi为配置参数ci的数据流传播代码集合,DFi={st1,st2,…,stmi,…,stMi},stmi为配置参数ci的第mi个数据流传播代码语句,Mi为ci的数据流传播代码语句总数,1≤mi≤Mi,数据流传播分析方法为:
3.2.1初始化数据流传播的代码集合
Figure FDA0004138799470000021
i=1;
3.2.2初始化配置参数ci的数据流传播代码集合
Figure FDA0004138799470000022
mi=1;令待分析的代码语句集合P=Ei
3.2.3取出集合P中第一个元素tmp,并将tmp从集合P中删除;令stmi=tmp,将stmi插入到集合DFi中;
3.2.4根据代码语句tmp的语句类型在源码S中找到tmp的数据流传播代码,并将数据流传播代码插入到集合P中;
3.2.5若集合P中元素个数为0,说明已经找到配置参数ci的全部数据流传播代码,令Mi=mi,转3.2.6;否则令mi=mi+1,转3.2.3;
3.2.6若i=I,说明对于所有配置参数已经完成数据流传播分析,转3.3;否则,将DFi插入到数据流传播代码集合DFS,令i=i+1,转3.2.2;
3.3将数据流传播代码集合DFS发送给控制流分析模块;
第四步,控制流分析模块从数据流分析模块接收DFS,利用DFS定位所有与目标配置参数集合中的目标配置参数之间存在控制流传播的代码基本块,得到代码基本块集合CFS,方法是:
4.1控制流分析模块读入用户输入的S,从数据流分析模块接收数据流传播的代码集合DFS;
4.2控制流分析模块利用S,对DFS中元素进行控制流传播分析,得到控制流传播的代码基本块集合CFS,CFS={CF1,CF2,...,CFi,...,CFI},其中CFi为配置参数ci的控制流传播的代码块基本集合,CFi={bt1,bt2,…,btwi,…,btWi},btwi为配置参数ci的第wi个控制流传播的代码基本块,Wi为ci的控制流传播的代码基本块总数,1≤wi≤Wi
4.3将控制流传播的代码基本块集合CFS发送给配置约束提取模块;
第五步,配置约束提取模块从数据流分析模块接收DFS,从控制流分析模块接收CFS,根据DFS和CFS提取配置参数的约束信息,得到配置参数的约束信息集合ConstraintSet,ConstraintSet={<c′1,cmp1,ct1>,<c′2,cmp2,ct2>,…,<c′r,cmpr,ctr>,…<c′R,cmpR,ctR>},其中,<c′r,cmpr,ctr>为三元组,代表ConstraintSet中第r个配置参数的约束信息,包含取值范围、数值依赖和控制依赖类型,R为ConstraintSet中配置约束个数,1≤r≤R;c′r为配置参数名,c′r属于目标配置参数集合C;ctr为常数或配置参数名;cmpr为逻辑判断符号,可选范围包括{>,≥,<,≤,=,≠,control},‘control’代表c′r与ctr存在控制依赖约束,其他逻辑判断符号代表c′r与ctr存在取值范围约束或数值依赖约束;提取配置约束过程需要从目标配置参数集合C中,依次枚举两个目标配置参数,方法为:
5.1初始
Figure FDA0004138799470000031
i=1,r=1;
5.2初始化j=1;
5.3若i=j,则转5.4分析配置参数ci的取值范围;否则,转5.5分析配置参数ci和cj的数值依赖和控制依赖;
5.4遍历DFi中的数据流传播代码,匹配配置参数ci的取值范围约束,方法为:
5.4.1初始化mi=1;
5.4.2若DFi中的stmi为条件分支语句,且stmi中存在与常数进行比较的判断表达式,则提取配置参数ci与此常数的判断表达式的逻辑判断符号cmp′和常数ct′,令c′r=ci,cmpr=cmp′,ctr=ct′,将<c′r,cmpr,ctr>插入到配置约束集合ConstraintSet中,令r=r+1;
5.4.3若mi=Mi,说明检查完DFi中数据流传播代码,转5.7;否则,令mi=mi+1,转5.4.2;
5.5遍历DFi和DFj中的数据流传播代码,匹配配置参数ci和cj的数值依赖约束,方法为:
5.5.1初始化mi=1;
5.5.2初始化mj=1;
5.5.3若DFi中的stmi=stmj,且stmi为条件分支语句,则取条件分支语句stmi中的逻辑判断符号cmp′,令c′r=ci,cmpr=cmp′,ctr=cj,将<c′r,cmpr,ctr>插入到配置约束集合ConstraintSet中,令r=r+1;
5.5.4若mj=Mj,说明检查完DFj中数据流传播代码,转5.5.5;否则,令mj=mj+1,转5.5.3;
5.5.5若mi=Mi,说明检查完DFi中数据流传播代码,转5.6;否则,令mi=mi+1,转5.5.2;
5.6遍历CFi中的控制流传播代码和DFj中的数据流传播代码,匹配配置参数ci和cj的控制依赖约束,方法为:
5.6.1初始化wi=1;
5.6.2初始化mj=1;
5.6.3若代码基本块btwi中包含代码语句stmj,令c′r=ci,cmpr=‘control’,ctr=cj,将配置参数的约束信息<c′r,cmpr,ctr>插入到配置参数的约束信息集合ConstraintSet中,令r=r+1,转5.7;否则,转5.6.4继续匹配控制依赖约束;
5.6.4若mj=Mj,说明检查完DFj中数据流传播代码,转5.6.5;否则,令mj=mj+1,转5.6.3;
5.6.5若wi=Wi,则说明检查完CFi中控制流传播代码,转5.7;否则,令wi=wi+1,转5.6.2;
5.7若j=I,说明对于目标配置参数ci,约束提取模块已提取出所有的配置约束,转5.8;否则,令j=j+1,转5.3;
5.8若i=I,说明约束提取模块已遍历全部目标配置项,转5.9;否则令i=i+1,转5.2;
5.9将ConstraintSet发送给配置约束检查模块;
第六步,配置约束检查模块根据从配置约束提取模块接收的ConstraintSet,检查目标配置文件中的配置参数设置是否满足ConstraintSet中的约束,从而检测配置故障,得到存在错误设置的配置参数集合WC,方法为:
6.1配置约束检查模块从配置约束提取模块接收ConstraintSet;
6.2初始化变量r=1,初始化存在错误设置的配置参数集合
Figure FDA0004138799470000042
6.3配置约束检查模块从用户输入中读取目标配置文件,检查目标配置文件中是否存′
在对名称为ConstraintSet中cr的配置参数的设置,若存在,转6.4检查配置约束是否满足;否则转6.5;
6.4检查目标配置文件中名称为cr′的配置参数取值设置是否满足ConstraintSet中配置′
约束<cr,cmpr,ctr>;若不满足,表明目标配置文件中存在违反配置约束的配置参数设置,说明S的配置文件中存在配置故障,将配置参数cr′插入到集合WC中,转6.5;若满足,则直接转6.5;
6.5若r=R,表明已全部检查完ConstraintSet,转6.6;否则,令r=r+1,转6.3;
6.6检查结束,输出存在错误设置的配置参数的集合WC。
2.如权利要求1所述的一种基于污点分析的软件配置故障检测方法,其特征在于2.2步所述配置参数分析与定位模块使用Confmapper算法分析C中I个目标配置参数的初始程序变量。
3.如权利要求1所述的一种基于污点分析的软件配置故障检测方法,其特征在于2.3步所述配置参数分析与定位模块从S中筛选出存在VC中配置变量的语句,将所有存在配置变量的语句作为污点分析的入口,放到入口集合ES中的方法是:
2.3.1初始化i=1;
2.3.2初始化
Figure FDA0004138799470000041
ni=1;
2.3.3遍历S中的每条代码语句,令其中任意一条代码语句为se,若se中存在变量vci,说明se为污点分析的入口代码,令eni=se,并将eni插入到Ei中,令ni=ni+1;直至遍历完S中的所有代码语句,此时令集合Ei中元素个数Ni=ni;将Ei插入到入口集合ES中;
2.3.4若i=I,说明VC中所有配置变量已经找到入口集合,得到ES,结束;否则,令i=i+1,转2.3.2。
4.如权利要求1所述的一种基于污点分析的软件配置故障检测方法,其特征在于3.2.4步所述根据代码语句tmp的语句类型在源码S中找到tmp的数据流传播代码,并将数据流传播代码插入到集合P中的方法是:
3.2.4.1若tmp为函数调用语句类型,则令变量vp为tmp中与配置参数ci对应的参数变量,从S中找到存在变量vp的所有代码语句,并将这些代码语句中未曾插入到集合P的所有代码语句插入到集合P中,结束;否则,转3.2.4.2分析其他语句类型;
3.2.4.2若tmp为函数返回语句类型,则令函数fp为tmp所在函数的函数名,找到S中将函数fp返回值做为右值的所有赋值语句,并将这些赋值语句中未曾插入到集合P的所有代码语句插入到集合P中,结束;否则,转3.2.4.3分析其他语句类型;
3.2.4.3若tmp为赋值语句类型,则令变量vp为此赋值语句的左值,找到S中存在变量vp的所有代码语句,并将这些代码语句中未曾插入到集合P的所有代码语句插入到集合P中,结束。
5.如权利要求1所述的一种基于污点分析的软件配置故障检测方法,其特征在于4.2步所述控制流分析模块利用S,对DFS中元素进行控制流传播分析,得到控制流传播的代码基本块集合CFS的方法是:
4.2.1初始化控制流传播的代码基本块集合
Figure FDA0004138799470000051
i=1;
4.2.2初始化配置参数ci的控制流传播的代码块基本集合
Figure FDA0004138799470000052
4.2.3初始化mi=1;
4.2.4若DFi中的stmi为条件分支语句类型,则令代码基本块集合bps为条件分支语句stmi控制的代码基本块集合,bps={bp1,bp2,…,bpk,…,bpK},bpk为stmi控制的第k个代码基本块,K为集合bps的元素个数,1≤k≤K;将bps中所有元素插入到集合CFi中;
4.2.5若mi=Mi,说明已经找到配置参数ci的全部控制流传播的代码基本块,令Mi=mi,转4.2.6;否则令mi=mi+1,转4.2.4;
4.2.6若i=I,说明对于C中所有配置参数已经完成控制流传播分析,结束;否则,将CFi插入到CFS中,令i=i+1,转4.2.2。
CN202310283135.2A 2023-03-22 2023-03-22 一种基于污点分析的软件配置故障检测方法 Active CN116303042B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310283135.2A CN116303042B (zh) 2023-03-22 2023-03-22 一种基于污点分析的软件配置故障检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310283135.2A CN116303042B (zh) 2023-03-22 2023-03-22 一种基于污点分析的软件配置故障检测方法

Publications (2)

Publication Number Publication Date
CN116303042A true CN116303042A (zh) 2023-06-23
CN116303042B CN116303042B (zh) 2023-09-12

Family

ID=86786785

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310283135.2A Active CN116303042B (zh) 2023-03-22 2023-03-22 一种基于污点分析的软件配置故障检测方法

Country Status (1)

Country Link
CN (1) CN116303042B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117111944A (zh) * 2023-10-23 2023-11-24 中国民用航空飞行学院 一种飞机性能软件用户ui交互底层机制设计方法及系统

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05176236A (ja) * 1991-12-20 1993-07-13 Sharp Corp Ccd撮像回路
US20120054553A1 (en) * 2010-09-01 2012-03-01 International Business Machines Corporation Fault localization using condition modeling and return value modeling
WO2017181628A1 (zh) * 2016-04-19 2017-10-26 西安交通大学 一种基于符号计算的动态并行程序污点分析方法
CN111782553A (zh) * 2020-08-08 2020-10-16 中国人民解放军国防科技大学 一种基于故障注入的软件反应缺陷分析方法
US11138063B1 (en) * 2020-07-07 2021-10-05 Ohio State Innovation Foundation Integrated system failure analysis software toolchain (IS-FAST)
CN114328208A (zh) * 2021-12-24 2022-04-12 中国电信股份有限公司 代码检测方法及装置、电子设备、存储介质
CN114462044A (zh) * 2021-12-30 2022-05-10 中国科学院信息工程研究所 一种基于污点分析的uefi固件漏洞静态检测方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05176236A (ja) * 1991-12-20 1993-07-13 Sharp Corp Ccd撮像回路
US20120054553A1 (en) * 2010-09-01 2012-03-01 International Business Machines Corporation Fault localization using condition modeling and return value modeling
WO2017181628A1 (zh) * 2016-04-19 2017-10-26 西安交通大学 一种基于符号计算的动态并行程序污点分析方法
US11138063B1 (en) * 2020-07-07 2021-10-05 Ohio State Innovation Foundation Integrated system failure analysis software toolchain (IS-FAST)
CN111782553A (zh) * 2020-08-08 2020-10-16 中国人民解放军国防科技大学 一种基于故障注入的软件反应缺陷分析方法
CN114328208A (zh) * 2021-12-24 2022-04-12 中国电信股份有限公司 代码检测方法及装置、电子设备、存储介质
CN114462044A (zh) * 2021-12-30 2022-05-10 中国科学院信息工程研究所 一种基于污点分析的uefi固件漏洞静态检测方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JINYU LIU,SHANSHAN LI等: "Identify error-handling code snippets in large-scale software", IEEE, pages 1 *
YIMFOREVER: "污点分析技术", pages 1, Retrieved from the Internet <URL:https://blog.csdn.net/weixin_44442186/article/details/123263226?> *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117111944A (zh) * 2023-10-23 2023-11-24 中国民用航空飞行学院 一种飞机性能软件用户ui交互底层机制设计方法及系统
CN117111944B (zh) * 2023-10-23 2024-01-09 中国民用航空飞行学院 一种飞机性能软件用户ui交互底层机制设计方法及系统

Also Published As

Publication number Publication date
CN116303042B (zh) 2023-09-12

Similar Documents

Publication Publication Date Title
CN103942143B (zh) 一种基于版本库比较的PC‑Lint代码检查结果筛选方法
CN114579380B (zh) 一种计算机系统故障的人工智能检测系统及方法
CN105068925A (zh) 软件安全缺陷发现系统
CN116303042B (zh) 一种基于污点分析的软件配置故障检测方法
CN108733404B (zh) 一种针对fpga固件的精准逆向工程方法
WO2021174812A1 (zh) 用于画像的数据的清洗方法、装置、介质及电子设备
CN107862327B (zh) 一种基于多特征的安全缺陷识别系统和方法
CN112966583A (zh) 图像处理方法、装置、计算机设备和存储介质
JP6486574B2 (ja) プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム
CN115146282A (zh) 基于ast的源代码异常检测方法及其装置
CN103914374A (zh) 基于程序切片和频繁模式提取的代码缺陷检测方法及装置
CN112115053A (zh) 基于序列模式匹配的api误用缺陷检测方法
CN107169362A (zh) 基于自动化识别驱动参数辅助内核漏洞挖掘的方法
US11645192B2 (en) Graph-based method for inductive bug localization
WO2023067668A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
CN109086202B (zh) 基于关联规则的fpga/ip核代码规则检查方法
CN115454826A (zh) 回归测试方法、装置、电子设备以及存储介质
CN110134435A (zh) 一种代码修复案例获取方法、装置、设备及存储介质
CN113342632A (zh) 仿真数据自动化处理方法、装置、电子设备及存储介质
CN113032269A (zh) 智能设计数据的测试方法、装置、存储介质和电子设备
US7689399B1 (en) Automatic extraction of design properties
CN117973285B (zh) 一种后硅电路异常的深度测试方法、装置及计算设备
Xiong et al. A Multi-code Representation Fusion Smart Contract Vulnerability Line Detection Method Based on Graph Neural Network
CN111078538B (zh) 基于jmh的规则自动化测试的方法
WO2024079803A1 (ja) 脆弱性発見装置、脆弱性発見方法及び脆弱性発見プログラム

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