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