iT邦幫忙

2024 iThome 鐵人賽

DAY 5
1

封面圖

不知道從哪邊找到的可愛邪惡海豚XD
https://ithelp.ithome.com.tw/upload/images/20240919/20168875inuLp2wT7Z.jpg
圖片來源:https://fan-made-kaiju.fandom.com/wiki/Devil_Dolphin

前言

嗨嗨,這裡是 Kazma 卡茲馬。

在昨天的文章中,我們已經對 Sub-GHz 無線通訊有了基本了解。今天,我們要進一步探討一種常見的無線通信技術——滾動碼(Rolling Code)。滾動碼廣泛應用於車輛和門禁系統,旨在防範重放攻擊。但這樣的安全機制是否真的無懈可擊?我們能否透過 Flipper Zero 對滾動碼系統進行破解?

想像一下,某個週日早晨,你坐在街邊,目標人物小帥剛停好他的跑車並打開豪宅大門。你是否能偷偷錄下他的無線信號,然後利用這些訊號來操作他的車門和門禁?其實,這不僅可能,而且我們將介紹幾種具體的破解手法,那就請各位聽我娓娓道來。

資安倫理宣導

請注意,透過 Flipper Zero 所學到的技術與知識,主要目的是提升個人技術能力與資訊安全意識。我們強烈呼籲各位,不要將這些知識應用於任何違法活動。您有責任確保所學知識的合法用途。針對今天的主題,大家務必要注意以下幾點:

  • 絕對不要測試不屬於自己的設備,或是未經授權的設備。
  • 切勿測試您自己日常使用的或生活必需的裝置。
  • 重放攻擊(Replay Attack)或是訊號模糊測試(Fuzzing Signals)有可能導致接收器與發射設備不同步,並可能造成損壞,後果須自行承擔。

專有名詞介紹

為了更好地理解接下來的內容,我們首先來介紹一些關鍵概念:

重放攻擊(Replay Attack)

重放攻擊是一種駭客技術,透過錄製並重播這些信號,欺騙系統執行未授權的操作。Flipper Zero 可以輕易的做到這點,他可以模擬這些信號,特別是當目標系統使用簡單的靜態碼時。

Static Code

指的就是無線通信中固定的傳輸碼,例如:'1234','abcde'。
因為其設計簡單且成本較低而被廣泛使用於各種基本遙控裝置,例如車庫門開關,家用警報器等。
也因此我們可以使用 Flipper Zero 直接對使用 static code 的無線電設備進行重放攻擊,因為他們的傳輸碼並不會改變。

Dynamic Code

也就是動態的傳輸碼,而動態的方式有很多種:

  • 基於時間的動態碼(Time-based Dynamic Codes):
    • 這種類型的動態碼會根據當前的時間來生成一次性的密碼或碼。例如,許多兩因素認證系統(如 Google Authenticator)使用基於時間的一次性密碼(TOTP),這些密碼每 30 秒刷新一次。
  • 基於事件的動態碼(Event-based Dynamic Codes):
    • 這種動態碼的生成依賴於特定事件的發生,而不是每次通信都自動更新。這意味著新的碼只在觸發某個事件時才生成,例如用戶進行某種特定操作或系統達到某種條件。
  • 基於環境因素的動態碼:
    • 在某些高度安全的應用中,動態碼可能會根據環境變量(如裝置的地理位置、近場通訊(NFC)的存在等)來生成,這些碼的目的是增加額外的安全層,以應對更加複雜或專門的安全威脅。

Rolling Code

中文又稱滾動碼,而 Rolling Code 是最常見的一種 Dynamic Code,很常應用於車輛系統和門禁系統中。它設計的核心目的就是為了防止攻擊者透過重放攻擊來未授權的操作裝置,例如打開車門或是解鎖門禁。
滾動碼系統在每一次的通信中都使用不同的加密密鑰,這些密鑰按照一定的算法進行變更,從而避免重放攻擊。其主要運作流程包括:

  • 初始化階段:
    • 裝置(如車輛的鑰匙)和接收器(如車輛的接收系統)在最初配對時,會同步一個種子密鑰和一個初始的滾動計數器。
  • 密鑰生成算法:
    • 滾動碼系統使用一個稱為「偽隨機數生成器」(PRNG)的算法來生成新的密鑰。此算法基於當前的密鑰和滾動計數器的值來計算下一次通信所使用的新密鑰。
  • 通信過程:
    • 當裝置需要進行通信(如用戶按下車鑰匙上的開鎖按鈕)時,它將當前的密鑰和滾動計數器的值一起發送到接收器。
    • 接收器收到數據後,使用相同的 PRNG 算法和已知的當前密鑰計算出應接收的下一個密鑰,並檢查是否與收到的密鑰匹配。
  • 滾動計數器更新:
    • 一旦確認密鑰匹配,滾動計數器在裝置和接收器中都會更新,以準備下一次的通信。
  • 同步機制:
    • 如果因為某些原因(如按鈕按得太快或信號丟失)使裝置和接收器之間的密鑰不同步,系統通常會允許一定範圍內的計數器差異,以重新同步密鑰。如果差異過大,則需要手動重新同步或重設系統。

所以你如果在家狂按你爸的車鑰匙(通常是 256 次),是有可能讓他明天上班遲到的。

滾動碼的核心算法依賴於加密哈希函數或對稱加密演算法。以下是常用的算法:

  • HMAC-SHA256: 常見於滾動碼系統中的哈希消息驗證碼算法,該算法使用一個秘密密鑰來生成哈希值,這個哈希值用於滾動碼生成。
  • AES 或其他對稱加密: 一些系統使用對稱加密算法來生成滾動碼,這樣的系統需要在加密和解密雙方都使用相同的密鑰。

以上大概是滾動碼的介紹和運作機制。

Dive into Rolling Code

那我當初研究到這邊時心中產生了一堆疑惑,這邊想帶著大家跟著我當初的思路一起往下研究:
首先今天的內容是參考自一位 YouTuber Derek Jamison 的影片清單 -- Flipper Zero - Rolling Codes,而當初他就在影片開頭像我剛才一樣的宣導,但其中有一句話讓我很在意:「Replay Attack 以及 Fuzzing Signals 有機會使接收器以及我們的信號發射設備不同步,後果須自行承擔」。而我疑惑的點是明明我們只是把當前密鑰跟滾動計數器的數值傳給接收器讓他去驗證,為什麼會造成裝置跟原本的遙控器不同步而無法正常使用?而這其實取決於滾動碼的實作方式,有些裝置是有可能因為大量接收到過期或是無效的滾動碼時會進入「鎖死狀態」,以避免被駭客成功取得未經允許的授權。或者也有可能因為大量的請求而導致設備出現緩存溢出或是過載的狀況,消耗過多資源影響系統正常運行。所以這也讓我們再次意識到如果 Flipper Zero 如果不幸落到壞駭客的手裡,駭客有可能透過這些方始去癱瘓一些服務的,這也是為什麼法律要管制這些無線電射頻設備,因為有些服務緊急需求在使用。
那這邊就要接著介紹一些基於 Rolling Code 實作漏洞的常見攻擊手法:

RollJam

RollJam 攻擊是一種針對滾動碼系統的複合型攻擊,能夠繞過滾動碼防重放的機制,並重放有效信號來解鎖車輛或其他受保護的系統。
攻擊過程:

  • 攻擊者使用一個裝置攔截車主第一次按下遙控器的信號,並同時阻止車輛接收到這個信號(通過無線干擾)。
  • 車主無法開啟車門,通常會再次按下遙控器,這時攻擊者再次攔截第二個信號,並將其傳送給車輛以解鎖。
  • 攻擊者現在擁有兩個有效的滾動碼:第一次攔截的滾動碼尚未被車輛使用,攻擊者可以稍後重放該滾動碼來解鎖車輛。

攻擊本質:
RollJam 攻擊利用了滾動碼的同步和窗口容錯機制,特別是在用戶多次發送信號時,第一個信號會被攔截並保留,而車輛只會接受第二個信號。因此,攻擊者能在之後重放第一個信號以解鎖系統。

Rolling Code Prediction

滾動碼的生成依賴於一個計數器和一個加密密鑰,但如果算法過於簡單,攻擊者是可以通過分析已知的滾動碼,預測出下一個或多個滾動碼。

攻擊過程:

  • 攻擊者攔截多次滾動碼,並通過分析這些碼之間的變化,試圖推測滾動碼的生成算法。
  • 如果系統使用簡單的增量計數器或弱加密,攻擊者有可能預測出未來的滾動碼,從而生成有效的信號來解鎖系統。

攻擊本質:
滾動碼的安全性依賴於隨機性和密鑰的保密性。如果加密強度不足,攻擊者可以利用已知的滾動碼進行推測,這就打破了滾動碼「不可預測」的特性。

Signal Jamming

信號阻斷攻擊並不是直接針對滾動碼本身,而是利用干擾技術來阻止車輛接收合法用戶發出的滾動碼,這使得用戶無法正常開鎖或鎖車,從而誘導用戶進行更多次的操作,給攻擊者創造機會。

攻擊過程:

  • 攻擊者利用無線干擾設備阻止車輛接收遙控器發出的無線信號,從而讓車主無法成功鎖車或解鎖。
  • 車主通常會多次按下遙控器,這給了攻擊者更多機會去攔截有效的滾動碼,甚至配合其他攻擊方式(如 RollJam)來進行利用。

攻擊本質:
雖然這種攻擊不會直接破解滾動碼的安全性,但它利用無線信號的脆弱性和用戶的行為習慣來促成多次按鍵操作,從而增加了捕獲有效滾動碼的機會。

Desynchronization Attack

這就是我們資安宣導提到的。
滾動碼系統依賴於車輛和遙控器的計數器保持同步。如果攻擊者能夠故意使這兩者不同步,系統可能會拒絕合法的滾動碼,甚至進入鎖定狀態。

攻擊過程:

  • 攻擊者使用信號干擾或其他方式,讓車主的遙控器多次發送滾動碼信號,但阻止車輛接收到這些信號。
  • 隨著遙控器的計數器不斷增長,而車輛的計數器停留在原來的位置,最終兩者的計數器超出同步範圍,導致合法的滾動碼也無法被接受。

攻擊本質:
這種攻擊的目的是讓合法用戶無法使用自己的遙控器。攻擊者可能利用這個機會進行其他形式的攻擊,或單純地為了造成不便。

Dive Deeper

這邊再提出一些我在學習過程中遇到的疑問跟解答。

公寓共用的大門系統

既然我們知道滾動碼是依賴當前密鑰跟滾動計數器這兩個值來加密的,並且為了避免使用者按出的訊號沒有被接收器接收到,滾動碼會存在一個容錯範圍都是可以被允許的,而這顯然不適於多人共用的公寓大門,因為計數器可能會有巨大誤差,所以針對公寓的情形,滾動碼可能針對每個計數器都是獨立的,或是有一個更大的容錯範圍,但更大的容錯範圍雖然帶來了更多便利,但也象徵著一定的安全性疏失,所以還是再次呼籲各位要做好駭客。

市面上的遙控器複製

通常市面上在複製這些滾動碼的裝置時,通常採用的是學習模式或者說配對模式,像是我們昨天介紹的一樣,鑰匙店的老闆可能會用一個新的空白鑰匙跟你的車子直接配對。又或者他們會使用一些經過合法申請的專業設備,可以模擬車輛原廠設備的功能,生成和車輛同樣的滾動碼種子。

按讚訂閱收藏小鈴噹叮叮叮

那在今天結束前,我們再回到開頭的問題。
我們是否能夠操控小帥的車輛和門禁其實取決於這兩者的安全層級來決定我們攻擊的難易度,如果滾動碼實作有瑕疵或甚至無線信號裝置非常老舊沒有使用滾動碼,確實都是有可能透過利用上面提到的攻擊方式來操控小帥的房車。不過都已經說是跑車和豪宅了,通常這些場景中的安全層級都相當高,如果真的用 Flipper 就可以成功,那世界可能會毀滅XD

好,那了解完今天的理論後,明天我們來用 Flipper Zero 實際的操作和學習這些安全機制,看看究竟傳輸訊號時上面寫的一堆數字代表什麼意義?以及存在記憶卡裡面的訊號長什麼樣子?明天都會一同為各位揭曉,明天見!

References


上一篇
Day04 - 搞懂 Sub-GHz 你也會勞山道士的穿牆術
下一篇
Day06 - Sub-GHz 實戰:市售設備的無情大屠殺實錄
系列文
Flipper Zero 宇宙最強攻略:30 天帶你從入門到入坑12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言