Github敏感信息收集工具Gitrob介绍

开发人员一般都愿意分享代码,并且很多人都愿意通过在GitHub上开源的形式分享。许多公司也会将GitHub作为一个便利所,通过创建GitHub组织结构让员工加入的方式存储私人及公开代码库。

有时员工可能会发布一些不宜公开的内容,包括可能包含敏感信息的内容或者可能导致系统被攻陷的内容。这种事情可能是不小心导致的或者员工并不了解这些内容属于敏感信息。

Gitrob是一种命令行工具,可帮助组织机构及安全专业人员发现此类敏感信息。该工具可对所有的公共组织及成员库进行遍历,然后将文件内容与许多文件格式进行比对,而这些文件通常会包含敏感信息及危险信息。

Gitrob如何工作?

在GitHub库中寻找敏感信息并非新事物,大家已经知道通过GitHub的搜索功能寻找诸如私钥及证书之类的信息,然而,Gitrob让针对某个特殊组织机构的搜索变得更为简单。

Gitrob做的第一件事是收集关于组织机构本身的所有公共库。之后收集关于组织机构成员及他们的公开库,这样就会编译出可能与组织结构相关的库列表。

t0131fc3345596dfab5.png

(Gitrob从组织机构成员中收集库)

当库列表编译完成后,它会收集每个库中的文件名称并且通过一系列标志文件的观察员进行运行,看它们是否与已知敏感文件格式相匹配。这一步可能会需要花费一点时间,如果这个组织机构规模大或者成员有很多公共库。

t0129648bd7d82cfcd1.png

(Gitrob筛选出所收集的库并标记出有趣的文件)

所有的成员、库以及文件都会被存储至一个PostgreSQL数据库中。当所有东西都通过筛选后,将会本地开启机器上的Sinatra web服务器,作为一个简单的web应用程序展现出所收集的数据以供分析。

t01013d67ad42148942.png

(所有库中的有趣文件都会展现在一个列表中以便分析。位于右上角的快速过滤器可用于查找特殊的文件。)

t0154a16529063a1cef.png

(点击一个文件将会显示出内容,且句法会高亮显示。同时也会显示出文件被标记的原因)

t011d1b9706e6433c21.png

(组织机构成员可以格布局形式查看。非常容易识别出拥有有趣文件的成员。)

t01ef68003bc41d9b92.png

(点击其中一名成员会显示出他们的信息及公开库。而带有结果的库会在桔色背景中高亮显示。)

t015b6b868b3991f2f7.png

(所有收集的库都可在表格中查看,其中包含他们的描述以及网站URL。带有结果的库会以桔色背景高亮显示。)

t01b2eb7b65f08f3f8d.png

(所有位于特定库中的文件都可被查看。右上角的快速过滤器可用于查找特定文件。)

一些发现

在开发Gitrob的过程中,我在属于多家不同规模公司的组织机构中进行了测试,对来自现实生活的数据进行了使用,同时在结果发布之前会通知给公司。

这个工具发现了一些有意思的事情,范围囊括低级信息、糟糕信息、直到公司销毁的信息。如下是几个例子。

备注

我对截屏中的敏感信息以及可识别信息进行了摘选;让别人尴尬或者暴露别人信息之事皆非我兴趣所在。再重申一次,所有的这些结果均已上报。

t01fb0f62644aeb6c5a.png

(这是在一个.bash_profile文件中发现的。员工想得很周到将密码隐了,但依然可从他的命令别命中勾勒出大量的基础架构。同时它告知攻击者如果对这个员工实施钓鱼将会获得对许多数据库的根访问权限。)

t012a983573e74dc298.png

(这是在一个.bash_profile文件中发现的。这个命令别名显示公司工具中存在一个秘密的<em> black site </em>域名在进行每日操作,例如分析、矩阵及持续整合。这会增加攻击几率。)

t01649340e380da7156.png

(命令历史文件会包含许多敏感信息,例如密码、API密钥以及主机名称。)

t01e1f74ce56ddd9ecc.png

(一个开发人员将一个Wordpress网站进行了开源,包括一个完整的数据库其中含有他用户账户的密码哈希。这个密码可能也适用于其他地方?)

t01627f76e2768db681.png

(一个聊天机器人的.env文件中包含几个凭证信息。除了一个攻击者能够对Campfire聊天进行监控、从数据商店中盗取信息外,他们还可以通过Nest的凭证信息控制某处的温度。)

t019739ddc6b83992ec.png

(一家公司将它们的文档网站即一个简单的Ruby On Rails应用程序进行了开源。他们忘记将应用程序的秘密标记移除,这个标记可能会被利用以达到远程代码执行的目的。)

t015601af3c83e54e89.png

(一名开发人员登记了他的KeePass密码数据库,其中包含174条记录。虽然被严格加密,但主密码依然可被暴力破解。在这种情况下,当然有人有兴趣对这个任务添加很多的运算容量。)

t01104b68440cce2e3b.png

(在一个.zshrc文件中发现了亚马逊EC2凭证。根据特权级别,它可能导致基础架构被完全控制。)

t01a3c33b88f392d707.png

(一名员工登陆到一个亚马逊EC2密钥中,这可能会导致公司的基础架构被完全控制。)

t016e539c802c89d5e3.png

(上个截屏中的员工同时登陆到他的私人SSH密钥,这可能会导致公司的SSH服务器被访问。同时可能会被用来克隆私有的组织机构库。)

安装并设置Gitrob

Gitrob以Ruby编写并且最低要求1.9.3的版本及以上版本。如果你运行的是更早的版本,可通过RVM很容易地安装新版本。如果你在Kali上安装Gitrob,你差不多已经准备好了,只需通过gem安装包就可对Bundler进行更新,并且安装一个PostgreSQL而apt-get会在终端安装libpq-dev。

Gitrob是一个Ruby gem,因此安装是一个简单的终端gem安装gitrob。同时它会自动安装所有的code dependencies。

PostgreSQL数据库对于Gitrob存储数据来说也是必须的。安装PostgreSQL非常简单;可从这里获知Mac OS X以及基于Linux的Ubuntu/Debian安装向导信息。如果你要在Kali上安装Gitrob,你已经安装了PostgreSQL,然而你需要在终端通过 service postgresql start启动服务器。

当安装好PostgreSQL时,需要为Gitrob创建一个用户及数据库。可在终端输入以下命令完成:

t01881c64f34acbd18f.png

最后我们需要的是一个GitHub访问token,以与他们的API进行会话。最便捷的方式是创建一个个人访问token。如果你打算单独使用Gitrob或者在一个非常大的组织机构进行,可能需要调低所使用的threads,同时可能需要配置Gitrob以使用你或同事的访问token,以避免受到速率限制。

当一切准备就绪时,就可运行gitrob了——进行配置并且你会看到一个配置向导要求你提供数据库连接详情以及GitHub访问boken。所有的这些配置都能够通过再次运行相同的命令进行改变。配置会被保存在~/.gitrobrc-中,没错,Gitrob也会对这个文件进行查询,所以要当心。

t01e9ab08a85e63b122.png

(使用安装向导设置Gitrob。)

当所有一切都安装好之后,你可以开始通过在终端运行 gitrob -o <orgname>来分析组织机构了。可用通过gitrob—help来查看其他选项。

我为什么要创建Gitrob

我在SoundCloud安全团队工作,目前的任务之一是创建一个系统能够持续盯着我们的GitHub组织机构以查找多个可能会带来安全风险的东西,包括在库中查找可能的敏感文件。在开发过程中,我觉得将系统的部分东西拿出来作为一个工具进行开源是一件有趣的事儿,这个工具既可用来防御也可用来攻击。

如果你在公司负责使用GitHub托管代码,Gitrob可被用来对你的组织结构进行定期检查,看是否在库中存在敏感文件。

如果你是攻击方,就像一个专业的渗透测试人员那样,Gitrob可被用于初始的信息收集阶段来查找任何东西,它可为你提供一个立足点或者增加目标的攻击面。Gitrob同时也可提供给你用户名、姓名、邮件地址以及内部系统的名称,这些信息可用于钓鱼攻击以及社会工程攻击。如果幸运的话,Gitrob甚至还可以提供给你一份完整的pwnage而无需向目标系统发送任何一个恶意数据包。

帮助我们

Gitrob应该算是测试版,并且可能存在许多bug。欢迎提供bug报告以及改进建议!

另外一种帮忙方式是为敏感文件贡献更多新模式。如果你知道一些还未识别的敏感文件,可通过GitHub的上拉请求进行提交。我对敏感web框架文件以及配置文件尤其感兴趣。可通过patterns.json文件查看哪些文件已被找到。

玩得愉快并且要担负责任!

[via@bobao360]