注册
登录
新闻动态
其他科技
返回
“木马源”漏洞威胁所有代码安全
作者:
糖果
发布时间:
2024-03-26 03:51:39 (2天前)
来源:
threatens-the-security-of-all-code/
今天发布的新研究警告说,几乎所有的编译器——将人类可读的源代码转换为计算机可执行的机器代码的程序——都容易受到阴险的攻击,在这种攻击中,攻击者可以在不被发现的情况下将有针对性的漏洞引入任何软件。漏洞披露是与多个组织协调的,其中一些组织现在正在发布更新以解决安全漏洞。 剑桥大学的研究人员发现了一个影响大多数计算机代码编译器和许多软件开发环境的错误。问题是数字文本编码标准Unicode 的一个组件,它允许计算机交换信息而不管使用的语言。Unicode 目前在 154 种不同的语言脚本中定义了超过 143,000 个字符(除了许多非脚本字符集,例如表情符号)。 具体而言,该弱点涉及 Unicode 的双向或“ Bidi”算法,该算法处理包含具有不同显示顺序的混合脚本的显示文本,例如阿拉伯语(从右到左阅读)和英语(从左到右)。 但是计算机系统需要有一种确定性的方法来解决文本中的方向冲突。输入“Bidi override”,可用于使从左到右的文本从右到左阅读,反之亦然。 “在某些情况下,Bidi 算法设置的默认排序可能不够,”剑桥研究人员写道。“对于这些情况,Bidi 覆盖控制字符可以切换字符组的显示顺序。” Bidi 覆盖甚至可以以不同于其逻辑编码的顺序显示单个脚本字符。正如研究人员指出的那样,这一事实以前曾被用来伪装通过电子邮件传播的恶意软件的文件扩展名。 问题在于:大多数编程语言都允许您将这些 Bidi 覆盖放在注释和字符串中。这很糟糕,因为大多数编程语言都允许注释中的所有文本(包括控制字符)都被编译器和解释器忽略。此外,这很糟糕,因为大多数编程语言都允许包含任意字符(包括控制字符)的字符串文字。 剑桥大学计算机安全教授、该研究的合著者罗斯·安德森( Ross Anderson)说:“因此,您可以在对人类审阅者看来无害的源代码中使用它们 [实际上] 可以做一些令人讨厌的事情。” “对于像 Linux 和 Webkit 这样的项目来说,这是个坏消息,它们接受随机人员的贡献,让他们接受人工审查,然后将它们合并到关键代码中。据我所知,这个漏洞是第一个影响几乎所有事物的漏洞。” 该研究论文将该漏洞称为“ Trojan Source ”,指出虽然注释和字符串都具有指示其开始和结束的特定于语法的语义,但 Bidi overrides 不遵守这些界限。从论文: “因此,通过将 Bidi 覆盖字符专门放置在注释和字符串中,我们可以以大多数编译器可接受的方式将它们走私到源代码中。我们的主要见解是,我们可以重新排列源代码字符,使结果显示顺序也代表语法上有效的源代码。” “将所有这些结合在一起,我们得出了对源代码的新型供应链攻击。通过将 Unicode Bidi 覆盖字符注入注释和字符串中,攻击者可以在大多数现代语言中生成句法有效的源代码,其中字符的显示顺序呈现与实际逻辑不同的逻辑。实际上,我们将程序 A 变位为程序 B。” Anderson 表示,这样的攻击对于人类代码审查人员来说可能很难检测到,因为渲染的源代码看起来完全可以接受。 “如果逻辑上的变化足够微妙,以至于在后续测试中未被发现,那么攻击者可能会在不被发现的情况下引入有针对性的漏洞,”他说。 同样令人担忧的是,Bidi 覆盖字符通过大多数现代浏览器、编辑器和操作系统上的复制和粘贴功能持续存在。 “任何将代码从不受信任的来源复制到受保护的代码库中的开发人员都可能无意中引入了一个不可见的漏洞,”安德森告诉 KrebsOnSecurity。“这种代码复制是现实世界安全漏洞的重要来源。” 约翰霍普金斯大学信息安全研究所副教授马修格林表示,剑桥大学的研究清楚地表明,大多数编译器都可以被 Unicode 欺骗,以不同于读者预期的方式处理代码。 “在阅读这篇论文之前,Unicode 可以以某种方式被利用的想法不会让我感到惊讶,”格林告诉 KrebsOnSecurity。“令我惊讶的是,有多少编译器会在没有任何防御的情况下愉快地解析 Unicode,以及他们的从右到左编码技术在将代码潜入代码库方面的效果如何。这是一个非常聪明的技巧,我什至不知道这是可能的。咳咳。” 格林说,好消息是研究人员进行了广泛的漏洞扫描,但无法找到任何人利用此漏洞的证据。然而。 “坏消息是,它没有防御措施,现在人们知道了,他们可能会开始利用它,”格林说。“希望编译器和代码编辑器开发人员能够快速修补这个问题!但由于有些人不定期更新他们的开发工具,至少在一段时间内会有一些风险。” 加州大学伯克利分校计算机科学系讲师Nicholas Weaver表示,剑桥大学的研究提出了“一组非常简单、优雅的攻击,可能会使供应链攻击变得更糟。” “人类已经很难从源代码中的‘这是邪恶的’中分辨出‘这是可以的’,”韦弗说。“通过这种攻击,你可以使用方向性的转变来改变注释和字符串的呈现方式,例如,'This is Ok' 是它的呈现方式,而'This is' Ok 是它在代码中的存在方式。幸运的是,它有一个非常容易扫描的签名,因此编译器在将来遇到它时可以[检测]它。” 剑桥论文的后半部分是一个引人入胜的案例研究,涉及与众多受影响的编程语言和软件公司协调漏洞披露的复杂性。研究人员表示,他们在最初披露后提供了 99 天的禁运期,以允许通过软件更新修复受影响的产品。 研究人员写道:“我们遇到了各种各样的回应,从修补承诺和漏洞赏金到快速解雇和提及法律政策。” “在我们与之合作的 19 家软件供应商中,有 7 家使用外包平台来接收漏洞披露,6 家拥有专门的漏洞披露门户网站,4 家通过 PGP 加密电子邮件接受披露,另外两家仅通过非 PGP 电子邮件接受披露。他们都确认收到了我们的披露,最终其中 9 人承诺发布补丁。” 其中 11 个接受者有漏洞赏金计划,为漏洞披露提供报酬。但研究人员报告说,其中只有 5 次支付赏金,平均支付 2,246 美元,范围为 4,475 美元。 安德森说,到目前为止,大约一半的组织所联系的维护受影响的计算机编程语言已经承诺提供补丁。其他人正在拖延。 “我们将在接下来的几天内监控他们的部署,”安德森说。“我们还期待 Github、Gitlab 和 Atlassian 采取行动,因此他们的工具应该能够检测对仍然缺乏双向字符过滤的语言的代码的攻击。” 至于需要对 Trojan Source 采取什么措施,研究人员敦促依赖关键软件的政府和公司确定其供应商的态势,向他们施加压力以实施足够的防御,并确保任何差距都被其其他地方的控制所覆盖。工具链。 “Trojan Source 漏洞几乎影响所有计算机语言,这一事实使其成为对响应进行全系统和生态有效的跨平台和跨供应商比较的难得机会,”该论文总结道。“由于使用这些技术可以轻松发起强大的供应链攻击,因此参与软件供应链的组织实施防御至关重要。” 韦弗称这项研究“在事情成为问题之前阻止它的工作非常好。” “关于如何解决这些问题,协调披露课程是一项出色的研究,”他说。“该漏洞是真实存在的,但也凸显了我们现代代码所依赖的依赖项和包不断变化的更大漏洞。” Rust 已针对此安全漏洞发布了安全公告,其被跟踪为 CVE-2021-42574 和 CVE-2021-42694。来自其他受影响语言的其他安全建议将作为更新添加到此处。
收藏
举报
1 条回复
动动手指,沙发就是你的了!
登录
后才能参与评论