CodeQL は、開発者がセキュリティ チェックを自動化し、セキュリティ研究者がバリアント分析を実行するために使用する分析エンジンです。
CodeQL では、コードはデータとして扱われます。セキュリティ ホール、バグ、およびその他のバグは、コードから抽出されたデータベースに対して実行できるクエリとしてモデル化されます。
GitHub の研究者やコミュニティの寄稿者によって作成された標準の CodeQL クエリを実行したり、カスタム分析用に独自のクエリを作成したりできます。潜在的なエラーを検出するクエリは、ソース ファイル内の結果を直接強調表示します。
CodeQL 分析は、次の 3 つのステップで構成されます。
- 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 |
ゴラン | 1.16まで | 1.11以降に移動 | 。行く |
ジャワ | 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] |
パイソン | 2.7、3.5、3.6、3.7、3.8、3.9 | 適用できない | .py |
ルビー | 3.0.2まで | 適用できない | .rb、.erb、.gemspec、Gemfile |
TypeScript | 2.6-4.5 | 標準 TypeScript コンパイラ | .ts、.tsx |
推奨される適用方法:
-
1.2 の公式ソース コードを使用してインストールします。
-
jenkins と組み合わせて、CI のセキュリティを自動的に検出します。
-
検出を表示し、VSCode および VisualStudio 拡張機能を使用して修正します。
1.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.コード検査
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 ドットネットチェック
環境の準備:
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
3. 結果を見る
アドレス: https://sarifweb.azurewebsites.net/
4. CI 統合
アドレス: https://docs.github.com/en/code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system
4.1. Jenkins の統合
-
プラグイン: https://plugins.jenkins.io/codeql/
jenkins と CodeQL を同じサーバーにデプロイすることをお勧めします。これにより、ソース コードを 1 回ダウンロードするだけで済み、同時に 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
- 右側に結果を表示