GitHub代码泄露监控快速实践
利用开源项目,快速实现GitHub代码监控,及时发现员工将公司代码托管到GitHub的行为并预警,能够降低代码泄露风险。
针对GitHub代码泄露监控类开源项目有多个,Hawkeye、VKSRC开源的Github-Monitor等,在个人测试实践中码小六是使用体验友好简洁且一直在持续维护中的一款,能帮助快速进行代码监控落地实践,通过该系统可以及时发现企业内部代码泄露到github的情况,从而降低由于代码泄露导致的一系列安全风险。
系统特点
可视化界面,操作简单
支持移动端,随时随地解决问题
支持 GitHub 令牌管理及智能调度
扫描结果信息丰富,支持批量操作
任务配置灵活,可单独配置任务扫描参数
支持白名单模式,可按仓库和文件名过滤
支持邮件、钉钉、WebHook、Telegram、企业微信通知
快速搭建
码小六支持Docker部署与源码部署,推荐容器部署(请提前准备docker和Git环境)。
下载安装
kali_# sudo git clone https://github.com/4x99/code6.git//克隆代码
kali_# cd code6
kali_# sudo docker build -t code6 . //使用目录code6下的dockerfile进行创建容器镜像
配置数据库
开源项目容器安装方式的dockerfile中并未提供数据库自动安装,需要事先手动启动数据库容器。
kali_# sudo docker pull mysql //拉取一个MySQL容器镜像
kali_# sudo docker run --name mysqldb -e MYSQL_ROOT_PASSWORD=root -d mysql //启动一个数据库容器,登录密码root
kali_# sudo docker inspect mysqldb | grep IPAddress //查看数据库容器的内部IP
"IPAddress": "172.17.0.2",
"SecondaryIPAddresses": null
kali_# mysql -h 172.17.0.2 -u root -p //使用密码root登录
如果出现无法登录数据库情况,请依照以下方法修改密码:
kali_# sudo docker ps //查看数据库容器ID
kali_# sudo docker exec -it 0c79e2934l0f bash //进入容器内部
root@0c79e2934l0f:/# mysql --user=root --password //进入数据库
root@0c79e2934l0f:/# ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'root';
然后需要在数据库内新建一个库(以“code6”为例):
root@0c79e2934l0f:/# create database code6;
root@0c79e2934l0f:/# show databases;
root@0c79e2934l0f:/# exit
kali_# mysql -h 172.17.0.2 -u root -p //再次尝试使用密码登录数据库容器,保证正常后退出
启动。
启动容器
宿主机映射端口 666 与 MySQL 连接参数请根据情况修改,容器启动将自动连接 MySQL 并导入数据表
kali_# sudo docker run -d \
-p 666:80 \
-e MYSQL_HOST=172.17.0.2 \
-e MYSQL_PORT=3306 \
-e MYSQL_DATABASE=code6 \
-e MYSQL_USERNAME=root \
-e MYSQL_PASSWORD=root \
--name code6-server code6
进入容器内部创建用户
kali_# sudo docker exec -it code6-server /bin/bash
root@033fe7l34l0f:/# php artisan code6:user-add <邮箱> <密码>
(例如:php artisan code6:user-add a@a.com.cn 123465)
root@033fe7l34l0f:/# php artisan code6:user-list //查看用户
完成后,通过 http://<宿主机 IP>:666 访问系统,使用注册的账户进行登录。
配置使用
监控系统的配置使用全部时图形化界面,操作简单方便。
添加Github令牌
首先需要在Github上生成个人账户令牌。登录GitHub,在个人中心Settings -> Developer settings -> Personal access tokens -> Generate new token,内容选项无需勾选生成令牌。
注:每个令牌每分钟请求上限30次,每分钟更新。
新添加令牌需待同步完成,状态显示“正常”。
配置监控任务
在配置中心->任务配置,首先查看关键字说明。
新增监控任务,点击新增,配置扫描关键字(支持批量添加)以及频率。
扫描结果存储
扫描结果存储入库目前支持以下选项:
1.记录文件的每个版本:即文件每次提交(包含关键字)会产生一条新的未审记录
2.一个文件只记录一次
3.一个仓库只记录一次
如果仅仅关注项目维度可选择“一个仓库只记录一次”即可,这样会大大减少需要审核的记录数目。
后台计划任务自动扫描,然后转移到扫描结果页面查看。
扫描结果操作
在扫描结果处,点击用户名、仓库名、文件路径,均可以直接新窗口打开,或在“更多”选择查看代码快照,查看代码仓库内容。
告警通知
告警通知支持多种方式,以邮件为例:
在通知配置->邮件,添加接收邮件,直接换行添加即可。
注意:
端口:SSL加密使用465,非加密使用25
密码:转发邮箱开启SMTP/POP3/IMAP之后的授权码(非邮箱密码)
接收邮箱:一行一个(不能使用QQ邮箱,会被垃圾邮件阻拦)
维护升级
直接拉取代码生成镜像。
在/code6/目录下
kali_#git pull
kali_#sudo docker build -t CLM_v2 .
kali_#sudo docker inspect code6-mysql |grep IPAddress (获取数据库容器的IP地址)
kali_#sudo docker run -d \
-p 666:80 \
-e MYSQL_HOST=172.17.0.2 \
-e MYSQL_PORT=3306 \
-e MYSQL_DATABASE=code6 \
-e MYSQL_USERNAME=root \
-e MYSQL_PASSWORD=root \
--name code6_server_v2 CLM_v2
优劣分析
优点:
此开源项目维护更新频繁
告警方式多样化
容器部署,升级便捷
二次开发简单
缺点:
暂无对Gitee(码云)和其他平台监控