新的“特洛伊木马源”技术让黑客可以隐藏源代码中的漏洞

威胁参与者可以利用一类新的漏洞,以语义上允许的方式注入视觉上具有欺骗性的恶意软件,但会改变源代码定义的逻辑,从而有效地为更多第一方和供应链风险打开大门。
这项被称为“特洛伊木马源攻击”的技术“利用Unicode等文本编码标准中的微妙之处,生成源代码,其令牌的逻辑编码顺序与它们的显示顺序不同,从而导致人类代码审阅者无法直接察觉的漏洞”,剑桥大学研究人员尼古拉斯·鲍彻和罗斯·安德森在一篇新发表的论文中说。
漏洞—;跟踪为CVE-2021-42574和CVE-2021-42694—;影响所有流行的编程语言的编译器,如C、C++、C语言、JavaScript、java、RISE、GO和Python。
编译器是将高级人类可读源代码转换为低级表示的程序,如汇编语言、目标代码或机器代码,然后由操作系统执行。
核心问题是Unicode的双向(或Bidi)算法,该算法支持从左到右(如英语)和从右到左(如阿拉伯语或希伯来语)语言,还具有所谓的双向重写功能,允许在从右到左的句子中写从左到右的单词,反之亦然,因此,可以在大块文本中嵌入不同阅读方向的文本。
虽然编译器的输出预计能正确实现提供给它的源代码,但在注释和字符串中插入Unicode Bidi覆盖字符所产生的差异可能会导致产生语法有效的源代码,其中字符的显示顺序表示与实际逻辑不同的逻辑。
换句话说,攻击的工作原理是以源代码文件的编码为目标,精心设计目标漏洞,而不是故意引入逻辑错误,以便在源代码中直观地重新排序标记,这些标记虽然以完全可接受的方式呈现,诱使编译器以不同的方式处理代码,并彻底改变程序流程—;e、 例如,让评论看起来像是代码。
研究人员推测,“实际上,我们把程序A改成了程序B。”。“如果逻辑上的变化非常微妙,以至于在后续测试中无法被检测到,那么对手可能会引入目标漏洞,而不会被检测到。”
研究人员警告称,当注入开源软件的无形软件漏洞流向下游时,这种对抗性编码可能会对供应链产生严重影响,可能会影响软件的所有用户。更糟糕的是,如果攻击者使用同形符重新定义上游软件包中预先存在的函数并从受害者程序调用它们,特洛伊木马源攻击可能会变得更加严重。
通过将拉丁字母替换为其他Unicode系列集合中的相似字符(例如,将“H”改为西里尔字母“H”),威胁参与者可以创建一个看似与原始函数相似但实际上包含恶意代码的同形符函数,然后可以将其添加到开源项目中,而不会引起太多关注。文章指出,当针对通过导入的依赖项或库可用的公共函数应用这种攻击时,可能会造成灾难性的后果。
研究人员指出:“特洛伊木马源漏洞影响几乎所有计算机语言,这一事实使得在全系统范围内、在生态上有效的跨平台和跨供应商比较响应成为一个难得的机会。”。“由于使用这些技术可以轻松发起强大的供应链攻击,参与软件供应链的组织实施防御至关重要。”