如何靠近卷曲

2021-03-30 18:56:04

我之前曾博客关于可能的后门威胁来卷曲。这篇文章可能有点重复,但几年后,刷新和更新对象,在近期PHP后门犯下的影子2021年3月28日。现在,“供应链攻击”是一个热门话题。

由于您没有读取PHP链接:一个未知的项目outsider成功地将提交推进到PHP主源代码存储库中,更改(使看起来像两个项目常客所做的)显然插入了可以执行自定义的后门代码当客户端签订修改后的服务器正确的方式。

显然是很快检测到的提交。我没有看到任何正确的分析,完全是如何进行的,而是对我来说这不是最终的问题。我宁愿以卷曲的角度谈论这种威胁。

PHP非常良好使用,因此卷曲也是如此卷曲,但其中PHP是(大多数)服务器端运行代码,卷曲是客户端。

我想从攻击者的角度来看这个问题。还有两件事需要攻击者,以获得需要发生的后门和第三个相邻的步骤:

做出一个难以检测的后门变化,并且对休闲观察者似乎无辜,而实际上仍然能够做到其“工作”

代码需要包含在受害者/目标使用的卷曲版本中

这些不是简单的步骤。进入释放的第三步并不严格始终是必要的,因为有时有时候人员和组织可以从出血边缘主存储库中运行代码(针对我们应该添加的建议)。

如在这个PHP攻击中所见,它在第1步失败了相当糟糕的是,使攻击代码看起来无害,尽管我们可以怀疑这可能是故意这样做的。在2010年,关于OpenBSD的IPSec堆栈中的一个令人冗长的讨论可能已经到达了多年甚至没有被证明是真实的,所以肯定是真实的,所以可以肯定的想法是。

每次我们在卷曲中修复安全问题时,我们集体思想的背面都会潜在的唠叨问题:这个缺陷是故意的吗?从历史上看,我们没有看到任何对卷曲的攻击。我可以通过几乎所有检测到的现有安全问题和在卷曲中报告的安全问题所做的很高的确定性。

最好的攻击代码可能会对攻击者计划使用它的特殊背景产生巨大影响。我的意思是少见的,因为做了零指针取消引用,或者做了一个不惯性的或什么。这是,因为执行基于全面的通用堆栈的缓冲区溢出更难降落未被发现。也许在Malloc之外的单字节覆盖可能是这样的方式,就像2016年回到2016年时,当C-ARES这样的缺陷用作多漏洞利用序列中的第一步时以root身份执行远程代码在Chromeos ...

理想情况下,提交还应包含实际的错误 - 修复,这将是公众面临的动机。

好吧,让我们想象你已经生产了实际上是一个有用的错误 - 修复或补充添加的代码,但是有一个添加的邪恶扭曲,而且你希望在卷曲中降落。我可以想象几种不同的理论方法来做这件事:

在某处使用弱点并直接登陆代码而不涉及现有的卷曲团队成员

我从未见过这个尝试。将Lift-Request提交给项目通常的手段并争辩说,提交修复了一个错误 - 这可能是真的。

这使得后门补丁必须通过飞行颜色进行所有测试和评论以获得合并。我不是说这是不可能的,但我会声称它非常努力,也是攻击者非常大的赌博。可能是一个相当大的工作,只是为了获得这个攻击的代码,所以也许使用更少的风险危险来降落代码,然后是优选的?但那么哪种方式可能具有最可靠的结果?

社会工程非常强大。我不能声称我们的团队对此免疫,所以也许有办法局外人可以在我们想象中的个人墙壁后面潜行,并使我们拿出一个弥补的原因,然后将该项目的审查过程规避。

我们甚至可以包括更强迫的“令人信服的”,例如对人士或其家人的直接威胁:“推动这段代码或其他......”。这种方式无法使用2FA,更好的密码或类似的东西来保护。强制使用用户可能最终会知道,然后立即使提交恢复。

欺骗用户不会使提交避免在事实之后进行测试和仔细检查。当代码已降落时,将在包含少数静态代码分析仪和内存/地址消毒器的百种CI作业中扫描和测试。

欺骗用户可以降落代码,但除非代码被写入完美的隐形变化,否则它不能粘。它真的需要成为锻炼的良好攻击代码。此外:规避常规拉动请求+审查程序是不寻常的,所以我相信此事实后可能会审查和评论此类提交,然后可能有关于它甚至可能的后续行动的问题。

在此上下文中的弱点可能是托管软件中的安全问题,甚至可以在托管主要源代码Git Repo的公司中的rogue管理员。允许代码被推入代码存储库的内容,而无需它是现有团队成员之一的结果。这似乎是PHP攻击完成的方法。

这也是一种硬的方法。它不仅是捷径评论,它也是以人员的名义,肯定没有做到他们没有做出提交,并再次进行,并在任何道路上都会进行测试和戳。

对于所有签署Git提交的我们所有人,检测到这种伪造的提交很容易和快速完成。在卷曲项目中,我们没有强制性签名的罪行,因此缺乏签名实际上不会阻止它。谁知道,某处的弱点甚至可能找到一种绕过这样的要求的方法。

正如我上面描述的那样,即使是熟练的开发人员来说,它也非常努力地写一个后门,并将其降落在卷曲GIT存储库中,并粘在那里比仅仅是一个非常短暂的时期。

如果攻击者可以将代码直接潜入一个版本存档,那么它不会出现在Git中,它不会被测试,并且团队成员不会轻易注意到!

卷发释放塔尔巴球由我在我的机器上发布。在我构建了Tarball后,我用我的GPG键签名并将其上传到卷曲.SE Origin Server为世界下载。 (Web用户在下载卷曲时实际上没有击中我的服务器。用户可见的网站和下载乘坐速度服务器。)

一个攻击者,它会感染我的发布脚本(BTW也在Git存储库中)或对我的机器做点什么可以在Tarball中获取一些东西,然后让我签署它,然后创建“完美的后门” Git并要求某人用Git释放释放,以便检测 - 通常不是我所知道的任何人都完成的。

但这样的攻击者不仅要违反我的开发机器,这种释放脚本的感染就会非常难以拉开。当然不是不可能的。我当然尽力维持适当的登录卫生,更新的操作系统和使用安全密码和使用安全密码和加密通信。但我也是一个人,所以我必然会偶尔犯错误。

另一种方法可以是攻击者违反原点下载服务器并用感染的版本替换那里的Tarball,并希望人们在下载或以其他方式注意到Tarball被修改时跳过签名。我在维护服务器安全性时尽力保持风险最低。大多数人下载最新版本,然后如果一个子集检查攻击的签名,则足够了,以便更快地揭示。

作为攻击者,进入其他地方的供应链:在卷曲发布tarball和目标系统之间找到一个较弱的链接,为您的攻击。如果你可以欺骗或社会工程师也许沿途的别人可以让你的邪恶卷曲tarball以在那里使用而不是实际的上游tarball,这可能更容易,让你更加爆炸你的巴克。也许你定位你的特定分发或操作系统的发布工程师,假装从卷曲项目中,弥补一个故事并送到一个tarball来帮助他们......

假设安全咨询,直接向您知道自己的卷曲/ libcurl二进制文件发出一个坏补丁吗?

如果你能想到通过卷曲代码将恶意代码的其他/更好的方法纳入受害者的机器,请告诉我!如果您发现安全问题,我们将为您奖励!

同样,如果您能够考虑如何改进项目的方式或做法,以进一步增加我们的安全,我将非常感兴趣。这是一项永远搬家的过程。