
Slack の公開されたシークレットの監視と列挙
Slack Watchman は、Slack API を使用して Slack ワークスペースで公開されている可能性のある機密データを検出し、レッド、ブルー、パープルチームにとって有用なその他の情報を列挙するアプリケーションです。
Slack Watchman の詳細は、私のブログ で確認できます。
Slack Watchman は以下を探します:
Slack Watchman は、以下の期間まで遡って結果を検索できます:
また、以下を列挙します:
つまり、一度の深いスキャンの後、Slack Watchman を定期的に実行するようにスケジュールし、選択した期間の結果だけを返すことができます。
未認証プローブモードで Slack Watchman を実行すると、ワークスペースの認証オプションやその他の情報を列挙できます。これはトークンを必要とせず、以下を返します:
このモードを実行するには、--probe フラグとプローブ対象のワークスペースドメインを指定して Slack Watchman を使用します:
slack-watchman --probe https://domain.slack.com
Slack Watchman はカスタム YAML シグネチャを使用して、Slack 内の一致を検出します。これらのシグネチャは、中央の Watchman Signatures リポジトリ から取得されます。Slack Watchman は実行時にシグネチャベースを自動更新し、最新のシグネチャを使用してシークレットを検出します。
Slack Watchman の実行時に無効にしたいシグネチャは、その ID を watchman.conf ファイルの disabled_signatures セクションに追加することで定義できます。例:
slack_watchman:
token: ...
cookie: ...
url: ...
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
シグネチャの ID は、Watchman Signatures リポジトリ 内の各 YAML ファイルで確認できます。
Slack Watchman には次のロギングオプションがあります:
オプションが指定されていない場合、Slack Watchman は既定でターミナル向けの stdout ロギングを使用します。これは人間が読みやすいように設計されています。
JSON ロギングも利用可能で、SIEM やその他のログ分析プラットフォームへの取り込みに最適です。
JSON 形式のロギングは、以下のように簡単にファイルへリダイレクトできます:
slack-watchman --timeframe a --all --output json >> slack_watchman_log.json
Slack Watchman を実行するには、Slack API OAuth アクセストークンが必要です。これは、シンプルな Slack App を作成することで取得できます。
アプリには次の ユーザートークンスコープ を追加する必要があります:
channels:read
files:read
groups:read
im:read
links:read
mpim:read
remote_files:read
search:read
team:read
users:read
users:read.email
注: ユーザートークンは、それを認可したユーザーに代わって動作します。そのため、サービスアカウントを使用してこのアプリを作成し認可することをお勧めします。そうしないと、アプリがあなたのプライベートな会話やチャットにアクセスできるようになります。
Slack アプリは、アプリケーションの詳細と承認するスコープを定義する JSON マニフェストから作成できます。Slack Watchman 用のアプリマニフェストは docs/app_manifest.json にあります。これを使用すると、Slack アプリの作成を迅速化できます。
あるいは、Slack Watchman は、ワークスペースにログインしている各ユーザーのブラウザに保存されているユーザー d Cookie を使用して Slack に認証することもできます。
Cookie 認証を使用するには、d Cookie とターゲットワークスペースの URL を指定する必要があります。その後、Slack Watchman の実行時に --cookie フラグを使用する必要があります。
Cookie 認証の詳細は、私のブログ で確認できます。
Slack Watchman はまず、環境変数から Slack トークン(選択した場合は Cookie トークンと URL も)を取得しようとします。
SLACK_WATCHMAN_TOKENSLACK_WATCHMAN_COOKIESLACK_WATCHMAN_URLこれが失敗した場合は、.conf ファイル(下記参照)からトークンを読み込もうとします。
設定オプションは、ホームディレクトリに保存する必要がある watchman.conf という名前のファイルで渡すことができます。ファイルは YAML 形式に従い、以下のようになります:
slack_watchman:
token: xoxp-xxxxxxxx
cookie: xoxd-%2xxxxx
url: https://xxxxx.slack.com
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Slack Watchman は実行時にこのファイルを探し、ここから設定オプションを使用します。Cookie 認証を使用しない場合は、cookie と url を空のままにしてください。
.conf ファイルに問題がある場合は、YAML リンターにかけてください。
サンプルファイルは docs/example.conf にあります。
注: Cookie と URL の値はオプションであり、Cookie 認証を使用しない場合は必要ありません。
Slack Watchman の推奨されるインストール方法は pipx を使用することです。これによりアプリが分離された環境にインストールされ、システムの PATH で利用できるようになります:
pipx install slack-watchman
代替: pip でインストール
pip を使用して Slack Watchman をインストールすることもできます:
python3 -m pip install slack-watchman
代替: ソースからビルド
リリースのソースファイルをダウンロードし、リポジトリの最上位ディレクトリから以下を実行します:
python3 -m pip build
python3 -m pip install --force-reinstall dist/*.whl
Slack Watchman は Docker ハブから Docker イメージとしても入手できます:
docker pull papermountain/slack-watchman:latest
その後、必要な環境変数を渡して、コンテナ内で Slack Watchman を実行できます:
// help
docker run --rm papermountain/slack-watchman -h
// scan all
docker run --rm -e SLACK_WATCHMAN_TOKEN=xoxp... papermountain/slack-watchman --timeframe a --all --output json
docker run --rm --env-file .env papermountain/slack-watchman --timeframe a --all --output stdout
Slack Watchman はグローバルコマンドとしてインストールされます。次のように使用します:
usage: slack-watchman [-h] [--timeframe {d,w,m,a}] [--output {json,stdout}] [--version] [--all] [--users] [--channels] [--pii] [--secrets] [--debug] [--verbose] [--cookie] [--probe PROBE_DOMAIN]
Monitoring and enumerating Slack for exposed secrets
options:
-h, --help show this help message and exit
--timeframe {d,w,m,a}, -t {d,w,m,a}
How far back to search: d = 24 hours w = 7 days, m = 30 days, a = all time
--output {json,stdout}, -o {json,stdout}
Where to send results
--version, -v show program's version number and exit
--all, -a Find secrets and PII
--users, -u Enumerate users and output them to .csv in the current working directory
--channels, -c Enumerate channels and output them to .csv in the current working directory
--pii, -p Find personal data: DOB, passport details, drivers licence, ITIN, SSN etc.
--secrets, -s Find exposed secrets: credentials, tokens etc.
--debug, -d Turn on debug level logging
--verbose, -V Turn on more verbose output for JSON logging. This includes more fields, but is larger
--cookie Use cookie auth using Slack d cookie. REQUIRES either SLACK_WATCHMAN_COOKIE and SLACK_WATCHMAN_URL environment variables set, or both values set in watchman.conf
--probe PROBE_DOMAIN Perform an un-authenticated probe on a workspace for available authentication options and other information. Enter workspace domain to probe
Slack Watchman を実行してすべてを検索し、デフォルトの stdout に出力できます:
slack-watchman --timeframe a --all
Watchman ファミリーの他のアプリにも興味があるかもしれません:
このプロジェクトのソースコードは GNU General Public Licence の下で公開されています。このプロジェクトは Slack Technologies や Salesforce とは関連がありません。