DEF CON 33 - RF Village - Running a Software Defined Radio CTF using challengectl - Dan Perret
三句話摘要
使用開源軟體 Challenge CTL 運行軟體定義無線電(SDR)捕獲旗幟競賽,實現可重複、可擴展的無線電頻率安全挑戰。 Challenge CTL 透過單一 Python 應用統一管理多個 SDR 設備和信號型態,讓任何人都能用商用硬體在家執行符合法規的 RF CTF 挑戰。 RF CTF 的設計需滿足法律、可重複性與可解決性三大硬性需求。首先,傳輸和接收必須合法——例如不能在蜂巢頻段傳輸因為涉及執照問題;其次,每次傳輸必須完全相同,因為週末期間需要傳輸數百至數千次;第三,挑戰必須有定義明確的答案,可以評分和驗證。
重點整理
重點- 1
RF CTF 的設計需滿足法律、可重複性與可解決性三大硬性需求。首先,傳輸和接收必須合法——例如不能在蜂巢頻段傳輸因為涉及執照問題;其次,每次傳輸必須完全相同,因為週末期間需要傳輸數百至數千次;第三,挑戰必須有定義明確的答案,可以評分和驗證。
- 2
Challenge CTL 的進化代表從單一流程圖到多設備協調的轉變。早期(2014年左右)使用樹莓派和 HackRF 透過資料庫同步,現在演進為多執行緒 Python 應用,管理三台 Blade RF 2.0 設備,可同時傳輸 15-16 個不同旗幟。系統會檢查設備可用性,自動循環挑戰,並在傳輸前進行頻譜標誌圖案(spectrum painting)以提醒參賽者。
- 3
信號生成方式影響滾動金鑰的難度和可行性。理想狀態是在流程圖內即時生成信號(如 Morse 碼),只需輸入文字;次佳方案是預生成二進位或音訊檔案;最差情況是重放原始 IQ 資料。目前某些挑戰需要兩小時才能滾動金鑰,因為 FL Digi 是交互式工具,必須實時等待檔案生成。
實用技巧與重點
乾貨- 軟體與工具:
- Challenge CTL(github.com/rfhschallengectl)— 開源 Python 排程器
- FL Digi — 業餘無線電數位模式檔案生成
- QSSTV — SSTV 信號檔案生成
- GNU Radio — 流程圖設計
- CTFD — 開源計分系統
- Blade RF 2.0、HackRF、USRP、RTL-SDR — 常見 SDR 硬體
- Challenge CTL 支援的信號類型:
- Morse 碼(CW)
- 振幅移位鍵控(ASK)
- 窄帶 FM、上邊帶(SSB)
- 業餘無線電數位模式(Rigatty、Thor、FeldHell)
- Poxag 分頁機(需要 cap code)
- LRS 長距離系統餐廳呼機
- SSTV 慢掃電視
- 檔案格式:
- devices.txt — 定義 SDR 設備(設備 ID 與 Osmo SDR 設備字串)
- flags.txt — 挑戰清單(會議名稱、時間、各挑戰參數)
- 音訊檔案 — .wav 格式
- 執行步驟:
- 執行 create_devices.py,掃描並生成 devices.txt
- 從 RFCTF flags archive 下載或編輯 flags.txt(含波形檔路徑、頻率、參數)
- 執行 challenge_ctl.py,指定 flags 檔與 device 檔
- 系統自動在可用設備上循環傳輸挑戰
- 滾動金鑰(Roll Keys):
- Morse 碼:直接編輯 flags.txt 的文字欄位,無延遲
- FL Digi 模式:開啟 FL Digi,選擇編碼(如 Rigatty),輸入旗幟,Audio menu → TX generate → Generate wave file(需驗證音訊採樣率)
- SSTV:QSSTV → Sound Card output、Record → 選擇影像 → 生成檔案
- 關鍵數據:
- Schmoocon 2025 CTF:3 台 Blade RF、15-16 個旗幟、9055 MHz(Morse 示範頻率)
- 現行滾動金鑰耗時:約 2 小時(因單一流程圖設計)
- 專用硬體限制:分頁機始終是固定號碼(如 #61),無法變更;TPMS 感測器 ID 無法重編程
結論
結論“Challenge CTL 透過單一 Python 應用統一管理多個 SDR 設備和信號型態,讓任何人都能用商用硬體在家執行符合法規的 RF CTF 挑戰。”
完整解析
詳細RF CTF 的核心概念是把無線電安全轉化為可重複的教育競賽。這場比賽的目標不僅是記分,而是讓參賽者在合法、受控的環境中實驗 Wi-Fi、藍芽、RFID、業餘無線電、甚至輪胎壓力感測器等現實世界的無線訊號。與傳統數位 CTF 不同,RF CTF 必須應對法律限制(例如無法傳輸蜂巢訊號,即使設置自有基地台)、硬體相容性、以及重複性的挑戰——同一個挑戰必須在週末期間傳輸數百次,每次完全相同。
早期 RF CTF 依賴專用硬體,如真實分頁機、TPMS 感測器、古董無線電設備。這些設備的優點是高度真實和可靠,但缺點明顯:一旦硬體故障就無法替換,無法更改金鑰內容(分頁機號碼永久固定),而且攜帶和維護成本高。隨著軟體定義無線電的成熟,講者和同事們逐漸轉向使用 HackRF、Blade RF 等通用設備,配合 GNU Radio 流程圖來生成各種信號型態。
Challenge CTL 的設計就是為了解決多設備協調的複雜性。這個 Python 應用追蹤系統中的所有 SDR 設備,維護待傳輸的挑戰清單,並在設備可用時自動派配任務。現行 Schmoocon 的實裝使用三台 Blade RF 2.0 同時管理 15-16 個挑戰,系統會循環排程它們。每次傳輸前,系統還會在指定頻率上繪製 RFHS 標誌圖案,向參賽者視覺化通知挑戰即將到來。這種設計使得單一應用程式可以抽象化底層硬體差異。
信號生成是另一個關鍵面向,涉及金鑰滾動的難度。最理想的方案是完全在 GNU Radio 流程圖內生成信號——例如 Morse 碼挑戰,使用者只需在 flags.txt 中編輯文字,系統立即生成對應的 CW 訊號。次之是使用 FL Digi 等現有工具預先生成音訊檔案,但 FL Digi 是交互式軟體,滾動多個金鑰時須逐個等待即時編碼,整個流程需要約兩小時。最差的做法是重放原始 IQ 檔案,這會帶入雜訊且難以驗證。講者演示了完整工作流程:使用提供的 create_devices.py 自動掃描 SDR 設備,下載或編輯 Schmoocon 2025 的 flags.txt(內含 Morse、FM、SSTV 等多種類型),確保音訊檔案採樣率正確,最後一行 Python 命令就能在個人筆電上運行整場 CTF。
未來的開發方向包括整合虛擬挑戰(透過 ZMQ 在網路上串流,疫情期間已驗證可行)、多個 SDR 盒子之間的網路協調、充分利用 Blade RF 的雙傳輸埠以支援多天線配置、以及對不同 SDR 型號(HackRF、USRP)的自動增益調整。此外,還需要改進 FL Digi 的自動化程度,因為目前仍然是手動生成檔案的瓶頸。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

