随着更先进的无人机系统投入使用并集成到各个领域,考虑它们可能造成的漏洞以确保其应用程序的安全性变得越来越重要。
自从我对航空航天网络安全产生兴趣以来,我一直想找到一种破解方法的一件事就是无人机。在本文中,我概述了我使用 Wireshark 使用数据包监控技术对 DJI 无人机进行逆向工程所采取的步骤,并深入研究了数据包解析的细节以及如何使用 Lua 编程语言开发自己的协议解析器。
尽管对无人机进行逆向工程并非易事,但它们仍然容易受到各种网络威胁的攻击,这可能会导致严重的后果。通过概述我对 DJI 无人机进行逆向工程以暴露存储在数据包数据中的敏感信息的过程,我希望该研究能够突出现有的漏洞,以便找到更好的替代方案来保护现有的无人机系统。
无人驾驶飞行器(简称UAV)是一种不搭载任何飞行员或乘客的飞行器。大多数时候,该术语适用于无人机,但也存在其他类型的无人机,例如NASA 的全球鹰,这是一种用于研究目的的高空、长航时无人机。无人机用于搜索和救援任务、数据收集、军事和执法、航空摄影等广泛的应用。与传统飞机相比,无人机具有紧凑的外形,在其飞行过程中表现出更高的敏捷性、准确性和精确性。机动,并证明具有成本效益,使它们广泛受到各种商业和消费者应用的青睐,如送货服务和航空测量。
由于本文将深入研究无人机取证,因此快速概述构成 DJI Phantom 4 的组件非常重要。值得注意的是,无人机所容纳的组件可能因品牌或版本而异,但大多数无人机共享绝大多数组件。
底盘:无人机的底盘是将所有组件固定在一起的物理框架。底盘通常由塑料或碳纤维等轻质材料制成,以通过减少阻力和重量来降低无人机的整体飞行性能
无人机电机:无人机使用电机来产生飞行所需的升力。大多数无人机通常采用四轴飞行器配置,由四个电机组成:两个顺时针旋转电机和两个逆时针旋转电机,以平衡旋转力。之所以存在这种配置,是因为牛顿第三定律指出,对于每个动作都有一个相等和相反的反应,因此具有相同数量的逆时针和顺时针电机通过均衡的转动力为无人机提供飞行协调
无人机飞行控制器:无人机的飞行控制器就像它的大脑一样。飞行控制器从无人机上的传感器(例如 GPS 模块)接收输入,以便向电子速度控制器 (ESC) 发出特定指令以控制电机
GPS 模块:全球定位卫星 (GPS) 模块使用两个不同的全球定位系统来精确定位无人机的位置。使用 GPS 模块,无人机可以根据传输信号从不同卫星到达所需的持续时间来计算其地理位置
电子调速器 (ESC): ESC 是无人机配电板和电机之间的中间人。他们使用来自飞行控制器的信号来控制分配给电机的功率量
电源端口模块:电源端口是一个模块,用于显示测量来自电池的电量并将该电量分配给无人机的电调和飞行控制器
避障传感器:一些无人机的框架上装有立体视觉传感器。这些传感器通过每个传感器捕获的图像像素计算深度来计算无人机与传感器前方障碍物之间的距离
三轴万向节:万向节稳定连接到无人机的相机以稳定镜头。当传感器注意到围绕任何轴的运动时,它们会向万向节发出信号以进行适当的调整以平滑相机镜头
无人机电池:电池为无人机提供动力。一些电池还包括过充电保护、电源输出通信等功能
无人机摄像头:无人机的摄像头用于拍摄镜头和拍照。相机中的图像传感器捕捉入射光线并将其处理成数字图像
无人机天线:无人机天线充当传输系统,用于在控制器和无人机之间中继信息
向下超声波避障传感器:这些传感器用于计算无人机离地面的高度。可以通过从一个传感器发送高频声音脉冲并测量另一个传感器接收它所花费的时间来计算高度
飞行指示灯:飞行指示灯通常用于指示无人机飞行的方向。两个闪烁的红灯表示无人机的正面,闪烁的绿灯表示无人机的背面
操纵杆:操纵杆用于通过将操纵杆的物理运动转化为控制器可以作为运动方向与无人机通信的信息来控制无人机
主遥控器板:遥控器板检索有关无人机的有用遥测数据,例如其高度、位置和相机图像
主摄像头板:摄像头板处理来自成像传感器和云台电机的数据,以合成稳定的画面
尽管无人机的应用范围很广,但与所有其他带有机载计算机系统的设备一样,它们也容易受到一系列网络安全威胁。无人机最常见的一些网络安全威胁包括:
未经授权的访问:无人机很容易受到不良行为者未经授权的攻击,这些行为者可以拦截或欺骗用于控制无人机的无线信号。这允许黑客控制无人机或被动地从他们那里窃取信息。
数据盗窃:无人机配备了各种各样的传感器,可以主动收集有关其环境的信息,例如照片、视频和遥测读数。这些数据很容易被黑客拦截,黑客可以将其用于恶意目的
拒绝服务:黑客可以用来入侵无人机的更具体的攻击是拒绝服务。当黑客在无人机的同一无线通信系统上启动 DOS,破坏其接收或传输数据的能力时,就会发生这种情况
随着无人机的日益普及,越来越多的安全漏洞被发现,安全研究人员有必要出于恶意目的对设备进行取证分析。网络安全中的一个子领域称为取证分析,侧重于收集和分析来自攻击的数据以用于调查目的。
当计算机系统的数字信息被查封并需要调查时,这个过程在现实生活中的犯罪场景中派上用场。通常,机器上的大部分信息与犯罪无关,必须进行过滤以分解犯罪场景。
无人机的非法应用范围很广,例如将违禁品投放到未经授权的区域、将毒品投放到国外边境以及未经请求的监视。在许多此类情况发生后,数字取证被用于确定信息,例如设备所有权和与犯罪相关的任何数据。
对各种犯罪现场的常见无人机模型进行的一项研究表明,照片或视频格式的媒体文件、飞行模式、位置和所有者信息等信息最有助于执法调查人员进行数字取证案件的成功。尽管该研究的调查人员能够使用数字取证技术过滤出有关犯罪的信息,但该研究表明,州和联邦立法并未妥善处理无人机技术背后的法规,因此使许多利益相关者容易受到攻击。总体而言,他们得出结论,由于缺乏取证工具和通用无人机结构,因此有必要开发更多数据提取方法。
为了解决 UAV 取证工具缺乏的问题,我将演示如何使用编程语言Lua为 Wireshark 创建数据包解析脚本,以在数字取证场景中查找有用的网络信息。该工具是数字取证技术的第一手应用程序,用于收集有关无人机的有用信息,这些信息可在调查情况下使用,以收集与发生的犯罪相关的更多数据。
数据包嗅探是拦截和检查通过指定网络传输的数据包的行为。网络安全专业人员使用此技术来追踪漏洞、诊断网络故障和性能,或发现威胁。
在计算机上,网络接口卡(也称为 NIC)是一个硬件组件,包括一个嵌入式电路板,允许计算机与网络连接并执行数据包嗅探。出于网络安全或黑客目的而进行的更精细的嗅探通常需要将 NIC 置于混杂模式,以允许计算机检索周围的网络流量。使用解码过程,嗅探器可以访问存储在通过网络传输的数据包中的编码信息。嗅探可以分为两大类:主动嗅探和被动嗅探。
被动嗅探
被动嗅探包括仅侦听作为网络流量发送的数据包。它通常用作侦察技术,以衡量有关流量的相关信息以及通过网络传递的数据类型。这允许安全专业人员分析网络是否存在任何异常或可疑活动,例如网络故障排除(使用网络流量作为网络问题的指标)和通过识别拥塞区域来优化性能。
主动嗅探
主动嗅探是一种用于数据包注入/欺骗应用程序的技术,旨在引起网络设备的响应。例如,攻击者可能会发送一个特定的数据包,以诱使特定的设备或应用程序响应敏感信息。这可用于执行多种恶作剧活动,例如编排中间人 (MiTM) 攻击和劫持网络会话。主动嗅探比被动嗅探更难检测,因为它被构建为伪装成周围的网络流量。主动嗅探是通过故意输入地址解析协议 (ARP) 数据包来进行的,以便使交换机内容地址存储器 (CAM) 表过载。这导致合法的网络流量被传输到不同的端口,这些端口成为欺骗攻击的基础,例如 ARP 欺骗、动态主机配置协议 (DHCP) 攻击和 DNS(域名系统)中毒。
OSI模型
OSI(称为开放系统互连)模型用于概念化网络的不同组件如何相互通信。该模型以七层模型的形式呈现,其中包括不同设备和程序如何通过网络相互通信的标准化规则集。
OSI 模型可以分为几个层:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。
物理层
这描述了负责设备之间物理连接的网络的物理特性,例如布线、连接器和信令。在这一层中,数据通过位传输。
数据链路层
在这一层中,数据被格式化为数据包并通过网络传输。数据链路层还确保您的数据不包含任何内部错误。数据使用帧传输。
网络层
网络层通过找到发送数据包的最佳方式来处理如何在网络上寻址和发送数据包。在此阶段,IP 地址附加到数据包的标头。
传输层
传输层是网络层和会话层之间的过渡。该层使用 UDP 和 TCP 等网络协议来确定如何在应用程序之间传输数据。在这一层传输的数据称为段。
会话层
该层定义了应用程序如何建立和维护彼此之间的连接。
表现层
表示层将来自段的数据转换为更易于阅读的格式。这一层还包括数据包的加密和解密。
应用层
应用层是用来与用户交互的。它定义了应用程序可以用来与网络通信的协议和接口。
数据包信息分解
在网络中,数据包是较大消息的一小段。通过网络传递的任何形式的数据都被分成数据包。一旦它们通过网络,这些数据包就会由接收它们的设备重建。
通过网络发送的数据包在其结构中包含标头、有效负载和尾部。我将使用 IPv4 数据包作为示例来演示数据包中包含的信息类型。
1.包头
数据包标头是数据包的初始部分。它包含数据包到达目的地所需的寻址和其他数据。 IPv4 标头包含 13 个字段......
-版本:所用互联网协议的版本号(即 IPv4)
- 互联网标头长度(IHL):整个IP标头的长度
- Explicit Congestion Notification:有关在途中看到的拥塞信息的信息
- Total Length:整个IP包的长度(包括包头和包体)
- 标识:如果IP数据包是分片的,每个数据包都会包含一个对应的标识号来标识它们所属的原始IP数据包
- 标志:指示数据包是否大到可以分段
- Fragment Offset:片段在IP数据包中的定位
- 生存时间 (TTL):为避免网络环路,数据包还需穿越的路由器数量
- 协议:数据包所属的目标主机的网络层(即 TCP = 6、UDP = 17 和 ICMP = 1)
- Header Checksum:整个标头的校验和值,用于确认数据包不包含任何错误
-源地址:数据包发送者(源)的 32 位地址
- Destination Address:数据包接收方(目的地)的 32 位地址
- 选项:可选字段,可以包含记录路线、时间戳等信息
2.有效载荷
数据包的有效负载包括数据包打算携带到其目的地的实际数据。在 IPV4 数据包的情况下,有效负载被赋予 0 位的填充以确保数据包在 32 位限制内结束。
3.预告片
有时数据包可以包含一个称为尾部的数据包结尾。尽管 IPV4 数据包结构不包含尾部,但以太网帧包含尾部以包含以太网上的网络适配器处理帧所需的信息。
Wireshark 是一种广泛使用的开源网络协议和数据包分析工具。它允许您从无线 (IEEE.802.11)、蓝牙、以太网、令牌环等来源捕获网络数据包。Wireshark 还包括数据包过滤功能,可让您过滤屏幕上显示的数据包日志流.
使用 Wireshark 进行数据包分析
Wireshark 界面包含用于显示数据包信息的不同窗格。主面板显示流经网络的所有数据包的列表。如果您选择单个数据包,屏幕底部附近会弹出两个窗格,其中包含更具体的数据包数据。主面板中每个列类别的详细信息如下:
No.:抓包文件中的包号
时间:发起数据包嗅探后捕获到该数据包的时间
Source:发送设备的IP地址和端口号
Destination:接收设备的IP地址和端口号
协议:数据包的类型(即 TCP、UDP、HTTP 等)
信息:有关数据包的更多信息内容,这将根据捕获的数据包类型而有所不同
这些是 Wireshark 中预配置的信息列,但通过选择“列”设置,工具中还有更多列可用于显示,例如 TTL、校验和等。
该工具的数据包详细信息部分向您显示有关数据包的更多可解释信息,这些信息因数据包类型而异。底部窗格Packet Bytes以纯十六进制格式显示数据包内容。
Wireshark 捕获过滤器
Wireshark 中的捕获过滤器限制插入过滤器捕获的数据包。如果您可能已经注意到,Wireshark 捕获过滤器遵循与tcpdump相同的格式,后者是另一种流行的网络数据包捕获工具。数据包捕获的语法遵循伯克利数据包过滤器 (BPF) 语法表达式。 Wireshark 的一些常见捕获过滤器包括……
仅捕获进出 IP 地址 172.18.5.4 的流量:
host 172.18.5.4
捕获进出一系列 IP 地址的流量:
net 192.168.0.0/24
或者
net 192.168.0.0 mask 255.255.255.0
从一系列 IP 地址捕获流量:
src net 192.168.0.0/24
或者
src net 192.168.0.0 mask 255.255.255.0
捕获 DNS 流量(端口 53):
port 53
捕获除了所有 ARP 和 DNS 流量:
port not 53 and not arp
仅捕获 IPv4 数据包:
ip
仅捕获以太网数据包 (EAPOL):
ether proto 0x888e
Wireshark 中的显示过滤器功能可让您缩小捕获的数据包列表中显示的数据包类型。显示过滤器的常见示例包括:
基于协议的过滤器:
您可以根据网络协议过滤数据包流量
http
上面的例子只展示了HTTP协议的数据包
按地址过滤数据包(即 IP 地址过滤):
您可以通过发送者或接收者的地址过滤数据包
ip.src == xxxx
上面显示了来自特定 IP 地址的流量
基于端口的过滤器:
您可以根据正在使用的端口号过滤数据包流量
http
上面的例子只显示了80端口的TCP数据包
基于时间的过滤器:
您可以根据捕获时间过滤数据包
frame.time >= "YYYY-MM-DD HH:MM:SS" && frame.time <= "YYYY-MM-DD HH:MM:SS
上面的示例仅显示选定时间范围内的数据包
基于内容的过滤器:
您可以根据数据包的内容过滤数据包
frame contains google
上面的示例显示了内容包含关键字“google”的数据包
虽然数据包分析过程用于获得网络流量模式的总体概览,但数据包剖析涉及范围更窄的方法。数据包剖析是指将单个数据包剖析为不同的组件(即标头、有效负载内容等)以获得有关网络进程或被监控设备的宝贵知识的过程。数据包剖析可用于的一些应用程序包括协议分析和取证。
对我们来说幸运的是,Wireshark 包含一个集成工具集,用于对通过网络传输的每个数据包执行彻底的数据包解析。执行数据包剖析的一些技术包括……
协议解码:您可以通过展开数据包详细信息窗格中的层详细信息来查看每个数据包的协议详细信息。这对于解码各种协议很有用,例如 TCP、UDP、DNS 等
TCP 流: Wireshark 还包含一项功能,可以显示流经 TCP 连接的所有数据包的 TCP 流。要使用此功能,请选择一个属于 TCP 连接的数据包,右键单击该数据包,然后选择“Follow > TCP Stream”
颜色编码:您还可以根据数据包长度或协议类型等特定标准可视化数据包。要查看此功能,请转到“查看”并单击“着色规则”
流图: Wireshark 具有显示流图的功能,该流图显示了两台机器之间数据包的时间和序列详细信息。要配置流程图,请转到“Conservation Filter”并选择“TCP”选项。这将创建一个过滤器,显示在两台机器之间传递的所有数据包。然后,选择“Statistics”和“TCP Stream Graphs”来创建流图
可以应用数据包剖析来分析正在使用哪些类型的网络协议以及如何使用它们。要尝试使用 Wireshark 进行协议分析,请首先使用您选择的网络接口捕获数据包。然后,当数据包被捕获时,它们应该传输各种协议,例如HTTP (端口 80)、HTTPS(端口 443)、SSH(端口 22)和 SNTMP 等。让我们使用 HTTP 作为我们的数据包剖析示例。首先选择一个分配有 HTTP 协议的数据包,如下所示,通过使用 http 关键字进行过滤...
选择数据包后,展开传输控制协议 (TCP) 菜单以查看数据包的相关信息。
展开数据包详细信息后,您可以分析协议的不同字段,例如源和目标 IP 地址、源和目标端口、使用的 HTTP 方法(GET、POST、DELETE 等)和 HTTP 响应代码。
数据包解析也可用于数字取证,以提取特定网络事件背后的信息。例如,想象一下黑客通过您的网络将敏感信息发送到远程服务器的情况。我们可以使用 Wireshark 中的显示过滤器,使用黑客设备的 IP 地址和远程服务器的 IP 地址来隔离来自黑客机器的流量。然后,我们可以使用 Wireshark 提供的数据包解析工具,例如“Follow TCP Stream”功能,以重建黑客与远程服务器之间的 TCP 数据流。通过使用此信息,您可以揭示黑客发送到远程服务器的隐藏信息,例如任何恶意文件或图像的传输。数据包剖析的这种应用也可用于分析网络流量和检测任何犯罪活动。
逆向工程是解构和分析系统的过程,目的是了解它是如何“在引擎盖下”工作并从中提取相关信息的。此过程通常通过迭代过程来完成,即解构系统的特定方面、分析其技术规范和代码以及运行特定测试以检查其结果。至于无人机被黑客攻击的案例,我们可以应用逆向工程原理来分析无人机的软件和固件,提取遥测信息,并识别漏洞以进行利用。对于这项研究实验,我决定对 DJI Mini 2 进行逆向工程——这是一种小型紧凑型无人机,专为娱乐用途而设计,由一家名为 DJI 的热门无人机公司开发。
由于被动窃听不会返回任何可逆向工程的结果,我改为使用人工窃听友好的网络配置,以允许无人机和操作员之间的无线通信通过以下配置进行检查和拦截:
a)无人机:完成者通过启动用于与其网络对等点直接通信的接入点来初始化流程
b) MITM AP:我们建立第二个虚拟网络,我们的机器伪装成移动客户端的 AP
c) MITM 客户端: MITM 客户端直接与无人机连接,将 MITM AP 的网络转发给无人机,反之亦然
d) MITM 机器: MITM 机器是用于通过 NAT(网络地址转换)连接虚拟 MITM AP 与 MITM 客户端的内部 NIC 进行窃听的设备
e)操作员:操作员是运行 DJI 应用程序的移动设备,通过 Wi-Fi 连接无人机代表 (MITM-AP)
接入点配置
为了配置 MITM AP,我使用了create_ap 命令在我的机器上通过命令行创建一个虚拟 AP。
sudo create_ap wlan0 wlan0 Operator 12345678 -w 2 -c 2 -m nat --freq-band 2.4 --country US
该命令旨在通过关注 2.4GHz 频率并建立以下参数来消除连接之间的干扰数量:
-w 2
CCMP 密码模式下的 WPA2-PSK -c 2
使用任意和静态未占用的通道-m nat
NAT连接虚拟AP和物理网卡--freq-band 2.4
仅选择 2.4GHz 频段--country US
设置正确的国家代码以符合当地法规对讲窃听
对于窃听,我使用命令行工具来优化 MITM 网络的性能。使用tcpdump捕获的网络数据包将存储在相应的 PCAP 文件中,稍后可以通过一系列网络分析程序对其进行分析。我还实施了额外的过滤器,以减少捕获输出的范围,使其仅包含无人机和机器之间的相关网络数据包。
sudo tcpdump --interface=ap0 -n udp host 192.168.2.1 -w /tmp/dumps/capture.pcap
-n
避免 DNS 解析udp
忽略任何 TCP 数据包host 192.168.2.1
确保显示的数据包与无人机相关为了对 DJI Mini 2 进行数字取证研究,我尝试通过使用 Wireshark 分析无人机发送的网络数据包来对 DJI Wi-Fi 协议进行逆向工程。为了确定无人机传输的数据包的确切协议结构,我使用了位精确推理来对每个位进行分类。在整个过程中,我发现 Wireshark 中的以下过滤器谓词是最有用的:
!dns && !mdns && !icmp
由于只有应用程序级网络数据包与此过程相关,我们可以从搜索中排除 DNS、Internet 控制消息协议 (ICMP) 和多播 DNS (MDNS) 协议ip.src == 192.168.2.1
IP地址192.168.2.1代表无人机的IP地址。在这里,我们指定要按该 IP 过滤的源和目标。 data.len == 1472
在此示例中,结果视图中仅包含长度为 1472 字节的数据包,显示具有该确切有效载荷大小的无人机数据包data.data[0] == 0x00
这会将静态十六进制值与初始索引的有效负载内容进行比较。这很有用,因为飞行中的数据包检查侧重于协议与操作员的无人机控制指令之间的相关变化对于使用 Wireshark 获得的数据包,我重点关注从索引 0x2A 到以太网帧长度的有效负载。尽管整个数据包确实包含信息,但从 0x2A 到末尾的数据字节足以用于逆向工程目的。我在下面包含了以太网 OSI 模型层表以供参考:
有效载荷加密
尽管整个通信流都已加密,但解密后的数据流仍会破坏加密的完整性。使用无人机系统解密信息的一种方法是在多个有效载荷之间进行并排比较以识别模式。电子密码本模式 (ECB) 生成一系列确定性数据,将相同的伪随机排列应用于每个明文块以创建中继器密文块。我们可以在我们的逆向工程过程中应用它,以可能在 UDP 数据包中遇到伪随机有效负载或两个相同的有效负载。虽然我无法找到任何相同的有效负载,但有许多彼此非常相似。例如,下图显示了两个数据包,其中只有 5 个字节不同。这两个有效载荷非常相似,甚至指示一个增量,这很明显是未加密的数据流。
演绎推理
我对 DJI Mini 2 进行逆向工程的主要方法是应用演绎推理,根据相关的操作员输入来比较有效载荷。使用直接的无人机控制指令(即着陆、移动、起飞等),我强迫操作员发出代表性网络数据包的信号。控制指令能够发出命令类型和有效载荷内容的信号。然后使用上述二进制比较技术将数据包相互比较,揭示命令结构和参数值。数据包分析揭示了一个高流量协议,主要由依赖于最大传输单元 (MTU) 的无人机到操作员的数据包组成。
位精确推理
为了获得更多关于传输数据包中存储的数据的信息,一种称为比特精确推理的技术用于分析 56 字节有效载荷中的比特,以对每个数据包的属性做出具体判断。为了简化这个过程,集群被用来聚合有效载荷,使每个有效载荷的长度完全相同。我强烈建议阅读这篇深入研究逆向工程无人机的位精度方法的研究论文,以了解有关该技术的更多信息。下表显示了能够使用精确位推理提取的信息的一般概述。
在整个研究过程中,我了解到用于侦察和数字取证/逆向工程的数据包剖析需要完全不同的方法。幸运的是,使用被动侦察和网络通信解析器的数据包解析对于分析 DJI Mini 2 的通信接口非常方便。
为了开始数据包解析过程,我下载了 DJI 通信数据包转储存储库中列出的 PCAP 文件,其中包括使用 Wireshark 的各种 DJI 无人机的大量通信数据日志。下载 PCAP 文件后,我使用 Wireshark 和不同的解析器对它们进行了分析。
分析信息格式
在深入了解 DJI 数据包转储的具体数据包解析过程之前,值得一提的是
UART 通信: UART 代表通用异步收发器,是一种常用的串行协议,用于在电子设备之间传输信息,这些电子设备通过单条通信线路顺序利用异步数据位流
DUML Streams: DUML 代表 DJI 通用标记语言,它描述了 DJI 通信的闭源协议。它用于控制设备的内部设置或启动固件更新
KML 文件:也称为 Keyhole 标记语言,这些是 XML 文件,主要用于在地图软件中专门显示地理数据。 KML 文件包含有关特定位置、形状、路径和其他地理特征的数据
DAT 飞行日志: DAT 代表 数字录音带。它们指的是存储在数字音频磁带上的记录飞行数据。 DAT 文件包括用于分析的相关航班信息
DJI 数据包转储存储库中的 PCAP 文件包含来自各种 DJI 硬件的大量通信日志转储。这种通信日志的存储使我们能够破译协议的内部通信以及用于探测硬件内的硬件问题的良好参考点。例如,第一个日志文件p3x_ofdm_to_center_run1包含来自 DJI P3X 接收器板 UART 转储的通信转储。数据转储使用带状电缆和程序comm_serial2pcap.py在无人机上的 OFDM(正交频分复用)MCU(微控制器单元)和 FC(飞行控制器)之间进行双向通信。
设置 Wireshark
为了建立一个基础的 DJI 通信剖析,我使用了 DJI 固件工具中列出的通信剖析文件。通信解剖工具提供以下功能:
- 显示从无人机源捕获的 DUML 数据包中的字段
- 显示二进制飞行中存储的数据包中的字段
- 录制 DAT 文件
- 通过 KML 导出功能可视化航班
这些工具还允许您通过以下选项分析协议命令:
- 基于 DUML 流的 PCAP 文件
- PCAP 文件包含嵌入式 DUML 有效负载中的 USB/以太网通信转储
- 基于 DAT 飞行日志的 PCAP 文件
要开始设置您的环境,请下载此链接下列出的所有 .lua 文件。然后,在 Wireshark 中打开关于 Wireshark菜单并转到文件夹选项卡。
然后,单击文件路径参考Personal Lua Plugins并粘贴所有文件内容。
设置完成后,使用Ctrl+Shift+L命令刷新 Wireshark 以加载所有通信剖析工具。载入后,打开
Preferences -> Protocols -> DLT_USER -> Edit
并根据下图进行分配: DLT表初始化完成后,进入
Preferences -> Appearance -> Columns
并调整设置以显示所需的协议信息。以下是一种配置方式的示例: 通讯解剖
通过通信剖析工具,我们可以从大疆的通信协议中提取出以下信息:
固件文件结构:解剖器可以描述有关固件文件结构的信息,如标题、部分和数据部分
固件组件:这些工具还可以提取单独的固件组件,如引导加载程序、飞行控制固件、相机固件、云台固件等
配置参数:还可以查看配置参数,其中提供了相机、飞行控制和传感器等组件的设置信息
脚本:代码片段和可执行二进制文件也可以在固件文件中发现
加密:根据情况,解剖器还可以解密和加密固件文件的部分,从而揭示有关固件加密过程的信息
文件系统内容:如果固件文件包含文件系统,该工具还可以提取和分析该文件系统中的内容
在 Wireshark 中,解析器负责解释和解码网络协议。解析器很有用,因为它们分析捕获的网络数据包并从中提取有用的信息,例如协议的结构、字段和编码规则,并以人类可读的格式显示它们。
Wireshark 还允许您使用称为Lua 的编程语言开发您自己的自定义解析器。虽然 Wireshark 是用 C 语言编写的,并且该程序的解析器通常是用 C 语言编写的,但是,Wireshark 还允许使用 Lua 编程语言编写解析器,以使开发新手的学习曲线不那么陡峭。 Lua 是一种多范式、过程式和函数式编程语言,具有集成的面向对象特性。尽管选择 Lua 作为解析器开发的语言确实会降低速度,但由于其重量轻且易于学习,因此在大多数情况下都是有利的。
Lua基本介绍
正如我之前提到的,Lua 具有直观和简单的代码语法,同时牢记速度、可移植性和与其他程序的集成,使其易于上手而不会牺牲太多功能和性能。以下是一些基本代码片段,概述了该语言的基本特征:
变量和操作
local a = 25
local b = 5
local result = a + b print (result) -- Output: 30
条件语句
local temperature = 15
local heatSetting = 0
if temperature < 0 then heatSetting = 3
elseif temperature <= 20 then heatSetting = 2
else heatSetting = 1 end
print (heatSetting) -- Output: 2
循环
-- While Loops
local i = 0
while i < 10 do
i = i + 1
end
print (i) -- Output: 10
-- For Loops
local i = 0
-- i = first, last, delta
for i = 0 , 10 , 1 do
print (i) end
print (i) -- Output: 10
表
local new_table = {} -- Table value assignment
new_table[ 20 ] = 10
new_table[ "x" ] = "test"
ax = 10
功能
function add (arg1, arg2)
return arg1 + arg2 end
local added_number = add( 2 , 3 ) print (added_number) -- Output: 5
关于Lua的总结笔记
Lua 是动态类型的
范围指定为局部或全局。全局是默认的
分号不是必需的,使空格具有更多价值
-- 表示注释
i = i + 1 用于变量递增
~= 代替 !=
类型有:字符串、数字、布尔值、nil、函数、用户数据、线程和表
Nil 用于非值
在条件语句中:nil 和 false 是 falsy,其余的是 thruthy。
Lua 唯一的数据结构是表。表实现关联数组。关联数组可以通过数字和其他类型(如字符串)进行索引。它们是动态的,通常称为对象。
要在 Wireshark 中使用 Lua 脚本设置解析器开发,请单击
Help -> About Wireshark -> Folders
.从那里,单击 Personal Lua Plugins 或 Global Lua Plugins 文件夹引用。该路径应类似于C:\Program Files\Wireshark\plugins\2.4.2 on Windows 。要创建解析器,请在该目录中初始化一个文件,例如example.lua
.重新加载 Wireshark 后,该脚本将自动应用。您可以通过重新启动应用程序或使用Ctrl+Shift+L重新加载所有 Lua 脚本来重新加载 Wireshark 。 现在您已完成所有设置,我将引导您完成一个基本的解析器脚本,该脚本提取并显示有关自定义协议的信息。
-- Create a new protocol for our custom protocol
local custom_protocol = Proto( "CustomProtocol" , "Custom Protocol" ) -- Define the fields of our custom protocol
local field1 = ProtoField.uint8( "custom_protocol.field1" , "Field 1" , base.DEC) local field2 = ProtoField. string ( "custom_protocol.field2" , "Field 2" ) -- Register the fields to the custom protocol
custom_protocol.fields = { field1, field2 } -- Create a function to dissect the packets of our custom protocol
function custom_protocol.dissector (buffer, pinfo, tree)
-- Create a subtree for our custom protocol in the Wireshark GUI
local subtree = tree:add(custom_protocol, buffer(), "Custom Protocol Data" ) -- Extract and display the values of Field 1 and Field 2
local field1_value = buffer( 0 , 1 ):uint() subtree:add(field1, buffer( 0 , 1 )):append_text( " (Value: " .. field1_value .. ")" ) local field2_value = buffer( 1 , 5 ): string () subtree:add(field2, buffer( 1 , 5 )):append_text( " (Value: " .. field2_value .. ")" ) end
-- Register our custom protocol as a dissector in Wireshark
local udp_port = DissectorTable.get( "udp.port" ) udp_port:add( 12345 , custom_protocol)
- 代码首先使用名为 Proto 的对象初始化自定义协议
CustomProtocol
field1
和field2
buffer
, pinfo
, 和tree
. buffer 包含数据包的缓冲区和Tvb 对象, pinfo包含数据包列表的列, tree是树根 - 在解析器函数中,我们在 Wireshark 数据包详细信息部分中创建一个子树,将我们的自定义协议显示为一个字段
- 在树视图部分,我们显示自定义协议中每个相应字段的数据包信息
- 最后,我们将协议分配给端口。在这种情况下,使用的端口是
12345
对于UDP总体而言,将 Wireshark 与一些基于 DJI 的通信解析器结合使用,我们能够揭示 DJI 无人机通过其通信协议传输的敏感信息。我希望这个概述的广泛研究过程阐明了一些逆向工程技术,您可以在网络安全过程中应用这些技术来找到现有系统中的漏洞。此外,我希望这份报告能够证明,虽然无人机黑客攻击可能有点乏味,但并非不可能。重要的是要不断突破系统当前已知的界限,以便在不良行为者注意到现有缺陷之前突出它们。在这种情况下,我们发现即使是像大疆这样值得信赖的大型品牌制造商的无人机协议仍然容易受到数据拦截和逆向工程的攻击。考虑到这一点,可以采取建设性的行动步骤来减轻这些现有的漏洞并巩固无人机通信渠道的安全性。
也在这里发布。