
Uno strumento di riconoscimento e monitoraggio per GitHub per individuare perdite interne della tua organizzazione.

Utilizziamo Vinifera in produzione dal dicembre 2019 e ci ha aiutato a prevenire incidenti di sicurezza. Vinifera è nato come progetto interno per garantire l'igiene della sicurezza dei nostri contributi pubblici e monitorare potenziali perdite su Github. Crediamo che questo aiuterà altre aziende a rafforzare la loro igiene di sicurezza per quanto riguarda fonti pubbliche come Github.

Vinifera consente alle Aziende/Organizzazioni di monitorare gli asset pubblici per trovare riferimenti a perdite di codice interno e potenziali violazioni. A volte gli sviluppatori potrebbero perdere accidentalmente codice interno e credenziali. Vinifera mira ad aiutare le aziende a rilevare queste violazioni in tempo utile e a rispondere all'incidente.
Vinifera monitora gli sviluppatori appartenenti all'organizzazione, monitora e analizza i contributi pubblici per cercare potenziali violazioni e fuoriuscite di codice interno/segreto/proprietario cercando i riferimenti definiti.

Durante lo sviluppo e la creazione dello strumento, il team di sicurezza ha consumato molta uva, quindi lo abbiamo chiamato come il frutto che amiamo :) Vinifera è ispirato dal nome binomiale dell'uva
Vinifera richiede l'installazione dei seguenti strumenti:
Per scansionare i membri della tua organizzazione, Vinifera richiede un token con la possibilità di leggere i membri dell'organizzazione.
Genera un nuovo token https://github.com/settings/tokens/new senza ambito speciale
Dovresti utilizzare il token di un utente amministratore (senza ambito speciale), poiché l'amministratore può elencare tutti gli utenti di un'organizzazione.
https://docs.github.com/en/rest/reference/orgs#list-organization-members
Se l'utente autenticato è anche membro di questa organizzazione, verranno restituiti sia i membri nascosti che quelli pubblici.
.docker_env.example in .docker_envmv .docker_env.example .docker_env
.docker_env con le variabili necessarieGITHUB_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 Commands for Reference
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
Inoltre, per ottenere le metriche su Datadog come nello screenshot sopra, puoi utilizzare l'agente Datadog - https://docs.datadoghq.com/agent/
Per garantire che il team non perda mai alcuna violazione, è disponibile l'opzione di integrazione con PagerDuty:

Per l'integrazione con PagerDuty, la seguente variabile d'ambiente deve essere impostata su true
ENABLE_PAGER_DUTY_TRIGGER=true
Quindi crea un nuovo servizio e una chiave di integrazione come descritto nel seguente documento - https://support.pagerduty.com/docs/services-and-integrations#create-a-new-service

DEFAULT_PD_INTEGRATION_KEY=<xxxxxxxx>
Siamo aperti a contributi/correzioni di bug/miglioramenti delle prestazioni per il nostro progetto :)
Se apprezzi lo strumento che abbiamo costruito, sentiti libero di contribuire/donare ai progetti su cui è stato costruito Vinifera :)
Vinifera è costruito su altri software open-source:
.... (la lista continua..., hai capito ;) )
Puoi anche donare a Feeding India
Né Zomato né gli sviluppatori di questo strumento sono responsabili per eventuali danni causati da questo strumento o dal suo utilizzo. Usalo in modo responsabile. Fare riferimento a LICENSE per maggiori dettagli.
Vinifera è concesso in licenza secondo l'Apache License, Version 2.0. Vedi LICENSE per il testo completo della licenza.