程軍
【摘要】 針對NETGEAR R2000的安全審計問題,首先逆向分析澄清了固件升級包的封裝格式、壓縮算法和校驗機制,其次工程實現(xiàn)了升級固件的完整封裝過程,為進一步安全審計提供技術支持。
【關鍵詞】 路由器 固件升級 安全審計 漏洞挖掘
Analysis and Implementation of Firmware Encapsulation Scheme for NETGEAR R2000 Router CHENG Jun (Novel Horizon Technology Co. Ltd, Jinan Shandong 250100, China)
Abstract: Aiming at security audit of NETGEAR R2000 router, reverse-analysis is performed to clarify the firmware update packet encapsulation formats, compression algorithm and verifying mechanism firstly, then implements the complete encapsulation process of upgrade firmware in detail. The work effectively support further security audit.
Keywords: router; firmware upgrade; security audit; vulnerability digging
一、引言
R2000及其他系列型號路由器是美國固件(NETGEAR)公司[1]生產的接入路由器產品,市場占有率較高,深受用戶青睞。與此同時,不斷曝出的安全漏洞使R2000等系列型號路由器的安全性受到質疑。因此,加強R2000等型號路由器的安全審計工作刻不容緩,對及時發(fā)現(xiàn)和修補漏洞從而確保網(wǎng)絡安全具有重要意義。而安全審計的前提是澄清固件格式和提取還原文件系統(tǒng)。本文重點分析了R2000路由器的固件升級包封裝規(guī)范,實現(xiàn)了固件升級包的拆封和重裝,完成了文件系統(tǒng)的提取還原,為進一步安全審計提供技術支持。
二、R2000升級固件格式分析
2.1分析環(huán)境介紹
整個升級固件的分析及封裝實現(xiàn)都是在Linux Ubuntu14.0操作系統(tǒng)下進行。安裝了路由器固件分析相關的工具軟件,包括Binwalk[2]、Squashfs[3] 文件解壓縮工具、Mkimage[4] 鏡像文件生成工具、IDA 反匯編工具[5],具體安裝過程可參見相關文檔[2-5]。另,分析過程常用到的Linux shell命令包括:file、strings、hexdump、dd,具體用法參見Linux相關文獻[6]。
2.2 逆向分析過程
(1)使用strings命令進行字符串搜索
利用strings命令顯示固件文件中的可打印字符。據(jù)此可了解掌握一些重要信息,包括是否進行加密或編碼處理、嵌入式操作系統(tǒng)類型及版本號、固件生成工具名及版本號、所實現(xiàn)功能及函數(shù)名稱、Web管理頁面編程語言、重要函數(shù)代碼及其他典型特征信息。在對NETGEAR R2000的固件升級文件分析過程中可了解到如下信息:升級文件未進行加密或編碼處理、操作系統(tǒng)為Linux,固件生成工具為OpenWRT,設備型號為R2000,版本號為V1.0.0.34,設備ID為29764648+4+0+32+2x2+0。
(2)使用Binwalk進行固件升級文件掃描
利用Binwalk對固件升級文件進行識別,可大體掌握固件文件的組成、封裝格式、壓縮算法、文件系統(tǒng)類型、指令集等。具體過程如下:
執(zhí)行命令 binwalk,獲知固件文件由四部分組成:操作系統(tǒng)鏡像頭、操作系統(tǒng)鏡像文件、文件系統(tǒng)鏡像頭、文件系統(tǒng),判明固件封裝格式為uImage,壓縮類型為lzma,文件系統(tǒng)類型為squashfs,字節(jié)順序為小端,CPU架構MIPS,操作系統(tǒng)為Linux。
執(zhí)行命令 binwalk -A ,可識別固件文件的指令集,據(jù)此可判斷和佐證CPU的架構類型。
執(zhí)行命令binwalk–Me,可遞歸提取解壓還原固件文件中的壓縮數(shù)據(jù)塊。實際測試比較發(fā)現(xiàn)binwalk對squashfs文件系統(tǒng)的還原不夠完整,因此下面利用squashfs專用工具還原文件系統(tǒng)。
(3)Squashfs文件系統(tǒng)還原
首先,根據(jù)binwalk分析結果界定文件系統(tǒng)的位置及大小,并利用dd命令抽??;然后利用squashfs工具包的unsquashfs命令進行文件系統(tǒng)的解壓和還原,特別指出的是,命令運行過程需要指定壓縮算法選項為lzma。
(4)固件升級過程分析
研究技術手冊得知R2000有2種固件升級方式,一種為自動定期訪問FTP站點并檢測下載最新版本固件,通過選項設置可關閉該功能,另一種為先將升級固件文件下載到本機,再通過WEB管理頁面選擇上傳升級文件,路由器將自動完成固件校驗與Flash寫入。采用網(wǎng)絡嗅探的方法,重點分析了后一種升級方式,分析結果如下:
路由器上的uhttpd服務完成web訪問的管理,固件升級過程也由其控制;
固件文件上傳通過TCP協(xié)議80端口進行,依次讀取并傳送固件升級文件數(shù)據(jù)塊;
路由器對登陸用戶名和口令字進行Base64編碼,解碼后可還原登陸路由器的用戶名和口令字。
(5)web服務程序反匯編分析
利用IDA工具反匯編分析web服務uhttpd程序,重點研究澄清升級固件的處理過程和校驗算法,如圖1所示,分析結果如下:
路由器對固件升級文件的處理大體分為兩步,先校驗完整性,后寫Flash芯片;
校驗過程是必備重要環(huán)節(jié),首先讀取固件升級文件頭部128字節(jié)數(shù)據(jù),解析獲取設備型號、hw_id、版本號等信息,并與路由器中存儲的上述信息進行比對,然后計算整個固件升級文件的校驗和;
將通過校驗的固件升級文件寫入Flash芯片,其中主要利用了Flash寫函數(shù)“/sbin/run-ramfs”。
其中,校驗和計算過程如下:對鏡像文件以字節(jié)為單位依次讀取和相加,截取求和結果的低8位(1字節(jié)),若結果為0XFF則校驗正確,否則表明鏡像文件內容有變動。
2.3 分析結果
與磁盤的分區(qū)管理類似,R2000等路由器存儲固件的Flash芯片被格式化為多個分區(qū),通常情況下分成4個區(qū)塊,分別用于存儲bootloader、kernel、fielsystem和nvram配置文件[7]。升級鏡像文件是整個固件的一部分。固件升級只是對Flash芯片的kernel和filesystem的文件存儲扇區(qū)進行擦除和重寫,而不會破壞bootloader和參數(shù)配置信息。
NETGEAR R2000的固件升級文件總體上分為128字節(jié)標識頭、變長操作系統(tǒng)內核鏡像、變長filesystem鏡像、變長取整補充數(shù)據(jù)塊和1字節(jié)校驗域等5部分,如圖2所示。其中128字節(jié)定長標識頭包含設備型號、hw_id、版本號等信息;變長取整補充數(shù)據(jù)塊用于文件補0填充為4k字節(jié)的整數(shù)倍,以便于Flash芯片的快速定位與讀寫;kernel鏡像和filesystem鏡像都又分為Uimage頭和鏡像文件本身,其中鏡像文件進行了lzma壓縮;1字節(jié)校驗域用于存放前四部分數(shù)據(jù)校驗和的異或值。
三、R2000升級固件封裝過程實現(xiàn)
3.1文件系統(tǒng)壓縮
對操作系統(tǒng)內核和文件系統(tǒng)進行壓縮,壓縮算法為lzma。壓縮命令為squashfs ./r2000 r42file_modify.img –comp lzma,其中./r2000為文件系統(tǒng)所在目錄,r42file_modify.img為壓縮后的文件名,-comp lzma指定壓縮算法為lzma。
3.2文件系統(tǒng)鏡像文件生成
將壓縮后的文件系統(tǒng)按照鏡像文件格式封裝,包括鏡像頭的生成和添加,利用的工具為mkimage,具體操作命令為mkimage –A mips –O linux –T kernel –C none –a 0x80002000 –e 0x801f68f0 –n “mips OpenWRT linux2.6.31”–d r42file_modify.img uImage,各選項參數(shù)中–A mips指定CPU架構為MIPS,–O linux指定操作系統(tǒng)為linux,–T kernel指定鏡像類型為kernel,–a 0x80002000指定程序訪問點,–e 0x801F68F0指定程序進入點,–d r42file_modify.img指定文件系統(tǒng)名。
3.3固件升級鏡像文件組裝
將 廠家所提供升級鏡像文件的文件頭、操作系統(tǒng)鏡像與上述步驟3生成的文件系統(tǒng)鏡像組裝在一起,具體操作命令為cat r42_forehead.img uImag >r42full_create.img。
3.4校驗和計算與填充
對上述步驟3生成的鏡像文件進行校驗和計算并追加至文件末尾。編程實現(xiàn)了下列校驗和計算過程:對鏡像文件以字節(jié)為單位依次讀取和二進制相加,截取求和結果的低8位(1字節(jié))并取反。校驗和計算結束后,將1字節(jié)校驗值追加至文件末尾。至此,完成整個固件的封裝過程。
四、結束語
本文圍繞美國固件公司R2000路由器的安全審計問題,逆向分析澄清了其升級固件的封裝格式,重點分析了數(shù)據(jù)完整校驗算法,在此基礎上工程實現(xiàn)了升級固件的完整封裝過程。下一步,我們將對所提取還原的文件系統(tǒng)開展安全審計,力求發(fā)現(xiàn)安全漏洞并向廠家反饋修補意見,從而確保網(wǎng)絡可靠安全。
參 考 文 獻
[1] NETGEAR. N300 WIFI router[EB/OL]. http://www.netgear.com.cn/home/products
/networking/wifi-routers/R2000.aspx?cid=wmt_netgear_organic.
[2] Binwalk. Firmware analyze tool[EB/OL]. https://github.com/devttys0/binwalk.
[3] Squashfs. Squashfs file system[EB/OL]. http://squashfs.sourceforge.net/.
[4] Die.Net. Mkimage-Linux man page[EB/OL].https://linux.die.net/man/1/mkimage.
[5] Chris Eagle. IDA Pro權威指南(第2版)[M]. 石華耀 段桂菊譯. 北京:人民郵電出版社,2012.
[6] 布魯姆 布雷斯納漢. Linux命令行與shell腳本編程大全(第3版)[M]. 門佳 武海峰譯. 北京:人民郵電出版社,2016.
[7] 吳少華等.揭秘家用路由器0day漏洞挖掘技術[M].北京:電子工業(yè)出版社,2015.