当前位置: 首页 > 工具软件 > CodeQL > 使用案例 >

CodeQL代码安全扫描工具安装部署

魏书
2023-12-01

​ CodeQL 是开发人员用来自动化安全检查的分析引擎,安全研究人员用来执行变体分析。
在 CodeQL 中,代码被视为数据。安全漏洞、错误和其他错误被建模为可以针对从代码中提取的数据库执行的查询。
您可以运行由 GitHub 研究人员和社区贡献者编写的标准 CodeQL 查询,也可以编写自己的查询以用于自定义分析。查找潜在错误的查询直接在源文件中突出显示结果。

CodeQL 分析包括三个步骤:

  1. 通过创建 CodeQL 数据库准备代码
  2. 针对数据库运行 CodeQL 查询
  3. 解释查询结果

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.0Microsoft Visual Studio 到 2019 年,.NET 到 4.8,.NET Core 最高 3.1,.NET 5.sln, .csproj, .cs, .cshtml,.xaml
Golang上升到 1.16转到 1.11 或更新版本.go
JavaJava 7 到 16javac(OpenJDK 和 Oracle JDK),Java 的 Eclipse 编译器 (ECJ).java
JavaScriptECMAScript 2021 或更低版本不适用.js, .jsx, .mjs, .es, .es6, .htm, .html, .xhtm, .xhtml, .vue, .hbs, .ejs, .njk, .json, .yaml, .yml, .raml, .xml [6]
Python2.7、3.5、3.6、3.7、3.8、3.9不适用.py
Ruby高达 3.0.2不适用.rb, .erb, .gemspec,Gemfile
TypeScript2.6-4.5标准 TypeScript 编译器.ts, .tsx

推荐应用方式:

  • 使用1.2官方源代码安装。

  • 结合jenkins在CI中自动安全检测。

  • 利用VSCode和VisualStudio扩展,查看检测并进行更正。

一、安装CodeQL

采用官方源码安装,需要自己打包编译环境,录入Dotnet、NodeJS、Npm等。

本地创建根目录CodeQLHome

mkdir CodeQL
cd CodeQL
mkdir codeql-home
cd codeql-home

1.1 安装CLI

下载地址: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

1.2 安装查询库

查询库也就是过滤代码的.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

1.3 集成

  • 解压CLI包到CodeQLHome目录下,命名为codeql

    unzip -o codeql-linux64.zip
    
  • 解压查询库包到CodeQLHome目录下,命名为codeql-repo

    unzip -o v1.29.0.zip
    

1.4 配置

更改环境变量,指向到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

二、代码检查

2.1 Javascript检查

环境准备:

安装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

2.2 Dotnet检查

环境准备:

安装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/

四、CI集成

地址:https://docs.github.com/en/code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system

4.1、jenkins集成

  1. 插件:https://plugins.jenkins.io/codeql/

    推荐jenkins与CodeQL部署在同一台服务器,以便于源码只需要下载一次、同时能够方便的调用CodeQL容器部署的脚本封装,简化操作。

4.2、VSCode集成

  • 搜索并安装扩展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指定源码库

进入VSCode的CodeQL左侧最下方小图标,选择“从文件夹中选择”,并设置为当前可用库。

  • 选择工作区

选择D:/Software/CodeQLHome/codeql-repo文件夹

进入"javascript/ql/src/"->任意*.ql文件右键->CodeQL:Run queries
  • 查看右侧结果
 类似资料: