逆向路由器固件之解包 Part1


這個系列的文章以逆向路由器固件的方式來挖掘路由器中存在的漏洞。

本篇文章主要以介紹解包固件工具為主。文中演示用的固件可以在這里下載。由於針對設備的攻擊越來越多,很多廠商把不提供固件下載作為一種安全策略。所以有些時候只能通過物理的方式從設備中導出固件。后續的文章中會介紹相關技術。

通用的linux RE工具

file — 用來檢測是否是有效的文件和文件類型
hexdump —16進制導出工具
strings 跟hexdump類似但是可以以可讀的形式展示
dd — 從二進制文件中挖掘數據
lzma — 解壓LZMA文件

第三方工具

binwalk — 通過固件文件頭來分析文件和文件系統
Fireware Mod Kit — 自動化分析固件文件的一系列腳本
squashfs-tools — 可以通過apt-get squashfs-tools 來安裝。用來處理squashfs的一系列工具

初步分析

通常來說逆向工程的第一步就是使用上面列出的通用linux工具從要分析的文件中挖掘出盡量多的信息。通過這些信息來決定下一步進行的分析。比如使用hexdump發現sqsh意味着文件中有一個squashfs文件系統或者識別出了固件包中常用的boot loader U-Boot。

File Tool

文件工具通常只是告訴我們這個文件是否是已知的文件類型,某些情況下可以識別出文件的種類,比如數據文件。

使用file分析路由器固件如下:

file分析的結果可以告訴我們該文件是否是已知的類型,是否需要進一步分析。這里的結果我們可以看到僅僅是顯示數據文件。

hexdump

hexdump 工具可以讓你分析文件中的每一個字節,這是非常有價值的。使用hexdump分析固件如下:

上面的命令會把hexdump的結果寫入到文件hexTP.txt中做進一步分析。-C選項是設置hexdump輸出為hex+ASCII的方式,更便於閱讀。輸出的文件十分巨大,這個例子中我們可以從文件頭的地方看到這個固件是屬於TP-Link的,但是這個信息我們已經知道了。所以下一步就是嘗試strings命令,看看是否可以獲得更多的信息。

strings

作為初始的信息收集,strings可能是最常用和做好用的工具之一,因為它可以顯示文件中所有可打印的數據。跟使用hexdump一樣,最好把strings的結果寫入文件分析,以免下次想要分析的時候還需要重復一遍strings命令。

從strings的結果中,我們發現了一些有趣的信息。這個信息就在strings結果文件開始的地方,稍微往后翻一下或者搜索一下文件系統常用的boot loader名字比如U-boot,就可以找到這些信息。現在我們已經知道這個嵌入式系統使用U-boot作為boot loader,而且知道了它的版本信息。

Binwalk

binwalk會分析二進制文件中可能的固件頭或者文件系統,然后輸出識別出的每個部分以及對應的偏移量。使用binwalk分析固件如下:

binwalk給出了大量有用的信息。從這些信息中可以得知這個固件是運行在MIPS架構上的一個linux系統。使用了squashfs文件系統。同時也再次確認boot loader是U-boot。關於binwalk的更詳細的用法可以參考Binwalk:后門(固件)分析利器。

提取文件系統

終於到了最關鍵的一步,我們要從固件鏡像中分離出文件系統的內容。因為是linux系統,可以預見一些標准的linux文件比如passwd和shadow可能會有一些敏感信息。很多人使用dd來分離文件系統的內容。使用binwalk和Firmware Modification Kit來解包最簡單方便。

使用binwalk的-e參數可以自動把固件鏡像中的所有文件都解出來。

binwalk -e <input file>

使用Firmware Modification Kit中的extract-firmware.sh腳本會更加高效。如果你想重打包修改之后的固件的話可以使用build-firmware.sh來打包固件。這樣可以節省大量時間自己解包和管理所有的偏移。

極路由安全設計架構分析這里分析的極路由的那個固件包,使用FMK就可以一鍵解包。如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM