當前位置:
首頁 > 新聞 > 巧用HackCube-Special分析胎壓信號

巧用HackCube-Special分析胎壓信號

胎壓無線感測器安全檢測


我們團隊之前也有用USRP和GNUradio對其他的胎壓設備進行的安全檢測,我不使用這套環境的原因是軟體無線電的設備和筆記本已經算體積不小的一套設備,通常測試環境都在戶外,在這種環境下對這個胎壓系統做安全檢測實在不方便,並且一套無線電設備也不是一般入門小白能消費的起的,所以這也是為什麼我想打造一套低成本便攜性無線電攻防設備的原因。


發現信號


首先我們要觀察這個設備的工作頻點,通常這類的胎壓設備都工作在433.92Mhz這個頻點上,感測器會在安裝和卸下時候發送無線數據,否者就要等待數分鐘感測器才會再次發送胎壓數據,因為低功耗的原因考慮。


然後我們可以通過觀察頻譜(Fosphor)方式得到該信號工作在433.92Mhz上,調製方式為2-FSK,兩個主瓣之間的頻率偏差20.5Khz(Deviation),然後我們通過軟體無線電的方式將胎壓的原始信號接收下來進行分析。


胎壓感測器信號調製




然後這個就是我通過軟體無線電的方式採樣到的原始信號導入到dspectrum的頻譜圖,然後我們通過這一幅頻譜圖來講講2FSK調製方式:



2FSK調製方式簡單來說就是兩種頻率來表示 Bit 0Bit 1,如圖所示假如我們要發射11100101,這段數據在要發送Bit 1數據時候頻率切換成了載波頻率F1,要發送Bit 0數據時候切換到載波頻率F2,最後的調製輸出就是我們用軟體無線電接收到的結果了,然後我們可以通過這種方式將信號數據解調下來了進行分析了。



這個就是整一段胎壓感測器發射出來的信號了,前面是前導碼用於喚醒接收端使用的,前導碼後面一個特別長的脈衝信號是同步引導碼用於發射端和接收端同步時鐘使用的,後面就是胎壓的有效數據了,我們可以對這個有效數據進行分析了。

胎壓感測器協議數據逆向



我們先得到胎壓的數據NRZ速率為9.08k,數據如果採用曼徹斯特或者類似編碼的話速率要除於2,得到速率為4.5K



最開始分析信號時候以為數據是通過曼徹斯特進行編碼的,發現用曼徹斯特方式怎麼解碼都不對,後來分析很久之後查了一下晶元的datasheet才發現是自有編碼協議,這個就是感測器的編碼規則,下一個Bit的波形是會根據上一個Bit波形結尾的電平來決定的,知道編碼規則後通過這個我們對數據進行進行解碼,以一個位元組的信號的波形舉例吧,從開頭的Bit 0開始講吧,可以看到前面的脈衝是高電平波形,這時候如果要發送Bit0的數據就需要輸出NRZ"01",如果之前是低電平的話則輸出NRZ"10",如果是要輸出Bit1同理,上一個波形結尾為高電平輸出NRZ"00",如果是低電平的話輸出NRZ"11,就可以通過這種方式得到一個位元組的數據,二進位01011100,然後轉成十六進位,這一段的波形就表示0x5C的數據內容了:



通過多次對多台胎壓監測設備以及多個感測器器的信號進行行行採樣、逆向分析得到其信號的數據結構為:


ID識別碼 (4 Byte)+ 電壓 (1 Byte) + 壓感 (1 Byte)+ 溫度 (1 Byte) + 氣閥 (1 Byte) + CRC (2 Byte)+停止碼(1.5Bit)



首先我們來說一下這裡的參數,ID是每個感測器的序列號類似的標識符,一套胎壓系統配備四個感測器所以出廠時候會綁定四個ID,然後就是氣壓溫度氣閥(漏氣檢測)的數據,通常低於或高於設置的數值就會進行報警,每家胎壓設置的閾值都不一樣我們就不過多的說了.然後就是數據中CRC校驗.將所有發射的數據進行CRC16得出兩個位元組的校驗數據附加到數據結尾。

需要注意是這裡採用的CRC16的校驗方式,並且CRC16有多套標準,經過重複的分析得出使用是CRC16_CCITT這套的標準,最後的停止碼沒有任何意義就是代表數據已經發射完了。


使用HackCube-Special偽造胎壓感測器數據



假如說要發射出TPMS_data其中的數據,最後會發射出來的就是20959185A0406300528C這串數據,數據的結尾528C就是算出來的CRC



這個就是算出結尾兩個位元組校驗碼的代碼,接收端會先判斷這兩個位元組的校驗碼,如果是不對,接收端是不會去響應的。


發射胎壓感測器射頻數據




之後我們就可以根據這個去發射偽造感測器的數據了,這裡我使用的TI的CC1101 射頻晶元,我們通過Atmega32u4通過SPI(MOSI,MISO,SCK,CS)配置射頻晶元CC1101的相關射頻寄存器,然後通過CC1101GDO0引腳將射頻數據發出,也可以採用數據包模式將數據發射出來,但是因為數據包模式不方便兼容其他的類型的胎壓設備。

CC1101射頻參數配置




這個是根據胎壓感測器信號生成的CC1101寄存器的配置,可以通過SmartRF Studio配置完參數後導出,不過有些寄存器是不支持IDE去進行設置的,必須是根據晶元的datasheet去修改的,比如說讓射頻晶元處於非同步模式,切換射頻晶元的工作狀態等等。



cc1101.init()函數中將剛剛的射頻配置寫入CC1101的相關寄存器中,然後我們挑幾個關鍵的講講,setfreq函數用於將CC1101設置在胎壓的工作頻率上,MDMCFG2設置晶元的調製模式為2FSK,我們這裡使用的晶元的非同步模式,就是通過引腳去將數據發射出來,不是通過SPI方式將要發射的數據寫入到晶元的發射緩存區中。


射頻信號發射



left_back這個數組裡面存著的就是待發射的數據,CRC通過Transmit_TPMS自動算出來附加到數組結尾。我們接下來看看Transmit_TPMS發射數據操作函數。


然後這個是發射數據操作函數,算出CRC數據後根據Transmit_data的數據內容在GDO0這個引腳上輸出對應的波形。



然後我通過這種方式就能夠對這個感測器進行偽造攻擊了:



這個就是我們偽造出來的引腳波形:



演示視頻


總結一下存在的安全風險


因為胎壓數據沒有經過任何的加密的操作,完全是明文傳輸僅僅只有CRC進行校驗,只要知道其中使用的編碼規則或者協議數據就可以很簡單的對這個胎壓感測器進行偽造攻擊!並且其中感測器id是明文傳輸的,只要在一個城市中部署足夠多的嗅探節點可以對安裝了胎壓的汽車進行軌跡分析,從而分析出每個車主的生活軌跡。


目前只是對2FSK的胎壓信號進行偽造並發射,並沒有對2FSK進行解調解碼的操作,後面有時間的話會對這一塊進行升級吧,增加嗅探解碼的功能。


然後在我們的HackCube-Special 上已經封裝好了這個偽造胎壓感測器的功能,各位對這塊感興趣的小夥伴可以看下我們HackCube-Special有任何問題的歡迎在我們的社區上交流。


我們的硬體產品預計會在12月份年底左右上線,在我們社區上提交質量不錯的文章是有機會拿到第一時間產品的喲~


*本文作者:mobier,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

你的挖礦木馬上線了,更新、更快、更強!
GOSINT:開源智能(OSINT)方面較新的一款工具

TAG:FreeBuf |