基于语法规则的UDS协议测试用例生成方法技术

技术编号:37867456 阅读:14 留言:0更新日期:2023-06-15 20:57
本发明专利技术公开了一种基于语法规则的UDS协议安全测试用例生成方法,根据实际需要收集UDS协议的数据包并将数据包划分为单帧数据包集合和连续帧数据包集合,针对单帧数据包集合生成三层树形结构作为协议树,针对连续帧数据包集合生成链状树作为协议树,然后对每个协议树中的节点进行变异标记得到语法树,基于语法树对每个协议树进行若干次变异,根据变异后的协议树生成数据包作为测试用例。本发明专利技术基于现有UDS数据包生成语法树,对语法树进行变异后生成测试用例,使得生成的测试用例符合UDS协议的语法规范,有效提升模糊测试的效率。有效提升模糊测试的效率。

【技术实现步骤摘要】
基于语法规则的UDS协议测试用例生成方法


[0001]本专利技术属于车载总线通信安全测试
,更为具体地讲,涉及一种基于语法规则的UDS协议测试用例生成方法。

技术介绍

[0002]UDS(Unified Diagnostic Services,统一诊断服务诊断标准)协议即ISO14229,该协议应用于车载ECU(Electronic Control Unit,电子控制单元)定义了向其发送的指令,应用于IOT(Internet of Things,物联网)设备故障诊断读取数据流定义相关指令,该协议可用于测试目标设备的协议通信安全性。
[0003]目前,现有的对于UDS协议安全性的模糊测试(Fuzzing)采用的方案通常有如下两种:
[0004]方法一:随机构造包
[0005]对于车载CAN总线的UDS安全测试,利用了CAN(Controller Area Network,控制器域网)总线上单条UDS信息数据量小的特点(单条消息最长只有8字节或者64字节),采用随机生成乱序字节的方法构造CAN消息内容进行测试。
[0006]方法二:指定字节随机变异构造包
[0007]首先需要抓取一次或多次电控单元总线通信信号,然后由使用者指定总线消息的固定字节或固定位不变,其他字节采用随机变异的方式构造新的数据包。
[0008]现有技术采用的两种方式都有比较明显的优势和劣势,对于方法一中的随机构造包的方法其优势是完全不需要人工干预,其劣势是生成的数据包不符合目标协议的规范,大多数数据包被拒绝,导致Fuzzer(模糊测试器)浪费了大量时间在无效的用例生成上面,Fuzzer效率低,对于浅层的问题不能快速发现,对于CAN消息数据结构的深层次问题无法发现。方法二中指定字节随机变异构造包的方法其优势相对于随机构造包方法提升了效率,在指定字节不变的情况下,使得生成数据包更有指向性。劣势是对于使用者要求较高,要求使用者了解总线消息数据结构,不能做到开箱即用,且对于有校验的总线消息不能按要求指定生成正确的校验值。

技术实现思路

[0009]本专利技术的目的在于克服现有技术的不足,提供一种基于语法规则的UDS协议测试用例生成方法,基于现有UDS数据包生成语法树,对语法树进行变异后生成测试用例,使得生成的测试用例符合UDS协议的语法规范,有效提升模糊测试的效率。
[0010]为了实现上述专利技术目的,本专利技术基于语法规则的UDS协议测试用例生成方法包括以下步骤:
[0011]S1:根据实际需要收集UDS协议的数据包,根据其传输时采用单帧传输或连续帧传输,将数据包划分为单帧数据包集合和连续帧数据包集合;
[0012]对于单帧数据包集合,将数据包长度相同的单帧数据包划分为一个集合,然后以
数据包长度作为根节点、以服务ID作为子节点、数据作为叶子节点,将构建得到的三层树形结构作为协议树;
[0013]对于连续帧数据包集合,先根据连续帧构建规则将数据包长度作为根节点按照顺序连接成链状树,然后根据数据包长度相同的数据包,构建每个根节点的协议树,将构建得到的链状树作为连续帧数据包的协议树;
[0014]将上述方法所得到的协议树作为语法模板;
[0015]S2:根据步骤S1中得到的语法模板中每个协议树来构建语法树:对于每个协议树,遍历其每个节点并进行变异标记,从而得到语法树;对节点进行变异标记的具体方法为:
[0016]S2.1:判断节点数据中是否存在由开发人员自定义的特殊字符,如果存在,则进入步骤S2.2,如果不存在,否则进入步骤S2.3;
[0017]S2.2:标记该节点为不可变异节点,令其变异操作集合为空,并将该节点映射至对应的处理函数;
[0018]S2.3:判断节点是否是根节点,如果是,进入步骤S2.4,否则进入步骤S2.7;
[0019]S2.4:判断节点是否属于链状树,如果是,进入步骤S2.5,否则进入步骤S2.6;
[0020]S2.5:标记该节点为可变异节点,在其变异操作集合中加入乱序变异;
[0021]S2.6:标记该节点为不可变异节点,令其变异操作集合为空;
[0022]S2.7:判断节点是否存在子节点,如果是,进入步骤S2.8,否则进入步骤S2.9;
[0023]S2.8:标记该节点为可变异节点,在其变异操作集合中加入嫁接变异,进入步骤S2.9;
[0024]S2.9:判断节点是否存在兄弟节点,如果是,进入步骤S2.10,否则进入步骤S2.11;
[0025]S2.10:标记该节点为可变异节点,在其变异操作集合中加入替换变异和删除变异;
[0026]S2.11:标记该节点为可变异节点,在其变异操作集合中加入随机替换变异、删除变异和随机填充变异;
[0027]S3:对于每棵协议树,分别基于对应的语法树进行若干次变异操作,得到若干棵变异协议树,基于语法树进行变异操作的具体方法为:
[0028]遍历协议树中的每个节点,判断该节点是否为不可变异节点,如果是,则不作任何操作,如果不是,则随机从其变异操作集合中选取一种变异操作进行变异:
[0029]当所选择的变异操作为嫁接变异时,将其子节点嫁接至其父节点或兄弟节点;
[0030]当所选择的变异操作为删除变异时,将以该节点为根节点的子树删除;
[0031]当所选择变异操作为替换变异时,将该节点的兄弟节点复制并替换该节点;
[0032]当所选择变异操作为随机填充变异,对该节点的数据进行随机填充;
[0033]当所选择变异操作为随机替换变异时,随机生成一个字节或复制任意节点的值替换该节点;
[0034]当所选择变异操作为乱序变异时,将链状树中每个协议树进行乱序变异;
[0035]S4:对于步骤S3得到的每棵变异协议树,对树的子节点逐层递归遍历,把每个节点的值组合,将所得到的数据包作为测试用例。
[0036]本专利技术基于语法规则的UDS协议安全测试用例生成方法,根据实际需要收集UDS协议的数据包并将数据包划分为单帧数据包集合和连续帧数据包集合,针对单帧数据包集合
生成三层树形结构作为协议树,针对连续帧数据包集合生成链状树作为协议树,然后对每个协议树中的节点进行变异标记得到语法树,基于语法树对每个协议树进行若干次变异,根据变异后的协议树生成数据包作为测试用例。
[0037]本专利技术具有以下技术效果:
[0038]1)本专利技术基于现有UDS数据包生成语法树,对语法树进行变异后生成测试用例,使得生成的测试用例符合UDS协议的语法规范,使得每条测试用例都会被目标协议栈接收并解析,避免了在无效用例生成上的空耗,有效提升模糊测试的效率;
[0039]2)从使用便捷性来讲,本专利技术只需要在初始化阶段,编写UDS协议符合语法规范的配置文件,一次设置就能方便后续开箱即用,且对于有特殊校验的总线UDS消息可以通过对变异方式的轻微改动迅速适配目标,从而更好地适应各种应用本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于语法规则的UDS协议安全测试用例生成方法,其特征在于,包括以下步骤:S1:根据实际需要收集UDS协议的数据包,根据其传输时采用单帧传输或连续帧传输,将数据包划分为单帧数据包集合和连续帧数据包集合;对于单帧数据包集合,将数据包长度相同的单帧数据包划分为一个集合,然后以数据包长度作为根节点、以服务ID作为子节点、数据作为叶子节点,将构建得到的三层树形结构作为协议树;对于连续帧数据包集合,先根据连续帧构建规则将数据包长度作为根节点按照顺序连接成链状树,然后根据数据包长度相同的数据包,构建每个根节点的协议树,将构建得到的链状树作为连续帧数据包的协议树;将上述方法所得到的协议树作为语法模板;S2:根据步骤S1中得到的语法模板中每个协议树来构建语法树:对于每个协议树,遍历其每个节点并进行变异标记,从而得到语法树;对节点进行变异标记的具体方法为:S2.1:判断节点数据中是否存在由开发人员自定义的特殊字符,如果存在,则进入步骤S2.2,如果不存在,否则进入步骤S2.3;S2.2:标记该节点为不可变异节点,令其变异操作集合为空,并将该节点映射至对应的处理函数;S2.3:判断节点是否是根节点,如果是,进入步骤S2.4,否则进入步骤S2.7;S2.4:判断节点是否属于链状树,如果是,进入步骤S2.5,否则进入步骤S2.6;S2.5:标记该节点为可变异节点,在其变异操作集合中加入乱序变异;S2.6:标记该节点为不可变异节点,令其变异操作集合为空;S2.7:判断节点是否存在子节点,如果是,进入步骤S2.8,否则进入步骤S2.9;...

【专利技术属性】
技术研发人员:刘承文王志鹏赵焕宇卜启航张鹏飞颜文然宋雪冬
申请(专利权)人:广东为辰信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1