
Поиск раскрытых секретов и личных данных в GitLab
GitLab Watchman — это приложение, использующее API GitLab для обнаружения раскрытых секретов и личных данных. Он также перечисляет полезную информацию об экземпляре GitLab.
Он ищет в GitLab внутренние совместные проекты и проверяет:
Для следующих данных:
Вы можете запустить GitLab Watchman для поиска результатов за последние:
Это означает, что после одного полного сканирования вы можете настроить GitLab Watchman на регулярный запуск и получать результаты только за выбранный период времени.
GitLab Watchman может перечислять потенциально полезную информацию из экземпляра GitLab:
GitLab Watchman использует пользовательские YAML-сигнатуры для обнаружения совпадений в GitLab. Эти сигнатуры загружаются из центрального репозитория Watchman Signatures. Slack Watchman автоматически обновляет свою базу сигнатур во время выполнения, чтобы гарантировать использование последних сигнатур для обнаружения секретов.
Вы можете определить сигнатуры, которые хотите отключить при запуске GitLab Watchman, добавив их идентификаторы в раздел disabled_signatures файла watchman.conf. Например:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
Идентификатор сигнатуры можно найти в соответствующих YAML-файлах в репозитории Watchman Signatures.
GitLab Watchman предоставляет следующие варианты логирования:
GitLab Watchman по умолчанию использует дружественный к терминалу вывод stdout, если не указан другой вариант. Это сделано для удобства чтения человеком.
Также доступно логирование в формате JSON, которое идеально подходит для передачи в SIEM или другие платформы анализа логов.
Логирование в формате JSON можно легко перенаправить в файл следующим образом:
gitlab-watchman --timeframe a --all --output json >> gitlab_watchman_log.json
GitLab Watchman использует API v4 и работает с версиями GitLab Enterprise Edition:
Для поиска в областях:
Экземпляр GitLab должен иметь настроенный Elasticsearch и работать под Enterprise Edition с минимальной лицензией GitLab Starter или Bronze.
Для запуска GitLab Watchman потребуется персональный токен доступа GitLab.
Вы можете создать персональный токен доступа в GUI GitLab: Settings -> Access Tokens -> Add a personal access token
Токену требуются разрешения для следующих областей:
api
Примечание: Персональные токены доступа действуют от имени создавшего их пользователя, поэтому рекомендуется создавать токен с использованием сервисной учётной записи, иначе приложение будет иметь доступ к вашим личным репозиториям.
Также необходимо указать URL вашего экземпляра GitLab.
GitLab Watchman получит токен и URL GitLab из переменных окружения GITLAB_WATCHMAN_TOKEN и GITLAB_WATCHMAN_URL.
Параметры конфигурации можно передавать в файле с именем watchman.conf, который должен храниться в вашем домашнем каталоге. Файл должен соответствовать формату YAML и выглядеть следующим образом:
gitlab_watchman:
disabled_signatures:
- tokens_generic_bearer_tokens
- tokens_generic_access_tokens
GitLab Watchman будет искать этот файл во время выполнения и использовать параметры конфигурации из него.
Вы можете установить последнюю стабильную версию через pip:
python3 -m pip install gitlab-watchman
Или собрать из исходников самостоятельно. Скачайте исходные файлы релиза, затем из корневого каталога репозитория выполните:
python3 -m build
python3 -m pip install --force-reinstall dist/*.whl
GitLab Watchman также доступен на Docker Hub в виде Docker-образа:
docker pull papermountain/gitlab-watchman:latest
Затем вы можете запустить GitLab Watchman в контейнере, убедившись, что переданы необходимые переменные окружения:
// help
docker run --rm papermountain/gitlab-watchman -h
// scan all
docker run --rm -e GITLAB_WATCHMAN_TOKEN=abc123 -e GITLAB_WATCHMAN_URL=https://example.gitlab.com papermountain/gitlab-watchman --timeframe a --all
docker run --rm --env-file .env papermountain/gitlab-watchman --timeframe a --all
GitLab Watchman будет установлен как глобальная команда, используйте следующим образом:
usage: gitlab-watchman [-h] --timeframe {d,w,m,a} [--output {json,stdout}] [--version] [--all] [--blobs] [--commits] [--wiki-blobs] [--issues]
[--merge-requests] [--milestones] [--notes] [--snippets] [--enumerate] [--debug] [--verbose]
Finding exposed secrets and personal data in GitLab
options:
-h, --help show this help message and exit
--output {json,stdout}, -o {json,stdout}
Where to send results
--version, -v show program's version number and exit
--all, -a Find everything
--blobs, -b Search code blobs
--commits, -c Search commits
--wiki-blobs, -w Search wiki blobs
--issues, -i Search issues
--merge-requests, -mr
Search merge requests
--milestones, -m Search milestones
--notes, -n Search notes
--snippets, -s Search snippets
--enumerate, -e Enumerate this GitLab instance for users, groups, projects.Output will be saved to CSV files
--debug, -d Turn on debug level logging
--verbose, -V Turn on more verbose output for JSON logging. This includes more fields, but is larger
required arguments:
--timeframe {d,w,m,a}
How far back to search: d = 24 hours w = 7 days, m = 30 days, a = all time
Возможно, вас заинтересуют другие приложения семейства Watchman:
Исходный код этого проекта выпущен под лицензией GNU General Public Licence. Этот проект не связан с GitLab.