GShark:监测你的 GitHub 敏感信息泄露

栏目: Go · 发布时间: 6年前

内容简介:近几年由于 Github 信息泄露导致的信息安全事件屡见不鲜,且规模越来越大。就前段时间华住集团旗下酒店开房记录疑似泄露,涉及近5亿个人信息。后面调查发现疑似是华住的程序员在 Github 上上传的 CMS 项目中包含了华住敏感的服务器及数据库信息,被黑客利用导致信息泄露(这次背锅的还是程序猿)。对于大型 IT 公司或者其他行业,这种事件发生的概率实在是太常见了,只不过看影响的范围。现在大家看到的,也仅仅只是传播出来的而已。企业没办法保证所有人都能够遵守规定不要将敏感信息上传到 Github,尤其是对于那

GShark:监测你的 GitHub 敏感信息泄露

近几年由于 Github 信息泄露导致的信息安全事件屡见不鲜,且规模越来越大。就前段时间华住集团旗下酒店开房记录疑似泄露,涉及近5亿个人信息。后面调查发现疑似是华住的 程序员 在 Github 上上传的 CMS 项目中包含了华住敏感的服务器及数据库信息,被黑客利用导致信息泄露(这次背锅的还是程序猿)。

起源

对于大型 IT 公司或者其他行业,这种事件发生的概率实在是太常见了,只不过看影响的范围。现在大家看到的,也仅仅只是传播出来的而已。企业没办法保证所有人都能够遵守规定不要将敏感信息上传到 Github,尤其是对于那种特别依赖于外包的甲方企业,而甲方的开发人员也是一无所知,这种事件发生也就是司空见惯了。

废话说了一大通(可能是最近安全大佬的文章看多了),终于要介绍一下我的这个项目,GShark。名字是不是很酷炫,我是希望能够像鲨鱼一样在 Github 中敏锐地捕获“猎物”。这个 工具 主要是基于 golang 实现,这也是第一次学习 golang 的项目,基于 go-macron Web 框架实现的一个系统。其实最初我是看到小米安全开源的 x-patrol 项目。网上这种扫描 Github 敏感信息的工具多如皮毛,我看过那种 star 数上千的项目,感觉实现方式也没有很好。因为说到底,大家都是通过 Github 提供的 API 结合相应的关键字来进行搜索的。但是,x-patrol 的这种实现方式我觉得是比较合理的,通过爬虫爬取信息,并对结果进行审核。所以,最初我是一个 x-patrol 的使用者。使用过程中,也遇到过一些问题,因为这个库似乎就是小米的某个固定的人维护的,文档写的不是特别清晰。中间我有提过 PR,但都被直接拒绝掉了。后来,我就想基于 x-patrol 来实现一套自己的系统,这也就是 GShark 的来由了。目前,这个项目与 x-patrol 已经有着很大的变化,比如移除了本地代码的检测,因为这个场景没有需求,其实我本身自己也实现了一个基于 lucene 的敏感信息检索工具。另外,将前端代码进行了梳理,并使用模板引擎来做模板的嵌套使用。基于 casbin实现基于角色的权限控制等等。

原理

讲完了起源,接着讲一讲这个系统的原理。基本上,这类工具都是首先会在 Github 申请相应的 token 来实现,接着通过相应的 API 来进行爬取。本项目主要是基于 Google 的 go-github。这个 API 使用起来还是比较方便的。通过这个 API 我们可实现在 Github 来进行搜索,其实这基本上等同于 Advanced Search。因为 API 提供的搜索能力肯定就是 Github 本身所具有的搜索能力。最基本的包括关键词,以及一些 owner 信息以及 star 数等等。

GShark:监测你的 GitHub 敏感信息泄露

另外一点就是 Github 的搜索是基于 elasticsearch 的,因此也是支持 lucene 语法的。GShark 的黑名单过滤其实就是通过这个规则来实现的。

通过爬虫将代码结果爬取到数据库中,那么我们就可以在 Web 界面进行代码的审核。因为其实很多包含关键字的代码并不一定就是你想要的,有很多种可能,爬虫项目,一些文件的随机乱码,博客等等。但是一般来说对于人工审核来说,一般这种代码仓库很容易就可以区分出,审核就是还快的。对于那种比较疑似的,可能需要进一步调查,可能就需要进一步获取信息,比如阅读代码信息,查看上传者信息等等。对于一条记录,一共有三种操作,确认为敏感信息,忽略这条记录,忽略包含这条记录的代码仓库的所有记录。

遇到过的问题

在做这个项目的时候,大大小小遇到过很多问题。这也是我第一次学习 golang,以前总是觉得 golang 的语法比较奇怪,但是学习一下感觉还是可以的。Golang 中的依赖是比较 头疼的一个问题,golang 中的依赖包一般都会安装在 GOPATH 中。另外对于一些 golang 依赖包的安装,通过 goget 来安装的话是无法安装的,比如 net/http ,由于某种特殊的原因,我们只能从 Github 上获取源代码,总将其放入 GOPATH 中。还有一个比较纠结的问题是,你应该如何在你的项目中引入自己的 package,一共有三种方式,以 models 模块为例,假如我希望在别的 package 中引入 models

  • 项目名引用:  gshark/models

  • 相对路径引用:  ../models

  • 全名引用:  github.com/neal1991/models

这三种引用方式我都有使用过,也在这3个里面切换了好几次,最终选择最后一个,这也是最标准的实现方式。第一种方式其实没啥大问题我觉得,只是我在使用 Travis 的时候,它无法识别。第二种方式可能没有第一种那样的问题,但是用起来比较麻烦,而且容易出错。第三种也是大多数 golang 项目使用的方式,这样别人也可以很方便地引入你的项目。

Gshark 实现了一套比较粗糙的权限管理,主要是基于 casbin 来实现的。GShark 使用的 go-macaron 可以支持使用中间件 authz 来实现权限管理,其实它的实现方式也是比较粗糙的,核心代码其实就是下面的一个函数:

可以看到必须要通过 BasicAuth 来进行认证的,从而获取用户的角色,来实现权限的控制。因为 GShark 没有使用 BasicAuth 来进行认证,所以角色的传递也是一个比较头疼的问题,其实还是使用标准的认证方式比较好,目前因为没有做到,只能通过 cookie 来进行传递,这种方式因此是不太可靠的。

项目部署

目前这个项目我部署在我腾讯云的小水管上面,运行没啥问题,因为本来这个应用就不会占用特别多的资源。只不过最近 Github 好像越来越严格,我有一段时间 VPS 访问 Github 一直不成功,而且要注意限制爬取的频率,防止触发 Github 滥用告警。项目部署之前就是项目的安装,其实主要就是依赖包的安装。得益于 golang 的跨平台性,因此这个应用是可以运行在各个平台的。 main.go 是启动文件:

Build 之后就会生成平台对应的可执行文件。项目的运行可以通过 CLI 来实现:

项目的运行的时候会初始化一些应用和规则配置,你需要将项目中的 app-template.ini 重命名成 app.ini:

其实里面主要就是服务以及数据库方面信息的配置。值得注意的一点是,如果你希望你的服务能够被外部访问,那么你应该将 HTTP_HOST 设置为 0.0.0.0。我使用的是 sqlite 3 数据库,感觉使用起来已经比较方便了,而且对于小型 VPS 来说也是比较合适的。对于 scan 运行的时间间隔我建议可以设置大一点,可以让这个服务一直运行,也可以让它一直跑着。但老实说,一般短时间内,获取的结果也是比较有限的。下面主要是管理界面的使用,使用起来也是比较简单。核心界面就是搜索结果的审核,以及一些其他信息的设置,最主要的是应该为程序提供 token,可以在 Github 中申请。

GShark:监测你的 GitHub 敏感信息泄露

总结和展望

其实这个项目从开始到现在也有大半年的时间,但因为一直都是我一个人维护和使用,所以也都是一直修修补补,在细节方面做更多的改善。虽然,目前这个项目还是不算特别成熟,但还是想把这个项目开源出来正式的维护,并且介绍给更多的开发者,并吸收更多的建议和意见。所以任何建议都是欢迎的,欢迎 issue 以及 PR。

当然了,对于这个项目也有一些更多的期许,以后可能有更多的坑需要填补:

  • 完善权限管理

  • 实现标准的用户认证,比如 OAuth2

  • 更准确地识别结果,或许可以结合机器学习,但目前还是没有思路

以上就是 GShark 的开发过程中的一点小小心得,如果觉得对你有帮助的话,可以 star 一下,https://github.com/neal1991/gshark

GShark:监测你的 GitHub 敏感信息泄露

欢迎扫描二维码关注公众号,阅读原文获取连接版图文。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析基础

算法设计与分析基础

Anany levitin / 潘彦 / 清华大学出版社 / 2007-1-1 / 49.00元

作者基于丰富的教学经验,开发了一套对算法进行分类的新方法。这套方法站在通用问题求解策略的高度,能对现有的大多数算法都能进行准确分类,从而使本书的读者能够沿着一条清晰的、一致的、连贯的思路来探索算法设计与分析这一迷人领域。本书作为第2版,相对第1版增加了新的习题,还增加了“迭代改进”一章,使得原来的分类方法更加完善。 本书十分适合作为算法设计和分析的基础教材,也适合任何有兴趣探究算法奥秘的读者......一起来看看 《算法设计与分析基础》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具