GitLab Watchman は、GitLab API を使用して公開されたシークレットや個人データを検出するアプリケーションです。また、GitLab インスタンスから有用な情報を列挙します。
GitLab 内で内部共有されているプロジェクトを検索し、以下を確認します:
以下のデータを対象とします:
GitLab Watchman を実行して、以下の期間までさかのぼって結果を検索できます:
つまり、一度詳細スキャンを実行すれば、GitLab Watchman を定期的に実行するようにスケジュールし、選択した期間の結果のみを返すことができます。
GitLab Watchman は、GitLab インスタンスから潜在的に有用な情報を列挙できます:
GitLab Watchman はカスタム YAML シグネチャを使用して、GitLab 内の一致を検出します。これらのシグネチャは中央の Watchman Signatures リポジトリ から取得されます。Slack Watchman は実行時にシグネチャベースを自動的に更新し、最新のシグネチャを使用してシークレットを検出します。
GitLab Watchman を実行するときに無効にしたいシグネチャは、watchman.conf ファイルの disabled_signatures セクションにその ID を追加することで定義できます。例:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
シグネチャの ID は、Watchman Signatures リポジトリ 内の個々の YAML ファイルで確認できます。
GitLab Watchman は以下のログオプションを提供します:
GitLab Watchman は、オプションが指定されていない場合、デフォルトで端末向けの stdout ログ記録を使用します。これは人間が読みやすいように設計されています。
JSON ログ記録も利用可能で、SIEM やその他のログ分析プラットフォームに取り込むのに最適です。
JSON 形式のログは、以下のようにファイルに簡単にリダイレクトできます:
gitlab-watchman --timeframe a --all --output json >> gitlab_watchman_log.json
GitLab Watchman は v4 API を使用し、以下の GitLab Enterprise Edition バージョンで動作します:
以下のスコープを検索するには:
GitLab インスタンスは Elasticsearch が構成されており、Enterprise Edition で最低でも GitLab Starter または Bronze ライセンスで実行されている必要があります。
GitLab Watchman を実行するには、GitLab の個人アクセストークンが必要です。
GitLab GUI で、Settings -> Access Tokens -> Add a personal access token から個人アクセストークンを作成できます。
トークンには以下のスコープの権限が必要です:
api
注意: 個人アクセストークンは作成したユーザーに代わって動作するため、サービスアカウントを使用してトークンを作成することをお勧めします。そうしないと、アプリがあなたのプライベートリポジトリにアクセスできるようになります。
また、GitLab インスタンスの URL を指定する必要があります。
GitLab Watchman は、環境変数 GITLAB_WATCHMAN_TOKEN および GITLAB_WATCHMAN_URL から GitLab トークンと URL を取得します。
設定オプションは、ホームディレクトリに保存する必要がある watchman.conf という名前のファイルで渡すことができます。ファイルは YAML 形式に従い、以下のようになります:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
GitLab Watchman は実行時にこのファイルを探し、ここから設定オプションを使用します。
最新の安定版は pip でインストールできます:
python3 -m pip install gitlab-watchman
または、ソースから自分でビルドします。リリースのソースファイルをダウンロードし、最上位のリポジトリから以下を実行します:
python3 -m build
python3 -m pip install --force-reinstall dist/*.whl
GitLab Watchman は Docker ハブから Docker イメージとしても利用可能です:
docker pull papermountain/gitlab-watchman:latest
その後、必要な環境変数を渡して、コンテナ内で GitLab Watchman を実行できます:
// help
docker run --rm papermountain/gitlab-watchman -h
// scan all
docker run --rm -e GITLAB_WATCHMAN_TOKEN=abc123 -e GITLAB_WATCHMAN_URL=https://example.gitlab.com papermountain/gitlab-watchman --timeframe a --all
docker run --rm --env-file .env papermountain/gitlab-watchman --timeframe a --all
GitLab Watchman はグローバルコマンドとしてインストールされ、以下のように使用します:
usage: gitlab-watchman [-h] --timeframe {d,w,m,a} [--output {json,stdout}] [--version] [--all] [--blobs] [--commits] [--wiki-blobs] [--issues]
[--merge-requests] [--milestones] [--notes] [--snippets] [--enumerate] [--debug] [--verbose]
Finding exposed secrets and personal data in GitLab
options:
-h, --help show this help message and exit
--output {json,stdout}, -o {json,stdout}
Where to send results
--version, -v show program's version number and exit
--all, -a Find everything
--blobs, -b Search code blobs
--commits, -c Search commits
--wiki-blobs, -w Search wiki blobs
--issues, -i Search issues
--merge-requests, -mr
Search merge requests
--milestones, -m Search milestones
--notes, -n Search notes
--snippets, -s Search snippets
--enumerate, -e Enumerate this GitLab instance for users, groups, projects.Output will be saved to CSV files
--debug, -d Turn on debug level logging
--verbose, -V Turn on more verbose output for JSON logging. This includes more fields, but is larger
required arguments:
--timeframe {d,w,m,a}
How far back to search: d = 24 hours w = 7 days, m = 30 days, a = all time
Watchman ファミリーの他のアプリにも興味があるかもしれません:
このプロジェクトのソースコードは GNU General Public Licence の下で公開されています。このプロジェクトは GitLab とは関連がありません。