在本文中,我們將為讀者詳細介紹如何挖掘物聯網設備中的復雜惡意軟件。
這篇文章的動機之一,就是鼓勵對這個話題感興趣的其他研究人員加入進來,分享自己的想法和知識,建立更多的安全工具,以便更好地保護我們的智能設備。
研究背景
智能手表、智能家居設備甚至智能汽車……隨著越來越多的聯網設備加入物聯網生態系統,確保其安全性的重要性已經變得不言而喻了。
眾所周知,現在已經成為我們生活中不可分割的一部分的智能設備,在面對各種網絡攻擊時,還不是非常安全。實際上,針對物聯網設備的惡意軟件已經存在十多年了。其中,Hydra是第一個已知的自動化路由器惡意軟件,于2008年以開源工具的形式被公之于眾。不過,Hydra只是一個開源的路由器惡意軟件原型。在Hydra問世之后不久,安全專家又發現了針對網絡設備的在野惡意軟件。此后,不同的僵尸網絡家族相繼出現并廣為流傳,包括Mirai、Hajime和Gafgyt等家族。
除了以上提到的惡意軟件外,在物聯網設備中使用的通信協議中也爆出了許多漏洞,比如Zigbee協議,攻擊者可以將某一設備作為攻擊目標,并在得手后向網絡中的其他設備傳播惡意軟件,這種行為非常類似于計算機蠕蟲。
在這項研究中,我們重點挖掘針對物聯網設備的低層復雜攻擊。準確來說,我們將特別關注物聯網設備的固件,以挖掘后門植入、對引導過程的篡改以及對固件其他部分的惡意篡改。
下面,讓我們先來介紹物聯網設備固件的結構,以便更好地了解其中的各個組成部分。
IoT固件結構
無論物聯網設備的CPU采用了哪種架構,啟動過程由以下幾個階段組成:引導加載程序、內核和文件系統(如下圖所示)。當物聯網設備啟動時,板載SoC(片上系統)上的ROM中的代碼首先會將控制權轉移到引導加載程序,之后,引導加載程序將加載內核,而內核則會掛載根文件系統。
引導加載程序、內核和文件系統也構成了典型的物聯網固件的三個主要組成部分。
物聯網設備的引導過程
物聯網設備中使用的CPU架構有很多種。因此,為了分析和理解固件的不同組件,就需要對這些深入了解這些架構以及其指令集。在物聯網設備中,最常見的CPU架構包括:
- ARM
- MIPS
- PowerPC
- SPARC
可能的攻擊場景
了解了固件結構后,我們就可以考察攻擊者在部署難以檢測的隱形攻擊時,會如何利用這些組件了。
引導加載程序是第一個獲得系統控制權的組件。因此,以引導加載程序為目標的攻擊,為攻擊者提供了執行惡意任務的絕佳機會。這也意味著攻擊可以在重啟后保持持久性。
除此之外,攻擊者還可以操縱內核模塊。實際上,大多數物聯網設備使用的都是Linux內核。就像開發者很容易從Linux內核中定制和選擇他們需要的任何東西一樣,一個能夠設法訪問和操縱設備固件的攻擊者也可以添加或編輯內核模塊。
下面,我們來考察文件系統。實際上,許多常用的文件系統都可以用于物聯網設備。這些文件系統通常很容易被攻擊者所利用。攻擊者可以從固件中提取、解壓縮并安裝原始文件系統,添加惡意模塊,然后使用通用實用程序再次對其進行壓縮。例如,SquashFS是一個Linux的壓縮文件系統,在物聯網廠商中相當流行。通過Linux實用程序“squashfs”和“unsquashfs”,我們就可以非常輕松地掛載或解壓SquashFS文件系統。
本研究所面臨的挑戰
獲取固件
實際上,有多種獲取固件的方法。在進行調查時,有時我們希望獲得的固件屬于規格完全相同的設備。同時,我們還希望通過某些特定方式將其部署在設備上。例如,您懷疑用于更新固件的網絡存在安全問題,并且考慮到在供應商的服務器和設備之間進行過渡時固件存在被篡改的可能性,因此,您想調查更新的固件以驗證其完整性。在另一個示例場景中,您的設備可能是從第三方供應商處購買的,并懷疑固件可能被動過手腳了。
除此之外,還有大量的物聯網設備,其制造商根本就沒有實現任何獲取固件的方法,甚至根本沒有考慮要更新固件。也就是說,這些固件從設備出廠之日開始,終生不變。
在這種情況下,獲取這些固件的最可靠方法是從設備本身提取固件。
這里的主要挑戰是,這個過程不僅需要特定領域的相關知識,還需要具備使用嵌入式系統的專業硬件/軟件經驗。如果要挖掘針對IoT設備的復雜攻擊,這種方法也缺乏可擴展性。
在獲得IoT固件的各種方法中,最簡單的方法就是從設備制造商的網站下載固件。但是,并非所有制造商都在其網站上發布其固件。通常情況下,大部分IoT設備只能通過設備物理接口或用于管理設備的特定軟件應用程序(例如移動應用程序)來進行更新。
當從供應商的網站下載固件時,一個常見的問題是,你可能無法找到特定設備型號的舊版本固件。我們也不要忘記,在許多情況下,發布的固件二進制文件是加密的,它們只能通過設備上安裝的舊固件模塊來進行解密。
了解固件
根據Wikipedia的說法,“固件是一種特殊的計算機軟件,用于為設備的特定硬件提供底層控制。固件既可以為更復雜的設備軟件提供標準化的操作環境(提高硬件的獨立性),也可以為不太復雜的設備充當設備的完整操作系統,來提供所有的控制、監視和數據處理功能。”
盡管固件的主要組件幾乎都是一樣的,但固件并沒有標準的架構。
固件的主要組件通常是引導加載程序、內核模塊和文件系統組成。但是,在固件二進制文件中還可以找到許多其他組件,例如設備樹、數字證書以及其他設備特有的資源和組件。
一旦從廠商網站上獲取了固件的二進制文件后,我們就可以著手進行分析,并對其進行反匯編處理了。鑒于固件的特殊性,其分析過程不僅具有很大的挑戰性,并且非常繁瑣。要獲取有關這些挑戰及其解決方案的詳細信息,請參閱“IoT固件分析”部分。
查找固件中的可疑元素
在固件的組件被提取后,您就可以開始尋找可疑的模塊、代碼片段或針對組件的惡意篡改了。
首先,我們可以根據一組YARA規則來掃描文件系統內容,并且,這些規則可以基于已知的IoT惡意軟件或啟發式規則。此外,我們還可以使用防病毒掃描程序來掃描經過解壓縮處理的文件系統的內容。
同時,您還可以在文件系統中查找啟動腳本。這些腳本中通常會包含每次系統啟動時所加載的模塊列表。而惡意模塊的地址就很可能會被插入到這些腳本中。
在這里,我們可以利用Firmwalker工具來掃描解壓縮的文件系統,查找潛在的易受攻擊的文件。
Firmwalker的功能(https://craigsmith.net/Firmwalker/)
另一個需要研究的地方是引導加載程序組件,盡管這更具有挑戰性。
在物聯網設備中有很多常用的引導加載程序,其中U Boot是最常見的。實際上,由于U Boot具有高度的可定制性,這使得確定編譯后的代碼是否被操縱變得非常困難。另外,在不常見或自定義的引導加載程序中查找惡意修改將會更加繁瑣。
IoT固件分析
目前,已經有許多開源和閉源工具可以幫助我們來分析固件。不過,實際工作中我們最好采用經驗豐富的固件分析師所推薦的工具和技術組合。
下面,讓我們從功能最為豐富的固件分析工具Binwalk開始介紹。Binwalk可以用來掃描固件二進制文件并查找已知的模式和簽名。
該工具不僅擁有IoT設備各種引導加載器和文件系統的簽名集合,還提供了用于普通加密和壓縮算法的簽名,以及用于解壓縮和解碼的相應例程。
除此之外,Binwalk還能夠提取在固件二進制文件中發現的組件。
下面的截圖顯示了Binwalk掃描一個樣本固件二進制文件后的輸出結果:
Binwalk工具的掃描結果
在上圖中,Binwalk已經找到并打印出了頭部信息、引導加載程序、Linux內核以及文件系統。此外,還輸出了從頭部信息和組件本身提取出的元數據的相關細節信息,如每個組件的類型和大小、CRC校驗和、重要地址、CPU架構、鏡像名稱等。現在,我們可以繼續使用Binwalk來提取上述組件,或者根據Binwalk找到的起始偏移量手動計算其大小,并提取相關組件。
提取完固件的組成部分后,我們還可以繼續提取、解壓甚至掛載文件系統,以考察文件系統的內容。當然,我們也可以在反匯編器中查看引導加載程序的代碼,或者通過調試器對其進行調試。
然而,固件分析并不總是那么簡單。實際上,由于固件種類太過繁多,以至于理解其結構和提取組件通常是相當繁瑣的。
下面,讓我們仔細考察另一個樣本固件,并嘗試了解它的結構。
1. Binwalk firmware.bin
Binwalk的掃描結果中沒有顯示任何內容。這意味著Binwalk沒有發現任何已知的簽名。
Binwalk的掃描結果
在這種情況下,我們發現簡單的Binwalk掃描沒有太大的幫助。但是,請注意,我們還可以使用其他工具和技術來深入了解固件的結構。
2. File firmware.bin
下面讓我們利用Linux系統的file實用程序來考察這個固件的二進制文件。
File實用工具的輸出結果
File實用程序將該文件的類型顯示為Targa圖像數據。通過查看二進制文件的頭部,并對Targa圖像數據簽名進行Google搜索,發現這顯然是誤報。
固件二進制文件的第一個字節的內容
之所以出現這種誤報,是因為這個固件文件的第一個字節的內容0x01010000與Targa圖像數據的簽名相匹配,具體請看上面的截圖。
3. Binwalk -E firmware.bin
現在,讓我們開始使用Binwalk工具的另一個功能:檢查固件二進制文件的熵。
使用“-E”命令選項運行Binwalk時,會輸出固件二進制文件的熵圖,以及一些額外的詳細信息,如熵增和熵減的起始處的偏移量。
與熵相關的詳細信息
熵圖
熵值接近1的內容表示經過了壓縮處理,而熵值較低的內容表示未壓縮和未加密。從上面的截圖可以看出,偏移量55296(0xD800)開始,熵值進入高值區。
此外,還有另一個工具可以用來對二進制文件進行可視化處理:binvis.io。通過它,我們可以通過兩個并排的窗格來考察固件文件的內容,并將其可視化。對于文件的不同的部分,會根據熵值以不同的顏色加以顯示。
由binvis.io創建的固件的可視化結果
4. Binwalk -A firmware.bin
此外,Binwalk還可以掃描二進制文件,以尋找常見的可執行操作碼的簽名。
在文件中發現的第一個函數序言
在文件中發現的最后一個函數序言
從上面的截圖中我們可以看到,操作碼簽名檢查結果其實是非常有用的! 首先,我們可以藉此判斷出該固件屬于ARM設備。
其次,如果我們考慮到第一個和最后一個函數序言簽名的偏移量,我們可以得到這樣一個結論,即這些偏移量指向固件二進制文件中存放代碼的段(sections)。
從截圖中我們還可以看到,最后一個函數是在地址0xD600處找到的,也就是在熵上升的部分之前的0x200字節處。由此,我們可以進行一個有根據的猜測:這個偏移量很可能指向引導加載程序代碼的結束位置,同時,也是壓縮后的內核模塊的開始位置。
5. Hexdump -C
hexdump-Cfirmware.bin|grep-C4-e“^*$”
現在,我們知道了固件文件中一些組件的大致邊界,接下來,我們就可以通過查看這些區域周圍固件文件的實際內容來確認這些邊界的具體偏移量了。
如果我們通過hexdump來處理固件文件,并尋找只包含星號 "*"的代碼行,我們就可以找到每個固件組件的編譯器添加的填充字節。
固件二進制文件的內容
固件二進制文件其他部分的內容
通過Hexdump實用程序的輸出內容,加上之前的發現,我們就能確認該固件二進制文件中包含ARM代碼的部分。我們之前曾懷疑這段代碼屬于引導加載程序。
6. Strings –radix=x firmware.bin
接下來,讓我們從固件中提取ASCII字符串以及相關的偏移量。
最后在固件二進制文件中找到的ASCII碼字符串
從上面的截圖來看,其中有一些是與模塊入口點相關的字符串。這些字符串可以幫助我們更好地了解相關代碼的性質。
在下面的截圖中,我們可以從固件二進制的開頭部分看到一些讓人感興趣的字符串。例如,庫名“MctlApplet.cpp”可以用來查找來自同一開發商的其他二進制文件或軟件包。擁有來自同一廠商的其他固件鏡像有助于更好地理解這些二進制文件的結構。
從同一截圖中,另一個引起我們關注的字符串是“Not Booting from softloader”,它可能用于表示進程狀態,或這個模塊的性質。
同時,含有“Assert()”的字符串也可能暗示代碼的不同信息。使用Asserts函數是固件開發中非常常見的一種做法,因為它可以幫助開發人員在開發和生產階段調試和排除代碼中的故障。
在固件二進制文件中找到的第一個ASCII字符串
7. IDA -parm firmware.bin
到目前為止,我們已經從這個固件二進制中收集到了很多有價值的信息,而這些信息在一開始看來是相當難以理解的。
現在,讓我們使用IDA來考察這些代碼。由于這個二進制文件不是一個具有標準頭部的ELF文件,因此,我們需要顯式地告訴IDA使用ARM指令集來反匯編代碼。
IDA中函數部分的反匯編視圖
上面來自IDA的屏幕截圖顯示了如何使用在前面的分析步驟中找到的字符串來幫助查找對內核模塊入口點的調用。
8. dd
現在,我們可以繼續提取固件二進制代碼部分,我們分析后發現該部分屬于引導加載程序模塊。
9. Qemu
從固件二進制文件中提取所有模塊(文件系統內容、內核模塊和其他組件)之后,我們就可以使用Qemu來運行這些二進制文件了,甚至可以模擬運行與我們自己機器的體系結構不同的文件,并與它們進行交互。
小結
如今,物聯網設備的數量正在與日俱增。從工業控制系統、智慧城市、汽車到消費級設備,如手機、網絡設備、個人助理、智能手表以及種類繁多的智能家電等,到處都可以看到物聯網設備的身影。
物聯網設備源自于已經存在多年的嵌入式系統。由于這些設備的自身特性的緣故,嵌入式設備軟件的制造和開發一直有著不同于通用計算機系統的優先考慮事項。這些優先事項是由設備本身的有限和特定功能、底層硬件的有限能力和容量以及所開發的代碼無法進行后續更改和修改所決定的。同時,物聯網設備與傳統的嵌入式系統還是具有顯著的差異的。如今,大多數物聯網設備都在具有與通用計算機系統相似功能的硬件上運行。
隨著物聯網設備變得越來越普遍,它們現在正在訪問和控制我們生活和日常互動的許多方面。物聯網設備現在有可能給攻擊者帶來前所未有的入侵機會。這不僅凸顯了物聯網設備安全的重要性,也彰顯了圍繞這一主題進行研究的現實意義。不過,好消息是,目前已經有許多工具和技術可用于協助安全研究人員進行該領域當前和未來的相關研究。掌握物聯網設備的架構,學習這些設備所用的語言,以及堅定的決心和毅力是進入這個研究領域所必需的。
編輯:hfy
-
嵌入式系統
+關注
關注
41文章
3634瀏覽量
129927 -
cpu
+關注
關注
68文章
10932瀏覽量
213556 -
智慧城市
+關注
關注
21文章
4281瀏覽量
97995 -
物聯網設備
+關注
關注
1文章
235瀏覽量
19887
發布評論請先 登錄
相關推薦
評論