AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

我在 GitHub 找 Bug:如何轻松赚到 10000 美元

  • 2020-05-12
  • 本文字数:3578 字

    阅读完需:约 12 分钟

我在GitHub找Bug:如何轻松赚到10000美元

Bug 赏金猎人,不用流血牺牲,只需轻敲键盘就可完成赏金任务。这些人通过发现企业的安全漏洞以获得赏金,企业也非常欢迎这样的赏金猎人“找茬”。今天这篇文章主要送给 Bug 赏金猎人以及企业信息安全团队,我们将探讨用户意外发布至公开 GitHub 库内的常见敏感信息(即“秘密”)类型,以及查找这些秘密的启发性方法。


每一天,都有 API 密钥、密码以及客户数据被意外发布到 GitHub 之上。恶意人士当然可以利用这些密钥登录服务器、窃取个人信息,或者给用户带来数额高到不可思议的 AWS 服务成本。GitHub 泄露事故可能令企业蒙受数百甚至数千万美元的损失,而从 GitHub 上收集开源情报也已经成为每一位安全研究者都不能错过的重要信息来源。来自北卡罗来纳大学的研究人员,甚至专门就此撰写了学术论文。


今天这篇文章主要送给 Bug 赏金猎人以及企业信息安全团队,我们将探讨用户意外发布至公开 GitHub 库内的常见敏感信息(即“秘密”)类型,以及查找这些秘密的启发性方法。当然,本文中提到的技术手段也适用于 GitHub Gist 片段。


就在去年,我凭借着这些技巧从 HackerOne(一个对接白帽黑客和企业的平台)上的几个 Bug 赏金计划中轻松拿到了接近 1 万美元的奖励。我还发布了 GitHound——这是一款开源 dork,能够自动在 GitHub 上查找不慎外泄的密钥。GitHound 所针对的可不仅仅是单一用户或组织:它能够遍历整个 GitHub,使用代码搜索查询作为项目库的入口点中,而后利用上下文、正则表达式及其他一些巧妙的“歪脑筋”快速批量查找秘密。

GitHub 代码搜索

GitHub 提供丰富的代码搜索功能,可用于扫描公开 GitHub 库(这里忽略 fork 及非默认分支等因素)。查询方式可以简单如 uberinternal.com,也可以包含类似 "Authorization: Bearer"这样的多单词字符串。搜索操作甚至可以指向特定文件(filename: vim_settings.xml)或者特定语言(language:SQL)。另外,搜索也能包含某些布尔限定符,例如 NOT 与 >。


在了解到 GitHub 的代码搜索规则之后,我们就可以设计出搜索 dork,借此实现对敏感信息的查询。大家当然可以从网上寻找现成的程序,但最好的工具永远出自我们自己的双手。


举例来说, filename: vim_settings.xml 指向的就是 IntelliJ 设置文件。有趣的是, vim_settings.xml 文件当中还包含最近刚刚复制-粘贴完成的 Base64 编码字符串。凭借着这一发现,我从 Bug 赏金计划中获得了 2400 美元,具体上报形式为:vim_settings.xml 中会暴露 SaaS API 密钥与客户信息。



vim_settings.xml 中只包含最近复制-粘贴的字符串,但我们可以利用代码库的提交历史记录来查找完整的复制-粘贴历史记录。只需要克隆代码库并运行这份仅为 14 行的脚本,用户的活动就将完全呈现在你的面前。


顺带一提:利用这款 GitHub 提交搜索 dork,我们可以快速扫描曾对 vim_settings.xml 进行编辑的全部 50 万条提交。



搜索与 vim_settings.xml 相关的提交内容

写给各位 Bug 赏金猎人的心得

GitHub dork 只能实现较为宽泛的敏感信息搜索,但如果我们想要查找关于特定公司的内容,又该怎么操作?GitHub 上承载着数百万个代码库,以及与之相关的大量文件,因此我们需要一点启发式的方法来缩小搜索空间。


我发现,最好的办法就是先从目标公司基础架构中的域或子域下手。搜索 company.com 可能帮助不大,因为很多公司发布的开源项目都经过了审核,其中不太可能包含秘密。反而是使用频率较低的域和子域中没准存在着有趣的内容。例如 jira.company.com 等特定主机,以及更为通用的第二级乃至层级更低的域。另外,从模式入手也要比从单个域入手更有针对性: corp.somecompany.com、 somecompany.net 或者 companycorp.com 等往往更有可能出现在员工的个人资料文件当中。


常见的开源情报与域侦查工具包括:


  • Subbrute - 用于蛮力破解子域的 Python dork。

  • ThreatCrowd - 通过多种 OSINT 技术,查找与给定域相关联的其他域。

  • Censys.io - 给定一个域,查找使用该域的 SSL 证书。


在找到目标主机或者模式之后,接下来就是在 GitHub 上进行实际搜索了(在使用自动化之前,我总会先手动搜索一次)。在这个阶段,我希望回答以下几个问题:


  • 出现了多少条结果? 如果页面超过 100 页,那我可能需要寻找更好的查询切入点(GitHub 将代码搜索结果限制在 100 页)。

  • 出现了什么样的结果? 如果这些结果主要是开源代码项目以及使用公共 API 的人员(存在明显的倾向性),那么我可能需要优化搜索以排除这些无用项。

  • 如果更改语言,会产生怎样的影响? language:Shell 与 language:SQL 可能会带来有趣的结果。

  • 这些结果中是否包含其他域或者主机? 前几页的结果中通常包含对另一个域的引用(例如,搜索 jira.uber.com 时可能会显示另一个域的存在,例如 uberinternal.com)。


我在这一步上投入了不少时间,最重要的是,搜索空间的定义必须恰当而且准确。只有查询方式正确,自动及手动搜索的效率才能更高,得出的结果也才会更有价值。


在根据上述标准找到有趣的结果之后,接下来就是运行带有–dig-files 及 --dig-commits 参数的 GitHound,旨在查看整个代码库及其历史记录。这步操作将显示出单凭搜索所无法找到的有趣文件,例如.zip 或者.xlsx 文件。更重要的是,由于自动化 dork 往往会错过某些客户信息、敏感代码与用户名/密码组合,因此我常常会手动查看结果。这一般能为我带来更多子域信息或者其他有趣的模式,并帮助我确定下一步搜索查询的规划思路。最重要的,开源情报收集是一种递归过程,请千万勿急勿躁。


这个过程几乎从来不会让人失望。最终泄露内容大多属于以下类型之一(按影响程度由高到低排序):


  • SaaS API 密钥 - 企业很少会对 API 施加 IP 限制。AWS、Slack、谷歌以及其他 API 密钥可以说是最直接的财富,我们一般可以从配置文件、bash 历史记录文件以及脚本当中找到。

  • 服务器/数据库凭证 - 这些凭证通常位于防火墙之后,因此影响较小。我们一般可以从配置文件、bash 历史记录文件以及脚本中找到。

  • 客户/员工信息 - 这些信息往往隐藏在 XLSX、CSV 以及 XML 文件当中,具体内容可能涵盖往来电子邮件、账单信息乃至员工绩效评估。

  • 数据科学脚本 - SQL 查询、R 脚本以及 Jupyter 项目等都有可能暴露敏感信息。这些库中也往往带有“测试数据”文件。

  • 主机名称/元数据 - 这也是最常见的结果类别。大多数企业认为它们不属于安全漏洞,但恶意人士确定可以利用这些信息完善后续搜索。

针对特定 API 提供程序的入侵流程

我们也可以针对特定的 API 提供程序及其端点创建专用 dork,并借此敲开那些自动检查用户 API 密钥的企业的大门。通过解析 API 密钥的上下文与语法,我们可以大大缩小搜索空间。


凭借着对于特定 API 提供程序的了解,我们可以从 API 调用中获得与 API 提供程序正则表达式相匹配的密钥,而后利用内部数据库或者 API 端点验证其有效性。



针对单一 API 提供程序进行秘密查找的工作流


例如,假定一家公司(HalCorp)为用户提供读取并写入其账户的 API。那么通过创建自己的 HalCorp 账户,我们会发现其 API 密钥格式为[a-f]{4}-[a-f]{4}-[a-f]{4}。



凭借这些信息,我们就可以为 HalCorp API 响应编写自己的 GitHub dork 了:



借助 GitHound 这类工具,我们可以使用正则表达式匹配来查找与目标 API 密钥正则表达式相匹配的字符串,并将其输出至文件当中:


echo "HALCorp-Key" | git-hound --dig-files --dig-commits --many-results --regex-file halcorp-api-keys.txt --results-only > api_tokens.txt
复制代码


现在,我们已经拥有了一个包含潜在 API 令牌的文件,接下来就是针对数据库验证这些令牌的有效性(如果您没有获得 API 提供方的书面许可,请不要这样做)。


仍以 HalCorp 为例,我们可以编写一个 bash 脚本,该脚本从 stdin 读取、检查 api.halcorp.biz/userinfo 端点,而后输出响应结果。


cat api_tokens.txt | bash checktoken.bash
复制代码

总结

虽然人们对于 GitHub 上的秘密暴露问题越来越重视,但每天泄露在其上的敏感数据仍然有增无减。Amazon Web Services 已经开始向用户通报其 API 密钥是否被发布至线上,GitHub 也添加新的安全功能,负责扫描公开库中的通用密钥。但是,这些解决方案仅仅是权宜之计,无法彻底解决问题。为了限制源代码发布导致的秘密泄露,我们必须更新 API 框架与 DevOps 方法,彻底防止将 API 密钥直接保存在 Git/SVN 库当中。Vault 等软件已经能够安全存储生产密钥,而某些 API 提供方案(例如 Google Cloud Platform)也更新了自家库,强制要求用户将 API 密钥默认存储为文件形式。


但归根结底,完全消除敏感信息的暴露可能是一项极度困难的挑战:我们要如何全面检查客户信息?如果这些信息被填写在 Word、Excel 或者编译文件中,又该怎么办?我们有必要在这一领域进行更多研究,深入了解由此带来的威胁并制定出行之有效的解决方案。


原文链接:


https://tillsongalloway.com/finding-sensitive-information-on-github/index.html


2020-05-12 14:032200
用户头像
陈思 InfoQ编辑

发布了 576 篇内容, 共 278.8 次阅读, 收获喜欢 1301 次。

关注

评论

发布
暂无评论
发现更多内容

快照隔离级别原理 | StoneDB 技术分享 #1

StoneDB

MySQL 数据库 HTAP StoneDB

大语言模型的预训练[5]:语境学习、上下文学习In-Context Learning设计以及ICL底层机制等原理详解| 社区征文

汀丶人工智能

人工智能 自然语言处理 nlp 年中技术盘点 ICL

软件测试/测试开发丨Linux 数据处理三剑客学习笔记

测试人

Linux 程序员 软件测试 grep awk

让代码优雅起来:记一次代码微重构实践 | 京东云技术团队

京东科技开发者

代码重构 优雅 企业号 7 月 PK 榜

实际上手体验maven面对冲突Jar包的加载规则 | 京东云技术团队

京东科技开发者

maven pom jar 包部署 企业号 7 月 PK 榜

从零开始实现Go搜索引擎(一)

geange

搜索引擎 lucene #数据库 FST #go

数字化转型与架构-规划篇|承上启下的能力热力图

数字随行

数字化转型

区块链游戏六月月报: 市场分析,机遇与挑战

Footprint Analytics

区块链游戏 NFT gamefi

一文读懂Hhybrid App开发模式

没有用户名丶

大模型的出现及我的思考 | 社区征文

于仔学技术

人工智能 大模型 社区征文 AIGC 年中技术盘点

流程编排及可视化 | 京东云技术团队

京东科技开发者

可视化 可视化开发 流程编排 企业号 7 月 PK 榜

实施Scrum敏捷开发必选的敏捷工具

顿顿顿

Scrum 敏捷开发 项目管理工具 Scrum Master 敏捷开发管理工具

解决直播间源码音视频不同步问题的有效方式——山东布谷科技创作

山东布谷科技

软件开发 实时音视频 源码搭建 直播源码 直播间

Mediabox:年度最佳音视频开发工具

阿里云视频云

云计算 阿里云 音视频 视频云

Nautlius Chain主网正式上线,模块Layer3时代正式开启

大瞿科技

Prompt Learning,In-content Learning区别| 社区征文

汀丶人工智能

人工智能 prompt learning 年中技术盘点 指示学习 instruction learning

B站&华为云 | 融合虚实宇宙,开启云上视听的黄金时代

白洞计划

AI B站

机器学习之PyTorch和Scikit-Learn第3章 使用Scikit-Learn的机器学习分类器之旅Part 2

Alan

人工智能 机器学习 PyTorch scikit-learn

演讲实录:以 AI 变革组织运营与管理

Kyligence

数据分析 数智化 企业级OLAP

时序数据库 TDengine 与金山云两大产品完成兼容互认证

爱倒腾的程序员

数据库

代码随想录 Day21 - 二叉树(七)

jjn0703

Ubuntu 20.04系统编译安装Nginx1.22教程。

百度搜索:蓝易云

nginx 云计算 Linux ubuntu 运维

JavaScript 的优雅编程技巧:Singleton Pattern

Immerse

JavaScript 设计模式 单例模式

【会议】2023 年第二十届 ChinaJoy 展前预览(同期会议篇-CGDC)正式发布!

CGDC中国游戏开发者大会

设计 开发 游戏开发 ChinaJoy

如何处理需求池?管理需求池的内容

Bonaparte

产品 产品设计 产品思维 产品需求

GreatSQL通过错误日志信息判断数据库实例是如何关闭的

GreatSQL

数据库 greatsql

LCD拼接屏、LED显示屏和OLED显示屏的主要区别

Dylan

LCD1602液晶显示屏 LED显示屏 led显示屏厂家 OLED

前端不死:新兴技术与前端未来展望 | 社区征文

维李设论

大前端 前端工程师 年中技术盘点 前端趋势 前端未来

Ubuntu 20.04系统编译安装Apache教程。

百度搜索:蓝易云

Apache 云计算 Linux ubuntu 运维

人工智能革命|是疯狂炒作还是大势所趋?

SEAL安全

B2C #人工智能 ChatGPT 企业号 7 月 PK 榜 趋势解读

我在GitHub找Bug:如何轻松赚到10000美元_语言 & 开发_Tillson Galloway_InfoQ精选文章