Flipper Zero 宇宙最強攻略:30 天帶你從入門到入坑 Day06 - Sub-GHz 實戰:市售設備的無情大屠殺實錄
前言
在聽完昨天關於 Sub-GHz 的各種攻擊理論後,相信大家都等不及拿起 Flipper Zero 來動手學習這些知識了,今天我們會繼續透過 YouTuber Derek Jamison 的影片清單 – Flipper Zero - Rolling Codes 來學習這些內容。
資安倫理宣導
請注意,透過 Flipper Zero 所學到的技術與知識,主要目的是提升個人技術能力與資訊安全意識。我們強烈呼籲各位,不要將這些知識應用於任何違法活動。您有責任確保所學知識的合法用途。針對今天的主題,大家務必要注意以下幾點:
- 絕對不要測試不屬於自己的設備,或是未經授權的設備。
- 切勿測試您自己日常使用的或生活必需的裝置。
- 重放攻擊(Replay Attack)或是訊號模糊測試(Fuzzing Signals)有可能導致接收器與發射設備不同步,並可能造成損壞,後果須自行承擔。
Security+ 1.0
首先,我們先進到 Flipper 的 Sub-GHz -> Add Manually 之後會看到最下面有一排 Security 開頭的訊號,我們點選 Security+ 1.0 315MHz 並且把它存成 1.0test。補充說明:作者在這個部分是用 LiftMaster,但我沒找到就用這個代替了。
接著,我們到 saved 去模擬這個訊號,可以看到左上角寫著 Security+ 1.0 以及一堆數字,我們借用 Derek Jamison 的影片截圖來協助我們講解:
圖片來源:https://youtu.be/fmCzYAX7O38?si=LeOzLlxPmyya5qYb
左上角可以看到這個協議是 Security+ 1.0,在這個協議中資料是 encoded 不是 encrypted 的,所以可以說是相當不安全也是最簡單的一種協議。而往右邊一個會看到 42b 代表的是封包是 42 位元的,但注意這邊其實是 trits 因為是三進位的,但不知道為什麼不叫 42t,知道的可以在下面留言跟我說。再往右邊就是頻率和調製,然後接著就是當前密鑰。而密鑰的前面一半是固定的前綴,後面則是下面的計數器 Cnt 的值,每按一下會加二,其中當我們把密鑰的前綴換成三進位後就可以看到最後三個 trits 分別代表:
- ld1: 3rd LSD of fixed (0 = pin code, 1 = button press)
- ld0: 2nd LSD of fixed (displayed but unused by FZ)
- Btn: 1st LSD of fixed (1 = left, 0 = middle, 2 = right)
然後扣除前綴扣除最後三個 trits 是他的序列號 Serial Number。
最後是 Sw_id 代表按鈕的值,跟前面那個 Btn 是一樣的只是表示法不同。
那根據我們昨天的介紹,遙控器跟接收器是會分別計數的,所以當我們離開這個畫面後再回來 Cnt 的值是不會改變的。
接著我們可以到 qFlipper -> File Manager -> SD Card -> subghz 找到 1.0test.sub 把他載下來用文字編輯器打開,這邊選擇用 Sublime Text:
1 | Filetype: Flipper SubGhz Key File |
可以看到這邊就是以保存 key 為主,因為其他資料都是從 key parse 出來的,所以現在計次是 0xC / 2,也就是目前按了六下當然我們也可以修改這個值之後再存回去。
KeyLoq
這次我們要看的是 KeyLoq 這個協議,我們可以跟剛剛一樣到 Add Manually 去找到 KL: DoorHan 這個製造商,前面的 KL 就是 KeyLoq 的縮寫,所以其實 Flipper 都有很貼心的幫我們把協議寫在製造商前面,這次我們把它存成 KeyLoq_test。
圖片來源:https://youtu.be/x4ml1JAH1q0?si=1ZcHYcQYr8c7WQW-
左上角一樣是他的協議,右邊這次是 64bit,但這次真的是二進位了,Key 就是每次在傳輸的 data,而我們可以看到前 32 個 bits 每次都會不一樣,這部分是用 manufacturer key 或是搭配更多參數像是 Serial Number 或是其他亂數種子加密,這部分就是滾動碼在滾動的部分,但 Flipper Zero 是有能力解密一部份的製造商的,如下:
圖片來源:https://youtu.be/x4ml1JAH1q0 ?
我們把 Key 寫成二進制並且倒過來我們稱它叫 Yek (英文字母順序反過來),而現在 Yek 的前 32 bits 變成固定的值呈現在 Fix 的欄位,而後 32 bits 則是 Hop 的值,而我們可以發現 Fix 其實就是 Btn + Sn。接著作者嘗試使用 DoorHan 的 Manufacturer Key 解密得到 22540004,分別對應到 Btn: 2,Sn ending: 54,第二個 2 忽略,後面 0004 代表計數,表示我們成功解密了。
市售設備測試
這邊因為鐵人賽沒時間等我慢慢網購,所以用作者測試的結果來跟大家討論。作者在第三集買了三個設備要來測試前面提到的協議,分別有:
Doorhan Garage Door Receiver RSD01/1200/1000 2 channel 12V-24V universal 433mhz
這邊稱他是一號選手。
圖片來源:https://www.ebay.com.hk/itm/175052241991
850LM 312HM 412HM 423LM 通用接收器僅適用於升降機/Chamberlain/Craftsman 車庫門開啟器(1 入)
LiftMaster 850LM 通用門和車庫門打開器接收器
這邊稱他是三號選手。
圖片來源:https://www.amazon.com/LiftMaster-850LM-Universal-Garage-Receiver/dp/B0071EYS9M
而流程是,我們先讓 Flipper 跟接收器手動配對,接著用另一個 Flipper 去錄製原始訊號看能不能成功使用重放攻擊。
測試結果
一號選手用的是 KeyLoq 但很快就被重放攻擊秒殺。
二號選手用的是 Security+ 2.0,測試時發生了一點小插曲,因為第一次錄製的時候靠得太近所以失敗了,但後來大概隔一公尺再錄一次就一樣用重放攻擊解決掉。
三號選手一樣用的是 Security+ 2.0,作者提醒說他有在 subghz_scene_set_type.c 的 205 行更改了 LM850 接收器的遮罩,變成 key &= 0x7FFFF3FC;
,如果不這樣做的話只有 1/32 的機率會正常運作,最後幸好三號選手通過測試,不然世界真的就要毀滅了,最後作者有再加測試計數器如果落後的話是不會運作的,一直按直到跟接收器現在的計數器相同就可以成功,證明他是使用滾動碼實作的沒錯。
Rolling Flaws applicaation
Rolling Flaws 指的就是 Rolling Codes 的各種弱點就像是我們昨天介紹的一樣,而作者在第四集有跟大家介紹一個有趣的 Flipper Zero 應用程式,可以作為接收器其中包含多個參數設定來模擬各種 Rolling Flaws,而作者在這邊用兩個 Flipper 來示範各種攻擊:
圖片來源:https://youtu.be/gMnGuDC9EQo?si=XKvD4r47qs1hGaZT
如上圖,左邊就是攻擊用得 Flipper,而右邊是接收器,會告訴你是否成功打開,並且會顯示打開的原因是什麼,很適合我們學習 Rolling Flaws,如果這個月有時間會跟別人借一個 Flipper 來寫一篇。
Rolling Flaws: https://github.com/jamisonderek/flipper-zero-tutorials/tree/main/subghz/apps/rolling-flaws
YouTube: https://youtu.be/gMnGuDC9EQo?si=NnaknRuKZE3naxSi
按讚訂閱收藏小鈴噹叮叮叮
今天我們跟著 Derek Jamison 的前四集影片學到了 Security+ 1.0 和 KeyLoq 這兩個協議的封包內容以及他們的運作方式。了解完後我們透過第三集影片看到實際的市售設備測試,並且發現 KeyLoq 也不一定是安全的,還是要看製造商的實作機制如何,以及 Flipper Zero 有沒有辦法解密該製造商的資料,明天我們會聊到 Sub-GHz 的 decoders/encoders 是怎麼運作的,那就明天見!
References
- Title: Flipper Zero 宇宙最強攻略:30 天帶你從入門到入坑 Day06 - Sub-GHz 實戰:市售設備的無情大屠殺實錄
- Author: kazma
- Created at : 2024-09-20 03:44:57
- Updated at : 2024-09-20 03:55:20
- Link: https://kazma.tw/2024/09/20/Flipper-Zero-宇宙最強攻略:30-天帶你從入門到入坑-Day06-Sub-GHz-實戰:市售設備的無情大屠殺實錄/
- License: This work is licensed under CC BY-NC-SA 4.0.