源代码木马
计算机发展的早期,是荒蛮时代,人们能把石头加工能石斧、石刀等利器就不错了,不会考虑什么安全问题。
进入青铜时代后,人们才会考虑到安全问题,为剑设计护手/剑格,配上剑鞘。
软件也是一样。以前人们重视软件开发速率,现在由于安全问题越来越重要,以至于人们不得不放慢脚步。
Ken Thompson是美国计算机科学家的先驱。Thompson 的大半生都在贝尔实验室工作,设计和实现了unix操作系统的原型。发明了B语言,即C语言的前身,plan9操作系统的早前开发者之一。2006开始在google工作,合作开发了go语言。
Ken Thompson于1983年在ACM上发表的图灵奖演讲承认,在早期Unix版本中存在后门,这可能是有史以来最凶悍的安全黑客。
在此方案中,C编译器包含的代码可以识别编译登录命令的代码,并插入一些代码来识别Thompson选择的密码,从而无论是否为他创建的帐户,他都可以进入系统。
通常,可以通过从编译器的源代码中删除后门并重新编译该编译器来删除后门。但是要重新编译该编译器,您必须使用该编译器。
因此Thompson还安排了编译器在编译其自身版本时将能够识别的功能,并将木马代码插入到重新编译的编译器中,以将代码插入到重新编译的登录名中,以允许Thompson登录,当然还有用于识别自身的代码,并在下次再次执行整个操作!
完成一次之后,他便能够一直重新编译携带木马的编译器。黑客无形地永存,使后门留在原地,活跃着,但源头却丝毫没有踪影。
几十年前中美黑客大战,中国红客本来以为有一战之力,后来发现自己使用的计算机编码( GBK,Unicode等)都是美国人设计的,美国人在设计这些编码时,其实已经考虑到后门、木马问题,方便未来按图索骥。所以中国红客最终发现自己就象穿着“新衣”的皇帝,其实是一丝不挂。
但是故事并没有结束,最近,剑桥大学研究人员发现了一个影响大多数计算机代码编译器和许多软件开发环境的漏洞。
漏洞源于Unicode 的一个组件。Unicode 目前在154 种不同的语言脚本中定义了超过143,000 个字符(除了许多非脚本字符集,例如表情符号)。
具体而言,该弱点涉及Unicode的bi-directional (Bidi)算法 ,该在处理包含具有不同显示顺序的混合脚本的显示文本,例如阿拉伯语(从右到左阅读)和英语(从左到右)。但是计算机系统需要有一种确定性的方法来解决文本中的方向冲突。
输入“Bidi override”,可用于使从左到右的文本从右到左阅读,反之亦然。
在某些情况下,Bidi 算法设置的默认排序可能不够,对于这些情况,Bidi 覆盖控制字符可以切换字符组的显示顺序。Bidi 覆盖甚至可以以不同于其逻辑编码的顺序显示单个脚本字符。
这个特性以前曾被用来伪装通过电子邮件传播的恶意软件的文件扩展名 。问题在于大多数编程语言都允许将这些 Bidi 覆盖放在注释和字符串中。 大多数编程语言都允许注释中的所有文本(包括 控制字符 )都被编译器和解释器忽略。
该研究论文将该漏洞称为Trojan Source(源代码木马) ,指出虽然注释和字符串都具有指示其开始和结束的特定于语法的语义, 但Bidi覆盖不遵守这些界限 。
源代码木马漏洞几乎影响所有计算机语言,虽然不能直接利用,但是利用协作平台和库组件的供应链攻击。
Rust 语言的rustc编译器已发布针对此安全漏洞 安全公告,其被跟踪为 CVE-2021-42574 和 CVE-2021-42694。