輕鬆劫持無人機,安全問題令人堪憂

輕鬆劫持無人機,安全問題令人堪憂
無人機!
無人機!
無人機!
無人機來了
我們又多了一架無人機,好開心!但是作爲一個技術黨作爲好奇心暴強的人,不搞(zuo)一波豈不是很對不起自己?
 

準備工作:

1. hackrf 一臺
2. 一臺已經裝好Kali Linux的電腦
3. 遙控無人機和配套的遙控器

輕鬆劫持無人機,安全問題令人堪憂
輕鬆劫持無人機,安全問題令人堪憂
 
hackrf環境配置見之前×××的文章,這裏不再贅述。

 

拆解:

  在對設備進行反覆的操作之後,發現所獲得資料實在太少,甚至連無人機工作的具體頻段都無法獲知,僅僅只是知道工作在2.4G頻段附近。
  爲獲得更多更詳細資料,我們對遙控器和無人機進行了拆解。
 
輕鬆劫持無人機,安全問題令人堪憂
對遙控器的拆解
 
  可以發現遙控器的控制板上僅僅只有一顆芯片,所以這顆芯片應該就是整個遙控器的控制核心。這顆芯片的型號是XNS104芯片。查詢得知,這是一顆AD型2.4G 高速無線收發單片機芯片,可以進行編程和無線收發通信。
 輕鬆劫持無人機,安全問題令人堪憂

 

對無人機的拆解

  1爲XN297L芯片。但是芯片2被廠家抹去了芯片型號。(嘖嘖嘖,一定是個重要的芯片)
  現在獲得的芯片有無人機上的XN297L芯片和遙控器的XNS104芯片。
  XN297L芯片只有無線收發的功能,無法作爲無人機的MCU(主控芯片)。所以可推斷獲知無人機上面被抹去信號的芯片應該是一顆MCU芯片。
  無人機和遙控器之間的通信通過XN297L芯片和XNS104芯片進行。XNS104芯片集成了XN297芯片的功能,所以兩者的通信機制應該是基於XN297芯片的。
  接下來,我們需要分析XN297L芯片的具體通信狀況。通過技術手冊,我們發現這樣的內容,如下所示。
 
輕鬆劫持無人機,安全問題令人堪憂
 
  如此看來,重放***似乎是不大可行的,但是柳暗花明又一村,翻到最底部的時候突然看到了XN297L的數據報格式,具體如下圖所示:
 
輕鬆劫持無人機,安全問題令人堪憂
 
  從數據報文裏面可以發現PID碼僅僅只有兩個比特位,因此這裏使用的PID並不是爲了防止重放***的,而是用來去除重複數據報文的。僅僅兩個比特位的PID碼可以在短時間內遍歷,所以重放***應該是可行的,確認了這一點之後,就可以展開下面的劫持操作了。

 

劫持:

  劫持這個類型的無人機,我們需要去獲取遙控器發射的信號。首先來看看無人機的工作機制。

 

工作機制:

  首次對碼,確認無人機處於可以使用的狀態
  二次對碼,成功建立遙控器和無人機的通信線路
  最後,遙控器成功操控無人機
  前兩者在開啓遙控器和無人機的時候會自動完成,但是對於劫持而言,我們需要去模擬這兩個步驟,從而獲取到無人機的控制權。

 

獲取無人機和遙控器的一次對碼信息:

  使用kali Linux下的gqrx來確定配對信息的所在頻率,單獨打開無人機,信道表現如下圖所示,信道中沒有任何信息
 
輕鬆劫持無人機,安全問題令人堪憂
 
  開啓遙控器之後,信道中開始出現大量內容,如下圖
 
輕鬆劫持無人機,安全問題令人堪憂
 
  由上可知,首次對碼信息僅僅由遙控器發出,無人機僅僅來接收這個信息。所以,我們可以錄製相應的頻段信息來獲得模擬遙控器和無人機之間的對碼過程。
錄製信息的hackrf操作

hackrf_transfer –r fly.raw –f 2479000000 –g 16 –l 8 –s 8000000 –b 4000000 ```
在Kali Linux上面執行上述操作後,如下圖所示:
 
![](https://s1.51cto.com/images/blog/201803/05/286f27769dccd9e661a67b381640b438.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 
#### 獲取無人機的二次對碼信息:
  獲得了無人機的一次對碼信息之後,接下來就需要去獲取無人機的二次對碼信息。
  無人機的二次對碼信息比一次對碼信息更加的複雜,這是由於一次對碼完成之後,二次對碼中就引入了ACK機制,來確保無人機收到二次對碼的信息。
  所以在這一步中,雖然同樣可以使用重放***,但是需要對針對ACK機制,多次重放二次對碼的數據報文段。具體的錄製操作和和一次對碼的類似。
  獲得了上述報文之後,就可以去獲取飛機的操作信息了,操作信息的處理方法和二次對碼的相同。不同的是,需要確保操作信息錄製的時間長度,來防止PID機制將重放出去的信號當作重複的報文進行丟棄。

 
#### happy的重放過程:
  在之前那篇門鈴重放中,我們使用了GNU radio工具來重放信號,不得不說可視化的軟件減少了很多的操作步驟。
  但是這一次,我們直接使用hackrf來進行錄製信號的重放,我們將這個操作寫成了shell腳本,接下來只需要執行shell腳本就可以了。具體的shell腳本如下所示:

#!/bin/bash
hackrf_transfer -t flystart.raw -f 2479000000 -a 1 -s 8000000 -b 4000000 -x 47
hackrf_transfer -t flying.raw -f 2479000000 -a 1 -s 8000000 -b 400000 -x 47 ```
  這樣,我們就完成了無人機的劫持
Duang~
  大家可以看到,期初飛機在正常飛
  用hackrf播放事先錄製好的下降信息,飛機就下降了
  腳本很簡單哦,是不是已經迫不及待想動手嘗試一下啦!

 

特別注意:

  由於ACK和PID機制的存在,錄製信號的時候,請確保無人機和遙控器同時處於開啓狀態,否則,錄製的信號很可能是無效的!
  實驗時,由於工作在2.4GHz頻段的設備有很多,比如說WIFI藍牙等,所以請找一個無線電環境比較好的地方,進行本次實驗!

 

安全提示:

  在對這架無人機研究過程中,可以發現這架無人機具有以下弱點:首先PID碼的位數不夠長,使得重放***能夠通過一些修改和變通來實現;第二點,在ACK機制上面,沒有充分利用ACK的安全機制,代碼上也沒有實施芯片擁有的雙向認證功能。
  也希望有關廠商能夠對這兩個問題進行修復,使這架無人機變得更加安全.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章