LimeSDR 無線信號重放攻擊和逆向分析

概述

在這篇文章中,我們將對某寶銷量最高的一款無線門鈴進行無線重放攻擊和逆向分析其遙控信號的演示。

國內常見的無線遙控通常工作在315Mhz、433Mhz頻率,歐美的採用868Mhz、915Mhz這2個頻率。

拆開門鈴,我們可以發現解碼芯片爲 華芯微HS1527

華芯微HS1527採用CMOS工藝製造,擁有20位地址碼,可提供最多達1048576(2^20)種地址碼,發射頻率支持315Mhz與433Mhz。

我們可以用電視棒、HackRF One、LimeSDR等SDR硬件進一步確定遙控的工作頻率,打開SDR軟件設置頻率爲315Mhz或433Mhz,然後按下遙控器,能在瀑布圖上看到明顯的反應:

確定無線遙控工作的中心頻率爲:433950000

錄製信號

Grc流程圖下載地址:https://1drv.ms/f/s!AsE4BpolygfCjGfspV7_Gno3rpy5
用GNU Radio搭一個簡單的接收流圖,一方面將接收信號保存爲Cfile文件,另一方面將信號以瀑布圖顯示作爲實時反饋。因爲遙控信號是433MHz,中心頻率設在這個附近都可以,採樣率2M就夠了。

osmocom Source使用LimeSDR接收433MHz無線信號,採樣率爲2M,右上QT GUI Sink將捕獲的無線信號通過瀑布圖顯示,右下角File Sink將捕獲到的無線數據包儲存到test.cfile文件中。
執行流圖可看到如下效果圖:

按下遙控:

結束GnuRadio流圖後,查看Music目錄下的test.cfile:

重放信號

接下來再用GNU Radio寫個重放信號的流圖:

左側File Source調用錄製到的test.cfile信號文件,與此同時QT GUI Time Sink、QT GUI Frequency Sink模塊分別在屏幕上顯示時間軸(時間域)、頻率幅度(頻率域),osmocom Sink調用LimeSDR將信號發射出去,執行流圖:

如果聽見鈴聲響起,那說明這段信號是有效的,如果沒有響起,可能是錄製指定的頻率不對或採樣到的信號樣本不完整,可多次嘗試錄製,如果是車鑰匙等其他設備,其信號只有一次或幾次有效性,俗稱滾動碼,這點請注意。

分析信號

Audacity

Audacity是一款跨平臺的音頻處理軟件,我們可以拿來分析射頻信號。導入錄製的音頻信號文件進行信號分析,然後通過其展現信號波形圖來判斷信號的調製方式並加以分析。

不過這種方式需要肉眼將波形轉化成0跟1,看起來比較容易眼花。只有老司機才能很快很準確地用這種方式完成分析任務。

導入成功後顯示如下圖:

發現存在多段信號脈衝,我們選擇一段信號後點擊放大鏡來進一步觀察信號特徵。

我們將第一個寬度的藍色條狀物當作標準寬度1,空白區域當作0,空白區域的寬度能容納幾個標準寬度藍條,就代表有幾個0,以此類推,較寬的藍色條狀物能容納幾個標準寬度藍條就代表有幾個1。經驗比較豐富的朋友可以通過圖形,把無線射頻信號轉換成二進制數據

0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0

Inspectrum

Inspectrum是一款分析無線信號的工具,基於Linux和OSX。它兼容GNURadio、Osmocom_fft還有各類SDR設備導出的IQ文件格式(例如RTL-SDR、HackRF、BladeRF)。

安裝Inspectrum,參考Wiki:https://github.com/miek/inspectrum/wiki/Build

澳大利亞無線黑客 tresacton 在 Inspectrum 的基礎上做了界面優化和升級,有興趣的朋友也可以安裝 DSpectrumGUI

$ sudo apt-get install qt5-default libfftw3-dev cmake pkg-config automake autoconf
$ git clone https://github.com/jgaeddert/liquid-dsp.git
$ cd liquid-dsp
$ ./bootstrap.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig
$ cd ~
$ git clone https://github.com/miek/inspectrum.git
$ cd inspectrum && mkdir build && cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig

打開Inspectrum,導入我們錄製的test.cfile文件。設置採樣率爲錄製時的採樣率2M,水平拖動,找到有信號的區域。然後可以通過左側Spectrogram參數的調節、縮放工具,實現波形圖的放大縮小,顏色深淺調節。

在原始信號上右鍵添加採樣圖,Add derived plot -> Add sample plot 用鼠標拖動,調節中心頻率的位置和寬度;

然後在下面的採樣圖右鍵添加閾值圖,Add derived plot -> Add threshold plot

左側欄的Time selection可對波形進行劃分,這裏我們以一位“內碼”信號的寬度爲標準。接着對Symbols數值進行遞增,直至囊括一幀信號的波形區域:

參考 華芯微HS1527 資料文檔,可以得知HS1527碼型

現在我們知道在 inspectrum 裏面看到的信號是什麼意思了,總結下:一幀信號的編碼格式爲“≥8位同步碼 + 20位內碼 + 4位數據碼”

然後在閾值圖右鍵導出解碼的數據,

導出的解碼數據:
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0

繪製Bits數據信號的GRC流圖

前面說過一幀信號共有32位碼。現在我們要繪製GRC流圖,執行流圖從而讓LimeSDR發射出Bits數據信號。這32位碼,每個碼都有相應的時序進行表示。

0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0

解碼數據換算後得到的Bits數據:

1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0

一個高電平或低電平對應4LCK,在採樣率爲2MHz的情況下佔用時間寬度爲1.114ms除以4。要每個電平佔用1.114ms/4LCK,則需要讓每個電平點插值1.114ms/4*2MHz≈557次

  • “Vector Source”作爲標準的向量輸出源模塊,可以輸出自定義矢量,如門鈴的序列。參量Repeat決定是否重複地產生整組矢量數據。
  • “Repeat”模塊是將輸入的矢量進行插值複製,即將<a,b,c,~>複製爲<a,a,b,b,c,c,~>。
  • “osmocom Sink”模塊是作爲發射機的數據信宿。
  • “WX GUI Scope Sink”模塊用於查看發射出去的信號。

Universal Radio Hacker(URH)

URH相⽐Audacity和Inspectrum這2款軟件,特點是使用特別⽅便,包括採樣、解碼、重放、模擬環境等功能都可以直接在URH上面完成。而且URH⽀持市面上大多數SDR設備,支持Linux、OSX、Windows平臺。

參考Wiki進行安裝:https://github.com/jopohl/urh ,安裝完成後打開如下圖。

打開“File”菜單,可以直接錄製信號或導入錄製的信號

我們點擊“Record signal”進行信號錄製,按下遙控,右側會顯示信號頻譜。

保存我們錄製的信號文件,軟件會自動打開文件然後回到首頁。左下角我們可以設置把信號實時解調爲Bits、HEX、ASCII數據流。

還可以重放信號,實時調試。更多功能可以查看 操作使用手冊 進行學習。

更多姿勢重放信號

通過上述方式,我們已對SDR捕獲到的無線信號進行分析,並把信號文件轉換成了二進制數據,可使用GnuRadio對數據進行重放、修改測試。接下介紹幾款硬件,可以DIY便攜式信號錄製、重放設備。

DIY攻擊設備

我們可以使用Arduino開發板和很常見的超再生模塊或者CC1101模塊配合RC-Switch庫製作一款便攜式射頻接收/重放設備。

RFcat

RFCat USB Radio Dongle能夠在300 - 928MHz之間的頻率上發射,接收,頻譜分析,使用戶能夠嗅探或攻擊在這些頻率範圍內傳輸的任何無線數據協議。其中包括:家庭自動化系統,智能電錶,SCADA系統,“物聯網”設備,移動設備等等。

EZ430 Chronos

德州儀器生產的EZ430 Chronos手錶由於採用了MSP430芯片,該芯片支持發射1GHz以下頻率的無線信號,覆蓋市面上各種常見的無線遙控頻率(315MHz、433MHz、868MHz、915MHz)

GoodWatch

GoodWatch是逆向工程師和業餘無線電愛好者必備的一款手錶,它包括RPN計算器,十六進制編輯器,反彙編器和距離70釐米的無線電收發器。它由Casio 3208系列 計算器手錶改裝而成。

YARD Stick One

Great Scott Gadgets 的YARD Stick One一款由美國無線電專家Michael Ossmann 最新研發的一款無線電DONGLE, 與PC通過USB端口連接,它可以用來接收、發射低於1GHz的數字無線信號,主要性能規格如下:
-半雙工發射和接收
-正式操作頻段:300-348 MHz, 391-464 MHz, 782-928 MHz
-非正式操作頻段:281-361 MHz, 378-481 MHz, 749-962 MHz
-調製方式: ASK, OOK, GFSK, 2-FSK, 4-FSK, MSK
-數據傳輸率:高達500 kbps
-USB 2.0全速傳輸

PandwaRF

PandwaRF是一款射頻分析工具,由手機或PC控制的低於1 GHz的無線收發器。 其目的是非常容易地捕獲,顯示和傳輸RF數據。 它可以使用BLE或USB連接到Android智能手機,使用USB連接到Linux。 它基於着名的RfCat&Yard Stick One工具和德州儀器CC1111 RF收發器,但具有許多新功能,使PandwaRF成爲完美的便攜式RF分析工具。

相關鏈接

名稱 鏈接
《物聯網安全百科》 iot-security.wiki
伏宸安全實驗室 future-sec.com
IOT Security iot-security.org
Yaseng Blog yaseng.org
知乎專欄 zhuanlan.zhihu.com
郵箱 [email protected]
qq 交流羣 306482276
微信公衆號
微信交流羣
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章