無人機曾一度用來基礎的地面偵查或是快餐店送披薩……然而從去年開始,無人機被用來搭載炸彈運送到戰場,甚至是被用來攻擊智能手機。正是因為普及面的提高,無人機也被眾多黑客盯上,他們熱衷于找尋相關漏洞劫持無人機。而最近,在看雪安全開發者峰會上,阿里安全 IoT 安全研究團隊 Leader 謝君發表了“如何黑掉無人機”這一議題演講,內容卻另辟蹊徑講到如何不利用漏洞 root 無人機。以下為謝君演講實錄:
訪問:
謝君:我分享的議題是如何黑掉某品牌無人機。我在研究過程中從物理接觸和非物理接觸兩個方面對整個無人機進行系統化的學習,今天我將分享研究過程中的一些收獲以及學到的東西。
無人機是一個復雜的系統工程,涉及結構工程、自動化控制,空氣動力學,計算機視覺處理以及各種傳感器、無線通訊,以及與人工智能相關的深度學習。
我將整個系統全部拆開,發現其中應用了哪些硬件、傳感器、芯片。其中涉及到不同傳感器及控制系統,很多嵌入式芯片沒有 OS 的概念,所有代碼直接上位機執行,通過實時中斷以及計時器和 IO 的控制來完成整個系統的實時操作。
模塊間通信
我在此基于某品牌的無人機進行分析,包括無線通訊、飛行控制、微機電傳感器、機器視覺處理。實際上這些微控制芯片來自不同廠商,要實現傳感器芯片間的通訊,必須滿足相應的通信規范,才能協同自如。所以產商設計了一套無人機各模塊間的通信協議,協議滿足全系列消費級無人機的產品,定義不超過 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無人機了。