写点什么

“Trojan Source”算法漏洞几乎影响所有代码的安全

  • 2021-11-05
  • 本文字数:3054 字

    阅读完需:约 10 分钟

“Trojan Source”算法漏洞几乎影响所有代码的安全

发表于 11 月 1 日的最新研究警告说,几乎所有的编译器(即把人类可读源码转换成计算机可执行的机器码的程序)都会受到一种“阴险的攻击”,在这种攻击中,黑客可以将目标漏洞引入任何软件而不被发现。披露这一漏洞的过程是与多个组织协调进行的,其中一些组织目前正在发布更新来解决这个安全漏洞。


剑桥大学的研究人员发现了一个 bug,这个 bug 影响了大多数计算机代码的编译器和许多软件开发环境。问题在于数字文本编码标准 Unicode 的一部分,该标准允许计算机之间进行信息交换,无论其使用何种语言。Unicode 目前定义了 154 种不同语言文字的 143000 多个字符(此外,还有许多非文字的字符集,例如表情符号)。


具体来说,这个漏洞涉及 Unicode 的双向或 “Bidi”算法,该算法处理显示的文本,包括具有不同显示顺序的混合文字,例如阿拉伯语(从右到左读)和英语(从左到右读)。


但是计算机系统需要有一种确定的方法来解决文本中相互冲突的方向性。输入“Bidi 重写”(Bidi override),它可以用来使“从左到右”的文本变成“从右到左”阅读,反之亦然。


“Bidi 算法设定的默认排序在某些情况下可能是不够的,”剑桥大学的研究人员写道,“对于这些情况,Bidi 重写控制字符可以切换字符组的显示顺序。”


Bidi 重写甚至可以使单个脚本字符不同于其逻辑编码的顺序显示。正如研究人员所指出的,这一事实以前曾被利用来掩盖通过电子邮件传播的恶意软件的文件扩展名


这就是问题:大多数编程语言都允许在注释和字符串中放置这些 Bidi 重写。这样做非常糟糕,因为大多数编程语言允许注释,而编译器和解释器会忽略所有文本(包括控制字符)。另外,这也很糟糕,因为大多数编程语言都允许字符串包含任意字符,包括控制字符。


这份研究的共同作者 Ross Anderson,剑桥大学计算机安全教授说:“因此,你可以把它们用在对人类审查者看来无害的源代码中,而实际上却能做出令人讨厌的事。对于像 Linux 和 Webkit 这样的项目来说,这是一个坏消息,这些项目接受来自随机人员的贡献,对其进行人工审查,然后将其合并到关键代码中。就我所知,这是第一个对任何事物都有影响的漏洞。”


这篇研究论文将该漏洞称为“Trojan Source”,指出虽然注释和字符串都有其开始和结束的特定语法语义,但是 Bidi 重写并没有遵循这些限制。以下摘自该论文:


“所以,通过将 Bidi 重写字符完全放入注释和字符串中,我们可以用大多数编译器接受的方式将它们‘偷渡’到源代码中。我们的主要见解是,我们可以用这样一种方法来重新排序源代码字符,而生成的显示顺序也代表了句法上有效的源代码。”


“将所有这一切结合起来,我们得出了一个新的对源代码的供应链攻击(supply-chain attack)。通过在注释和字符串中注入 Unicode Bidi 重写字符,黑客就能在大多数现代语言中产生语法有效的源代码,而在这些语言中,字符的显示顺序与真实逻辑有很大不同。事实上,我们将程序 A 变成了程序 B。”


Anderson 说,对于人类代码审查人员来说,这种攻击可能难以检测到,因为所呈现的源代码似乎是完全可以接受的。


他说:“如果逻辑上的改变足够细微,以至于在后续的测试中都没有被发现,那么黑客就能在不被发现的情况下引入有针对性的漏洞。”


还有一点也令人担心,在大多数现代浏览器、编辑器和操作系统上,Bidi 重写字符通过复制和粘贴功能都持续存在。


Anderson 表示:“任何开发者只要从不被信任的来源复制代码到受保护的代码库,都会无意中引入一个无形的漏洞。这种代码复制是现实世界中安全漏洞的重要来源。”


约翰霍普金斯大学信息安全研究所的副教授 Matthew Green 称,剑桥大学的研究清楚地表明,大多数编译器都会被 Unicode 欺骗,而不像读者所期望的那样处理代码。


图片来源:XKCD.com/2347/


Green 表示:“在阅读这篇论文之前,Unicode 可能会以某种方式加以利用的想法并不令我吃惊。令我吃惊的是,有多少编译器很乐意解析 Unicode,而不使用任何防御措施,它们从右向左的编码技术在将代码嵌入代码库方面是多么有效。那是很聪明的方法,我以前都没想到过。”


在 Green 看来,好消息是,研究人员进行了广泛的漏洞扫描,但未能发现有人利用这一漏洞的证据。


不过,Green 也说:“坏消息是,我们对它没有任何防御措施,而人们现在知道了,就可能会开始利用它。但愿编译器和代码编辑器的开发者能尽快修补这个漏洞!但是,因为有些人没有定期更新他们的开发工具,所以至少在一段时间内存在一定的风险。”


加州大学伯克利分校计算机科学系讲师 Nicholas Weaver 说,剑桥大学的研究提出了“一套非常简单、优雅的攻击方式,可能会使供应链攻击变得更多、更糟糕。”


“在源代码中,人们已经很难区分‘this is OK’和‘this is evil’,”Weaver 说,“有了这种攻击,你就可以利用方向性的转变来更改注释和字符串的呈现方式,例如,‘this is okey’就是它的呈现方式,但‘this is’ okey 就是它在代码中的存在方式。幸运的是,这种特征非常容易扫描,因此编译器可以在未来遇到它时(检测到)。”


剑桥大学那篇论文的后半部分是一项引人入胜的案例研究,介绍了在如此多受影响的编程语言和软件公司中协调漏洞披露的复杂性。研究人员称,在首次披露该漏洞后,它们提供了 99 天的时滞期,以允许受影响的产品能够通过软件更新得到修复。


研究人员写道:“我们遇到了各种各样的回应,从补丁承诺和漏洞赏金到快速解雇和提及法律政策。在我们接触过的 19 家软件供应商中,有 7 家使用外包平台接收漏洞披露,6 家有专门的门户网站接收漏洞披露,4 家通过 PGP 加密的电子邮件接受披露,2 家仅通过非 PGP 电子邮件接受披露。他们都确认收到了我们的披露,最后其中有 9 家承诺发布补丁。”


其中 11 家接受者有用于支付披露漏洞的漏洞赏金计划。但研究人员报告说,其中只有 5 家支付了赏金,平均支付额为 2246 美元,范围为 4475 美元。



Anderson 说,到目前为止,大约半数所联系的维护受影响的计算机编程语言的组织都承诺提供补丁。其他组织则在拖延时间。


“我们将在未来几天监测他们的部署情况,”Anderson 说。“我们也期望 Github、Gitlab 和 Atlassian 会采取行动,所以他们的工具应该能够检测到那些对于缺乏 Bidi 字符过滤语言的代码的攻击。”


至于需要对 Trojan Source 做什么,研究人员敦促依赖于关键软件的政府和公司查明其供应商的态势,对他们施加压力,要求他们实施足够的防御,并确保任何漏洞都被他们工具链中其他地方的控制所覆盖。


“Trojan Source 漏洞几乎影响了所有的计算机语言,这也让此成为一个难得的机会,可以进行全系统的、生态上有效的跨平台和跨厂商的响应对比,”该论文总结道,“由于使用这些技术可以很容易地发起强大的供应链攻击,参与软件供应链的组织实施防御是至关重要的。”


Weaver 称这项研究是 “是非常好的工作,因为在事情发展成问题之前阻止了它。”


“对于修复这些问题来说,协调披露是一项很好的研究,”他说,“这个漏洞确实存在,但是也凸显了我们现代代码所依赖的依赖项和软件包不断变化的更大漏洞。”


Rust 发布了一份针对此安全漏洞的安全公告,它的追踪代号是 CVE-2021-42574 和 CVE-2021-42694。其他受影响语言提供的安全建议将在此添加和更新。


Trojan Source 研究论文下载地址:https://www.trojansource.codes/trojan-source.pdf


作者介绍:

Brian Krebs,独立调查记者。报道网络犯罪、安全、隐私。《纽约时报》畅销书《Spam Nation》一书作者。前华盛顿邮报记者(1995 年~2009 年)。


原文链接:

https://krebsonsecurity.com/2021/11/trojan-source-bug-threatens-the-security-of-all-code/

2021-11-05 18:306411
用户头像
罗燕珊 AI practitioner | Tech media

发布了 554 篇内容, 共 429.9 次阅读, 收获喜欢 862 次。

关注

评论

发布
暂无评论
发现更多内容

超低延迟传输网络架构在元宇宙场景的应用

网易云信

音视频 元宇宙 传输网络

ansible 模块:include_tasks

ghostwritten

ansible

十、高可用之应急预案

穿过生命散发芬芳

5月月更 高可用设计

Native Flink on Kubernetes 在小红书的实践

Apache Flink

大数据 flink 编程 流计算 实时计算

数字化转型的理论体系与具体技术

小炮

数字化转型

面试以前上司,能力一般,但他卑微哀求,我该不该放水?

Java全栈架构师

架构 面试 程序人生 java程序员 java 编程

如何用同一套账号接入整个研发过程?

阿里云云效

云计算 阿里云 运维 研发管理 研发

揭露ROI提升5倍的秘密!火山引擎A/B测试白皮书重磅发布(内附下载链接)

字节跳动数据平台

字节跳动 数字营销 ab测试

玩了一场剧本杀,同车队友“不是人”

白洞计划

SOFA Serverless 体系助力业务极速研发

SOFAStack

开源 Serverless springboot GitHub、 SOFA

数据仓库ETL管理平台TASKCTL调度计划控制原理

敏捷调度TASKCTL

程序员 DevOps 分布式 数据仓库 ETL

C语言-strlen与sizeof区别

芒果酱

c++ 编程语言 C语言 5月月更

企评家| 嘉凯城集团股份有限公司成长性评价报告摘要

企评家

ansible 模块:template

ghostwritten

ansible

ansible 模块:modprobe

ghostwritten

ansible

iframe框架

恒山其若陋兮

5月月更

深入了解 Flutter 的状态管理机制(下)

岛上码农

flutter 移动端 安卓开发 ios 开发 5月月更

ansible 模块:pause

ghostwritten

ansible

DDD实战(10):冲刺1战术之服务设计(下)及技术决策

深清秋

DDD 软件架构 软件设计 生鲜电商系统 5月月更

40万年才能遇到外星人,是怎么算出来的?

脑极体

制作网站的FAQ时,需要考虑哪些功能,要有哪些注意事项

小炮

FAQ

String源码解析-String的使用注意

zarmnosaj

5月月更

直播预告|企业智能化转型Meetup V1

星策开源社区

AI BI 智能化转型

企评家|四川美丰化工股份有限公司成长性报告简述

企评家

spring中如何自己去实现一个starter

ZuccRoger

5月月更

ansible 模块:lineinfile

ghostwritten

ansible

手慢无!Alibaba五份自研Java程序员进阶宝典限时开源(开发手册+面试指南+性能优化+机器学习+架构手册)

Java全栈架构师

Java 程序员 架构 面试 程序人生

企评家 | 从机器学习刻画企业成长性画像

企评家

ansible 模块:systemd

ghostwritten

ansible systemd

根因分析思路方法总结|保障IT系统及其稳定性

云智慧AIOps社区

算法 监控 根因分析 智能运维

“Trojan Source”算法漏洞几乎影响所有代码的安全_语言 & 开发_Brian Krebs_InfoQ精选文章