厌伴老儒烹瓠叶,强随举子踏槐花。这篇文章主要讲述漏洞发现:代码分析引擎 CodeQL相关的知识,希望能为你提供帮助。
codeql 是一门类似 SQL 的查询语言,通过对源码(C/C++、C#、golang、java、javascript、typescript、python)进行完整编译,并在此过程中把源码文件的所有相关信息(调用关系、语法语义、语法树)存在数据库中,然后编写代码查询该数据库来发现安全漏洞(硬编码 / XSS 等)。
CodeQL 本身包含两部分解析引擎 +???SDK?
?
- 解析引擎用来解析我们编写的规则,虽然不开源,但是可以直接在官网下载二进制文件直接使用
- ?
SDK
?完全开源,里面包含大部分现成的漏洞规则,也可以利用其编写自定义规则
https://github.com/github/codeql-cli-binaries/releases
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129395Y4-0.jpg)
文章图片
下载时,根据具体操作系统下载不同版本的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 的插件。
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/11293954J-1.jpg)
文章图片
安装成功后
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129392G4-2.jpg)
文章图片
配置安装的codeql 引擎路径
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129394539-3.jpg)
文章图片
设置 CodeQL CLI 可执行文件 codeql.exe 的安装路径
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129391J0-4.jpg)
文章图片
4. 进行项目漏洞扫描
- 下载项目源码
git clone https://gitee.com/xuxueli0323/xxl-job
- 创建数据库
D:\\xxl-job
创建源码数据库
codeql database create xxljob --language=java --command="mvn clean install"
?
?--language?
?要根据具体项目的编译语言指定;另外??--command?
??参数如果不指定,会使用默认的编译命令和参数。language 对应关系如下Language | Identity |
C/C++ | cpp |
C# | csharp |
Go | go |
Java | java |
javascript/Typescript | javascript |
Python | python |
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129393596-5.jpg)
文章图片
- 在 VSCode 打开扫描规则 CodeQL libraries and queries
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129393416-6.jpg)
文章图片
- 在 VSCode 添加数据库
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129394X6-7.jpg)
文章图片
添加之后
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129396100-8.jpg)
文章图片
- 执行规则扫描
?ql?
??后缀的文件是规则扫描文件C:\\jenkins\\codeql-main\\java\\ql\\src\\Security\\CWE
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129393a7-9.jpg)
文章图片
执行扫描
![漏洞发现(代码分析引擎 CodeQL)](http://img.readke.com/220611/1129391429-10.jpg)
文章图片
可以一次选择一条或者多条规则就行扫描;但是一次性不能超过 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:结果输出格式
【漏洞发现(代码分析引擎 CodeQL)】--output:结果文件输出路径
推荐阅读
- 日志中台不重不丢实现浅谈
- [OpenCV实战]9 使用OpenCV寻找平面图形的质心
- 日常运维(五分钟实现安装PHP的redis扩展)
- Flink处理函数实战之五(CoProcessFunction(双流处理))
- k8s存储卷+PV与PVC
- ETL批量任务调度平台TASKCTL监控中常见问题
- 微服务从代码到k8s部署应有尽有系列(十一日志收集)
- iOS小技能(cell的重用原理及自定义cell)
- Vshpere零散概念补充