上篇文章说到👇,微软公司的开发人员 Andres Freund 在调查 SSH 性能问题时,发现了 xz 软件包中一个涉及混淆恶意代码的供应链攻击。
进一步溯源发现 SSH 使用的上游 liblzma 库被植入了后门代码,恶意代码可能允许攻击者通过后门版本的 SSH 非授权获取系统的访问权限。恶意代码修改了 liblzma 代码中的函数,该代码是 XZ Utils 软件包的一部分,链接到 XZ 库的任何软件都可以使用此修改后的代码,并允许拦截和修改与该库一起使用的数据。
知名压缩软件 xz 被植入后门,黑客究竟是如何做到的?
本文就来追根溯源,看看这位老兄究竟是如何密谋一步一步骗取 xz 项目作者信任的。
在互联网的世界里,有这样一群默默无闻的英雄,他们凭借着对技术的热爱和对开源事业的执着,为我们日常使用的软件默默贡献着自己的力量。这些人就是开源软件的维护者。
今天这篇文章要从 xz/liblzma 项目的维护者 Lasse Collin 开始讲起。xz/liblzma 虽然是个不起眼的小项目,但对于 Lasse 来说,它承载了自己多年的心血。
PS:先科普一下,XZ 是一种通用的数据压缩格式,几乎存在于每个 Linux 发行版中。XZ Utils 是一个命令行工具,包含 XZ 文件和 liblzma 的压缩和解压缩功能,而 liblzma 是一种用于数据压缩的类似 zlib 的 API,并且还支持旧版。lzma 格式。
作为一名兼职的开源贡献者,Lasse 需要在有限的业余时间里处理各种琐碎的维护工作:修复 bug、开发新功能、回复用户问题,他几乎是一个人撑起了整个项目。虽然工作量不小,但看到项目在自己手中一点点成长、完善,Lasse 还是感到无比欣慰。
然而,现实的压力开始向 Lasse 袭来。长期高强度的义务劳动让他身心俱疲,再加上现实生活的重重困扰,Lasse 感到自己已经不堪重负。“也许,是时候找个接班人了。” 他无奈地在社区里发出了求救信号。
就在这时,一个名叫 Jia Tan 的开发者出现在 Lasse 面前,表示愿意帮助维护项目。Jia Tan 在私下里也给了 Lasse 不少支持和鼓励。“太好了,终于有人能分担一些工作了。” Lasse 心里的石头终于落地。
可好景不长,一些 “索取党” 用户开始对 Lasse 发起了猛烈的攻势:
文档怎么还不更新?
这个 bug 都过去一周了,什么时候才能修?
新功能开发太慢了,你行不行啊?
面对铺天盖地的质疑和要求,Lasse 感到无比委屈:“大家要理解,我也有自己的本职工作和生活啊,这个项目只是我的业余爱好。”
在 “索取党” 的不断威逼下,Lasse 的维护热情迅速消磨殆尽。他开始怀疑自己是否真的能胜任这个角色。正当 Lasse 处于人生的低谷时,Jia Tan 再次向他伸出了 “援手”:“不如把项目交给我吧,我会好好打理的。
最终,在内忧外患的双重打击下,Lasse 选择了放手。Jia Tan 如愿接管了 xz/liblzma 项目。至此,这似乎是一个皆大欢喜的结局:Lasse 卸下了沉重的包袱,Jia Tan 得到了梦寐以求的机会,用户们也有了新的维护者。
然而,悲剧的一幕出现了。Jia Tan 在掌控项目后不久,竟然在代码中植入了一个严重的安全漏洞!这一切,原来都是精心策划的阴谋。而那些不断对 Lasse 施压的 “索取党”,无疑也要背负一定的责任。
这里不仅有技术层面的漏洞,还有人性的弱点。这位 Jia Tan(谭佳?)老兄通过细致入微的社会工程学手法,一步步骗取了原维护者的信任:
首先,他通过两年来高质量的代码贡献,塑造了技术过硬、品行端正的正面形象,消除了他人的戒心。
接着,他敏锐地察觉到原维护者正处于倦怠期,主动提出分担工作,给予支持和鼓励,借机拉近关系。
同时,他还利用其他用户对原维护者的不满情绪,暗示自己可以接替其位置,渐渐把持项目。
这一环扣一环的心理操纵过程,正是社会工程学的典型应用。
当他试图说服其他维护者采用有问题的代码库时,使用了以下话术和策略:反复强调新版本的诸多 “优秀特性”,引诱对方上钩;对提出质疑的人轻描淡写,让对方觉得是自己多虑了;表现出真诚、耐心、乐于助人的一面,让人难以生疑。
这是社会工程学中 “制造权威”、“利用从众心理” 等常见手法。
这操作手法,是不是和那位在百度贴吧潜伏5年只是为了复仇的勇士很像?
更牛逼的是,这位兄台的 ID 也很讲究:Jia Tan
这像什么?很明显是中国人名字的汉语拼音啊!心机太深了,顺便还黑了一把中国人。
目前 GitHub 官方已经将 xz 仓库给封了
Lasse 的悲剧,只是开源江湖中项目维护者群体的一个缩影。他们默默无闻却身负重任,常常要独自面对来自方方面面的压力:用户的苛责、生活的重担、项目的困境......在这些重压之下,即便是最有激情的维护者,也难免会心力交瘁。正是他们的付出,才撑起了整个开源软件的生态,但他们的处境却常常被忽视。
重新审视整个过程,我们不难发现一些让人警醒的细节。首先,“索取党” 用户的不当言行,往往会成为压垮维护者的最后一根稻草。诚然,提需求本身并无不妥,但过分苛刻、不近人情的要求只会适得其反。其次,项目的安全问题也不容小觑。当维护者精疲力竭时,往往就是不法分子伺机而动的时候。最后,开源生态的良性发展,离不开所有参与者的共同努力。用户要学会体谅和支持,企业要主动承担社会责任,而平台方更要为维护者提供必要的保障措施。
Lasse 的故事还在继续,无数像他一样的开源英雄仍在默默耕耘。他们或许没有鲜花和掌声,但正是有了他们的奉献,我们才能享受到如此丰富多彩的开源世界。作为开源社区的一员,我们应该心存感激,多一些理解和包容,少一些指责和催促
Hacker News 讨论帖:https://news.ycombinator.com/item?id=39865810
继续阅读
阅读原文