Codeql简介
codeql是一个可以对代码进行分析的引擎, 安全人员可以用它作为挖洞的辅助或者直接进行挖掘漏洞,节省进行重复操作的精力。
Codeql组成
Codeql主要由两个部分组成,解析引擎和SDK
解析引擎:用来解析我们编写的规则,本身不开源,可以直接在官网下载二进制文件使用
SDK:包含大部分现成的漏洞规则,可以利用其编写自定义规则。完全开源
引擎下载地址:https://github.com/github/codeql-cli-binaries/releases
SDK下载地址:https://github.com/Semmle/ql
CodeQL的使用协议里禁止在企业的CI/CD里部署
安装过程
新建一个codeql文件夹,并且从官网下载引擎以及SDK
引擎下载:https://github.com/github/codeql-cli-binaries/releases
SDK下载:git clone https://github.com/Semmle/ql
codesql文档:https://codeql.github.com/docs/
下载以后在codeql目录中有两个文件夹
设置codeql引擎的环境变量
另外,我们可以在该目录下新建databases目录,用于存在codeql生成的数据库。
上面安装完成了引擎和SDK,下面我们需要安装一个vscode插件,以便我们可以方便的使用。
配置引擎路径
先来大致看一下这个插件
包含了四个部分:
1)导入数据库:使用首先要导入一个codeql生成的数据库
2)VARIANT ANALYSIT REPOSITORIES:暂时不知道作用
3)query history:查询历史
4)AST VIEWER:可以查看生成的AST内容
简单使用过程
首先使用命令通过codeql引擎生成可以别ql查询的数据库,然后编写ql查询语句查询数据库,根据设置的规则判断是否存在漏洞。
1.生成数据库
CodeQL的处理对象并不是源码本身,而是中间生成的AST结构数据库,所以我们先需要把我们的项目源码转换成CodeQL能够识别的CodeDatabase。
我使用了java漏洞靶场来生成数据库。
codeql database create E:\codeql\databases\hellojavasec-database --language=java --command="mvn clean install --file pom.xml" --source-root=E:\java靶场\Hello-Java-Sec-master --overwrite
没有报错,则生成了AST数据库
将数据库导入VScode中
接下来,就可以编写查询语句进行查询了
codeql语法基础
AST语法树
要想学习codeql必须了解AST语法树,这个是学习的基础。
CodeQL是识别不了源码本身的,而是通过CodeQL引擎把源码转换成CodeQL可识别的AST结构数据库,所以想要真正理解CodeQL原理,要学会看懂分析AST抽象语法树。