
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).