HT1001 系列是信安之路推出的黑客工具使用系列,结合使用场景来对安全工具进行测试总结,并通过实战的方式介绍各类开源工具的功能和价值,后续完整内容将发布在信安之路的知识星球和成长平台,部分内容会通过信安之路公众号分享。
Github 是使用最为广泛的代码共享平台,互联网是个开放的平台,从事互联网研发的人都有一个分享的情况,经常分享自己测试代码或者项目,往往由于有意无意的将带有企业敏感信息的代码上传至分享平台,导致企业敏感信息泄漏,严重时造成企业被入侵,无论是甲方的安全防御人员还是乙方的渗透测试人员,监控 GitHub 上泄漏的目标企业敏感信息都是非常重要的,本文就来介绍 GitHub 如何实现敏感信息监控。
Github 提供了代码搜索的功能,可以根据关键词来进行搜索,搜索方式包括网页端和 API,比如搜索泄漏的邮箱地址,搜索关键词 filename:config "API KEY" in:file extension:py shodan
:
对于 GIthub 监控来说,一方面是通过技术来实现搜索自动化,另一个重要因素在于关键词的设置,好的关键词能过滤掉大部分的误报,提升准确率。Github 搜索语法中,使用 filename:
指定文件名,extension:
指定文件扩展,使用 path:
指定文件路径。
GitPrey
GitPrey 是根据企业关键词进行项目检索以及相应敏感文件和敏感文件内容扫描的工具,其设计思路如下:
1、根据关键词在 GitHub 中进行全局代码内容和路径的搜索(in:file,path),将项目结果做项目信息去重整理得到所有关键词相关的项目,即疑似项目结果;
2、基于 PATTERN_DB 中的敏感文件名或敏感代码对所有疑似项目做文件名搜索(filename:)和代码搜索(in:file);
3、将匹配搜索到的结果按照项目整理输出; 由于无法做到精确匹配和精确识别,因此扫描结果或存在一定的漏报(比如项目中未出现关键词路径或内容)或误报(比如第三方项目引用关键词内容)情况,其中漏报的原因还包括 GitHub 的搜索限制:
4、默认只搜索主分支代码,多数情况下是 master 分支;
5、GitHub 最大只允许搜索 1000 条代码项,即 100 页代码;
6、代码搜索仅搜索不大于 384Kb 的文件;
此外,不同关键词搜索的疑似项目数量不同,少则数个,多则数十个甚至数百个,并会对搜索和扫描时间造成直接影响(另一影响因素是匹配的文件名关键词数量和内容关键词数量),项目和关键词越多,扫描时间越长。因此可以根据需要进行扫描深度的选择,这一维度由 GitHub 最近索引(Recently Indexed)排序的代码页决定,深度越深,检索的项目数量越多,反之亦然。深度选项和说明如下:
- Level 1:检索最近索引的前10页代码页;
- Level 2:检索最近索引的前20页代码页;
- Level 3:检索最近索引的前50页代码页;
- Level 4:检索最近索引的前70页代码页;
- Level 5:检索最近索引的前100页代码页;
深度选择与企业扫描周期性应该成正相关,深度选择小,则相应扫描的周期性也应当较小,如深度选择为 Level 1,则相应的扫描周期基于企业情况可定为每天或每周,深度选择为 Level 5,则相应的扫描周期可适当延长。例如,关键词“Google”最大(Level 5)可搜索两天前上传的项目代码,而关键词“repoog”搜索结果则不足 1 页。
技术实现
项目配置文件 Config.py 中需要配置使用者的 GitHub 用户名、密码:
1、未登录 GitHub 进行代码搜索会因为请求速度过快(约 10 页代码结果页)而返回 HTTP STATUE 429,即 Too Many Requests 的错误,因此需要登录后进行搜索;
2、在项目内关键词文件名和关键词内容扫描时未采用 API,原因有两点:一是搜索代码的 API 频率限制很大(认证后 30 次/分钟)无法满足快速搜索;二是某些项目关键词的搜索结果项超过 100 条,而 API 在设置 per_page 参数后至多支持展现 100 条结果项; 项目配置文件 Config.py 中需要配置 FILE_DB/INFO_DB/PASS_DB/PATH_DB 项,用途如下:
- 敏感文件搜索是基于配置项中的 PATH_DB 内容检索特定文件的泄漏;
- 敏感内容搜索是基于 PASS_DB 和 FILE_DB 进行检索,再根据 INFO_DB 和 PASS_DB 输出相关代码行;
程序使用
GitPrey v2.2 版本后去除了 ACCESS_TOKEN 的配置以及配置文件中的 SEARCH_LEVEL 和 KEYWORDS 配置项,改用命令行参数方式执行:
USAGE:
-l Set level for searching within 1~5, default level is 1.
-k Set key words for searching projects.
-h Show help information.
- -l:选填参数,用于设置代码搜索深度;
- -k:必填参数,用于设置搜索关键词,若关键词中包含空白字符,需用双引号将关键词括起来;
- -h:帮助信息。
文件配置
pattern 为搜索项文件配置目录,相关文件说明如下:
- path.db:敏感文件名或文件后缀,用于搜索文件名,如:htpasswd
- file.db:敏感内容关键词搜索的文件名称范围,内容搜索在该文件名称范围内进行,如:.env
- info.db:敏感内容关键词(由于 AND/OR/NOT 操作符在 GitHub 单次搜索中最多支持五个,故关键词会进行轮询),如:password
项目地址:
将项目下载回本地,使用之前,需要修改配置文件 config/Config.py
,添加自己 GitHub 的账户密码
经测试,无论输入任何参数都无结果输出,也许是因为未及时更新代码适配 Github 前端的变化吧,该项目的技术介绍还是很有学习价值的,基于原理自行适配,开发自动化代码监控工具,如果是收集目标企业的敏感数据,可以收工实现,效率更高。
总结
本文主要是针对 Github 代码泄漏技术的介绍,企业员工人数越多,越容易出现代码泄漏的问题,作为前期信息收集的技术是非常关键的,可以从代码中了解企业内部代码编写规范,甚至会出现内外网设备或者产品的认证信息,对于目标企业而言是一个非常好的了解方式。
「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」
(๑>ڡ<)☆谢谢老板~
使用微信扫描二维码完成支付
