
Инструмент разведки/мониторинга GitHub для поиска внутренних утечек, принадлежащих вашей организации.

Мы используем Vinifera в production с декабря 2019 года, и это помогло нам предотвратить инциденты безопасности. Vinifera начинался как внутренний проект для обеспечения безопасности наших публичных вкладов и мониторинга потенциальных утечек на Github. Мы считаем, что это поможет другим компаниям укрепить свою безопасность при работе с такими публичными источниками, как Github.

Vinifera позволяет компаниям/организациям отслеживать публичные активы для поиска ссылок на утечки внутреннего кода и потенциальные нарушения.
Иногда разработчики могут случайно раскрыть внутренний код и учетные данные. Vinifera призвана помочь компаниям своевременно обнаруживать такие утечки и реагировать на инцидент.
Vinifera отслеживает разработчиков, принадлежащих организации, отслеживает и сканирует публичные вклады для поиска потенциальных нарушений и утечек внутреннего/секретного/собственного кода по заданным ссылкам.

Во время разработки и создания инструмента команда безопасности съела много винограда, поэтому мы назвали его в честь любимого фрукта :)
Vinifera вдохновлено биномиальным названием винограда
Vinifera требует установки следующих инструментов:
Для сканирования участников вашей организации Vinifera требуется токен с возможностью чтения участников организации.
Создайте новый токен https://github.com/settings/tokens/new без специальных разрешений
Рекомендуется использовать токен администратора (без специальных разрешений), так как администратор может получить список всех пользователей организации.
https://docs.github.com/en/rest/reference/orgs#list-organization-members
Если аутентифицированный пользователь также является участником этой организации, то будут возвращены как скрытые, так и открытые участники.
.docker_env.example в .docker_envmv .docker_env.example .docker_env
.docker_env необходимыми переменнымиGITHUB_ACCESS_TOKEN=<REDACTED>
VINIFERA_ORG_NAME=<Your_org_name>
RAILS_MAX_THREADS=60 # This also controls DB pool
RAILS_MASTER_KEY=<ADD_YOUR_MASTER_KEY_HERE>
# set the environment
RAILS_ENV=<development|production>
# set the following if RAILS_ENV is set to production
SECRET_KEY_BASE=<YOUR_SECRET_KEY> # min 32 bits key is allowed
# add slack incoming webhook URLs for respective slack channels
SLACK_UPDATES_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
SLACK_TARGETS_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
SLACK_USER_TRACKING_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
SLACK_VINIFERA_VIOLATION_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
SLACK_ERROR_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
# By default fork and big fork scanning is disabled
VINIFERA_ENABLE_FORK_SCANNING=false
VINIFERA_ENABLE_BIG_FORK_SCANNING=false
docker-compose build
docker-compose up
docker-compose up --build
docker exec -it vinifera_sidekiq bundle exec rake periodic_syncs:sync_github_users
Команды Docker Compose для справки
cd <location_of_cloned_repo>
bundle install
bundle exec rails db:create
bundle exec rails db:migrate
.example_envGITHUB_ACCESS_TOKEN=<REDACTED>
VINIFERA_ORG_NAME=<Your_org_name> # Name of org for which token was generated.
VINIFERA_DATABASE_HOST=<localhost>
VINIFERA_DATABASE_PASSWORD=<YOUR_PASSWORD>
RAILS_MAX_THREADS=60 # This also controls DB pool
RAILS_MASTER_KEY=<REDACTED>
SLACK_UPDATES_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
SLACK_TARGETS_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
SLACK_USER_TRACKING_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
SLACK_VINIFERA_VIOLATION_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
SLACK_ERROR_GROUP_URL=https://hooks.slack.com/services/<YOUR_CONFIG_HERE>
# Add this only if you are using Docker over TLS, recommended way, if, on the same host as vinifera, you may skip it
DOCKER_CLIENT_CERT_PATH=/home/deployer/.docker
DOCKER_HOST=tcp://<IP>:<PORT>
# By default fork and big fork scanning is disabled
VINIFERA_ENABLE_FORK_SCANNING=false
VINIFERA_ENABLE_BIG_FORK_SCANNING=false
REDIS_URL=redis://<REDIS_URI>
SIDEKIQ_REDIS_URL=redis://<REDIS_URI>
# For PagerDuty Integration
DEFAULT_PD_INTEGRATION_KEY=<xxxxxxxx>
ENABLE_PAGER_DUTY_TRIGGER=true
bundle exec whenever --update-crontab
[[rules]]
# Insert your rules here
# description = "Internal References"
# regex = '''(?i)((.*)<COMPANY_INTERNAL_REFERENCES>(.*))'''
# tags = ["internal", "company","references"]
bundle exec sidekiq
Дополнительно, чтобы получать метрики в Datadog, как на скриншоте выше, вы можете использовать агент DataDog - https://docs.datadoghq.com/agent/
Чтобы гарантировать, что команда не пропустит ни одного нарушения, доступна интеграция с PagerDuty:

Для интеграции с PagerDuty необходимо установить следующую переменную окружения в true
ENABLE_PAGER_DUTY_TRIGGER=true
Затем создайте новый сервис и ключ интеграции, как описано в следующей документации - https://support.pagerduty.com/docs/services-and-integrations#create-a-new-service

DEFAULT_PD_INTEGRATION_KEY=<xxxxxxxx>
Мы открыты для вклада/исправления ошибок/улучшения производительности нашего проекта :)
Если вы оценили созданный нами инструмент, не стесняйтесь вносить вклад/пожертвования в проекты, на основе которых был построен Vinifera :)
Vinifera построен на основе другого программного обеспечения с открытым исходным кодом:
.... (список будет продолж..., вы поняли идею ;) )
Вы также можете сделать пожертвование в Feeding India
Ни Zomato, ни разработчики этого инструмента не несут ответственности за любой ущерб, причиненный этим инструментом или его использованием. Используйте ответственно. См. LICENSE для получения дополнительной информации.
Vinifera лицензируется в соответствии с лицензией Apache, версия 2.0. См. LICENSE для полного текста лицензии.