Claroty及JFrog研究人員11月9日發表研究結果表示,其在嵌入式Linux應用程序BusyBox中發現了14個漏洞,可導致拒絕服務(DoS)、數據泄露、及遠程代碼執行(RCE)。BusyBox在很多OT及IoT設備中使用,包括PLC、HMI、及RTU。
一、背景介紹
BusyBox是一款軟件套件,包含許多有用的Unix實用程序(Applet),這些實用程序打包為單個可執行文件。內存和存儲資源有限的嵌入式設備可能會利用BusyBox工具,被譽為是嵌入式Linux的“瑞士軍刀”。
BusyBox中包含一個完整的Shell、一個DHCP客戶端/服務器、和一些小型實用程序,例如cp、ls、grep等。許多OT和IoT設備都使用BusyBox,包括可編程邏輯控制器(PLC)、人機界面(HMI)和遠程終端單元(RTU),其中許多在Linux上運行。
作為致力于提高開源軟件安全性的一部分,Claroty的Team82和JFrog研究人員合作開展了一個檢查BusyBox的漏洞研究項目。研究人員使用靜態和動態技術發現了影響最新版本BusyBox的14個漏洞。BusyBox在8月19日發布的1.34.0版本中私下披露并修復了所有漏洞。
在大多數情況下,這些漏洞會導致是拒絕服務(DoS),在極少數情況下,也可能導致信息泄漏和遠程代碼執行(RCE)。
二、漏洞概述
三、漏洞觸發條件
由于受影響的程序不是daemons,因此只有向易受攻擊的小程序提供不受信任的數據時,通常通過命令行參數,漏洞才能被利用。具體而言,以下是觸發每個漏洞必須發生的條件:
CVE-2021-42373。如果攻擊者可以控制傳遞給man的所有參數,則可觸發。man由默認的BusyBox配置構建,但未隨Ubuntu的默認BusyBox二進制文件一起提供。
CVE-2021-42374。如果攻擊者可以提供精心制作的壓縮文件,該文件將使用unlzma進行解壓縮,則可觸發。即使unlzma小程序不可用,但啟用了CONFIG_FEATURE_SEAMLESS_LZMA(默認啟用),其他小程序如tar、unzip、rpm、dpkg、lzma和man在處理帶有.lzma文件名后綴的文件時也可以訪問易受攻擊的代碼。unlzma是由默認的BusyBox配置構建的,并隨Ubuntu的默認BusyBox二進制文件一起提供。
CVE-2021-42375。如果攻擊者可以向ash提供包含特殊字符$、{、}或#的命令行,則可觸發。ash由默認的BusyBox配置構建,并隨Ubuntu的默認BusyBox二進制文件一起提供。
CVE-2021-42376。如果攻擊者可以向hush提供包含特殊字符\x03(分隔符)的命令行,則可觸發。hush是由默認的BusyBox配置構建的,但不隨Ubuntu的默認BusyBox二進制文件一起提供。
CVE-2021-42377。如果攻擊者可以向hush提供包含特殊字符&的命令行,則可觸發。
CVE-2021-42378及CVE-2021-42386。如果攻擊者可以向awk提供任意模式,該模式是此小程序采用的第一個位置參數,則可觸發。awk由默認的BusyBox配置構建,并隨Ubuntu的默認BusyBox二進制文件一起提供。
四、研究方法
研究人員使用了靜態和動態分析方法來研究BusyBox。首先,以自上而下的方式對BusyBox源代碼進行人工審查,遵循用戶輸入直到特定的小程序處理。研究人員還查找了明顯的邏輯/內存損壞漏洞。
另一個方法是模糊測試。研究人員用ASan編譯了BusyBox,并為每個BusyBox小程序實現了一個AFL工具。隨后通過刪除不必要的代碼部分、在同一進程(持久模式)上運行多個模糊測試循環以及并行運行多個模糊測試實例,對每個線束進行了優化。
研究人員從模糊測試所有daemons小程序開始,包括HTTP、Telnet、DNS、DHCP、NTP等。為了有效地模糊基于網絡的輸入,需要進行許多代碼更改。例如,研究人員執行的主要修改是用來自STDIN的輸入替換所有recv函數,以支持模糊輸入。對非服務器小程序進行模糊測試時也進行了類似的更改。
研究人員為每個小程序準備了幾個示例,并在幾天內運行了數百個經過模糊測試的BusyBox實例,因此得到了數萬次可供研究的異常結果(crash)。研究人員根據崩潰的根本原因進行了分類,以減少樣本中的崩潰數量。隨后研究人員將每個分類最小化至只有唯一的崩潰輸入,以方便處理。
為了完成這些任務,研究人員開發了自動工具,來消化所有崩潰數據,并根據崩潰分析報告進行分類,主要包括相關代碼區域的崩潰堆棧跟蹤、寄存器和匯編代碼。例如,研究人員合并了具有類似崩潰堆棧跟蹤的案例,因為其通常具有相同的問題根本原因。
最后,研究人員研究了每個單獨的崩潰并最小化其輸入向量,以了解根本原因,并創建一個利用導致崩潰的漏洞PoC。此外,研究人員針對多個BusyBox版本測試了PoC,以了解漏洞是何時引入源代碼的。
總而言之,研究中采取的步驟包括:代碼審查、模糊測試、減少和最小化、分類、PoC、測試多個版本、披露。
五、威脅分析
為了評估這些漏洞造成的威脅級別,研究人員檢查了JFrog的數據庫,其中包含10,000多個嵌入式固件映像,僅包含公開可用的固件,不包括上傳到JFrog的Artifactory映像。研究人員發現其中40%包含一個BusyBox可執行文件,該文件與其中一個受影響的小程序相關聯,這使得這些問題在基于Linux的嵌入式固件中極為普遍。
然而研究人員認為,這些問題目前不會構成嚴重的安全威脅,因為:
-
雖然DoS漏洞很容易被利用,但小程序幾乎總是作為單獨的分叉進程運行,這通??梢詼p輕影響;
-
信息泄漏漏洞很難被利用;
- Use-After-Free漏洞可用于遠程代碼執行,但目前沒有嘗試為其創建武器化漏洞。此外,從外部輸入處理awk模式是非常罕見的,并且本質上是不安全的。
六、CVE-2021-42374 LZMA越界讀取漏洞
其中最危險的漏洞CVE-2021-42374是LZMA越界讀取漏洞,可能導致DoS和信息泄漏,該漏洞只能在精心制作的LZMA壓縮輸入被解壓縮時用于攻擊設備。
該漏洞是由于函數decompress_unlzma.c中的大小檢查不足引起的。LZMA是一種使用字典壓縮的壓縮算法,并使用范圍編碼器對其輸出進行編碼,需要滿足兩個特定的編碼條件才能利用該漏洞,buffer_pos = 0和rep0 = offset + dict_size。
利用此漏洞通常需要準備一個特制的LZMA編碼流,以便在解碼時,兩個條件都將被滿足,并且pos將等于負數-offset。最終,解壓后的流將包含泄漏的內存,這些內存將被寫入輸出流。
為了達到越界條件,需要寫入一些字節,然后使用匹配將緩沖區填充到header.dict_size,并將rep0更改為所需的值。因此,pos將等于-offset并且可以從offset泄漏字節作為對緩沖區指針的引用。
盡管該漏洞是在LZMA解壓算法中發現的,但是許多小程序支持LZMA壓縮,并且默認情況下會嘗試解壓編碼的LZMA流,例如無處不在的ZIP格式支持將LZMA壓縮作為Type14壓縮。因此從攻擊者的角度來看,ZIP是一個更好的攻擊媒介。
七、修復及解決方法
BusyBox 1.34.0版本已修復所有14個漏洞,用戶可從https://busybox.net/downloads/busybox-1.34.0.tar.bz2下載并盡快升級。
由于特定版本兼容性需要,如果無法升級BusyBox,則可以在沒有易受攻擊的功能(Applets)的情況下編譯BusyBox 1.33.1和更早版本。
在BusyBox的源目錄中運行make deconfig后,或者重新使用以前的配置,可按照以下方式編輯.config文件:
-
man注釋掉CONFIG_MAN=y;
-
lzma注釋掉CONFIG_UNLZMA=y、CONFIG_FEATURE_SEAMLESS_LZMA=y、及CONFIG_FEATURE_UNZIP_LZMA=y;
-
ash注釋掉CONFIG_ASH=y;
-
hush注釋掉CONFIG_HUSH=y;
-
awk注釋掉CONFIG_AWK=y。
參考資源:
【1】https://claroty.com/2021/11/09/blog-research-unboxing-busybox-14-vulnerabilities-uncovered-by-claroty-jfrog/
【2】https://jfrog.com/blog/unboxing-busybox-14-new-vulnerabilities-uncovered-by-claroty-and-jfrog/
【3】https://threatpost.com/busybox-security-bugs-linux-devices/176098/

公司總部:北京市海淀區中關村軟件園8號華夏科技大廈三層
服務熱線:400-810-8981 / 010-82896289
版權所有:北京天地和興科技有限公司 京ICP備17065546號-1

掃一掃關注
天地和興微信公眾號