基于模糊测试方法实现车载通信测试

发布者:睿智之光最新更新时间:2023-12-18 来源: elecfans关键字:BUG 手机看文章 扫描二维码
随时随地手机看文章

模糊测试是网络安全测试领域必然会被提及的一类测试方法。它有着极其鲜明的特点,包括极低的需求依赖性、可逆向的测试理念等,与常规测试方法显得是那么的“风格迥异”。但同时,这种测试方法又常常能发现一些核心、严重的BUG,因此其在整个测试体系中有着重要的地位,且这种测试方法也已“润物细无声”地融入到我们的测试活动中了。本次就为大家介绍如何在车载通信领域运用模糊测试。


1

什么是模糊测试

模糊测试的整体测试思路非常简单,给待测系统输入“随机值”,然后监测是否出现异常。
bcd20ecc-346d-11ed-9ade-dac502259ad0.png

图1 模糊测试示意图这个过程中有这样几个特点:

1

/ 随机值

随机值可以是正常的数据,也可以是非预期的数据,通常可以通过变异(篡改原有数据)和生成(通过规则伪造数据)来获得。且整个测试不是找几个随机值来做测试,而是不断地输入大量的随机值(可以理解为无穷尽)来做长时间的持续测试。


bce24332-346d-11ed-9ade-dac502259ad0.png


图2 功能性测试与模糊测试对比

2

/ 监测异常

正是由于待测系统可能接收处理非预期数据,因此其会有各种各样的表现。而异常表现可以是服务停止、程序崩溃,也可以是资源过载、数据丢失。

3

/ 自动化

每个测试轮次都是给定输入然后监测异常,而对于模糊测试来说,这样的轮次需要执行非常多的次数,甚至可以永无止境,所以自动化是基本必须要实现的内容。

2

模糊测试运用到车载通信

虽然模糊测试在车载通信测试中很少被单独拿出来,但实则我们在很多的测试中使用了这种方法。比如:



CAN通信测试中的高负载测试

对CAN通信注入特定的报文,形成期望的负载条件,然后监测是否有异常。这个测试中的随机值变量为负载率和产生负载的报文ID,异常的判断可能包括错误帧、通信恢复等,这就形成了一个高负载模糊测试。


网络管理中的休眠唤醒测试

控制器休眠的各个时刻触发唤醒事件,然后监测是否正常唤醒。这个测试中随机值变量是时序,即唤醒事件的触发是在什么时刻,异常的判断是唤醒行为,这就形成了一个休眠唤醒时序模糊测试。


这里举的2个例子比较特别,想要说明的是我们提及的随机值并不仅仅是协议字段或者信号数值这种很容易联想到的数据,还包括各种状态值(如负载率、吞吐量、频率等)、时序(如休眠唤醒过程、TCP连接的三次握手、诊断服务的解锁交互等)等数据。尤其是时序,通常是有一连串的步骤,这一过程中不仅可以将每一步的间隔时间用作随机值,还可以在各个步骤本身“大做文章”,比如每一步再耦合随机信号值。
概括起来就是万物皆可数据化,数据皆可随机化,这或许是模糊测试的核心思想。而结合车载通信本身的特点,我们可以得到一些典型的模糊测试内容:

针对协议中数据格式的模糊测试

如CAN总线中接收到不同ID、DLC时,是否出现错误帧。这种测试可能更针对CANFD节点或者OBD节点,甚至还包括扩展帧、远程帧等特殊数据。又比如以太网中接收到不同的源MAC、目标MAC、源IP、目标IP、源端口、目标端口时,是否出现异常。这里的异常又会根据防火墙策略变得不尽相同,比如无响应、重启、发出不可达的错误报文等。
bd2bf96e-346d-11ed-9ade-dac502259ad0.png

图3 针对协议中数据格式的模糊测试示例-CAN ID模糊测试

针对信号值的模糊测试

如CAN总线中接收到不同的信号值(包括非法值、无效值等),是否出现重启、死机等情况。又比如SOME/IP中接收到各种请求、响应、订阅等数据(包括非预期的数据类型、编码、字节顺序等),是否出现服务暂停、服务崩溃、死机等情况。
bd454806-346d-11ed-9ade-dac502259ad0.png

图4 针对信号值的模糊测试示例-CAN信号模糊测试

针对时序的模糊测试

如上文提及的网络管理休眠唤醒测试。又比如SecOC或者时间同步机制中,需要周期性地对特定基准进行同步处理,又有其他数据会使用同步后的基准,而在同步时序中出现各种偏移(包括基准本身的偏移、应用数据使用的基准与基准更新时刻的偏移等),判断同步机制是否崩溃。
bd7e25d6-346d-11ed-9ade-dac502259ad0.png

图5 针对时序的模糊测试示例-休眠唤醒模糊测试

针对流量的模糊测试

如上文提及的高负载测试。又比如网关节点的性能测试中,在各端口并行接收不同的数据流以构成不同的吞吐量,判断路由机制是否崩溃。
bd9cd350-346d-11ed-9ade-dac502259ad0.png

图6 针对流量的模糊测试示例-吞吐量模糊测试

3

模糊测试中需要注意的问题

虽然有大量的测试可以使用模糊测试方法,但同样的,模糊测试也有着其局限性或者说不足,如何尽可能地发挥其优点、规避其不足可能需要考虑以下内容:

异常

对于异常的判断是一个十分困难但又非常重要的点。困难是在于异常的情况比较复杂且能够监测的手段很多时候是有限的,尤其是需要实现异常情况的自动化监测。在车载网络中可以用来判断异常的包括特定信号值、周期报文的周期波动、控制器的电流值、DTC等。对于每一种不同的模糊测试,应该需要根据测试内容选择合适的异常判断方式。另一个有效的方法是进行“插桩”,用来突破控制器本身的局限性,突破常规“黑盒测试”的局限性。
bdc47bee-346d-11ed-9ade-dac502259ad0.png

图7 插桩示意图

平衡

由于模糊测试是一种趋近于无穷测试的方式,带来的必然影响就是时间成本的增加。但是我们实际的产出并不会随时间增加而呈现线性的增加,因此测试效率会变得越来越低。为了提高测试效率,我们必然会使用一些规则做随机值的筛选,但这又必然导致随机性的降低。正如很多测试理论所描述,“测试可以证明存在缺陷,但不能证明不存在缺陷”。我们很多的测试都是在投入和产出中寻求平衡,模糊测试由于其特点显得更加明显,以至于我们要界定测试是否完成会存在一些争议和博弈,要处理这样的平衡,难度会可能大于测试本身。

定位及修复

测试会发现问题,这带来的另一个问题就是如何定位。而模糊测试的特点又会导致问题的定位(包括问题复现)会有很大的难度和不确定性,尤其是当模糊测试中随机值是更多维度的情况下,事情就会变得更加复杂。另一个需要考虑的点就是问题修复后的复测工作,这可能比做一次完整的模糊测试还要麻烦,此时需要解决的点是如何快速验证问题已被修复和如何验证修复方案是否会产生新的问题。虽然这两个点在所有测试中都存在,但是由于模糊测试的随机性,这两个问题显得更加困难。综合上述几点考量,个人认为对于当前的车载通信来说,在开发前中期采用模糊测试时需要有规则性和针对性的,虽然我们降低了发现问题的范围,但得到的是测试效率、问题修复效率、资源利用率的有效提升。而随着软件的逐步成熟,可以逐步放开原有规则,增加随机性。这一过程中也需要结合自身的情况来做调整,总之,关键点其实就两个字:平衡。

4

总结

模糊测试是一个相当有效的测试方法,其随机性的思想可以让我们发现通过逻辑很难想到的问题,这扩大了我们发现问题的范围和手段,能有效提高测试经验,这与场景测试有着异曲同工之妙。但同时,其投入多、修复难的问题也是不可忽视的内容。如何达到平衡是我们必须要考虑的点,总的来说,这是个以时间换经验还是以经验换时间的选择题。另外,本文的车载通信测试是广义概念,也包括了以车载通信技术作为载体的安全通信、安全诊断、安全刷写等测试。


关键字:BUG 引用地址:基于模糊测试方法实现车载通信测试

上一篇:车载显示中的车规级别简析
下一篇:锂离子电池快充和慢充电路上的区别

推荐阅读最新更新时间:2024-10-30 11:13

stm32usb库bug及解决办法
本人项目开发stm32usb设备的时候,发现usb发送会经常性的阻塞main函数,或者说无法让程序流畅的运行,实时性大打折扣,甚至会卡几十毫秒都很正常,我不明白st为什么会写出这样的usb程序,实属脑残,经过几经周折找到了解决办法: usb_dcusb_dcd_int.c文件中,函数DCD_WriteEmptyTxFifo有个bug,会导致经常死循环,导致usb库耗时过长。 应该如下修改,在原始程序中增加红框内的语句: usb的连接并不属于可靠实时性连接,有时会丢包都很正常,修改后usb不再会出现阻塞问题,非常流畅,但要注意增加丢包处理逻辑,来解决usb丢包问题。本人开的的是usbhid设备,附赠上位机三平台源码 https:
[单片机]
stm32usb库<font color='red'>bug</font>及解决办法
iCloud出现bug:3年前卖掉iMac 现在还能查到它在哪
   不少网友都有出售二手设备的经历,但一般售出后你都不会知道它的去向。而近日一位谷歌员工发表了一篇文章,表示他在3年前出售的一台iMac,现在仍出现在自己的iCloud列表中,就连新主人的名字也在上面。   这位名为Brenden Mullign的谷歌员工在Medium发表文章称,他在3年前于Craigslist分类网站把自己的iMac售卖给别人。出售电脑前,他登出iCloud账户,并删除了主机内所有资料,再重新安装macOS。但在现在,他却在自己的Find My Mac上重新发现了它。 图片来自9to5Mac   这台电脑已经改名为“Michael  iMac”,并在距离他大约160公里以外的地方。在Find My Mac的选
[手机便携]
谷歌Pixel 4安卓11降级安卓10出了Bug:面部识别不能用
6月15日消息,上周Android 11 Beta 1正式上线,谷歌Pixel机型率先尝鲜。   考虑到这是Beta版Android 11,系统方面不够稳定,不少Pixel用户升级到Android 11之后选择降级回到Android 10,然而在降级之后发现了新的Bug。   据9to5Google报道,不少用户反馈谷歌Pixel 4、Pixel 4 XL降级回到Android 10之后面部识别不能用,系统提示面部信息无法录入。   谷歌方面承认了这一错误,表示会在后续版本中修复这一bug。9to5Google提醒用户,升级到Android 11的Pixel 4系列用户谨慎降级,否则面部识别无法使用。由于Pix
[手机便携]
微软IBM人脸识别现重大BUG
近日,外媒有消息称,现如今非常热门的AI应用人脸识别,出现了巨大的BUG,其中,针对黑人女性的错误率高达21%-35%,而针对白人男性的错误率则低于1%,针对不同种族的准确率差异巨大,引发热议。    在一组385张照片中,白人男性的识别误差最高只有1%(图片来自:纽约时报)   其实出现这个问题的来源更多的是因为当下的人工智能数据,数据的量会影响AI的智能判断,而且目前人工智能正是处于发展阶段,商用并不是很成熟,所以出现问题也是在情理之中。    在一组271张照片中,肤色较黑的女性识别误差率高达35%(图片来自:纽约时报)   但是值得说明的是,无论是何种新技术,收集数据都显得尤为重要,不仅仅是人脸识别,还有语言、文化
[安防电子]
魅族推Flyme OS 5.1.4.0稳定版 修复多项bug
    近日关于魅族2016年第一款手机魅蓝Note3的消息不断传出。然而在4月6日魅蓝Note3正式发布前,昨日下午,魅族科技放出了最新的稳定版固件——魅族Flyme OS 5.1.4.0稳定版。   据悉,魅族Flyme OS 5.1.4.0稳定版是Flyme OS在2016春节之后发布的第一个稳定版固件。本次更新主要以性能优化和Bug修复为主,并无重要新功能加入。 魅族推Flyme OS 5.1.4.0稳定版 修复多项bug   魅族Flyme OS 5.1.4.0稳定版固件适用于魅族PRO 5 / MX5 / MX4 Pro / MX4 /魅蓝note2 /魅蓝2 /魅蓝metal(不含电信版)/魅蓝note(不含电
[手机便携]
主要以修复 Bug 为主,苹果推出多款设备的 Beta 系统更新
集微网消息,北京时间今日凌晨,苹果向开发者们推送了新一轮的测试版系统更新,这一轮系统跟新包括了 MacIS 10.14.2 beta 3 、iOS 12.1.1 beta 3 、tvOS 12.1.1 beta 3 以及 watchOS 5.1.2 beta 2 。         从系统版本型号上看,除了 watchOS 5.1.2 之外,其他系统都只属于小幅度更新,估计更多的只是修复一些 Bug 以及提高系统稳定性,其他方面的变化应该不会太大。         变化较大的地方会是 iOS 12.1.1 ,因为它更新了 FaceTime 软件界面。而 watchOS 5.1.2 则带来了更多苹果自家出品的应用以及
[手机便携]
STM32L1xx的库函数有个Bug(stm32l1xx_gpio.c)
在使用STM32L151的时候遇到 GPIO_PinAFConfig(xx,xx,xx)函数无效,有时候还有导致程序HardFault的问题。之前遇到就使用直接寄存器操作避免了这个问题,这次出现了Hardfault,我想这得找找原因了,不然每次都得修改寄存器操作,麻烦的很。 文件“stm32l1xx_gpio.c”中关于GPIO_PinAFConfig 函数式这么定义的。 当使用的引脚号大于8 的时候会导致hardFault的发生。 void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) { uint32
[单片机]
linux内核打印"BUG: scheduling while atomic
linux内核打印 BUG: scheduling while atomic 和 bad: scheduling from the idle thread 错误的时候, 通常是在中断处理函数中调用了可以休眠的函数,如semaphore,mutex,sleep之类的可休眠的函数,而linux内核要求在中断处理的时候,不允许系统调度,不允许抢占,要等到中断处理完成才能做其他事情。 因此,要充分考虑中断处理的时间,一定不能太久。 另外一个能产生此问题的是在idle进程里面,做了不该做的事情。现在Linux用于很多手持式设备,为了降低功耗,通常的作法是在idle进程里面降低CPU或RAM的频率、关闭一些设备等等。要保证这些动作的原子性
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved