DJI 無人機? 與DroneID
轉 *** 載
0x01 摘要
消費級無人機可以用于高級航拍、物流和人道主義救援等等。但是其廣泛使用給安全、安保和隱私帶來了許多風險。例如,攻擊方可能會使用無人機進行監視、運輸非法物品,或通過侵入機場上方的封閉空域造成經濟損失。為了防止惡意使用,無人機制造商采用多種對策來強制安全可靠地使用無人機,例如對速度和高度施加軟件限制,或使用地理圍欄實施禁飛區。
作為對傳統對策的補充,市場領導者大疆(DJI)為無人機實施了一種稱為 DroneID 的跟蹤協議,該協議旨在將無人機及其操作員的位置傳輸給授權實體,例如執法部門或關鍵基礎設施的運營商。
本文中分析了無人機的安全和隱私聲明,重點關注市場份額為 94% 的領先制造商 DJI。首先,將現有無人機的攻擊面系統化,并調查了能夠竊聽無人機空中數據流量的攻擊。通過對DJI固件的逆向工程實現了大疆專有跟蹤協議 DroneID 的解碼器,且僅使用廉價的COTS硬件。研究結果表明,DroneID傳輸的數據未加密且任何人都可以訪問,這損害了無人機操作員的隱私。
image
其次,對無人機安全性進行了全面分析:結合逆向工程、針對 DJI 通信協議定制的新模糊測試方法以及硬件分析,研究者發現了無人機固件中的幾個關鍵缺陷,這些缺陷允許攻擊者在兩個不同的平臺上獲得DJI 無人機及其遙控器的更高特權。這種根訪問權限可能會導致禁用、繞過反制或濫用。此研究總共發現了 16 個漏洞,從拒絕服務到任意代碼執行等等。這些錯誤中的 14 個可以通過操作員的智能手機遠程觸發,并導致無人機在飛行途中墜落。
0x02 研究介紹
盡管存在潛在的安全隱私風險以及無人機的濫用,但有無人機系統的系統安全方面尚未得到全面評估。本研究包括:
**? 安全分析:**對市場領導者大疆的消費級無人機進行了全面的安全分析。這個分析包括無人機本身和遙控器的硬件、軟件和無線物理層。通過分析揭示了多個嚴重的安全漏洞,這些漏洞允許任意命令執行和繞過反制措施,甚至可以在飛行途中遠程破壞無人機。
? DroneID:對當前大疆無人機的固件和無線物理層進行逆向工程,以分析 DJI 的專有傳輸協議 OcuSync。基于這些發現,得到了DroneID 接收器、解調器和解碼器的組合,以揭示包括無人機和遠程操作員實時位置在內的敏感信息。
**? 模糊測試:**設計并實現了一個定制的黑盒fuzzer,它將 DJI 特定語法與新的Bug Oracle相結合,以識別無人機及其遙控器中的故障。該fuzzer發現了可用于獲得根訪問權限,目前大疆已修復所有錯誤。模糊測試框架和相關數據已開源:https://github.com/RUB-SysSec/DroneSecurity
0x03 大疆無人機相關原理和基礎
大疆是全球領先的商用無人機制造商,總市場份額約為 54%(截至 2021 年底),在消費無人機領域的市場份額為 94%。DJI 提供了一份關于其安全機制的白皮書(https://security.dji.com/data/resources/ ),從而在安全和安全方面建立了堅實的基線。鑒于大疆的實際重要性,本研究的工作重點關注該供應商在 200 克到 1 千克之間的消費級無人機。在這項工作中使用三種不同的大疆無人機模型及其相應的遙控器 (RC) 進行安全分析以及針對不同固件的逆向工程:
? DJI Mini 2,RC:RC231
? Mavic Air 2,RC:RC231
? Mavic 2 Pro / Zoom, RC: RC1B
A. 通信接口和協議
下文概述了大疆無人機的接口和通信協議,這些都直接暴露給攻擊者。
image
上圖概述了大疆無人機的不同接口,以及如何使用這些接口在無人機、遙控器 (Remote Control,RC) 和計算機之間進行通信。在無人機運行過程中,無人機與遙控器進行通信,而計算機僅用于分析、更新或訪問無人機或遙控器上的文件。
1. USB
無人機和遙控通常都有一個 USB 接口,用于各種設備類別和用例。預期用例是下載數據,例如來自內部存儲的媒體文件或來自飛行記錄器的飛行日志。對于 DJI 設備,USB 接口還用于發送大疆通用標記語言 (DJI Universal Markup Language,DUML) 命令 - DJI專有通信協議 - 以控制設備的內部設置或啟動固件更新。此外,在設備的啟動過程中會暴露一個引導加載程序,它可以通過特定的 USB 數據包觸發。遙控器(RC231)上有兩個 USB 接口,一個用于連接智能手機和遙控器以訪問 DJI Fly 應用程序,另一個用于為遙控器充電。充電端口還可用于將遙控器連接到計算機。
2. UART
通用異步收發器 (UART) 接口主要用于有線通信的微控制器。這種 UART 接口也可以在大疆無人機中找到,如Sparrow S1 收發器,也稱為 S1 片上系統(System on a Chip,SoC)。在硬件分析過程中發現該界面在啟動后啟用了兩秒,并顯示了bootloader的啟動畫面。
3. 無線物理層
包括藍牙、WiFi 和 OcuSync。最新的大疆無人機支持不同的無線協議,如藍牙和 WiFi。 例如,使用 DJI Fly 應用程序將無人機相機拍攝的照片傳輸到智能手機。 WiFi 連接也可用于 Mavic Pro 或 Mavic Air 等較舊的無人機,但用于命令與控制 (C2) 鏈接以通過智能手機控制無人機。在較新的大疆無人機上,此通信鏈路已被專有的 OcuSync 無線電協議所取代,該協議的性能明顯更好并且不易受到干擾。
4. DUML
DUML是大疆使用的專有通信協議,可用于在內部模塊之間以及從 RC 向無人機發送命令和數據。 DUML 用于設置和更改無人機的參數,如最大高度的飛行參數或最大上升和下降速度等不同速度參數。由于此協議的解析過程容易出錯,因此 DUML 是進一步安全分析的有趣目標。因此,在下面提供了此自定義協議的詳細概述。
區分兩個 DUML 協議版本:V1 和 Logic。Logic協議用于無人機各個模塊之間的內部通信,而V1協議用于通過USB在計算機和無人機之間進行通信。
image
如上圖所示,DUML數據包的結構可分為四個部分:標頭、傳輸、命令和有效負載。標頭包含一個設置為固定值 0x55 的魔術字節,然后是數據包的長度、版本號和 CRC-8 標頭校驗和。標頭后面是傳輸數據,用于設置 DUML 命令的發送者/接收者。有 32 種已知的發送方和接收方類型(如PC, Mobile App, Center Board和WiFi)。除了源和目的地之外,數據包的傳輸部分還包含一個唯一的序列號,用于維護多個數據包的順序。
image
DUML 數據包的第三部分是它自己的命令。此處定義了字段 commandtype、commandset 和 commandid。將根據commandtype設置確認類型、數據包類型和加密類型。 commandset 指定哪一組命令可以用于 commandid。有 17 個已知的命令集可以使用,如general, flight controller, WiFi或battery。逆向工程結果證實了這些發現。數據包的最后一部分是有效負載和對整個數據包計算的 CRC-16 校驗和。出于效率原因,在信息緊湊的地方使用自定義編碼。上圖和下圖分別總結了這種編碼和解碼。接下來將基于恢復的 DUML 格式進行動態安全測試,并使用它來構建自定義模糊測試框架。
image
5. DJI Fly和DJI Go 4應用程序
大疆為 iOS 和 Android 提供了一個應用程序來顯示實時視頻源和其他控件。最新的無人機使用 DJI Fly 應用程序,而傳統無人機使用 DJI Go 4 應用程序。這兩個應用程序提供基本相同的功能,特別是都顯示無人機的實時視頻源、允許拍照和錄制視頻、更改不同的無人機設置、更新固件或檢查無人機的一般狀態。
B. 無人機固件
根據復雜性,無人機使用不同的操作系統 (OS)。對于大多數 DJI 無人機,操作系統基于 Android,Android 也用于舊版本的遙控器(例如 Mavic Pro RC GL200)。 DJI Mini 系列使用基于 Buildroot的 32 位 ARM Linux。 對于時間和性能關鍵的操作,使用實時操作系統 (RTOS),例如。例如,飛行控制器和較新的 RC(例如 RC231)在收發器中使用兩個 RTOS 來管理射頻 (RF) 連接 - 一個應用程序和一個通信處理器。收發器中 RTOS 的固件可作為兩個處理器的加密二進制文件使用。操作系統(RTOS 固件除外)采用基于嵌入式系統中常用的 BusyBox 軟件套件。 DJI 以使用 AES 加密并使用 RSA 簽名的專有文件格式對其固件進行編碼。不同的模塊、文件和用例(例如固件更新或傳輸)使用不同的加密密鑰。其中一些加密密鑰已被 DJI 社區的個人泄露,用于解密部分固件; 研究者確認這些密鑰有效。
C. 無人機硬件
接下來,概述了無人機中使用的典型硬件組件。下圖以 DJI Mini 2 為例顯示了此類無人機基本組件的概覽。該圖還說明了各個組件如何鏈接在一起以及它們如何相互通信。此概述和以下描述可轉移到僅組件性能不同或具有額外傳感器的其他 DJI 無人機型號。
image
1. 飛行控制器
飛行控制器是無人機最關鍵的部分,必須在任何情況下都有可靠性、可預測性和確定性。為了確保這些屬性,飛行控制器使用了 RTOS。 控制器通過收集來自慣性測量單元 (IMU)、指南針、GPS 或視覺定位系統 (VPS) 等傳感器的輸入來監督飛行行為。它使用此信息通過向調節四個電機速度的電子速度控制 (ESC) 控制器發送指令來維持穩定飛行。此外,它還負責通過檢查電調、電池和其他模塊的狀態來批準飛行并允許無人機起飛。此外,它還會檢查內部禁飛區 (NFZ) 數據庫,以確定無人機是否被禁止進入附近空域的特定區域。飛行控制器通過收發器(此處為 S1 SoC)接收控制命令,并對從該 SoC 接收到的用戶輸入做出反應。此外,飛行控制器將來自不同模塊和傳感器的信息發送到收發器。
2. 視頻編碼和防撞 SoC
該 SoC 處理圖像傳感器和視頻編碼。它接收來自攝像機的視頻和圖像數據,對其進行處理,并將其轉發給收發器。如果安裝了額外的傳感器來避免碰撞,它們的數據也會在此 SoC 中處理。除了將視頻數據發送到收發器外,SoC 還使用 USB 接口將圖片或視頻存儲在內部存儲器或 SD 卡上。最后,它處理無人機的固件更新過程。此 SoC 為 DJI 無人機使用基于 Linux 或 Android 的操作系統。
3. 遙控器
遙控器通過 C2 鏈路控制無人機和相機。來自控制器和智能手機的用戶輸入被發送到收發器,收發器調制信號并通過 OcuSync 協議傳輸。此外,RC 接收無人機的下行鏈路數據,其中包括遙測數據和視頻饋送,然后將其傳遞給智能手機。 RC231 也使用 S1 SoC 作為收發器,支持最新的 DJI 無人機,如 DJI Mini 2、Mavic Air 2、Mavic Air 2s 和 Mavic 3。這些無人機使用 OcuSync 傳輸協議進行 C2 和下行鏈路。選擇的OcuSync版本以實際無人機機型為準 - 可以是 OcuSync 2.0、3.0 或 3+。
4. 收發器
收發器結合了用于無線電通信的發射器和接收器,是無人機的重要組成部分。它通過專有協議或無線標準(如藍牙或 WiFi)工作。一些最新的 DJI 無人機使用所謂的 Sparrow S1 收發器進行 OcuSync 傳輸。該收發器是基于 ARM Cortex-M CPU 的專有 SoC,可以在 Mini 2 和 Mavic Air 2 中找到。Mavic Air 2s 和 Mavic 3 使用所謂的 P1(Pigeon)SoC 作為收發器。本研究專注于 S1 SoC。
該 SoC 用作 OcuSync 的收發器,并包含兩個用于應用處理器和通信處理器的 RTOS。 RTOS 的固件稱為 Sparrow 固件,可以在 RC 的固件更新以及無人機的文件系統中找到。無人機中的收發器接收來自飛行控制器的遙測數據和其他報告以及來自視頻編碼 SoC 的視頻數據。然后,所有這些數據都經過 RF 調制并通過天線傳輸。此外,收發器從遙控器接收 C2 鏈路并將此數據傳遞給飛行控制器。
5. WiFi / 藍牙芯片
WiFi 或藍牙芯片也可以作為收發器,連接遙控或智能手機來控制無人機。然而,這種設置的缺點是范圍和可靠性不如專有無線電協議。 DJI Mini 2 和 Mavic 3 有一個額外的 WiFi 和藍牙芯片,允許用戶輕松訪問存儲在無人機上的媒體文件。
6. 額外傳感器和其他硬件
大多數當前的消費級無人機都有一個連接到萬向架的高分辨率相機。該萬向架補償了無人機的運動,并確保穩定的圖像。除了主攝像頭,無人機還可以使用額外的攝像頭來避免碰撞。其他傳感器可以包括用于測量無人機高度的紅外線或超聲波傳感器,或分別用于測量加速度和傾斜度的加速度計和陀螺儀傳感器。
D. 無線物理層
當前一代的大疆無人機使用專有的 OcuSync 協議,在不受管制的 2.4 GHz 和 5 GHz ISM 頻段中進行無線傳輸。無人機將高帶寬、實時視頻傳輸到 RC,然后傳輸到連接的智能手機。 RC 通過 C2 信號控制無人機。根據 DJI,上行鏈路和下行鏈路均采用 AES-256 加密。 OcuSync 在 2.4 GHz 和 5 GHz ISM 頻段的傳輸范圍約為 15 公里。
根據 FCC ID 數據庫,這些設備使用 20 MHz 寬的信道作為下行鏈路(從無人機到遠程)和正交頻分復用 (OFDM) 信號。控制上行鏈路使用較窄信號的跳頻。早期的無人機使用可以使用 WiFi 卡嗅探的“增強型 WiFi”。相比之下,沒有公開可用的 OcuSync 兼容接收器可以解碼來自無人機或 RC 的信號。
0x03 無需物理訪問的安全分析
無人機是由許多模塊組成的復雜網絡物理系統。如前圖所示,這些模塊為攻擊者暴露了各種接口。組件和接口的相互作用需要訪問功能的系統化,以提供對無人機的全面安全分析。這些接口可分為無線接口和需要物理訪問的接口。
A. 威脅模型 - 被動攻擊
在安全分析的第一部分,假設攻擊者無法物理訪問無人機本身或 RC 的場景。因此,攻擊者僅限于無線鏈路和廣播信號。設想一個攻擊者被動地監聽無線物理層以檢測無人機以及伴隨的 RC(即操作員)的下落。在后文中放寬了這一假設,并考慮攻擊者可以物理訪問無人機,因此具有更廣泛的利用功能和訪問關鍵信息的能力。
image
B. 無線鏈接
無線鏈路是一個關鍵的攻擊媒介,因為它控制著無人機并且可以遠程訪問。 DJI 無人機使用專有的 OcuSync 協議來控制無人機并將視頻流傳輸到遙控器。 大疆銷售的Aeroscope是一種允許執法部門定位無人機和操作員的設備。對于這種定位,Aeroscope 會偵聽一種稱為 DroneID 的特殊信號,該信號由所有 DJI 無人機廣播。不幸的是,OcuSync 和 DroneID 都沒有公開記錄,也沒有可用的開放接收器。DJI 的安全白皮書沒有明確提及 DroneID 傳輸、它們的特性或內容。在本節中展示了對 DroneID 廣播進行逆向工程的結果,并展示了如何成功提取敏感信息,例如無人機和遠程操作員的位置。
通過掃描頻段,確定了與高帶寬視頻饋送和上行鏈路控制信道分離的無線電廣播,數據包大小非常小且周期性出現。懷疑這些是用于定位和識別無人機的 DroneID 廣播。 DJI 至少從 2017 年起就一直保持此功能。要求通過開放標準(基于 WiFi 或藍牙)進行位置廣播的無人機規定目前正在起草中,但尚未最終確定。因此,假設最新的無人機使用 OcuSync 協議進行此類廣播。通過分析數據包可以了解:
a) 當前一代 DroneID 中包含哪些數據;
b) 是否存在(意外的)安全功能。
1. DroneID接收器
為 DroneID 實現了一個實時接收器,使用軟件定義無線電 (SDR) 進行信號捕獲和基于 Python 的處理鏈。原型實現包含通過 CRC 校驗和進行的信號采集、解調、解碼和驗證的完整流程。主要執行逐步分析,從無線電信號中導出專有協議的未知參數,這本身就是一個具有挑戰性的問題。
接收器實現了實時接收和解碼包。此外,它還解決了另一個問題 - 即無人機在 2.4 GHz 和 5.7 GHz 頻段之間動態切換。因此,連續掃描兩個頻段以尋找候選幀,并將這些候選幀送入解調和解碼階段。下圖顯示了接收器的結構和組件以及接收數據的內部處理,包括頻率搜索、信號處理、解調和解碼。該系統的細節在下面有更詳細的解釋:
image
此部分工作使用了連接到筆記本電腦的 USRP B200mini SDR。 SDR 在 70 MHz 至 6 GHz 的頻率范圍內同時記錄高達 56 MHz 的頻率。接收器以 50 MHz 帶寬掃描每個波段 1.3 秒,每個波段的批處理大小為 496 Mb。 一旦找到幀,將鎖定波段以連續記錄 DroneID 幀,僅當無人機切換頻道并且在幾個周期內沒有收到新數據包時才返回掃描。
2. 頻譜分析
如上所述,OcuSync 和 DroneID 規范并未公開。根據分析,很明顯這些協議使用與 LTE 類似的調制技術和參數。逐步對所有后續參數進行逆向工程。下圖顯示了單個 DroneID 無線電幀的頻譜。一個數據包包含九個標志,包括兩個 Zadoff-Chu (ZC) 同步標志(列 4 和 6)。其他標志是 OFDM 數據標志,具有 601 個子載波(600 個數據和 1 個 DC),子載波間隔為 15 kHz。 載波被填充到2的下一個冪次數,以在下一步中應用快速傅立葉變換 (FFT); 這給出了總共 1024 個子載波,總帶寬為 15.36 MHz(包括保護頻帶)。
image
記錄顯示數據包每 640 毫秒重復廣播一次。注意到一些無人機(Mavic 2 和更早的 OcuSync 無人機)不發送第一個標志(標志 1),這導致更短的幀持續時間為 576 μs。 其他參數保持不變。
3. 解調
將無線電信號轉換為比特和字節需要多個步驟:
a) 時間同步以找到 OFDM 標志的邊界和頻率同步以與承載有效載荷的 OFDM 子載波對齊;
b) 信道估計考慮無線電傳輸期間的失真;
c) 子載波的解調制(即,將 OFDM 子載波映射到位)。
*通過循環前綴的時間同步:*Symbol 不能一個接一個直接追加,而是需要在它們之間進行填充以減少標志間干擾。 對于 DroneID,標志之間的間隙由循環前綴 (CP) 填充:每個標志末尾的副本附加在相應標志的開頭。這能夠應用 Schmidl-Cox 時間同步 - 將移動一個標志長度并具有循環前綴寬度的兩個塊相關聯。原理如下圖所示。循環前綴長度為72個樣本,標志1和9除外,它們具有80個樣本的擴展循環前綴。下圖中相關性的峰值顯示時域中的標志開始。有了關于確切標志開始的信息,可以使用 FFT 將標志轉移到頻域 - 來自時域的 1024 個樣本導致頻域中的 1024 個子載波。同步后,循環前綴不再需要并被丟棄。
image
*通過 Zadoff-Chu 序列進行頻率偏移校正:*發現標志 4 和 6 總是包含根為 600 和 147 的 ZC 序列。將本地生成的 ZC 序列與實際標志相關聯,產生任何載波頻率偏移,并應用 用于校正的頻移。
*副載波解調和比特分配:*OFDM 副載波是正交相移鍵控 (QPSK) 調制的。即,載波信號相移四個可能角度之一,以將信號的消息調制為兩位。下圖顯示了四種不同的相移,產生了四個簇(如果繪制為復數表示)及其各自的位表示。同步和糾錯越好,分組越清晰。以下解碼步驟將顯示位分配是否正確。
image
4. 解碼
前面的步驟將無線電信號轉換為比特流,可以對其進行解碼以檢索實際的 DroneID 有效載荷。通過分析 S1 固件,發現數據 用黃金序列加擾,確定了底層線性反饋移位寄存器 (LFSR) 的種子。此外,它使用與 LTE 規范中相同的子塊交織置換表使用turbo編碼器進行編碼。
image
使用比特流的解擾和渦輪解碼,并將生成的數據映射到如上的DroneID 結構,通過逆向工程在無人機的固件中找到了它。每個數據包中包含的 CRC 校驗和與計算相匹配,表明正確恢復了數據。下圖顯示了成功恢復 DroneID 負載的示例。
image
5. 性能
本研究檢查了各種 DJI 無人機的 DroneID 廣播,例如 Mini 2、Mavic Air 2 和 Mavic 2 Pro / Zoom; 這些型號都使用 OcuSync 2.0 協議。然后,使用無人機在戶外測試了接收器,并讓無人機和操作員保持移動以生成非靜態 DroneID 數據包。結果顯示,可以成功解碼來自所有這些模型的廣播。解碼后的廣播顯示了所有位置信息都是準確的,并在每個數據包中更新,從而可以重建完整的飛行路徑。定位無人機和操作員只需要一個 DroneID 數據包。可以解碼的數據包越多,的飛行路徑分辨率就越高。使用匹配的 CRC 計算檢測到的幀、解碼嘗試和成功解碼的百分比,并將其與預期數量(基于 640 毫秒的 DroneID 間隔)進行比較。初步測量表明,對于所有測試的無人機,大約 37% 的預期數據包被正確解碼——這意味著每兩秒接收一次位置更新。
6. 結果
接收器范圍限制在大約 10 m 的范圍內,并且對發生的干擾很敏感,如相鄰的 WiFi 站。這種影響可歸因于的接收器鏈專注于對信號進行逆向工程,而不是針對性能或高范圍進行優化。測試表明,在接收器范圍內可以成功可靠地接收、解調和解碼 DJI 專有的 DroneID 傳輸。最重要的發現是,信號沒有加密。觀察表明,DroneID 準確地揭示了無人機、返航點和遠程操作員的位置。
收到的 DroneID 數據包表明對無線物理層數據包結構的假設是正確的,并且與從無人機固件中恢復的結構相匹配。此外,解碼數據包確認成功修改了無人機的序列號,這允許惡意用戶混淆他們的身份。前圖顯示了完整的 DroneID 信息的示例。
現在可以觀察和解碼 DroneID 數據包 - 這在以前如果不訪問 DJI 的 Aeroscope 接收器是不可能的 - 從而測試是否可以禁用 DroneID 或偽造傳輸位置。接下來進行了兩個實驗:
a) 操作員位置欺騙;
b) 通過未記錄DUML命令禁用 DroneID。
對于操作員位置欺騙,使用了一個非 root 的 Android 手機和來自 Google Playstore的名為“Fake GPS”的應用程序。在欺騙應用程序中設置虛假位置后,切換到 DJI 應用程序,啟動無人機并打開接收器。接收器開始查找并解碼有效的 DroneID 數據包,其中無人機的位置設置正確,但遠程操作員的傳輸坐標設置為虛假位置。該應用程序允許模擬隨機運動,也可以在收到的 DroneID 數據包中驗證這一點。無人機、返航點和操作員偽造的 GPS 位置之間的距離沒有發揮作用。因此得出結論,大疆沒有對坐標的一致性進行檢查,并且可以成功進行遠程操作員的位置欺騙。
此外,在的安全分析過程中發現了一個公開未知的 DUML 命令,該命令似乎允許配置和禁用不同的 DroneID 值。根據 DJI 的說法,此命令是內部 API 的一部分,不應在外部提供。這已在最新模型中修復。使用的實時 DroneID 解碼器,可以確認此命令不會禁用 DroneID 數據包,而是將數據包中的相應值替換為值“fake”。
0x04 具有物理訪問的安全分析
A. 威脅模型 - 主動攻擊
在本節中假設一個主動攻擊者,考慮攻擊者可以物理訪問無人機、其 RC 以及連接到 RC 的智能手機的場景。假設此攻擊者的目標是拒絕其服務或繞過 DJI 對無人機實施的反制措施。例如他們可能希望在飛行過程中使無人機墜落,禁用 DroneID、地理圍欄或其他軟件限制以便飛越受限區域。實現這一目標的第一步是能夠提取在無人機上運行的固件,然后提升權限。
盡管假設可以物理訪問無人機,但這主要是為了分析過程本身。正如展示的那樣,一旦發現有趣的命令,幾乎所有命令都可以通過無線方式發送到無人機。換句話說,還分析了這種主動攻擊者模型的一個變體:攻擊者只破壞了連接到 RC 的用戶智能手機(這在飛行期間是正常的),但沒有對無人機本身的物理訪問權限。
B. 概述
由于無人機是具有多個接口、不同固件文件和不同架構的復雜信息物理系統,因此需要對其應用多種類型的分析方法。六個可以攻擊的目標包括:無人機硬件、無人機底盤和包、地面控制站、無線電通信信道、操作員和云服務。這項工作中區分了硬件和固件,并對兩者進行了詳細的分析。
在可以使用自動動態分析方法(例如模糊測試)之前,事實證明這些方法對于有效查找軟件和固件中的錯誤具有無可估量的價值,必須了解被測目標的復雜性。例如,需要識別通信接口和協議。為此,手動對固件進行靜態分析并分析無人機的硬件。除了為的自動動態分析提供基本信息外,還通過這種方式發現了幾個關鍵的安全漏洞。基于已識別的 DUML 通信協議,隨后設計了一個模糊測試工具來自動搜索更多漏洞并發現其中的大量漏洞。所有調查結果均已披露給供應商 DJI 并得到其承認。
為了進行詳細分析,調查了以下 DJI 硬件設備:DJI Mini 2、Mavic Air 2 和 Mavic 2 Pro / Zoom。 此外,研究了遙控器 RC231 / RC-N1(應用于最新大疆無人機,包括 DJI Mini 2、Mavic Air 2 和 Mavic 3),并復現了在最新的 DJI 無人機 Mavic 3 上發現的錯誤。
C. 初步人工分析和交互
在可以安裝任何自動化分析技術(例如模糊測試)之前,需要了解的目標。
一、手動靜態分析
將手動靜態分析應用于無人機固件的不同部分,例如飛行控制器,并發現有關各種特性和無人機功能的關鍵信息。分析使用了標準工具,特別是 Ghidra、Binwalk、十六進制編輯器和 dji-firmware-tools。手動靜態分析揭示了有關 DUML 結構的信息,為在后續部分中描述的動態分析奠定了基礎。除了為了解和分析無人機提供基本信息外,手動靜態分析還揭示了一個漏洞,即能夠繞過 DJI 的固件簽名并在設備上獲得特權shell。
1. S1 SoC 固件簽名驗證繞過
S1 SoC的固件可以在無人機上以sparrow_firmware的形式找到,也可以在網上找到的固件更新中找到;它由不同的二進制文件組成。該固件包的一部分是所謂的“SDRH”配置文件。這些文件在設計上既沒有簽名也沒有加密,對引導加載程序的手動靜態分析表明這些文件指定了內存地址及其值。假設 DJI 使用它們在收發器固件中安裝補丁,而無需重新刷新整個固件。DJI 沒有透露任何細節,也沒有在安全白皮書中提及這些文件。引導加載程序讀取這些文件并使用指定值修補 RTOS RAM 的已定義內存地址。使用手動制作的 SDRH 文件允許在啟動期間修補固件,這發生在驗證固件簽名之后。這種方法完全繞過了固件簽名過程,并使能夠提供精心制作的 SDRH 文件的攻擊者能夠對固件代碼進行任意更改。
image
上表列出了受此簽名繞過影響的無人機和 RC(Sig.Bypass)。 Mavic 3 和 Mavic 2 Pro 不受影響,因為它們使用與易受攻擊的 S1 不同的收發器。根據漏洞披露,大疆已將此漏洞的嚴重性指定為嚴重。
2. 通過 Fastboot 傳送 SDRH 文件
為了尋找將 SDRH 文件傳送到無人機的機制,研究了無人機的不同二進制文件,并發現固件通過類似快速啟動的系統閃存到 SoC 的 RAM。 這要求引導加載程序處于正確的狀態以接受這些快速引導命令。通過對無人機文件系統的系統初始化二進制文件進行逆向工程,發現收發器的引導加載程序可以通過發送不同的正確格式的數據包來觸發。在引導期間通過 USB 將此類數據包發送到 RC 可啟用快速引導模式。通過解鎖 fastboot 模式,可以使用它來上傳(簽名的)收發器固件文件和(未簽名的)SDRH 文件。這允許攻擊者將惡意 SDRH 文件與原始固件文件一起包含在內,并轉移收發器固件的控制流。上傳這些 SDHR 文件不需要授權,只需要對無人機或 RC 進行物理訪問。
3. Sparrow 收發器固件后門
在接下來的步驟中,分析 Sparrow 收發器固件并發現一個 UART 接口。收發器固件通過此接口公開一個shell。然而,這個shell在生產無人機上是封閉的。硬件通過可能是熔絲位的方式向固件指示其生產狀態。在無人機固件中找到檢查此位的代碼。通過上傳修補固件代碼的自定義 SDRH 文件以禁用此檢查,在固件邏輯中重新啟用 UART shell。
二、硬件分析
為了與手動靜態分析的結果相匹配,檢查了無人機硬件的通信接口,包括前面提到的 UART 接口。本階段目標是在硬件級別驗證的軟件發現,并在收發器固件上獲得交互式shell。使用自定義 PCB 工作站進行硬件分析(參見下圖),它允許探測不同的連接器。使用邏輯分析儀和示波器來識別固件中暴露的 UART 接口。
image
由于最新的 DJI 無人機(如 DJI Mini 2、Mavic Air 2)及其遙控器共享 Sparrow 固件,因此選擇這些設備作為目標。在這里,RC 的硬件分析被證明是最容易訪問的,即使在設備打開時也可以進行測試。在對 RC231 遙控器硬件的調查中,發現收發器固件使用的 UART 端口在打開設備后的前兩秒內處于活動狀態。
基于之前手動靜態分析的發現 - 即固件文件的修補,導致收發器固件無限期地保持 UART 連接打開。這允許連接到收發器 UART shell。在這個 shell 上,確定了執行任意內存讀取、寫入的命令和生成 shell 的命令,從而授予提升的權限——禁用反制措施和軟件強制限制的先決條件。
D. 動態分析 - 模糊測試
鑒于之前手動靜態分析的理解和觀察,現在可以建立一個自動化的方法來發現錯誤。有效發現錯誤的最有效技術之一是模糊測試,這是一種通過向測試目標提供(可能無效的)輸入來識別軟件故障的自動化方法。它的巨大成功激發了許多不同的研究方向,以改進模糊測試的各個方面。最重要的創新之一是引入了覆蓋率反饋,其中目標被用來報告特定輸入執行了哪些代碼。這允許fuzzer觀察各個輸入如何影響控制流,從而指導模糊測試過程。現代fuzzer通常依賴于在編譯階段注入的工具,因此需要訪問源代碼。如果源代碼不可用,fuzzer可以使用動態二進制檢測(DBI)、二進制重寫或英特爾 PT等硬件功能來檢測二進制可執行文件。但是,它們要么需要特定的硬件,例如英特爾處理器,或對執行環境做出假設,如依靠操作系統提供的已定義接口。不幸的是,在嵌入式設備上運行的固件通常不會公開這樣的接口。為了fuzzing此類固件 blob(通常需要特定的硬件配置),最先進的模糊測試依賴于重新托管,即固件環境的(部分)模擬,因為在實際硬件上進行模糊測試通常設置起來很復雜,提供的反饋不足并且擴展性不好。不過,它還是必須有訪問該固件的權限。
1. 無人機模糊測試設計
雖然對無人機的模糊測試似乎是分析其安全性的必然方法,但面臨著障礙:既無法訪問源代碼也無法訪問完整的固件。因此,并發模糊測試方法不適用于 DJI 無人機 - 必須使用實際硬件進行模糊測試,并且無法訪問覆蓋信息。
DUML 協議被確定為合適的模糊測試目標,因為該協議用于啟用整個無人機的配置。此外,所有無人機組件都使用該協議進行內部通信,并且通過 USB 接口,攻擊者可以通過物理訪問隨時使用該協議。該協議代表了潛在攻擊的有吸引力的目標:該無人機系統中的漏洞為攻擊者提供了強大的利用原語。
*DUML 協議:*基于對 DUML 的分析,設計了一個使用自定義語法的黑盒fuzzer,即fuzzer知道為其生成輸入的規范,但不受覆蓋范圍的指導。由于無法訪問源代碼、完整固件或能夠模仿 DJI 特定硬件的模擬器,因此需要對無人機本身進行模糊測試。由于 DJI 無人機和遙控器提供了一個 USB 接口,因此可以通過 DUML 協議進行通信,從而為fuzzer選擇該接口并觀察其行為。由于沒有覆蓋反饋,fuzzer在黑盒場景中只能從外部觀察無人機的行為。為了改進對不會導致崩潰的漏洞的檢測,提出了一種基于智能手機應用程序 UI 差異的新型bug oracle,它連接到 RC 并用作無人機配置、傳感器讀數和相機反饋的屏幕。例如,當fuzzer更改序列號時,bug oracle可以自動標記此行為。
通過 DUML 進行通信需要遵守 DUML 協議。在沒有測試實際程序邏輯的情況下,在早期解析期間可能會拒絕不注意規范的fuzzing輸入。每個 DUML 命令都由字段 src、dest、cmdType、cmdSet 和 cmdID 組成——所有這些字段均由一個字節表示。fuzzer的一種可能性是為每個字節迭代所有 256 個值,這將花費太長時間并測試許多不必要和不存在的命令。為避免這種情況,將這些字段的可能值縮小到已知的來源、目的地和命令集。這使能夠以一種確定的方式詳盡地測試剩余的命令:從命令集中生成所有可能的 DUML 命令,并測試字段 commandid 的所有 256 個值。只有命令的有效負載可以包含任意字節,僅受 DUML 數據包的長度限制。為此字段生成(并記錄以允許確定性地重放測試命令)隨機有效負載。在發送數據包之前,為數據包計算正確的校驗和,以便測試校驗和解析之外的程序邏輯。通過這種方法,可以識別導致無人機墜落、斷開連接或其他物理故障的任何 DUML 命令。請注意,并非所有錯誤都表現為崩潰或物理上可觀察到的故障。相反,某些命令可能會導致內部錯誤或損壞設備上的其他數據。
*UI oracle:*為了克服這個限制,引入了一個更精確的bug oracle:UI Oracle。 DJI 無人機與連接遙控器的智能手機緊密相連。智能手機用于顯示無人機的攝像頭畫面,并允許用戶檢查傳感器讀數等值,或更改設置(參見第 II A e 節)。本著廣泛部署的測試策略的精神,例如,由 selenium 等框架實現,可以在模糊測試活動期間自動導航無人機的用戶界面,以識別非崩潰的行為。例如,可以檢測fuzzer何時更改設置或觸發解析器錯誤,這些錯誤會在 UI 中報告為警告消息。
*輸入塊:*由于與無人機的通信(請求-響應)很慢,因此僅發送fuzzing的輸入(即命令)而不等待響應。與常規的模糊測試迭代相比,UI oracle循環(遍歷 UI 并識別非崩潰錯誤)很慢。因此,選擇將對 UI oracle的查詢數量減少到最低限度。本研究的fuzzer不單獨考慮輸入,而是將所有可能命令的輸入空間拆分為輸入塊,其中每個輸入塊包含 130,000 個命令。
image
*fuzzing循環:*fuzzer通過 USB 串行設備將這些輸入一個一個地發送到模糊測試目標(上圖中的?)。無人機處理每個命令并與 RC 同步 (?), 例如更新狀態數據。如果fuzzer觀察到無人機的固件崩潰(?),不能將此崩潰與最后一個命令相關聯,因為不等待對每個命令的響應; 相反,重新測試最后 5, 000 個命令以識別有問題的命令。
image
為了優化此過程,執行如上算法中概述的二進制搜索算法。給定一組命令 C,連續將命令分成兩個大小相等的組 CA 和 CB。 執行第一組中的所有命令并驗證該組是否包含崩潰命令。如果是這樣,對第一組重復這個過程。如果不是,丟棄該組并繼續第二組。這一直持續到只留下并返回一個命令 - 觸發命令,這樣可以在 log(n) 步中識別導致崩潰的命令。
如果沒有觀察到崩潰并且輸入塊中的所有命令都已發送,則必須檢查意外行為。為此,fuzzer向 UI oracle查詢偏差 (?)。如果 UI oracle發現偏差,也不能直接將此發現與發送的特定命令相關聯。相反,需要使用算法重新測試最后一個輸入塊 - 不檢查崩潰,而是查詢 UI oracle并檢查是否可以觀察到 UI 偏差。總之,根據識別出的故障,要么使用傳統的crash oracle來驗證是否發生了崩潰,要么使用 UI oracle來驗證是否可以觀察到 UI 內的偏差。
2. 實現
fuzzer和 UI oracle在約4, 000 行 Python 代碼中實現。fuzzer具有兩種操作方式:它可以通過串行連接或無線連接到 RC 的串行接口時對無人機進行模糊測試,后者使能夠識別可以遠程觸發的崩潰。在空中進行模糊測試時,fuzzer會使用具有已知返回值的特定命令定期檢查無人機是否還活動。此外,fuzzer檢查是否有除用于 UI oracle的 Android 手機之外的任何 Android 調試橋 (ADB) 設備。
UI oracle使用 Android 內部工具(如 ADB 和 uiautomator)以自動方式與 DJI 應用程序交互,以確定應用程序的狀態和應用程序界面中報告的數據是否符合預期; 偏差表明fuzzer設法識別了一個有趣的命令。預先定義所有要檢查的值可以防止定期更改值(例如電池電量)導致誤報。
3. 實驗設置
使用三種不同的 DJI 無人機和一個遙控器測試了fuzzer:
? Mavic Air 2,固件:01.01.0610
? DJI Mini 2,固件:01.03.0000
? Mavic 2 Pro,固件:01.00.0770
? RC231 (RC) + Mavic Air 2,固件:01.01.0610
運行fuzzer的主機必須與 Android 手機處于同一 WiFi 網絡中,無人機必須連接到該計算機。使用智能手機的 WiFi 熱點進行測試,第一次啟動時fuzzer 需要初始化智能手機、啟動 ADB 服務器并配置 ADB WiFi 連接。要使用帶有應用程序的手機作為 UI oracle,手機需要連接到 RC,并且需要建立 RC 和無人機之間的連接(OcuSync)。使用運行 DJI Fly 應用程序 (v1.6.6) 的 Android 11 root OnePlus 8 Android 手機,Mavic Air 2 和 DJI Mini 2 都使用該應用程序。運行四個獨立的模糊測試實驗包括:
- Mavic Air 2 +,RC231,UI oracle
- DJI Mini 2 + ,RC231,UI oracle
- 沒有 UI oracle的 Mavic 2 Pro
- 逆向的RC231 + Mavic Air 2,RC 和無人機通過 OcuSync 連接
使用 UI oracle測試 Mavic Air 2 和 DJI Mini 2。由于 Mavic 2 Pro 使用不同的舊應用程序,目前無法使用UI oracle,因為它是專門為最新大疆應用程序量身定制的。為了減輕工程負擔,避免將oracle適配到已棄用的舊應用程序。第四次模糊測試活動調查了通過 RC 對無人機進行空中模糊測試是否可行。
控制器也可能因為達到無效狀態或無人機的收發器崩潰而丟失無人機的信號。這種持續在串行接口上接受命令但未連接到控制器的狀態只能在 UI oracle檢查應用程序時檢測到。如果 UI oracle檢測到沒有無人機連接,fuzzer會嘗試重新啟動模糊測試目標。最后,UI oracle本身也有限制和要求:需要定義在模糊測試活動期間應該檢查的所有有趣的值。需要進一步考慮常見的非嚴重錯誤消息,例如 GPS 信號較弱時出現的錯誤消息。
4. 結果
所提出的方法能夠系統地測試不同的 DJI 設備,即無人機和 RC,并通過 USB 接口尋找潛在的漏洞。值得注意的是,本方法適用于所有當前的 DJI 無人機和 RC。 實驗測試了大約 780 萬條命令,這些命令是通過枚舉上述所有命令生成的。平均而言,如果對無人機本身進行模糊測試,每秒可以測試 400 個命令,如果不考慮崩潰或 UI 周期,則原始模糊測試時間約為 5.5 小時。但是每次無人機墜落都會延長這個時間,因為必須先重新啟動無人機。此外,UI oracle中斷(并可能搜索導致觀察到的錯誤的命令)需要額外的時間。
在實踐中,發現整個模糊測試運行大約需要 9 個小時才能完成。下圖中概述了fuzzer在對 Mavic Air 2 無人機進行模糊測試期間在各個步驟上花費的時間。 UI oracle大約占總運行時間的 25%。有趣的是,只有大約一半的時間花在了實際的 UI 周期(即檢查值或導航到 UI 字段)、重置應用程序以及檢查手機是否正確連接 (TouchEngine)。另一半用于重新啟動無人機并等待初始化發生。一般來說,搜索導致UI偏差的命令比搜索導致崩潰的命令成本更高,因為無人機和應用程序必須多次重啟并且必須搜索UI以查找偏差。
image
第四項模糊測試是對 RC231 而不是無人機進行模糊測試,其收到的執行率要低得多,每秒大約 21 個命令。以這樣的執行速度,模糊測試運行大約需要 104 小時才能完成。因此,將fuzzer的命令減少到在其他模糊測試活動中被證明存在錯誤的源、目標和命令集,將測試命令的數量限制為 1,073,111。雖然此模糊測試運行不完整,但它 作為概念證明,命令的執行也可以通過無線方式作為 RC 中繼命令。當發出導致飛行控制器內分段錯誤的命令時,攻擊者可以使無人機墜落,這意味著它在飛行過程中掉落到地面。
image
總體而言,發現了 15 個軟件故障(在手動重復數據刪除后)導致(軟件)崩潰或其他類型的意外行為。上表中列出了詳細摘要,包括 DJI 在負責任的披露過程中指定的分類和嚴重性。有趣的是,大多數墜機事故都發生在飛行控制器內,這對無人機的飛行操作至關重要。
除了能夠使無人機墜落之外,fuzzer還發現了一種修改可能不可變的序列號(#15)、任意代碼執行(#14)和root 權限啟動 ADB 服務的后門( #1)。前兩個錯誤(#14 和 #15)只能使用的 UI oracle發現,因為它們不會導致即將發生的崩潰。#16 也是這種情況,fuzzer更改了無人機名稱。但是DJI 并不認為此信息是不可更改的,并且此類更改沒有明顯的其他有害行為,因此這是一個良性發現。#1 的特殊之處在于它要求fuzzer在處理輸入塊后檢查活動的 ADB 服務。由于這需要物理訪問,因此它也是唯一無法遠程利用的發現。對于所有其他發現,可以在 RC 上發出相關命令,然后通過無線協議 OcuSync 將這些命令傳輸到無人機。這是可能的,因為 DUML 充當互連 DJI 無人機所有組件的總線協議。因此,能夠在沒有物理連接的情況下向無人機發送命令。
這有幾個含義并開辟了新的攻擊媒介:通過 USB 進行模糊測試期間發現的錯誤,如可以通過將其發送到 RC 來遠程發出使無人機固件崩潰的命令。以前無害的錯誤在直接連接到地面上的無人機時只會使無人機的固件崩潰,現在如果在飛行途中遠程觸發會產生更嚴重的后果,至少會導致拒絕服務 (DoS) 并可能損壞無人機。由于 DJI 將其中一些錯誤歸類為緩沖區溢出,因此它們可能會被利用。唯一的先決條件是攻擊者可以通過他們控制的設備訪問 RC。
值得注意的是,雖然的模糊測試是通過 RC 的通信端口進行的,但 DUML 消息也可以通過操作員智能手機在常規飛行操作期間連接到的 USB 端口發送。在這里,操作員的 Android 智能手機連接到 RC231 頂部的 USB-C 端口,并使用 Android 開放附件 (AOA) 協議充當 USB 附件,而 RC 是 USB 主機。這是允許 DJI App 顯示飛行狀態信息的正常行為。與此同時,這使得入侵用戶智能手機的攻擊者能夠控制或破壞無人機。由于 DJI 僅通過 DJI 官方網站而非 Google Play Store 分發其應用程序,因此用戶需要覆蓋 Google 的安全設置并允許從 Google Play Store 以外的其他來源安裝應用程序,從而增加其設備的攻擊面。
5. 案例研究
重點介紹三個案例,以說明fuzzer觸發的無人機內部值崩潰或變化如何導致與安全相關的問題。
**1) 任意命令執行(#14):**此問題乍一看似乎無害,但經過進一步分析,結果證明是一個成熟的操作系統命令注入漏洞(CWE-78),它授予攻擊者無人機的提升權限。這是通過使用報告應用程序用戶界面偏差的 UI oracle發現的:用于在無人機和智能手機之間傳輸視頻和照片的 WiFi 的 SSID 名稱被替換為隨機字節。這意味著fuzzer找到了一個命令,允許它用用戶控制的輸入替換 SSID 名稱。使用前面提到的方法,fuzzer以自動方式識別負責此操作的特定 DUML 命令。隨后的手動根本原因分析表明,無人機以多種功能處理該字符串。
由于此字符串在 shell 命令中的位置未正確清理,因此攻擊者可以注入任意 shell 命令。需要注意的是,易受攻擊的函數包含長度檢查,因此注入命令的長度是有限的。為了克服這個限制,攻擊者可以簡單地創建一個包含他們想要的命令的漏洞利用腳本,并將這個腳本分塊傳輸到無人機。傳輸后,攻擊者將腳本標記為可執行,從而授予他們不受長度限制的任意命令執行漏洞。 DJI 已將此漏洞確認為任意代碼執行漏洞。
2) 任意序列號 (#15):DJI 設備的不同硬件模塊(例如相機、電池或飛行控制器)具有不同的序列號。飛行控制器的序列號用于驗證和識別飛行器。 DJI 的安全白皮書指出,這個序列號必須是唯一的、不可變的,并且應該存儲在一個安全的存儲器中。在對 DJI Mini 2 無人機進行模糊測試時,UI oracle發現fuzzer設法更改了飛行控制器的序列號(如下圖)。攻擊者可以濫用它來欺騙他們的身份,因為這個序列號也是在 DroneID 中傳輸的序列號。
image
**3) 解鎖 ADB Root shell (#1):**在對 DJI Mini 2 進行模糊測試時,fuzzer的定期 ADB 檢查被觸發,算法的錯誤搜索報告了一個在無人機上啟動 ADB root shell 的命令。進一步調查顯示實際上需要兩個命令:所謂的“DJI Assistant Unlock command”,然后是fuzzer找到的命令。fuzzer總是發送前一個命令來解鎖完整的 DUML 通信。通過手動分析該錯誤,發現它是用于激活 dji_sys 二進制文件中的 DJI 調試功能的類似質詢和響應的系統中的邏輯缺陷。
*模糊測試的障礙和限制:*嵌入式設備的模糊測試涉及各種障礙和限制。如果在模糊測試期間無法為設備供電,則其中一個限制是電池耗盡。這導致更換電池和充電電池的多次中斷,并限制了模糊測試過程的自動化。由于設備可能會達到由fuzzing輸入觸發的無效狀態,因此無人機或遙控器固件可能會變磚并且不再響應fuzzer。在這種狀態下,fuzzer假設崩潰并等待設備返回在線,這可能永遠不會發生。如果出現這樣的軟件塊并且設備無法通過,例如重置,取出電池,必須刷新固件以“un-brick”無人機。
0x05 討論
1. 無人機安全的現狀
供應商部署的強化機制使無人機的分析更加困難,但并非不可能。通過靜態分析,能夠通過特制的配置文件發現導致在 S1 SoC 上執行任意代碼的錯誤。無人機和 RC 都可以觀察到這些錯誤。DUML fuzzer發現了其他漏洞,這些漏洞會危及各種無人機的設備安全性。安全評估表明可以將任意固件閃存到收發器,這意味著使用簽名和加密固件的安全更新沒有正確實施。建議供應商考慮的發現并執行額外的測試,例如以模糊測試的形式減少代碼中(可利用的)錯誤的數量。
2. 歐盟和美國的無人機規定
監管機構認為識別和定位是消費級無人機的一項安全功能,其重要性超過遠程操作員的潛在隱私風險。在分析過程中,兩個兼容標準處于草案狀態:EN 4709(歐盟)和 F3411-19(美國)。這兩項標準都將要求無人機廣播無人機和操作員的位置、無人機的軌跡及其識別號碼。這些標準預見到使用藍牙廣告或 WiFi 鄰域感知網絡功能,并且根據要求,它們將在沒有任何類型的加密的情況下運行。這些標準將于 2023 年中期在歐洲和美國于 2023 年 9 月 16 日強制實施。與 DJI 的專有解決方案相反,每個兼容的智能手機都能夠通過 WiFi 或藍牙接收這些廣播,盡管距離要短得多。開放的實現已經可以作為庫或Android應用程序可用。
雖然知道這些即將到來的標準,但研究人員發現很難確定當前的無人機 - 其中開放標準還不適用 - 實際上作為其專有協議的一部分進行傳輸。詳細分析證實了DJI 的 DroneID 協議傳輸未加密的信息,例如無人機和遠程操作員的位置,而 DJI 的官方聲明聲稱這些信息是加密的,此后大疆更正了這一說法。無論如何,堅信此類功能應該透明地傳達給用戶并成為安全白皮書的一部分,尤其是考慮到與操作員位置廣播相關的固有隱私風險。
3. 數據完整性
通過 AeroScope,DJI 銷售無人機和遠程操作員的跟蹤設備; 因此,預計 GPS 位置數據的完整性將通過一些對策得到加強。然而分析表明,GPS 數據可以被輕而易舉地禁用或欺騙,從而使這些系統向當局報告的位置數據變得可疑且不可操作。大疆應在所有設備上實施適當的完整性保護。
4. 對其他供應商的適用性
雖然本文中關注的是大疆無人機,但市場上還有其他供應商(例如,市場份額為 7% 的 Autel)。鑒于它們的采用率相對較低,且據所知沒有關于安全和安全措施的公共文件存在,因此它們不是很有趣的分析目標。無論如何,本研究的原則性方法可以應用于其他無人機:對它們的硬件、固件和軟件以及它們的無線物理層進行靜態和動態分析。根據所使用的協議,可能得調整的模糊測試方法并使用與的方法類似的 UI oracle。 由于 DroneID 是 DJI 獨有的,預計在這個方向上與其他無人機供應商相比不會有有趣的結果,但其他專有協議可能是值得的目標。
0x06 結論
本文分析了大疆無人機的安全性和隱私性,概述了無人機的攻擊面并考慮了兩種攻擊模型:沒有物理訪問權限的被動攻擊 - 能夠竊聽無人機的空中流量,以及一種主動攻擊 - 可以物理訪問無人機硬件。通過對 DJI 跟蹤協議中專有的 DroneID 數據包進行逆向工程,研究員發現了該協議廣播了無人機的位置、返航點和操作員的位置,還發現了如何禁用 DroneID 或欺騙傳輸的位置。對于主動攻擊,設計了一個專門為大疆無人機量身定制的帶有UI oracle的fuzzer,它發現了三種不同 DJI 設備中的多個關鍵安全漏洞。通過對錯誤的仔細檢查表明,它們可用于執行任意代碼或更改設備的序列號。此外,攻擊者可以通過無線方式遠程發送有效載荷來使無人機在飛行途中墜落。