简介
codeql是一个将代码转化成类似数据库的形式,并基于该database进行分析的引擎。在 codeql中,代码被视为数据。安全漏洞、Bug 和其他错误被建模为可针对从代码中提取的数据库执行的查询。
codeql分析
codeql分析可分为三个步骤:
- 创建codeql数据库
- 运行codeql查询语句分析数据库
- 解析查询结果
下载与安装
codeql本身包含两部分:解析引擎+SDK
。
- 解析引擎用来解析我们编写的规则;
- SDK为开源的,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则;
codeql解析引擎:CodeQL-cli ,下载并设置好codeql
环境变量;
SDK:codeql查询包,用于分析查询的库文件和基础元数据等;
下载好codeql解析引擎和SDK后,我这里把他们放到同一个文件夹里
配置好环境变量后,在cmd中输入codeql,出现如下结果代表安装成功
数据库创建
数据库创建有两种方式:
- 在线创建
- 命令行创建
在线创建
通过lgtm在线网站编译github或Bitbucket 项目,打开网址,输入项目地址,点击Follow
,在下面列表会产生该项目,再点击Enable PR code reviews
,进入如下界面,鼠标移到Query this project
,点击下载数据库即可。
命令行创建
下载好对应的项目,执行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 | <plugin> |
数据库解析
有了数据库之后,我们要在VSCode插件商店中搜索codeql,安装插件,然后配置codeql引擎的路径,到此安装完毕
在所下载的codeql插件中,点击Choose Database from Archive
,选择上述生成的database导入。
选择好数据库之后,用VSCode打开前面下载的SDK
,在ql/java/ql/examples文件夹下新建一个demo.ql,这里测试输出”hello world”。