当前位置: 首页 > 科技观察

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

时间:2023-03-20 18:35:43 科技观察

漏洞和攻击无处不在。最近,剑桥大学的两名研究人员发现了一个漏洞——TrojanSource——可以影响计算机代码编译器和软件开发环境。该漏洞影响几乎所有计算机语言,包括C、C++、C#、JavaScript、Java、Rust、Go和Python。此外,恶意代码可以使用TrojanSource进行供应链攻击。论文地址:https://trojansource.codes/trojan-source.pdfGitHub地址:https://github.com/nicbboucher/trojan-sourceTrojan源码攻击方式采用字符编码标准Unicode,有以下两种攻击方式:第一种是通过Unicode的Bidi算法(CVE-2021-42574),该算法处理从左到右(如英语)和从右到左(如阿拉伯语和希伯来语)的脚本显示顺序。该漏洞允许对字符进行视觉重新排序,以便它们以与编译器和解释器不同的逻辑顺序出现;第二种是同源攻击(CVE-2021-42694),其中两个不同的字符具有相似的视觉表示形式,例如拉丁文H和西里尔文Н。研究人员表示,如果攻击者通过逃避人工审查成功地将目标漏洞提交到开源代码中,下游软件可能会继承该漏洞。在他们在GitHub上的存储库中,他们提供了一个概念验证(PoC)脚本。木马源攻击字符重排序方法Unicode标准规定内存表示顺序称为逻辑顺序。当文本在一行中时,大多数脚本从左到右显示字符(例如英文)。但是,也有一些脚本(例如阿拉伯语或希伯来语)从右到左显示文本的自然顺序。当混合具有不同显示顺序的脚本时,必须有一种确定性的方法来解决方向冲突。对于Unicode,可以实现双向或双向算法。在某些场景下,Bidi算法设置的默认排序可能不够用。对于这些情况,Bidi算法提供覆盖控制字符。Bidi算法覆盖不可见的字符,允许切换字符组的显示顺序。例如,考虑以下Unicode字符序列:RLIabcPDI,将显示为:cba。下面的表I提供了与此攻击相关的控制字符列表:IsolateReorderingMode也就是说,当显示顺序被覆盖时,整个A组字符将作为一个块移动,并且isolates可以嵌套。假设Unicode字符是:RLILRI456PDILRI123PDIPDI,那么它会显示为:123456。将多层LRI和RLI相互嵌入使得字符串几乎可以任意重新排序.然后攻击者可以通过在当前开源项目中插入想要的功能,在当前开源项目中插入乱码,让用户下载执行,从而在不知情的情况下执行存在漏洞的代码。语法合规性大多数设计良好的编程语言不允许在源代码中使用任意控制字??符,因为它们被认为是影响逻辑的标记。因此,在源代码中随意放置Bidi覆盖字符通常会导致编译器或解释器语法错误。为了避免此类错误,我们可以利用以下两个编程语言的原则:注解:大多数编程语言允许编译器和解释器忽略所有文本(包括控制字符)注解;字符串:许多编程语言允许字符串包含任何字符,包括控制字符。虽然注释和字符串都具有特定于语法的语义来指示它们的开始和结束,但Bidi覆盖范围不遵守这些边界。因此,通过将Bidi覆盖字符专门放在注释和字符串中,我们能够以大多数编译器可接受的方式将它们注入源代码。例子表明通过任意一个控制字符改变代码逻辑如下图所示。下面代码中的if条件并没有执行,而是放在了注释部分,程序显示效果起到了欺骗用户的作用。研究人员还展示了如何在C++中执行同源文字攻击。他们使用了两个看起来相似但实际上不同的H,蓝色的拉丁字母H和红色的西里尔字母Н。编译后,程序输出文本“再见,世界!”。加强防御此类攻击很难检测到,因为呈现的源代码看起来很完美。如果逻辑上的变化非常细微以至于在后续测试中未被发现,则攻击者可能会引入有针对性的漏洞而不被发现。同样令人担忧的是,Bidi覆盖通过复制和粘贴操作在浏??览器、编辑器和操作系统中持续存在。“开发人员可能通过将代码从不受信任的来源复制到受保护的代码库中,无意中引入了一个无形的漏洞,”安德森说,他是剑桥大学计算机安全教授,也是该研究的合著者。“这种代码重复是现实世界安全漏洞的重要来源,”约翰霍普金斯信息安全研究所副教授马修格林说。按照研究人员的意图进行编码。”好消息是研究人员进行了广泛的漏洞扫描,目前还没有人利用过这个漏洞。坏消息是,目前还没有针对此的防御措施,将来可能有人会利用此漏洞造成一些破坏。Green表示:希望编译器和代码编辑器的开发者能够尽快修补这个漏洞!但是由于有些人不定期更新他们的开发工具,所以存在一些风险,至少在一段时间内是这样。来源:XKCD.com/2347/加州大学伯克利分校计算机科学系讲师NicholasWeaver表示,剑桥提出了一套非常简单优雅的攻击方法,可能会使供应链攻击变得更加严重。韦弗说,人类已经很难从源代码中区分“这是好的,这是邪恶的”。对于这种攻击,您可以使用重定向来更改注释和字符串的显示方式,例如“Thisisokay”只是一个表示,但“Thisis”okay是它在代码中的存在方式。幸运的是,它有一个非常容易扫描的标志,因此编译器以后遇到它时可以“检测”到它。研究人员说,在最初的披露期间,该软件公司提供了99天的禁运期,允许受影响的产品通过软件更新得到修复。“我们收到了各种各样的回应,包括修复承诺、漏洞赏金计划、快速解雇等等,”研究人员写道。“与我们合作的19家软件供应商中有七家使用外包平台接收漏洞。”披露,6个有专门的漏洞披露门户,4个接受通过PGP加密电子邮件进行的披露,2个仅接受通过非PGP电子邮件进行的披露。他们都承认收到了我们的披露,并最终9承诺发布补丁。此外,还有11位收件人拥有为漏洞披露付费的漏洞赏金计划。但研究人员报告说,只有五个支付了赏金,平均支付了2,246美元。“到目前为止,大约一半的组织已经承诺提供补丁,而其他组织则在拖延时间,”安德森说。接下来我们会监控他们的部署,也期待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【本文为《机器之心》专栏原文翻译,微信公众号“机器之心(id:almosthuman2014)”】点此阅读更多关于作者的好文