張旭博,賀彥鈞,李建春
消費(fèi)級路由器相對于工業(yè)級路由器,是指用于家庭、小微企業(yè)的網(wǎng)絡(luò)接入設(shè)備,一般特指無線路由器。通過分析消費(fèi)級路由器固件組成、固件逆向流程、固件木馬產(chǎn)生原因,總結(jié)了幾點(diǎn)安全防護(hù)建議。
從固件的組成、路由器防護(hù)手段兩方面出發(fā),對路由器固件進(jìn)行簡單概述。
路由器固件本質(zhì)是軟件,是其正常工作的系統(tǒng)軟件的集合。它以二進(jìn)制映像的形式存在于網(wǎng)絡(luò)設(shè)備的只讀ROM中,存儲設(shè)備正常運(yùn)轉(zhuǎn)所需的各個組成部分,支撐網(wǎng)絡(luò)設(shè)備穩(wěn)定運(yùn)行,并進(jìn)行相關(guān)的網(wǎng)絡(luò)尋址、數(shù)據(jù)轉(zhuǎn)發(fā)等工作。通常,它可以分為固件頭、引導(dǎo)頭、內(nèi)核、文件系統(tǒng)和應(yīng)用程序等不同部分。
路由器的固件承載于硬件系統(tǒng)。當(dāng)前,路由器主流的CPU類型有MIPS、ARM、PowerPC和X86等??紤]功耗問題,一般家用路由器會采用低功耗的MIPS、ARM等。表1匯總了不同架構(gòu)CPU性能和能耗方面的不同[1]。本文逆向的無線路由器固件采用MIPS架構(gòu)。
表1 不同架構(gòu)CPU比較
針對文件系統(tǒng),常見的文件系統(tǒng)有YAFFS、JFFS2、SquashFS、CramFS、ROMFS和 XfAT等。對于大多數(shù)網(wǎng)絡(luò)設(shè)備而言,操作系統(tǒng)一般可以支撐多種不同類型的根文件,但有些操作系統(tǒng)只能支持特定根文件系統(tǒng)。常用的操作系統(tǒng)及其根文件系統(tǒng)類型,如表2所示。本文中逆向的無線路由器固件采用的是Linux操作系統(tǒng),根文件采用的是Squashfs。Squashfs是一種基于Linux內(nèi)核使用的壓縮只讀文件系統(tǒng),具有占用資源少、運(yùn)行速度快、掉電數(shù)據(jù)不丟失等特點(diǎn)。
表2 操作系統(tǒng)及其根文件系統(tǒng)類型
固件分析主要通過獲取固件,對其進(jìn)行逆向、重組,了解程序執(zhí)行邏輯,獲取固件存在的漏洞。
一種方法是從購買的設(shè)備中提取固件,使用TTL調(diào)試接口連接系統(tǒng),然后使用dd命令的方式提取。另一種方法是通過拆機(jī),將存儲固件的Flash芯片從設(shè)備上取下,采用SPI Flash燒寫器提取全部Flash中的全部固件[2]。
官方網(wǎng)站上下載,如網(wǎng)件、華碩、TP-LINK、D-Link等公司官網(wǎng)提供固件,部分提供GPL源碼下載。
固件逆向的方法主要是采用工具分析、模擬路由器固件。常用的分析工具有firmware-mod-kit、binwalk、lzma、squashfs-tools和 ida等[3],模擬工具主要采用QEMU。
首先,通過分析固件函數(shù)的調(diào)用關(guān)系和程序執(zhí)行過程,確認(rèn)執(zhí)行過程是否存在漏洞,如登錄校驗(yàn)問題、HTTP頁面問題、Telnet是否默認(rèn)開啟問題等。
其次,通過定位一些容易出現(xiàn)問題的函數(shù),如system、strcpy、sprintf、strncpy和memcpy等,分析引用這些函數(shù)的地方,尋找命令注入、棧溢出漏洞。
最后,利用固件解包工具binwalk,提取固件的文件結(jié)構(gòu)、程序、文件系統(tǒng)等。可以利用QEMU進(jìn)行運(yùn)行路由器固件的mips程序,動態(tài)分析具體程序的執(zhí)行過程,發(fā)現(xiàn)其運(yùn)行漏洞。
本文提及的采用binwalk提取固件的方法,提取的固件主要包含固件頭部、文件系統(tǒng)和尾部三部分,如圖1所示。
從提取的結(jié)果可以看出,固件采用大端,文件系統(tǒng)采用的是squashfs 3.0,如圖2所示。
圖1 采用binwalk提取固件
圖2 采用QEMU模擬執(zhí)行固件程序
通過路由器固件的分析,常見的路由器固件重組主要依賴于固件格式、首尾字段和校驗(yàn)方式等。路由器固件重組可總結(jié)為拼接法和合成法兩類。
拼接法。對于沒有CRC或者CRC是固定值的固件,可以采用拼接法進(jìn)行固件重組。主要步驟:提取header.img;修改rootfs;利用mksquashfs等工具生成新的rootfs;填充尾部;生成新的固件。
合成法。對于有CRC是每次重新校驗(yàn)的固件,需要采用合成法進(jìn)行重組。主要步驟:使用mkrootfs、dd工具進(jìn)行合成,生成未含CRC校驗(yàn)的固件;使用專用的appendsum工具增加校驗(yàn)值,生成新固件。
經(jīng)過研究發(fā)現(xiàn),某些基于OPENWRT的固件校驗(yàn)算法是一致的。采用官方SDK固件編譯的校驗(yàn)算法,是用專門工具生成的。
在獲取固件漏洞的條件下,對消費(fèi)級路由器進(jìn)行木馬植入。通過總結(jié),一般的植入過程包含木馬植入、木馬運(yùn)行和請求控制3個階段。
木馬植入階段。木馬植入程序包含后臺控制程序和前端程序。前端程序運(yùn)行于家用路由器,以3種方式存在。第一種是事先捆綁于某一正常的程序,當(dāng)該程序執(zhí)行時,捆綁的前端程序會釋放于系統(tǒng)并執(zhí)行。第二種是通過劫持系統(tǒng)的so文件,加載該so文件的程序運(yùn)行時,會執(zhí)行前端程序。一般,此類劫持會采用系統(tǒng)啟動加載的程序,如httpd等。第三種是構(gòu)造鏈接,利用wget、ftp等系統(tǒng)自帶命令,在檢測網(wǎng)絡(luò)連接可用時,下載前端程序。
通過逆向,提取固件的文件系統(tǒng)內(nèi)容,如圖3所示。
分析系統(tǒng)中采用uhttpd web服務(wù)器程序,對其進(jìn)行逆向分析發(fā)現(xiàn)漏洞,如圖4所示。
圖3 通過逆向提取固件的文件系統(tǒng)內(nèi)容
圖4 uhttpd逆向
木馬運(yùn)行階段。木馬成功植入后,當(dāng)設(shè)定條件滿足時,木馬開始運(yùn)行。首先檢測、更改防火墻配置,使環(huán)境能滿足木馬執(zhí)行要求,然后啟動木馬程序。
請求控制階段。木馬運(yùn)行后,等待或主動連接木馬后臺程序。該階段需要保證木馬程序運(yùn)行后對系統(tǒng)流量的影響,以及木馬程序?qū)Χ丝谡加靡妆粰z測等隱蔽問題。
圖5為木馬植入流程??梢钥闯?,利用固件漏洞植入的木馬具有隱蔽性。
由于消費(fèi)級路由器售價較低,廠商設(shè)計時對其重視不足,部分廠商的固件甚至沒有CRC校驗(yàn),同時對暴出的漏洞固件更新升級不及時。
圖5 木馬植入流程
為了節(jié)省成本,很多廠商的路由器會根據(jù)應(yīng)用場景等不同,調(diào)整ROM和RAM的容量,并根據(jù)容量不同,對路由器系統(tǒng)進(jìn)行不同程度裁剪。如果裁剪過多,可能會影響系統(tǒng)穩(wěn)定、暴露出更多安全問題。
以Atheros AR9331為主控芯片的路由器為例,總結(jié)部分廠商產(chǎn)品的ROM、RAM的容量如表 3所示[4]。
表3 以AR9331為主芯片的路由器RAM、RAM對比
針對表3所示的路由器,各廠商可能會制作不同的固件,根據(jù)容量會對系統(tǒng)做不同程度裁剪。
消費(fèi)級無線路由器植入的木馬一般具有隱蔽性。下面探討如何避免消費(fèi)級路由器被注入木馬,或者在植入木馬的條件下消除系統(tǒng)木馬。
路由器有管理賬號,這個管理賬號需要及時修改,否則黑客會利用出廠默認(rèn)密碼登錄路由器,進(jìn)而攻擊網(wǎng)絡(luò)中的其他設(shè)備。
消費(fèi)級路由器木馬后門的產(chǎn)生,主要源于用戶未及時升級有安全缺陷的路由器固件,而有缺陷的路由器固件被黑客注入木馬。
通過及時更新官網(wǎng)公布的路由器固件、補(bǔ)丁包修補(bǔ)系統(tǒng)缺陷。更新固件時,選擇不保存配置,可以清除已植入木馬的劫持,同時提高防護(hù)能力。
通過關(guān)閉Web管理和DMZ功能,對路由器的管理通過本地局域網(wǎng)進(jìn)行,使互聯(lián)網(wǎng)掃描手段無法對路由器進(jìn)行掃描、探測。需要說明的是,遠(yuǎn)程Web管理和DMZ通常是關(guān)閉的。
DHCP用于為局域網(wǎng)內(nèi)的電腦自動分配IP地址,通過關(guān)閉DHCP功能,即使用戶破解路由器的密碼,仍無法獲取正確的IP地址,是一種較為有效的安全防護(hù)措施。
啟用消費(fèi)級路由器中的IP地址過濾功能,僅允許IP地址在列表中的用戶訪問無線網(wǎng)絡(luò),通過在過濾規(guī)則中限定MAC地址,可以阻止非白名單列表IP、MAC對的用戶連入網(wǎng)絡(luò)。
消費(fèi)級路由器是局域網(wǎng)和外網(wǎng)的接入點(diǎn),對局域網(wǎng)的通信和數(shù)據(jù)安全至關(guān)重要,特別是黑客利用固件植入木馬,隱蔽性強(qiáng),危害大。因此,消費(fèi)級路由器的安全必須引起重視。具體地,廠商需繼續(xù)加強(qiáng)安全方面設(shè)計,將非法入侵拒之門外,而用戶需樹立安全意識,從而共同構(gòu)建一套健壯、穩(wěn)定、安全的局域網(wǎng)環(huán)境。
[1] 鮑慶國.嵌入式設(shè)備固件分析的關(guān)鍵技術(shù)研究[D].北京:北京工業(yè)大學(xué),2016:27-33.BAO Qing-guo.Embedded Device Firmware Analysis of the Key Technologies[D].Beijing:Beijing University of Technology,2016:27-33.
[2] 陳銘.軟件漏洞逆向分析技術(shù)研究[D].成都:電子科技大學(xué),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] 胡剛.固件代碼逆向分析關(guān)鍵技術(shù)研究[D].鄭州:解放軍信息工程大學(xué),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.