漏洞发现:代码分析引擎 CodeQL

codeql 是一门类似 SQL 的查询语言,通过对源码(C/C++、C#、golang、java、JavaScript、typescript、python)进行完整编译,并在此过程中把源码文件的所有相关信息(调用关系、语法语义、语法树)存在数据库中,然后编写代码查询该数据库来发现安全漏洞(硬编码 / XSS 等)。

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

  • 解析引擎用来解析我们编写的规则,虽然不开源,但是可以直接在官网下载二进制文件直接使用

  • SDK完全开源,里面包含大部分现成的漏洞规则,也可以利用其编写自定义规则

1. 安装 CodeQL CLI

CodeQL CLI 是一个可执行的命令行工具,可以使用 CodeQL CLI运行 CodeQL 分析、创造 CodeQL 数据库、开发和测试自定义 CodeQL 查询。

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

245d9c9f849200052ff192e336c04a09.png

下载时,根据具体操作系统下载不同版本的CodeQL CLI。下载下来是一个 zip 压缩包,这里解压到如下目录

C:\jenkins\codeql-win64

CodeQL CLI 的安装路径到添加到 PATH 环境变量中,方便调用 codeql 命令。

PATH=%PATH%;C:\jenkins\codeql-win64

验证安装成功

C:\Users\2230>codeql version
CodeQL command-line toolchain release 2.8.2.
Copyright (C) 2019-2022 GitHub, Inc.
Unpacked in: C:\jenkins\codeql-win64
   Analysis results depend critically on separately distributed query and
   extractor modules. To list modules that are visible to the toolchain,
   use 'codeql resolve qlpacks' and 'codeql resolve languages'.

2. 下载标准的扫描规则 CodeQL libraries and queries

以下仓库包含了标准的 CodeQL 库和查询语句

https://github.com/github/codeql

下载后是一个 zip 压缩包,解压到如下目录

C:\jenkins\codeql-main

3. 安装 VSCode CodeQL 插件

VSCode 的安装也是非常简单的,直接下载下来也是一个 zip 压缩包;直接解压即可。下面在 VSCode 上安装 CodeQL 的插件。

8b6093bb453b864d508bff150018b8a6.png

安装成功后

eeb050374feacf6f470c2ef2128e3e52.png

配置安装的codeql 引擎路径

c88e6f163b23f5ae5469d038767e55bd.png

设置 CodeQL CLI 可执行文件 codeql.exe 的安装路径

3f2daabcc644d9803438019ed4a4edee.png

4. 进行项目漏洞扫描

  • 下载项目源码

比如现在要对xxl-job这个项目进行漏洞扫描

git clone https://gitee.com/xuxueli0323/xxl-job
  • 创建数据库

进入目标代码目录,这里进入

D:\xxl-job

创建源码数据库

codeql database create xxljob --language=java --command="mvn clean install"

--language要根据具体项目的编译语言指定;另外--command参数如果不指定,会使用默认的编译命令和参数。language 对应关系如下

LanguageIdentity
C/C++cpp
C#csharp
Gogo
Javajava
javascript/Typescriptjavascript
Pythonpython

d8e0b165aed5f34813f5d148a0070c56.png

  • 在 VSCode 打开扫描规则 CodeQL libraries and queries

03b60ca78f8517735862885f42043d2e.png

  • 在 VSCode 添加数据库

d860715bdd1fb7d9a765414d875509b5.png

添加之后

4e348cccddb376c00fe70053b6cb5a19.png

  • 执行规则扫描

选择具体语言的规则进行扫描,例如:java语言的规则。ql后缀的文件是规则扫描文件

C:\jenkins\codeql-main\java\ql\src\Security\CWE

0b8136b396ce21ef14b1f214c36fde7b.png

执行扫描

c96bccd59ddec598f5bb7f5b0c3647e1.png

可以一次选择一条或者多条规则就行扫描;但是一次性不能超过 20 条规则。点击CodeQL:Run Queries in Selected Files后,弹出一个对话框,选择Yes;即可执行扫描操作。

5. 附

使用 VSCode 图形化工具发现还不如直接使用命令快捷、方便

  • 创建数据库

codeql database create databaseName --source-root=D:/xxljob --language=java
  • 更新数据库

codeql database upgrade databaseName
  • 执行扫描规则

codeql database analyze databasePath codeql-repo/java --format=csv --output=result.csv

codeql-repo/java :java 扫描规则

--format:结果输出格式

--output:结果文件输出路径

96ffde841ecc2f45114c41ab57efdda8.png

分享&在看

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUG弄潮儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值