< 返回新闻公告列表

影响众多编程言语、引发供应链攻击,剑桥大学发布“木马源”漏洞

发布时间:2021-11-25 21:42:41    来源: aa6g互联

信息来源:51CTO


破绽与攻击无处不在。最近,剑桥大学的两位研讨人员发现了一个能够影响计算机代码编译器和软件开发环境的破绽——Trojan Source(木马源) 。该破绽简直影响一切计算机言语,包括对 C、C++、C#、JavaScript、Java、Rust、Go 和 Python 。

此外,歹意代码能够将 Trojan Source 用于供给链攻击。

  • 论文地址:https://trojansource.codes/trojan-source.pdf
  • GitHub 地址:https://github.com/nickboucher/trojan-source

Trojan Source 攻击办法应用的是字符编码规范 Unicode ,有以下两种攻击方式:

  • 第一种是经过 Unicode 的 Bidi 算法(CVE-2021-42574),该算法处置从左到右(如英语)和从右到左(如阿拉伯语和希伯来语)脚本显现次第。该破绽允许对字符停止视觉上的重新排序,使其呈现与编译器和解释器所不同的逻辑次第;
  • 第二种是同源攻击 (CVE-2021-42694),两个不同的字符具有类似的视觉表示,例如拉丁语 H 和西里尔字母Н。

研讨人员表示假如攻击者经过逃过人类审阅胜利地将目的破绽提交到开源代码中,下游软件可能会继承该破绽。在 GitHub 上的存储库中,他们提供了概念考证 (PoC) 脚本。

Trojan-Source 攻击

字符重新排序方式

Unicode 规范规则,内存表示次第称为逻辑次第,当文本在一行的时分,大多数脚本从左往右显现字符(例如英语)。但是,也有一些脚本(如阿拉伯语或希伯来语)显现文本的自然次第是从右往左。当混合具有不同显现次第的脚本时,必需有一种肯定性的办法来处理方向抵触。关于 Unicode 来说,双向或 Bidi 算法能够完成。

某些场景下,Bidi 算法设置的默许排序可能不够。关于这些状况,Bidi 算法提供掩盖控制字符(override control characters)。Bidi 算法掩盖是不可见的字符,从而能够切换字符组的显现次第。

例如,思索以下 Unicode 字符序列:RLI a b c PDI,那么将显现为:c b a。

下表 I 提供了与此攻击相关的控制符列表:

隔离重新排序方式

在 Bidi 标准中,隔离(isolates)是被视为单个实体的字符组;也就是说,当显现次第被重写时,整个一组字符将作为单个块挪动,隔离能够嵌套。

假定 Unicode 字符为:RLI LRI 4 5 6 PDI LRI 1 2 3 PDI PDI,那么将显现为:1 2 3 4 5 6。

互相嵌入多层 LRI 和 RLI,能够近乎恣意地重新排序字符串。那么攻击者就能够将杂乱的字符,经过这种方式,将本人想要的功用插入到当前的开源项目中,让用户下载后执行,从而在不知情的状况下来执行破绽代码。

语法依从性

大多数设计良好的编程言语不允许在源代码中运用恣意控制字符,由于它们被视为影响逻辑的 token。因而,在源代码中随机放置 Bidi 掩盖字符通常会招致编译器或解释器语法错误。为了防止这种错误,我们能够应用编程言语的以下两个准绳:

  • 注释:大多数编程言语都允许编译器和解释器疏忽一切文本(包括控制符)注释;
  • 字符串:许多编程言语允许字符串能够包含恣意字符,同理也包括控制符。

固然注释和字符串都具有指示其开端和完毕的特定于语法的语义,但 Bidi 掩盖不恪守这些界线。因而,经过将 Bidi 掩盖字符特地放置在注释和字符串中,我们可以以大多数编译器可承受的方式将它们注入到源代码中。

示例展现

如下图所示,经过恣意控制符改动了代码逻辑。下列代码中的 if 条件没有执行,而是被放置在注释局部,程序显现效果起到了诈骗用户的作用。

研讨人员还展现了如何在 C++ 中执行同源文字攻击。他们运用了两个看起来类似但实践上不同的 H,蓝色的拉丁语 H 和红色的西里尔字母Н。当停止编译时,该程序输出文本「Goodbye, World!」。

增强防御

这样的攻击可能很难检测,由于经过渲染的源代码看起来十分圆满。假如逻辑上的变化足够微小,以致于后续测试中未被发现,那么攻击者可能会在不被发现的状况下引入有针对性的破绽。

同样令人担忧的是,Bidi 掩盖字符经过复制、粘贴操作,依然存在于阅读器、编辑器和操作系统上。

「开发者将代码从不受信任的来源复制到受维护的代码库中,这种做法可能无意中引入了一个不可见破绽,」剑桥大学计算机平安教授、该研讨的合著者 Anderson 表示。「这种代码复制是理想世界平安破绽的重要来源。」

约翰霍普金斯信息平安研讨所的副教授 Matthew Green 表示,「剑桥研讨分明地标明,大多数编译器都能够被 Unicode 诈骗,以不同于研讨者预期的方式处置代码。」

好音讯是,研讨人员停止了普遍的破绽扫描,还没有人应用这一破绽。坏音讯是目前还没有防御措施,未来可能会有人应用该破绽停止一些毁坏。

Green 表示:希望编译器和代码编辑器开发人员可以快速修补这个破绽!但由于有些人不定期更新他们的开发工具,至少在一段时间内会有一些风险。

图源:XKCD.com/2347/

加州大学伯克利分校计算机科学系的讲师 Nicholas Weaver 表示,剑桥提出了一组十分简单、文雅的攻击,可能会使供给链攻击变得愈加严重。

人类曾经很难从源代码中辨别「this is OK、this is evil」,Weaver 表示。关于这种攻击,你能够运用改动方向来改动注释和字符串的呈现方式,例如「This is okay」只是一种呈现方式,但「This is」okay 才是它在代码中的存在方式。侥幸的是,它有一个十分容易扫描的标志,因而编译器在未来遇到它时能够「检测」它。

研讨人员表示,软件公司在最初披露期间,提供了 99 天的禁锢期,以允许经过软件更新修复受影响的产品。

研讨人员写道:「我们收到了各种各样的回应,包括修补承诺、Bug 赏金方案、快速驳回等。在我们与之协作的 19 家软件供给商中,有 7 家运用外包平台接纳破绽披露,6 家具有特地的破绽披露门户网站,4 家经过 PGP 加密电子邮件承受披露,另外两家仅经过非 PGP 电子邮件承受披露。他们都确认收到了我们的披露,最终 9 家承诺发布补丁。」

此外,还有 11 家承受者有 Bug 赏金方案,为破绽披露提供报酬。但研讨人员报告说,只要 5 家支付赏金,均匀支付 2,246 美圆。

Anderson 表示,「到目前为止大约有一半的组织曾经承诺提供补丁,而其他组织还在拖延。我们将接下来将监控他们的部署,还希望 GitHub、Gitlab 、 Atlassian 采取行动。」

参考链接:

https://krebsonsecurity.com/2021/11/trojan-source-bug-threatens-the-security-of-all-code/http://cn-sec.com/archives/609155.htmlhttp://cn-sec.com/archives/609155.html

15759930523
15759930523 15759930523
返回顶部
返回顶部 返回顶部