HG533路由器分析教程之三:資料流跟蹤
原文首發:看雪論壇 http://bbs.pediy.com/thread-214738.htm
前兩節(HG533路由器分析教程二、教程一)已經找到了硬體 pcb 板上的串列埠,並瞭解了 uboot 和 busybox 的執行。
這一節從通訊的流量出發,分析更多的資訊。
一、 PCB 電路板中的資料流
存放在儲存單元的資料是沒有用的,它需要被讀、寫和傳輸才會有價值,粗略的看一下電路板,就可以看到電路板上的佈局以及線路,進而得到資料流的流向,如圖一所示。
圖一 線路板的資料通訊線路
在這裡,我們不是去找硬體的後門資訊,而主要是關心
Ralink 與 flash 之間的 SPI 資料傳輸。 電路板上晶片的 datasheet
文件可以很容易的從網際網路上獲取,本文中主要關心下面兩個晶片的文件資料, CPU 晶片 Ralink RT3352F 和 flash 晶片
Spansion FL064PIF。
此時,我們已經得到晶片資料,協議等資料,接下來就就是要研究與之最相關的資料塊。
二、 flash 晶片介紹
我們關心的是 CPU 與 flash 之間通訊的資料流,首先是需要知道如何與邏輯分析儀連線,通過檢視datasheet 就可以分析出 flash 晶片的每一個引腳作用,如圖二所示。
標準的 SPI 通訊使用 4 個引腳:
MISO:資料線,從 Flash→Ralink
MOSI:資料線,從 Ralink→Flash
SCK:時鐘訊號, 因為 SPI 使用的是序列通訊協議, MISO 和 MOSI 是基於時鐘訊號完成資料傳輸的
CS#:片選線,控制晶片是否被選中,在這個 flash 晶片中,當設定為 0 的時候,表示有效
圖二 Flash 晶片引腳意義圖
知道了引腳意義之後,將這四個引腳連線到邏輯分析儀上,隨機的抓取其中的資料。連線如圖三所示。
圖三 引腳與邏輯分析儀連線圖
接下來是瞭解 SPI 配置選項,包括:
傳輸的位元組順序,即大小端( MSB 和 LSB),標準的是首先使用 MSB
傳輸的位元位數,標準的是 8 位
CPOL:時鐘極性,定義 SPI 時鐘的活動狀態
CPHA:時鐘相位,定義相對於 SO-資料位的時鐘相位
其中最後兩個引數在 datasheet 中定義了僅有兩種組合(CPOL=0, CPHA=0)或者(CPOL=1, CPHA=1)。如圖四所示。
圖四 SPI flash CPOL 和 CPHA 模式
下圖五是嗅探的部分資料。
圖五 嗅探的資料圖
這些訊號需要對照 datasheet 瞭解代表的詳細含義。
圖六 datasheet 資料意義解釋
下圖七是對抓取資料的分析。
圖七 抓取資料解釋
Datasheet 中說明 flash 晶片具有較快的讀寫速度,這是依靠多路複用器實現的,在這個路由器中沒有使用,當使用了多路複用器以後抓到的資料會比較沒有規律。
如果邏輯分析儀的功能不夠多的時候,傳輸模式下需要額外的引腳的時候將會是個麻煩。
三、 抽樣率的重要性
邏輯分析儀是個簡單的裝置,
映像顯示是將儲存器中的全部內容以點圖形式一次顯示出來。它將每個儲存器字分為高位和低位兩部分,分別經 X, Y 方向 D/A
變換器變換為模擬量,送入顯示器的 X 與 Y 通道,則每個儲存器字點亮螢幕上的一個點。而圖解顯示是將螢幕的 X 方向作為時間軸,將 Y
方向作為資料軸進行顯示的一種方式。將欲顯示的數字量通過 D/A
變換器轉變成模擬量,將此模擬量按照儲存器中取出的數字量的先後順序顯示在螢幕上形成一個影象的點陣,然後分析資料之後傳送到計算機上面。也就是邏輯分析儀將被測資料訊號用數字形式寫入儲存器後,可以根據需要通過控制電路將記憶體中的全部或部分資料穩定的顯示在螢幕上,所以會得到分析精確的資料,如果輸出出現問題,得到的波形也會出現問題。邏輯分析儀無論取樣頻率,儲存空間,觸發深度等資源都是有限的,我們只有充分組合協議相關的元件才能發揮其最大的效用,所以選的那款裝置不是很給力的話,介面也會成為一個問題。
我記錄了 Ralink-Flash SPI 匯流排,這裡我使用的是 saleae 邏輯分析儀, 最大的取樣率為 24 MS/s,如圖八所示。
圖八 24MS/s 邏輯分析儀取樣的資料
從上圖可以看出, 所示時鐘訊號由低到高( 8 個部分),而這種波形可能會導致資料衝突問題,雖然允許完全的資料傳輸正確,但是也需要注意這一點,這一步和計劃步驟沒有太大關係。
用分析儀再一次分析( 100 MS/s),如圖九所示。
圖九 100MS/s 邏輯分析儀取樣資料
從圖中可以看出,即使取樣率很高的時候,時鐘訊號還是滿足要求的。
如果你發現在你的取樣中,有些訊號丟失,你就要考慮丟失的資料是否影響你的分析,如果有影響的話,就要考慮換個高階的更貴的邏輯分析儀了。
四、 資料流檢視
第二節中已經分析了系統,接下來我們將用示波器連結 flash 的 MISO 和 MOSI 引腳來獲取傳輸的訊號。連線如圖十所示。
圖十 示波器連線示意圖
下面連結的視訊顯示了資料的變化情況。
http://static.video.qq.com/TPout.swf?vid=w0303365imd&auto=0
從中可以很容易的看到讀/寫的動作,這些將有助於我們何時使用邏輯分析儀和使用多久。
五、 分析 SPI 通訊流
在第二節中的 ATP 中有一個 save 命令,是儲存一些東西到 flash 中,但是幫助文件並沒有說明具體做了什麼,僅僅顯示了進度條。接下來就是我們自己去發現 save 命令到底做了什麼。
1、 重啟知道啟動完成,此時路由器處於空閒狀態, SPI 資料流將為空
2、 如第一節中那樣開啟 ATP
3、 將 flash 的 MISO/MOSI 連線到示波器上,執行 save 命令,計算出需要抓取的時間長
4、 使用 enable 命令,裡喲個邏輯分析儀分析快閃記憶體
5、 儲存並分析記錄的資料
其中步驟 3 和步驟 4 可以結合使用,這樣可以保證沒有資料丟失。資料線連線如圖十一所示。
圖十一 邏輯分析儀連線圖
當抓取到資料時,資料如圖十二所示。
圖十二 開始抓取的資料圖
這裡就需要分析裡面的資料哪些有用,因為我們是在測試儲存晶片,所以我們能夠獲取到讀/寫的資料情況以及地址屬於哪裡。
這裡採用兩種方法: 第一種可以考慮使用之前的時間順序,還有一種是建立可讀、寫二進位制檔案(記憶體部分)。 邏輯分析儀匯出的是 csv
格式檔案,我編寫了 python 指令碼,幫助我分析和搜尋檔案。所以整個的分析如下:
1、 輸出獲取的資料( CSV)
2、 執行指令碼程式、 搜尋目標 CSV 檔案、確定第一個命令(第一位元組處)、處理引數資訊(地址)、讀/寫分析、 ASCII 編碼與二進位制轉換( payload 位元組)、不同二進位制檔案讀/寫(MISO (read) 或 MOSI(write))
3、 Traffic Map 效果分析(hexdump -C output.bin | less)
通過上述分析,發現 Traffic Map、 MOSI 和 MISO、地址等資訊,發現 save 命令還是有效的。
結合第二部分的對映表,圖十三所示。
圖十三 地址對映表
通過上面的分析,可以知道 save 命令的資料流比較簡單:
1、 從保護區域讀取 64kb 的資料
2、 覆蓋掉剛剛讀取的 64kb 資料
MISO 的二進位制中可以看出,主要傳輸的都是 1:如圖十四所示。
圖十四 MISO 資料而 MOSI 的內容更像是明文的資料,非常像第二節中發現的/var/curcfg.xml 檔案,包含了 wifi 密碼等資料資訊。
Flash 中存在保留區是通用的做法,這些區域是為了儲存各種各樣的資料,以便在重啟或者使用者配置、恢復出廠等時候使用, save 命令就是負責儲存資料到這些區域的。 也許是為了保留一些出廠資訊,這也許就是為什麼會在/var/資料夾下發現了 XML 檔案。
六、 韌體
在整個挖掘過程中,目標是促進你不斷深挖的動力。
我們的目標是找到生成預設 wifi 密碼的演算法,如果我們得到了這個演算法並且從公開資訊中獲取某些引數,那麼我們可能就能夠獲取所有的 HG533 路由器的預設密碼。
此類安全問題已經被多次發現,通常的公開資料是從 MAC 地址或者 SSID 中獲取。
當然,並不是所有的路由器裝置都是這樣的,通常情況下,在嵌入式工程中,需要有某段資料既能被韌體知道,同時又是每一個裝置都不同而且從外面的實體中可以獲取的,這段資料的獲取是個經常性的問題,存在於工業界的所有的物聯網裝置中。
七、 標籤的問題
在今天這個時代, 你會遇到一個問題就是路由器連線到網路,而目前就是在路由器的一面可以發現一張貼紙,而上面就有路由器的預設管理密碼,然後配置好後連線網路。 如圖十五所示。
圖十五 路由器後面的標籤
這個 WIFI 密碼就是一個特定的資料塊, 工長生產的時候,韌體和電腦都需要知道這個預設的 WIFI 密碼,通常情況下開發人員會採用兩種可行的方案:
1、 裝置和電腦採用相同的生成演算法,而且輸入的引數都知道
2、 電腦為每一個裝置生成一個密碼,然後分別儲存到裝置中
除了不能讓硬體廠商向每一個裝置中存入不同的引數或者不願承擔這個額外寫入的成本之外,第一種方法通常被視為最後的手段。 第二種方法從設計上看更合理,但是通常情況下,公司不會直接隨機的生成這個密碼,而是會使用一種演算法得到一個可預測的輸出。
八、 恢復出廠設定嗅探
接下來我們就要弄清楚那些動作將會啟動
PCB 相關的資料流,有一個特殊的動作,即長按 10s 復位鍵,就會是路由器恢復出廠設定,這其中會重置 wifi 的密碼,當然也會執行預設
wifi 的生成演算法。 如果生成演算法或者引數要從 flash 中獲取,那麼我們就能獲取讀取的通訊資料。
在長按復位鍵的時候,我們觀察 UART 介面的資料,邏輯分析儀和示波器的資料,和之前的 ATP 的 save過程一樣,得到的結果如圖十六、圖十七所示。
圖十六 UART 輸出結果
圖十七 邏輯分析儀的資料流
同樣,我們分析資料流,可以看出從保護區讀取了如下的資料。
___________________
|Transmission Map|
| MOSI | MISO |
| |0x7e0000| Size: 12 //Part of the Protected area
| |0x7e0000| Size: 1782
| |0x7e073d| Size: 63683
| ERASE 0x7e073d | Size: 64kB
|0x7e073d| | Size: 195
|0x7e0800| | Size: 256
|0x7e0900| | Size: 256
---------//--------
[...]
---------//--------
|0x7e0600| | Size: 256
|0x7e0700| | Size: 61
| |0x7d0008| Size: 65529 //Part of the Protected area
| ERASE 0x7d0008 | Size: 64kB
|0x7d0008| | Size: 248
|0x7d0100| | Size: 256
---------//--------
[...]
---------//--------
|0x7dff00| | Size: 256
|0x7d0000| | Size: 8
| |0x1c3800| Size: 512 //Part of the Filesystem
| |0x1c3a00| Size: 512
---------//--------
[...]
---------//--------
| |0x1c5a00| Size: 512
| |0x1c5c00| Size: 512
-------------------
我決定結合之前的二進位制檔案作進一步的分析,讀取快閃記憶體資訊(ATP_LOG),這裡有出廠重置以及遠端訪問資訊,這部分是在
0xff( 1s ),改寫記憶體( 1s),建立新的 ATP_LOG 資訊以及當前配置檔案( curcfg.xml
),從檔案系統中讀取壓縮資料資訊。系統檔案中有一部分資料是在讀取(AFTER)過程中得到的,另外需要說明的就是這個和密碼加密演算法沒有關係,可能演算法已經載入到記憶體中了,但
SPI 通訊方式也沒有確定這一點。
在 MOSI 部分可以看到新的 WiFi 密碼(快閃記憶體)以 XML 字串形式出現,如圖十八所示。
圖十八 新的 wifi 密碼明文( MOSI)
如果想要獲取到預設的密碼,那就需要分析
MISO 部分,也許記憶體中已經載入了,而在下一部分將會對這個深挖。而這裡也需要對 SPI 通訊在做分析(HTTP 認證),主要是看新的
WiFi 密碼,即 Map、 MISO、 MOSI。下面就是在快閃記憶體分析到的資訊,如圖十九所示。
圖十九 分析快閃記憶體得到資訊
從中可以看出, 這些都是明文資訊,也就是說沒有加密演算法在裡面,但這也不是決定性的,因為這也有可能是生成的憑證,或者延遲演算法出現的時間也就是限制訪問演算法。
本文由 看雪智慧硬體安全小組成員 光棍節 編譯,來源Juan Carlos Jiménez@The World
點選http://www.kanxue.com/article-846.htm加入看雪智慧硬體安全小組哦!
❤ 往期熱門內容推薦
漏洞分析 | CVE-2017-7269:IIS6.0 遠端程式碼執行漏洞逆向分析記錄
......
更多優秀文章,“關注看雪學院公眾號”檢視!
看雪論壇:http://bbs.pediy.com
微信公眾號 ID:ikanxue
微博:看雪安全
投稿、合作:www.kanxue.com
相關文章
- 如何跟蹤資訊流廣告轉化資料?
- 資料庫資料跟蹤記錄資料庫
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- sql server跟蹤資料庫SQLServer資料庫
- 新增時--sqlserver資料庫跟蹤SQLServer資料庫
- tkprof: 分析ORACLE跟蹤檔案Oracle
- 動態跟蹤分析VB程式
- Java™ 教程(資料流)Java
- Oracle事件跟蹤及結構資料dumpOracle事件
- 檢查資料庫是否啟用了跟蹤資料庫
- 演算法分析__遞迴跟蹤演算法遞迴
- 使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- 跟蹤session 與 trace檔案分析Session
- TCP流嗅探和連線跟蹤工具tcpickTCP
- 轉:使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- 一個非侵入式跟蹤分析程式
- [zt] oracle跟蹤檔案與跟蹤事件Oracle事件
- oracle跟蹤檔案與跟蹤事件(zt)Oracle事件
- oracle跟蹤檔案和跟蹤事件(zt)Oracle事件
- MochaImport+ for Mac - 匯入處理Mocha跟蹤資料AIImportMac
- 運營人員都需要跟蹤哪些app資料?APP
- 將跟蹤與Windows效能日誌資料關聯Windows
- 使用10046跟蹤Oracle前映象資料讀Oracle
- 需求分析—資料流圖
- [原始碼分析] OpenTracing之跟蹤Redis原始碼Redis
- KCF目標跟蹤方法分析與總結
- 【LOG】Oracle資料庫清理日誌、跟蹤檔案利器Oracle資料庫
- Oracle中如何跟蹤SQL或資料庫操作 [final]OracleSQL資料庫
- sqlnet跟蹤SQL
- ORACLE 跟蹤工具Oracle
- web前端學習教程:Cookie會話跟蹤技術Web前端Cookie會話
- 【DB】使用SQL_TRACE進行資料庫診斷跟蹤SQL資料庫
- 把資料庫控制檔案備份到跟蹤檔案資料庫
- 程式分析與優化 - 3 資料流分析優化
- Wireshark分析器分析資料流過程
- 基於行跟蹤的ROWDEPENDENCIES實現資訊變化跟蹤
- 【Longkin】ASP.NET應用程式跟蹤---(一)跟蹤頁面ASP.NET
- 使用10046事件跟蹤分析執行計劃事件