引文
在前面兩個部分(1,2)已經介紹了UART,BusyBox等部分的逆向調試,而這篇將會開始在流量分析方面下手,來逆向出更多的信息。
正文
請看下圖,數據存儲在靜態存儲單元中,想要獲取到這些數據,那就需要讀、寫或輸出才能獲得。而在下圖就可以看到PCB電路板的布局情況,還有就是布線以及分析數據輸出情況。
在這里需要說明的是我不是在尋找硬件的后門信息,主要着重於SPI數據傳輸情況(圖中可見 Ralink標識的芯片以及外部flash),如果想要尋找相關芯片資料,這個就可以在網上找到,這里給出一些有關RT3352F(雷凌)芯片(點擊我),還有64位SPI閃存(Spansion FL064PIF)的資料,現在我已經掌握芯片資料、還有之前的文章的一些協議分析內容,下面我就開始按照之前的計划進行分析了。
這里要說明一點內容就是SPI部分的,SPI的通信原理是以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基於SPI的設備共有的,它們是SDI(數據輸入)、SDO(數據輸出)、SCLK(時鍾)、CS(片選)。
閃存
這里主要是關注於Ralink IC與閃存之間通過SPI接口進行通信的分析,在開始之前,還需要連接邏輯分析儀,由於之前已經了解到閃存的數據輸出引腳所以不需要再次逆向了。
SPI口四線制引腳:MISO(主機輸入/從機輸出數據線, Ralink<-Flash)、MOSI(主機輸出/從機輸入數據線,Ralink->Flash)、串行時鍾線(SCK)、CS#(片選)CS是控制芯片是否被選中的,也就是說只有片選信號為預先規定的使能信號時(高電位或低電位),對此芯片的操作才有效。這就允許在同一總線上連接多個SPI設備成為可能。好吧,現在就可以利用分析儀進行分析了這里需要知道有關SPI配置信息,SPI是串行通訊協議,也就是說數據是一位一位從MSB或者LSB開始傳輸的,這就是SCK時鍾線存在的原因,由SCK提供時鍾脈沖,MISO、MOSI則基於此脈沖完成數據傳輸。
SPI支持4-32bits的串行數據傳輸,支持MSB和LSB,每次數據傳輸時當從設備的大小端發生變化時需要重新設置SPI Master的大小端,傳輸的數據為8 位,而最常用的時鍾設置基於時鍾極性(CPOL)和時鍾相位(CPHA)兩個參數,CPOL定義SPI串行時鍾的活動狀態,而CPHA定義相對於SO-數據位的時鍾相位。 CPOL和CPHA[0=leading, 1=trailing的設置決定了數據取樣的時鍾沿,至於閃存可以參考這一點, (CPOL=0, CPHA=0) 或 (CPOL=1, CPHA=1)。
下面就是嗅探到的數據
這里你需要了解FL064PIF的信息(網上有更多的資料,感興趣的小伙伴可以去看看)
下面是最終分析到的數據信息
在之前的資料可以分析 FL064PIF芯片的讀寫速度相對比較快,而多路復用器在這方面起到了作用。如果邏輯分析儀功能不多的話,分析數據就有些費力了。
邏輯分析儀是分析數字系統邏輯關系的儀器,映像顯示是將存儲器中的全部內容以點圖形式一次顯示出來。它將每個存儲器字分為高位和低位兩部分,分別經X,Y方向D/A變換器變換為模擬量,送入顯示器的X與Y通道,則每個存儲器字點亮屏幕上的一個點。而圖解顯示是將屏幕的X方向作為時間軸,將Y方向作為數據軸進行顯示的一種方式。將欲顯示的數字量通過D/A變換器轉變成模擬量,將此模擬量按照存儲器中取出的數字量的先后順序顯示在屏幕上形成一個圖像的點陣,然后分析數據之后發送到計算機上面。也就是邏輯分析儀將被測數據信號用數字形式寫入存儲器后,可以根據需要通過控制電路將內存中的全部或部分數據穩定的顯示在屏幕上,所以會得到分析精確的數據,如果輸出出現問題,得到的波形也會出現問題。邏輯分析儀無論采樣頻率,存儲空間,觸發深度等資源都是有限的,我們只有充分組合協議相關的組件才能發揮其最大的效用,所以選的那款設備不是很給力的話,接口也可以成為一個問題。我記錄了Ralink-Flash SPI總線,這里我使用的是saleae邏輯分析儀,速率24 MS/s
如圖中所示時鍾信號由低到高(8部分),而這種波形可能會導致數據輸出出現問題,雖然允許完全的數據傳輸正確,但是也需要注意這一點,這一步和計划步驟沒有太大關系。用分析儀再一次分析(100 MS/s)
現在得到的這個時鍾信號可以說可以了,采樣率也滿足了。如果想要更好的分析,可以考慮買一個更高性能的分析儀
這里需要第二部分的分析,SPI接口以及之前分析的MISO和MOSI部分,可以在下面繼續分析
視頻觀看
之前第二部分對於命令行頁面(ATP CLI )的一些命令已經介紹了,這個時候需要開啟路由器,這時候路由器是閑置的情況,並沒有開始SPI通信,開始第一部分命令行頁面(ATP CLI),然后連接MISO/MOSI,再save,然后計算我需要多少時間來獲取到數據。另外需要使用enable命令,然后利用邏輯分析儀分析閃存,最后運行save命令,分析已經獲取到的數據。MISO/MOSI以及enable命令兩部分可以在一起使用,這樣就可以獲取到流量范圍,這次測試也很方便
這就是獲取到的數據信息
這里就需要分析里面的數據哪些對我有用,以及讀寫數據情況。這里主要可以采取兩種方法,第一種可以考慮使用之前的時間順序,還有一種是創建可讀、寫二進制文件(內存部分)。之前的分析儀分析輸出的文件格式為 CSV,我決定編寫一個Python腳本程序來幫助我分析文件以及搜尋需要使用的文件binmaker.py以及traffic_mapper.py。整體工作如下,分析數據(CSV)、運行腳本程序、搜尋目標CSV文件、確定第一個命令(第一字節處)、處理參數信息(地址)、讀/寫分析、ASCII編碼與二進制轉換(payload 字節)、不同二進制文件讀/寫(MISO (read) 或 MOSI (write)),以及后來Traffic Map效果分析(hexdump -C output.bin | less)。效果:Traffic Map、 MOSI和MISO、地址。在圖中可以看到使用save命令還是有效的
同時可以讀取64kB 數據(protect部分)、還有修改之前獲取到的數據,在另一部分(MISO)可以看到很多數據(1s)
大多數的二進制文件(MOSI)里面都是明文數據(XML),和之前的文件部分很像,包含了WiFi數據信息。也許是為了保留一些出廠信息,這也許就是為什么會在/var/文件夾下發現了XML文件。
固件
在整個過程中方向是很重要的,那就是能不能分析出WiFi密碼的加密算法,以后再遇到這個型號的路由器就可以很快知道密碼,即使在公共場所已知Mac地址以及無線網名然后獲取路由器型號。但作者表示這個想要做到並不容易,需要對固件完全的了解,而不是直接外部的調試,所以非常的困難,而這個也僅僅是理論。
路由器標簽
在今天首先你會遇到一個問題就是路由器連接到網絡,而目前就是在路由器的一面可以發現一張貼紙,而上面就有路由器的默認管理密碼,然后配置好后連接網絡。
這個默認密碼就像是一個特定的日期,就在路由器上面的貼紙,同時也需要它來調試路由器。可以說是,在路由器和計算機使用相同的算法,這樣可以保證同步性。而你也可以在計算機上面生成密匙並儲存。作者表示這些算法都可以加密密匙,然后可以節約成本,這要比硬件那種加密成本更低一些。
現在繼續來收集數據信息,而現在更需要弄清PCB電路板上面的詳細情況,這個時候需要按住出廠重置按鈕10s,這個時候的WiFi相關密碼應該是默認情況下的,如果相關信息在閃存中,我就可以嗅探並分析到它,下面就是我需要做的,分析UART,同時按下復位鍵之后查看分析儀情況,下面UART 輸出
流量
Python腳本(Traffic Map、MOSI、MISO),之前的部分(traffic map)在protect 區域的數據情況,並從中讀取數據
___________________ |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字符串形式出現
如果想要獲取到默認的密碼,那就需要分析MISO 部分,也許內存中已經加載了,而在下一部分將會對這個深挖。而這里也需要對SPI通信在做分析( HTTP認證),主要是看新的WiFi密碼,即Map、 MISO、 MOSI。下面就是在閃存分析到的信息
正如你說看到的,這些都是明文信息,也就是說沒有加密算法在里面,但這也不是決定性的,因為這也有可能是生成的憑證,或者延遲算法出現的時間也就是限制訪問算法。
下一步
以后的文章將會分析深挖閃存並分析數據算法,還有把前面的部分都聯系在一起作分析。
*參考來源:jcjc-dev