前言
学习利用CodeQL进行Java代码审计。本文内容都是入门知识。
一、CodeQL
1.概述
1)CodeQL就是一个可以对代码进行分析的引擎,安全人员可以用它作为挖洞的辅助或者直接进行挖掘漏洞,以节省进行重复操作的精力。
2)CodeQL整体可以看成两部分:第一部分是解析引擎,第二部分是编写的漏洞规则。解析引擎不开源,漏洞规则在ql文件夹中包含官方正式的规则和一些还在实验中的规则,也可以自行编写添加规则。
3)整体的工作流程主要就是两步:首先根据源代码提取创建一个数据库,然后利用漏洞规则中的QL语句去查询。
2.规则库
1)根目录/ql/java/ql/src/Security放着一些官方的规则(java),可直接用。

2)根目录/ql/java/ql/src/experimental/Security目录下,是一些还在实验中的规则(java)。

3)根目录/codeql/ql/java/ql/examples/目录下,可以自己创建文件写查询语句。因为examples目录下有qlpack.yml就不需要再新建了。

3.安装注意点
1)我的电脑是windows系统需要把codeql.exe程序也加上否则添加不了生成的数据库文件夹。



2)由于项目中包含一个QL的子库,所以需要使用递归方式来下拉工作区代码。
git clone --recursive git@github.com:github/vscode-codeql-starter.git
3)windows生成QL数据库包的命令,记录一下方便查找。
# 格式
codeql database create 数据库名 --language="java" --command="mvn clean install --file pom.xml" --source-root=源码路径
# 例子
codeql database create codeql_java-sec-code --language="java" --command="mvn clean install --file pom.xml" --source-root=D:\CodeQL\SourceCode\java-sec-code-master
4.使用CodeQL
选择官方的规则直接使用。然后看着右下角正在操作直接等待结果就好。然后查看对应的代码处分析查看是否误报。



5.数据库的目录结构
创建的数据库的目录结构如下:
|-- codeql-database.yml
|-- db-java # 数据库关系文件
|-- log # 各类日志
| |-- agent.2246013276404151275.log
| |-- agent.6061958391401897389.log
| |-- build-tracer.log
| |-- database-analyze-20221018.113052.681.log
| |-- database-create-20221017.170955.239.log # 创建过程日志
| |-- database-index-files-20221017.171249.794.log
| |-- execute-queries-20221018.113053.384.log
| |-- ext 用于javac的配置文件
| | |-- javac.args
| | |-- javac.env
| | |-- javac.orig
| | `-- javac.properties
| |-- javac-errors.log
| |-- javac-extractor-1683275.log
| `-- javac-output-11812.log
`-- src.zip # 源码文件
6.利用VsCode查看CodeQL生成的AST数据库
1)导入DATAVASES后在工作空间中会出现source archive字眼,这个就是我们被编译后的java源文件。


2)需注意的是我们需要把生成的src.zip解压后才能查看,否则就会报错读取不了。

3)打开源文件中的任意文件,然后切换到QL的AST viewer,点击View AST。

4)等待完成即可查看当前这个文件的AST数据库结构。

本文介绍了CodeQL的基本概念和使用方法,包括其作为代码分析引擎的功能,官方规则库的结构,Windows系统下的安装注意事项,以及如何创建和使用数据库。文章还详细阐述了数据库的目录结构,并指导如何在VsCode中查看AST数据库,帮助开发者进行代码安全审计。
11万+

被折叠的 条评论
为什么被折叠?



