GitHub作為開源代碼平臺,給程序員提供了交流學習的地方,提供了很多便利,但如果使用不當,比如將包含了賬號密碼、密鑰等配置文件的代碼上傳了,導致攻擊者能發現并進一步利用這些泄露的信息,就是一個典型的GitHub敏感信息泄露漏洞。

GSIL安裝

支持:Python3


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

GSIL配置

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

gsil/rules.gsil(重命名自rules.gsil.example): 掃描規則

規則一般選用內網獨立的特征,比如蘑菇街的外網是mogujie.com,蘑菇街的內網是mogujie.org,則可以將mogujie.org作為一條規則。

其它還有類似代碼頭部特征、外部郵箱特征等

字段意義選填默認描述keyword關鍵詞必填-多個關鍵詞可以用空格,比如‘賬號 密碼’;某些關鍵字出現的結果非常多,所以需要精確搜索時可以用雙引號括起來,比如‘”ele.me“’;ext指定文件后綴可選全部后綴多個后綴可以使用英文半角逗號(,)分隔,比如java,php,pythonmode匹配模式可選正常匹配(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": {}
        }
    }
}

GSIL用法

# 啟動測試
$ 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
# 統計報告,發送一天的掃描進展,包括運行次數、成功次數、失敗次數、發現漏洞數、各域名狀況、異常等等
# 每天晚上11點發送統計報告
0 23 * * * /usr/bin/python /var/app/gsil/gsil.py --report

掃描報告過一次的將不會重復報告,緩存記錄在~/.gsil/目錄