
Инструмент для энумерации Slack и обнаружения раскрытых секретов
Мониторинг Slack и поиск раскрытых секретов
Slack Watchman — это приложение, которое использует Slack API для поиска потенциально чувствительных данных, раскрытых в рабочем пространстве Slack, а также для сбора другой полезной информации для red, blue и purple команд.
Подробнее о Slack Watchman можно узнать в моём блоге.
Slack Watchman ищет:
Вы можете запустить Slack Watchman для поиска результатов за следующий период:
Он также собирает следующие данные:
Это означает, что после одного глубокого сканирования вы можете настроить регулярный запуск Slack Watchman и получать только результаты за выбранный период времени.
Вы можете запустить Slack Watchman в режиме неаутентифицированного зондирования, чтобы получить параметры аутентификации и другую информацию о рабочем пространстве. Для этого не нужен токен. Режим возвращает:
Чтобы запустить этот режим, используйте Slack Watchman с флагом --probe и доменом рабочего пространства для зондирования:
slack-watchman --probe https://domain.slack.com
Slack Watchman использует пользовательские YAML-сигнатуры для поиска совпадений в Slack. Эти сигнатуры загружаются из центрального репозитория Watchman Signatures. Slack Watchman автоматически обновляет свою базу сигнатур во время выполнения, чтобы использовать самые свежие сигнатуры для обнаружения секретов.
Вы можете указать сигнатуры, которые нужно отключить при запуске Slack Watchman, добавив их ID в раздел disabled_signatures файла watchman.conf. Например:
slack_watchman:
token: ...
cookie: ...
url: ...
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
ID сигнатуры можно найти в отдельных YAML-файлах в репозитории Watchman Signatures.
Slack Watchman предоставляет следующие варианты логирования:
Если параметр не указан, Slack Watchman по умолчанию использует удобный для терминала вывод в stdout. Он рассчитан на чтение человеком.
Также доступно JSON-логирование, которое идеально подходит для загрузки в SIEM или другие платформы анализа журналов.
Логирование в формате JSON можно легко перенаправить в файл, как показано ниже:
slack-watchman --timeframe a --all --output json >> slack_watchman_log.json
Для запуска Slack Watchman понадобится OAuth-токен доступа Slack API. Для этого создайте простое Slack-приложение.
Приложению необходимо добавить следующие User Token Scopes:
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 может аутентифицироваться в Slack с помощью пользовательской cookie d, которая хранится в браузере каждого пользователя, вошедшего в рабочее пространство.
Для аутентификации с помощью cookie необходимо указать cookie d и 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
Вы также можете установить Slack Watchman с помощью pip:
python3 -m pip install slack-watchman
Альтернатива: сборка из исходного кода
Скачайте исходные файлы релиза, затем из корневого каталога репозитория выполните:
python3 -m pip build
python3 -m pip install --force-reinstall dist/*.whl
Slack Watchman также доступен в Docker Hub в виде 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.