前言
今天開始我們會介紹 NFC 有關的攻擊手法,而且就算沒有對方的卡片,我們也能只靠讀卡機就破解門禁系統,什麼技術這麼神奇,讓我們看下去!
資安倫理宣導
請注意,透過 Flipper Zero 學習的資訊技術與知識,目的在於提升個人的技術能力和資安意識。我們強烈呼籲大家,絕對不要使用所學知識從事任何違法行為。您的合法使用是我們的期望,也是您自身責任的一部分。
Recovering keys with MFKey32
圖片來源:https://docs.flipper.net/nfc/mfkey32
有可能發生我們無法用 Flipper 讀到 MIFARE Classic 卡片的所有扇區,或讀取到的扇區不足以進行進一步操作,這時可以嘗試使用 Extract MF Keys 的功能。這個功能利用了 MFKey32 攻擊,專門針對 Crypto-1 加密演算法的弱點。那這邊根據能否取得卡片可以分成兩種情況:
If you have access to the card
這是比較簡單的情況。我們可以透過取得接收器的鑰匙,就有機會讀到卡片的更多扇區,就有機會的打開門禁之類的。步驟如下:
- 先讀卡
- Main Menu -> NFC -> Saved -> Name of the saved card -> Extract MF Keys. Flipper Zero 會嘗試模擬這張卡,如下圖:
圖片來源:https://docs.flipper.net/nfc/mfkey32
- 再來是我們要反覆去刷讀卡機,根據不同的狀況可能會需要反覆做十幾次,理論上 Flipper 螢幕上的數字要持續增加,如果沒有的話那代表讀卡機沒有在驗證我們的模擬卡片。示意圖如下:
圖片來源:https://docs.flipper.net/nfc/mfkey32
- 成功的話就會看到下面圖片的樣子,之後我們就可以去看收集到的資料包括新收集到的鑰匙跟 sector。
圖片來源:https://docs.flipper.net/nfc/mfkey32
- 接著我們有三種方式可以 Recover Keys
- Flipper Mobile App -> Tools -> Mfkey32 (Detect Reader)
- Flipper Lab -> NFC tools -> GIVE ME THE KEYS
- MFKey app (需要先下載) Main Menu -> Apps -> NFC -> MFKey app -> OK
選擇上面任一種方式執行完後就可以把那些 keys 加到字典檔裡了。
- 接著在模擬一次就有機會成功了,沒成功的話可以重複剛剛 1 ~ 6 的動作,或是如果觀察到鑰匙或扇區沒有增加的話可能是系統不同,或者是讀卡機沒有 MFKey32 attack 的弱點。
圖片來源:https://docs.flipper.net/nfc/mfkey32
If you don’t have access to the card
如果我們沒辦法取得目標卡片還是有可能透過獲取讀卡機的鑰匙然後加到字典檔來破解。步驟如下:
- Main Menu -> NFC -> Extract MF Keys
- 跟剛剛一樣重複刷讀卡機來獲取 nonce pairs
Nonce(一次性數字)是加密領域中的一個術語,指的是一個僅使用一次的隨機數字或隨機值。其主要作用是防止重播攻擊和加密密鑰的預測。Nonce 通常在通訊協議中與加密密鑰配合使用,以確保每次加密過程的唯一性和安全性。
- 跟剛剛一樣 Recover keys,有三種方式可選,接下來的步驟也都一樣。
沒有卡片的時候主要的不同是第一步,我們在沒有卡片的情況下模擬一張 NFC Card。
Unlocking cards with passwords
圖片來源:https://docs.flipper.net/nfc/mfkey32
如果我嗯沒辦法讀到 NFC 卡片的所有 pages 的話,代表這張卡有可能是有密碼的,如果知道密碼的話我們可以手動加入密碼來解鎖卡片。但相反的,如果我們多次嘗試錯誤的話,有可能導致卡片鎖起來。
Extracting the password from the reader
如果我們有權限碰到卡跟讀卡機的話,我們可透過模擬卡片去刷讀卡機,這時讀卡機在驗證的時候可能會包含密碼,這時我們是可以用 Flipper 記錄下來,之後就可以讀到之前看不到的那些 pages 了。
- Read and save the card.
- Main Menu -> NFC -> Saved -> Card’s name -> Unlock.
- 刷卡
圖片來源:https://docs.flipper.net/nfc/mfkey32
- 成功的話:
圖片來源:https://docs.flipper.net/nfc/mfkey32
- 接著就再讀一次卡:
圖片來源:https://docs.flipper.net/nfc/mfkey32
- 如果解鎖的話就會看到所有 pages 都能讀了:
圖片來源:https://docs.flipper.net/nfc/mfkey32
如果失敗的話,代表這張卡可能不是跟這台讀卡機配對的。
Generating the password
當我們使用 Flipper Zero 來與具備 NFC 技術的設備(如 toys-to-life 技術或小米空氣淨化器)互動時,Flipper Zero 可以根據設備的 UID(唯一識別碼)來生成一個密碼。當這些 NFC 卡片或設備靠近 Flipper Zero 時,Flipper 會讀取該卡片或設備的 UID,並根據這個 UID 自動生成一個對應的密碼。
- Main Menu -> NFC -> Extra Actions -> Unlock NTAG/Ultralight
- 選擇卡片種類,然後讀卡
- 成功的話就會看到 pages unlocked,接著就可以儲存。
Toys-to-life 是一種結合實體玩具和數位遊戲的技術。玩家可以通過將實體玩具(通常帶有內建的 NFC 或 RFID 技術)放在與遊戲連接的感應器上,來將玩具中的角色或物品「帶入」數位遊戲中。當這些玩具與感應器互動時,遊戲會讀取玩具上的資料,例如唯一識別碼(UID),並在遊戲中生成相應的角色或物品。
Entering the password manually
在儲存的卡片裡面我們可以透過輸入已知的十六進位的密碼來解鎖:
Main Menu -> NFC -> Saved -> (Card Name) -> Unlock with Password -> Enter Password Manually
Writing data to magic cards
通常每張 NFC 卡都有製造商給的唯一識別碼 (UID),但 NFC magic 跟 UID rewritable 是兩種特殊的卡片。首先我們要先下載 NFC Magic 這個 app。
Writing card data
Flipper 可以對 Gen1、Gen2、Gen4 這些卡片做寫入,還有一般的 MIFARE Classic® 卡 (不改變 UID)。
Magic 卡片類型和配置選項
Gen1 Magic 卡片
Gen2 Magic 卡片
- 可配置為以下卡片類型:
- MIFARE Classic® 1K(需要 Gen 2 相容卡)
- MIFARE Classic® 4K(需要 Gen 2 相容卡)
Gen4 (Ultimate) Magic 卡片
- 可配置為以下卡片類型:
- 任意 MIFARE Classic®
- MIFARE Ultralight® EV1
- MIFARE Ultralight® EV2
- NTAG® 203
- NTAG® 213
- NTAG® 215
- NTAG® 216
如果要完整的複製原始卡片的話,我們需要把 UID 跟資料都複製過去,步驟如下:
- 讀原本的卡
- Main Menu -> Apps -> NFC -> NFC Magic
- 檢查我們是否具有相容的 Magic Card 選擇 Check Magic Tag 這個功能,如果對象是有密碼保護的 Gen4 卡的話,我們需要到 Gen4 Actions -> Auth with password,接著再使用 Check Magic Tag
圖片來源:https://docs.flipper.net/nfc/mfkey32
- 成功的話就會說 detected,否則就會一直讀:
圖片來源:https://docs.flipper.net/nfc/mfkey32
- More -> Write 選擇要複製的卡,成功的話就會看到:
圖片來源:https://docs.flipper.net/nfc/mfkey32
另外我們也可以用 Wipe 這個功能來格式化卡片,UID 會變成 default 然後資料會被清除。
按讚訂閱收藏小鈴噹叮叮叮
NFC 因為安全性較 RFID 高的關係,所以其他能玩的花樣也變得更多,有針對各種類型的卡片的應用以及一些攻擊手法,但還是呼籲大家學下這些知識是為了幫助世界變得更美好,大家都要當個好駭客,我們明天繼續介紹 NFC!