GitHub是全球最大代码托管平台,大量安全泄露需实时监控
大家都知道,GitHub是全球最大的代码托管平台,它在2019年报中表明平台已有超过4000万开发者,全年总共创建了4400万个仓库。然而在庞大数字的背后,每天都有大量安全泄露发生!我们要实时监控GitHub,避免出现重大安全事故。

0x01 监控原理
通常监控 GitHub 有两种方案:
1、爬虫
2、GitHub API:
GitHub具备完善的反爬虫机制,所以想借助爬虫监控GitHub并非易事,使用GitHub API是更为稳定且高效的选择。然而GitHub API对请求频率设置了严格限制,要是需要扫描众多关键字,就必须申请多个令牌(personal access token)来降低每个账号的请求频率。
0x02 码小六
今天介绍一款GitHub代码泄露监控工具,它叫码小六,它基于PHP和Laravel构建,它开源免费,能为企业安全保驾护航!
仓库地址:
系统特点:
1、全可视化界面,操作简单
2、支持 GitHub 令牌管理及智能调度
3、扫描结果信息丰富,支持批量操作
4、任务配置灵活,可单独配置任务扫描参数
5、支持白名单模式,主动忽略白名单仓库
运行环境
Linux
PHP >= 7.3.0
Composer
MySQL >= 5.7
Apache >= 2.4
系统界面
0x03 安装部署
码小六支持通过 Docker 进行部署,也支持源码部署,这里介绍利用 Docker 进行部署的方法~
Docker镜像中没有MySQL实例,需要安装MySQL,要创建数据库,还要进行授权(安装MySQL的步骤省略)。
# 创建镜像git 克隆,网址为https://github.com/4x99/code6.git的代码仓库cd 执行代码6,然后使用docker进行构建,并将镜像命名为code6 ,构建上下文为当前目录。启动容器,宿主机映射端口666与MySQL的连接参数需根据情况修改,容器启动后会自动连接MySQL并导入数据表。docker run -d \-p 666:80 \-e MYSQL_HOST=172.17.0.1 \-e MYSQL_PORT=3306 \-e MYSQL_DATABASE=code6 \-e MYSQL_USERNAME=xxx \-e MYSQL_PASSWORD=xxxxxx \--name code6-server code6# 进入容器创建用户docker 执行,以交互方式进入,代码6服务器,运行/bin/bash脚本php artisan code6:user-add <邮箱> <密码>
这样安装就完成了,此时便可以通过:666访问系统~
0x04 设置令牌
进入系统的第一步,要前往 [ 令牌配置 ] 模块,在此模块中配置 GitHub 令牌 。
如何申请令牌?
进入GitHub,点击设置,选择开发者设置,点击个人访问令牌,点击生成新令牌 。
直达地址:
其他说明
1、建议至少配置 5 个令牌
不能使用同一个GitHub账号去创建多个令牌,这些令牌共享账号配额 。
3、码小六在进行扫描任务时会自动检测更新令牌配额并进行调度
若令牌状态时而正常时而异常,这有可能是由于请求GitHub时网络不通畅导致的,这种情况可以忽略。
0x05 设置任务
接下来可以到 [ 任务配置 ] 模块设置扫描任务啦!
关键字的选择
公司邮箱后缀是不错的选择,公司域名是不错的选择,项目标识是不错的选择,若能在公司推行安全规范,在每个项目工程内放置唯一标识,将此标识作为扫描关键字,便能实现精准监控。
扫描结果存储
扫描结果存储入库目前支持以下选项:
记录文件的每个版本,文件每次提交时会产生一条新的未审记录,提交内容包含关键字 。
2、一个文件只记录一次
3、一个仓库只记录一次
如果只关注项目维度,选择“一个仓库只记录一次”就行,如此一来,会大幅减少需要审核的结果记录。
0x06 审核结果
状态说明
码小六的“扫描结果”模块呈现出匹配到关键字的扫描记录,这些记录能够被设置为以下状态:
未审:未审核的记录
误报:已确认正常的记录
异常:已确认异常的记录
解决:异常且已处理的记录
结果处理
若能于GitHub个人主页、代码或Commit记录里找到仓库拥有者的联系方式,便可直接联系处理。若联系不上,那就只能借助GitHub DMCA(数字千年版权法),给GitHub写邮件申请下架仓库(建议各公司内部建立相关预案以便能快速处理此类问题),帮助文档: