潜伏在源代码中的“秘密”如何导致重大漏洞

如果用一个词来概括2021年的信息安全情况,那就是:“供应链攻击”。

当黑客操纵第三方软件组件中的代码以侵害使用这些组件的“下游”应用程序时,就会发生软件供应链攻击。在2021年,我们已经看到了这种攻击的戏剧性增长:像SolarWinds、Kaseya和Codecov数据泄露这样引人注目的安全事件已经在一定程度上动摇了企业对第三方服务提供商安全实践的信心。

你可能会问,这和“秘密”有什么关系?简而言之,存在很多关联。以Codecov案件为例,这就是一个教科书式的例子,它展示了黑客是如何利用硬编码凭证一步步进入受害者的系统,并如何从中获取更多的“秘密”。

代码中的“秘密”仍然是应用程序安全领域中最容易被忽视的漏洞之一,尽管它在黑客手册中始终是最优先进行攻击的目标。在本文中,我们将讨论“秘密”,以及如何将它们保存在源代码之外,这是当前保护软件开发生命周期的首要任务。

一、什么是“秘密”

“秘密”是在应用程序、服务或基础设施中使用的数字认证凭据(API密钥、证书、令牌等)。就像使用密码对人进行身份验证一样,一个“秘密”能对系统进行身份验证,从而实现交互操作性。但有一个问题:与密码不同,“秘密”的存在就意味着被分发。

为了不断的交付新特性,软件工程团队需要连接越来越多的构建块。我们正在观察的多个团队(包括开发小组、SRE、DevOps、安全小组等),他们所使用的凭证数量成爆炸式增长。有时开发人员会将密钥放在不安全的位置,以便自己能轻松的更改代码,但这样做往往会导致错误的遗漏和无意中的发布信息。

在应用程序安全领域,硬编码密钥实际上是漏洞的另一种表现形式。请勿对加密密钥进行硬编码,因为这样所有项目开发人员都能查看该加密密钥,而且还会大大增加解决问题的难度。一旦代码被使用,除非对软件进行修补,否则加密密钥将再也不能更改。如果受加密密钥保护的帐户遭受入侵,系统所有者将被迫在安全性和可用性之间做出选择。

例如,下列代码使用了硬编码加密密钥:

任何可访问该代码的人都能访问加密密钥。一旦应用程序发布,除非对程序进行修补,否则将无法更改加密密钥。雇员可以利用手中掌握的信息访问权限入侵系统。更糟糕的是,如果攻击者可以访问应用程序的可执行文件,就可以提取加密密钥值。

但是,更令人担忧的是,不要忘记代码也是有内存的。任何代码库都使用某种版本控制系统(VCS)来进行管理,保持所有修改记录的历史时间轴,有时甚至超过几十年。问题是,有效的“秘密”可以隐藏在这个时间线上的任何地方,从打开一个新维度的攻击面。不幸的是,大多数安全性分析只在代码库的当前即将部署的状态下进行。换句话说,当涉及旧凭证或一些从未部署的分支中的凭证时,这些工具几乎是失明的。

二、600万个“秘密“被推送到GitHub

去年,通过实时监控发送到GitHub上的commits,GitGuardian发现泄露的“秘密”超过600万条,比2020年翻了一番。平均而言,每1000个commits中就有3个包含一个凭证,比去年增加了50%。

这些“秘密”中有很大一部分是为了获取公司资源。所以这也难怪想要进入企业系统的攻击者会首先查看GitHub上的公共存储库,然后再查看员工库。许多开发人员在个人项目中使用GitHub,并且可能会由于不严谨而泄露公司凭证。事实上,这经常发生。

有了有效的企业凭证,攻击者就可以作为被授权用户进行一些操作,并且这种滥用行为很难被发现。推送到GitHub后,凭证被攻破的时间平均只有4秒,这意味着它应该立即被撤销和轮换以抵消被攻破的风险。出于内疚,或者缺乏专业技术知识,我们发现人们往往会采取一些错误的方式来摆脱这种窘境。

对于企业来说,另一个严重的错误是容忍非公共安全知识库中存在“秘密”。GitGuardian的报告中强调了一个事实,即私人仓库隐藏的秘密远远多于公共仓库。这里遵循的假设在于:私有仓库给拥有者一种错误的安全感,使他们不那么关心潜伏在其中的潜在危机。这就使他们忽略了一个事实:如果私人仓库被黑客获取,这些被遗忘的“秘密”有朝一日可能会造成毁灭性的影响。

诚然,应用程序安全团队非常清楚这个问题。但是,每周都要耗费大量的时间来调查、撤销和更新这些“秘密”,或者挖掘多年未知的犄角旮旯,这些工作简直是无法承受的。因此对于开发人员来说,最好的办法就是在代码push到GitHub之前就找到这些潜在的漏洞和缺陷,不给黑客留下任何可乘之机。

三、其他更多攻击事件

黑客们正在GitHub上积极寻找“dorks”,这是一种很容易识别的模式,可以用来识别泄露的“秘密”。GitHub并不是它们唯一可以被激活的地方,任何注册表(比如Docker Hub)或源代码泄露都有可能成为发现漏洞的金矿。

作为证据,我们只需要看看最近披露的破坏事件:例如,许多开源项目的最爱——Codecov是一个代码覆盖工具。去年,它被攻击者破解,他们通过从官方的Docker图像中提取静态云账户证书来获取访问权限。在成功进入官方原始代码库后,篡改了一个CI脚本,从Codecov的用户群中获取了数百个“秘密”。

最近,Twitch的整个代码库被泄露,曝光了超过6000个Git仓库和300万份文档。尽管有大量证据表明AppSec已经发展到了相当成熟的地步,但就在今天仍有7000个“秘密”可能会被泄露。我们讨论的是成百上千的AWS、Google、Stripe和GitHub密钥,只要其中几个就足以对该公司最关键的系统进行全面攻击。这次Twitch事件没有发生客户数据泄露,纯属是因为运气好。

但几年前的Uber就没有这么幸运了,一个员工不小心在一个公共GitHub库中发布了一些公司代码。虽然这些代码是属于他自己的,但黑客还是发现并检测到了一家云服务提供商授权进入Uber基础设施的密钥,接着就发生了一次大规模的破坏。

我们不能确定什么时候一个“秘密”会被恶意利用,但是必须知道的是充满恶意的攻击者正在监视你的开发人员,并且正在寻找你的代码。还要记住一点,这些事件只是冰山一角,可能还有更多涉及“秘密”的泄密行为没有被公开报道。

四、 结  语

“秘密”是任何软件堆栈的核心组成部分,它们强而有力,因此需要非常可靠的保护措施。它们的分布式特性和现代软件开发实践使得其很难控制最终结果,无论是源代码、生产日志、Docker图像还是即时通讯应用程序,检测和补救能力是必不可少的。因为即使是那些微不足道“秘密”,也可以被有意者利用从而导致一场大规模的攻击事件。

这种情况每周都在发生,随着越来越多的服务和基础设施被用于企业领域,泄露的数量正在以非常快的速度增长。越早采取行动,就越容易保护源代码免受安全威胁。

部分资料来源:

https://blog.csdn.net/g56467467464/article/details/107107500

https://thehackernews.com/2022/05/how-secrets-lurking-in-source-code-lead.html

https://docs.gitguardian.com/secrets-detection/leaks_remediation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值