背景
目前很多项目的成员都会把在做的项目上传到gihub上面,但很多客户会通过关键字扫描,扫描到项目涉漏的风险。所以要求我们公司先自查。落实把控风险。
原理
登录配置:采用token(https://github.com/settings/tokens),使用PyGithub库。
进行API调用(http://pygithub.github.io/PyGithub/v1/introduction.html)。
搜索范围:会进行全网搜索,默认搜索前200个项目,最大5000(github限制)。
过程:通过API(/search/code)搜索规则文件rules.gsil中提交的关键字,然后分析得到的json结果,默认展示前30个相关项目。
一、环境准备
1. 安装python3+
可参考:
https://blog.youkuaiyun.com/weixin_40844416/article/details/80889165。
2. 拉取项目
git clone https://github.com/FeeiCN/gsil.git。
3. 切换目录
命令cd gsil/
4. 安装依赖
pip install -r requirements.txt。如果出现类似这种问题
只要执行:python -m pip install --upgrade pip 语句即可。
gsil/config.gsil(重命名自config.gsil.example): 告警邮箱和Github配置
[mail]
host : smtp.exmail.qq.com
# SMTP端口(非SSL端口,但会使用TLS加密)
port : 25
# 多个发件人使用逗号(,)分隔
mails : gsil@feei.cn
from : GSIL
password : your_password
# 多个收件人使用逗号(,)分隔
to : feei@feei.cn
[github]
# 扫描到的漏洞仓库是否立刻Clone到本地(~/.gsil/codes/)
# 此选项用作监控其它厂商,避免因为仓库所有者发现后被删除
clone: false
# GitHub Token用来调用相关API,多个Token使用逗号(,)分隔
# https://github.com/settings/tokens
tokens : your_token
1.1 修改smtp.exmail.qq.com
将smtp.exmail.qq.com 改为:smtp.qq.com;
1.2 申请GitHub Token
需要申请GitHub Token用来调用相关API,多个Token使用逗号(,)分。地址为 https://github.com/settings/tokens。
1.3 设置password
采用QQ邮箱作为发送邮箱时,password 不是你的登录密码而是你的QQ邮箱SMTP授权码。开启流程如下:
打开QQ邮箱-》设置
点击账户找到POP3/SMTP服务 然后开启
通过发送短信获取授权码每次需要1毛钱,可长期使用自己保管好。
2.gsil/rules.gsil 配置解析
gsil/rules.gsil(重命名自rules.gsil.example): 扫描规则:
规则一般选用内网独立的特征,比如蘑菇街的外网是mogujie.com,蘑菇街的内网是mogujie.org,则可以将mogujie.org作为一条规则。其它还有类似代码头部特征、外部邮箱特征等。总之是选一个可以很好辨别项目的关键词作为特征
{
# 一级分类,一般使用公司名,用作开启扫描的第一个参数(python gsil.py test)
"test": {
# 二级分类,一般使用产品线
"mogujie": {
# 关键词
"\"mogujie.org\"": {
# mode/ext默认可不填
"mode": "normal-match",
"ext": "php,java,python,go,js,properties"
},
# 其它关键词
"copyright meili inc": {},
# 其它关键词
"yewu1.db.mogujie.host": {},
# 其它关键词
"mail.mogujie.com": {}
}
}
}
2.1 关键字中文问题
关键字最好不要用中文去匹配,中文匹配会出现乱码。如果一定要用中文则可以更改代码config.py文件145行将读取文件的代码改成with open(rules_path,'rb') 原理就是rb方式是按字节码方式读取文件,则不会引发乱码问题。
2.2 项目搜索范围
在GILS中默认搜索的项目大小为200,即出现匹配关键字的200个项目,最大可设置为5000。如果需要修改默认配置需要找到gsil/engine.py文件中修改。
三、程序调用
1. 启动测试
$ python gsil.py test
2. 测试token有效性
$ python gsil.py --verify-tokens
扫描报告过一次的将不会重复报告,缓存记录在~/.gsil/目录
3.调用频率
方法调用不可太频繁,如果调用过于频繁可能会触发GitHub警告。最好每次间隔不低于15分钟。也可以多申请几个token就可以交替使用了。最后如果觉得自己手动执行过于麻烦也可以自己写个定时脚本。
4.多项目时解决方案
当匹配的关键字出现的总数大于可扫描的总数时,可多次调用方法执行扫描,因为已经扫描过的文件是不会再扫描的(最好间隔时间超过15分钟)否则会出现文件已经扫描过了不再扫描
5.结果解析
已经扫描的文件并不会在关键词总数中清除,所以有时候需要调用多少次方法需要自己计算下,或者直到无论怎么调用出现 Processed, skip!时说明所有文件已经扫描完成。
6.扫描范围
此工具会进行全网搜索,默认搜索前200个项目,最大5000(github限制)默认只扫描master分支,暂不支持扫描其他分支。
四、参考文献
1、https://www.freebuf.com/articles/es/187669.html
2、https://github.com/FeeiCN/GSIL