無人機(jī)曾一度用來基礎(chǔ)的地面?zhèn)刹榛蚴强觳偷晁团_……然而從去年開始,無人機(jī)被用來搭載炸彈運(yùn)送到戰(zhàn)場(chǎng),甚至是被用來攻擊智能手機(jī)。正是因?yàn)槠占懊娴奶岣?,無人機(jī)也被眾多黑客盯上,他們熱衷于找尋相關(guān)漏洞劫持無人機(jī)。而最近,在看雪安全開發(fā)者峰會(huì)上,阿里安全 IoT 安全研究團(tuán)隊(duì) Leader 謝君發(fā)表了“如何黑掉無人機(jī)”這一議題演講,內(nèi)容卻另辟蹊徑講到如何不利用漏洞 root 無人機(jī)。以下為謝君演講實(shí)錄:
訪問:
謝君:我分享的議題是如何黑掉某品牌無人機(jī)。我在研究過程中從物理接觸和非物理接觸兩個(gè)方面對(duì)整個(gè)無人機(jī)進(jìn)行系統(tǒng)化的學(xué)習(xí),今天我將分享研究過程中的一些收獲以及學(xué)到的東西。
無人機(jī)是一個(gè)復(fù)雜的系統(tǒng)工程,涉及結(jié)構(gòu)工程、自動(dòng)化控制,空氣動(dòng)力學(xué),計(jì)算機(jī)視覺處理以及各種傳感器、無線通訊,以及與人工智能相關(guān)的深度學(xué)習(xí)。
我將整個(gè)系統(tǒng)全部拆開,發(fā)現(xiàn)其中應(yīng)用了哪些硬件、傳感器、芯片。其中涉及到不同傳感器及控制系統(tǒng),很多嵌入式芯片沒有 OS 的概念,所有代碼直接上位機(jī)執(zhí)行,通過實(shí)時(shí)中斷以及計(jì)時(shí)器和 IO 的控制來完成整個(gè)系統(tǒng)的實(shí)時(shí)操作。
模塊間通信
我在此基于某品牌的無人機(jī)進(jìn)行分析,包括無線通訊、飛行控制、微機(jī)電傳感器、機(jī)器視覺處理。實(shí)際上這些微控制芯片來自不同廠商,要實(shí)現(xiàn)傳感器芯片間的通訊,必須滿足相應(yīng)的通信規(guī)范,才能協(xié)同自如。所以產(chǎn)商設(shè)計(jì)了一套無人機(jī)各模塊間的通信協(xié)議,協(xié)議滿足全系列消費(fèi)級(jí)無人機(jī)的產(chǎn)品,定義不超過 32 個(gè)硬件功能模塊,硬件功能模塊下面則可以定義子功能模塊。
比如飛控系統(tǒng)用 03 表示,06 表示飛控系統(tǒng)下的子控制功能,如支持的飛機(jī)起降功能等。再比如攝像頭采集系統(tǒng)是用 01編號(hào),云臺(tái)控制系統(tǒng)是用 04 編號(hào)。在傳輸過程中,這些編號(hào)將會(huì)通過算法來編碼。
這些不同傳感器間通訊鏈路有多種,通訊協(xié)議可劃分為本地的、通過串口的、區(qū)域網(wǎng)絡(luò)等,其中運(yùn)用多的通訊協(xié)議分別是 logic 和 V1。logic 像進(jìn)程間通訊的方式,V1 是不同硬件間遠(yuǎn)程通訊的協(xié)議方式。模塊間通信也采用了相應(yīng)的隔離,類似現(xiàn)在的汽車系統(tǒng),汽車有不同 ECU 模塊,各個(gè)模塊通訊有一定的通訊協(xié)議和格式,以及網(wǎng)關(guān)隔離某些子系統(tǒng)不允許公共訪問。而無人機(jī)里的 GPS 模塊,只允許飛控系統(tǒng)訪問,其他應(yīng)用系統(tǒng)則不被允許。
整個(gè)無人機(jī)的通訊結(jié)構(gòu),類似下圖,不同傳感器間通訊存在一定路徑,且有一定限制。這是無人機(jī)通訊格式,可以看出存在一定規(guī)范比如一定以 55 開頭,每一個(gè)包的長度不能超過固定字節(jié),以及控制命令設(shè)置有一些校驗(yàn)位,且對(duì)每一個(gè)子系統(tǒng)的編碼需要通過一定算法來計(jì)算。
無人機(jī)的核心中心橋的控制板,主要是基于 LC1860 SoC 所做的控制板,其主要功能是負(fù)責(zé)整個(gè)系統(tǒng)協(xié)調(diào)以及固件更新和攝像內(nèi)容采集、攝像內(nèi)容數(shù)據(jù)壓縮、編碼和圖象深度學(xué)習(xí),IOR 檢測(cè)等。
這個(gè) LC1860 芯片運(yùn)行嵌入式 Linux 系統(tǒng),下面是三星的 EMCP,其是集 LPDDR 和 eMMc 于一體的存儲(chǔ)芯片,也是操作系統(tǒng)存放地方。
下面這一塊芯片 intel Movidus MA2155,是英特爾圖像深度學(xué)習(xí)芯片,因?yàn)闊o人機(jī)不能聯(lián)網(wǎng),在需要做實(shí)時(shí)機(jī)器視覺分析時(shí),需要用到大量的矢量運(yùn)行。而此芯片在無人機(jī)上面的應(yīng)用有視覺測(cè)距,障礙物識(shí)別以及 ROI。當(dāng)該無人機(jī)進(jìn)行跟隨飛行時(shí),可通過 CNN 建立好的深度學(xué)習(xí)模型,進(jìn)行精確判斷。
LATTICE 的 FPGA 芯片,主要用于雙目避障功能,通過可見光反射回來檢測(cè)障礙物的存在。
root 無人機(jī)
在研究 IOT 設(shè)備時(shí)談到最多的詞就是能否 root 這臺(tái)設(shè)備,root 設(shè)備意味著可以獲得系統(tǒng)很高的控制權(quán)。為什么要 root 無人機(jī)?目的是擴(kuò)大攻擊面,更好的研究無人機(jī)。
而在研究的過程中,我們發(fā)現(xiàn) root 無人機(jī)最好的辦法是利用合適的漏洞,執(zhí)行打開 Adb 接口功能,就能得到系統(tǒng)的 root shell 了。如果沒有漏洞該怎么辦?有意思的是我們發(fā)現(xiàn)不用漏洞也可以 root 無人機(jī)。
其實(shí)此方法可以運(yùn)用到諸多領(lǐng)域,比如某些路由器。研究過程中我們發(fā)現(xiàn)啟動(dòng)腳本里有一個(gè)變量控制 ADB 功能能否打開,默認(rèn)出廠 ADB 不能打開。ADB 功能接口在安卓手機(jī)應(yīng)用廣泛,怎樣打開此 ADB 功能,一種是利用漏洞執(zhí)行 ADB_en.sh 的腳本,另一種方法是直接修改該啟動(dòng)腳本的變量。
同樣,我們不通過漏洞的方式 root 無人機(jī),因?yàn)榘沧肯到y(tǒng)存在三星 EMCP 里面,是集內(nèi)存和存儲(chǔ)于一體的 EMCP 芯片,如果我們可以修改這個(gè)芯片里面的內(nèi)容就可以直接root無人機(jī)了。