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