白盒源代码安全审计的系统构建以及算法

源码安全性检测是安全性开发过程(SDL)的重要构成部分,在SINE安全的CI/CD过程中,源码安全性检测每天都有数千个量级的构建和发布,因此,白盒检测的自动化能力至关重要。企业白盒代码审计系统不仅要面对漏洞发现的需求,还要适应企业CI/CD流程。因为58集团的大多数业务都使用自研Java框架,所以本系列将着重于我们在Java白盒能力建设方面的实践。该文为白盒扫描建设之路系列文章的第2篇,主要介绍SAST的一些技术原理和应用,官方指南中CodeQL的中文翻译和使用方法。


抽象语法树(AbstractSyntaxTree,XAT),在电子信息科学行业,或通称为语法树(Syntaxtree),是源代码语法结构的一个抽象表示。该方法用树形表示编程语言的语法结构,树中的每个节点代表源代码中的一个结构。语法被称为“抽象的”,是因为这里的语法并不能代表真正语法中出现的每一个细节。例如,嵌套括号隐藏在一个树的结构中,并且不作为一个节点呈现;与else-conditor-unless相近的条件跳转语句可以用一个节点和三个分支来表示。


一般来说,在翻译和编译源代码的过程中,语法分析器创建一个分析树,然后从它生成一个XAT。创建了XAT之后,将在后续处理过程中添加一些信息,例如在语义分析阶段。


抽象性语法树是程序代码源代码结构的树形表示。程序代码源码根据词法分析程序代码(Lexer)获取各种不同类型的单词(Token),根据语法分析程序代码(Parser)深入分析和语法检查获取抽象语法树(XAT)。在抽象语法树中,根节点代表整个程序代码,而内部节点代表抽象语法结构或单词。其核心是,XAT可以和输入源代码中的各个语法元素一一对应。


程序设计语言可以有不同的单元。XAT(XAT)或模型是元模型的一个实例。每一个元模型(因此,每一个XAT)都依赖于当前的任务。举例来说,Sun编译器(javac)的Java元模型已经被设计并优化为作为字节码进行编译,EclipseIDE(JDT)的Java元模型的主要目标是在一种软件中支持不同的软件开发任务。整合方法(代码完成,快速修复编译错误,调试等)。


不像基于编译器的XAT(如javac),Spoon的Java元模型被设计成普通Java开发者容易理解的样子,这样他们就可以自己编写程序深入分析和转换。Spoon元模型是完整的,因为它包含了所有需要用于派生可编译和可执行Java程序代码的信息(包括注释、泛型和方法体)。


分享: