CN110059006A - 代码审计方法及装置 - Google Patents

代码审计方法及装置 Download PDF

Info

Publication number
CN110059006A
CN110059006A CN201910252375.XA CN201910252375A CN110059006A CN 110059006 A CN110059006 A CN 110059006A CN 201910252375 A CN201910252375 A CN 201910252375A CN 110059006 A CN110059006 A CN 110059006A
Authority
CN
China
Prior art keywords
symbol
stain
symbolic construction
symbolic
construction
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
CN201910252375.XA
Other languages
English (en)
Other versions
CN110059006B (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.)
Beijing Chuangxin Journey Network Technology Co Ltd
Original Assignee
Beijing Chuangxin Journey Network 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 Beijing Chuangxin Journey Network Technology Co Ltd filed Critical Beijing Chuangxin Journey Network Technology Co Ltd
Priority to CN201910252375.XA priority Critical patent/CN110059006B/zh
Publication of CN110059006A publication Critical patent/CN110059006A/zh
Application granted granted Critical
Publication of CN110059006B publication Critical patent/CN110059006B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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/3628Software debugging of optimised code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本公开实施例涉及信息安全维护技术领域,提供一种代码审计方法及装置,其中,方法包括:基于程序源代码文件,得到抽象语法树,抽象语法树包括用于表示程序源代码文件的语法结构的结点;基于污点数据库,对结点进行语法结构解析,得到符号结构,符号结构包括污点符号标记后的第一符号结构和/或未污点标记的第二符号结构;基于符号结构计算,生成符号表,符号表包括与程序源代码相匹配的结点符号;对符号表进行污点分析,得到污点符号表与污点执行路径表;遍历污点符号表与污点执行路径表,得到潜在漏洞,其中,潜在漏洞包括存在污点执行路径的污点符号。本公开实施例可结合上下文语义对代码进行审计,提高了代码审计效率及准确性。

Description

代码审计方法及装置
技术领域
本发明涉及信息安全维护技术领域,尤其涉及一种代码审计方法及装置。
背景技术
代码审计是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。
相关技术中,人工对程序源代码进行审计,浪费人力资源且从事代码审计人员需要具备较高的代码纠错能力,代码审计工作效率较低;自动化代码审计对程序源代码进行自动核查,提高了代码审计的效率,自动化代码审计出现难以结合上下文语义,造成漏检以及误检的现象产生。
发明内容
为了解决现有技术中存在的上述问题,本发明提供一种可以提高代码准确性的代码审计方案。
根据本发明实施例的其中一方面,提供一种代码审计方法,结点方法包括:抽象语法树构建步骤,基于程序源代码文件,得到抽象语法树,抽象语法树包括用于表示程序源代码文件的语法结构的结点;抽象语法树分析步骤,基于污点数据库,对结点进行语法结构解析,得到符号结构,符号结构包括污点符号标记后的第一符号结构和/或未污点标记的第二符号结构;符号表生成步骤,基于符号结构计算,生成符号表,符号表包括与程序源代码相匹配的结点符号;污点分析步骤,对符号表进行污点分析,得到污点符号表与污点执行路径表;漏洞检查步骤,遍历污点符号表与污点执行路径表,得到潜在漏洞,其中,潜在漏洞包括存在污点执行路径的污点符号。
在一例中,方法还包括:词法分析步骤,对程序源代码文件进行词法分析,得到词法单元序列;语法分析步骤,对词法单元序列进行语法分析,基于词法单元序列,生成语法结构;基于语法结构,得到抽象语法树。
在一例中,词法单元序列包括多个词法单元,词法单元包括词法单元名、词法单元内容、词法单元类型、词法单元行号、词法单元列号。
在一例中,抽象语法树分析步骤,包括:符号结构标记步骤,对于与污点数据库中的符号结构相同的符号结构进行污点符号标记,得到第一符号结构;符号结构计算步骤,基于符号结构的类型对符号结构分别进行符号计算,得到结点符号。
在一例中,符号结构计算步骤,包括:符号分析步骤,基于符号结构的符号特征进行符号分析判断,得到第一判断结果;基于第一判断结果符合预设符号特征,对符号结构进行语义分析;基于第一判断结果不符合预设符号特征,符号结构生成第一结点符号;预设符号特征包括符号结构的符号特征为文件引入型特征或输入点型特征;符号结构语义分析步骤,对符合预设符号特征的符号结构的子符号结构进行语义分析,得到语义分析后的符号结构。
在一例中,文件引入型特征的符号结构包括字符串型子符号结构、变量/常量型子符号结构;输入点型特征的符号结构包括表示赋值操作的子符号结构;符号结构语义分析步骤,包括:符号内容确定步骤,基于字符串型子符号结构,确定文件引入型特征的符号结构的符号内容;符号结构确定步骤,基于变量/常量型子符号结构,确定与变量/常量型子符号结构对应的符号结构,得到语义分析后的符号结构。
在一例中,符号结构计算步骤,包括:符号值获取步骤,对所述语义分析后的符号结构进行递归处理,得到符号值,符号值为程序源代码的语句的符号值;符号值匹配步骤,将符号值与程序源代码的语句进行匹配,在符号表中关联符号值与程序源代码的语句,生成第二结点符号。
在一例中,语义分析后的符号结构包括表达式;符号值获取步骤,包括:类型判断步骤,对表达式进行类型判断,得到表达式类型,表达式类型包括简单赋值表达式、复杂赋值表达式、运算表达式、数组调用表达式、函数调用表达式、类属性调用表达式、类方法调用表达式中的至少一种;符号值计算步骤,基于表达式类型,对表达式进行符号计算,得到符号值。
在一例中,符号表生成步骤,包括:结点符号汇集步骤,将第一结点符号与第二结点符号加入到符号表中,生成中间符号表;抽象语法树分析判断步骤,判断抽象语法树分析是否完成,得到第二判断结果;基于第二判断结果为是,将中间符号表作为符号表;基于第二判断结果为否,执行抽象语法树分析步骤。
在一例中,污点分析步骤,包括:污点符号判断步骤,对符号结构进行污点标记判断,得到第三判断结果;基于第三判断结果为是,基于第一符号结构,生成第一污点符号;基于第三判断结果为否,对第二符号结构进行污点语义分析;污点语义分析步骤,基于污点数据,对第二符号结构进行语义分析,得到第二污点符号和/或记录有污点执行路径的第三污点符号;污点符号表生成步骤,基于第一污点符号、第二污点符号、第三污点符号,得到污点符号表和污点执行路径表。
在一例中,污点语义分析步骤,包括:污点符号添加步骤,对全局变量的符号结构的外部作用域中添加污点标记的第四污点符号;污点符号计算步骤,对第四污点符号进行符号计算,得到符号计算后的第四污点符号;第二污点符号包括符号计算后的第四污点符号。
在一例中,污点分析步骤,还包括:污点符号表分析判断步骤,基于符号表,判断污点符号表是否完成,得到第四判断结果;基于第四判断结果为是,执行漏洞检查步骤;基于第四判断结果为否,执行污点分析步骤。
在一例中,方法还包括:漏洞报告生成步骤,基于潜在漏洞,得到漏洞报告。
根据本发明实施例的另一方面,提供一种代码审计装置,包括:抽象语法树构建单元,用于基于程序源代码文件,得到抽象语法树,抽象语法树包括用于表示程序源代码文件的语法结构的结点;抽象语法树分析单元,用于基于污点数据库,对结点进行语法结构解析,得到符号结构,符号结构包括污点符号标记后的第一符号结构和/或未污点标记的第二符号结构;符号表生成单元,用于基于符号结构计算,生成符号表,符号表包括与程序源代码相匹配的结点符号;污点分析单元,用于对符号表进行污点分析,得到污点符号表与污点执行路径表;漏洞检查单元,用于遍历污点符号表与污点执行路径表,得到潜在漏洞,其中,潜在漏洞包括存在污点执行路径的污点符号。
在一例中,装置还包括:词法分析单元,用于对程序源代码文件进行词法分析,得到词法单元序列;语法分析单元,用于对词法单元序列进行语法分析,基于词法单元序列,生成语法结构;基于语法结构,得到抽象语法树。
在一例中,词法单元序列包括多个词法单元,词法单元包括词法单元名、词法单元内容、词法单元类型、词法单元行号、词法单元列号。
在一例中,抽象语法树分析单元,包括:符号结构标记模块,用于对于与污点数据库中的符号结构相同的符号结构进行污点符号标记,得到第一符号结构;符号结构计算模块,用于基于符号结构的类型对符号结构分别进行符号计算,得到结点符号。
在一例中,符号结构计算模块,包括:符号分析子模块,用于基于符号结构的符号特征进行符号分析判断,得到第一判断结果;基于第一判断结果符合预设符号特征,对符号结构进行语义分析;基于第一判断结果不符合预设符号特征,符号结构生成第一结点符号;预设符号特征包括符号结构的符号特征为文件引入型特征或输入点型特征;符号结构语义分析子模块,用于对符合预设符号特征的符号结构的子符号结构进行语义分析,得到语义分析后的符号结构。
在一例中,文件引入型特征的符号结构包括字符串型子符号结构、变量/常量型子符号结构;输入点型特征的符号结构包括表示赋值操作的子符号结构;符号结构语义分析子模块,包括:符号内容确定子模块,用于基于字符串型子符号结构,确定文件引入型特征的符号结构的符号内容;符号结构确定子模块,用于基于变量/常量型子符号结构,确定与变量/常量型子符号结构对应的符号结构,得到语义分析后的符号结构。
在一例中,符号结构计算模块,包括:符号值获取子模块,对语义分析后的符号结构进行递归处理,得到符号值,符号值为程序源代码的语句的符号值;符号值匹配子模块,将符号值与程序源代码的语句进行匹配,在符号表中关联符号值与程序源代码的语句,生成第二结点符号。
在一例中,语义分析后的符号结构包括表达式;符号值获取子模块,包括:类型判断子模块,用于对表达式进行类型判断,得到表达式类型,表达式类型包括简单赋值表达式、复杂赋值表达式、运算表达式、数组调用表达式、函数调用表达式、类属性调用表达式、类方法调用表达式中的至少一种;符号值计算子模块,用于基于表达式类型,对表达式进行符号计算,得到符号值。
在一例中,符号表生成单元,包括:结点符号汇集模块,用于将第一结点符号与第二结点符号加入到符号表中,生成中间符号表;抽象语法树分析判断模块,用于判断抽象语法树分析是否完成,得到第二判断结果;基于第二判断结果为是,将中间符号表作为符号表;基于第二判断结果为否,对结点进行语法结构解析。
在一例中,污点分析单元,包括:污点符号判断模块,用于对符号结构进行污点标记判断,得到第三判断结果;基于第三判断结果为是,基于第一符号结构,生成第一污点符号;基于第三判断结果为否,对第二符号结构进行污点语义分析;污点语义分析模块,用于基于污点数据,对第二符号结构进行语义分析,得到第二污点符号和/或记录有污点执行路径的第三污点符号;污点符号表生成模块,用于基于第一污点符号、第二污点符号、第三污点符号,得到污点符号表和污点执行路径表。
在一例中,污点语义分析模块,包括:污点符号添加子模块,用于对全局变量的符号结构的外部作用域中添加污点标记的第四污点符号;污点符号计算子模块,用于对第四污点符号进行符号计算,得到符号计算后的第四污点符号;第二污点符号包括符号计算后的第四污点符号。
在一例中,污点分析单元,还包括:污点符号表分析判断模块,用于基于符号表,判断污点符号表是否完成,得到第四判断结果;基于第四判断结果为是,执行漏洞检查;基于第四判断结果为否,执行污点分析。
在一例中,装置还包括:漏洞报告生成单元,用于基于潜在漏洞,得到漏洞报告。
根据本发明实施例的另一方面,提供一种电子设备,其中,包括:
存储器,用于存储计算机程序;
处理器,用于执行存储器中存储的计算机程序,且计算机程序被执行时,实现上述任一实施例的方法。
根据本发明实施例的另一方面,提供一种计算机可读存储介质,存储有计算机程序,其中,计算机程序被处理器执行时,实现上述任一实施例的方法。
基于代码审计方法及装置、电子设备、计算机可读存储介质,通过对程序源代码构建抽象语法树,并对抽象语法树进行语义分析后生成符号表,对符号表进行语义分析并运用符号计算方法对源代码进行语义处理,从而理解上下文语境,建立上下文关联性,构建完整的污点数据传播路径,进而减少误报和漏报,提高安全漏洞检测效率。
附图说明
通过参考附图阅读下文的详细描述,本发明实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示出了本发明的代码审计方法的一个实施例的流程示意图;
图2示出了本发明的代码审计方法的另一实施例的流程示意图;
图3示出了本发明的代码审计方法的另一实施例的流程示意图;
图4示出了本发明的代码审计方法的另一实施例的流程示意图;
图5示出了本发明的代码审计方法的另一实施例的流程示意图;
图6示出了本发明的代码审计方法的另一实施例的流程示意图
图7示出了本发明的代码审计方法的另一实施例的流程示意图;
图8示出了本发明的代码审计方法的另一实施例的流程示意图;
图9示出了本发明的代码审计方法的另一实施例的流程示意图;
图10示出了本发明的代码审计方法的另一实施例的流程示意图;
图11示出了本发明的代码审计方法的另一实施例的流程示意图;
图12示出了本发明的代码审计方法的另一实施例的流程示意图;
图13示出了本发明的代码审计装置的一个实施例的结构示意图;
图14示出了本发明的代码审计方法的另一实施例的结构示意图;
图15示出了本发明的代码审计方法的另一实施例的结构示意图;
图16示出了本发明的代码审计方法的另一实施例的结构示意图
图17示出了本发明的代码审计方法的另一实施例的结构示意图;
图18示出了本发明的代码审计方法的另一实施例的结构示意图;
图19示出了本发明的代码审计方法的另一实施例的结构示意图;
图20示出了本发明的代码审计方法的另一实施例的结构示意图;
图21示出了本发明的代码审计方法的另一实施例的结构示意图;
图22示出了本发明的代码审计方法的另一实施例的结构示意图;
图23示出了本发明的代码审计方法的另一实施例的结构示意图;
图24示出了本发明的代码审计方法的另一实施例的结构示意图;
图25示出了本发明电子设备的一个实施例的结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。
需要注意,虽然本文中使用“第一”、“第二”等表述来描述本发明的实施方式的不同模块、步骤和数据等,但是“第一”、“第二”等表述仅是为了在不同的模块、步骤和数据等之间进行区分,而并不表示特定的顺序或者重要程度。实际上,“第一”、“第二”等表述完全可以互换使用。
本发明实施例可以应用于终端设备、计算机系统及服务器等电子设备,其可与众多其它通用或者专用的计算系统环境或者配置一起操作。适于与终端设备、计算机系统以及服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子,包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
终端设备、计算机系统以及服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑以及数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
图1为本发明代码审计方法一个实施例的流程图。如图1所示,该实施例方法包括:抽象语法树构建步骤100、抽象语法树分析步骤200、符号表生成步骤300、污点分析步骤400、漏洞检查步骤500,。下面对图1中的各步骤进行详细说明。
抽象语法树构建步骤100,基于程序源代码文件,得到抽象语法树,抽象语法树包括用于表示程序源代码文件的语法结构的结点。
抽象语法树(Abstract Syntax Tree,AST),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个结点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以结点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的结点来表示。
本实施例通过语法分析器构建抽象语法树,语法分析器对程序源代码进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、抽象语法树等层次化的数据结构)。语法分析器通常使用一个独立的词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。实际开发中,语法分析器可以手工编写,也可以使用工具(半)自动生成。
抽象语法树分析步骤200,基于污点数据库,对结点进行语法结构解析,得到符号结构,符号结构包括污点符号标记后的第一符号结构和/或未污点标记的第二符号结构。
将抽象语法树输入至抽象语法树分析器中,遍历抽象语法树的各个结点,根据相应的语法结构进行解析,并使用符号结构来记录每一条具有语法含义的结点信息。同时,根据检测项目所使用编程语言的语法规则对该结点的语法含义进行说明,针对符合特定语法含义的符号结构,与污点数据库进行比对,对存在于污点标记库中的符号结构进行符号标记,得到第一符号结构。其余未被污点符号标记的符号结构为第二符号结构。
本实施例中,特定语法含义是指函数调用、类方法调用等情况,污点标记库主要用来辅助标记符号结构的特征,它是根据漏洞类型进行划分,每种漏洞类型包含对应的输入点集合、安全函数集合和敏感函数集合,通过将符号结构与污点标记库中的各个集合进行比对,对符号结构进行符号标记,完善符号结构信息。输入点集合中存储着所有针对该漏洞类型可以获取外部输入数据的函数或变量,安全函数集合存储着所有针对该漏洞类型可以处理污点数据的函数或方法,敏感函数集合存储着所有针对该漏洞类型传入污点数据会产生安全漏洞的函数或方法。
符号结构包含符号名称、符号类型、符号标记、符号内容、符号所在行号和符号所在列号等基础符号信息以及符号属性和子符号结构等相关信息。符号名称是抽象语法树中相对应的源代码语句里具有语法含义的名称,符号类型用来说明该符号的操作类型和符号含义,进一步说是对源代码语句的代码解释,符号标记记录着与污点标记库相匹配的数据信息,通常对应着函数、类方法和变量。例如在分析源代码中类定义代码块时,类名对应着符号结构中的符号名称,符号类型为类定义,此处是类定义则不会进行符号标记,符号内容记录这一条语句信息,符号所在行号表示该类定义代码所在文件的行号,符号所在列号表示该类定义代码所在文件的列号,而符号属性是对该符号的附加说明,此处则用来记录该类是公有类还是私有类、父类、接口等信息,而子符号结构是用来记录类的属性和类的方法等信息。通过上述处理后,输出最终的符号结构。
符号表生成步骤300,基于符号结构计算,生成符号表,符号表包括与程序源代码相匹配的结点符号。对抽象语法树中的符号结构进行符号分析以及对应的符号计算后生成结点符号。将直接由符号结构生成的结点符号以及符号计算后获得的结点符号进行收集,得到与程序源代码相匹配的符号表。符号表与程序源代码文件是一一对应关系,是对程序源代码的结构化表示。
污点分析步骤400,对符号表进行污点分析,得到污点符号表与污点执行路径表。在污点分析工具中,遍历符号表中的各个符号结构,对于标记为污点符号的符号结构进行记录,直接生成污点符号,对于其他符号结构进行语义分析后获得。
本实施例中,污点符号可以包括两部分,一种是通过污点分析工具直接生成的污点符号,另外一种是通过语义分析后获得的污点符号。其中,语义分析后获得的污点符号包括污点执行路径。
通过对生成污点符号表与污点执行路径表,可以解析上下文语义构建完整的污点数据的传播路径,避免污点数据传播路径的断裂导致的污点数据传播中断以及漏报现象产生。
漏洞检查步骤500,遍历污点符号表与污点执行路径表,得到潜在漏洞,其中,潜在漏洞包括存在污点执行路径的污点符号。对污点符号表进行漏洞检查,遍历污点符号表,将污点符号表中存在污点执行路径的污点符号标记为潜在漏洞。
本实施例的代码审计方法通过对程序源代码构建抽象语法树,并对抽象语法树进行语义分析后生成符号表,对符号表进行语义分析并运用符号计算方法对源代码进行语义处理,从而理解上下文语境,建立上下文关联性,构建完整的污点数据传播路径,进而减少误报和漏报,提高安全漏洞检测效率。
图2示出了本发明代码审计方法的另一些实施例的流程示意图,如图2所示,本实施例的代码审计方法,还包括:词法分析步骤600、语法分析步骤700。
词法分析步骤600,对程序源代码文件进行词法分析,得到词法单元序列。本实施例在词法分析器中输入待检测程序源代码,经过词法分析器产生词法单元序列。词法单元序列是词法单元的集合,词法单元包括词法单元名、词法单元内容、词法单元类型以及词法单元所在行号和词法单元所在列号等信息,其中词法单元名是词法单元的抽象符号表示,词法单元内容记录词法单元对应的具体内容,词法单元类型表示该词法单元属于何种类型,词法单元所在行号和词法单元所在列号分别记录了该词法单元在源代码中的行号与列号。
语法分析步骤700,对词法单元序列进行语法分析,基于词法单元序列,生成语法结构。将词法分析器中产生的词法单元序列输入到语法分析器中,语法分析器的任务是对检测项目所使用的编程语言进行语法解析。通常程序语言支持多种语法结构,每种语法结构由一个或多个词法单元构成,不同的构成方式表示不同的语法含义。词法单元序列通过语法分析器解析后,产生词法单元的语法结构。
抽象语法树构建步骤100,基于词法单元的语法结构得到抽象语法树,抽象语法树包括用于表示程序源代码文件的语法结构的结点。每个结点表示源代码中的一种语法结构,其中,含有子结点的结点表示编程语言所支持的语法,而没有子结点的结点则表示词法单元。另外,源代码中一条语句所对应的代码由抽象语法树中某一含有子结点的结点表示,其子结点记录了该语句的运算或操作信息。
图3示出了本发明代码审计方法的另一些实施例的流程示意图,如图3所示,本实施例的代码审计方法还包括:抽象语法树分析步骤,包括:符号结构标记步骤210,对于与污点数据库中的符号结构相同的符号结构进行污点符号标记,得到第一符号结构;符号结构计算步骤220,基于符号结构的类型对符号结构分别进行符号计算,得到结点符号。
本实施例中污点数据库中的符号结构为技术开发人员在开发过程中存储在数据库中的历史符号结构,在污点数据库中存储有多种开发过程中出现过的符号结构。基于对污点数据库中的符号结构进行对比,可迅速找到抽象语法树中的存在风险的符号结构,即第一符号结构。第二符号结构可基于符号结构的类型对符号结构分别进行符号计算,得到与第二符号结构对应的结点符号。污点数据库中的污点数据是根据需求随时添加的,并不是固定不变的。
图4示出了本发明代码审计方法的另一些实施例的流程示意图,如图4所示,本实施例的符号结构计算步骤,包括:符号分析步骤221,基于符号结构的符号特征进行符号分析判断,得到第一判断结果;基于第一判断结果符合预设符号特征,对符号结构进行语义分析;基于第一判断结果不符合预设符号特征,符号结构生成第一结点符号;预设符号特征包括符号结构的符号特征为文件引入型特征或输入点型特征;符号结构语义分析步骤222,对符合预设符号特征的符号结构的子符号结构进行语义分析,得到语义分析后的符号结构。
本实施例中可对符号结构进行判断,得出其是否需要进行语义分析,即通过符号分析步骤221判断符号结构的符号特征得出判断结果。需要处理的符号特征包含两种,分别是文件引入和输入点。文件引入是指源代码中引入其他源代码文件,在PHP中通常会调用require、requre_once、include、include_once等函数引入其他源代码文件。输入点用来表示该符号是否接收外界传入数据,在PHP中通常$_GET、$_POST、$_COOKIE、$_REQUEST、file_get_contents等变量或函数会从外部获取数据。
本实施例根据符号结构中的符号类型进行分别处理。对标记为引入文件的符号结构,由于PHP语言的灵活性和语法的多样性,在调用require、require_once、include或include_once等引入文件函数时,其参数可以由表达式构成,此处表达式通常由字符串、变量或常量构成,而表示式的构成会记录在符号结构中的子符号结构中,通过分析符号结构中的子符号结构,对表达式中的字符串、变量和常量符号类型分别进行处理。
对于表示字符串的子符号结构,可以直接返回其该符号结构中的符号内容。对于表示变量或常量的子符号结构,需要遍历符号表查找该变量或常量的符号结构,将查找到的符号结构传入到符号计算器中进一步处理。对于标记为输入点的符号结构,在语义分析时会进行规约操作,如果该符号结构是表示赋值操作符号结构的子符号结构,则将上层表示赋值操作的符号结构标记为污点数据,并设置该符号结构所在的符号表污点数据属性为存在污点数据,否则直接设置符号表污点数据属性为存在污点数据。生成完整的结点符号,用于后续分析。
图5示出了本发明代码审计方法的另一些实施例的流程示意图,如图5所示,本实施例中,文件引入型特征的符号结构包括字符串型子符号结构、变量/常量型子符号结构;输入点型特征的符号结构包括表示赋值操作的子符号结构。本实施例的符号结构语义分析步骤222,包括:符号内容确定步骤2221,基于字符串型子符号结构,确定文件引入型特征的符号结构的符号内容;符号结构确定步骤2222,基于变量/常量型子符号结构,确定与变量/常量型子符号结构对应的符号结构,得到语义分析后的符号结构。
图6示出了本发明代码审计方法的另一些实施例的流程示意图,如图6所示,本实施例中,符号结构计算步骤220还包括:符号值获取步骤223,对语义分析后的符号结构进行递归处理,得到符号值,符号值为程序源代码的语句的符号值;符号值匹配步骤224,将符号值与程序源代码的语句进行匹配,在符号表中关联符号值与程序源代码的语句,生成第二结点符号。
本实施例这里对多种表达式进行处理,符号计算的过程是对符号结构的递归处理,以获取符号结构所代表的源代码语句的符号值。最终,生成结点符号。
图7示出了本发明代码审计方法的另一些实施例的流程示意图,如图7所示,本实施例中,语义分析后的符号结构包括表达式。本实施例的符号值获取步骤223,包括:类型判断步骤2231,对表达式进行类型判断,得到表达式类型,表达式类型包括简单赋值表达式、复杂赋值表达式、运算表达式、数组调用表达式、函数调用表达式、类属性调用表达式、类方法调用表达式中的至少一种;符号值计算步骤2232,基于表达式类型,对表达式进行符号计算,得到符号值。
本实施例中,对于简单赋值表达式,其符号结构记录赋值表达式左部的符号信息,在子符号结构中记录赋值表达式右部的符号信息,简单表达式右部通常由字符串、整型等常量和变量构成,直接将简单表达式右部的值赋给符号结构中符号属性下的符号值中,而该符号结构表示一个变量。对于复杂赋值表达式,复杂赋值表达式左部可以为变量、数组调用、函数调用、类属性调用、类方法调用等形式,复杂赋值表达式右部可以为各种运算表达式、数组调用、函数调用、类属性调用、类方法调用等方式的结合。对于复杂表达式左部和右部需要进一步进行符号计算的符号结构,将其输入到符号计算器中进行分析,获取左部和右部的结果,设置相应的符号结构及其符号值。
对于运算表达式,主要由运算操作符和运算项构成,运算操作符包含四目运算、位运算、或与非异或运算等,运算项包含变量、数组调用、函数调用、类属性调用、类方法调用等。在符号计算时,对于已计算出的变量,直接从符号表中获取相应的符号结构,从符号结构中的符号属性获取符号值,对于未计算出的变量,则将其符号结构传入到符号计算中进行分析,以获取该符号结构的符号值,在获取到所有运算项符号结构的符号值后,根据运算符类型,对这些符号结构进行计算,获取该运算表达式的符号值。
对于数组调用,在符号表中查找该数组的符号结构,对其进行符号计算。数组中具体项的符号值,也是由赋值表达式而来,将其传入给符号计算器中,进行分析,通过赋值表达式获取相应的符号值。
对于函数调用,重点关注函数返回值。分析函数内部处理流程,将函数内的各个符号结构逐步分析,计算各个赋值表达式的符号值,进一步对表示函数调用的符号结构进行符号计算得到其符号值,逐步推导获取该函数调用的最终返回值,并将其赋值给相应符号结构的符号值。
对于类属性调用,主要对公有类属性、静态类属性和常量类属性,其符号计算过程类似于对变量、常量的处理。
对于类方法调用,其符号计算过程类似于函数调用的处理。
对于其他需要进行符号计算的符号结构进行处理,获得各个符号结构的符号值。
图8示出了本发明代码审计方法的另一些实施例的流程示意图,如图8所示,本实施例中,符号表生成步骤300,包括:结点符号汇集步骤310,将第一结点符号与第二结点符号加入到符号表中,生成中间符号表;抽象语法树分析判断步骤320,判断抽象语法树分析是否完成,得到第二判断结果;基于第二判断结果为是,将中间符号表作为符号表;基于第二判断结果为否,执行抽象语法树分析步骤。收集生成的结点符号,加入到符号表中,符号表与程序源代码文件是一一对应关系,是对源代码的结构化表示。
本实施例中,抽象语法树和程序源代码文件相关联,是将程序源代码进行词法分析、语法分析后树型结构表示,抽象语法树分析按照从上向下、从左向右进行,也对应着文件中源代码自上而下的构成,当分析到抽象语法树最右侧末端结点时,标志着该抽象语法树分析过程完成。
图9示出了本发明代码审计方法的另一些实施例的流程示意图,如图9所示,本实施例的代码审计方法中污点分析步骤400,包括:污点符号判断步骤410,对符号结构进行污点标记判断,得到第三判断结果;基于第三判断结果为是,基于第一符号结构,生成第一污点符号;基于第三判断结果为否,对第二符号结构进行污点语义分析;污点语义分析步骤420,基于污点数据,对第二符号结构进行语义分析,得到第二污点符号和/或记录有污点执行路径的第三污点符号;污点符号表生成步骤430,基于第一污点符号、第二污点符号、第三污点符号,得到污点符号表和污点执行路径表。
本实施例中,污点符号判断步骤410,分析符号结构以及数据流向,判断该符号结构及其子结构是否引入了污点数据、是否传播了污点数据、污点数据是否经过安全函数处理、污点数据是否传递给敏感函数,从而进行污点符号标记,跟踪污点数据的传播路径。对于传递给敏感函数而未经过安全函数处理的污点数据,会在污点符号中记录其污点执行路径。
此步骤的关键点在于判断该符号结构及其子结构是否引入了污点数据、是否传播了污点数据、污点数据是否经过安全函数处理、污点数据是否传递给敏感函数,在对符号结构进行语义分析时,会对这四种情形进行分别处理。
污点语义分析步骤420,首先对每个符号结构的符号类型进行判断,污点数据的引入判断主要对以下情形进行处理:如果符号类型是赋值操作,则判断赋值操作符右部即该符号结构的所有字符号结构是否存在被污点标记的污点符号,如果存在则将此符号结构进行污点标记;如果符号类型是函数或方法调用,则需要进一步分析该函数或方法,判断该函数和方法是否存在返回值,并且返回值中是否存在污点数据,如果存在返回值并且返回值为污点数据,则创建临时符号结构并进行污点标记,以便处理函数和方法调用后的后续操作。
本实施例中,污点数据的传播判断主要是对函数或方法调用的处理,在对符号结构的符号类型进行判断后,如果符号类型是函数或方法调用,则需要进一步分析该函数或方法调用中的参数,如果传递的参数中存在被污点标记的符号结构,则在对相应的函数或方法进行处理时,需要在函数或方法中创建临时符号结构并进行污点标记,以便分析函数或方法的内部处理逻辑,并记录污点数据的传播路径。
污点数据是否经过安全函数处理的判断,是对符号结构的污点标记进行判断,如果该污点标记是安全函数处理而非污点数据,则会进一步判断该符号结构的子符号结构,通过查找污点符号表来判断子符号结构是否已被污点标记,如果是则在污点符号表中删除该污点符号,否则不进行处理。
污点数据是否经过敏感函数处理的判断,是对符号结构的污点标记进行判断,如果该污点标记是敏感函数处理而非污点数据,则会进一步判断该符号结构的子符号结构,通过查找污点符号表来判断字符号结构是否已被污点标记,如果是则填充污点执行路径结构,添加到污点符号表中。
图10示出了本发明代码审计方法的另一些实施例的流程示意图,如图10所示,本实施例的代码审计方法中污点语义分析步骤420,包括:污点符号添加步骤421,对全局变量的符号结构的外部作用域中添加污点标记的第四污点符号;污点符号计算步骤422,对第四污点符号进行符号计算,得到符号计算后的第四污点符号。其中,第二污点符号包括符号计算后的第四污点符号。
本实施例中,符号类型可以是全局变量,则判断局部作用域中该符号结构是否进行了污点标记,如果进行了污点标记则在外部作用域中添加相应的符号结构并进行污点标记,以便后续处理。
图11示出了本发明代码审计方法的另一些实施例的流程示意图,如图11所示,本实施例的代码审计方法的污点分析步骤400,还包括:污点符号表分析判断步骤440,基于符号表,判断污点符号表是否完成,得到第四判断结果;基于第四判断结果为是,执行漏洞检查步骤;基于第四判断结果为否,执行污点分析步骤。
本实施例中,完成的标准是所有污点符号表都分析完成。污点符号表符号表是一个线性结构,每个文件都有相应的符号表结构,当一个文件中的符号表都进行污点分析后,会继续分析下一个文件的符号表,所有文件对应的符号表都分析完成后,标志着污点分析过程的结束。
图12示出了本发明代码审计方法的另一些实施例的流程示意图,如图12所示,本实施例的代码审计方法还包括:漏洞报告生成步骤800,基于潜在漏洞,得到漏洞报告。
本实施例中对生成的污点符号表进行漏洞检查。遍历污点符号表,将污点符号表中存在污点执行路径的污点符号标记为潜在漏洞。收集潜在漏洞信息,生成漏洞报告。程序源代码审计完成。
根据本发明的另一方面,提供一种代码审计装置。图13示出了本发明的代码审计装置的一个实施例的结构示意图,如图13所示,本实施例的代码审计装置包括:抽象语法树构建单元10,用于基于程序源代码文件,得到抽象语法树,抽象语法树包括用于表示程序源代码文件的语法结构的结点;抽象语法树分析单元20,用于基于污点数据库,对结点进行语法结构解析,得到符号结构,符号结构包括污点符号标记后的第一符号结构和/或未污点标记的第二符号结构;符号表生成单元30,用于基于符号结构计算,生成符号表,符号表包括与程序源代码相匹配的结点符号;污点分析单元40,用于对符号表进行污点分析,得到污点符号表与污点执行路径表;漏洞检查单元50,用于遍历污点符号表与污点执行路径表,得到潜在漏洞,其中,潜在漏洞包括存在污点执行路径的污点符号。
使用本实施例的代码审计装置进行代码审计,可以理解上下文语境,建立上下文关联性,构建完整的污点数据传播路径,减少误报和漏报,提高安全漏洞检测效率。
图14示出了本发明的代码审计装置的一个实施例的结构示意图,如图14所示,本实施例的代码审计装置还包括词法分析单元60,用于对程序源代码文件进行词法分析,得到词法单元序列;语法分析单元70,用于对词法单元序列进行语法分析,基于词法单元序列,生成语法结构;基于语法结构,得到抽象语法树。在一些实施例中,词法单元序列包括多个词法单元,词法单元包括词法单元名、词法单元内容、词法单元类型、词法单元行号、词法单元列号。通过对程序源代码进行词法分析与语法分析,使程序源代码生成的语法树更准确。
图15示出了本发明的代码审计装置的一个实施例的结构示意图,如图15所示,本实施例的抽象语法树分析单元20,包括:符号结构标记模块21,用于对于与污点数据库中的符号结构相同的符号结构进行污点符号标记,得到第一符号结构;符号结构计算模块22,用于基于符号结构的类型对符号结构分别进行符号计算,得到结点符号。通过符号结构标记模块21可以降低对符号结构的计算量,提高工作效率。
在一些实施例中,图16示出了本发明的代码审计装置的一个实施例的结构示意图,如图16所示,本实施例的符号结构计算模块22,包括:符号分析子模块2201,用于基于符号结构的符号特征进行符号分析判断,得到第一判断结果;基于第一判断结果符合预设符号特征,对符号结构进行语义分析;基于第一判断结果不符合预设符号特征,符号结构生成第一结点符号;预设符号特征包括符号结构的符号特征为文件引入型特征或输入点型特征;符号结构语义分析子模块2202,用于对符合预设符号特征的符号结构的子符号结构进行语义分析,得到语义分析后的符号结构。通过符号结构计算模块22,可针对不同类型的符号结构进行处理,提高符号表的准确性。
在一些实施例中,图17示出了本发明的代码审计装置的一个实施例的结构示意图,如图17所示,本实施例的文件引入型特征的符号结构包括字符串型子符号结构、变量/常量型子符号结构;输入点型特征的符号结构包括表示赋值操作的子符号结构。符号结构语义分析子模块2202,包括:符号内容确定子模块22021,用于基于字符串型子符号结构,确定文件引入型特征的符号结构的符号内容;符号结构确定子模块22022,用于基于变量/常量型子符号结构,确定与变量/常量型子符号结构对应的符号结构,得到语义分析后的符号结构。通过符号结构语义分析子模块2202可针对特定的符号结构进行特殊处理,保障符号表相对于程序源代码的完整性。
在一些实施例中,图18示出了本发明的代码审计装置的一个实施例的结构示意图,如图18所示,本实施例的符号结构计算模块22,还包括:符号值获取子模块2203,对语义分析后的符号结构进行递归处理,得到符号值,符号值为程序源代码的语句的符号值;符号值匹配子模块2204,将符号值与程序源代码的语句进行匹配,在符号表中关联符号值与程序源代码的语句,生成第二结点符号。通过符号结构计算模块22可将结点符号与程序源代码语句进行对应,保障了符号结构的上下文语境的完整性。
在一些实施例中,语义分析后的符号结构包括表达式。图19示出了本发明的代码审计装置的一个实施例的结构示意图,如图19所示,本实施例的符号值获取子模块2203,包括:类型判断子模块22031,用于对表达式进行类型判断,得到表达式类型,表达式类型包括简单赋值表达式、复杂赋值表达式、运算表达式、数组调用表达式、函数调用表达式、类属性调用表达式、类方法调用表达式中的至少一种;符号值计算子模块22032,用于基于表达式类型,对表达式进行符号计算,得到符号值。本实施例通过对不同类型的符号结构设置不同的计算方式,保障了数据的完整性。
在一些实施例中,图20示出了本发明的代码审计装置的一个实施例的结构示意图,如图20所示,本实施例的符号表生成单元30,包括:结点符号汇集模块31,用于将第一结点符号与第二结点符号加入到符号表中,生成中间符号表;抽象语法树分析判断模块32,用于判断抽象语法树分析是否完成,得到第二判断结果;基于第二判断结果为是,将中间符号表作为符号表;基于第二判断结果为否,对结点进行语法结构解析。
在一些实施例中,图21示出了本发明的代码审计装置的一个实施例的结构示意图,如图21所示,本实施例的污点分析单元40包括:污点符号判断模块41,用于对符号结构进行污点标记判断,得到第三判断结果;基于第三判断结果为是,基于第一符号结构,生成第一污点符号;基于第三判断结果为否,对第二符号结构进行污点语义分析;污点语义分析模块42,用于基于污点数据,对第二符号结构进行语义分析,得到第二污点符号和/或记录有污点执行路径的第三污点符号;污点符号表生成模块43,用于基于第一污点符号、第二污点符号、第三污点符号,得到污点符号表和污点执行路径表。本实施例通过生成污点符号表与污点执行路径表,避免了由于数据传播路径的断裂会导致污点数据传播中断,从而产生遗漏程序源代码中语句的缺陷产生。
在一些实施例中,图22示出了本发明的代码审计装置的一个实施例的结构示意图,如图22所示,本实施例的污点语义分析模块42,包括:污点符号添加子模块4201,用于对全局变量的符号结构的外部作用域中添加污点标记的第四污点符号;污点符号计算子模块4202,用于对第四污点符号进行符号计算,得到符号计算后的第四污点符号;第二污点符号包括符号计算后的第四污点符号。通过设置污点符号添加子模块4201与污点符号计算子模块4202,提高了对程序源代码中全局变量的处理的准确性,保障符号表生成的准确性。
在一些实施例中,图23示出了本发明的代码审计装置的一个实施例的结构示意图,如图23所示,本实施例的污点分析单元,还包括:污点符号表分析判断模块44,用于基于符号表,判断污点符号表是否完成,得到第四判断结果;基于第四判断结果为是,执行漏洞检查;基于第四判断结果为否,执行污点分析。本实施例保障了符号表与程序源代码匹配的准确性,避免污点分析遗漏,提高了污点分析的准确性。
图24示出了本发明的代码审计装置的一个实施例的结构示意图,如图24所示,本实施例的代码审计装置还包括:漏洞报告生成单元60,用于基于潜在漏洞,得到漏洞报告。本实施例方便了开发人员对程序源代码的潜在漏洞的全局掌握,可为开发人员处理潜在漏洞提供依据。
图25示出了本发明的电子设备的一个实施例的结构示意图。下面参考图25,其示出了适于用来实现本申请实施例的终端设备或服务器的电子设备的结构示意图。如图25所示,该电子设备该电子设备包括处理器和存储器。电子设备也可以包括输入输出装置。存储器、输入输出装置均通过总线与处理器连接。其中,存储器,用于存储处理器执行的指令;处理器,用于调用存储器存储的指令,并执行上述实施例涉及的代码审计方法。
本发明实施例中处理器可调用存储器存储的指令,进行抽象语法树构建步骤、抽象语法树分析步骤、符号表生成步骤、污点分析步骤、漏洞检查步骤。其中,电子设备执行代码审计的过程,可参阅上述实施例描述的出行信息处理的实施过程,在此不再赘述。
本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在计算机上运行时,执行上述实施例涉及的代码审计方法。
本发明实施例还提供一种包含指令的计算机程序产品,当包含指令的计算机程序产品在计算机上运行时,使得计算机执行上述实施例涉及的代码审计方法。
在一个或多个可选实施方式中,本公开实施例还提供了一种计算机可读存储介质,用于存储计算机可读指令,该指令被执行时使得计算机执行上述任一可能的实现方式中的出行信息处理的方法。在另一个可选例子中,该计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
尽管在附图中以特定的顺序描述操作,但是不应将其理解为要求按照所示的特定顺序或是串行顺序来执行这些操作,或是要求执行全部所示的操作以得到期望的结果。在特定环境中,多任务和并行处理可能是有利的。
本发明的方法和装置能够利用标准编程技术来完成,利用基于规则的逻辑或者其他逻辑来实现各种方法步骤。还应当注意的是,此处以及权利要求书中使用的词语“装置”和“模块”意在包括使用一行或者多行软件代码的实现和/或硬件实现和/或用于接收输入的设备。
此处描述的任何步骤、操作或程序可以使用单独的或与其他设备组合的一个或多个硬件或软件模块来执行或实现。在一个实施方式中,软件模块使用包括包含计算机程序代码的计算机可读介质的计算机程序产品实现,其能够由计算机处理器执行用于执行任何或全部的所描述的步骤、操作或程序。
出于示例和描述的目的,已经给出了本发明实施的前述说明。前述说明并非是穷举性的也并非要将本发明限制到所公开的确切形式,根据上述教导还可能存在各种变形和修改,或者是可能从本发明的实践中得到各种变形和修改。选择和描述这些实施例是为了说明本发明的原理及其实际应用,以使得本领域的技术人员能够以适合于构思的特定用途来以各种实施方式和各种修改而利用本发明。

Claims (10)

1.一种代码审计方法,其中,包括:
抽象语法树构建步骤,基于程序源代码文件,得到抽象语法树,所述抽象语法树包括用于表示所述程序源代码文件的语法结构的结点;
抽象语法树分析步骤,基于污点数据库,对所述结点进行语法结构解析,得到符号结构,所述符号结构包括污点符号标记后的第一符号结构和/或未污点标记的第二符号结构;
符号表生成步骤,基于符号结构计算,生成符号表,所述符号表包括与所述程序源代码相匹配的结点符号;
污点分析步骤,对所述符号表进行污点分析,得到污点符号表与污点执行路径表;
漏洞检查步骤,遍历所述污点符号表与所述污点执行路径表,得到潜在漏洞,其中,所述潜在漏洞包括存在污点执行路径的污点符号。
2.根据权利要求1所述的方法,其中,所述方法还包括:
词法分析步骤,对所述程序源代码文件进行词法分析,得到词法单元序列;
语法分析步骤,对所述词法单元序列进行语法分析,基于所述词法单元序列,生成语法结构;
基于所述语法结构,得到所述抽象语法树。
3.根据权利要求2所述的方法,其中,所述词法单元序列包括多个词法单元,所述词法单元包括词法单元名、词法单元内容、词法单元类型、词法单元行号、词法单元列号。
4.根据权利要求1-3中任一项所述的方法,其中,所述抽象语法树分析步骤,包括:
符号结构标记步骤,对于与所述污点数据库中的符号结构相同的所述符号结构进行污点符号标记,得到所述第一符号结构;
符号结构计算步骤,基于所述符号结构的类型对所述符号结构分别进行符号计算,得到结点符号。
5.根据权利要求4所述的方法,其中,所述符号结构计算步骤,包括:
符号分析步骤,基于所述符号结构的符号特征进行符号分析判断,得到第一判断结果;
基于所述第一判断结果符合预设符号特征,对所述符号结构进行语义分析;基于所述第一判断结果不符合所述预设符号特征,所述符号结构生成第一结点符号;所述预设符号特征包括所述符号结构的符号特征为文件引入型特征或输入点型特征;
符号结构语义分析步骤,对符合所述预设符号特征的所述符号结构的子符号结构进行语义分析,得到语义分析后的符号结构。
6.根据权利要求5所述的方法,其中,文件引入型特征的符号结构包括字符串型子符号结构、变量/常量型子符号结构;输入点型特征的符号结构包括表示赋值操作的子符号结构;
所述符号结构语义分析步骤,包括:
符号内容确定步骤,基于所述字符串型子符号结构,确定所述文件引入型特征的符号结构的符号内容;
符号结构确定步骤,基于所述变量/常量型子符号结构,确定与所述变量/常量型子符号结构对应的所述符号结构,得到所述语义分析后的符号结构。
7.根据权利要求6所述的方法,其中,所述符号结构计算步骤,包括:
符号值获取步骤,对所述语义分析后的符号结构进行递归处理,得到符号值,所述符号值为所述程序源代码的语句的符号值;
符号值匹配步骤,将所述符号值与所述程序源代码的语句进行匹配,在所述符号表中关联所述符号值与所述程序源代码的语句,生成第二结点符号。
8.一种代码审计装置,其中,包括:
抽象语法树构建单元,用于基于程序源代码文件,得到抽象语法树,所述抽象语法树包括用于表示所述程序源代码文件的语法结构的结点;
抽象语法树分析单元,用于基于污点数据库,对所述结点进行语法结构解析,得到符号结构,所述符号结构包括污点符号标记后的第一符号结构和/或未污点标记的第二符号结构;
符号表生成单元,用于基于符号结构计算,生成符号表,所述符号表包括与所述程序源代码相匹配的结点符号;
污点分析单元,用于对所述符号表进行污点分析,得到污点符号表与污点执行路径表;
漏洞检查单元,用于遍历所述污点符号表与所述污点执行路径表,得到潜在漏洞,其中,所述潜在漏洞包括存在污点执行路径的污点符号。
9.一种电子设备,其中,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,存储有计算机程序,其中,所述计算机程序被处理器执行时,实现权利要求1-7任一所述的方法。
CN201910252375.XA 2019-03-29 2019-03-29 代码审计方法及装置 Active CN110059006B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910252375.XA CN110059006B (zh) 2019-03-29 2019-03-29 代码审计方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910252375.XA CN110059006B (zh) 2019-03-29 2019-03-29 代码审计方法及装置

Publications (2)

Publication Number Publication Date
CN110059006A true CN110059006A (zh) 2019-07-26
CN110059006B CN110059006B (zh) 2020-07-07

Family

ID=67318033

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910252375.XA Active CN110059006B (zh) 2019-03-29 2019-03-29 代码审计方法及装置

Country Status (1)

Country Link
CN (1) CN110059006B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111222141A (zh) * 2019-12-31 2020-06-02 广东为辰信息科技有限公司 一种汽车电控单元代码漏洞分析方法和系统
CN111309631A (zh) * 2020-03-16 2020-06-19 深信服科技股份有限公司 一种代码审计方法、装置、设备及计算机可读存储介质
CN111666218A (zh) * 2020-06-08 2020-09-15 北京字节跳动网络技术有限公司 代码审计方法、装置、电子设备及介质
CN112100054A (zh) * 2020-08-12 2020-12-18 北京大学 一种面向数据管控的程序静态分析方法和系统
CN114279718A (zh) * 2021-11-30 2022-04-05 重庆长安汽车股份有限公司 一种基于实时车况的可配置故障诊断方法及故障诊断系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101482847A (zh) * 2009-01-19 2009-07-15 北京邮电大学 一种基于安全漏洞缺陷模式的检测方法
US20120198558A1 (en) * 2009-07-23 2012-08-02 NSFOCUS Information Technology Co., Ltd. Xss detection method and device
CN103455759A (zh) * 2012-06-05 2013-12-18 深圳市腾讯计算机系统有限公司 一种页面漏洞检测装置及检测方法
CN106709356A (zh) * 2016-12-07 2017-05-24 西安电子科技大学 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法
CN108875366A (zh) * 2018-05-23 2018-11-23 四川大学 一种面向php程序的sql注入行为检测系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101482847A (zh) * 2009-01-19 2009-07-15 北京邮电大学 一种基于安全漏洞缺陷模式的检测方法
US20120198558A1 (en) * 2009-07-23 2012-08-02 NSFOCUS Information Technology Co., Ltd. Xss detection method and device
CN103455759A (zh) * 2012-06-05 2013-12-18 深圳市腾讯计算机系统有限公司 一种页面漏洞检测装置及检测方法
CN106709356A (zh) * 2016-12-07 2017-05-24 西安电子科技大学 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法
CN108875366A (zh) * 2018-05-23 2018-11-23 四川大学 一种面向php程序的sql注入行为检测系统

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111222141A (zh) * 2019-12-31 2020-06-02 广东为辰信息科技有限公司 一种汽车电控单元代码漏洞分析方法和系统
CN111222141B (zh) * 2019-12-31 2021-10-19 广东为辰信息科技有限公司 一种汽车电控单元代码漏洞分析方法和系统
CN111309631A (zh) * 2020-03-16 2020-06-19 深信服科技股份有限公司 一种代码审计方法、装置、设备及计算机可读存储介质
CN111309631B (zh) * 2020-03-16 2024-04-09 深信服科技股份有限公司 一种代码审计方法、装置、设备及计算机可读存储介质
CN111666218A (zh) * 2020-06-08 2020-09-15 北京字节跳动网络技术有限公司 代码审计方法、装置、电子设备及介质
CN112100054A (zh) * 2020-08-12 2020-12-18 北京大学 一种面向数据管控的程序静态分析方法和系统
CN114279718A (zh) * 2021-11-30 2022-04-05 重庆长安汽车股份有限公司 一种基于实时车况的可配置故障诊断方法及故障诊断系统
CN114279718B (zh) * 2021-11-30 2023-02-28 重庆长安汽车股份有限公司 一种基于实时车况的可配置故障诊断方法及故障诊断系统

Also Published As

Publication number Publication date
CN110059006B (zh) 2020-07-07

Similar Documents

Publication Publication Date Title
US11221832B2 (en) Pruning engine
CN110059006A (zh) 代码审计方法及装置
CN111459799B (zh) 一种基于Github的软件缺陷检测模型建立、检测方法及系统
Pradel et al. A framework for the evaluation of specification miners based on finite state machines
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
EP3695310A1 (en) Blackbox matching engine
US9122540B2 (en) Transformation of computer programs and eliminating errors
Sarhan et al. A survey of challenges in spectrum-based software fault localization
CN101739335A (zh) 建议的应用评估系统
CN109033843A (zh) 用于分布式静态检测系统的Java文件依赖性分析方法及模块
CN102662825B (zh) 一种面向堆操作程序的内存泄漏检测方法
CN103914379B (zh) 故障自动注入与故障检测的方法及其系统
CN102141959B (zh) 一种受上下文无关文法约束的测试用例生成方法
CN113901083B (zh) 基于多解析器的异构数据源操作资源解析定位方法和设备
CN108563561B (zh) 一种程序隐性约束提取方法及系统
CN109002712A (zh) 一种基于值依赖图的污染数据分析方法、系统与电子设备
Meqdadi et al. A study of code change patterns for adaptive maintenance with AST analysis
Wang et al. Locating need-to-externalize constant strings for software internationalization with generalized string-taint analysis
Burrows et al. Coupling metrics for aspect-oriented programming: A systematic review of maintainability studies
Tsoukalas et al. An ontology-based approach for automatic specification, verification, and validation of software security requirements: Preliminary results
CN115080448A (zh) 一种软件代码不可达路径自动检测的方法和装置
Romero et al. Using the base semantics given by fUML for verification
CN109710538A (zh) 一种用于大规模系统中状态相关缺陷的静态检测方法
Ukić et al. The influence of cyclomatic complexity distribution on the understandability of xtUML models
Requeno et al. Evaluation of properties over phylogenetic trees using stochastic logics

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