【UDS诊断(CommunicationControl_0x28服务)测试用例CAPL代码全解析⑤】


ISO 14229-1:2023 UDS诊断【CommunicationControl_0x28服务】_TestCase05

作者:车端域控测试工程师
更新日期:2025年05月26日
关键词:UDS诊断协议、通信控制服务、CommunicationControl_0x28服务、ISO 14229-1:2023

TC28-005测试用例

用例ID测试场景验证要点参考条款预期结果
TC2805安全访问未授权操作未解锁安全权限时修改通信设置§7.3.28.3.3返回NRC=0x33(安全拒绝)

TC2805 安全访问未授权操作测试用例(ISO 14229-1 §7.3.28.3.3)
版本:V2.4 | 更新时间:2025年5月26日 20:15


一、测试逻辑设计

直接发送通信控制服务(0x28)
预期NRC=0x33
安全状态初始化
发送未授权请求
响应分析
|安全拒绝|
检查安全会话状态
|错误响应|
故障回溯
|会话未升级|
确认通信参数未变更
|参数保持原值|
测试通过
|参数异常|

二、CAPL测试代码实现

/* ========================================================================
   TC2805 安全访问权限验证(通信控制服务保护机制)
   核心功能:
   - 安全会话状态动态监控 
   - 多层级安全策略校验 
   - 总线配置完整性保护 
======================================================================= */
variables {
  const dword kCommCtrlService = 0x28;    // 通信控制服务
  const byte kSubFunc = 0x01;             // 子功能:禁用通信 
  const byte kExpNRC = 0x33;              // 预期否定响应码 
  
  struct {
    byte originalCommState;               // 初始通信状态 
    dword secSessionLevel;                // 当前安全会话等级 
    timer securityMonitor;                // 安全响应计时器(1500ms)
  } gTestEnv;
}
 
//  安全状态捕获 
void CaptureSecurityStatus() {
  // 读取当前安全等级(假设0x01为默认非安全会话)
  diagRequest reqSecLevel: 0x27 0x03;     // 安全访问服务-查询状态 
  diagSendRequest(reqSecLevel);
  gTestEnv.secSessionLevel = reqSecLevel.Response.Data[0];
  
  // 获取当前通信参数(示例:0x00=通信使能)
  diagRequest reqCommState: kCommCtrlService[kSubFunc, 0x00];
  diagSendRequest(reqCommState);
  gTestEnv.originalCommState = reqCommState.Response.Data[0];
  
  testStepPass("环境初始化", 
    "安全等级:0x%02X | 通信状态:0x%02X", 
    gTestEnv.secSessionLevel, 
    gTestEnv.originalCommState);
}
 
//  响应处理逻辑 
on diagResponse kCommCtrlService::kSubFunc {
  cancelTimer(gTestEnv.securityMonitor);
  
  if(this.Nrc == kExpNRC) {
    testStepPass("安全拒绝触发", 
      "预期NRC=0x%02X | 实际NRC=0x%02X", kExpNRC, this.Nrc);
    ValidateSystemIntegrity();
  } else {
    testCaseFailEx("安全策略失效", 
      "错误码:0x%02X | 原始数据:%s", 
      this.Nrc, this.Data.ToHexString());
  }
}
 
//  系统完整性验证 
void ValidateSystemIntegrity() {
  // 二次读取通信状态 
  diagRequest reqValidate: kCommCtrlService[kSubFunc, 0x00];
  diagSendRequest(reqValidate);
  
  // 检测安全会话是否被意外升级 
  diagRequest reqSecCheck: 0x27 0x03;
  diagSendRequest(reqSecCheck);
  
  if((reqValidate.Response.Data[0] == gTestEnv.originalCommState) &&
     (reqSecCheck.Response.Data[0] == gTestEnv.secSessionLevel)) {
    testCasePass("系统防护有效", 
      "通信状态保持0x%02X | 安全等级未变更0x%02X",
      reqValidate.Response.Data[0], 
      reqSecCheck.Response.Data[0]);
  } else {
    testCaseFailEx("安全机制失效", 
      "通信状态:0x%02X→0x%02X | 安全等级:0x%02X→0x%02X",
      gTestEnv.originalCommState, reqValidate.Response.Data[0],
      gTestEnv.secSessionLevel, reqSecCheck.Response.Data[0]);
  }
}
 
//  超时处理 
on timer gTestEnv.securityMonitor {
  testCaseFailEx("响应超时", "安全策略响应延迟超过1500ms");
}
 
//  主测试逻辑 
testcase TC2805_SecurityAccessValidation() {
  testCaseBegin("TC2805 安全访问未授权操作验证");
  
  // █ 阶段1:环境初始化(确保处于非安全会话)
  canFlush(1);                            // 清空总线缓存
  CaptureSecurityStatus();
  
  // █ 阶段2:发送未授权请求 
  byte illegalRequest[] = {kCommCtrlService, kSubFunc, 0x01};
  diagSendRequest(illegalRequest);
  testStepPass("未授权请求发送", 
    "报文内容:%02X %02X %02X", 
    illegalRequest[0], illegalRequest[1], illegalRequest[2]);
  
  // █ 阶段3:启动安全监控 
  gTestEnv.securityMonitor.set(1500);
}

三、测试数据验证矩阵

验证维度预期结果验证方法
否定响应码0x7F 0x28 0x33诊断仪响应报文解析
安全会话等级保持默认等级(如0x01)0x27服务安全状态查询
通信参数配置未发生任何修改0x28服务参数回读 + 总线监听
DTC记录状态记录UDS错误码(如BFFA)0x19服务DTC扫描 + 快照分析
密钥尝试计数器未增加计数安全模块内部计数器读取

四、测试执行说明

  1. 环境配置

    [Security_Settings]
    DefaultSession=0x01          ; 初始非安全会话 
    SecurityLevels=0x03,0x05     ; 定义有效安全等级 
    MaxFailedAttempts=3          ; 最大密钥尝试次数
    
    [Test_Thresholds]
    ResponseTimeout=1500         ; 安全响应超时阈值
    AllowedRetries=0             ; 禁止自动重试机制 
    
  2. 执行命令

    canoe -testcase TC2805_SecurityAccessValidation -cfg SecurityTest.cfg -report detail 
    
  3. 预期日志输出

    [2025-05-26 20:15:30.456] TEST CASE START: TC2805 安全访问未授权操作验证
    [2025-05-26 20:15:30.458] ✔ 环境初始化 | 安全等级:0x01 | 通信状态:0x00 
    [2025-05-26 20:15:30.462] ✔ 未授权请求发送 | 报文内容:28 01 01 
    [2025-05-26 20:15:30.465] ✔ 安全拒绝触发 | 预期NRC=0x33 | 实际NRC=0x33
    [2025-05-26 20:15:30.468] ✔ 系统防护有效 | 通信状态保持0x00 | 安全等级未变更0x01
    [2025-05-26 20:15:30.470] TEST CASE PASS: 执行耗时12ms 
    

五、扩展验证建议

  1. 安全机制渗透测试

    立即拒绝
    延迟响应
    错误累积
    未授权访问尝试
    ECU响应策略
    返回NRC=0x33
    触发反暴力破解机制
    锁定安全访问
  2. 多场景覆盖方案

    • 密钥重放攻击:捕获合法密钥数据并重复发送
    • 会话跳跃攻击:未完成27 01直接发送27 05升级请求
    • 边界条件测试:在安全会话有效期最后1ms发送非法请求
  3. 安全审计增强

    // 在ECU安全模块中植入调试代码 
    SecMgr_EnableAuditTrail(true);          // 开启安全审计日志 
    SecMgr_SetDebugMode(SEC_DEBUG_FULL);    // 记录完整安全事件 
    

技术注释:

  1. 使用SecMgr_GetFailedAttempts()可获取当前密钥错误尝试次数
  2. 推荐在Dem模块中配置事件EVENT_SECURITY_VIOLATION记录非法访问
  3. 对于AUTOSAR系统,需验证Dcm_DslDiagRespSec中安全策略的映射关系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车端域控测试工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值