codeql学习(1)
2022-09-08 10:27:29 # codeql

简介

codeql是一个将代码转化成类似数据库的形式,并基于该database进行分析的引擎。在 codeql中,代码被视为数据。安全漏洞、Bug 和其他错误被建模为可针对从代码中提取的数据库执行的查询。

codeql分析

codeql分析可分为三个步骤:

  1. 创建codeql数据库
  2. 运行codeql查询语句分析数据库
  3. 解析查询结果

下载与安装

codeql本身包含两部分:解析引擎+SDK

  • 解析引擎用来解析我们编写的规则;
  • SDK为开源的,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则;

codeql解析引擎:CodeQL-cli ,下载并设置好codeql环境变量;

SDK:codeql查询包,用于分析查询的库文件和基础元数据等;

下载好codeql解析引擎和SDK后,我这里把他们放到同一个文件夹里

image-20220908111750354

配置好环境变量后,在cmd中输入codeql,出现如下结果代表安装成功

image-20220908111902236

数据库创建

数据库创建有两种方式:

  1. 在线创建
  2. 命令行创建

在线创建

通过lgtm在线网站编译github或Bitbucket 项目,打开网址,输入项目地址,点击Follow,在下面列表会产生该项目,再点击Enable PR code reviews,进入如下界面,鼠标移到Query this project,点击下载数据库即可。

image-20220908113012898

命令行创建

下载好对应的项目,执行codeql database create [编译后的数据库生成路径] --language=java --command="mvn clean install --file pom.xml" --source-root="./apps/WebGoat"

  • -l,--language=<lang> 创建数据库的语言
  • -s,--source-root=<dir> 项目的源代码路径,默认为当前路径
  • -j,--threads=<num> 生成数据库使用的线程数,默认为1
  • -M,--ram=<MB> 使用多大内存执行生成命令
  • -c.--command=<command> 构建项目使用的命令,如maven项目使用mvn clean package
  • --overwrite 覆盖之前生成的数据库,如果不加上该命令,若存在同名数据库,则报错。

在使用命令行创建数据库时可能会出现报错,影响数据库的创建,可参考如下链接:

https://blog.51cto.com/ios9/3113441

在pom.xml中添加如下插件,忽略报错即可。

1
2
3
4
5
6
7
8
9
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>
maven-surefire-plugin
</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>

数据库解析

有了数据库之后,我们要在VSCode插件商店中搜索codeql,安装插件,然后配置codeql引擎的路径,到此安装完毕

image-20220908112132672

在所下载的codeql插件中,点击Choose Database from Archive,选择上述生成的database导入。

image-20220908120036218

选择好数据库之后,用VSCode打开前面下载的SDK,在ql/java/ql/examples文件夹下新建一个demo.ql,这里测试输出”hello world”。

image-20220908121008190