前言
以前对代码进行白盒的时候是通过代码审计平台进行扫描的,随着CodeQL的普及,越来越多的人接触到了他,本文以CI/CD的流程为例,作研究分享。
官方文档《CodeQL CLI 入门》:https://codeql.github.com/docs/codeql-cli/getting-started-with-the-codeql-cli/
基础入门
为了省略本文的篇幅,如果你是没接触过CodeQL或者想在复习一下,简单的想走个流程,可以直接看我这篇科普文。
Codeql :https://wiki.freebuf.com/detail?tribal_id=45&camp_id=122&entry_id=18908
这是我根据苹果M1系统电脑写的超详细指南,其他系统的话基本也差不多。
CI/CD
工作流
那么进入正题,想把扫描流程接入自己的CI怎么做。
官方文档《在 CI 系统中安装 CodeQL CLI》:https://docs.github.com/en/code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system/installing-codeql-cli-in-your-ci-system
我这里本地的研究环境不一样,这里简单通过工作流来实现一个扫描流程。官方提供下面的命令
$ wget https://github.com/github/codeql-action/releases/latest/download/codeql-bundle-linux64.tar.gz
$ tar -xvzf ./codeql-bundle-linux64.tar.gz
这里有2个问题。
-
国内直接访问github速度真的很慢。 -
这安装包好大。
第一个问题
第一个问题,使用github镜像地址
https://gh.api.99988866.xyz
wget https://gh.api.99988866.xyz/https://github.com/github/codeql-action/releases/latest/download/codeql-bundle-linux64.tar.gz
速度对比:
第二个问题
为了更快,我们可以提前下载到某个工作流直接调用的地方。我这里的环境刚好提供了源码存放的地址,所以就直接本地传上去了。顺便第一个问题,也可以用这个思路来解决。
扫描逻辑
我这里测试的java代码,所以逻辑就是 create数据库 ----》 使用QL规则scan ---》 output扫描结果 代码如下:
cd /root/workspace/codeql
chmod 777 codeql
./codeql database create /root/workspace/ql/db --language="java" --command="mvn clean install --file pom.xml" --source-root=/root/workspace/sdl_server --overwrite
./codeql database analyze /root/workspace/ql/db /root/workspace/ql/java/ql/src/codeql-suites/java-security-and-quality.qls --format=sarifv2.1.0 --output=1.sarif
echo "本次CodeQL扫描到的漏洞"
cat 1.sarif | jq "[{vuln:.runs[].results[].rule.id}]"
效果
后记
顺便建了一个微信群,欢迎大家学习交流 公众号回复:codeql 获取进群链接
原文始发于微信公众号(白帽子飙车路):10分钟实现CodeQL自动化扫描
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论