内网 CodeQL 配置及批量扫描札记
CodeQL 使用备忘
建立数据库的踩坑总结
通过 coedql-cli 创建一个数据库
执行命令:
codeql database create <database> --language=<language-identifier>
编译项目:
最好设置编译参数为 --command="mvn clean install -Dmaven.test.skip=true" --file pom.xml ,如果设置为 --command="mvn clean install --file pom.xml" 部分项目会报错,从而导致数据库生成不成功。
参数说明:
<database>:创建数据库的路径,目录会在执行命令的时候被创建--language: 指定数据库语言,输入标识符。当和—db-cluster 一起使用时,可以指定多个,用’,’分隔,也可以进行多次指定。--db-cluster:为多种语言创建数据库--command:创建一个或多个编译语言数据库的时候使用。python 和 JavaScript/TypeScript 不需要该参数,如果编译语言不带该参数,codeql 会自动检测并编译--no-run-unnecessary-builds:为多语言创建数据库,且包括编译和非编译语言时,可以利用--no-run-unnecessary-builds来帮助非编译语言跳过 command 选项
CodeQL for VSCode 插件使用简记
将 CodeQL 规则库加入现有的工作站
此种方法未实现,仅按文档进行流程说明
将下载好的本地 CodeQL 库加入你的 workspace
- 选择 File > Add Folder to Workspace,加入下载好的 codeql 库
然后导出 CodeQL 数据库
选择对应的官方规则进行扫描
批量扫描流程备忘
批量扫描流程:
- 使用浏览器爬虫插件,批量获取远程仓库地址,导出结果为 xlsx
- 整理爬虫结果,在 excel 中使用语句进行拼接,分别建立两个 powershell 脚本文件
- 使用 wps 表格 for 2019 专业版,将脚本全部扫描之后的结果进行汇总,即合并成一个表格
- 【数据】→【合并表格】→【多个工作表合并成一个工作表】
- 在合并结果的工作表中,选择 A 列,替换
[*]为空,规范数据库名称,方便后续操作 - 为合并结果的工作表添加表头,然后再建立数据透视表
- 在合并结果中,使用数据透视表对结果进行分析
- 在 VSCode 中,对照汇总结果中的数据透视表,逐个导入仓库进行分析
扫描流程缺点总结:
- 为了方便使用 VSCode 的可视化分析扫描结果,需要进行两次对数据库进行两次扫描,会造成算力浪费
- 使用的 excel 拼接语句过于简单粗暴,效率低,以下是优化思路
- 对代码仓库编程语言进行判断,如果是 java 项目,才进行后续的建库和扫描操作
- 对
git pull进行判断,如果有更新才进行后续的建库和扫描操作 - 考虑对 CodeQL 扫描规则进行精简,减少实际扫描时负载,加快扫描速度
- 对 CodeQL 扫描参数进行调优,充分利用终端算力,加快建库扫描的速度
批量获取仓库地址
在 chrome 系的浏览器中,安装插件【Easy Scraper】,浏览器插件 id 为【cljbfnedccphacfneigoegkiieckjndh】
Excel 拼接语句备忘
可以将使用拼接语句拼接的结果分别另存为 .ps1 文件,然后在 powershell 中执行即可
拉取全部仓库
拉取远程仓库代码到本地源代码目录
="cd F:\Codes\00-CodeQL-source ;git clone "&A2
更新全部仓库并扫描
本地仓库拉取更新,然后强制建立数据库并使用指定规则进行扫描
[!tips]
- 需要注意相关目录是否与实际环境一致
F:\Codes\00-CodeQL-source\F:\Codes\F:\Codes\00-CodeQL-result\F:\Codes\00-CodeQL-database\F:\codeql-main\java\ql\src\experimental\Security\CWE
="cd F:\Codes\00-CodeQL-source\"&B3&" ; git pull ; cd F:\Codes\ ; codeql database create F:\Codes\00-CodeQL-database\"&B3&"-database --language='java' --command='mvn clean install --file pom.xml -Dmaven.test.skip=true' --source-root=F:\Codes\00-CodeQL-source\"&B3&" --overwrite ;codeql database analyze F:\Codes\00-CodeQL-database\"&B3&"-database F:\codeql-main\java\ql\src\experimental\Security\CWE --format=csv --output=F:\Codes\00-CodeQL-result\"&B3&"-database.csv"