純幹貨!阿裏安全謝君:如何黑掉無人機
無人機曾一度用來基礎的地麵偵查或是快餐店送披薩,應用場景越來越豐富。所以,無人機也被眾多黑客盯上,他們熱衷於找尋相關漏洞劫持無人機。而最近,在看雪安全開發者峰會上,阿裏安全 IoT 安全研究團隊 Leader 謝君發表了“如何黑掉無人機”這一議題演講,內容卻另辟蹊徑講到如何不利用漏洞 root 無人機。以下為謝君演講實錄,
謝君:我分享的議題是如何黑掉某品牌無人機。我在研究過程中從物理接觸和非物理接觸兩個方麵對整個無人機進行係統化的學習,今天我將分享研究過程中的一些收獲以及學到的東西。
無人機是一個複雜的係統工程,涉及結構工程、自動化控製,空氣動力學,計算機視覺處理以及各種傳感器、無線通訊,以及與人工智能相關的深度學習。
我將整個係統全部拆開,發現其中應用了哪些硬件、傳感器、芯片。其中涉及到不同傳感器及控製係統,很多嵌入式芯片沒有 OS 的概念,所有代碼直接上位機執行,通過實時中斷以及計時器和 IO 的控製來完成整個係統的實時操作。
DJI構架-模塊間通信
我在此基於某品牌的無人機進行分析,包括無線通訊、飛行控製、微機電傳感器、機器視覺處理。實際上這些微控製芯片來自不同廠商,要實現傳感器芯片間的通訊,必須滿足相應的通信規範,才能協同自如。所以產商設計了一套無人機各模塊間的通信協議,協議滿足全係列消費級無人機的產品,定義不超過 32 個硬件功能模塊,硬件功能模塊下麵則可以定義子功能模塊。
比如飛控係統用 03 表示,06 表示飛控係統下的子控製功能,如支持的飛機起降功能等。再比如攝像頭采集係統是用 01編號,雲台控製係統是用 04 編號。在傳輸過程中,這些編號將會通過算法來編碼。
這些不同傳感器間通訊鏈路有多種,通訊協議可劃分為本地的、通過串口的、區域網絡等,其中運用多的通訊協議分別是 logic 和 V1。logic 像進程間通訊的方式,V1 是不同硬件間遠程通訊的協議方式。模塊間通信也采用了相應的隔離,類似現在的汽車係統,汽車有不同 ECU 模塊,各個模塊通訊有一定的通訊協議和格式,以及網關隔離某些子係統不允許公共訪問。而無人機裏的 GPS 模塊,隻允許飛控係統訪問,其他應用係統則不被允許。
整個無人機的通訊結構,類似下圖,不同傳感器間通訊存在一定路徑,且有一定限製。這是無人機通訊格式,可以看出存在一定規範比如一定以 55 開頭,每一個包的長度不能超過固定字節,以及控製命令設置有一些校驗位,且對每一個子係統的編碼需要通過一定算法來計算。
無人機的核心中心橋的控製板,主要是基於 LC1860 SoC 所做的控製板,其主要功能是負責整個係統協調以及固件更新和攝像內容采集、攝像內容數據壓縮、編碼和圖象深度學習,IOR 檢測等。
這個 LC1860 芯片運行嵌入式 Linux 係統,下麵是三星的 EMCP,其是集 LPDDR 和 eMMc 於一體的存儲芯片,也是操作係統存放地方。
下麵這一塊芯片 intel Movidus MA2155,是英特爾圖像深度學習芯片,因為無人機不能聯網,在需要做實時機器視覺分析時,需要用到大量的矢量運行。而此芯片在無人機上麵的應用有視覺測距,障礙物識別以及 ROI。當該無人機進行跟隨飛行時,可通過 CNN 建立好的深度學習模型,進行精確判斷。
LATTICE 的 FPGA 芯片,主要用於雙目避障功能,通過可見光反射回來檢測障礙物的存在。
root 無人機
在研究 IOT 設備時談到最多的詞就是能否 root 這台設備,root 設備意味著可以獲得係統很高的控製權。為什麼要 root 無人機?目的是擴大攻擊麵,更好的研究無人機。
而在研究的過程中,我們發現 root 無人機最好的辦法是利用合適的漏洞,執行打開 Adb 接口功能,就能得到係統的 root shell 了。如果沒有漏洞該怎麼辦?有意思的是我們發現不用漏洞也可以 root 無人機。
其實此方法可以運用到諸多領域,比如某些路由器。研究過程中我們發現啟動腳本裏有一個變量控製 ADB 功能能否打開,默認出廠 ADB 不能打開。ADB 功能接口在安卓手機應用廣泛,怎樣打開此 ADB 功能,一種是利用漏洞執行 ADB_en.sh 的腳本,另一種方法是直接修改該啟動腳本的變量。
同樣,我們不通過漏洞的方式 root 無人機,因為安卓係統存在三星 EMCP 裏麵,是集內存和存儲於一體的 EMCP 芯片,如果我們可以修改這個芯片裏麵的內容就可以直接root無人機了。
具體操作步驟是:首先找到這塊存儲芯片的位置,用電熱風槍把它吹下來,然後用 eMMC的讀書卡讀取內容,此時即找到 eMMC 讀卡器,把 eMMC 插到電腦可以看到一個彈出顯示存儲器裏麵的空間和內容,找到設置調試變量的地方,修改後再寫到 eMCP 裏麵焊回來。
有一個小細節是,因為存儲器裏的內容有分區,需要將這些係統分區用 Ext4 的方式掛載,修改後保存,再剪輯切回 EMCP 的芯片裏,後續我們需要把它焊回去。再運行直接 ADB 打開,就可以得到 root 權限,成功後可以看到它的係統信息和進程。
這一過程涉及到許多複雜問題,比如要手工脫焊和焊接的過程,此芯片是 BGA 封裝,引腳多,引腳間距小,且芯片底座裏麵人為灌入黑膠,對操作過程帶來很大不便,操作不當易使芯片廢掉,手工操作難度極高。
飛控係統
飛控係統,是無人機裏麵的核心。因為會搜集到無人機各個傳感器模塊的一係列數據,通過一些綜合算法來判斷飛控係統應該如何操作。
飛控係統核心芯片是 ATSAME70Q21,其不需要外置存儲器存儲它的部件以及算法,與之相關有兩塊 IMU 陀螺儀以及加速度計,檢測飛機處於什麼狀態。
氣壓計,主要為了檢測飛機的高度,作為一個飛機高度的判斷因素。
Ublox GPS模塊,是一個可編程的模塊,因為飛控和 GPS 通訊有一個協議交互,並不是說任何一個 GPS模塊都可以替換它,但可以做一些欺騙 GPS 的事情。
指南針模塊,主要用於方向的定位。
智能電源,智能電源是用德州儀器 MSP430G2755 16 位的微控製芯片,它主要是收集電源現在狀態,保持了何時放電,何時通過飛控係統在電量低於某值時返航。
電調芯片,因為無人機有四個螺旋槳,四個馬達,每一個馬達需要一個電調的芯片控製轉速,控製不同的馬達的轉速,來達到控製飛行姿態以及速度的操作。
視覺係統
視覺係統,這是無人機裏麵非常重要的功能,裏麵核心處理芯片是英特爾的 MA2155 深度學習處理芯片。
飛機搭載攝像頭首先可以進行視頻錄製、拍照,圖像內容輸出給視覺處理芯片來完成視覺識別等功能,其中一個功能是飛行跟隨,即在手機屏幕上選點跟隨飛行的目標,無人機可以跟隨他/它飛行,此時時候就利用芯片強大的深度學習能力,對感興趣的區域進行識別。
還有一個功能是測距,通過 MA2155 這塊深度學習芯片來完成視覺測距的功能,飛機前後障礙物的距離通過圖象識別的方式識別出來。
另一個功能是雙目避障,這是觀測傾斜度 70 度是否有障礙物,通過發射端發射出去的光反射回來在接收端接受。
超聲波可檢測下方障礙物以及檢測地麵。
無線通信係統架構
無線通訊,是無人機裏麵最核心的一塊功能,也是最複雜的一塊功能,涉及到控製係統和圖象傳輸。基本原理就是前端的收發器收到信號,通過基帶係統進行解碼,解碼後通過搖控器的 LPC1549 芯片處理進而通過 Cypress 的 USB 芯片反饋到手機上。
無線通訊是通過 OFDM 方式進行圖傳以及數控的傳輸,其特點是控製通道數據通過遙控器通過 1Mhz 帶寬的跳頻發送,飛機回傳的圖象和控製通道回傳數據通過 10Mhz 帶寬進行定頻傳輸。
為了保證數控通道及時性,采取定時跳頻的方式。因為有可能信號會被幹擾,在某一個特定頻點時會被幹擾,如果被幹擾的話,飛機可能收不到遙控器的一些數據,此時我們需要切換不同的頻點,找信噪比高的地方,保證它的可靠性。
它在 FCCID 通信管理局申請的 5G 頻段的頻寬執照在 5727-5821Mhz,但實際上,其操作已超過通訊管理局規定的頻段。在我們研究過程中發現濫用這個頻段的資源已達 5845Mhz。
遙控器與飛機如何進行識別,需要配對及連接過程。配對的唯一信息來自遙控器,所有信息都是遙控發給無人機,配對成功後可以在操作過程中識別到哪個是我控製的無人機,且這些控製配對信息皆通過搖控器芯片 LPC1549 的序列號生成。
基本上無線通訊架構的過程,首先是搖控器先初始化芯片,然後初始化基站係統各個寄存器,寄存器裏存入了唯一可以配對碼的信息。這個配對碼有五個字節,寫入到寄存器裏麵,真正用到隻有三個字節,所以就有可能無線期劫持無人機。
無線通訊傳輸的過程其實是非對稱傳輸,無人機遙控器發的信息跳頻傳輸給飛機,接收端也是跳頻接收,但是圖傳和下行通道是由飛機以定頻的方式發送,且這些跳頻算法都是通過代碼來實現的。
下圖即遙控器用於檢測飛機是否配對的算法檢測基帶芯片 SPI 地址 0xE4、0xE5、0xE6進行比較。所以劫持一台無人機,我們可以通過暴力破解的方式,用所有的密鑰空間進行離線的破解,找到配對碼,去控製無人機,在控中時候就可以動態改掉配對碼,讓這個無人機屬於你。
無人機反調對抗技術
我們也發現了一些硬件的反調技術和軟件的反調技術,比如說用 atmel 芯片的安全位置1,可以阻止外置硬件仿真器的掛載調試,遙控器的 LPC1549 通過 ADC 的粒度檢測來檢測調試器,LightBridge 用的 stm32F103 芯片通過 remap SWD IO 來使用 swd 調試接口失效,通過遙控器的硬件開關電路來阻止 LPC1549 芯片硬件仿真調試。
文章來自微信公眾號“宅客頻道”,作者是又田。
最後更新:2017-11-24 00:34:31