1、Flash Dump技術概述
固件指嵌入在硬件設備中的軟件,固件分析是分析IoT設備軟件層面安全性的主要手段。隨着物聯網安全獲得重視,愈來愈多的廠商選擇發佈加密的固件升級包。這種改變讓安全研究者也愈來愈難以從升級包中直接提取固件。安全研究者們所以將目光轉向設備自己,嘗試從設備中直接提取固件。web
從設備中提取固件的方式有不少,好比找到串口,經過uboot命令dump固件,甚至直接經過硬件調試口讀取固件。但這些基於串口、基於調試的方法都不具有通用性,須要設備預留相關接口。固件通常存儲在Flash芯片中,而且因爲成本、性能等因素限制,通常都不會加密。所以直接從Flash芯片中讀取固件即Flash Dump技術的通用性比較好,是進行IoT設備分析的關鍵技術。面試
Flash Dump的流程能夠分爲四個部分,芯片拆卸、數據讀取、固件提取和芯片焊接。這個過程會涉及到一些硬件知識和拆焊技能。從事固件分析的安全研究者通常具有較好的軟件背景知識,但不必定了解硬件和焊接,而大多數Flash Dump技術文章對硬件相關技術點的介紹比較簡略。本文但願填補這個空白,對FlashDump過程當中涉及的硬件相關知識和焊接技能着重進行介紹。算法
2、 Flash芯片拆焊
Flash Dump技術的第一個難點,是如何在不損壞設備的前提下,對芯片進行拆焊。編程
2.1. 芯片拆卸
工具:熱風槍、風嘴、高溫膠帶、鑷子。安全
芯片拆卸的核心工具是熱風槍,以下圖 2‑1所示。掌握熱風槍的正確使用方法,纔可以保證成功拆卸芯片。使用熱風槍時須要注意兩個要素:溫度和風速。溫度太高會致使器件損壞,溫度太低沒法融化焊錫。風速太高容易把器件吹跑,風嘴的角度不對也可能致使器件損壞。網絡
圖2‑1快克957DW熱風槍運維
一般若是目標芯片使用含鉛焊錫焊接,咱們能夠將熱風槍的溫度控制在330~350攝氏度之間,若是採用無鉛焊錫,則將溫度設置在350~370攝氏度。爲了防止目標芯片周圍的器件受到影響,咱們可使用高溫膠帶將周圍的器件包裹起來,起到隔熱保護的做用。須要注意的是,有的芯片對焊接溫度有特殊要求,以下圖 2‑2所示,對於這樣的芯片咱們須要以芯片手冊爲準。工具
圖2‑2對溫度有特殊要求的QPX芯片web安全
風量的控制須要結合實際芯片的尺寸,以快克957DW熱風槍爲例,對於通常芯片能夠採用風槍的3~4擋。風嘴也須要結合芯片的尺寸來進行選擇,若是芯片較大就要選擇較大一些的風嘴。性能
作好了上述工做後,咱們就能夠啓動熱風槍,讓風嘴在距離芯片2釐米左右的高度上均勻加熱芯片,以下圖 2‑3所示,等待焊錫融化後就能夠用鑷子把芯片取下來。
圖2‑3使用熱風槍加熱芯片
2.2. 芯片焊接
工具:焊臺/電烙鐵、烙鐵頭、錫條、熱風槍、風嘴、助焊膏/助焊劑、高溫膠帶、鑷子。
在完成固件提取後,咱們須要將芯片從新焊回。焊接芯片的主要工具是焊臺/電烙鐵和焊錫。常見的SOP封裝芯片焊接過程能夠分爲三個步驟,固定芯片、拖焊、去除連錫。
首先須要在芯片的一角打上焊錫,以下圖 2‑4所示:
圖2‑4在芯片一角上錫
而後用鑷子放上芯片,並在對角打上焊錫固定芯片,以下圖 2‑5所示:
圖2‑5固定芯片對角
而後經過拖焊,將芯片引腳都打上焊錫,以下圖 2‑6所示:
圖2‑6拖焊四邊引腳
這個時候會出現焊錫分佈不均勻,把多個引腳粘連起來的狀況,稱爲連錫。咱們能夠經過在出現連錫位置處加上助焊膏,以下圖 2‑7所示:
圖2‑7添加助焊膏
而後在用烙鐵頭加熱焊錫並颳去連錫。因爲焊接是一項實踐性很是強的技能,這裏只能就常見的情形進行簡略的介紹。實操中仍是須要結合實際,勤加練習,才能保證焊接的成功率。對於沒有引腳的貼片元件,須要使用熱風槍進行吹焊,操做方法和上一節拆卸芯片相似,這裏再也不詳細介紹。
3、Flash數據讀取
工具:多功能編程器、適配器。
完成Flash芯片拆卸後,咱們就能夠開始讀取Flash中存儲的數據。這裏咱們須要用到多功能編程器和適配器。多功能編程器是用於讀寫各種存儲器數據的專用工具,以下所示,通常須要配合適配器使用。
圖3‑1 TNM-5000編程器
因爲不一樣廠商、不一樣型號的Flash芯片會採用不一樣的封裝,引腳數目也不相同,所以須要相應的適配器來適配芯片的引腳。
圖3‑2 TSOP48適配器
在讀取數據時,還可能須要對數據進行處理,好比修復錯誤數據以及去除ECC校驗位。Flash芯片分爲NorFlash和Nand Flash。若是目標芯片爲NorFlash,則不須要考慮去除ECC校驗位,能夠直接進行固件解析,若是是Nand Flash則必須去除ECC校驗位。下面兩節詳細介紹了,數據處理的方法和原理。
3.1. 修復數據錯誤
讀取數據的過程當中可能因爲硬件問題或數據傳輸的緣由(比特翻轉),致使部分數據讀取出錯。所以須要屢次讀取,並校驗讀取結果。若是屢次讀取的內容一致,說明讀取過程沒有出現問題,若是屢次讀取的結果不一致,則須要對讀取結果進行數據修復。
因爲這種數據出錯是隨機的,所以通常採用基於統計的方法修復錯誤數據。首先進行屢次讀取,並統計出全部變化的字節。這些字節在屢次讀取中出現頻率最高的值,即爲原始數據的值。
3.2. 去除ECC校驗位
Nand Flash包含若干個塊,一個塊包含若干個頁。因爲電氣特性的限制,Nand Flash是以頁爲單位讀取,以塊爲單位擦寫。Nand Flash在擦寫過程當中,氧化層結構會逐步被破壞,所以Nand Flash有擦寫次數限制,擦寫次數超出限額會造成壞塊。
IoT設備會在軟件層面實現壞塊管理,充分利用Nand Flash的存儲空間,延長使用壽命。壞塊管理通常使用ECC校驗算法,ECC校驗算法通常每256字節原始數據生成3字節校驗數據,在Nand Flash上存儲原始數據的同時會存儲校驗數據。
因爲ECC校驗算法的使用,致使咱們從Nand Flash中讀出的數據混合了原始數據和校驗數據。要想對固件進行正確的解析,必須去除這些校驗數據。通常Nand Flash每頁存儲512字節原始數據,並分配16字節用於存儲校驗數據、壞塊標記和文件系統信息,這16字節被稱爲spare area。可是原始數據和spare area的排布並非固定的,常見的排布方式有兩種,以下圖 3‑3所示:
圖3‑3 Nand Flash校驗數據排布
原始數據和spare area的排布是由操做系統層面對Nand Flash讀寫的實現方式決定的,所以沒有固定的標準。通常能夠根據芯片手冊,結合NandFlash頁大小、spare area大小以及常見的排布形式進行嘗試。
4、固件解析
工具:binwalk。
通過前面幾節的工做後,咱們已經讀取到Flash中的固件數據,能夠嘗試進行固件解析了。固件解析的經常使用工具是binwalk。固件解析的目標是提取出文件系統或操做系統鏡像。
基於Linux的IoT設備固件,可使用binwalk直接提取出文件系統。由於binwalk對uboot鏡像格式uImage以及經常使用的文件系統如ubifs、squashfs、jffs二、yaffs等有很好的支持。有些IoT設備或工控設備會使用ucos ii、vxworks等操做系統,這些操做系統可能並無文件系統支持,而是直接以操做系統鏡像的形式載入內存運行。咱們依然可使用binwalk作一些前期的分析。好比有些設備也會使用uboot作ucos ii的引導,找到uImage就能夠找到操做系統鏡像。此外因爲大多數IoT設備是基於芯片廠商提供的系統和開發環境進行二次開發。若是能獲取目標設備對應的芯片廠商文檔,對提取操做系統鏡像也會有幫助。
看到這裏的大佬,動動發財的小手 點贊 + 回覆 + 收藏,能【 關注 】一波就更好了
爲了感謝讀者們,我想把我收藏的一些網絡安全/滲透測試學習乾貨貢獻給你們,回饋每個讀者,但願能幫到大家。
乾貨主要有:
① 2000多本網安必看電子書(主流和經典的書籍應該都有了)
② PHP標準庫資料(最全中文版)
③ 項目源碼(四五十個有趣且經典的練手項目及源碼)
④ 網絡安全基礎入門、Linux運維,web安全、滲透測試方面的視頻(適合小白學習)
⑤ 網絡安全學習路線圖(告別不入流的學習)
⑥ 滲透測試工具大全
⑦ 2021網絡安全/Web安全/滲透測試工程師面試手冊大全
各位朋友們能夠關注+評論一波 而後加下QQ羣:581499282 備註:開源中國 聯繫管理大大便可免費獲取所有資料