
Один из способов непрерывного мониторинга конфиденциальной информации, которая может быть раскрыта на Github
Я знаю, что существует много других инструментов для поиска конфиденциальной информации, уже утекшей на Github, и сам пользуюсь некоторыми из них. Однако, на мой взгляд, им всё ещё не хватает некоторых возможностей, например:
Другие инструменты больше сосредоточены на поиске конфиденциальной информации в репозиториях, адрес которых передан инструменту. Лишь немногие подобные инструменты на момент создания GitMonitor были нацелены на поиск репозиториев, за которыми нужно следить в первую очередь: найти все релевантные репозитории, а затем проверить, не содержится ли в них конфиденциальная информация.
Помимо правил для проверки конфиденциальной информации, инструменту также нужны правила для поиска интересующих репозиториев. Репозиториями, заслуживающими внимания, могут быть те, которые содержат ключевые слова, связанные с компанией или проектом.
Если вы охотник за багами, вас интересует лишь несколько целей одновременно. Но если вы инженер по безопасности компании, вам нужно знать, когда появляется репозиторий, связанный с вашей компанией или проектом, и он может содержать конфиденциальную информацию. Такие репозитории могут появиться где угодно на Github, с любым именем, от любой учётной записи. Вы также должны получать оповещение сразу после появления такого репозитория (непрерывный мониторинг).
Инструмент имеет гибкий механизм отчетности.
Вот почему я создал этот инструмент — GitMonitor. GitMonitor использует два разных набора правил для поиска того, что вам нужно. Набор правил поиска находит репозитории, которые могут быть связаны с вашей организацией, внутренними проектами или чем-либо ещё, клонирует подходящие репозитории локально. Затем набор правил фильтрации конфиденциальной информации проверяет, есть ли в этих репозиториях конфиденциальные данные. Наконец, инструмент отправляет отчёт через Slack. Вы можете использовать этот инструмент с помощью Cronjob для создания системы непрерывного мониторинга утечек конфиденциальной информации, связанной с вашей организацией, на Github и получать результаты через Slack.
Обновление от 15 июня 2020 года: Мы выпустили обновление до версии 1.0. В этой версии исправлены некоторые ошибки, благодаря которым Gitmonitor работает стабильно. Рекомендуем выполнить git pull, если вы используете предыдущие версии.
Использование двух разных наборов правил: набора правил поиска (yaml) для поиска интересующих репозиториев и набора правил фильтрации (regex) для проверки, содержат ли эти репозитории конфиденциальную информацию. Правила поиска (yaml) и правила фильтрации (regex) определяются отдельно. Пользователи могут легко и интуитивно задавать yaml-правила и регулярные выражения.
Набор правил поиска: Вы можете создать множество различных правил, используя разные yaml-файлы. Правила позволяют гибко задать способ поиска репозиториев: можно использовать ключевые слова или ключевые слова в сочетании с языком, именем файла и расширением. Также можно исключать репозитории из поиска на основе языка, имени файла или расширения. Ключевые слова ищутся в именах репозиториев, коде репозиториев и коммитах.
Набор правил фильтрации: Вы можете легко добавлять или изменять регулярные выражения для поиска конфиденциальной информации, которая может присутствовать в репозиториях.
Первый репозиторий, соответствующий правилам поиска, клонируется локально. Затем правила фильтрации проверяют, содержит ли этот репозиторий конфиденциальную информацию. После завершения проверки Gitmonitor записывает результаты и автоматически удаляет этот репозиторий локально для экономии места, прежде чем продолжить повторять процесс, пока все релевантные репозитории не будут найдены и проверены.
Отчет через Slack.
Этот инструмент можно запланировать через Cronjob для непрерывного мониторинга.

> python3 -m pip install -r requirements.txt
Убедитесь, что установлена версия Pyyaml 5.x или выше (pip3 install --ignore-installed PyYAML)
В следующей таблице объясняется значение каждого ключа в файле конфигурации:
> export GIT_USERNAME=ваше имя пользователя Github
> export GIT_PASSWORD=ваш личный ключ или пароль Github
Или укажите учётные данные в файле конфигурации (не рекомендуется):
Пример файла конфигурации при задании учётных данных через переменные окружения

Вы можете создать несколько разных yaml-файлов, подобных шаблону, для задания множества ключевых слов. Файл правил будет выглядеть, как на изображении ниже:

> python3 gitmonitor.py
Например:

Многие области этого проекта могут быть улучшены и существенно изменены при рефакторинге текущего кода и реализации новых функций. Обратная связь с предложениями по улучшению и pull request'ы от сообщества будут высоко оценены и приняты.
В целом, мы следуем рабочему процессу "fork-and-pull".
ПРИМЕЧАНИЕ: Перед отправкой pull request обязательно выполните слияние последних изменений из "upstream"!
| Ключ | Описание |
|---|
| user | Имя пользователя Github — оставьте пустым, если учётные данные Github заданы через переменные окружения |
| pass | Пароль Github — оставьте пустым, если учётные данные Github заданы через переменные окружения |
| webhooks | Токен Incoming Webhook для отправки сообщений из GitMonitor в Slack |
| rule | Каталог, содержащий набор правил поиска |
| source | Каталог для загрузки репозитория |
| log | Каталог будет содержать JSON-файл, который записывает состояние после каждого сканирования; этот JSON-файл используется для сравнения результатов между сканированиями (для выявления новых репозиториев) |
| start | Определяет баннер начала сканирования и баннер результатов сканирования набора правил фильтрации конфиденциальной информации — будет показан в результатах, отправляемых в Slack |
| end | Определяет баннер завершения сканирования и баннер результатов сканирования набора правил поиска — будет показан в результатах, отправляемых в Slack |
| all | Определяет баннер для отображения всех репозиториев — будет показан в результатах, отправляемых в Slack |