vlambda博客
学习文章列表

近实时(15分钟内)监控GitHub敏感信息泄露,并发送告警通知

GitHub作为开源代码平台,给程序员提供了交流学习的地方,提供了很多便利,但如果使用不当,比如将包含了账号密码、密钥等配置文件的代码上传了,导致攻击者能发现并进一步利用这些泄露的信息进行攻击测试。而本篇文章将介绍一款实用性较强的GitHub敏感信息收集利器——GSIL。

GSIL全称 GitHub Sensitive Information Leakage

GitHub敏感信息泄露监控

近实时(15分钟内)监控GitHub敏感信息泄露,并发送告警通知。

功能:

1、根据rules.gsil规则匹配GitHub内容 2、通过邮件告警 3、设置计划任务,定期扫描

GSIL项目主页:https://github.com/FeeiCN/GSIL

安装

仅在Python3下验证过

$ git clone https://github.com/FeeiCN/gsil.git
$ cd gsil/
$ pip install -r requirements.txt

配置

gsil/config.gsil(重命名自config.gsil.example)

告警邮箱和Github配置

[mail]
host : smtp.exmail.qq.com
# SMTP端口(非SSL端口,但会使用TLS加密)
port : 25
# 多个发件人使用逗号(,)分隔
mails : [email protected]
from : GSIL
password : your_password
# 多个收件人使用逗号(,)分隔
to : [email protected]

[github]
# 扫描到的漏洞仓库是否立刻Clone到本地(~/.gsil/codes/)
# 此选项用作监控其它厂商,避免因为仓库所有者发现后被删除
clonefalse

# GitHub Token用来调用相关API,多个Token使用逗号(,)分隔
# https://github.com/settings/tokens
tokens : your_token

mail设置部分

查看qq邮箱smtp服务器,如下:

修改host为smtp.qq.com,port为465。

mails填写自己QQ邮箱,注意,此处password并非填写QQ邮箱密码,需要填写QQ邮箱授权码,[授权码获取流程]

https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

先进入设置-》帐户页面找到入口,按照以下流程操作。

1、点击“开启”

近实时(15分钟内)监控GitHub敏感信息泄露,并发送告警通知

2、验证密保

近实时(15分钟内)监控GitHub敏感信息泄露,并发送告警通知

3、获取授权码

近实时(15分钟内)监控GitHub敏感信息泄露,并发送告警通知

获取授权码后填入password中。

最后需要在“to : [email protected]”下一行添加“cc :[email protected]”抄送邮箱,不然后面运行会报错。

GitHub设置部分

登录GitHub账号,设置tokens的页面说明文档已经给出:https://github.com/settings/tokens

点击Generate new token,出现如下页面:

填写token的描述,本人只勾选了repo下的public_repo。保存后出现如下信息:

注意保存下token,token只显示一次,后续再登录无法重新获取。填入tokens中。配置结束。

扫描规则

gsil/rules.gsil

重命名自:rules.gsil.example

规则一般选用内网独立的特征,比如蘑菇街的外网是mogujie.com,蘑菇街的内网是mogujie.org,则可以将mogujie.org作为一条规则。

其它还有类似代码头部特征、外部邮箱特征等

字段 意义 选填 默认 描述
keyword 关键词 必填 - 多个关键词可以用空格,比如‘账号 密码’;某些关键字出现的结果非常多,所以需要精确搜索时可以用双引号括起来,比如‘”ele.me“’;
ext 指定文件后缀 可选 全部后缀 多个后缀可以使用英文半角逗号(,)分隔,比如java,php,python
mode 匹配模式 可选 正常匹配(normal-match) 正常匹配(normal-match):匹配包含keyword的行,并记录该行附近行 / 仅匹配(only-match):仅匹配包含keyword行 / 全部匹配(full-match)(不推荐使用):搜出来的整个问题都算作结果
{
    # 一级分类,一般使用公司名,用作开启扫描的第一个参数(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": {}
        },
        "meilishuo": {
            "meilishuo.org": {},
            "meilishuo.io": {}
        }
    }
}

用法

启动测试

$ python gsil.py test

测试token有效性

$ python gsil.py --verify-tokens
$ crontab -e

漏洞报告,此项任务发现漏洞后会立刻发送漏洞报告 每个小时运行一次,GitHub API接口调用频率限制可以根据token数量、规则数量来调整crontab频率实现,若觉得麻烦可简单配置多个token来实现。

crontab执行时间决定了报告的发送时效性,间隔越短报告越快但频率限制越容易触发 建议配置5个token+20条规则,每15分钟运行一次(可以配置更短,根据各自需求确定)

*/15 * * * * /usr/bin/python /var/app/gsil/gsil.py test > /tmp/gsil

统计报告,发送一天的扫描进展,包括运行次数、成功次数、失败次数、发现漏洞数、各域名状况、异常等等

每个小时运行一次

0 * * * * /usr/bin/python /var/app/gsil/gsil.py test > /tmp/gsil

每天晚上11点发送统计报告

0 23 * * * /usr/bin/python /var/app/gsil/gsil.py --report

扫描报告过一次的将不会重复报告,缓存记录在~/.gsil/目录

近期技术热文

1、
2、
3、
4、