机器之心报道
编辑:陈萍
最近 , 剑桥大学的研究者公布了一种名为 Trojan-Source 漏洞 , 可能危及软件和第一手供应链 。
文章图片
漏洞与攻击无处不在 。 最近 , 剑桥大学的两位研究人员发现了一个可以影响计算机代码编译器和软件开发环境的漏洞——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
- 第一种是通过 Unicode 的 Bidi 算法(CVE-2021-42574) , 该算法处理从左到右(如英语)和从右到左(如阿拉伯语和希伯来语)脚本显示顺序 。 该漏洞允许对字符进行视觉上的重新排序 , 使其呈现与编译器和解释器所不同的逻辑顺序;
- 第二种是同源攻击 (CVE-2021-42694) , 两个不同的字符具有相似的视觉表示 , 例如拉丁语 H 和西里尔字母Н 。
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 覆盖字符通常会导致编译器或解释器语法错误 。 为了避免这种错误 , 我们可以利用编程语言的以下两个原则:
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
