源代码中隐藏的秘密如何导致重大漏洞

如果用一个词来概括2021的信息安全年(实际上是三年),那就是“供应链攻击”。
当黑客操纵第三方软件组件中的代码以危害使用它们的“下游”应用程序时,就会发生软件供应链攻击。2021,此类攻击急剧增加:太阳林(SolarWinds)、卡西亚(Kaseya)和Codecov数据泄露等备受瞩目的安全事件动摇了企业对第三方服务提供商安全实践的信心。
你可能会问,这和秘密有什么关系?简而言之,很多。以Codecov案例为例(我们将很快返回):这是一个教科书式的例子,说明黑客如何利用硬编码凭据获得对受害者系统的初始访问权限,并从中获取更多机密。
代码中的秘密仍然是应用程序安全领域中最容易被忽视的漏洞之一,尽管它是黑客的首要目标。在这篇文章中,我们将讨论一些秘密,以及如何将它们隐藏在源代码之外是当今保护软件开发生命周期的首要任务。
什么是秘密?
机密是应用程序、服务或基础架构中使用的数字身份验证凭据(API密钥、证书、令牌等)。就像密码(在2FA的情况下加上一个设备)被用来认证一个人一样,秘密认证系统以实现互操作性。但有一个陷阱:与密码不同,秘密是用来分发的。
为了不断提供新特性,软件工程团队需要互连越来越多的构建块。各组织正在关注多个团队(开发团队、SRE、DevOps、安全等)中使用的凭据数量激增。有时,开发人员会将密钥保存在不安全的位置,以便更容易更改代码,但这样做往往会导致信息被错误地遗忘,并在无意中发布。
在应用程序安全环境中,硬编码机密实际上是一种不同类型的漏洞。首先,由于源代码是一项非常容易泄漏的资产,意味着要在多台机器上频繁地进行克隆、签出和分叉,所以机密也是泄漏的。但是,更令人担忧的是,我们不要忘记代码也有内存。
任何代码库都使用某种版本控制系统(VCS)进行管理,保留对其所做的所有修改的历史时间线,有时甚至超过几十年。问题是,仍然有效的秘密可能隐藏在这个时间线上的任何地方,从而为攻击面打开了一个新的维度。不幸的是,大多数安全性分析只在代码库的当前准备部署状态下进行。换句话说,当涉及到存在于旧提交甚至从未部署的分支中的凭据时,这些工具是完全盲目的。
600万个秘密推送到GitHub
去年,GitGuardian实时监控推送到GitHub的提交,检测到600多万个泄露的机密,比2020年翻了一番。平均而言,1000份提交中有3份包含凭证,比去年高出50%。
这些秘密中有很大一部分是为了获取公司资源。难怪想要在企业系统中站稳脚跟的攻击者会首先查看GitHub上的公共存储库,然后再查看其员工拥有的存储库。许多开发人员在个人项目中使用GitHub,并且可能会错误地泄漏公司凭据(是的,这种情况经常发生!)。
通过有效的公司凭据,攻击者可以作为授权用户进行操作,因此很难检测滥用情况。凭证在推送到GitHub后被泄露的时间只有4秒,这意味着它应该立即被撤销和轮换,以消除被泄露的风险。出于内疚,或者缺乏技术知识,我们可以理解为什么人们经常走错路来摆脱这种情况。
企业的另一个严重错误是容忍非公共存储库中存在机密。GitGuardian的《国家机密扩展报告》强调了这样一个事实,即私人存储库隐藏的机密比公共存储库隐藏的机密多得多。这里的假设是,私有存储库给了所有者一种错误的安全感,使他们对隐藏在代码库中的潜在秘密不那么担心。
这忽视了一个事实,即这些被遗忘的秘密如果被黑客获取,有朝一日可能会产生毁灭性的影响。
公平地说,应用程序安全团队很清楚这个问题。但是,为了调查、撤销和轮换每周所犯下的秘密,或者挖掘多年来未知领域的秘密,需要做的工作简直是铺天盖地。
标题违规还有其他的
然而,有一个紧迫性。黑客们正在GitHub上积极寻找“傻瓜”,这是一种很容易识别的模式,可以识别泄露的秘密。GitHub并不是唯一可以激活它们的地方,任何注册表(如Docker Hub)或任何源代码泄漏都可能成为发现漏洞载体的金矿。
作为证据,您只需看看最近披露的漏洞:Codecov是许多开源项目的最爱,是一种代码覆盖工具。去年,它遭到攻击者的破坏,攻击者通过从其Docker官方图像中提取静态云帐户凭据获得访问权限。在成功访问官方源代码库后,他们能够篡改CI脚本,并从Codecov的用户群中获取数百个秘密。
最近,Twitch的整个代码库被泄露,暴露了6000多个Git存储库和300万个文档。尽管有大量证据表明AppSec的成熟度达到了一定的水平,但仍有近7000个秘密可能浮出水面!我们谈论的是数百个AWS、Google、Stripe和GitHub密钥。其中只有几个就足以对公司最关键的系统进行全面攻击。这次没有泄露任何客户数据,但这主要是运气。
几年前,优步就没那么幸运了。一名员工意外地在一个公共GitHub存储库上发布了一些公司代码,这是他自己的。黑客发现并检测到一家云服务提供商授予优步基础设施访问权限的密钥。随后发生了大规模的破坏。
底线是,您无法真正确定何时会利用某个秘密,但您必须知道的是,恶意参与者正在监视您的开发人员,他们正在寻找您的代码。还要记住,这些事件只是冰山一角,可能还有更多涉及机密的违规行为没有公开披露。
结论
机密是任何软件堆栈的核心组件,它们特别强大,因此需要非常强大的保护。它们的分布式特性和现代软件开发实践使得很难控制它们的最终去向,无论是源代码、生产日志、Docker图像还是即时消息应用程序。机密检测和修复功能是必须的,因为即使是机密也可以在导致重大漏洞的攻击中被利用。这种情况每周都会发生,随着企业界使用越来越多的服务和基础设施,泄漏的数量正以非常快的速度增长。越早采取行动,就越容易保护源代码免受未来的威胁。
注意事项本文由GitGuardian的技术内容作者Thomas Segura撰写。托马斯曾担任法国多家大公司的分析师和软件工程师顾问。