從NotPetya到SolarWinds,這是一個(gè)不會(huì)很快消失的問題。
長(zhǎng)期以來,網(wǎng)絡(luò)安全問題一直被老生常談地用一些簡(jiǎn)單的信任術(shù)語來描述:要提防陌生來源的電子郵件附件,不要將憑據(jù)交給欺詐性網(wǎng)站。但是,越來越多老練的黑客正在破壞這種基本的信任感,并提出一個(gè)關(guān)鍵性問題:如果構(gòu)成網(wǎng)絡(luò)的合法硬件和軟件從源頭上受到損害怎么辦?
這就是供應(yīng)鏈攻擊,一種攻擊者將惡意代碼甚至惡意組件插入受信任的軟件或硬件中的攻擊方式。通過攻擊單個(gè)供應(yīng)商,攻擊者可以劫持其分發(fā)系統(tǒng),將供應(yīng)商銷售的任何應(yīng)用程序、推出的任何軟件更新,甚至是他們運(yùn)送給客戶的物理設(shè)備,都變成特洛伊木馬。
通過一次“適當(dāng)”的入侵,攻擊者就能以供應(yīng)商的客戶網(wǎng)絡(luò)為跳板,斬獲成百上千的受害者。這是因?yàn)楣粽咔宄蛻羰切湃纹湔麄€(gè)生態(tài)的,包括信任自己的供應(yīng)商的。他們“巧妙地”利用了這些信任。
從編譯器開始的信任摧毀
供應(yīng)鏈威脅的嚴(yán)重性在去年 12 月得到了大規(guī)模證明。俄羅斯黑客(后來被美國(guó)指認(rèn)為俄羅斯情報(bào)機(jī)構(gòu) SVR)入侵了軟件公司 SolarWinds 并在其 IT 管理工具 Orion 中植入了惡意代碼,從而允許訪問全球使用該應(yīng)用程序的多達(dá) 18000 個(gè)網(wǎng)絡(luò)。攻擊者甚至利用這個(gè)立足點(diǎn)深入挖掘了至少9個(gè)美國(guó)聯(lián)邦機(jī)構(gòu)的網(wǎng)絡(luò),包括 NASA、美國(guó)國(guó)務(wù)院、國(guó)防部和司法部。
無獨(dú)有偶。就在上個(gè)月,有消息稱黑客入侵了CodeCov公司出售的軟件開發(fā)工具,該工具使黑客能夠訪問數(shù)百個(gè)受害者的網(wǎng)絡(luò)。2017年名為Sandworm的俄羅斯黑客組織(隸屬于俄羅斯GRU軍事情報(bào)部門)則劫持了烏克蘭會(huì)計(jì)軟件 MEDoc的軟件更新,并利用軟件更新來分發(fā) NotPetya代碼,最終在全球造成 100 億美元的損失。
事實(shí)上,最早的供應(yīng)鏈攻擊大約在40年前就首次出現(xiàn)。
當(dāng)時(shí)Unix操作系統(tǒng)的創(chuàng)造者之一Ken Thompson想看看他是否可以在Unix的登錄功能中隱藏一個(gè)后門。因此,Ken Thompson自己植入了一段惡意代碼,這使他能夠登錄任何系統(tǒng),并且他還構(gòu)建了一個(gè)編譯器,一個(gè)將可讀源代碼轉(zhuǎn)換為機(jī)器可讀的可執(zhí)行程序的工具。該工具會(huì)在編譯時(shí)秘密地將后門放置在函數(shù)中,接著,Ken Thompson進(jìn)一步地破壞了編譯編譯器的工具。
簡(jiǎn)單來說,這是一種編譯器“學(xué)會(huì)”編譯后門,并在將來的編譯器代碼中移除它從而無法在源碼中發(fā)現(xiàn)篡改痕跡,最終利用人們對(duì)編譯器的信任來激活后門的攻擊方式。
1984 年,Ken Thompson在的一次演講中分享了這件事,他說“你不能相信不是完全由你自己創(chuàng)造的代碼(尤其是那些雇用像我這樣的人的公司的代碼)?!?/p>
此后,2015年的PoC||GTFO電子雜志上也刊登了一篇名為Deniable Backdoors Using Compiler Bugs的文章,講述如何通過一個(gè)可利用的編譯器 miscompilation bug,并且向目標(biāo)的開源社區(qū)提交看起來不怎么像后門的patch,從而實(shí)現(xiàn)提權(quán)。這種針對(duì)特定版本的編譯器的利用方式更為隱蔽更難察覺。有興趣的可以自己看一下原文:https://www.alchemistowl.org/pocorgtfo/pocorgtfo08.pdfDeniable Backdoors Using Compiler Bugs的作者當(dāng)時(shí)也對(duì)開源社區(qū)防御后門植入提出了相應(yīng)建議,雖然文章距今數(shù)年,但仍然具備參考價(jià)值。
編譯器開發(fā)人員
盡快修復(fù)已知的錯(cuò)誤編譯bug
考慮將錯(cuò)誤編譯bug的修復(fù)程序向后移植(backport)到維護(hù)版本中使用fuzz工具尋找問題
開源包的維護(hù)人員
對(duì)提交過來的奇怪的patch持懷疑態(tài)度
考慮重寫patch
操作系統(tǒng)打包人員
在選擇系統(tǒng)編譯器之前評(píng)估編譯器的可靠性
在所有平臺(tái)上測(cè)試編譯代碼后再開始部署
在系統(tǒng)編譯器上運(yùn)行trusting trust test測(cè)試終端用戶
使用不同的編譯器或編譯器版本從源代碼重新編譯系統(tǒng)在預(yù)編譯的應(yīng)用程序上運(yùn)行驗(yàn)收測(cè)試
研究人員
創(chuàng)建可以被證明不會(huì)被此種方式利用的編譯器
創(chuàng)建可檢測(cè)到 miscompilation的編譯驗(yàn)證功能創(chuàng)建可在后門執(zhí)行中檢測(cè)到的多版本編程系統(tǒng)
用“不完全信任”瓦解供應(yīng)鏈攻擊
研究認(rèn)為,供應(yīng)鏈攻擊的增長(zhǎng)是因?yàn)榛竟舴烙呀?jīng)得到改善,因此黑客不得不尋求更為脆弱的入口。而且供應(yīng)鏈攻擊的規(guī)模效應(yīng)——破壞一個(gè)供應(yīng)商即可訪問上百個(gè)網(wǎng)絡(luò),也讓黑客覺得“物超所值”。
預(yù)防未來的供應(yīng)鏈攻擊并非易事,公司也沒有簡(jiǎn)單的方法來確保他們購(gòu)買的軟件和硬件沒有被損壞。
注:硬件供應(yīng)鏈攻擊,攻擊者在設(shè)備中植入惡意代碼或組件,一般特別難以檢測(cè)。
因此,美國(guó)網(wǎng)絡(luò)安全和基礎(chǔ)設(shè)施安全局的高級(jí)顧問 Beau Woods 認(rèn)為,供應(yīng)鏈攻擊的解決方案與其說是技術(shù)上的,不如說是組織上的。公司和政府機(jī)構(gòu)需要知道他們的軟件和硬件供應(yīng)商是誰,對(duì)他們進(jìn)行審查,并確保他們符合某些標(biāo)準(zhǔn)。簡(jiǎn)單來說,最好可以簡(jiǎn)化供應(yīng)鏈,讓更少的供應(yīng)商提供更高質(zhì)量的組件,而軟件開發(fā)和 IT 運(yùn)營(yíng)在某些方面也需要重新學(xué)習(xí)這些供應(yīng)鏈原則。
值得注意的是,白宮在早些時(shí)候發(fā)布了網(wǎng)絡(luò)安全行政命令,為任何想要向聯(lián)邦機(jī)構(gòu)出售軟件的公司設(shè)定了新的最低安全標(biāo)準(zhǔn),可以作為一定的參考。
最后,Reflect on Trusting Trust,反思你所信任的。只有不能完全相信任何不是自己編寫的代碼,但是相信你所信任且經(jīng)過審查的供應(yīng)商代碼,或許這是應(yīng)對(duì)供應(yīng)鏈攻擊的理念前提。