
Slack-Enumeration und Erkennung offengelegter Secrets
Überwachung und Enumerierung von Slack auf offengelegte Geheimnisse
Slack Watchman ist eine Anwendung, die die Slack-API verwendet, um potenziell sensible Daten zu finden, die in einem Slack-Workspace offengelegt sind, und um weitere nützliche Informationen für Red-, Blue- und Purple-Teams zu enumerieren.
Weitere Informationen über Slack Watchman finden Sie auf meinem Blog.
Slack Watchman sucht nach:
Sie können Slack Watchman ausführen, um nach Ergebnissen zu suchen, die bis zu folgendem Zeitraum zurückreichen:
Es enumeriert außerdem Folgendes:
Das bedeutet, dass Sie Slack Watchman nach einem vollständigen Scan so planen können, dass es regelmäßig läuft und nur Ergebnisse aus dem von Ihnen gewählten Zeitraum zurückgibt.
Sie können Slack Watchman im Modus für unauthentifizierte Sondierung ausführen, um Authentifizierungsoptionen und andere Informationen zu einem Workspace zu enumerieren. Dieser Modus benötigt kein Token und liefert:
Um diesen Modus auszuführen, verwenden Sie Slack Watchman mit dem --probe-Flag und der zu untersuchenden Workspace-Domain:
slack-watchman --probe https://domain.slack.com
Slack Watchman verwendet benutzerdefinierte YAML-Signaturen, um Übereinstimmungen in Slack zu erkennen. Diese Signaturen werden aus dem zentralen Watchman-Signaturen-Repository bezogen. Slack Watchman aktualisiert seine Signaturbasis zur Laufzeit automatisch, um sicherzustellen, dass es die neuesten Signaturen zur Erkennung von Secrets verwendet.
Sie können Signaturen, die Sie beim Ausführen von Slack Watchman deaktivieren möchten, festlegen, indem Sie deren IDs zum Abschnitt disabled_signatures der Datei watchman.conf hinzufügen. Zum Beispiel:
slack_watchman:
token: ...
cookie: ...
url: ...
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Die ID einer Signatur finden Sie in den einzelnen YAML-Dateien im Watchman-Signaturen-Repository.
Slack Watchman bietet die folgenden Protokollierungsoptionen:
Wenn keine Option angegeben wird, verwendet Slack Watchman standardmäßig die terminalfreundliche Stdout-Protokollierung. Diese ist so gestaltet, dass sie für Menschen einfacher zu lesen ist.
JSON-Protokollierung ist ebenfalls verfügbar und eignet sich perfekt für die Aufnahme in ein SIEM oder andere Plattformen zur Protokollanalyse.
JSON-formatierte Protokollierung kann einfach wie folgt in eine Datei umgeleitet werden:
slack-watchman --timeframe a --all --output json >> slack_watchman_log.json
Um Slack Watchman auszuführen, benötigen Sie ein Slack-API-OAuth-Zugriffstoken. Dies erreichen Sie, indem Sie eine einfache Slack-App erstellen.
Die App muss die folgenden User Token Scopes hinzugefügt haben:
channels:read
files:read
groups:read
im:read
links:read
mpim:read
remote_files:read
search:read
team:read
users:read
users:read.email
Hinweis: Benutzer-Tokens handeln im Namen des Benutzers, der sie autorisiert. Daher empfehle ich, diese App zu erstellen und sie mit einem Dienstkonto zu autorisieren, andernfalls erhält die App Zugriff auf Ihre privaten Konversationen und Chats.
Slack-Apps können aus JSON-Manifesten erstellt werden, die die Details der Anwendung und die zu genehmigenden Scopes definieren. Das App-Manifest für Slack Watchman finden Sie in docs/app_manifest.json. Sie können es verwenden, um die Erstellung Ihrer Slack-App zu beschleunigen.
Alternativ kann sich Slack Watchman auch mit einem Benutzer-d-Cookie bei Slack authentifizieren, das im Browser jedes Benutzers gespeichert ist, der in einem Workspace angemeldet ist.
Um die Cookie-Authentifizierung zu verwenden, müssen Sie das d-Cookie und die URL des Ziel-Workspace angeben. Anschließend müssen Sie beim Ausführen von Slack Watchman das --cookie-Flag verwenden.
Weitere Informationen zur Cookie-Authentifizierung finden Sie auf meinem Blog.
Slack Watchman versucht zunächst, das Slack-Token (sowie das Cookie-Token und die URL, falls ausgewählt) aus den Umgebungsvariablen zu laden:
SLACK_WATCHMAN_TOKENSLACK_WATCHMAN_COOKIESLACK_WATCHMAN_URLSchlägt dies fehl, versucht es, das/die Token aus der .conf-Datei zu laden (siehe unten).
Konfigurationsoptionen können in einer Datei namens watchman.conf übergeben werden, die in Ihrem Home-Verzeichnis gespeichert sein muss. Die Datei sollte dem YAML-Format folgen und wie folgt aussehen:
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 sucht diese Datei zur Laufzeit und verwendet die Konfigurationsoptionen daraus. Wenn Sie keine Cookie-Authentifizierung verwenden, lassen Sie cookie und url leer.
Wenn Sie Probleme mit Ihrer .conf-Datei haben, lassen Sie sie durch einen YAML-Linter laufen.
Eine Beispieldatei befindet sich in docs/example.conf.
Hinweis: Cookie- und URL-Werte sind optional und nicht erforderlich, wenn keine Cookie-Authentifizierung verwendet wird.
Die empfohlene Methode zur Installation von Slack Watchman ist über pipx, das die App in einer isolierten Umgebung installiert und in Ihrem System-PATH verfügbar macht:
pipx install slack-watchman
Alternative: Installation über pip
Sie können Slack Watchman auch mit pip installieren:
python3 -m pip install slack-watchman
Alternative: Aus dem Quellcode erstellen
Laden Sie die Quelldateien des Releases herunter und führen Sie dann aus dem Hauptverzeichnis des Repositorys aus:
python3 -m pip build
python3 -m pip install --force-reinstall dist/*.whl
Slack Watchman ist auch im Docker Hub als Docker-Image verfügbar:
docker pull papermountain/slack-watchman:latest
Anschließend können Sie Slack Watchman in einem Container ausführen. Stellen Sie sicher, dass Sie die erforderlichen Umgebungsvariablen übergeben:
// 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 wird als globaler Befehl installiert. Verwenden Sie es wie folgt:
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
Sie können Slack Watchman ausführen, um nach allem zu suchen und die Ausgabe an das Standard-Stdout zu senden:
slack-watchman --timeframe a --all
Möglicherweise interessieren Sie sich für die anderen Apps aus der Watchman-Familie:
Der Quellcode dieses Projekts wird unter der GNU General Public Licence veröffentlicht. Dieses Projekt ist nicht mit Slack Technologies oder Salesforce verbunden.