
Herramienta de enumeración de Slack y detección de secretos expuestos
Monitorización y enumeración de Slack en busca de secretos expuestos
Slack Watchman es una aplicación que utiliza la API de Slack para encontrar datos potencialmente sensibles expuestos en un espacio de trabajo de Slack, y para enumerar otra información útil para equipos rojos, azules y morados.
Puedes encontrar más información sobre Slack Watchman en mi blog.
Slack Watchman busca:
Puedes ejecutar Slack Watchman para buscar resultados que se remonten a:

También enumera lo siguiente:
Esto significa que después de un escaneo profundo, puedes programar Slack Watchman para que se ejecute regularmente y solo devuelva resultados de tu período de tiempo elegido.

Puedes ejecutar Slack Watchman en modo de sonda no autenticada para enumerar opciones de autenticación y otra información en un espacio de trabajo. Esto no necesita un token y devuelve:
Para ejecutar este modo, usa Slack Watchman con la opción --probe y el dominio del espacio de trabajo a sondear:
slack-watchman --probe https://domain.slack.com
Slack Watchman utiliza firmas YAML personalizadas para detectar coincidencias en Slack. Estas firmas se extraen del repositorio central de Watchman Signatures. Slack Watchman actualiza automáticamente su base de firmas en tiempo de ejecución para asegurarse de que está utilizando las últimas firmas para detectar secretos.
Puedes definir las firmas que quieras deshabilitar al ejecutar Slack Watchman añadiendo sus IDs a la sección disabled_signatures del archivo watchman.conf. Por ejemplo:
slack_watchman:
token: ...
cookie: ...
url: ...
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Puedes encontrar el ID de una firma en los archivos YAML individuales del repositorio de Watchman Signatures.
Slack Watchman ofrece las siguientes opciones de registro:
Slack Watchman utiliza por defecto el registro legible en terminal si no se proporciona ninguna opción. Está diseñado para que sea más fácil de leer para los humanos.
El registro JSON también está disponible, perfecto para ingerir en un SIEM u otras plataformas de análisis de registros.
El registro con formato JSON se puede redirigir fácilmente a un archivo como se muestra a continuación:
slack-watchman --timeframe a --all --output json >> slack_watchman_log.json
Para ejecutar Slack Watchman, necesitarás un token de acceso OAuth de la API de Slack. Puedes hacerlo creando una Slack App sencilla.
La aplicación debe tener añadidos los siguientes ámbitos de token de usuario:
channels:read
files:read
groups:read
im:read
links:read
mpim:read
remote_files:read
search:read
team:read
users:read
users:read.email
Nota: Los tokens de usuario actúan en nombre del usuario que los autoriza, por lo que sugiero que crees esta aplicación y la autorices con una cuenta de servicio; de lo contrario, la aplicación tendrá acceso a tus conversaciones y chats privados.
Las aplicaciones de Slack se pueden crear a partir de manifiestos JSON que definen los detalles de la aplicación y los ámbitos a aprobar. El manifiesto de la aplicación para Slack Watchman se encuentra en docs/app_manifest.json; puedes usarlo para agilizar la creación de tu aplicación de Slack.
Alternativamente, Slack Watchman también puede autenticarse en Slack usando la cookie d del usuario, que se almacena en el navegador de cada usuario conectado a un espacio de trabajo.
Para usar la autenticación con cookie, tendrás que proporcionar la cookie d y la URL del espacio de trabajo de destino. Luego tendrás que usar la opción --cookie al ejecutar Slack Watchman.
Puedes encontrar más información sobre la autenticación con cookie en mi blog
Slack Watchman primero intentará obtener el token de Slack (además del token de cookie y la URL, si se seleccionan) de las variables de entorno
SLACK_WATCHMAN_TOKENSLACK_WATCHMAN_COOKIESLACK_WATCHMAN_URLSi esto falla, intentará cargar los tokens del archivo .conf (ver más abajo).
Las opciones de configuración se pueden pasar en un archivo llamado watchman.conf que debe almacenarse en tu directorio personal. El archivo debe seguir el formato YAML y tener un aspecto similar al siguiente:
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 buscará este archivo en tiempo de ejecución y usará las opciones de configuración de aquí. Si no estás usando autenticación con cookie, deja cookie y url en blanco.
Si tienes problemas con tu archivo .conf, pásalo por un linter de YAML.
Hay un archivo de ejemplo en docs/example.conf
Nota: Los valores de Cookie y URL son opcionales y no son necesarios si no se usa la autenticación con cookie.
La forma recomendada de instalar Slack Watchman es mediante pipx, que instala la aplicación en un entorno aislado y la hace disponible en tu PATH del sistema:
pipx install slack-watchman
Alternativa: Instalar con pip
También puedes instalar Slack Watchman usando pip:
python3 -m pip install slack-watchman
Alternativa: Compilar desde el código fuente
Descarga los archivos fuente de la versión y, desde el directorio de nivel superior del repositorio, ejecuta:
python3 -m pip build
python3 -m pip install --force-reinstall dist/*.whl
Slack Watchman también está disponible en Docker Hub como imagen Docker:
docker pull papermountain/slack-watchman:latest
Luego puedes ejecutar Slack Watchman en un contenedor, asegurándote de pasar las variables de entorno requeridas:
// ayuda
docker run --rm papermountain/slack-watchman -h
// escanear todo
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 se instalará como un comando global; úsalo de la siguiente manera:
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
Puedes ejecutar Slack Watchman para buscar todo y enviar la salida a stdout por defecto:
slack-watchman --timeframe a --all
Puede que te interesen las otras aplicaciones de la familia Watchman:
El código fuente de este proyecto se publica bajo la GNU General Public Licence. Este proyecto no está asociado con Slack Technologies ni con Salesforce.