(原创)CodeQL安装配置手册 – 作者:polemo

联系方式:[email protected]

CodeQL是一个静态漏洞检测工具,对源码进行扫描,支持C/C++、Python、Java、JS等语言。CodeQL会对项目的源码进行完整的编译,通过搜集源代码的相关信息以及数据之间的相互关系,将这些信息构建成代码数据库文件;通过编写QL查询语句,可以像对待数据一样对源代码进行查询,从而识别源代码中的漏洞。

其中QL语言是CodeQL自己定义实现的一种查询语言,类似于SQL语言,CodeQL提供了支持库和运行环境。

目前有许多文章都是介绍QL语言的语法和使用案例的,但是对于新手来说,CodeQL的环境配置是迈出的第一步,也是一个难点。

本文将会介绍VSCode上CodeQL的环境配置,并通过一个实例来介绍如何通过CodeQL命令把本地的源代码文件生成可用的CodeQL数据库。

一、VSCode上CodeQL的环境配置

(1)首先在插件库中找到codeql插件安装

1618722147_607bbd63178c2f42e17b9.png!small?1618722149648

(2)下载CodeQL CLI环境

CodeQL CLI是CodeQL的命令行接口,VSCode的CodeQL插件需要CodeQL CLI提供编译和命令查询的环境,安装好CodeQL CLI之后,就可以使用QL文件对目标代码进行分析,所以称CodeQL CLI为CodeQL的分析程序。

CodeQL CLI下载地址:

https://github.com/github/codeql-cli-binaries/releases

下载完之后对压缩包进行解压

(3)下载QL库文件

除了分析程序,想要运行QL代码,还需要相应的库文件,下载地址:

https://github.com/github/codeql/releases

(4)配置环境变量

将库文件和分析程序放到系统盘,注意两者要放到同一个文件夹目录下。设置分析程序的环境变量。环境变量的设置方法请自行百度。

1618722155_607bbd6baa7db8269c447.png!small?1618722158139

(5)测试是否配置成功

在命令行输入codeql,看环境变量是否配置成功:

1618722201_607bbd99270e538ed5f37.png!small?1618722203849

(6)回到VsCode

到这时候,本地的环境基本上已经搭建好了。回到VsCode,在“扩展设置”里面添加分析程序CodeQL CLI的路经:

1618722216_607bbda830bafe64baea1.png!small?1618722218706

1618722219_607bbdabe910146c7b965.png!small?1618722222388

添加完了之后VsCode就可以使用该路径下的分析程序了,其中windows上填codeql.cmd或codeql.exe,Linux或Mac系统下填codeql即可。

接下来打开工作区,将库文件导入进去:

1618722230_607bbdb64703128a41cbb.png!small?1618722232704

至此,我们的环境已经全部搭建完毕,只需要添加待分析的数据库文件,就可以开始分析了。

二、生成数据库

数据库有两种方法可以得到,一个是从网站LGTM中直接下载,另一个就是通过codeql的命令生成我们自己的数据库。

(1)从LGTM网站下载

网站链接:https://lgtm.com/

该网站上有许多codeql分析的项目,拉到最底下可以看到下载链接,直接打包下载。随便点开一个项目,进入其Integrations标签页:

1618722241_607bbdc157ea6b374a36f.png!small?1618722243729

拉到最底下可以看到下载链接:

1618722246_607bbdc60e52b98767c2d.png!small?1618722248710

下载好了之后在VsCode的数据库处导入压缩包:

1618722250_607bbdca3d43d0ad04abb.png!small?1618722252719

接下来打开测试文件就可以进行查询了。在代码文件处右键点击Run Query:

1618722256_607bbdd035997b8d75f7b.png!small?1618722258663

如果有结果,会在右侧显示出来。

(2)使用codeql命令自己生成

如果我们想用自己的源代码文件作为分析对象,这时候就需要使用codeql自带的创建数据库的命令来把源代码文件生成可用的数据库。

使用命令:

codeql database create <database> –language=<language-identifier>

codeql支持语言C/C++、C#、Go、Java、JS和Python,它们的identifier分别为:cpp、csharp、go、java、javascript、python。

对于编译型语言,有时候还需要指定-command参数,该参数后跟编译命令,下文我们将会使用c语言文件作为样例来解释。

选择一个数组下标溢出的c语言文件:

1618722274_607bbde2c429d9c509d23.png!small?1618722277311

使用命令:codeql database create ./large-database –language=cpp -c “gcc large.c -o large”

1618722280_607bbde8585326b95e131.png!small?1618722282900

运行成功后就会发现文件夹下多了一个叫large-database的数据库文件,把该文件导入VsCode就可以执行查询:

1618722316_607bbe0c92331e5afddc8.png!small?1618722319123

1618722320_607bbe106b4893d035f88.png!small?1618722322870

考虑到数组下标溢出属于CWE-119漏洞类型,选择CWE-119的QL文件进行查询,得到查询结果:

1618722326_607bbe165ec69ccb8f715.png!small?1618722328758

点击即可定位到漏洞点。

来源:freebuf.com 2021-04-18 13:12:43 by: polemo

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论