Trojan Source:源碼漏洞隱藏技術分析
研究人員發(fā)現(xiàn)可在源碼中隱藏惡意代碼的漏洞。
濫用文本編碼標準
英國劍橋大學研究人員Nicholas Boucher和Ross Anderson發(fā)現(xiàn)了一種可以在源碼中隱藏漏洞的新方法——Trojan Source。與傳統(tǒng)的插入邏輯漏洞相比,研究人員發(fā)現(xiàn)可以通過攻擊源碼文件的編碼方式來注入漏洞。Trojan Source攻擊對軟件和供應鏈來說是巨大的威脅。
研究人員發(fā)現(xiàn)用C、C++、C#、JavaScript、Java、Rust、Go和Python編寫的項目都可能會成為攻擊者的目標。具體的方式就是使用Unicode控制字符來對源碼中的token進行在編碼層進行重新排序。攻擊利用Unicode這樣的文本編碼標準中的微小差異(變化)來生成源碼,將token邏輯嵌入到不同的順序中,使得漏洞無法被人類觀察者感知到。
通過利用嵌入在注釋和字符串中的控制字符,攻擊者可以對源碼邏輯進行重新排序以實現(xiàn)新的邏輯,并創(chuàng)建一個可利用的漏洞。
雙向和同形字攻擊
研究人員指出其中一種攻擊方式就是對雙向文本使用Unicode控制以表明內容展示的方向。該方法CVE編號為CVE-2021-42574。
雙向控制LRI和RLI是不可見的字符。但這并不是唯一不可見的字符。此外,通過注入這些指令,編譯器可以編譯出與人眼看到的完全不同的代碼。
如下圖所示,通過對第二行的字符進行RLI/LRI控制,人眼認為其是編譯器會忽略的注釋,但事實并不是。
rojan Source攻擊——雙向控制覆寫字符
另一種攻擊方式是同形字攻擊,CVE編號為CVE-2021-42694。即利用看著很像的不同字符,比如數(shù)字0和字母O,小寫的l和大寫的I。
Trojan Source 攻擊—— 同形字
PoC
研究人員對多個主流的代碼編輯器和基于web的庫進行了Trojan Source攻擊測試,發(fā)現(xiàn)大多數(shù)受測的代碼編輯器和基于web的庫都受到Trojan Source攻擊的影響。
PoC代碼參見:https://github.com/nickboucher/trojan-source
其他
7月25日,研究人員通知了受到Trojan Source攻擊影響的產品維護廠商,并設置了一個99天的漏洞修復期限。研究人員從其中5個廠商收到了平均2246美元的漏洞獎勵。
雖然目前大多數(shù)編譯器是無法應對Trojan Source攻擊的,但有3個廠商稱正在部署針對Trojan Source攻擊的防護措施。
關于Trojan Source攻擊的論文下載地址:https://www.trojansource.codes/trojan-source.pdf
本文翻譯自:
https://www.bleepingcomputer.com/news/security/trojan-source-attack-method-can-hide-bugs-into-open-source-code/