
自 2019 年 12 月以来,我们一直在生产环境中使用 Vinifera,它帮助我们阻止了安全事故。 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_envGITHUB_ACCESS_TOKEN=<已编辑>
VINIFERA_ORG_NAME=<你的组织名称>
RAILS_MAX_THREADS=60 # 这也控制数据库连接池
RAILS_MASTER_KEY=<在此添加你的主密钥>
# 设置环境
RAILS_ENV=<development|production>
# 如果 RAILS_ENV 设置为 production,请设置以下项
SECRET_KEY_BASE=<你的密钥> # 至少允许 32 位密钥
# 为相应的 Slack 频道添加 Slack 传入 webhook URL
SLACK_UPDATES_GROUP_URL=https://hooks.slack.com/services/<你的配置>
SLACK_TARGETS_GROUP_URL=https://hooks.slack.com/services/<你的配置>
SLACK_USER_TRACKING_GROUP_URL=https://hooks.slack.com/services/<你的配置>
SLACK_VINIFERA_VIOLATION_GROUP_URL=https://hooks.slack.com/services/<你的配置>
SLACK_ERROR_GROUP_URL=https://hooks.slack.com/services/<你的配置>
# 默认禁用 fork 和大型 fork 扫描
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
cd <克隆仓库的位置>
bundle install
bundle exec rails db:create
bundle exec rails db:migrate
.example_envGITHUB_ACCESS_TOKEN=<已编辑>
VINIFERA_ORG_NAME=<你的组织名称> # 生成令牌所在的组织名称。
VINIFERA_DATABASE_HOST=<localhost>
VINIFERA_DATABASE_PASSWORD=<你的密码>
RAILS_MAX_THREADS=60 # 这也控制数据库连接池
RAILS_MASTER_KEY=<已编辑>
SLACK_UPDATES_GROUP_URL=https://hooks.slack.com/services/<你的配置>
SLACK_TARGETS_GROUP_URL=https://hooks.slack.com/services/<你的配置>
SLACK_USER_TRACKING_GROUP_URL=https://hooks.slack.com/services/<你的配置>
SLACK_VINIFERA_VIOLATION_GROUP_URL=https://hooks.slack.com/services/<你的配置>
SLACK_ERROR_GROUP_URL=https://hooks.slack.com/services/<你的配置>
# 仅当你通过 TLS 使用 Docker 时才添加此项,推荐方式。如果与 vinifera 在同一主机上,可以跳过
DOCKER_CLIENT_CERT_PATH=/home/deployer/.docker
DOCKER_HOST=tcp://<IP>:<PORT>
# 默认禁用 fork 和大型 fork 扫描
VINIFERA_ENABLE_FORK_SCANNING=false
VINIFERA_ENABLE_BIG_FORK_SCANNING=false
REDIS_URL=redis://<REDIS_URI>
SIDEKIQ_REDIS_URL=redis://<REDIS_URI>
# 用于 PagerDuty 集成
DEFAULT_PD_INTEGRATION_KEY=<xxxxxxxx>
ENABLE_PAGER_DUTY_TRIGGER=true
bundle exec whenever --update-crontab
[[rules]]
# 在此处插入你的规则
# description = "内部引用"
# regex = '''(?i)((.*)<公司内部引用>(.*))'''
# tags = ["internal", "company","references"]
bundle exec sidekiq
此外,要像上述截图那样在 Datadog 上获取指标,你可以使用 DataDog agent - 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 License, Version 2.0 进行许可。有关完整的许可证文本,请参阅 LICENSE。