
Outil d'énumération Slack et de détection de secrets exposés
Surveillance et énumération des secrets exposés dans Slack
Slack Watchman est une application qui utilise l'API Slack pour détecter les données potentiellement sensibles exposées dans un espace de travail Slack, et pour énumérer d'autres informations utiles pour les équipes rouge, bleue et violette.
Vous trouverez plus d'informations sur Slack Watchman sur mon blog.
Slack Watchman recherche :
Vous pouvez exécuter Slack Watchman pour rechercher des résultats en remontant jusqu'à :
Il énumère également les éléments suivants :
Cela signifie qu'après une analyse approfondie, vous pouvez planifier l'exécution régulière de Slack Watchman et ne récupérer que les résultats de la période choisie.
Vous pouvez exécuter Slack Watchman en mode sondage non authentifié pour énumérer les options d'authentification et d'autres informations sur un espace de travail. Ce mode ne nécessite pas de jeton et renvoie :
Pour exécuter ce mode, utilisez Slack Watchman avec l'option --probe et le domaine de l'espace de travail à sonder :
slack-watchman --probe https://domain.slack.com
Slack Watchman utilise des signatures YAML personnalisées pour détecter les correspondances dans Slack. Ces signatures sont extraites du dépôt central Watchman Signatures. Slack Watchman met automatiquement à jour sa base de signatures au moment de l'exécution afin de garantir l'utilisation des dernières signatures pour détecter les secrets.
Vous pouvez définir les signatures que vous souhaitez désactiver lors de l'exécution de Slack Watchman en ajoutant leurs identifiants à la section disabled_signatures du fichier watchman.conf. Par exemple :
slack_watchman:
token: ...
cookie: ...
url: ...
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Vous pouvez trouver l'identifiant d'une signature dans les fichiers YAML individuels du dépôt Watchman Signatures.
Slack Watchman offre les options de journalisation suivantes :
Slack Watchman utilise par défaut la journalisation stdout adaptée au terminal si aucune option n'est fournie. Elle est conçue pour être plus facile à lire pour les humains.
La journalisation JSON est également disponible, idéale pour l'ingestion dans un SIEM ou d'autres plateformes d'analyse de journaux.
La journalisation au format JSON peut être facilement redirigée vers un fichier comme ci-dessous :
slack-watchman --timeframe a --all --output json >> slack_watchman_log.json
Pour exécuter Slack Watchman, vous aurez besoin d'un jeton d'accès OAuth de l'API Slack. Vous pouvez l'obtenir en créant une application Slack simple.
L'application doit disposer des portées de jeton utilisateur suivantes :
channels:read
files:read
groups:read
im:read
links:read
mpim:read
remote_files:read
search:read
team:read
users:read
users:read.email
Remarque : Les jetons utilisateur agissent au nom de l'utilisateur qui les autorise. Je suggère donc de créer cette application et de l'autoriser à l'aide d'un compte de service ; sinon, l'application aura accès à vos conversations et discussions privées.
Les applications Slack peuvent être créées à partir de manifestes JSON qui définissent les détails de l'application et les portées à approuver. Le manifeste d'application pour Slack Watchman se trouve dans docs/app_manifest.json ; vous pouvez l'utiliser pour accélérer la création de votre application Slack.
Alternativement, Slack Watchman peut également s'authentifier auprès de Slack à l'aide d'un cookie d de l'utilisateur, stocké dans le navigateur de chaque utilisateur connecté à un espace de travail.
Pour utiliser l'authentification par cookie, vous devrez fournir le cookie d et l'URL de l'espace de travail cible. Vous devrez ensuite utiliser l'option --cookie lors de l'exécution de Slack Watchman.
Plus d'informations sur l'authentification par cookie sont disponibles sur mon blog.
Slack Watchman essaiera d'abord d'obtenir le jeton Slack (ainsi que le jeton de cookie et l'URL si sélectionnés) à partir des variables d'environnement
SLACK_WATCHMAN_TOKENSLACK_WATCHMAN_COOKIESLACK_WATCHMAN_URLSi cela échoue, il essaiera de charger le(s) jeton(s) à partir du fichier .conf (voir ci-dessous).
Les options de configuration peuvent être transmises dans un fichier nommé watchman.conf qui doit être stocké dans votre répertoire personnel. Le fichier doit suivre le format YAML et ressembler à ceci :
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 recherchera ce fichier au moment de l'exécution et utilisera les options de configuration qui s'y trouvent. Si vous n'utilisez pas l'authentification par cookie, laissez cookie et url vides.
Si vous rencontrez des problèmes avec votre fichier .conf, faites-le passer dans un analyseur YAML (linter).
Un exemple de fichier se trouve dans docs/example.conf.
Remarque : Les valeurs Cookie et URL sont facultatives et ne sont pas requises si vous n'utilisez pas l'authentification par cookie.
La méthode recommandée pour installer Slack Watchman est pipx, qui installe l'application dans un environnement isolé et la rend disponible dans votre PATH système :
pipx install slack-watchman
Alternative : installation via pip
Vous pouvez également installer Slack Watchman avec pip :
python3 -m pip install slack-watchman
Alternative : compilation à partir des sources
Téléchargez les fichiers sources de la version, puis à partir du répertoire racine du dépôt, exécutez :
python3 -m pip build
python3 -m pip install --force-reinstall dist/*.whl
Slack Watchman est également disponible sur Docker Hub sous forme d'image Docker :
docker pull papermountain/slack-watchman:latest
Vous pouvez ensuite exécuter Slack Watchman dans un conteneur, en veillant à transmettre les variables d'environnement requises :
// 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 sera installé en tant que commande globale ; utilisez-le comme suit :
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
Vous pouvez exécuter Slack Watchman pour tout rechercher et envoyer la sortie vers stdout par défaut :
slack-watchman --timeframe a --all
Vous pourriez être intéressé par les autres applications de la famille Watchman :
Le code source de ce projet est publié sous la licence publique générale GNU. Ce projet n'est pas associé à Slack Technologies ni à Salesforce.