开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

“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:305895
用户头像
罗燕珊 AI practitioner | Tech media

发布了 507 篇内容, 共 354.8 次阅读, 收获喜欢 818 次。

关注

评论

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

固定QPS压测模式探索

FunTester

性能测试 测试框架 压力测试 QPS FunTester

聊聊汽车ECU中单片机开发

SOA开发者

车载控制单元

评审通过,开建!

云计算,

AUTOSAR基础篇之DTC

SOA开发者

软件 汽车 OTA ADAS

Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述

蚂蚁集团移动开发平台 mPaaS

支付宝 mPaaS native 客户端 cube

产品资讯 | mPaaS 10.1.68 适配 iOS 15

蚂蚁集团移动开发平台 mPaaS

ios 移动开发 mPaaS

书单 | 读了这10本书,再也不怕黑客攻击了

博文视点Broadview

饿了么4面(Java岗)面经分享,如何在面试中通过工厂模式来给自己加分

Java 程序员 后端

教你用Python 编写 Hadoop MapReduce 程序

华为云开发者联盟

Python hadoop 数据仓库 Hadoop Streaming Hadoop MapReduce

Pulsar 用户案例|消息队列上云挑战与方案:腾讯云的 Apache Pulsar 实践

Apache Pulsar

Apache Pulsar

一周信创舆情观察(9.6~9.12)

统小信uos

架构实战营第一期 -- 模块八作业

clay

架构实战营

CANN AICPU算子耗时分析及优化探索

华为云开发者联盟

tensorflow 测试 算子 CANN算子 算子耗时

k8s 驱逐pod疑惑

Geek_f24c45

Kubernetes kubelet

饿了么4面(Java岗)面经分享,Java技术专家需要掌握的技能

Java 程序员 后端

高并发下HashMap的死循环是怎么形成的,Java基础知识点汇总

Java 程序员 后端

高并发下HashMap的死循环是怎么形成的,熬夜整理Java高频面试题

Java 程序员 后端

得物技术沙龙iOS专场

得物技术

ios 分享 周报 技术分享 技术沙龙

【通知】2021年“绿城杯”网络安全大赛开始报名啦!

郑州埃文科技

C++20 Concepts 极简介绍

董一凡

c++

极客时间企业版|数字化转型专题讲座天津站圆满结束

InfoQ 天津

护理业务查房PPT模板-优页文档

momo

PT模板 T模板 优页文档

一文搞懂如何使用Node.js进行TCP网络通信

华为云开发者联盟

node.js TCP 网络 网络通信 TCP服务器

1行代码爬CSDN热榜,Python哈啤酒式写法

梦想橡皮擦

9月日更

高并发下HashMap的死循环是怎么形成的,Java自学宝典pdf

Java 程序员 后端

手撸二叉树之层序遍历

HelloWorld杰少

9月日更

解析鸿蒙内核消息队列QueueMail接口的哼哈二将

华为云开发者联盟

鸿蒙 接口 队列 消息队列 QueueMail

孕蕾、护花、促果:展锐深耕芯片“三步曲”

脑极体

如何同时压测创建和删除接口

FunTester

性能测试 接口测试 测试框架 压力测试 FunTester

Python对文件的操作

在即

9月日更

数据通信网络基础

Regan Yue

华为数据通信 9月日更 数据通信

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