
Uma ferramenta de reconhecimento/monitoramento do GitHub para encontrar vazamentos internos pertencentes à sua organização.

Temos usado o Vinifera em produção desde dezembro de 2019 e ele nos ajudou a prevenir incidentes de segurança. Vinifera começou como um projeto interno para garantir a higiene de segurança de nossas contribuições públicas e monitorar possíveis vazamentos no Github. Acreditamos que isso ajudará outras empresas a fortalecer sua higiene de segurança quando se trata de fontes públicas como o Github.

Vinifera permite que Empresas/Organizações monitorem ativos públicos para encontrar referências a vazamentos internos de código e possíveis violações.
Às vezes, desenvolvedores podem vazar código interno e credenciais acidentalmente. O Vinifera tem como objetivo ajudar as empresas a detectar essas violações a tempo e responder ao incidente.
O Vinifera funciona sincronizando os usuários da organização.

Durante o desenvolvimento e a concepção da ferramenta, a equipe de Segurança consumiu muitas uvas, então a nomeamos em homenagem à fruta que amamos :)
Vinifera é inspirado no nome binomial das uvas
Vinifera requer a instalação das seguintes ferramentas:
Para escanear os membros da sua organização, o Vinifera requer um token com a capacidade de ler membros da Organização.
Gere um novo token https://github.com/settings/tokens/new sem escopo especial
Você deve usar o token de um usuário administrador (sem escopo especial), já que o administrador pode listar todos os usuários de uma organização.
https://docs.github.com/en/rest/reference/orgs#list-organization-members
Se o usuário autenticado também for membro desta organização, tanto os membros ocultos quanto os públicos serão retornados.
.docker_env.example para .docker_envmv .docker_env.example .docker_env
.docker_env com as variáveis necessáriasGITHUB_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
Comandos do Docker Compose para Referência
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
Além disso, para obter as métricas no Datadog como na captura de tela acima, você pode usar o agente DataDog - https://docs.datadoghq.com/agent/
Para garantir que a equipe nunca perca nenhuma violação, a opção de integração com PagerDuty está disponível:

Para integração com PagerDuty, a seguinte variável de ambiente precisa ser definida como true
ENABLE_PAGER_DUTY_TRIGGER=true
Em seguida, crie um novo serviço e uma chave de integração conforme descrito no seguinte documento - https://support.pagerduty.com/docs/services-and-integrations#create-a-new-service

DEFAULT_PD_INTEGRATION_KEY=<xxxxxxxx>
Estamos abertos a contribuições/correções de bugs/melhorias de desempenho em nosso projeto :)
Se você aprecia a ferramenta que construímos, sinta-se à vontade para contribuir/doar para os projetos sobre os quais o Vinifera foi construído :)
Vinifera é construído sobre outros softwares de código aberto:
.... (a lista continuará ..., você entendeu a ideia ;) )
Você também pode doar para a Feeding India
Nem a Zomato nem os desenvolvedores desta ferramenta são responsáveis por qualquer dano causado por esta ferramenta ou pelo uso da mesma. Use com responsabilidade. Consulte LICENSE para mais detalhes.
Vinifera é licenciado sob a Licença Apache, Versão 2.0. Veja LICENSE para o texto completo da licença.