
機密情報がGithub上で公開される可能性を継続的に監視する方法の一つ
GitHub上で現在漏洩している機密情報を見つけるためのツールは他にもたくさんあることを知っています。私自身もいくつかを使っています。しかし、それらにはまだいくつかの機能が欠けていると思います。例えば:
他のツールは、与えられたGitアドレスを持つリポジトリ内に存在する機密情報を見つけることに重点を置いています。私がGitMonitorを開発した当時、まず「見つける」必要があるリポジトリ(すべての関連リポジトリを見つける)、次にそれらの中に機密情報が存在するかどうかを「チェックする」ことに重点を置いたツールはごくわずかでした。
「機密情報のチェック」ルールに加えて、ツールは「関心のあるリポジトリを検索する」ためのルールも必要です。考慮すべきリポジトリは、会社やプロジェクトに関連するキーワードを含むものかもしれません。
バグバウンティハンターなら、同時にいくつかのターゲットにしか関心がありません。しかし、会社のセキュリティエンジニアであれば、会社やプロジェクトに関連するリポジトリが現れ、それが機密情報を含む可能性があることを知る必要があります。そのようなリポジトリはGitHub上のどこにでも、どんな名前で、どんなアカウントによって投稿される可能性があります。また、そのようなリポジトリが現れたらすぐにアラートを受け取るべきです(継続的な監視)。
ツールには柔軟なレポートメカニズムがあります。
これが私がこのツール、GitMonitorを作成した理由です。GitMonitorは2つの異なるルールセットを使用して、必要なものを見つけます。検索ルールセットは、組織や内部プロジェクト、その他に関連する可能性のあるリポジトリを検索し、一致したリポジトリをローカルにクローンします。次に、機密フィルタリングルールセットを使用して、それらのリポジトリに機密情報が存在するかどうかをチェックします。最後に、ツールはSlack経由でレポートします。このツールをCronjobと併用することで、組織に関連する機密情報がGitHub上に漏洩した場合にそれを追跡し、Slackで結果を受け取る継続的監視システムを作成できます。
更新 2020年6月15日: バージョン1.0にアップデートしました。このバージョンではいくつかのバグを修正し、GitMonitorが安定して動作するようになりました。以前のバージョンを使用されている場合は、git pullを実行することをお勧めします。
2つの異なるルールセットを使用します:関心のあるリポジトリを検索するための検索ルールセット(yaml)と、関心のあるコンテナに機密情報が含まれているかどうかをチェックするためのフィルタールールセット(regex)です。検索ルール(yaml)とフィルタールール(regex)は別々に定義されます。ユーザーはyamlルールとregexを簡単かつ直感的に定義できます。
検索ルールセット:異なるyamlファイルを使用して、さまざまなルールを作成できます。ルールでは、リポジトリを検索する方法を柔軟に定義できます。キーワードを使用したり、言語、ファイル名、拡張子に関連付けられたキーワードを使用したり、言語、ファイル名、拡張子に基づいて検索からリポジトリを除外することも定義できます。キーワードはリポジトリ名、リポジトリのコード、およびコミットを通じて検索されます。
フィルタールールセット:リポジトリに存在する可能性のある機密情報を見つけるために、regexを簡単に追加または修正できます。
最初に検索ルールセットに一致したリポジトリがローカルにクローンされます。次に、フィルタールールセットがこのリポジトリに機密情報が存在するかどうかをチェックします。機密情報のチェックが完了した後、GitMonitorは結果を記録し、このリポジトリをローカルから自動的に削除してスペースを節約し、すべての関連リポジトリが見つかりチェックされるまでこのプロセスを繰り返します。
Slack経由でレポートします。
このツールはCronjobでスケジュール設定して継続的な監視が可能です。

> python3 -m pip install -r requirements.txt
PyYAMLバージョン5x以上がインストールされていることを確認してください(pip3 install --ignore-installed PyYAML)
以下の表は、設定ファイルの各キーの意味を説明しています:
> export GIT_USERNAME=あなたのGitHubユーザー名
> export GIT_PASSWORD=あなたのGitHub個人アクセストークンまたはパスワード
または、設定ファイルに認証情報を定義する(推奨しません):
環境変数で認証情報を定義する場合の設定ファイルの例

ルールテンプレートのように、複数のキーワードを定義するために異なるyamlファイルを作成できます。ルールファイルは以下の画像のようになります:

> python3 gitmonitor.py
例えば:

このプロジェクトの多くの領域は、現在のコードのリファクタリングや新機能の実装中に改善され、大きく変更される可能性があります。コミュニティからの改善フィードバックやプルリクエストは大いに歓迎され、受け入れられます。
一般的に、私たちは "fork-and-pull" Gitワークフローに従います。
注:プルリクエストを行う前に、"upstream"から最新のものをマージしてください!
| キー | 説明 |
|---|
| user | GitHubのユーザー名 - 環境変数でGitHubの認証情報を設定している場合は空白のままにします |
| pass | GitHubのパスワード - 環境変数でGitHubの認証情報を設定している場合は空白のままにします |
| webhooks | GitMonitorからSlackにメッセージを投稿するためのIncoming Webhookトークン |
| rule | 検索ルールセットを含むディレクトリ |
| source | リポジトリをダウンロードするディレクトリ |
| log | 各スキャン後の状態を記録するJSONファイルを含むディレクトリ。このJSONファイルはスキャン間の結果を比較するために使用されます(新しいリポジトリを識別するため) |
| start | スキャン開始のバナーと機密フィルタリングルールセットスキャンの結果のバナーを定義します - Slackに送信される結果に表示されます |
| end | スキャン終了のバナーと検索ルールセットスキャンの結果のバナーを定義します - Slackに送信される結果に表示されます |
| all | 全リポジトリを表示するためのバナーを定義します - Slackに送信される結果に表示されます |