mir.pe (일반/밝은 화면)
최근 수정 시각 : 2023-08-11 00:14:47

CAN(통신)


1. 개요2. 배경지식
2.1. Bit2.2. 데이터 프레임2.3. 에러 제어
3. 공격과 방어
3.1. 취약점
3.1.1. 데이터 프레임 위변조3.1.2. Bus-off 공격
3.2. 방어
3.2.1. 침입탐지시스템 (Intrusion Detection System; IDS)3.2.2. 인증 (Authentication)
[clearfix]

1. 개요

CAN: Controller Area Network, 통상 CAN Bus라고 표기한다.

TTA 정보통신용어사전에서는 계측 제어기 통신망이라고 번역된다.

1983년 독일 보쉬사에 의해 개발이 시작되어 1986년 SAE(Society of Automotive Engineers)[1]에서 정식 공개된 이래 현재 대부분의 자동차에서 사용되는 표준 통신 규격. 호스트 컴퓨터 없이 마이크로컨트롤러와 각종 장치들이 상호간에 통신할 수 있도록 설계된 메시지 기반 멀티플렉스 프로토콜로서, 1991년 2.0 규격이 발표되었고, 1993년 ISO에 의해 국제표준으로 등재되어 관리되고 있다[2]. 현재는 자동차 이외에도 각종 산업기계나 의료기기, 엘리베이터 등 다양한 분야에서 필요에 따라 사용되고 있다.

CAN Bus를 활용할 수 있는 컨트롤러 칩은 1987년 인텔에 의해 처음으로 개발되었고, 같은 해에 필립스도 제품을 내놓았다. 완성차에는 1992년 독일 벤츠 6세대 S클래스인 W140에 처음으로 적용되어 출시되었다.

CAN Bus는 OBD-Ⅱ의 5가지 프로토콜 중 하나로 지정되어 미국에서는 1996년부터 자동차 제작시 필수사항으로 적용되고 있으며, 유럽에서는 EOBD에 포함되어 휘발유 차량은 2001년부터, 경유 차량은 2004년부터 필수사항으로 적용되고 있다.

다만, 테슬라등 신생 자동차 회사들의 전기자동차 OTA 등의 기술을 자동차에 적용하고 성능 개량과 기능 확장을 용이하게 하기 위해 CAN Bus보다 대용량 데이터 전송과 와이어링 하네스 설계에 유리한 이더넷 등의 통신 프로토콜을 함께 사용하는 것으로 알려져 있다.

2. 배경지식

2.1. Bit

CAN 프레임은 1개 이상의 bit로 구성된다. Bit는 Dominant bit (0)와 Recessive bit (1) 으로 나뉘며, 각각 전기적 High voltage (5V) 와 Low voltage (0V) 에 대응한다. Dominant bit와 Recessive bit가 모종의 이유로 동시에 bus에 전송되는 경우, bus에 Dominant bit만이 관찰된다. 5V > 0V이기 때문이다.
(정확히는 CAN-H와 CAN-L의 차동 전압이 측정/이용된다.)

2.2. 데이터 프레임

파일:can_dataframe_desc.png

CAN ID는 두 가지 기능을 가진다: (1) 데이터 프레임의 우선순위를 결정하고 (2) 데이터 필드에 어떤 정보가 있는지 메타적으로 기술한다. 두 데이터 프레임이 동시에 전송되는 경우 CAN ID가 낮은 쪽(i.e., 더욱 많은 Dominant bit로 시작하는 CAN ID를 가진 쪽)이 우선권을 가진다. 상기 전기적 특성으로 이 우선권은 물리적으로 보장된다.

DLC필드는 Data field의 길이가 얼마인지 나타내는 필드이며, Data field에는 차량을 제어하기 위한 실제 값이 들어간다. 예를 들면, 조향핸들의 위치, 자동차의 기울기, 브레이크 페달의 위치, 남은 연료량 등이 Data field에 담겨 전송된다.

이외 필드는 CAN 표준에 의해 자동적으로 계산된다.

2.3. 에러 제어

Bus 토폴로지에서는 2개 이상의 노드가 동시에 프레임을 전송할 수 있다. 이런 경우, 어떠한 프레임도 제대로 전송되지 않으므로 CAN 표준은 에러카운터 개념을 도입하여 프레임 충돌(= 에러)을 제어하는 방법을 명시하였다. 또한, 에러가 단기간 내에 많이 발생하는 경우, CAN bus의 정상적인 운용이 어려워지므로, 에러카운터가 특정 임계를 넘어설 때마다 노드는 스스로를 네트워크로부터 3개의 state를 거쳐 점진적으로 분리시켜나간다.

(1) Error Active State: 노드가 프레임[3] 송신 시 타 프레임과 충돌이 발생한 경우 Transmit Error Counter (TEC)가 8 상승하고, Active Error Frame(i.e., 6개의 Dominant bits와 8개의 Recessive bits) 을 전송한다. 마찬가지로, 수신과정에서 충돌이 발생하는 경우 Receive Error Counter (REC)가 1 상승한다. TEC는 송신 성공 시, REC는 수신 성공 시 값이 1 감소한다.

(2) Error Passive State: 만약 TEC 또는 REC가 128 이상인 경우, 노드는 송신 시 충돌이 발생하여도 더 이상 Active Error Frame을 보내지 않는다. 대신, 14 개의 Recessive bits로 구성된 Passive Error Frame을 보낸다.

(3) Bus-off State: TEC 또는 REC가 255를 초과하는 경우, 노드는 CAN bus로부터 스스로를 분리하고 더 이상 bus에 아무런 메시지를 보내지 않는다.

예외적으로, CAN ID 전송과정 중 일어난 충돌은 에러카운터를 증가시키지 않는다. 해당 충돌은 에러가 아닌 기능이기 때문이다.

3. 공격과 방어

CAN bus가 가진 취약점과 해당 취약점의 방어방법을 기술한다.

3.1. 취약점

하기 취약점은 CAN bus의 노드(i.e., ECU)가 이미 공격자에 의해 장악되었을 경우 발생할 수 있는 취약점이다.

공격자는 ECU 카오디오 헤드유닛의 취약점을 이용하여 카오디오의 Bluetooth 또는 Wi-Fi를 통해 지근거리 및 원격으로 ECU를 장악할 수 있다.[4][5] 텔레매틱스가 설치된 차량이나 CAN 통신을 통해 정보를 불러오는 기능을 지원하는 헤드유닛을 사용한다면 주의해야 할 것이다.

3.1.1. 데이터 프레임 위변조

CAN bus에서는 모든 노드(i.e., ECU)가 마스터노드로서 기능하며, 데이터 프레임 전송 노드에 대한 인증이 부재하다.

다시말해, 어떠한 노드라도 원하는 모든 메시지(예컨데, 크루즈 컨트롤 설정 관련 메시지)를 보낼 수 있는 셈이다.

따라서, 공격자가 CAN bus 노드 중 어느 하나를 장악한다면, 브레이크, 엔진, 또는 변속기와 같은 노드들이 보냈어야 하는 하는 메시지를 장악된 ECU가 위변조해냄으로써 자동차를 사고로 이끌 수 있다 [6].

3.1.2. Bus-off 공격

이외에도, CAN 표준 자체의 설계결함으로 발생한 취약점인 Bus-off공격이 있다. [7][8]

공격방식은 공격자 노드가 피해자 노드와 동시에 동일한 CAN ID와 Dominant bit로만으로 구성된 Data field를 가진 데이터 프레임을 전송하는 행위를 반복하는 것이다.

공격자와 피해자 노드의 프레임이 동시에 전송되었으므로, 두 노드 모두 충돌을 감지하고 송신을 중단하며, Active Error Frame을 즉시 송신하고 TEC가 8 증가한다. 이때, 공격자는 Data field에 Dominant bit만을 채워넣었기 때문에 매 번 피해자 노드의 TEC가 먼저 증가한 뒤 공격자 노드의 TEC가 증가한다. 이 과정을 충분히 반복하면 피해자 노드의 TEC가 먼저 128을 초과하게 되고, Error Passive State가 되어, Active Error Frame 대신 Error Passive Frame을 보내게 된다. Error Passive Frame은 Recessive bit로만 이루어져있기 때문에 공격자 노드의 데이터 프레임은 송신에 성공하며, TEC가 1 감소한다. 계속 반복하면, 프레임 충돌이 발생할 때 마다 공격자 노드는 TEC가 1 감소하고, 피해자 노드는 꾸준히 TEC가 8씩 증가한다. 결국 피해자 노드의 TEC는 꾸준히 증가하고, 그 값이 255를 초과하는 시점에 Bus-off 상태가 된다.

3.2. 방어

상기 공격들을 막는 가장 좋은 방법은 어떻게든 CAN 표준에 송신자 인증 기능을 추가하는 것이다. 하지만 표준을 수정하고, 수정된 표준에 따라 ECU를 다시 제조하고 배포하는 일련의 과정은 상당히 높은 비용을 필요로 한다.

따라서, 표준을 수정하는 방법 대신 Intrusion Detection Syetem( IDS)를 이용하는 방법과 CAN 표준을 지키면서 인증기능을 추가하는 방법이 소개되어 왔다.

3.2.1. 침입탐지시스템 (Intrusion Detection System; IDS)

IDS는 ECU의 회로적 특성을 이용한 방법이 주목받고있다[9].

첫 번째 방법은 CAN 프레임의 전위차를 이용하는 것이다.

Bit를 CAN bus에 송신하기 위해서는 두 전선에 전위차를 발생시키는 회로가 필요하다. 하지만, 같은 Dominant bit라 하더라도, 개별 ECU마다 사용된 회로와 소자가 다르며, 같은 소자여도 품질에 따른 오차가 존재하기 때문에 실제로는 정확히 5V의 전위차를 낼 수 없다. 이 오차는 회로적 특성에 기인하므로, 오차와 CAN 데이터 프레임간의 상관관계를 도출할 수 있다. 만약 어떠한 CAN Frame이 CAN ID에 해당하는 오차를 내지 않으면서 Frame을 전송한다면, 공격으로 간주하는 방식이다. [10] [11]

두 번째 방법은 데이터 프레임의 전송주기 오차를 이용하는 것이다.

많은 데이터 프레임은 주기적으로 전송된다. 이 때 '주기'는 ECU가 클럭으로 계산해내는데, 클럭은 크리스털에 의존하므로, 크리스털의 소자적 특성으로 ECU를 구분할 수 있다. [12]

IDS는 두 가지 태생적인 한계를 지닌다: (1) 공격을 탐지할 뿐 방어할 수 없고 (2) 탐지오차(i.e., false negative and false positive)가 존재한다.

3.2.2. 인증 (Authentication)

ECU마다 고유 key를 할당하고, 데이터 프레임 전송 시 해당 key를 이용한 Hash-based Message Authentication Code (HMAC)을 계산하여 데이터 프레임을 인증하는 방식이다.

주요 챌린지는 다음과 같다. 모든 챌린지를 효과적으로 해결한 시스템은 아직[13] 없다.

(1) key를 어떻게 분배하고 업데이트 할 것인가?
(2) HMAC은 어떻게 전송할 것인가?
(3) 기존 차량의 ECU 펌웨어들을 어떻게 패치할 것인가?
(4) 기존 ECU에 적용가능한 기술인가?
(5) Hash 계산에 따른 성능저하가 용납가능한 수준인가?
(6) Replay Attack 등에 내성이 있는가?
(7) CAN 표준과 호환되는가?
(8) CAN의 상위 레벨 프로토콜(e.g., J1939[14])과 호환되는가?


[1] https://www.sae.org/ [2] https://www.iso.org/standard/63648.html [3] 유의: 에러 프레임을 포함한 등 모든 프레임이 해당 [4] Matteucci G.Costantino. 2020. KOFFEE - Kia OFFensivE Exploit Attack Surface in Automotive IoT. https://sowhat.iit.cnr.it/pdf/IIT-20-2020.pdf [5] Haohuang Wen, Qi Alfred Chen, and Zhiqiang Lin. 2020. Plug-N-Pwned: Comprehensive Vulnerability Analysis of OBD-II Dongles as A New Over-the-Air Attack Surface in Automotive IoT. In 29th USENIX Security Symposium (USENIX Security 20). USENIX Association, 949–965. https://www.usenix.org/conference/usenixsecurity20/presentation/wen [6] K. Koscher et al., "Experimental Security Analysis of a Modern Automobile," 2010 IEEE Symposium on Security and Privacy, 2010, pp. 447-462, doi: https://doi.org/10.1109/SP.2010.34. [7] Kyong-Tak Cho and Kang G. Shin. 2016. Error Handling of In-vehicle Networks Makes Them Vulnerable. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security (CCS '16). Association for Computing Machinery, New York, NY, USA, 1044–1055. DOI: https://doi.org/10.1145/2976749.2978302 [8] Khaled Serag, Rohit Bhatia, Vireshwar Kumar, Z. Berkay Celik, and Dongyan Xu. 2021. Exposing New Vulnerabilities of Error Handling Mechanism in CAN. In 30th USENIX Security Symposium (USENIX Security 21). USENIX Association. https://www.usenix.org/conference/usenixsecurity21/presentation/serag [9] ~2021 S&P, CCS, NDSS, Usenix Security 등재 기준 [10] Kyong-Tak Cho and Kang G. Shin. 2017. Viden: Attacker Identification on In-Vehicle Networks. In Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security (CCS '17). Association for Computing Machinery, New York, NY, USA, 1109–1123. DOI: https://doi.org/10.1145/3133956.3134001 [11] Kneib, Marcel, Oleg Schell, and Christopher Huth. "EASI: Edge-Based Sender Identification on Resource-Constrained Platforms for Automotive Networks." NDSS. 2020. [12] Kyong-Tak Cho and Kang G. Shin. 2016. Fingerprinting electronic control units for vehicle intrusion detection. In Proceedings of the 25th USENIX Conference on Security Symposium (SEC'16). USENIX Association, USA, 911–927. [13] 2021년 12월 13일 기준 [14] https://www.iso.org/standard/33467.html