静态代码分析工具SAST
静态软件安全测试工具在不需要执行程序的情况下,获得程序编译时信息,并根据这些信息对特定的漏洞模式进行检测,从而完成软件的安全分析。静态分析考虑了程序所有可能的运行情况,稳妥的分析策略使得分析结果具备可靠性。
静态分析的本质是建立程序的一个状态模型,分析程序是如何在这些状态之间转换的,通过字符串匹配、数据流分析、控制流分析、抽象语法树的语义分析等手段进行路径遍历,完成对状态空间所有路径的近似分析,以发现代码中存在的潜在缺陷以及安全漏洞,并提供修复建议。相较于动态测试,其核心优势在于提前发现漏洞(如SQL注入、跨站脚本等),降低软件上线后的安全风险。
SAST特点:
①可在开发早期阶段检出缺陷,修复成本低;
②可精确定位源代码中的潜在错误;
③代码覆盖率完整;
④易于使用,通用性高。
CodeQL
CodeQL是一种基于查询语言的软件代码分析工具,包括数据文件分析引擎和QL规则库。CodeQL通过将代码转化成类似数据库的形式,结合声明式查询语言QL,查找和分析代码中的潜在漏洞和安全风险。
在 CodeQL 分析流程中,数据库生成是最基础也是最关键的步骤。CodeQL 不直接分析源代码,而是通过将源代码转换为结构化的数据库(包含抽象语法树AST)来进行后续的查询和分析。
CodeQL 数据库生成过程实质上是对源代码进行语法分析和语义提取的过程。通过将源代码解析为抽象语法树(AST),保留了代码的结构信息、符号关系和控制流信息,为后续的污点分析和漏洞检测提供基础。
简单来说,CodeQL分析包括三个步骤:
1. 创建CodeQL 数据库
2. 运行CodeQL 查询语句分析数据库
3. 解析查询结果
CodeQL与静态代码分析工具对比:
CodeQL突出优势:
1、传统静态分析工具依赖规则库匹配,在面对大规模代码库时,存在误报率高、跨文件关联分析能力弱等问题,难以适应现代软件开发需求。CodeQ更适合需要跨语言和跨文件分析的大型项目。
2、CodeQL可用于执行变体分析。(变体分析是使用已知安全漏洞作为种子在代码中查找类似问题的过程。 )