張旭博,賀彥鈞,李建春
消費級路由器相對于工業級路由器,是指用于家庭、小微企業的網絡接入設備,一般特指無線路由器。通過分析消費級路由器固件組成、固件逆向流程、固件木馬產生原因,總結了幾點安全防護建議。
從固件的組成、路由器防護手段兩方面出發,對路由器固件進行簡單概述。
路由器固件本質是軟件,是其正常工作的系統軟件的集合。它以二進制映像的形式存在于網絡設備的只讀ROM中,存儲設備正常運轉所需的各個組成部分,支撐網絡設備穩定運行,并進行相關的網絡尋址、數據轉發等工作。通常,它可以分為固件頭、引導頭、內核、文件系統和應用程序等不同部分。
路由器的固件承載于硬件系統。當前,路由器主流的CPU類型有MIPS、ARM、PowerPC和X86等。考慮功耗問題,一般家用路由器會采用低功耗的MIPS、ARM等。表1匯總了不同架構CPU性能和能耗方面的不同[1]。本文逆向的無線路由器固件采用MIPS架構。

表1 不同架構CPU比較
針對文件系統,常見的文件系統有YAFFS、JFFS2、SquashFS、CramFS、ROMFS和 XfAT等。對于大多數網絡設備而言,操作系統一般可以支撐多種不同類型的根文件,但有些操作系統只能支持特定根文件系統。常用的操作系統及其根文件系統類型,如表2所示。本文中逆向的無線路由器固件采用的是Linux操作系統,根文件采用的是Squashfs。Squashfs是一種基于Linux內核使用的壓縮只讀文件系統,具有占用資源少、運行速度快、掉電數據不丟失等特點。

表2 操作系統及其根文件系統類型
固件分析主要通過獲取固件,對其進行逆向、重組,了解程序執行邏輯,獲取固件存在的漏洞。
一種方法是從購買的設備中提取固件,使用TTL調試接口連接系統,然后使用dd命令的方式提取。另一種方法是通過拆機,將存儲固件的Flash芯片從設備上取下,采用SPI Flash燒寫器提取全部Flash中的全部固件[2]。
官方網站上下載,如網件、華碩、TP-LINK、D-Link等公司官網提供固件,部分提供GPL源碼下載。
固件逆向的方法主要是采用工具分析、模擬路由器固件。常用的分析工具有firmware-mod-kit、binwalk、lzma、squashfs-tools和 ida等[3],模擬工具主要采用QEMU。
首先,通過分析固件函數的調用關系和程序執行過程,確認執行過程是否存在漏洞,如登錄校驗問題、HTTP頁面問題、Telnet是否默認開啟問題等。
其次,通過定位一些容易出現問題的函數,如system、strcpy、sprintf、strncpy和memcpy等,分析引用這些函數的地方,尋找命令注入、棧溢出漏洞。
最后,利用固件解包工具binwalk,提取固件的文件結構、程序、文件系統等。可以利用QEMU進行運行路由器固件的mips程序,動態分析具體程序的執行過程,發現其運行漏洞。
本文提及的采用binwalk提取固件的方法,提取的固件主要包含固件頭部、文件系統和尾部三部分,如圖1所示。
從提取的結果可以看出,固件采用大端,文件系統采用的是squashfs 3.0,如圖2所示。

圖1 采用binwalk提取固件

圖2 采用QEMU模擬執行固件程序
通過路由器固件的分析,常見的路由器固件重組主要依賴于固件格式、首尾字段和校驗方式等。路由器固件重組可總結為拼接法和合成法兩類。
拼接法。對于沒有CRC或者CRC是固定值的固件,可以采用拼接法進行固件重組。主要步驟:提取header.img;修改rootfs;利用mksquashfs等工具生成新的rootfs;填充尾部;生成新的固件。
合成法。對于有CRC是每次重新校驗的固件,需要采用合成法進行重組。主要步驟:使用mkrootfs、dd工具進行合成,生成未含CRC校驗的固件;使用專用的appendsum工具增加校驗值,生成新固件。
經過研究發現,某些基于OPENWRT的固件校驗算法是一致的。采用官方SDK固件編譯的校驗算法,是用專門工具生成的。
在獲取固件漏洞的條件下,對消費級路由器進行木馬植入。通過總結,一般的植入過程包含木馬植入、木馬運行和請求控制3個階段。
木馬植入階段。木馬植入程序包含后臺控制程序和前端程序。前端程序運行于家用路由器,以3種方式存在。第一種是事先捆綁于某一正常的程序,當該程序執行時,捆綁的前端程序會釋放于系統并執行。第二種是通過劫持系統的so文件,加載該so文件的程序運行時,會執行前端程序。一般,此類劫持會采用系統啟動加載的程序,如httpd等。第三種是構造鏈接,利用wget、ftp等系統自帶命令,在檢測網絡連接可用時,下載前端程序。
通過逆向,提取固件的文件系統內容,如圖3所示。
分析系統中采用uhttpd web服務器程序,對其進行逆向分析發現漏洞,如圖4所示。

圖3 通過逆向提取固件的文件系統內容

圖4 uhttpd逆向
木馬運行階段。木馬成功植入后,當設定條件滿足時,木馬開始運行。首先檢測、更改防火墻配置,使環境能滿足木馬執行要求,然后啟動木馬程序。
請求控制階段。木馬運行后,等待或主動連接木馬后臺程序。該階段需要保證木馬程序運行后對系統流量的影響,以及木馬程序對端口占用易被檢測等隱蔽問題。
圖5為木馬植入流程。可以看出,利用固件漏洞植入的木馬具有隱蔽性。
由于消費級路由器售價較低,廠商設計時對其重視不足,部分廠商的固件甚至沒有CRC校驗,同時對暴出的漏洞固件更新升級不及時。

圖5 木馬植入流程
為了節省成本,很多廠商的路由器會根據應用場景等不同,調整ROM和RAM的容量,并根據容量不同,對路由器系統進行不同程度裁剪。如果裁剪過多,可能會影響系統穩定、暴露出更多安全問題。
以Atheros AR9331為主控芯片的路由器為例,總結部分廠商產品的ROM、RAM的容量如表 3所示[4]。

表3 以AR9331為主芯片的路由器RAM、RAM對比
針對表3所示的路由器,各廠商可能會制作不同的固件,根據容量會對系統做不同程度裁剪。
消費級無線路由器植入的木馬一般具有隱蔽性。下面探討如何避免消費級路由器被注入木馬,或者在植入木馬的條件下消除系統木馬。
路由器有管理賬號,這個管理賬號需要及時修改,否則黑客會利用出廠默認密碼登錄路由器,進而攻擊網絡中的其他設備。
消費級路由器木馬后門的產生,主要源于用戶未及時升級有安全缺陷的路由器固件,而有缺陷的路由器固件被黑客注入木馬。
通過及時更新官網公布的路由器固件、補丁包修補系統缺陷。更新固件時,選擇不保存配置,可以清除已植入木馬的劫持,同時提高防護能力。
通過關閉Web管理和DMZ功能,對路由器的管理通過本地局域網進行,使互聯網掃描手段無法對路由器進行掃描、探測。需要說明的是,遠程Web管理和DMZ通常是關閉的。
DHCP用于為局域網內的電腦自動分配IP地址,通過關閉DHCP功能,即使用戶破解路由器的密碼,仍無法獲取正確的IP地址,是一種較為有效的安全防護措施。
啟用消費級路由器中的IP地址過濾功能,僅允許IP地址在列表中的用戶訪問無線網絡,通過在過濾規則中限定MAC地址,可以阻止非白名單列表IP、MAC對的用戶連入網絡。
消費級路由器是局域網和外網的接入點,對局域網的通信和數據安全至關重要,特別是黑客利用固件植入木馬,隱蔽性強,危害大。因此,消費級路由器的安全必須引起重視。具體地,廠商需繼續加強安全方面設計,將非法入侵拒之門外,而用戶需樹立安全意識,從而共同構建一套健壯、穩定、安全的局域網環境。
[1] 鮑慶國.嵌入式設備固件分析的關鍵技術研究[D].北京:北京工業大學,2016:27-33.BAO Qing-guo.Embedded Device Firmware Analysis of the Key Technologies[D].Beijing:Beijing University of Technology,2016:27-33.
[2] 陳銘.軟件漏洞逆向分析技術研究[D].成都:電子科技大學,2007:34-51.CHEN Ming.Research of Vulnerability Detection and Application with Reverse Engineering[D].Chengdu:University of Electronic Science and Technology of China,2007:34-51.
[3] 胡剛.固件代碼逆向分析關鍵技術研究[D].鄭州:解放軍信息工程大學,2011:46-52.HU Gang.Research on Key Techniques for Firm-Code Reverse Analysis[D].Zhengzhou:PLA Information Engineering University,2011:46-52.
[4] OpenWRT.支持的路由器列表[EB/OL].[2017-10-15].http://wiki.openwrt.org/toh/start, 2017,id=ar9331.OpenWRT.List of Supported Routers.[EB/OL].[2017-10-15].http://wiki.openwrt.org/toh/start,2017,id=ar9331.