CN109426722A - Sql注入缺陷检测方法、系统、设备及存储介质 - Google Patents

Sql注入缺陷检测方法、系统、设备及存储介质 Download PDF

Info

Publication number
CN109426722A
CN109426722A CN201811015751.5A CN201811015751A CN109426722A CN 109426722 A CN109426722 A CN 109426722A CN 201811015751 A CN201811015751 A CN 201811015751A CN 109426722 A CN109426722 A CN 109426722A
Authority
CN
China
Prior art keywords
function
node
abstract
input
path
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
CN201811015751.5A
Other languages
English (en)
Other versions
CN109426722B (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.)
Shenzhen Yuanumbrella New Technology Co Ltd
Original Assignee
Shenzhen Yuanumbrella New Technology Co Ltd
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 Shenzhen Yuanumbrella New Technology Co Ltd filed Critical Shenzhen Yuanumbrella New Technology Co Ltd
Publication of CN109426722A publication Critical patent/CN109426722A/zh
Application granted granted Critical
Publication of CN109426722B publication Critical patent/CN109426722B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • 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
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • 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
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • 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
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种SQL注入缺陷检测方法、系统、设备及存储介质,所述方法包括:输入待检测的程序;生成待检测的程序中各个函数的符号表达式图,符号表达式图包括节点和连接节点的边,节点包括值节点和运算符节点,边包括数据依赖性边和控制依赖性边,其中,数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,控制依赖性边是当存在限定变量的条件时将变量连接到条件的有方向性的边;以及检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,如果是,则发现SQL注入缺陷。本发明通过符号表达式图中路径和路径约束条件的判断,能够高效地检测SQL注入缺陷。

Description

SQL注入缺陷检测方法、系统、设备及存储介质
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种SQL注入缺陷检测方法、系统、设备及存储介质。
背景技术
SQL(Structured Query Language,结构化查询语言)注入(SQL Injection)是一种代码注入技术,用于攻击数据驱动的应用程序,其中恶意的SQL语句被插入到输入字段中从而被恶意执行。
SQL注入缺陷在SQL查询的元素源自不可信源的应用程序中出现。如果没有预防措施,不可信数据可能会恶意更改查询,导致信息泄漏或数据修改。
SQL注入缺陷最早在2000年左右被提出,其后学者们对SQL注入的检测和防护展开了一系列的研究。
典型的一种SQL注入例子如下:
(1)用户登录Web应用系统时,需要进行身份认证,主要输入用户名和密码两个变量v_usr和v_pwd;
(2)Web系统执行合法性检查的SQL语句为:
“Select*from users where username=‘”+v_usr+“’and password=‘”+v_pwd+“’”,如果用户登录时用户取为‘admin’or 1=1--,那么合法性检查的SQL语句等效于Select*from users where username=‘admin’or 1=1;
显然,用户名取‘admin’or 1=1--时,无论密码输入多少,都可以登录系统。
SQL注入缺陷的检测和防护方式目前主要有两大类,一是系统上线前检测,也称为静态检测;二是系统在线运行防御,也称为动态检测。
动态检测方式是一种黑盒检测方法,对上线的系统进行SQL注入缺陷扫描,编制SQL注入攻击脚本对Web系统进行试探,通过检查Http的回应报文内容来判断是否发生SQL注入攻击,从而确定是否存在SQL注入漏洞。AppScan等工具可执行此类安全检测。一篇参考文献:
GOULD C,SU Z,DEVANBU P.JDBC checker:a static analysis tool fo r SQL/JDBC applications[C].Proceeding of the 26th International conference onSoftware Engineering(ICSE).Washington D C:IEEE computer Society,2004以及另一篇参考文献:
GOULD C,SU Z,DEVANBU P.Static checking of dynamically generat edqueries in database applications[C].Proceedings of 26th International Conference on Software Engineering,2004给出了一种动态生成SQL语句进行类型正确性检查的方法来检测是否存在SQL注入,该方法的的缺点在于只能检测句法结构或语句类型出现异常的SQL注入问题。
静态检测方法是一种白盒检测方法,通过静态语法解析查找Web应用代码中可能引发SQL注入的环节,在Web应用发布前检查代码质量。Fortify等工具可执行此类安全检测。静态检测方法可以参照参考文献:
WILLIAM G J,VIEGAS H J,ORSO A.A classification of SQL injectio nattacks and countermeasures[C].Proc.of International Symposium on Secur eSoftware Engineering.2006。此外,参考文献:
WASSERMANN G,SU Z.An analysis framework for security in Web applications[C].Proceedings of the FSE Work shop on Specification and Verification of Component Based System,2004提出一种自动推理机的方法对添加了输入值后的SQL语句进行检查,该方法的缺点在于只能检测出重言式的SQL注入攻击。此外,还有一些学者采用机器学习算法对SQL注入缺陷进行检测,这一类检测方法的检测率和误报率往往依赖于训练集的大小,机器学习算法检测的方法可以参考文献:
HUANG Y W,HUANG S K,LIN T P,et al.Web application security assessment by fault injection and behavior monitoring[C].Porceeding of the 11th International World Wide Conferecne,2002。
因此,需要提出一种有效的SQL注入缺陷检测的方案。
发明内容
针对现有技术中的问题,本发明的目的在于提供一种SQL注入缺陷检测方法、系统、设备及存储介质,通过符号表达式图中路径和路径约束条件的判断,能够高效地检测SQL注入缺陷。
本发明实施例提供一种SQL注入缺陷检测方法,所述方法包括如下步骤:
输入待检测的程序;
生成待检测的程序中各个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有方向性的边;以及
检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,如果是,则发现SQL注入缺陷。
可选地,所述检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,包括如下步骤:
对于各个函数的符号表达式图,从用户输入节点开始对所述符号表达式图进行逆向的深度优先遍历;
遍历到达查询语句节点时,根据所述控制依赖性边查找用户输入节点到查询语句节点之间的路径约束条件,并判断路径约束条件是否均满足,如果是,则发现SQL注入缺陷。
可选地,所述方法还包括如下步骤:
生成各个函数的函数摘要,所述函数摘要包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
可选地,对于一函数的符号表达式图,如果存在从用户输入节点到查询语句节点的路径,则该函数的函数摘要还包括输入摘要、输出摘要和传递摘要,其中:
所述输入摘要包括函数输入到查询语句节点的摘要;
所述输出摘要包括用户输入节点到函数输出的摘要;
所述传递摘要包括函数输入到用户输入节点的摘要。
可选地,判断路径约束条件是否均满足,包括如下步骤:
判断当前检测函数中从用户输入节点到查询语句节点之间的路径中是否存在被调函数;
如果是,则将所述被调函数的函数摘要嵌入当前检测函数的符号表达式图,判断当前检测函数中与该被调函数对应的路径约束条件是否满足。
可选地,生成待检测的程序中各个函数的符号表达式图,包括如下步骤:
从所述待检测的程序的底层函数依次向上层函数建立各个函数的符号表达式图;
检测各个函数的符号表达式图时,从底层函数依次向上层函数检测,并从底层函数依次向上层函数生成函数摘要;
检测上层函数的符号表达式图时,将该上层函数的下层函数的函数摘要嵌入该上层函数的符号表达式图中。
可选地,所述输入摘要包括函数输入、函数输入节点到查询语句节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;
所述输出摘要包括用户输入、用户输入节点到函数输出节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;
所述传递摘要包括函数输入、函数输入节点到用户输入节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息。
可选地,所述输入摘要的检查器特定信息包括函数输入节点到查询语句节点的路径约束的判断条件,分析结果报告是函数输入节点到查询语句节点之间路径约束是否满足的结果报告,生成报告摘要的相应描述是函数输入节点到查询语句节点之间路径的追溯摘要;
所述输出摘要的检查器特定信息包括用户输入节点到函数输出节点之间路径约束的判断条件,分析结果报告是用户输入节点到函数输出节点之间路径约束是否满足的结果报告,生成报告摘要的相应描述是用户输入节点到函数输出节点之间路径的追溯摘要;
所述传递摘要的检查器特定信息包括函数输入节点到用户输入节点之间路径约束的判断条件,分析结果报告是函数输入节点到用户输入节点之间路径约束是否满足的结果报告,生成报告摘要的相应描述是函数输入节点到用户输入节点之间路径的追溯摘要。
可选地,所述值节点包括终端值节点和非终端值节点,所述终端值节点表示当前函数外生成的未知的值或常量,所述非终端值节点包括当前函数内生成的值。
可选地,所述控制依赖性边指向的一侧为逻辑运算的运算符或布尔值节点。
可选地,用真和假来标记所述控制依赖性边,以表明逻辑运算的所需的结果。
可选地,所述生成待检测的程序中各个函数的符号表达式图之前,还包括如下步骤:
展开所述待检测的程序中的循环。
本发明实施例还提供一种SQL注入缺陷检测系统,应用于所述的SQL注入缺陷检测方法,所述系统包括:
程序输入模块,用于输入待检测的程序;
符号表达式图生成模块,用于生成待检测的程序中各个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,值节点表示,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有方向性的边;以及
缺陷检测模块,用于检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,如果是,则发现SQL注入缺陷。
可选地,所述系统还包括:
摘要生成模块,用于生成各个函数的函数摘要,所述函数摘要包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
可选地,对于一函数的符号表达式图,如果存在从用户输入节点到查询语句节点的路径,则该函数的函数摘要还包括输入摘要、输出摘要和传递摘要,其中:
所述输入摘要包括函数输入到查询语句节点的摘要;
所述输出摘要包括用户输入节点到函数输出的摘要;
所述传递摘要包括函数输入到用户输入节点的摘要。
可选地,所述缺陷检测模块采用如下步骤判断路径约束条件是否均满足:
判断当前检测函数中从用户输入节点到查询语句节点之间的路径约束条件中是否存在被调函数;
如果是,则将所述被调函数的函数摘要嵌入当前检测函数,判断当前检测函数中与该被调函数对应的路径约束条件是否满足。
本发明实施例还提供一种SQL注入缺陷检测设备,包括:
处理器;
存储器,其中存储有所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行所述的SQL注入缺陷检测方法的步骤。
本发明实施例还提供一种计算机可读存储介质,用于存储程序,所述程序被执行时实现所述的SQL注入缺陷检测方法的步骤。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
本发明所提供的SQL注入缺陷检测方法、系统、设备及存储介质具有下列优点:
本发明提出了一种生成符号表达式图和根据符号表达式图完成SQL注入缺陷检测的方案,首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,根据控制依赖性边寻找路径约束条件并判断路径约束条件是否均可以满足,从而通过符号表达式图中路径和路径约束条件的判断,能够高效地检测SQL注入缺陷。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显。
图1示出了本发明的SQL注入缺陷检测方法的流程图;
图2A-2B示出了本发明一实施例的预建模阶段中展开循环的一个例子;
图3示出了一端示例代码及其未修剪的HSSA形式;
图4示出了根据本发明一实施例生成的示例性的SEG;
图5A-5D示出了本发明一实施例的生成符号表达式图的过程;
图6A-6C示出了本发明一实施例的生成符号表达式图用于SQL缺陷检测的示意图;
图7是本发明一实施例的SQL注入缺陷检测系统的结构示意图;
图8是本发明一实施例的SQL注入缺陷检测设备的结构示意图;
图9是本发明一实施例的计算机可读存储介质的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
如下以一个SQL注入缺陷检测的实例来进行说明。下面是一段使用释放后的内存代码片段:
在该代码中,这里第33行生成了一个SQL查询语句,给定用户名和密码,查询用户的信息,然而用户输入的username可能是恶意输入,可能是”username or(false”.密码输入”xxx)”这样拼装出来的查询语句就是"select*from db_user where username=USERNAME or(false and password=xxx)",这样就完全避开了密码检测,产生数据泄露等安全问题。
下面是一段修复后的使用释放后的内存代码片段:
该修复示例使用参数查询,字符作为参数的占位符,还会验证用户名参数的长度,防止攻击者提交任意长的用户名。使用PreparedStatement类的`set*()`方法来执行强类型检查。此技术可缓解SQL注入漏洞,因为输入可通过双引号内的自动陷入正确转义。然而采用该技术,需要修改程序源代码,操作十分麻烦,并且不能完全杜绝SQL注入攻击。
为了解决现有技术中的问题,本发明提供了一种SQL注入检测方法。如图1所示,本发明一实施例的SQL注入检测方法包括如下步骤:
S100:输入待检测的程序;
S200:生成待检测的程序中各个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有方向性的边;以及
S300:检测当前检测函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径,如果是,则继续步骤S400,否则继续步骤S600;
S400:判断从用户输入节点到查询语句节点之间的路径的路径约束条件是否满足,如果是,则继续步骤S500,否则继续步骤S600;
S500:判定发现SQL注入缺陷,可以生成错误报告。
S600:选择下一函数作为当前检测函数,继续步骤S300。
因此,本发明首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,根据控制依赖性边寻找路径约束条件并判断路径约束条件是否均可以满足,从而通过符号表达式图中路径和路径约束条件的判断,能够高效地检测SQL注入缺陷。
在该实施例中,所述检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,包括如下步骤:
对于各个函数的符号表达式图,从用户输入节点开始对所述符号表达式图进行逆向的深度优先遍历;
遍历到达查询语句节点时,根据所述控制依赖性边查找用户输入节点到查询语句节点之间的路径约束条件,并判断路径约束条件是否均满足,如果是,则发现SQL注入缺陷。
深度优先搜索,是图论中的经典算法。它的思想是:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
下面先介绍一下本发明的检测方法的具体思路。
(1)Source-sink问题描述
为了简化问题并清楚地描述本发明的主要思路,此处首先以单个函数的项目为例。下面给出source-sink问题的定义。
定义1:首先给出source(数据流的来源)和sink(数据流入的对象)两个声明,记为src和sink,source-sink问题指的就是由src产生或使用的一个动态值是否在运行时间内可以流入sink中。
本发明解决source-sink最基本的思想是下面的步骤:
(1)追踪可以传播到src中的值v_src。换句话说,此步的目标是通过沿着SEG图的边,反向搜索那些是v_src别名的值。为了减少解释,我们用v_pro去指示一个目标值。对于每一个v_pro,我们可以构造一个从v_pro到v_src的路径p1。
(2)追踪第一步得到的值v_pro是否可以在sink传播到值v_sink。这样做,不管我们在第一步何时得到值v_pro,我们都可以遍历v_pro的后代顶点来追踪它的传播。如果在遍历中我们可以到达v_sink,我们就构建一个从v_pro到v_sink的路径p2。
如果可以在第一步和第二步的描述中找出路径p1和p2,这就说明v_src和v_sink是v_pro的别名。判断v_src是否可以流入v_sink,只需要检查p1和p2两个路径条件是不是可以同时被满足。因此,首先收集p1和p2的路径条件,然后使用一个约束求解器去解决两个路径条件的结合。
在实际应用中,从v_src到v_pro之间的路径中可以存在不止一个v_pro,可以有多个v_pro,相当于路径被各个v_pro分段,每段有一个路径约束条件,如果要v_src和v_pro之间的路径是连通的,则每一段的路径约束条件都要满足。
上述内容解释了在只有一个函数的项目中是如何解决source-sink问题的。在现实的实例中,一个项目通常有很多函数。这就需要在程序间进行项目的分析。为了追踪函数间值的传播,提出通过聚集不同函数SEG图的跨过程分析。
(2)摘要的表示、生成和应用
本发明将每个函数的摘要表示为一组摘要项目。一个摘要项目代表了目标函数受到其调用的单一影响,或者是目标函数对其调用者的单一影响。
摘要项分为两大类:符号摘要(Symbolic Summary)和检查器定制摘要(checker-specific summary)。对于一个调用函数,所有检查器的符号摘要是不变的,用来记录这个函数值的变化,但是每一个检查器的检查器定制摘要会不一样,这个就由检查器自身的特征决定要关注的约束。检查器定制摘要又分为输入摘要(input summary)、输出摘要(output summary)和传递摘要(wrapper summary)。
以下是不同的摘要项的说明:
符号摘要:值如何在目标函数中进行变化的一个摘要,是从函数参数到返回值的值的摘要。它由输入,输出,约束集合三部分组成。
输入摘要:函数中分析结果的摘要,它取决于调用者的输入,是从函数参数到v_sink的值的摘要。输入摘要分为输入、约束、分析结果的报告、生成报告摘要的相应描述(trace)、检查器特定信息(checker specific information)五部分组成。
输出摘要:该函数可能影响其调用者的摘要,输出摘要是从source到return值的摘要。输出摘要是由输入,约束,生成报告的摘要的相应描述(例如trace),检查器特定信息(checker specific information)四部分组成,它是分析的一部分但不加入路径验证。对于目标函数调用者的每个不同效果,本发明创建一个单独的输出摘要。
传递摘要:是从函数参数到source的一个摘要。对于SQL注入问题,由于没有return值,注入这一状态也不能作为输入,因此,在该实施例中,进一步引入一个传递摘要,与输入、输出摘要共同作为检查器定制摘要。
因此,在该实施例中,进一步地,所述SQL注入缺陷检测方法还包括如下步骤:
生成各个函数的函数摘要,所述函数摘要包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
在该实施例中,将用户输入节点作为source节点,将查询语句节点作为sink节点,对于一函数的符号表达式图,如果存在从用户输入节点到查询语句节点的路径,则该函数的函数摘要还进一步包括输入摘要、输出摘要和传递摘要,其中:
所述输入摘要包括函数输入到查询语句节点的摘要;
所述输出摘要包括用户输入节点到函数输出的摘要;
所述传递摘要包括函数输入到用户输入节点的摘要。
在该实施例中,判断路径约束条件是否均满足,包括如下步骤:
判断当前检测函数中从用户输入节点到查询语句节点之间的路径中是否存在被调函数;
如果是,则将所述被调函数的函数摘要嵌入当前检测函数的符号表达式图,判断当前检测函数中与该被调函数对应的路径约束条件是否满足。
在该实施例中,生成待检测的程序中各个函数的符号表达式图,包括如下步骤:
从所述待检测的程序的底层函数依次向上层函数建立各个函数的符号表达式图;
检测各个函数的符号表达式图时,从底层函数依次向上层函数检测,并从底层函数依次向上层函数生成函数摘要;
检测上层函数的符号表达式图时,将该上层函数的下层函数的函数摘要嵌入该上层函数的符号表达式图中。
在符号表达式图中,一个函数可能同时作为另一个函数的被调函数,也可能需要调用再一个函数,被其他函数调用,而不调用其他函数的函数是最底层函数,调用其他函数而不被其他函数调用的函数是最顶层函数。从最底层函数到最顶层函数,函数层级关系依次向上建立。在判断上层函数中路径约束条件是否满足时,如果路径中存在其下层函数,则需要嵌入下层函数的函数摘要,才能判断路径约束条件是否满足。
在该实施例中,所述输入摘要包括函数输入、函数输入节点到查询语句节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;其中,检查器特定信息指的是在输入摘要中的约束是否满足的判断条件,分析结果报告指的是约束是否满足的结果,生成报告摘要的相应描述可以包括函数输入节点到查询语句节点之间路径的追溯摘要。
所述输出摘要包括用户输入、用户输入节点到函数输出节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;其中,检查器特定信息指的是输出摘要中的约束是否满足的判断条件,分析结果报告指的是输出摘要中约束是否满足的判断结果,生成报告摘要的相应描述可以包括用户输入节点到函数输出节点之间路径的追溯摘要。
所述传递摘要包括函数输入、函数输入节点到用户输入节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;其中,检查器特定信息可以包括传递摘要中的约束是否满足的判断条件,分析结果报告指的是传递摘要中约束是否满足的判断条件,生成报告摘要的相应描述可以包括函数输入节点到用户输入节点之间路径的追溯摘要。
在该实施例中,所述值节点包括终端值节点和非终端值节点,所述终端值节点表示当前函数外生成的未知的值或常量,所述非终端值节点包括当前函数内生成的值。所述控制依赖性边指向的一侧为逻辑运算的运算符或布尔值节点;用真和假来标记所述控制依赖性边,以表明逻辑运算的所需的结果。
在该实施例中,所述生成待检测的程序中各个函数的符号表达式图之前,还包括如下步骤:对待检测的程序进行预处理,具体包括展开所述待检测的程序中的循环。
下面,结合附图简要介绍本发明提出的SQL注入缺陷检测方法的总体框架。该算法主要包括四个阶段:预建模(Pre-model)、先决分析(Prerequisite Analysis)、后建模(Post-model)和缺陷分析(Defect analysis)。
在预建模阶段,主要从输入的程序中消除不感兴趣的结构,以简化后续分析。例如,循环展开、循环打破等都是在这个阶段执行的。
接下来,在先决分析阶段,计算基本信息,特别是该阶段的后续分析中所需的整个程序信息。根据先决分析结果,生成调用图。调用图是本领域中常用的用来描述程序结构的图,这里不再详述。
接着,在后建模阶段,使用先决分析阶段生成的调用图来进一步简化代码,并更新程序信息。例如,标记调用图中形成SCC(强连通分量)的调用边,以便将来在不必进入循环的情况下,就能够对调用图中的迭代进行分析。
最后,在缺陷分析阶段,主要算法是符号值流分析(SVFA),生成函数摘要信息,以完成函数内分析。此时,这些指针的值仍然是未知的。对符号指针表示图(SPEG)IR(中间语言)执行SVFA,其中SPEG IR对点对关系(左值依赖)和变量的符号值(右值依赖)一起进行建模,可得到符号表达式图(SEG)。下面将更加详细地描述SEG的生成过程和利用SEG进行缺陷检测的方法。
本发明中提出的SEG能够紧凑地将每个变量的值表示为外部存储器位置的变量的逻辑和算数表达式,例如,参数、全局变量和通过参数和全局变量可达的堆位置。SEG是一种有向无环图(简称DAG),是对所有变量的一种完整SSA表示。通过前向路径敏感的分析,从下向上构建SEG,因此可以递增地评估SAT查询。还因为SEG的DAG性质,我们可以将特定的SEG子图替换为常数表示以加速约束解析。
使用SEG的流水线工作流程是非常灵活的,我们可以简单地添加更多阶段来实现特定功能。例如,将来我们可以将分析过程分阶段化,逐渐使用更准确的分析来细化错误报告。每个分析阶段仅验证来自上一个阶段的错误候选者。此处可以通过在预建模阶段和缺陷分析阶段之间添加一组阶段来实现这种功能。
下面将介绍每个阶段中实现的主要算法,并重点介绍符号值流分析(SVFA)。应理解,本文中提供的实例和细节仅是为了帮助理解,而不以任何方式对本发明的范围构成限制。
预建模阶段
在预建模阶段,例如,可使用开源的LLVM转换来对程序进行建模。表1示出了这里使用的LLVM转换流程的完整列表。
表1
在该阶段中,主要任务是展开和打破所有的循环,根据循环嵌套结构,从内环到外环。近似循环对于有界模型检查至关重要,展开循环是最简单也是最粗暴的方式。在图2A和2B中示出了展开循环的一个例子。
图2A示出了展开循环之前的循环,该循环为规范的形式:该循环具有预读头部(Pre-header),并且只有一个调用锁存的节点能够返回到头部(header)。虚线箭头将循环内部存在的节点连接到循环外部的退出节点(exit node),并且所有退出节点都被布置了足够的φ函数,以保护来自循环的定义。当然,虚线箭头表示该条边并不存在。通过首先复制循环体(loop body)K次,然后为克隆的变量更新定义-使用(def-use)关系,来执行展开循环K次。
图2B示出了将图2A中的循环展开两次的结果,即,复制了两次。我们对代码执行三种类型的更新。首先,将来自第i个循环的锁存(latch)复制到第i+1个循环的头部,为所有头部复制和更新φ函数。其次,将新的值插入被克隆的变量的退出节点的φ函数中。接下来,从头部的锁存去除后边缘。这时,如果锁存不能退出循环,则变为悬挂节点,我们为锁存附加一个不可达的指令,并依赖死代码消除来清理无用的变量。
先决分析阶段
该阶段主要设置来收集全局程序信息。要收集的非常基本的信息是调用图。我们使用传统指针分析方法来计算调用图,这里不再描述其细节。然而,我们仅使用自下向上的方法,这对于生成调用图是至关重要的,因为自上向下的方法速度过慢。
后建模阶段
我们在先决分析之后插入另一个编码建模阶段,提供进一步简化的代码在缺陷分析阶段使用。在该阶段执行的所有算法都是响应于全局程序信息的更新,如果该信息有改变的话。在后建模阶段,不仅可以实现调用图SCC标记分析,如上文所述,标记在调用图中形成循环的后沿,还可以通过缺陷分析来利用这些信息来计算循环中函数的有界分析结果。可选地,还可以在该阶段增加其他重要的变换,如,常数传播(constant propagation)等。
缺陷分析阶段
<Type(τ)>::=bool|int|{(f1,τ1),...,(fn,τn)}|τ[]|τ*
<Obj(o)>::=v|{(f1,o1),...,(fn,on)}
<Deref(m)>::=*v|v→f1.f2...fn
<Expr(e)>::=null|const(n,τ)|unknown(τ)|parm(τ)|global(τ)
|&o|&m|new...
|o|m|e1binop e2|-e|(τ)e
<Cond(c)>::=false|true|!c|c1 and c2|c1 or c2|v1 comp v2
<Stmt(s)>::=o←e|m←o|ite(c,Label-T,Label-F)|assert(c)|assume(c)
<binop>::={+,-,×,/,mod,band,bor,bxor}
<comp>::={=,<,≥,>,≤,≠}
在该实施例中,缺陷分析的算法设计如下:
该示例性算法的源代码的语法定义如上所示,其中ite是if-then-else的缩写。该算法的第一条规则定义了该算法建模的类型,支持两种元素类型:布尔型和整型。在基本类型的基础上定义了C结构(C struct)、数组(array)和指针(pointer)等复合类型。应注意,当前算法中没有对浮点算术进行建模,尽管约束求解器Z3已经添加了对浮点数的支持。所有浮动变量都可以转换为整数变量,并将其整数值建模为未知数。
其余规则定义了变量和变量组成的表达式。具体来说,该算法支持多步指针表达式v→f1.f2...fn,为未初始化变量和浮动变量建模的unknown值,函数参数的parm值,以及全局变量的global值。由于LLVM通过插入临时变量将长表达式转化为短表达式,因此,在此基础上,还可以将存储和加载语句写为*(p+f)=v和v=*(p+f),其中f是基本指针p的偏移量。
下面,将结合实例介绍缺陷检测方法。
程序内分析通过执行价值流分析(value flow analysis),在函数内查找相关缺陷。
价值流分析
下面给出示例性的价值流分析(VFA)的抽象域定义:
Local+parameter variables
Global variables
Abstract objects(new’ed memory)
C:Path conditions
Abstract values
δ:
ψ:
VFA的任务是计算一个抽象存储位置可能具有的抽象值集合,即,如上所示的δ函数。抽象值是分析涉及的具体值的抽象表示。VFA还计算抽象位置具有给定的抽象值时的条件。计算结果被表示为函数。为了简单起见,我们还将条件位置值对写为其中并且
作为例子,我们可以选择SSA作为制定VFA的开始,因为SSA能够支持稀疏分析,从而可以显着提高分析性能。然而,由LLVM构建的SSA只是转换了顶级变量,即,那些没有被指针指向的变量。堆内存位置也被LLVM忽略,因此堆内存位置之间的值流是不清楚的。因此,尝试解析指针表达式来构造一个完全编码所有内存位置的def-use关系的SSA形式。
这里的核心问题是分解负载和存储语句。假设指针p指向在可能的混叠分析阶段获得的对象o1,o2,…,ok,则一个直接的因式分解方法是:
对于*(p+f)=v,可以用对象字段的一组直接赋值来替换它:o1.f=v,o2.f=v,...,ok.f=v。
对于v=*(p+f),可以用赋值v=χ(o1.f,o2.f,…,ok.f)替换它。函数χ表示其参数之一可以赋值给v。
对象字段的因式分配由其原始指针表达式来注释,我们将访问这些表达式,以进行空指针引用检查。我们将数组建模为单个单元,因此,数组的每个加载和存储将被重定向到该单个单元。在完成对存储和加载的翻译之后,恢复对变量的所有可能的赋值。然后,我们运行标准的SSA构造算法来插入对象域的φ函数。所得到的IR称为完全基于堆的SSA(HSSA)。HSSA的一个例子如图3所示,在下文中将结合这个例子继续解释本发明的原理。
图3示出了一段示例代码及其未修剪的HSSA形式。
接下来,我们将图3所示的HSSA IR转换成图形形式,揭示价值计算结构,如,在抽象语法树中。我们称之为图形表示符号表达式(SEG)。SEG是本发明提出的一种全新的数据结构。
图4示出了根据本发明的一个实施例生成的示例性的SEG。其中,灰色椭圆形节点表示终端值,未着色的椭圆形节点表示非终端值。实线和虚线代表数据和控制依赖性边。每个非终端值附加到控制依赖性边,以表示该值有效的条件。控制依赖性边的标签代表我们对条件的期望。为了清楚起见,忽略标记为true的控件依赖性边。在图4中,运算符用矩形灰色节点表示。
形式上,SEG是一个4元组(V,O,D,C)。
其中,V是一组值节点,节点的值分为终端值和非终端值。终端值表示在此函数之外生成的未知值。在该设计中,此函数可访问的参数、全局变量和堆位置的值是终端值,它们表示为图4底部的灰色节点。图4中的椭圆形节点是非终端值,表示在此过程中生成的值。由于SEG的SSA性质,我们还将唯一的内存位置与每个非终端值相关联,以将该值命名。
O表示该算法中定义的所有运算符的运算符节点集合。
D是一组数据依赖性边,在图4中以实线表示。
C是一组控制依赖性边,在图4中以虚线表示。箭头侧的节点必须是逻辑运算的运算符节点。此处还用true或false来注释边,以表示逻辑运算的所需结果。
终端值的集合也称为接口对象(IO),它们的正式定义如下:
<PIO>::=parmi|global
<IO>::=PIO|*IO|IO→f|IO.f
其中,PIO表示主接口对象。在PIO的语法中,parami是函数的第i个参数,global是全局变量。IO的递归部分是通过以PIO作为根的指针取解引用可访问的存储器位置,例如,<o1.f>0和<o2.f>0。在当前的算法中,我们将IO的值视为符号值,而不会跟踪全局信息流。
如下所示的算法1给出了构建SEG的伪代码。
该算法以反向顺序(RPO)迭代基本块。对于每个基本块B,我们首先构建其路径条件其是对于来自的所有路径p的路径约束C(p)的分离。然而,这种路径条件可能非常冗长。压缩路径条件的想法是以递归形式重写其定义:pc(B)=pc(Bif)∧C(Bif→B),其中Bif是B的控制依赖基本块,C(Bif→B)是使程序执行从Bif到B的条件。在算法1中,函数GetBBCond(b)返回一对值(l,cin),其中l是true或false标签,cin是B所依赖于的if条件。可以使用控制依赖图来容易地实现GetBBCond函数。
接下来,我们按顺序对每个基本块中的语句进行符号评估,并调用函数FindCreateExpr来逐步构建SEG。FindCreateExpr接受三个参数,它们是:运算符、操作数列表和路径条件。最相关的构造是φ函数。我们必须计算门控函数γ,其中,γi是选择φ函数的第i个元素的条件。使用下面的定理可以导出门控函数:
假设xn=φ(x1,x2,…,xk),
则有γi(B)=pc(Predi(B))∧C(Predi(B)→B),
其中,Predi(B)是B的第i个前导基本块。
如上所述,我们可以使用示例性的算法1构建根据本发明的SEG。由算法1构建的SEG具有三个特征:
1.我们将因子赋值解释为对象字段,作为强更新。例如,<o1.f>1不保留值<o1.f>0。目的是用稳健性换取精确性。
2.SEG是一个最大共享的图,SEG的每一个子图是唯一的,即,SEG没有同构子图。FindAndCreateExpr函数可以避免相同的子图。一个例子是节点<o1.f>3和<o2.f>3,它们共享相同的子图。
3.由不同if语句中的两个或多个逻辑运算组成的路径条件紧凑地表示为逻辑运算控制依赖于另一逻辑运算。例如,!=运算符控制取决于<=运算符,它编码语句中的条件if(b<=0)和if(q!=NULL)。
重构每个变量的计算过程的原因是我们可以轻松地发现不可行的路径,并通过解析约束来排除错误的信息流。在我们的例子中,if(c>a)和if(b≤0)的分支是不能同时进行的。我们可以发现这个事实,因为查询SAT((c1=a0+b0)∧(c1>a0)∧(b0≤0))为false。
下面结合一个具体实例来具体介绍一种SQL注入缺陷检测的方案。
首先结合图5A-5D介绍该实例中符号表达式图的生成过程。
下面是一段SQL注入代码示例:
在第1行代码中,getFromUser()从用户获取可能的恶意用户输入,S=getFromUser()为注入点,是一个v_src,因此图5A中S有灰度显示。在第2行代码中,以B1、B2作为条件判断依据,决定Z被赋值为Z1或S。如图5A所示,对于前两个语句,我们为变量Z、Z1和恶意用户输入节点S构建一个φ节点,使用箭头连接它们以表示数据依赖性。
在第3行代码中,我们对Z!=S的约束条件进行判断,如果条件成立,则X=Y+3。在图5B中,以X、Y、常量3和“+”操作符、“!”操作符、“Z!=S”的Cond(约束条件)创建节点,并连接X、Y、3、+以表示X=Y+3的数据依赖性,连接Cond,!=,Z,S以表示Cond为Z!=S的数据依赖性。因为存在定义X的约束条件(即Z!=S的Cond),所以此处使用虚线箭头将X连接到Cond节点以表示控制依赖性。实际上,如图5C所示,每个节点都有其控制依赖性边来表示它们可以定义在哪种约束条件下。
最后,当X>3时,执行createQuery(…)的敏感操作,createQuery(…)是一个v_sink(在图5D中以灰度表示)。在图5D中,为createQuery(…)操作、“>”操作符和X>3的Cond1创建节点,并连接X,+,3,Cond1以表示其数据依赖性,使用虚线箭头将createQuery(…)连接到Cond1以表示控制依赖性。最终语句将createQuery(…)连接到具有特定条件的Z。
下面结合图6A-6C介绍一实例中如何采用符号表达式图检测SQL注入缺陷。
如图6A所示,使用生成的符号表达式图,通过每个输入查找程序中是否存在SQL注入缺陷。如图6B所示,由一个用户输入节点S开始,逆向深度优先遍历SEG,首先到达节点Z,从S到Z的路径R1生成一个约束条件Cond(Z=S),接着到达查询语句节点createQuery(…),添加Z到createQuery(…)的路径R2的约束条件Cond(createQuery()),并进行检测两个约束条件是否同时满足,如果同时满足,则检测到一个SQL注入缺陷。
在判断Cond(Z=S)时,需要根据S函数的返回值来判断约束条件Cond(Z=S)是否满足。因此,对于图6A-6C的SEG图来说,S函数是此SEG图的被调函数,需要将S函数的函数摘要嵌入到此SEG图中,以判断约束条件Cond(Z=S)是否满足。如果S函数的返回值是一个常量,则只需要将符号摘要嵌入到SEG图中即可,如果S函数的返回值是一个变量,则需要将检查器定制摘要,即输入摘要、输出摘要和传递摘要嵌入到SEG图中,根据输入摘要确定S函数的函数输入的传入过程,输出摘要确定S函数的函数输出的传出过程,传递摘要确定S函数内部的变量传递过程。从而可以根据检查器定制摘要得到S的返回值,进而判断约束条件Cond(Z=S)是否满足。同样地,在生成S函数的函数摘要时,可以通过S函数的SEG图查找各个路径的约束条件,生成符号摘要和检查器定制摘要。在S函数的SEG图中查找各个约束条件时,如果涉及到下一层的被调函数,则需要将下一层的被调函数的函数摘要嵌入到S函数的SET图中。在检测过程中,需要先检测S函数的下一层的被调函数的SEG图,判断S函数的下一层的被调函数是否存在SQL注入缺陷,检测完成后,生成S函数的下一层的被调函数的函数摘要,然后将S函数的下一层的被调函数的函数摘要嵌入到S函数的SEG图中,检测S函数内是否存在SQL注入缺陷,检测完成后,生成S函数的函数摘要,然后将S函数的函数摘要嵌入到图6A-6C中示出的SEG图中,检测图6A-6C中示出的SEG图中是否存在SQL注入缺陷,检测完成后,可以生成图6A-6C中示出的SEG图对应的函数的函数摘要,并可以进一步将其嵌入到上一层函数的SEG图中,实现层层调用。
在该实施例中,S函数的符号摘要和检查器定制摘要分别为:
符号摘要:包括S函数的函数输入、函数输出和S函数中所有约束的集合;
所述输入摘要包括函数输入、函数输入节点到查询语句节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;其中,函数输入为S函数的函数输入,在S函数中查找到S函数的函数输入节点和查询语句节点之后,生成检查器特定信息,具体指的是在S函数中函数输入节点到查询语句节点之间的路径约束是否满足的判断条件,分析结果报告指的是S函数中函数输入节点到查询语句节点之间的路径约束是否满足的结果,生成报告摘要的相应描述可以包括函数输入节点到查询语句节点之间路径的追溯摘要。例如,生成报告摘要的相应描述可以包括S函数中查询语句节点通过哪些节点一步步回溯到函数输入节点的路径信息。
所述输出摘要包括用户输入、用户输入节点到函数输出节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;其中,函数输出为S函数的输出,查询到S函数内的用户输入节点和函数输出节点之后,生成检查器特定信息,具体指的是S函数中用户输入节点到函数输出节点之间路径约束是否满足的判断条件,分析结果报告指的是S函数中用户输入节点到函数输出节点之间路径约束是否满足的判断结果,生成报告摘要的相应描述可以包括用户输入节点到函数输出节点之间路径的追溯摘要,例如S函数中函数输出节点通过哪些节点如何一步步回溯到用户输入节点的路径信息。
所述传递摘要包括函数输入、函数输入节点到用户输入节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;其中,检查器特定信息可以包括S函数中函数输入节点到用户输入节点之间路径的约束约束是否满足的判断条件,分析结果报告指的是S函数中函数输入节点到用户输入节点之间约束是否满足的判断条件,生成报告摘要的相应描述可以包括函数输入节点到用户输入节点之间路径的追溯摘要,例如S函数中用户输入节点通过哪些节点如何一步步回溯到函数输入节点的路径信息。
如图6C所示,在访问查询语句节点后,返回到上一个节点Z,并将完成检测的路径R2的约束条件抛弃,继续查找其他查询语句,重复检测,一直到完成所有从Z节点开始的查询语句约束检测。例如,路径R1的约束条件和路径R3的约束条件结合来判断,等等。
在查找中可以看到,不需要返回到整个查找起点S节点,也不需要对其他无关的路径条件进行检测,从节点出发,只需要进行Cond(Z=S)和不同查询函数约束(例如Cond(createQuery())等)的求解。通过这种方式,可以高效方便地实现SQL注入缺陷的检测。在一实施例中,可以利用SMT求解器的增量求解特性来优化约束求解的性能,但本发明不限于此。SMT技术采用理论求解器(T-求解器)来判定在理论T中的一阶逻辑公式F的可满足性。其中T是一组一阶逻辑公式集合,对任意给出公式F由理论T中原子式组成,那么关于理论T和F的SMT问题就是判定公式F是否是T-可满足的。判定公式F是否T-可满足的程序称为理论求解器(T-求解器)。
如图7所示,本发明实施例还提供一种SQL注入缺陷检测系统,应用于所述的SQL注入缺陷检测方法,所述系统包括:
程序输入模块M100,用于输入待检测的程序;
符号表达式图生成模块M200,用于生成待检测的程序中各个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,值节点表示,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有方向性的边;以及
缺陷检测模块M300,用于检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,如果是,则发现SQL注入缺陷。
在该实施例中,所述SQL注入缺陷检测系统还包括:
摘要生成模块M400,用于生成各个函数的函数摘要,所述函数摘要包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
在该实施例中,对于一函数的符号表达式图,如果存在从用户输入节点到查询语句节点的路径,则该函数的函数摘要还包括输入摘要、输出摘要和传递摘要,其中:
所述输入摘要包括函数输入到查询语句节点的摘要;
所述输出摘要包括用户输入节点到函数输出的摘要;
所述传递摘要包括函数输入到用户输入节点的摘要。
在该实施例中,所述缺陷检测模块采用如下步骤判断路径约束条件是否均满足:
判断当前检测函数中从用户输入节点到查询语句节点之间的路径约束条件中是否存在被调函数;
如果是,则将所述被调函数的函数摘要嵌入当前检测函数,判断当前检测函数中与该被调函数对应的路径约束条件是否满足。
在该实施例中,所示符号表达式图生成模块M200根据如下步骤生成待检测的程序中各个函数的符号表达式图:
从所述待检测的程序的底层函数依次向上层函数建立各个函数的符号表达式图;
检测各个函数的符号表达式图时,从底层函数依次向上层函数检测,并从底层函数依次向上层函数生成函数摘要;
检测上层函数的符号表达式图时,将该上层函数的下层函数的函数摘要嵌入该上层函数的符号表达式图中。
本发明实施例还提供一种SQL注入缺陷检测设备,包括处理器;存储器,其中存储有所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行所述的SQL注入缺陷检测方法的步骤。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“平台”。
下面参照图8来描述根据本发明的这种实施方式的电子设备600。图8显示的电子设备600仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,电子设备600以通用计算设备的形式表现。电子设备600的组件可以包括但不限于:至少一个处理单元610、至少一个存储单元620、连接不同平台组件(包括存储单元620和处理单元610)的总线630、显示单元640等。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元610执行,使得所述处理单元610执行本说明书上述电子处方流转处理方法部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元610可以执行如图1中所示的步骤。
所述存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)6201和/或高速缓存存储单元6202,还可以进一步包括只读存储单元(ROM)6203。
所述存储单元620还可以包括具有一组(至少一个)程序模块6205的程序/实用工具6204,这样的程序模块6205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备600也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备600交互的设备通信,和/或与使得该电子设备600能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口650进行。并且,电子设备600还可以通过网络适配器660与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器660可以通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储平台等。
本发明实施例还提供一种计算机可读存储介质,用于存储程序,所述程序被执行时实现所述的SQL注入缺陷检测方法的步骤。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述电子处方流转处理方法部分中描述的根据本发明各种示例性实施方式的步骤。
参考图9所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品800,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
所述计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统、设备和计算机存储介质的实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
本发明所提供的SQL注入缺陷检测方法、系统、设备及存储介质具有下列优点:
本发明提出了一种生成符号表达式图和根据符号表达式图完成SQL注入缺陷检测的方案,首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,根据控制依赖性边寻找路径约束条件并判断路径约束条件是否均可以满足,从而通过符号表达式图中路径和路径约束条件的判断,能够高效地检测SQL注入缺陷。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

Claims (18)

1.一种SQL注入缺陷检测方法,其特征在于,所述方法包括如下步骤:
输入待检测的程序;
生成待检测的程序中各个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有方向性的边;以及
检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,如果是,则发现SQL注入缺陷。
2.根据权利要求1所述的SQL注入缺陷检测方法,其特征在于,所述检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,包括如下步骤:
对于各个函数的符号表达式图,从用户输入节点开始对所述符号表达式图进行逆向的深度优先遍历;
遍历到达查询语句节点时,根据所述控制依赖性边查找用户输入节点到查询语句节点之间的路径约束条件,并判断路径约束条件是否均满足,如果是,则发现SQL注入缺陷。
3.根据权利要求1所述的SQL注入缺陷检测方法,其特征在于,所述方法还包括如下步骤:
生成各个函数的函数摘要,所述函数摘要包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
4.根据权利要求3所述的SQL注入缺陷检测方法,其特征在于,对于一函数的符号表达式图,如果存在从用户输入节点到查询语句节点的路径,则该函数的函数摘要还包括输入摘要、输出摘要和传递摘要,其中:
所述输入摘要包括函数输入到查询语句节点的摘要;
所述输出摘要包括用户输入节点到函数输出的摘要;
所述传递摘要包括函数输入到用户输入节点的摘要。
5.根据权利要求3或4所述的SQL注入缺陷检测方法,其特征在于,判断路径约束条件是否均满足,包括如下步骤:
判断当前检测函数中从用户输入节点到查询语句节点之间的路径中是否存在被调函数;
如果是,则将所述被调函数的函数摘要嵌入当前检测函数的符号表达式图,判断当前检测函数中与该被调函数对应的路径约束条件是否满足。
6.根据权利要求5所述的SQL注入缺陷检测方法,其特征在于,生成待检测的程序中各个函数的符号表达式图,包括如下步骤:
从所述待检测的程序的底层函数依次向上层函数建立各个函数的符号表达式图;
检测各个函数的符号表达式图时,从底层函数依次向上层函数检测,并从底层函数依次向上层函数生成函数摘要;
检测上层函数的符号表达式图时,将该上层函数的下层函数的函数摘要嵌入该上层函数的符号表达式图中。
7.根据权利要求4所述的SQL注入缺陷检测方法,其特征在于,
所述输入摘要包括函数输入、函数输入节点到查询语句节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;
所述输出摘要包括用户输入、用户输入节点到函数输出节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;
所述传递摘要包括函数输入、函数输入节点到用户输入节点之间路径的约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息。
8.根据权利要求7所述的SQL注入缺陷检测方法,其特征在于,
所述输入摘要的检查器特定信息包括函数输入节点到查询语句节点的路径约束的判断条件,分析结果报告是函数输入节点到查询语句节点之间路径约束是否满足的结果报告,生成报告摘要的相应描述是函数输入节点到查询语句节点之间路径的追溯摘要;
所述输出摘要的检查器特定信息包括用户输入节点到函数输出节点之间路径约束的判断条件,分析结果报告是用户输入节点到函数输出节点之间路径约束是否满足的结果报告,生成报告摘要的相应描述是用户输入节点到函数输出节点之间路径的追溯摘要;
所述传递摘要的检查器特定信息包括函数输入节点到用户输入节点之间路径约束的判断条件,分析结果报告是函数输入节点到用户输入节点之间路径约束是否满足的结果报告,生成报告摘要的相应描述是函数输入节点到用户输入节点之间路径的追溯摘要。
9.根据权利要求1所述的SQL注入缺陷检测方法,其特征在于,所述值节点包括终端值节点和非终端值节点,所述终端值节点表示当前函数外生成的未知的值或常量,所述非终端值节点包括当前函数内生成的值。
10.根据权利要求1所述的SQL注入缺陷检测方法,其特征在于,所述控制依赖性边指向的一侧为逻辑运算的运算符或布尔值节点。
11.根据权利要求1所述的SQL注入缺陷检测方法,其特征在于,用真和假来标记所述控制依赖性边,以表明逻辑运算的所需的结果。
12.根据权利要求1所述的SQL注入缺陷检测方法,其特征在于,所述生成待检测的程序中各个函数的符号表达式图之前,还包括如下步骤:
展开所述待检测的程序中的循环。
13.一种SQL注入缺陷检测系统,其特征在于,应用于权利要求1至12中任一项所述的SQL注入缺陷检测方法,所述系统包括:
程序输入模块,用于输入待检测的程序;
符号表达式图生成模块,用于生成待检测的程序中各个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,值节点表示,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有方向性的边;以及
缺陷检测模块,用于检测各个函数的符号表达式图中是否存在从用户输入节点到查询语句节点之间的路径且路径约束条件均满足,如果是,则发现SQL注入缺陷。
14.根据权利要求13所述的SQL注入缺陷检测系统,其特征在于,所述系统还包括:
摘要生成模块,用于生成各个函数的函数摘要,所述函数摘要包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
15.根据权利要求14所述的SQL注入缺陷检测系统,其特征在于,对于一函数的符号表达式图,如果存在从用户输入节点到查询语句节点的路径,则该函数的函数摘要还包括输入摘要、输出摘要和传递摘要,其中:
所述输入摘要包括函数输入到查询语句节点的摘要;
所述输出摘要包括用户输入节点到函数输出的摘要;
所述传递摘要包括函数输入到用户输入节点的摘要。
16.根据权利要求14或15所述的SQL注入缺陷检测系统,其特征在于,所述缺陷检测模块采用如下步骤判断路径约束条件是否均满足:
判断当前检测函数中从用户输入节点到查询语句节点之间的路径约束条件中是否存在被调函数;
如果是,则将所述被调函数的函数摘要嵌入当前检测函数,判断当前检测函数中与该被调函数对应的路径约束条件是否满足。
17.一种SQL注入缺陷检测设备,其特征在于,包括:
处理器;
存储器,其中存储有所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至12中任一项所述的SQL注入缺陷检测方法的步骤。
18.一种计算机可读存储介质,用于存储程序,其特征在于,所述程序被执行时实现权利要求1至12中任一项所述的SQL注入缺陷检测方法的步骤。
CN201811015751.5A 2017-09-01 2018-08-31 Sql注入缺陷检测方法、系统、设备及存储介质 Active CN109426722B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2017107811580 2017-09-01
CN201710781158 2017-09-01

Publications (2)

Publication Number Publication Date
CN109426722A true CN109426722A (zh) 2019-03-05
CN109426722B CN109426722B (zh) 2021-06-29

Family

ID=65514779

Family Applications (4)

Application Number Title Priority Date Filing Date
CN201811014686.4A Active CN109426615B (zh) 2017-09-01 2018-08-31 过程间的空指针解引用检测方法、系统、设备以及介质
CN201811015751.5A Active CN109426722B (zh) 2017-09-01 2018-08-31 Sql注入缺陷检测方法、系统、设备及存储介质
CN201811013103.6A Pending CN109426614A (zh) 2017-09-01 2018-08-31 缺陷检测方法、设备、系统和计算机可读存储介质
CN201811013000.XA Active CN109426723B (zh) 2017-09-01 2018-08-31 使用释放后内存的检测方法、系统、设备及存储介质

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201811014686.4A Active CN109426615B (zh) 2017-09-01 2018-08-31 过程间的空指针解引用检测方法、系统、设备以及介质

Family Applications After (2)

Application Number Title Priority Date Filing Date
CN201811013103.6A Pending CN109426614A (zh) 2017-09-01 2018-08-31 缺陷检测方法、设备、系统和计算机可读存储介质
CN201811013000.XA Active CN109426723B (zh) 2017-09-01 2018-08-31 使用释放后内存的检测方法、系统、设备及存储介质

Country Status (2)

Country Link
US (1) US10642584B2 (zh)
CN (4) CN109426615B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110545264A (zh) * 2019-08-16 2019-12-06 苏州浪潮智能科技有限公司 一种自动化检测ldap认证注入漏洞的方法及装置
CN110929264A (zh) * 2019-11-21 2020-03-27 中国工商银行股份有限公司 漏洞检测方法、装置、电子设备及可读存储介质
CN111460450A (zh) * 2020-03-11 2020-07-28 西北大学 一种基于图卷积网络的源代码漏洞检测方法
CN112632550A (zh) * 2021-03-05 2021-04-09 北京邮电大学 口令和密钥的应用安全的检测方法及其电子设备
CN112685779A (zh) * 2020-12-31 2021-04-20 天津南大通用数据技术股份有限公司 基于数据库执行select语句主要关键字的静态可信判定方法
CN113010890A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113010891A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113741969A (zh) * 2021-11-01 2021-12-03 北京鸿渐科技有限公司 分析源库模式缺陷检测器的深层结构体指针分析优化方法

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109918903B (zh) * 2019-03-06 2022-06-21 西安电子科技大学 一种基于llvm编译器的程序非控制数据攻击防护方法
CN110119275B (zh) * 2019-05-13 2021-04-02 电子科技大学 一种分布式内存列式数据库编译执行器架构
CN110175123A (zh) * 2019-05-22 2019-08-27 中国石油大学(华东) 一种基于符号表达式静态缺陷警报关联识别方法
CN110286891B (zh) * 2019-06-25 2020-09-29 中国科学院软件研究所 一种基于代码属性张量的程序源代码编码方法
CN110442527B (zh) * 2019-08-16 2023-07-18 扬州大学 面向bug报告的自动化修复方法
CN110851139B (zh) * 2019-11-07 2023-04-18 北京字节跳动网络技术有限公司 用于检查代码的方法、装置和电子设备
CN111104335B (zh) * 2019-12-25 2021-08-24 清华大学 一种基于多层次分析的c语言缺陷检测方法及装置
CN111382427B (zh) * 2020-01-06 2022-04-26 宁波中科天齐信息技术有限公司 基于变量关联规则的缓冲区溢出检测方法
CN111737289B (zh) * 2020-06-05 2023-07-25 北京奇艺世纪科技有限公司 Sql注入攻击的检测方法、装置
CN112015397B (zh) * 2020-09-07 2023-09-26 深圳职业技术学院 环路检测方法及系统
CN112084115B (zh) * 2020-09-16 2024-06-18 京东科技控股股份有限公司 软件缺陷的流程化操作方法和装置
CN112287353A (zh) * 2020-10-28 2021-01-29 北京智游网安科技有限公司 一种漏洞检测方法、终端及存储介质
CN113076090B (zh) * 2021-04-23 2022-07-05 中国人民解放军国防科技大学 一种面向边信道安全防护的循环语句执行方法及装置
US20230075295A1 (en) * 2021-09-03 2023-03-09 Fujitsu Limited Automatic denoising of machine learning projects
CN114282226B (zh) * 2021-12-31 2024-05-28 上海交通大学 单次多漏洞代码检测方法及系统
CN114510722B (zh) * 2022-02-17 2023-01-06 北京大学 增量代码的静态检测方法及检测系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101894064A (zh) * 2009-05-21 2010-11-24 北京邮电大学 应用跨函数分析的软件测试方法
CN102073587A (zh) * 2010-12-27 2011-05-25 北京邮电大学 一种程序中不可达路径的静态检测方法
CN102222035A (zh) * 2011-07-25 2011-10-19 公安部第三研究所 基于符号执行技术的软件行为检测系统及检测方法
CN103914381A (zh) * 2014-03-25 2014-07-09 北京邮电大学 生成时序安全属性类缺陷模式相关的函数摘要信息的方法
CN104573503A (zh) * 2015-02-11 2015-04-29 中国农业银行股份有限公司 一种内存访问溢出的检测方法及装置
CN104679646A (zh) * 2013-11-29 2015-06-03 阿里巴巴集团控股有限公司 一种用于检测sql代码缺陷的方法和装置

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5075883A (en) * 1991-01-03 1991-12-24 The United States Of America As Represented By The Secretary Of The Army Analog and analytical computation method for determining detector MTF
JP2000076490A (ja) * 1998-09-02 2000-03-14 Casio Comput Co Ltd 表示制御装置及び記憶媒体
US7484205B2 (en) * 2002-12-12 2009-01-27 Microsoft Corporation Preprocessor-based source code instrumentation
US8170466B2 (en) * 2005-05-27 2012-05-01 Ctb/Mcgraw-Hill System and method for automated assessment of constrained constructed responses
US7962901B2 (en) * 2006-04-17 2011-06-14 Microsoft Corporation Using dynamic analysis to improve model checking
CN100461132C (zh) * 2007-03-02 2009-02-11 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101271421A (zh) * 2007-03-22 2008-09-24 北京邮电大学 一种软件故障测试系统及方法
US8245209B2 (en) * 2007-05-29 2012-08-14 International Business Machines Corporation Detecting dangling pointers and memory leaks within software
JP2010146615A (ja) * 2008-12-16 2010-07-01 Hitachi Global Storage Technologies Netherlands Bv データを記憶するディスクのゾーン・フォーマット設定方法及びディスク・ドライブ
US20100223599A1 (en) * 2009-02-27 2010-09-02 Fujitsu Limited Efficient symbolic execution of software using static analysis
JP5529970B2 (ja) * 2009-09-29 2014-06-25 テルコーディア テクノロジーズ インコーポレイテッド リソースが有限であるストリーム計算アプリケーション向けの、関連のある因果的なコンテキスト履歴の捕捉、送信、および再構築の可能化
US9251491B2 (en) * 2009-11-30 2016-02-02 International Business Machines Corporation Performance-aware enterprise components
CN103019862B (zh) * 2012-12-13 2015-08-19 北京神州绿盟信息安全科技股份有限公司 一种符号执行方法、装置及系统
CN103218296B (zh) * 2013-04-22 2015-12-02 北京邮电大学 一种充分检测空指针引用缺陷的方法
US9274925B2 (en) * 2013-04-30 2016-03-01 Fujitsu Limited Programmable symbolic execution based dynamic checker
CN104750563B (zh) * 2013-12-26 2017-11-07 北京大学 一种基于控制流图的内存泄漏自动修复方法
CN103914382B (zh) * 2014-03-25 2016-06-29 北京邮电大学 一种充分识别指针引用检测对象的方法
US10303808B2 (en) * 2014-05-16 2019-05-28 Configit A/S Product configuration
CN105607990B (zh) * 2014-11-19 2019-07-05 腾讯科技(成都)有限公司 一种空指针崩溃的挖掘方法及装置
CN104536883B (zh) * 2014-12-05 2017-06-16 北京邮电大学 一种静态缺陷检测方法及其系统
CN105740149B (zh) * 2016-01-29 2018-02-16 中国人民解放军信息工程大学 基于脆弱性模型和符号执行结合的软件安全检测方法
CN106294156B (zh) * 2016-08-11 2018-12-07 北京邮电大学 一种静态代码缺陷检测分析方法及装置
CN107193742B (zh) * 2017-05-23 2020-09-04 电子科技大学 一种基于状态的路径敏感的符号化函数摘要算法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101894064A (zh) * 2009-05-21 2010-11-24 北京邮电大学 应用跨函数分析的软件测试方法
CN102073587A (zh) * 2010-12-27 2011-05-25 北京邮电大学 一种程序中不可达路径的静态检测方法
CN102222035A (zh) * 2011-07-25 2011-10-19 公安部第三研究所 基于符号执行技术的软件行为检测系统及检测方法
CN104679646A (zh) * 2013-11-29 2015-06-03 阿里巴巴集团控股有限公司 一种用于检测sql代码缺陷的方法和装置
CN103914381A (zh) * 2014-03-25 2014-07-09 北京邮电大学 生成时序安全属性类缺陷模式相关的函数摘要信息的方法
CN104573503A (zh) * 2015-02-11 2015-04-29 中国农业银行股份有限公司 一种内存访问溢出的检测方法及装置

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110545264A (zh) * 2019-08-16 2019-12-06 苏州浪潮智能科技有限公司 一种自动化检测ldap认证注入漏洞的方法及装置
CN110545264B (zh) * 2019-08-16 2021-09-03 苏州浪潮智能科技有限公司 一种自动化检测ldap认证注入漏洞的方法及装置
CN110929264B (zh) * 2019-11-21 2022-08-30 中国工商银行股份有限公司 漏洞检测方法、装置、电子设备及可读存储介质
CN110929264A (zh) * 2019-11-21 2020-03-27 中国工商银行股份有限公司 漏洞检测方法、装置、电子设备及可读存储介质
CN111460450A (zh) * 2020-03-11 2020-07-28 西北大学 一种基于图卷积网络的源代码漏洞检测方法
CN111460450B (zh) * 2020-03-11 2023-02-10 西北大学 一种基于图卷积网络的源代码漏洞检测方法
CN112685779A (zh) * 2020-12-31 2021-04-20 天津南大通用数据技术股份有限公司 基于数据库执行select语句主要关键字的静态可信判定方法
CN113010890A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113010891A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113010891B (zh) * 2021-02-26 2023-02-07 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113010890B (zh) * 2021-02-26 2023-02-07 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN112632550A (zh) * 2021-03-05 2021-04-09 北京邮电大学 口令和密钥的应用安全的检测方法及其电子设备
CN112632550B (zh) * 2021-03-05 2021-06-29 北京邮电大学 口令和密钥的应用安全的检测方法及其电子设备
CN113741969B (zh) * 2021-11-01 2022-03-11 北京鸿渐科技有限公司 分析源库模式缺陷检测器的深层结构体指针分析优化方法
CN113741969A (zh) * 2021-11-01 2021-12-03 北京鸿渐科技有限公司 分析源库模式缺陷检测器的深层结构体指针分析优化方法

Also Published As

Publication number Publication date
US10642584B2 (en) 2020-05-05
US20190108003A1 (en) 2019-04-11
CN109426723B (zh) 2020-12-22
CN109426615B (zh) 2022-01-28
CN109426615A (zh) 2019-03-05
CN109426723A (zh) 2019-03-05
CN109426722B (zh) 2021-06-29
CN109426614A (zh) 2019-03-05

Similar Documents

Publication Publication Date Title
CN109426722A (zh) Sql注入缺陷检测方法、系统、设备及存储介质
Wu et al. Peculiar: Smart contract vulnerability detection based on crucial data flow graph and pre-training techniques
CN102339252B (zh) 基于xml中间模型以及缺陷模式匹配的静态检测系统
CN111459799B (zh) 一种基于Github的软件缺陷检测模型建立、检测方法及系统
Yu et al. Deescvhunter: A deep learning-based framework for smart contract vulnerability detection
CN112131882A (zh) 一种多源异构网络安全知识图谱构建方法及装置
US10409706B2 (en) Automated test generation for structural coverage for temporal logic falsification of cyber-physical systems
CN104573503B (zh) 一种内存访问溢出的检测方法及装置
CN110704846B (zh) 一种人在回路的智能化安全漏洞发现方法
Davis et al. Testing regex generalizability and its implications: A large-scale many-language measurement study
JP4951416B2 (ja) プログラム検証方法、プログラム検証装置
Zeng et al. EtherGIS: a vulnerability detection framework for Ethereum smart contracts based on graph learning features
Hu et al. Detect defects of solidity smart contract based on the knowledge graph
CN114036531A (zh) 一种基于多尺度代码度量的软件安全漏洞检测方法
Ngo et al. Ranking warnings of static analysis tools using representation learning
Li et al. Deep learning for coverage-guided fuzzing: How far are we?
Taghavi et al. Using large language models to better detect and handle software vulnerabilities and cyber security threats
Ye et al. Converting service rules to semantic rules
Kong et al. A multi-type vulnerability detection framework with parallel perspective fusion and hierarchical feature enhancement
Liu [Retracted] Software Vulnerability Mining Techniques Based on Data Fusion and Reverse Engineering
Yang et al. Source Code Vulnerability Detection Using Vulnerability Dependency Representation Graph
Gou et al. Software fault localization based on network spectrum and graph neural network
Yan et al. A survey of human-machine collaboration in fuzzing
Zhou et al. Software Vulnerability Detection via Multimodal Deep Learning
Li et al. Mapping Modern JVM Language Code to Analysis-Friendly Graphs: A Study with Kotlin

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
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Xiao Xiao

Inventor after: Shi Qingkai

Inventor after: Zhou Jinguo

Inventor after: Fan Gang

Inventor before: Xiao Xiao

Inventor before: Shi Qingkai

Inventor before: Zhou Jinguo

Inventor before: Fan Gang

Inventor before: Zhang Chuan

GR01 Patent grant
GR01 Patent grant