智能手表、智能家居設備甚至智能汽車等互聯(lián)設備紛紛加入物聯(lián)網(wǎng)生態(tài)系統(tǒng),因此確保其安全性的重要性已顯而易見。
眾所周知,如今智能設備已成為我們生活中不可分割的一部分,且已經(jīng)成為網(wǎng)絡攻擊的對象。針對物聯(lián)網(wǎng)設備的惡意軟件已經(jīng)存在了十多年。Hydra是第一個自動運行的路由器惡意軟件,它于2008年以一種開源工具的形式出現(xiàn)。Hydra是路由器惡意軟件的開源原型,Hydra之后不久,針對網(wǎng)絡設備的惡意軟件也被發(fā)現(xiàn)。從那時起,各種僵尸網(wǎng)絡家族已經(jīng)出現(xiàn)并得到廣泛傳播,其中包括Mirai,Hajime和Gafgyt等家族。
今年5月安全研究團隊就發(fā)現(xiàn)了一種名為“Kaiji”的惡意軟件,該惡意軟件專門用于感染基于Linux的服務器和智能物聯(lián)網(wǎng)(IoT)設備,然后黑客會濫用這些系統(tǒng)發(fā)起DDoS攻擊。
根據(jù)Allot的數(shù)據(jù),到2022年,將有120億臺聯(lián)網(wǎng)設備,這些設備可能會使5G網(wǎng)絡的安全過載,并擴大勒索軟件和僵尸網(wǎng)絡等威脅的范圍。
一些已知的主要分布式拒絕服務(DDoS)攻擊或拒絕分布式服務都是基于物聯(lián)網(wǎng)設備的。最著名的例子之一是2016年10月由Mirai惡意軟件中的物聯(lián)網(wǎng)僵尸網(wǎng)絡引起的1GbpsDDoS網(wǎng)絡攻擊。黑客摧毀了DNS提供商的服務器,癱瘓了美國東海岸的大部分互聯(lián)網(wǎng),包括Twitter、Netflix和CNN等服務?,F(xiàn)在,Mirai的一個新變種BotnetMukashi出現(xiàn)了,主要針對連接到網(wǎng)絡的存儲設備上的關(guān)鍵漏洞。
隨著帶寬和5G在運營商網(wǎng)絡中產(chǎn)生新的威脅和攻擊手段的不斷提高,實時的威脅檢測顯得尤為重要。不幸的是,目前可用的保護筆記本電腦和手機等設備的安全解決方案在保護物聯(lián)網(wǎng)設備(如監(jiān)控攝像頭和數(shù)字信號)方面毫無準備。除了上述惡意軟件外,物聯(lián)網(wǎng)設備(例如Zigbee)中使用的通信協(xié)議中還存在一些漏洞,攻擊者可以利用這些漏洞來將設備定為目標并將惡意軟件傳播到網(wǎng)絡中的其他設備,類似于計算機蠕蟲。
在這項研究中,我們專注于尋找針對物聯(lián)網(wǎng)設備的低級復雜攻擊,特別是,更深入地研究物聯(lián)網(wǎng)設備的固件,以發(fā)現(xiàn)后門植入、啟動過程的修改以及對固件不同部分的其他惡意修改。
現(xiàn)在,讓我們討論一下物聯(lián)網(wǎng)設備的固件結(jié)構(gòu),以便更好地了解不同的組件。
物聯(lián)網(wǎng)固件結(jié)構(gòu)
無論物聯(lián)網(wǎng)設備的CPU架構(gòu)如何,啟動過程都包括以下幾個階段:啟動加載程序,內(nèi)核和文件系統(tǒng)(如下圖所示)。當物聯(lián)網(wǎng)設備打開時,板載SoC (System on Chip) ROM中的代碼將控制權(quán)傳遞給啟動加載程序,該啟動加載程序加載內(nèi)核,然后內(nèi)核安裝根文件系統(tǒng)。
啟動加載程序、內(nèi)核和文件系統(tǒng)也包含典型的物聯(lián)網(wǎng)固件的三個主要組件。
物聯(lián)網(wǎng)啟動過程
在物聯(lián)網(wǎng)設備中有各種各樣的CPU架構(gòu),因此要想分析和理解固件的不同組件,需要對這些架構(gòu)以及它們的指令集有良好的了解。物聯(lián)網(wǎng)設備中最常見的CPU架構(gòu)是:
· ARM
· MIPS
· PowerPC
· SPARC
可能的攻擊場景
通過了解固件結(jié)構(gòu),我們可以考慮攻擊者在部署難以檢測的隱身攻擊時如何利用各種組件。
啟動加載程序是控制系統(tǒng)的第一個組件,因此,針對啟動加載程序為攻擊者提供了執(zhí)行惡意任務的絕好機會,這也意味著重新啟動后攻擊可以保持持久性。
攻擊者還可以操縱內(nèi)核模塊,大多數(shù)物聯(lián)網(wǎng)設備使用Linux內(nèi)核。對于開發(fā)人員來說,自定義Linux內(nèi)核并從中選擇所需的內(nèi)容非常容易,設法訪問和操縱設備固件的攻擊者也可以添加或編輯內(nèi)核模塊。
繼續(xù)討論文件系統(tǒng),物聯(lián)網(wǎng)設備中還使用了許多常用文件系統(tǒng)。這些文件系統(tǒng)通常易于使用。攻擊者可以從固件中提取、解壓縮并安裝原始文件系統(tǒng),添加惡意模塊然后使用常用工具再次對其進行壓縮。例如,SquashFS是Linux的壓縮文件系統(tǒng),在物聯(lián)網(wǎng)制造商中非常普遍。使用Linux實用程序“squashfs”和“unsquashfs”掛載或解壓縮SquashFS文件系統(tǒng)非常簡單。
獲取固件
有多種獲取固件的方法,有時你希望所獲取的固件屬于具有相同規(guī)格的完全相同的設備。并且你還希望通過某些特定方式將其部署在設備上。例如,你懷疑更新固件所通過的網(wǎng)絡已經(jīng)被破壞,并且考慮固件在供應商服務器和設備之間的轉(zhuǎn)換過程中被操縱的可能性,因此你希望調(diào)查更新的固件以驗證其完整性。在另一個示例場景中,你可能從第三方供應商購買了設備,并對固件的真實性產(chǎn)生懷疑。
在眾多的物聯(lián)網(wǎng)設備中,制造商沒有通過任何方式來訪問固件,甚至不進行更新,該設備將在其使用壽命內(nèi)從制造商處發(fā)布并附帶固件。
在這種情況下,獲取確切固件的最可靠方法是從設備本身提取固件。這里的主要挑戰(zhàn)是,此過程需要具有特定領(lǐng)域的知識,以及使用嵌入式系統(tǒng)的專業(yè)硬件/軟件經(jīng)驗。如果你希望找到針對物聯(lián)網(wǎng)設備的復雜攻擊,那么這種方法也缺乏可擴展性。
在獲取物聯(lián)網(wǎng)固件的各種方法中,最簡單的方法是從設備制造商的網(wǎng)站下載固件。但是,并非所有制造商都在其網(wǎng)站上發(fā)布其固件。通常,只能通過設備物理界面或用于管理設備的特定軟件應用程序(例如移動應用程序)來更新大量物聯(lián)網(wǎng)設備。
從供應商的網(wǎng)站下載固件時,常見的問題是你可能無法找到特定設備型號的固件的較早版本。我們也不要忘記,在許多情況下,發(fā)布的固件二進制文件都是加密的,只能通過設備上安裝的較舊的固件模塊進行解密。
了解固件
根據(jù)維基百科的說法,“固件是一類特定的計算機軟件,可為設備的特定硬件提供底層控制。固件既可以為更復雜的設備軟件提供標準化的操作環(huán)境(允許更多的硬件獨立性),也可以為不那么復雜的設備充當設備的完整操作系統(tǒng),執(zhí)行所有控制、監(jiān)控和數(shù)據(jù)處理功能?!?/p>
盡管固件的主要組件幾乎總是相同的,但沒有針對固件的標準體系結(jié)構(gòu)。
固件的主要組件通常是啟動加載程序、內(nèi)核模塊和文件系統(tǒng)。但是在固件二進制文件中可以找到許多其他組件,例如設備樹、數(shù)字證書以及其他設備特定的資源和組件。
從供應商的網(wǎng)站上檢索到固件二進制文件后,我們就可以開始對其進行分析并拆解??紤]到固件的特殊性,其分析非常具有挑戰(zhàn)性,并且相當復雜。要獲取有關(guān)這些挑戰(zhàn)以及如何應對這些挑戰(zhàn)的更多詳細信息,請參閱“物聯(lián)網(wǎng)固件分析”部分。
在固件中查找可疑元素
提取固件的組件后,你可以開始尋找可疑的模塊、代碼片段或任何對組件的惡意修改。
首先,很簡單的步驟是根據(jù)一組YARA規(guī)則掃描文件系統(tǒng)內(nèi)容,這些規(guī)則可以基于已知的物聯(lián)網(wǎng)惡意軟件或啟發(fā)式規(guī)則,你也可以使用防病毒掃描程序掃描提取的文件系統(tǒng)內(nèi)容。
你可以做的其他事情就是在文件系統(tǒng)中查找啟動腳本,這些腳本包含每次系統(tǒng)啟動時都會加載的模塊列表,惡意模塊的地址可能是出于惡意目的而被插入到了這樣的腳本中。
這樣,F(xiàn)irmwalker工具可以幫助掃描提取的文件系統(tǒng)中可能存在漏洞的文件。
另一個需要研究的地方是啟動加載程序組件,不過這更具有挑戰(zhàn)性。
物聯(lián)網(wǎng)設備中使用了許多常見的啟動加載程序,其中最常見的是U Boot。U Boot具有高度可定制性,這使得很難確定編譯后的代碼是否已被操縱。使用不常見或自定義的啟動加載程序,查找惡意修改會變得更加復雜。