
Una herramienta de reconocimiento/monitoreo de GitHub para encontrar filtraciones internas pertenecientes a tu organización.

Hemos estado usando Vinifera en producción desde diciembre de 2019 y nos ha ayudado a prevenir incidentes de seguridad. Vinifera comenzó como un proyecto interno para garantizar la higiene de seguridad de nuestras contribuciones públicas y monitorear posibles fugas en Github. Creemos que esto ayudará a otras empresas a fortalecer su higiene de seguridad cuando se trata de fuentes públicas como Github.

Vinifera permite a Empresas/Organizaciones monitorear activos públicos para encontrar referencias a fugas de código interno y posibles brechas.
A veces los desarrolladores pueden filtrar código interno y credenciales por accidente. Vinifera tiene como objetivo ayudar a las empresas a detectar esas brechas a tiempo y responder al incidente.
Vinifera monitorea a los desarrolladores pertenecientes a la organización, monitorea y escanea contribuciones públicas para buscar posibles violaciones y filtraciones de código interno/secreto/propietario mediante la búsqueda de referencias definidas.

Durante el desarrollo y la creación de la herramienta, el equipo de Seguridad consumió muchas uvas, por lo que la nombramos por la fruta que amamos :)
Vinifera está inspirado en el nombre binomial de las uvas
Vinifera requiere la instalación de las siguientes herramientas:
Para escanear los miembros de tu organización, Vinifera requiere un token con la capacidad de leer miembros de la Organización.
Genera un nuevo token https://github.com/settings/tokens/new sin alcance especial
Te conviene usar el token de un usuario administrador (sin alcance especial), ya que el administrador puede listar todos los usuarios de una organización.
https://docs.github.com/en/rest/reference/orgs#list-organization-members
Si el usuario autenticado también es miembro de esta organización, entonces se devolverán tanto los miembros ocultos como los públicos.
.docker_env.example a .docker_envmv .docker_env.example .docker_env
.docker_env con las variables necesariasGITHUB_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 de Docker Compose para referencia
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
Adicionalmente, para obtener las métricas en Datadog como en la captura de pantalla anterior, puedes usar el agente DataDog - https://docs.datadoghq.com/agent/
Para asegurar que el equipo nunca pierda ninguna violación, existe la opción de integración con PagerDuty:

Para la integración con PagerDuty, la siguiente variable de entorno debe establecerse en true
ENABLE_PAGER_DUTY_TRIGGER=true
Luego crea un nuevo servicio y una clave de integración como se describe en el siguiente documento - https://support.pagerduty.com/docs/services-and-integrations#create-a-new-service

DEFAULT_PD_INTEGRATION_KEY=<xxxxxxxx>
Estamos abiertos a contribuciones/correcciones de errores/mejoras de rendimiento para nuestro proyecto :)
Si aprecias la herramienta que hemos construido, siéntete libre de contribuir/donar a los proyectos sobre los cuales se construyó Vinifera :)
Vinifera está construido sobre otro software de código abierto:
.... (la lista seguirá..., captas la idea ;) )
También puedes donar a Feeding India
Ni Zomato ni los desarrolladores de esta herramienta son responsables por cualquier daño causado por esta herramienta o su uso. Úsala de manera responsable. Consulta LICENSE para más detalles.
Vinifera está licenciada bajo la Licencia Apache, Versión 2.0. Consulta LICENSE para el texto completo de la licencia.