不知道從哪邊找到的可愛邪惡海豚XD
圖片來源:https://fan-made-kaiju.fandom.com/wiki/Devil_Dolphin
嗨嗨,這裡是 Kazma 卡茲馬。
在昨天的文章中,我們已經對 Sub-GHz 無線通訊有了基本了解。今天,我們要進一步探討一種常見的無線通信技術——滾動碼(Rolling Code)。滾動碼廣泛應用於車輛和門禁系統,旨在防範重放攻擊。但這樣的安全機制是否真的無懈可擊?我們能否透過 Flipper Zero 對滾動碼系統進行破解?
想像一下,某個週日早晨,你坐在街邊,目標人物小帥剛停好他的跑車並打開豪宅大門。你是否能偷偷錄下他的無線信號,然後利用這些訊號來操作他的車門和門禁?其實,這不僅可能,而且我們將介紹幾種具體的破解手法,那就請各位聽我娓娓道來。
請注意,透過 Flipper Zero 所學到的技術與知識,主要目的是提升個人技術能力與資訊安全意識。我們強烈呼籲各位,不要將這些知識應用於任何違法活動。您有責任確保所學知識的合法用途。針對今天的主題,大家務必要注意以下幾點:
為了更好地理解接下來的內容,我們首先來介紹一些關鍵概念:
重放攻擊是一種駭客技術,透過錄製並重播這些信號,欺騙系統執行未授權的操作。Flipper Zero 可以輕易的做到這點,他可以模擬這些信號,特別是當目標系統使用簡單的靜態碼時。
指的就是無線通信中固定的傳輸碼,例如:'1234','abcde'。
因為其設計簡單且成本較低而被廣泛使用於各種基本遙控裝置,例如車庫門開關,家用警報器等。
也因此我們可以使用 Flipper Zero 直接對使用 static code 的無線電設備進行重放攻擊,因為他們的傳輸碼並不會改變。
也就是動態的傳輸碼,而動態的方式有很多種:
中文又稱滾動碼,而 Rolling Code 是最常見的一種 Dynamic Code,很常應用於車輛系統和門禁系統中。它設計的核心目的就是為了防止攻擊者透過重放攻擊來未授權的操作裝置,例如打開車門或是解鎖門禁。
滾動碼系統在每一次的通信中都使用不同的加密密鑰,這些密鑰按照一定的算法進行變更,從而避免重放攻擊。其主要運作流程包括:
所以你如果在家狂按你爸的車鑰匙(通常是 256 次),是有可能讓他明天上班遲到的。
滾動碼的核心算法依賴於加密哈希函數或對稱加密演算法。以下是常用的算法:
以上大概是滾動碼的介紹和運作機制。
那我當初研究到這邊時心中產生了一堆疑惑,這邊想帶著大家跟著我當初的思路一起往下研究:
首先今天的內容是參考自一位 YouTuber Derek Jamison 的影片清單 -- Flipper Zero - Rolling Codes,而當初他就在影片開頭像我剛才一樣的宣導,但其中有一句話讓我很在意:「Replay Attack 以及 Fuzzing Signals 有機會使接收器以及我們的信號發射設備不同步,後果須自行承擔」。而我疑惑的點是明明我們只是把當前密鑰跟滾動計數器的數值傳給接收器讓他去驗證,為什麼會造成裝置跟原本的遙控器不同步而無法正常使用?而這其實取決於滾動碼的實作方式,有些裝置是有可能因為大量接收到過期或是無效的滾動碼時會進入「鎖死狀態」,以避免被駭客成功取得未經允許的授權。或者也有可能因為大量的請求而導致設備出現緩存溢出或是過載的狀況,消耗過多資源影響系統正常運行。所以這也讓我們再次意識到如果 Flipper Zero 如果不幸落到壞駭客的手裡,駭客有可能透過這些方始去癱瘓一些服務的,這也是為什麼法律要管制這些無線電射頻設備,因為有些服務緊急需求在使用。
那這邊就要接著介紹一些基於 Rolling Code 實作漏洞的常見攻擊手法:
RollJam 攻擊是一種針對滾動碼系統的複合型攻擊,能夠繞過滾動碼防重放的機制,並重放有效信號來解鎖車輛或其他受保護的系統。
攻擊過程:
攻擊本質:
RollJam 攻擊利用了滾動碼的同步和窗口容錯機制,特別是在用戶多次發送信號時,第一個信號會被攔截並保留,而車輛只會接受第二個信號。因此,攻擊者能在之後重放第一個信號以解鎖系統。
滾動碼的生成依賴於一個計數器和一個加密密鑰,但如果算法過於簡單,攻擊者是可以通過分析已知的滾動碼,預測出下一個或多個滾動碼。
攻擊過程:
攻擊本質:
滾動碼的安全性依賴於隨機性和密鑰的保密性。如果加密強度不足,攻擊者可以利用已知的滾動碼進行推測,這就打破了滾動碼「不可預測」的特性。
信號阻斷攻擊並不是直接針對滾動碼本身,而是利用干擾技術來阻止車輛接收合法用戶發出的滾動碼,這使得用戶無法正常開鎖或鎖車,從而誘導用戶進行更多次的操作,給攻擊者創造機會。
攻擊過程:
攻擊本質:
雖然這種攻擊不會直接破解滾動碼的安全性,但它利用無線信號的脆弱性和用戶的行為習慣來促成多次按鍵操作,從而增加了捕獲有效滾動碼的機會。
這就是我們資安宣導提到的。
滾動碼系統依賴於車輛和遙控器的計數器保持同步。如果攻擊者能夠故意使這兩者不同步,系統可能會拒絕合法的滾動碼,甚至進入鎖定狀態。
攻擊過程:
攻擊本質:
這種攻擊的目的是讓合法用戶無法使用自己的遙控器。攻擊者可能利用這個機會進行其他形式的攻擊,或單純地為了造成不便。
這邊再提出一些我在學習過程中遇到的疑問跟解答。
既然我們知道滾動碼是依賴當前密鑰跟滾動計數器這兩個值來加密的,並且為了避免使用者按出的訊號沒有被接收器接收到,滾動碼會存在一個容錯範圍都是可以被允許的,而這顯然不適於多人共用的公寓大門,因為計數器可能會有巨大誤差,所以針對公寓的情形,滾動碼可能針對每個計數器都是獨立的,或是有一個更大的容錯範圍,但更大的容錯範圍雖然帶來了更多便利,但也象徵著一定的安全性疏失,所以還是再次呼籲各位要做好駭客。
通常市面上在複製這些滾動碼的裝置時,通常採用的是學習模式或者說配對模式,像是我們昨天介紹的一樣,鑰匙店的老闆可能會用一個新的空白鑰匙跟你的車子直接配對。又或者他們會使用一些經過合法申請的專業設備,可以模擬車輛原廠設備的功能,生成和車輛同樣的滾動碼種子。
那在今天結束前,我們再回到開頭的問題。
我們是否能夠操控小帥的車輛和門禁其實取決於這兩者的安全層級來決定我們攻擊的難易度,如果滾動碼實作有瑕疵或甚至無線信號裝置非常老舊沒有使用滾動碼,確實都是有可能透過利用上面提到的攻擊方式來操控小帥的房車。不過都已經說是跑車和豪宅了,通常這些場景中的安全層級都相當高,如果真的用 Flipper 就可以成功,那世界可能會毀滅XD
好,那了解完今天的理論後,明天我們來用 Flipper Zero 實際的操作和學習這些安全機制,看看究竟傳輸訊號時上面寫的一堆數字代表什麼意義?以及存在記憶卡裡面的訊號長什麼樣子?明天都會一同為各位揭曉,明天見!