CodeQL 的整体思路是把源代码转化成一个可查询的数据库,通过 Extractor 模块对源代码工程进行关键信息分析提取,构成一个关系型数据库。CodeQL 的数据库并没有使用现有的数据库技术,而是一套基于文件的自己的实现。

对于编译型语言,Extractor 会监控编译过程,编译器每处理一个源代码文件,它都会收集源代码的相关信息,如:语法信息(AST 抽象语法树)、语意信息(名称绑定、类型信息、运算操作等),控制流、数据流等,同时也会复制一份源代码文件。

而对于解释性语言,Extractor 则直接分析源代码,得到类似的相关信息。关键信息提取完成后,所有分析所需的数据都会导入一个文件夹,这个就是 CodeQL database, 其中包括了源代码文件、关系数据、语言相关的 database schema(schema 定义了数据之间的相互关系)。

接下来就可以对数据库进行查询了,CodeQL 自己定义实现了一套名为 QL 的查询语言,并提供了相应的支持库和运行环境。
最终将查询结果展示给用户,方便用户进行进一步的人工审计分析。

使用codeql过程

  1. 通过创建 CodeQL 数据库准备代码
  2. 对数据库运行 CodeQL 查询
  3. 解释查询结果

创建数据库

codeql database create —language=

参数说明:

:创建的数据库的路径,必须是不存在的文件夹
—language:如下

C/C++ cpp
C# csharp
Go go
Java java
JavaScript/TypeScript javascript
Python python

其它参数:

—source-root 指定数据库创建时的源文件根目录,默认为当前目录。
—command 指定语言的编译命令,不要给python和JavaScript指定该命令。

非编译型语言创建数据库

codeql database create —language=javascript —source-root /javascript-database

查询执行

创建 CodeQL 数据库后,将对其执行一个或多个查询。CodeQL 查询是用一种专门设计的面向对象的查询语言编写的,称为 QL。您可以使用CodeQL for VS Code 扩展CodeQL CLI运行从 CodeQL 存储库检出的查询(或您自己编写的自定义查询)。有关查询的更多信息,请参阅“关于 CodeQL 查询”

codeql database analyze —format= —output=
参数说明:
预分析的数据库路径
要在数据库上运行的查询。可以指定一个或多个单独的查询文件,指定将以递归方式搜索查询文件的目录,或者命名定义了一组特定查询的查询套件。
—format 分析生成的结果文件的文件格式
—output 分析结果的输出路径
还可以通过—threads指定运行查询时要使用的线程数。默认选项是1

示例:
codeql database analyze ../ql/javascript/ql/src/Declarations/UnusedVariable.ql —format=csv —output=js-analysis/js-results.csv
上述分析的结果会在新创建的文件夹js-analysis下的js-results.csv文件中输出

运行目录中的所有查询

我们可以通过提供目录路径来运行目录中的所有查询,而没必要列出目录中的所有单个查询文件。由于是通过递归搜索读取查询文件的,因此子文件夹中包含的所有查询也将被执行。
重要
您不应在执行database analyze时指定QL pack的根目录, 因为它包含一些并非为命令使用而设计的特殊查询。如果要运行更多的有用的查询,请选择LGTM.com查询套件之一。
例如,要执行Functions 目录中包含的所有Python查询,您将运行:
codeql database analyze ../ql/python/ql/src/Functions/ —format=sarif-latest —output=python-analysis/python-results.sarif
会生成一个SARIF结果文件。通过—format=sarif-latest可确保结果根据CodeQL支持的最新SARIF规范进行格式化。

此篇文章仅为收集不做整理。
大致过程就是 首先利用codeql对源码生成数据库->利用已经写好的查询或者自己编写查询对生成的数据库进行查询->得出查询结果

摘自:https://www.cnblogs.com/goodhacker/p/13544871.html
https://codeql.github.com/docs/codeql-overview/about-codeql/ 官方文档最厉害