
GitHub Actions パイプライン列挙・攻撃ツール
[!WARNING]
このリポジトリは非推奨であり、アーカイブされています
Gato は、Praetorian のマルチプラットフォーム CI/CD 脆弱性検出および攻撃自動化ツールである Trajan に置き換えられました。Trajan は、GitHub Actions(Gato)および GitLab(Glato)の CI/CD 攻撃機能を単一の積極的にメンテナンスされているプロジェクトに統合します。
Trajan に移行してください: https://github.com/praetorian-inc/trajan
このリポジトリに対する今後のアップデート、バグ修正、セキュリティパッチは行われません。
Gato(GitHub Attack Toolkit)は、GitHub 組織の公開リポジトリおよびプライベートリポジトリ内のパイプライン脆弱性を特定し悪用するための列挙および攻撃ツールです。これはブルーチームと攻撃的セキュリティ実践者の両方を対象としています。
このツールは、侵害された個人アクセストークンを悪用するためのポストエクスプロイテーション機能に加え、公開リポジトリに対するポイズンパイプライン実行の脆弱性やアクションアーティファクトのシークレットを特定するための列挙機能を備えています。
GitHub はセルフホストランナーをプライベートリポジトリのみで使用することを推奨していますが、セルフホストランナーを利用している組織は数千に上ります。デフォルトの構成はしばしば脆弱であり、Gato はワークフローファイルの分析と実行ログ分析を組み合わせて、大規模に脆弱性のあるリポジトリを特定します。
Gato バージョン 1.7 では、Actions アーティファクトシークレットスキャナー が導入されました。
Actions アーティファクトシークレットスキャナーは、GitHub Actions ワークフローアーティファクト を列挙してシークレットを検出します。Praetorian の研究者はこのスキャナーを活用して、いくつかの著名なオープンソースプロジェクトで重大な脆弱性を特定しました。これらの脆弱性の詳細は、開示プロセスが完了次第公開されます。この研究は当初、Palo Alto Networks の研究に触発されたものです。
Actions アーティファクトシークレットスキャナーは以下のアクションを実行します:
NoseyParker は、Actions アーティファクトシークレットスキャナーを実行するシステムの $PATH にインストールされている必要があります。
公開ワークフローアーティファクト内のシークレットには多くの誤検出が含まれる可能性があります。デフォルトでは、Actions アーティファクトシークレットスキャナーは一般的な誤検出に関連するルールと結果を除外します。すべてのシークレットスキャン結果を含めるには、--include_all_artifact_secrets フラグを使用できます。
以下は、GitHub 組織のリストに対して Actions アーティファクトシークレットスキャナーを実行し、セルフホストランナーの列挙を無効にし、すべてのアーティファクトシークレット結果を含め、JSON ファイルに出力するコマンドの例です。
gato e --enum_wf_artifacts --include_all_artifact_secrets --skip_sh_runner_enum -O testorgs.txt -oJ testorgoutput.json
デフォルトでは、Actions アーティファクトシークレットスキャナーは単一のリポジトリに費やす時間を削減するために以下の制限を課します:
これらの制約は、Actions アーティファクトシークレットスキャナーが48時間以内に上位200のGitHub組織をスキャンできるように最適化されています。これらの制約を変更したい場合は、gato/enumerate/repository.py の scan_wf_artifacts() 関数で更新できます。
Gato は OS X と Linux でサポートされており、Python 3.7 以降が必要です。
ツールをインストールするには、リポジトリをクローンして pip install を使用してください。仮想環境内で実行することを推奨します。
git clone https://github.com/praetorian-inc/gato
cd gato
python3 -m venv venv
source venv/bin/activate
pip install .
Gato はさらに、バージョン 2.27 以上の git がシステムの PATH にインストールされている必要があります。フォークPR攻撃モジュールを実行するには、sed もシステムの PATH にインストールされている必要があります。
メインにまだ追加されていない新しい Gato 機能を含む開発ブランチを維持しています。バグに遭遇する可能性は高まりますが、dev ブランチでも統合テストスイートを実行しているため、明白なバグはないはずです。
dev ブランチを使用したい場合は、pip install を実行する前にチェックアウトするだけです。
特定のユースケースでバグに遭遇した場合は、ぜひ issue を開いてください。
ツールをインストールした後、gato または praetorian-gato を実行して起動できます。
基本ツールのパラメータを表示するには gato -h を、各モジュールのパラメータを表示するには以下を実行することをお勧めします。
gato search -hgato enum -hgato attack -hツールは機能するために GitHub クラシックまたはアプリインストールトークンを必要とします。作成するには、GitHub にログインし、GitHub Developer Settings に移動し、「Generate New Token」→「Generate new token (classic)」を選択します。
トークンを作成したら、export GH_TOKEN=<YOUR_CREATED_TOKEN> を実行してシェル内で GH_TOKEN 環境変数を設定します。または、安全なパスワードマネージャーにトークンを保存し、アプリケーションがプロンプトを表示したときに入力することもできます。
GitHub App Installation トークンを作成する場合、アプリには列挙モジュールを実行するために少なくとも Actions:read と Contents:read が必要です。
トラブルシューティングや、開発者モードでのインストールや単体テストの実行などの追加詳細については、wiki を参照してください。
詳細なドキュメントと、ツールのさまざまなモジュールに関する OpSec の考慮事項については、wiki を参照してください。
ソフトウェア内でバグを特定したと思われる場合は、実行しようとしていたアクションとともにツールの出力を含む issue を開いてください。
動作がバグかどうか不明な場合は、代わりに議論セクションを使用してください。
貢献を歓迎します! 新しい機能に取り組む前に、デザイン方法論とコーディング標準 を確認してください。
また、ツールに重要な変更を提案する場合は、issue を開いて 変更の動機について会話を開始してください。
Gato は Apache License, Version 2.0 の下でライセンスされています。
Copyright 2023 Praetorian Security, Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.