CodeQL 是开发人员用来自动化安全检查的分析引擎,安全研究人员用来执行变体分析。
在 CodeQL 中,代码被视为数据。安全漏洞、错误和其他错误被建模为可以针对从代码中提取的数据库执行的查询。
您可以运行由 GitHub 研究人员和社区贡献者编写的标准 CodeQL 查询,也可以编写自己的查询以用于自定义分析。查找潜在错误的查询直接在源文件中突出显示结果。
CodeQL 分析包括三个步骤:
CodeQL支持的语言:
语言 | 变体 | 编译器 | 扩展 |
---|---|---|---|
C/C++ | Clang(和 clang-cl )扩展(最高 Clang 12.0)GNU 扩展(最高 GCC 11.1)Microsoft 扩展(最高 VS 2019)Arm 编译器 5 | .cpp, .c++, .cxx, .hpp, .hh, .h++, .hxx, .c, .cc,.h | |
C# | C# 最高 9.0 | Microsoft Visual Studio 到 2019 年,.NET 到 4.8,.NET Core 最高 3.1,.NET 5 | .sln, .csproj, .cs, .cshtml,.xaml |
Golang | 上升到 1.16 | 转到 1.11 或更新版本 | .go |
Java | Java 7 到 16 | javac(OpenJDK 和 Oracle JDK),Java 的 Eclipse 编译器 (ECJ) | .java |
JavaScript | ECMAScript 2021 或更低版本 | 不适用 | .js, .jsx, .mjs, .es, .es6, .htm, .html, .xhtm, .xhtml, .vue, .hbs, .ejs, .njk, .json, .yaml, .yml, .raml, .xml [6] |
Python | 2.7、3.5、3.6、3.7、3.8、3.9 | 不适用 | .py |
Ruby | 高达 3.0.2 | 不适用 | .rb, .erb, .gemspec,Gemfile |
TypeScript | 2.6-4.5 | 标准 TypeScript 编译器 | .ts, .tsx |
推荐应用方式:
使用1.2官方源代码安装。
结合jenkins在CI中自动安全检测。
利用VSCode和VisualStudio扩展,查看检测并进行更正。
采用官方源码安装,需要自己打包编译环境,录入Dotnet、NodeJS、Npm等。
本地创建根目录CodeQLHome
mkdir CodeQL
cd CodeQL
mkdir codeql-home
cd codeql-home
下载地址:https://github.com/github/codeql-cli-binaries/releases
版本:2.7.1
wget https://github.com/github/codeql-cli-binaries/releases/download/v2.7.1/codeql-linux64.zip
查询库也就是过滤代码的.ql或.qls文件集合
版本:1.29.0
下载地址:https://github.com/github/codeql/tags
其中”lgtm-xxxx"的为仓库,因为源代码管理的非常不好,如果没有找到查询库,直接用源码代替即可。
wget https://github.com/github/codeql/archive/refs/tags/lgtm/v1.29.0.zip
解压CLI包到CodeQLHome目录下,命名为codeql
unzip -o codeql-linux64.zip
解压查询库包到CodeQLHome目录下,命名为codeql-repo
unzip -o v1.29.0.zip
更改环境变量,指向到CLI主目录,CodeQLHome/codeql
sudo vim /etc/profile
添加如下内容到文档最后
#Path CodeQL
export PATH=$PATH:/home/username/CodeQL/codeql-home/codeql
保存文件并退出编辑器.
重启应用配置
source /etc/profile
切换到命令行,运行
codeql version
得到正确输出,配置完成
linux配置参见:https://www.jianshu.com/p/4274e679dec6
环境准备:
安装nodejs、安装nestjs(非必须)、安装npm
1)创建存储库
codeql database create --language=javascript ./projects-result/test3_db -s ./projects-src/testproject
2)更新配置
codeql database upgrade ./projects-result/test3_db
3)执行查询
codeql database analyze ./projects-result/test3_db --format=sarifv2.1.0 --output=./projects-result/test3_db/issues.sarif javascript-security-and-quality.qls
环境准备:
安装dotnetcore 3.1以及dotnet6运行时。
添加 global.json
到源码根目录,该文件能够解决对.NET 5 6的支持
{
"sdk": {
"version": "5.0.0",
"rollForward": "latestMajor"
}
}
提升文件夹权限,因为编译时会生成文件。
chmod -R 777 /home/username/CodeQL/projects-src
cd /home/username/CodeQL
1)创建存储库
codeql database create --language=csharp ./projects-result/test4_db -s ./projects-src/testproject2
2)更新配置
codeql database upgrade ./projects-result/test4_db
3)执行查询
codeql database analyze ./projects-result/test4_db --format=sarifv2.1.0 --output=./projects-result/test4_db/issues.sarif csharp-security-and-quality.qls
地址:https://sarifweb.azurewebsites.net/
地址:https://docs.github.com/en/code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system
插件:https://plugins.jenkins.io/codeql/
推荐jenkins与CodeQL部署在同一台服务器,以便于源码只需要下载一次、同时能够方便的调用CodeQL容器部署的脚本封装,简化操作。
搜索并安装扩展codeql
扩展设置
Executable Path->D:/Software/CodeQLHome/codeql/codeql.exe
假设本地代码在,D:\Projects\Local\Test\npmRes\abc的TypeScript程序
生成数据库:
codeql database create --language=javascript D:\Projects\Local\CodeQL\RESULT0127\source_db -s D:\Projects\Local\Test\npmRes\abc
进入VSCode的CodeQL左侧最下方小图标,选择“从文件夹中选择”,并设置为当前可用库。
选择D:/Software/CodeQLHome/codeql-repo文件夹
进入"javascript/ql/src/"->任意*.ql文件右键->CodeQL:Run queries