개요
2016년 미국 미시건 주립대학에서 CAN 프로토콜의 오류 처리방식을 악용한 DoS공격을 공개하였다.
CAN Dos Attack : 일반 TCP/IP기반의 DoS(Denial of Service) 공격과는 매커니증이 다르지만,
대상 디바이스가 제 기능을 하지 못하는 만들어 버리는 공격의 목표는 동일하다.
해당 공격은 CAN 프로토콜의 설계상의 취약점을 이용한 공격이다. CAN은 ISO에서 국제표준규격으로 제정하였으며, 현재는 차량에서 CAN을 사용하지 않는 차는 드물 정도로 차량에서는 표준으로 자리잡고 있다. 즉, 거의 모든 차량에 해당 공격이 적용된다.
브로드캐스트 통신 + 인증 필드 부재
CAN 네트워크에서 데이터 전송은 우리가 기존에 알고 있는 TCP/IP와 차이점이 있다.
IP Header에서는 Source IP와 Destination IP가 있지만 CAN 메시지에서는 Source IP와 Destinaion IP 대신에 Identifier(ID)로 판단하게 된다. 즉 IP 대신에 Identifier(ID)기반으로 메시지를 전송한다.
수신도 동일하게 ID기반으로 메시지 수신하며, 이때 수신 에는 미리 Filter라는 구성하여 자신이 받을 ID값의 범위 또는 특정 ID값만을 지정하여 수신한다.
즉 송신자가 메시지 송신 시, 해당 메시지의 수신자를 정하는 것이 아니라 , CAN 버시에 연결된 통신에 참여하는 노드에서 본인이 설정한 ID Filter에 따라 메시지를 수신한다. 애니캐스트 방식으로는 전송할 수 없고 브로드캐스트 방식으로만 전송할 수 밖에 없는 구조가 된다.
또한, CAN Message Format에서 보다시피 인증해주는 필드가 없다. 즉, 이 메시지를 누가 보냈지는지 알 수 없으며, 메시지를 누가 보내던지 의심 없이 수신하게 된다.
모든 ID값을 수신하는 필터를 구성한 디바이스를 CAN bus에 연결하면 CAN 네트워크상에서 돌아다니는 모든 메시지를 볼수 있다.
즉, 스니핑이 가능하다 CAN bus에 연결하는 방법은 간단하다. 자동차 내부에는 OBD Port를 장착하도록 의무화 되어있다.
즉, 이 OBD-Port에 연결하기만 한다면 CAN bus에 연결이 되는 것이다.
보안 게이트웨이가 장착된 최신 차량에서는 OBD Port에 연결을 한다고 해서 CAN 메시지들을 스니핑할 수 없다.
CAN 통신 프로토콜 특성
CAN Bus Off 공격이 가능한 이유이자, CAN 통신 프로콜의 특성은 다음과 같다.
- 버스형 구조 CSMA/CD + AMP(Arbitration Message Piroiry)
CAN 네트워크는 BUS형 구조로 통신한다. BUS형은 단일 케이블에 의해 각 노드들이 연결되어 있어 만약 서로 다른 두 노드가 동시에 데이터를 보내게 되면 충돌이 발생하게 된다.
이때, CAN은 Arbitration(중재)를 해주게 되는데 메시지 우선순위를 기반으로 중재한다. CAN Message Format을 보면 Arbitration Field에 Identifier(ID)가 있다.
이 ID값이 낮을수록 메시지의 우선순위가 높아지고 먼저 전송하게 된다.
요악 하면
1. 각 노드는 데이터 송신 전 버스가 사용 중인지 파악한다.
2. 만약 버스가 사용 중이라면 전송하지 않는다.
3. 동시에 두 개 이상의 노드에서 메시지를 보내게 되어 충돌하게 될 경우, 두 메시지 중 우선순위가 높은, 즉 CAN ID값이 더 낮은 메시지만 전송된다.
실제로 Node A, Node B, Node C가 비트단위로 데이터를 전송하고 있고 각 노드들은 CAN bus상에 흘러 다니는 비트(출력 비트)를 감지한다.
이때, 비트 단위로 비교하면 0과1 두 수를 비교하게 되는데 값이 더 낮을수록 우선순위가 높아지게 되어 첫번째로 Node C가 우선순위에서 밀려 전송을 중단하고 두번째로 Node B가 우선순위에서 밀려 데이터를 중단한다.
Bus Off 공격 방법
조건
1. 공격할 디바이스의 CAN ID를 미리 알고 있어야한다.
2. 공격할 디바이스와 동시에 메시지를 전송해야한다.
3. CAN ID까지는 같아야 하며, DLC와 Data Filed 비트중 단 한 비트라도 1(Recessive)을 0 (Dominant)으로 바꿔야 한다.
공격하고자 하는 CAN ID를 미리 알아야 해당 디바이스를 Bus Off 상태로 유발시킬 수 있으며, 중재에서 살아남은 동일 CAN ID를 가지는 메세지가 동시에 전송되려고 할 때, 서로 다른 비트를 전송해야 Bit Error를 유발시킬 수 있기 때문이다.
공격 대상 노드가 CAN 메시지를 전송하기 전에 먼저 전송되는 메시지를 스니핑을 통해 알아낸다.
예를 들어, 공격 대상 노드가 전송하는 CAN 메세지의 CAN ID는 0x123이고, 해당 메시지가 전송되기 전에는 항상 0x103이라는 ID를 가진 메시지가 전송된다, 이떄, 0x123의 선행 ID는 0x103이 된다.
선행 ID를 알아낸 후에는 ,해당 선행 ID가 수신된 직후에 바로 공격 대상 노드가 전송하는 CAN 메시지를 비트를 다르게 전송하면 된다.
즉 공격 대상 노드가 전송하는 CAN 메시지의 DLC가 8이라면, 공격자는 DLC를 0으로 전송을 시도한다면, 0x123이라는 CAN ID를 가진 메시지가 동시에 서로 다른 비트를 전송하려고 하기 때문에 Bit Error가 발생할 것이다.
에러 처리
CAN 프로토콜의 에러 처리 매커니즘을 통해 디바이스들이 Bus off 상태가 될 수 있다. CAN 표준에서는 5가지의 에러 유형이 있지만 Bus off 공격에 필요한 에러 유형만 보자
Bit Error : 전송한 데이터와 CAN bus상의 데이터가 다른 경우 발생하는 에러 Stuff Error : 연속된 동일한 극성의 5비트가 전송되면 에러로 판단
CAN Bus에 연결되어 있는 디바이스들은 각각 자신들이 전송한 메시지에 CAN bus상의 출력된 메시지를 비교하여 다르면 Bit Error가 발생하게 된다.
이때, 디바이스가 해당 메시지가 Bit Error가 발생하는 것을 알게 되면 해당 메시지는 에러라는 것을 다른 디바이스들에게 알리기 위해 아래와 같이 Error Frame Message를 전송하게 된다.
Error Frame Message를 전송하면 해당 디바이스는 TEC(Transmit Error Count)가 증가하게 되며 TEC가 255 이상이 되면 Bus off 상태가 된다.
Node A와 B가 동일한 CAN ID를 구성하고 Node B가 DLC 비트 하나를 0으로 바꿔 전송하면 Node A는 자신이 보낸 데이터와 CAN Bus 상의 데이터를 비교하여 다르다는 것을 알아채고 즉시 Error Frame Message를 전송하여 TEC 값이 8이 증가하게 된다.
그럼 TEC가 255까지 되는 과정을 자세히 보면 모든 디바이스의 초기상태는 Error Active 상태이다.
Node A에서 Bit Error가 발생하여 Error Frame Message를 보내는데 Error Active 상태에서는 연속적인
0 (dominant bit)이 채워진 Error Flag가 포함된 Error Frame Message를 전송한다.
그럼 Node B는 동일한 극성으로 5개의 비트가 연속으로 보내져 Stuff Error인 것을 감지하게 되고 마찬가지로 Error Frame Message를 보낸다.
이 과정이 계속 반복되어 Node A,B 모두 TEC가 128까지 증가한다. 왜냐면 CAN 네트워크에서는
에러 발생 시 재전송하게 끔 설계되어 있기 때문이다. 그렇기에 단 한번의 조작된 CAN 데이터 전송으로 TEC가 128까지 올라간다.
TEC가 128 이상부터는 Error Passive 상태로 변하게 된다. Error Passive 상태는 에러 비활성화 상태이다. CAN 네트워크는 특성상 0 (dominant bit)을 계속 보내게 되면 가장 먼저 전송할 수 있게 된다.
그렇다면 Error Frame Message를 계속 보내게 된다면 CAN 네트워크 전체에 영향을 줄 수 있다.
네트워크 부하를 막고자 CAN은 Error Passive 상태를 지원하며,
연속적인 0(dominant bit)이 아니라 연속적인 1 (recessive bit)로 보낸다.
Error Passive 상태에서는 Error를 감지하면 Passive Error Flag를 전송하게 되는데 해당 Error Flag는
다른 노드에는 전혀 영향을 주지 않으므로 결과적으로 Attakcer는 전송에 성공하게 되고 TEC가 1이 감소하고 다시 Error Active 상태로 돌아가게 된다.
Victim은 공격자가 전송에 성공하여 재전송을 하지 않거나 위의 IFS간격이 달라져 전송에 성공하게 되어 TEC가 1이 감소된다. 이런식으로 Attacker는 계속 Victim이 Error Flag를 보낼 수 있게 조작된 메시지를 전송한다면 136 -135 - 143 - 142 -149 계속 증가하게 되어 Bus Off 상태를 유발 시 킬수 있게 된다.
결론
해당 공격은 CAN의 설계상의 취약점을 이용한 공격이고 이러한 공격에 대한 패치할 수 있는 방법이 없기 때문에 위험도가 높다. 또한 CAN bus에 연결되어야 공격이 가능한 로컬 공격이지만, 카풀 or 렌트 등으로 접근할 수 있는 가능한 많은 상황이 존재
참조
'Vehicle security' 카테고리의 다른 글
FlexRay (1) | 2024.06.23 |
---|---|
V2X (0) | 2024.06.23 |
LIN Network (0) | 2024.06.23 |
CAN Protocol - 실습 [2] (0) | 2024.06.23 |
CAN Protocol - ICSim 실습[1] (0) | 2024.06.23 |