
Un outil de reconnaissance et de surveillance GitHub pour trouver les fuites internes appartenant à votre organisation.

Nous utilisons Vinifera en production depuis décembre 2019 et cela nous a aidé à prévenir des incidents de sécurité. Vinifera a commencé comme un projet interne pour assurer l'hygiène de sécurité de nos contributions publiques et surveiller les fuites potentielles sur Github. Nous pensons que cela aidera d'autres entreprises à renforcer leur hygiène de sécurité vis-à-vis de sources publiques comme Github.

Vinifera permet aux entreprises/organisations de surveiller les actifs publics pour trouver des références à des fuites de code interne et des violations potentielles.
Parfois, les développeurs peuvent involontairement divulguer du code interne et des identifiants. Vinifera vise à aider les entreprises à détecter ces violations en temps utile et à répondre à l'incident.
Vinifera surveille les développeurs appartenant à l'organisation, surveille et analyse les contributions publiques pour rechercher d'éventuelles violations et divulgations de code interne/secret/propriétaire en recherchant les références définies.

Pendant le développement et la création de l'outil, l'équipe de sécurité a consommé beaucoup de raisins, nous l'avons donc nommé d'après le fruit que nous aimons :)
Vinifera est inspiré du nom binomial du raisin
Vinifera nécessite l'installation des outils suivants :
Pour analyser les membres de votre organisation, Vinifera nécessite un jeton avec la capacité de lire les membres de l'organisation.
Générez un nouveau jeton sur https://github.com/settings/tokens/new sans portée spéciale.
Vous voudrez utiliser le jeton d'un utilisateur administrateur (sans portée spéciale), car l'administrateur peut lister tous les utilisateurs d'une organisation.
https://docs.github.com/en/rest/reference/orgs#list-organization-members
Si l'utilisateur authentifié est également membre de cette organisation, les membres cachés et publics seront retournés.
.docker_env.example en .docker_envmv .docker_env.example .docker_env
.docker_env avec les variables nécessairesGITHUB_ACCESS_TOKEN=<REDACTED>
VINIFERA_ORG_NAME=<Your_org_name>
RAILS_MAX_THREADS=60 # Cela contrôle aussi le pool de la base de données
RAILS_MASTER_KEY=<ADD_YOUR_MASTER_KEY_HERE>
# Définir l'environnement
RAILS_ENV=<development|production>
# Définir ce qui suit si RAILS_ENV est défini sur production
SECRET_KEY_BASE=<YOUR_SECRET_KEY> # Une clé d'au moins 32 bits est autorisée
# Ajouter les URLs des webhooks Slack pour les canaux respectifs
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>
# Par défaut, l'analyse des forks et des gros forks est désactivée
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
Commandes Docker Compose pour référence
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> # Nom de l'org pour lequel le jeton a été généré.
VINIFERA_DATABASE_HOST=<localhost>
VINIFERA_DATABASE_PASSWORD=<YOUR_PASSWORD>
RAILS_MAX_THREADS=60 # Cela contrôle aussi le pool de la base de données
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>
# Ajouter ceci seulement si vous utilisez Docker sur TLS, méthode recommandée. Si vous êtes sur le même hôte que vinifera, vous pouvez l'ignorer.
DOCKER_CLIENT_CERT_PATH=/home/deployer/.docker
DOCKER_HOST=tcp://<IP>:<PORT>
# Par défaut, l'analyse des forks et des gros forks est désactivée
VINIFERA_ENABLE_FORK_SCANNING=false
VINIFERA_ENABLE_BIG_FORK_SCANNING=false
REDIS_URL=redis://<REDIS_URI>
SIDEKIQ_REDIS_URL=redis://<REDIS_URI>
# Pour l'intégration PagerDuty
DEFAULT_PD_INTEGRATION_KEY=<xxxxxxxx>
ENABLE_PAGER_DUTY_TRIGGER=true
bundle exec whenever --update-crontab
[[rules]]
# Insérez vos règles ici
# description = "Internal References"
# regex = '''(?i)((.*)<COMPANY_INTERNAL_REFERENCES>(.*))'''
# tags = ["internal", "company","references"]
bundle exec sidekiq
En complément, pour obtenir les métriques sur Datadog comme dans la capture d'écran ci-dessus, vous pouvez utiliser l'agent DataDog - https://docs.datadoghq.com/agent/
Pour garantir que l'équipe ne manque jamais une violation, une option d'intégration PagerDuty est disponible :

Pour l'intégration PagerDuty, la variable d'environnement suivante doit être définie sur true
ENABLE_PAGER_DUTY_TRIGGER=true
Créez ensuite un nouveau service et une clé d'intégration comme décrit dans le document suivant - https://support.pagerduty.com/docs/services-and-integrations#create-a-new-service

DEFAULT_PD_INTEGRATION_KEY=<xxxxxxxx>
Nous sommes ouverts aux contributions/corrections de bogues/améliorations de performances pour notre projet :)
Si vous appréciez l'outil que nous avons construit, n'hésitez pas à contribuer/faire un don aux projets sur lesquels Vinifera a été construit :)
Vinifera est construit sur d'autres logiciels open-source :
.... (la liste continue..., vous voyez l'idée ;) )
Vous pouvez également faire un don à Feeding India
Ni Zomato ni les développeurs de cet outil ne sont responsables des dommages causés par cet outil ou par son utilisation. Utilisez-le de manière responsable. Consultez LICENSE pour plus de détails.
Vinifera est sous licence Apache License, Version 2.0. Voir LICENSE pour le texte complet de la licence.