AI智能摘要
你是否担心公司敏感数据正悄悄暴露在GitLab上?一款名为GitLab Watchman的开源工具,正默默帮安全研究员扫描代码、提交、Wiki等各类内容,揪出外泄的API密钥、密码、私钥等高危信息。它支持自定义规则、定时扫描,甚至能精准识别GCP、AWS、Azure等云平台凭据。想知道它是如何通过API深度挖掘企业资产漏洞的?这篇实战解析将带你揭开代码仓库中“看不见的泄露”背后逻辑,助你快速构建主动监控能力。
— AI 生成的文章内容摘要

关于GitLab Watchman
GitLab Watchman这款应用程序可以帮助广大研究人员使用GitLab API来审查GitLab内部暴露的敏感数据和凭据。
功能介绍
GitLab Watchman可以搜索GitLab中的内部共享项目,并查看下列内容:
- 代码;
- 提交内容;
- WiKi页面;
- 问题;
- 合并请求;
- 项目里程碑;
GitLab Watchman支持搜索下列内容:
- GCP密钥和服务帐户文件;
- AWS密钥;
- Azure密钥和服务帐户文件;
- Google API密钥;
- Slack API令牌&webhooks;
- 私钥(SSH、PGP、任何其他杂项私钥);
- 公开的令牌(Bearer令牌、访问令牌和client_secret等);
- S3配置文件;
- Heroku、PayPal等服务的令牌;
- 明文密码;
- ...
基于事件的搜索
我们还可以运行GitLab Watchman并搜索下列时间间隔返回的数据结果:
- 24小时;
- 7天;
- 30天;
- 所有时间;
这也就意味着,在一次深度扫描之后,我们可以安排GitLab Watchman定期运行,并且只返回所选时间段的结果。
规则
GitLab Watchman使用自定义YAML规则来检测GitLab中的匹配数据项。
规则格式如下所示:
--- filename: enabled: #[true|false] meta: name: author: date: description: #what the search should find# severity: #rating out of 100# scope: #what to search, any combination of the below# - blobs - commits - milestones - wiki_blobs - issues - merge_requests test_cases: match_cases: - #test case that should match the regex# fail_cases: - #test case that should not match the regex# strings: - #search query to use in GitLab# pattern: #Regex pattern to filter out false positives#
项目中引入了Python测试来确保规则格式的正确性,项目目录中的tests目录下还包含正则匹配模式。关于检测规则的更多内容,请查看项目下的docs/rules.md文件。
.conf文件
配置选项可以在watchman.conf文件中进行配置,该文件必须存储在项目的根目录下。该文件必须遵循YAML格式:
gitlab_watchman: token: abc123 url: https://gitlab.example.com logging: file_logging: path: json_tcp: host: port:
GitLab Watchman将会在运行时查询该配置文件,并使用其中的配置信息。除此之外,本项目还提供了一份配置文件样本,路径为docs/example.conf。
工具要求
GitLab版本
GitLab Watchman使用了v4 API,支持GitLab企业版:
- GitLab.com
- 13.0及其以上版本
- 12.0-12.10版本
工具安装
广大研究人员可以使用下列命令安装GitLab Watchman:
pip install gitlab-watchman
工具使用
GitLab Watchman将以全局命令的形式进行安装,可以通过下列方式使用:
usage: gitlab-watchman [-h] --timeframe {d,w,m,a} --output {file,stdout,stream} [--version] [--all] [--blobs] [--commits] [--wiki-blobs] [--issues] [--merge-requests] [--milestones] [--comments] Monitoring GitLab for sensitive data shared publicly optional arguments: -h, --help show this help message and exit --version show program's version number and exit --all Find everything --blobs Search code blobs --commits Search commits --wiki-blobs Search wiki blobs --issues Search issues --merge-requests Search merge requests --milestones Search milestones --comments Search comments required arguments: --timeframe {d,w,m,a} How far back to search: d = 24 hours w = 7 days, m = 30 days, a = all time --output {file,stdout,stream} Where to send results
我们可以使用GitLab Watchman来查询所有支持的数据项,并将结果输出至默认Stdout:
gitlab-watchman --timeframe a --all
或者,我们也可以将参数一起提交给搜索命令:
gitlab-watchman --timeframe m --commits --milestones --output stream
项目地址
GitLab Watchman:【GitHub传送门】

日本 1F
这个工具听着挺猛啊,我们公司gitlab该查查了
山东省 B1
@ 大雄 要是能和现有CI流水线整合就更完美了
北京市 2F
求问这玩意在自建gitlab上能跑吗?
广东省广州市 B1
@ 青冥 自建GitLab跑通了,12.8没问题,token记得用只读权限
陕西省咸阳市 3F
私钥和密码都扫得到?有点吓人了 👀
湖北省武汉市 4F
我们上周刚用它捞出一堆aws密钥,真是绝了
辽宁省抚顺市 B1
@ 寒夜孤鸿 别忘了立马 rotate 那些密钥
山西省 5F
感觉一般,我们用内部脚本也能实现类似功能
山东省泰安市 6F
配置文件里token直接写明文,这不也挺危险?
福建省泉州市 B1
@ 墨影朦胧 token写明文是有点悬,建议加个vault集成
北京市 7F
之前自己写过类似的扫描器,正则规则最难搞
山东省枣庄市 8F
gitlab版本要求有点高,老版本用户哭死
印度尼西亚 B1
@ MeteorMystic token放配置文件里确实不太安全
安徽省滁州市 9F
这个yaml规则写起来是不是得经常维护?
江苏省淮安市 B1
@ 慌张的兔子 yaml规则确实得常改,业务一变就得跟着调
贵州省贵阳市 10F
规则还能测用例,这点倒是挺严谨的
日本 11F
这个工具对自建GitLab支持怎么样?
印度尼西亚 12F
规则维护起来确实麻烦,正则总得跟着业务改
北京市 13F
我们12.5版本能用不?
河北省石家庄市 14F
上周试了下,把测试环境的密钥全扫出来了🤯
湖北省天门市 15F
yaml配置看着还行,就是得自己写规则
韩国 16F
感觉比商业工具灵活点
韩国 17F
正则测试用例这个设计不错
江西省 B1
@ 虚无印 测试用例能跑通再上线,省得误报满天飞
北京市 18F
这种扫描会不会把正常文件误报啊?
韩国 B1
@ 夜枭挽歌 误报其实不多,关键看正则写得细不细
江苏省泰州市 19F
文档里example.conf例子再多点就好了
河南省驻马店市 B1
@ Sapphire Orchid 确实,更多示例能省不少调参时间
日本 20F
这工具扫出来一堆密钥真不是闹着玩的,赶紧自查
山东省聊城市 21F
刚在测试环境跑了一把,连半年前的slack webhook都翻出来了😅
上海市 B1
@ 火灵子 半年前的webhook都能挖出来,这工具真不是开玩笑的
日本 22F
我们12.8版本跑着没问题,12.5应该也行吧?
河南省郑州市 23F
误报还好吧,regex配仔细点基本可控
台湾省 24F
公司gitlab马上安排上,怕了怕了
陕西省 25F
看着比自己搓的脚本靠谱多了,准备换
湖北省武汉市 26F
能不能加个自动打码敏感信息的功能?
福建省南平市 27F
这工具确实省事儿
澳大利亚 28F
slack webhook都被挖出来,怕死 😱
上海市 29F
我们部门之前也跑过一次,结果把半年内的密码全给列出来了,真是吓人
湖北省咸宁市赤壁市 30F
这个watchman在自建的GitLab上需要额外授权吗?
韩国 31F
查了下,要13.0版才能用?
辽宁省 32F
这工具权限要求高不高啊
日本 B1
@ 蜜桃小乖乖 需要GitLab API访问权限
印度 33F
YAML规则里可以用变量,省得每次改路径
北京市 34F
其实误报率并不高,只要正则写得严谨,误报的情况可以控制在可接受范围,别因为怕误报就放弃使用。
印度 35F
配置文件里token明文存,感觉安全感直接被掏空了
浙江省宁波市 36F
定时跑脚本的活儿还挺实用
山东省济南市历下区 37F
我们12.3版本试了直接报错,看来真得12.5+才行
浙江省 38F
配置文件里token明文存确实有点膈应,能不能支持vault集成啊?
广东省珠海市 39F
刚扫完生产环境,手都在抖,赶紧改密钥去了😱
辽宁省大连市 40F
规则格式这块能自己加正则不?
宁夏银川市 B1
@ 暗夜吞噬者 规则文件里可以自定义pattern,自己加正则没问题
澳大利亚 41F
yaml规则维护是有点烦,但比手动grep强一百倍
河北省 42F
有人试过配合gitlab-ci自动跑吗?想加到流水线里
澳大利亚 43F
这玩意扫comments也太狠了,连临时贴的测试密码都翻出来了
日本 44F
免费版GitLab能用吗?
宁夏银川市 B1
@ 变奏曲 免费版也能用,就是API调用有次数限制。