Without a Break

CAN 통신 본문

Network/자율주행

CAN 통신

와븨 2023. 4. 4. 23:57

CAN(Controller Area Network)이란?

차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격

 

CAN 통신의 이해

특징

  • 노드의 주소에 의해 데이터가 교환되는 것이 아니라 메시지의 우선순위에 따라 ID(IDentifier)를 할당하고, 이 ID를 이용해 메시지를 구별하는 방식을 사용
  • 자신에게 필요하다면 받아들이고, 아니라면 무시
  • 메시지 전송 시, 에러가 감지되면 자동적으로 해당 메시지를 즉시 재전송
  • 실시간으로 결함이 있는 노드를 감지해 해당 노드를 비활성화 함으로써 네트워크의 신뢰성을 보장
  • 메시지 충돌 시 우선순위가 높은 메시지(이 때, 더 낮은 ID 번호가 더 높은 우선순위를 가짐)가 먼저 전송
  • 꼬인 2선(Twist Pair Wire, *CAN_H, CAN_L)을 이용 → 전기적으로 차별되는 통신 을 하여 전기적 노이즈에 매우 강함
  • 다중통신망이며 CSMA/CD+AMP(Carrier Sense Multiple Access/Collision Detection with Arbitration on Message Priority) 방식 을 이용

 

구성

CAN 메시지는 11비트의 식별자(CAN 2.0A), 또는 29비트의 식별자(CAN 2.0B)를 가지며, CAN 메시지의 맨 처음 시작부분에 위치

 

CAN 프로토콜 규격

1. CAN 메시지에 있는 식별자(ID)의 길이에 따라 2가지 모드로 구별

  • 표준 CAN(버전 2.0A): 11비트 식별자
  • 확장 CAN(버전 2.0B): 29비트 식별자

2. ISO 규격에 따라 2가지로 구분 (통신 속도에서 차이가 있음)

  • ISO 11898: 1Mbps 이상의 고속 통신 가능
  • ISO 11519: 125Kbps 까지의 통신 가능

CAN 2.0A 컨트롤러는 오직 표준 CAN 포맷의 메시지만 전송 및 수신이 가능하며, 확장 CAN 포맷(CAN 2.0B)의 메시지를 수신하더라도 그 메시지를 무시함 => CAN 2.0A 컨트롤러에서 보내온 메시지 데이터만 유효합니다. 

 

CAN Controller는 내부 버퍼를 가지며 Transceiver에서 전달되는 수신 메시지에 대해 유효한 데이터인지 아닌지를 ID기반으로 판별한 후 유효한 데이터인 경우 MCU로 전달함

 

 

메시지 충돌하는 경우

CAN 네트워크는 BUS형 구조로 통신

  • BUS형은 단일 케이블에 의해 각 노드들이 연결되어 있어 만약 서로 다른 두 노드가 동시에 데이터를 보내게 되면 충돌이 발생

CAN은 우선 순위를 기반으로 중재(Arbitration)

  • CAN Message Format을 살펴보면 Arbitration Field에 Identifier(ID)값이 낮을수록 메시지의 우선순위가 높아지고 먼저 전송

순서

① 각 노드는 데이터 송신 전 버스가 사용 중인지 파악

② 만약 버스가 사용 중이라면 전송하지 않음

③ 동시에 두 개 이상의 노드에서 메시지를 보내게 되어 충돌하게 될 경우, 두 메시지 중 우선순위가 높은(즉 CAN ID 값이 더 낮은) 메시지만 전송됨

 

취약점

  • 모든 ID값을 수신하는 필터를 구성한 디바이스를 CAN bus에 연결하면 CAN 네트워크상에서 돌아다니는 모든 메시지를 볼 수 있음 (스니핑 공격)
  • 자동차 내부에는 OBD Port를 장착하도록 의무화 되어있음 => 이 OBD-Port에 연결하기만 한다면 CAN bus에 연결이 되는 것

+ 참고 : 보안 게이트웨이가 장착된 최신 차량에서는 OBD Port에 연결을 한다고 해서 CAN 메시지들을 스니핑할 수 없음

 

CAN DoS Attack - Bus Off

CAN Bus Off 공격이 가능하게 하는 CAN의 특성

CAN네트워크는 BUS형 구조로 통신되어 충돌을 막기 위해 CAN은 메시지 우선순위 기반으로 중재를 함. 이 때, 비트 값이 더 낮을수록 우선순위가 높아지게 됨.

 

Bus Off 공격에 필요한 에러 유형

  • Bit Error : 전송한 데이터와 CAN Bus상의 데이터가 다른 경우 발생하는 에러
  • Stuff Erorr : 연속된 동일한 극성의 5비트가 전송되면 에러로 판단

 

Bus Off 공격 방법

조건

  • 공격할 디바이스의 CAN ID를 미리 알고 있어야 합니다.
  • 공격할 디바이스와 동시에 메시지를 전송해야 합니다.
  • CAN ID까지는 같아야 하며, DLC 와 Data Filed 비트 중 단 한 비트라도 1(recessive)을 0(dominant)으로 바꿔야 합니다.

위 조건을 가져야 하는 이유 : CAN ID를 미리 알아야 해당 디바이스를 Bus Off 상태로 유발시킬 수 있으며, 중재에서 살아남은 동일 CAN ID를 가지는 메시지가 동시에 전송되려고 할 때 서로 다른 비트를 전송해야 Bit Error를 유발시킬 수 있기 때문임.

 

서로 다른 비트를 전송하는 법

  1. 공격 대상 노드가 CAN 메시지를 전송하기 전에 먼저 전송되는 메시지를 스니핑을 통해 알아냄
  2. 해당 메시지가 전송되기 전에는 항상 특정 ID를 가진 메시지가 전송됨 → 이게 선행 ID
  3. 선행 ID를 알아낸 후에는, 해당 선행 ID가 수신된 직후에 바로 공격 대상 노드가 전송하는 CAN 메시지를 비트를 다르게 하여 전송 => Bit Error 발생

 

결론

Bus Off 공격은 CAN의 설계상의 취약점을 이용한 공격이고 이러한 공격에 대한 패치할 수 있는 방법이 없기 때문에 위험도가 높다. 또한, CAN bus에 연결되어야 공격이 가능한 로컬 공격이지만, 카풀 또는 렌트 등으로 접근할 수 있는 가능한 많은 상황이 존재한다.

 

 

참고

http://www.fescaro.com/kr/insight/blog.php#content

 

기술블로그 - INSIGHT - 페스카로(FESCARO) - 자동차 소프트웨어 전문기업(자동차 사이버보안, 제어기,

페스카로는 자율주행차, 전기차, 커넥티드카 등 미래차의 모든 SW솔루션을 제공합니다. 자동차 사이버보안부터 게이트웨이 제어기, V2X, SDV까지 다가오는 미래차 산업의 혁신을 주도합니다.

www.fescaro.com

http://www.fescaro.com/kr/insight/blog.php#content

 

기술블로그 - INSIGHT - 페스카로(FESCARO) - 자동차 소프트웨어 전문기업(자동차 사이버보안, 제어기,

페스카로는 자율주행차, 전기차, 커넥티드카 등 미래차의 모든 SW솔루션을 제공합니다. 자동차 사이버보안부터 게이트웨이 제어기, V2X, SDV까지 다가오는 미래차 산업의 혁신을 주도합니다.

www.fescaro.com

 

'Network > 자율주행' 카테고리의 다른 글

V2V(Vehicle to Vehicle)  (0) 2023.05.02
V2X (Vehicle to Everything)  (0) 2023.04.10
LIN (Local Interconnect Network)  (0) 2023.04.10
커넥티드카  (0) 2023.03.25
자율주행자동차  (0) 2023.03.25