CodeQL快速上手
2021-7-23 15:31:6 Author: mp.weixin.qq.com(查看原文) 阅读量:6 收藏

关于CodeQL可以看科普文Github安全实验室:开源代码分析引擎codeql,设漏洞奖励计划

官方文档给出了CodeQL支持的编程语言及框架。

https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks/

本文涉及的相关官方文档:

https://codeql.github.com/docs/codeql-cli/about-ql-packs/

https://codeql.github.com/docs/codeql-cli/getting-started-with-the-codeql-cli/

https://codeql.github.com/docs/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code/

一、背景描述

写给jiayuan师傅的CodeQL手摸手教程。

二、环境准备

以Java为例,Java是编译型语言,所以你需要事先安装好项目编译所需的全部环境,例如:JDK、Maven。

1、CodeQL CLI

CodeQL CLI用来创建和分析数据库。

1.1 下载CodeQL压缩包:

https://github.com/github/codeql-cli-binaries/releases/latest/download/codeql.zip

1.2 将CodeQL CLI的可执行文件添加到环境变量,方便灵活调用

2、CodeQL 标准库

包含了必须的一些标准库(内置库)和一些查询样例。

CodeQL的标准库不像其他编程语言一样会与解释器同时安装,而是需要我们手动下载。

https://github.com/github/codeql

注意:CodeQL解释器会按照某个规则(我记得没错的话,应该是会查找CodeQL CLI所在目录的兄弟目录以及其子目录)寻找CodeQL标准库的位置,若是没有找到,则需要你手动将CodeQL标准库添加到VSCode的工作区中。

3、Visual Studio Code

下载VSCode,因为官方提供了VSCode编写CodeQL的插件

https://code.visualstudio.com/

4、Visual Studio Code CodeQL插件

Ctrl+Shift+X => 输入CodeQL => install

在CodeQL扩展中配置CodeQL CLI的路径,例如$HOME/codeql_home/codeql.exe

NOTE: 如果你想要中文显示VSCode的话,可以安装中文的插件

三、编写第一个查询

1、下载WebGoat

因为我本地的Java环境是1.8的,WebGoat在新版本中已经不支持Java 1.8,所以通过如下命令下载一个支持Java 1.8的旧版本的WebGoat

git clone --branch v8.0.0 https://github.com/WebGoat/WebGoat.git

2、创建CodeQL数据库

备注:需要已经安装Maven,因为WebGoat项目是基于Maven构建的,CodeQL在创建数据库时,会自动探测并使用对应的编译方式。

在WebGoat根目录下面执行如下命令,会自动编译并且为该项目创建一个名为webgoat-qldb的QL数据库。

codeql database create webgoat-qldb -l java

创建完该项目的数据库后,该项目的源码文件在后面几乎就用不到了(除非像更新QL数据库这种需求),CodeQL查询时主要使用的便是该项目的数据库文件。

3、创建你的第一个QL包

你需要创建一个文件夹,用来存放后续你编写的CodeQL脚本,CodeQL官方称这个文件夹为QL Pack。

例如名为example-query的文件夹,并在里面创建1个QL Pack的配置文件,名称固定为`qlpack.yml`;再创建一个ql后缀的文件,名称随意。

在VSCode中打开这个文件夹

4、编写QL包的配置文件

将如下信息填入qlpack.yml文件

name: example-query

version: 0.0.0

libraryPathDependencies: codeql-java

第一行表示这个QL包的名称为example-query,必选,如果你在VSCode中同时打开多个QL包时,要保证这个name的值唯一不重复;

第二行表示这个QL包的版本号,必选;

第三行表示这个QL包的依赖,必选,codeql-java表示需要Java语言的QL标准库依赖。

5、VSCode工作区增加CodeQL标准库

为了让CodeQL解释器能够访问标准库,我们需要将标准库所在文件夹也加入到加入工作区中。

VSCode - 文件 - 将文件夹加入工作区 - 选择在【环境准备 - CodeQL标准库】章节中存放CodeQL标准库的文件夹。

6、VSCode添加CodeQL数据库

在VSCode的CodeQL插件中添加之前用CodeQL创建的WebGoat的数据库。

选择webgoat-qldb那个文件夹。如下是添加成功后的页面。

7、编写第一个查询

在webgoat-queyr.ql文件中编写如下代码,用来查找WebGoat项目中所有声明的方法。

import java

from Method m

select m

然后右键点击【CodeQL: Run Query 】来执行本次查询,执行完成后在右边可以看到多出一列用来显示查询结果。

点击结果里面的任意条目,可以跳到对应的文件中。


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg4ODU4ODYzOQ==&mid=2247484326&idx=1&sn=fd055d23efe80f5c6758ce9bd01307c9&chksm=cff99396f88e1a80cd1e52c2a17649f6f20da7fe45b743925c80a90b3997395963a9afe84691&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh