개요
자동차 내부 네트워크의 구성요소를 공부 후, 네트워크에 침투하는 방법과 침투 후의 공격 시나리오, 이에 대한 방어 방법에 대해 알아본다.
자동차 내부 네트워크 구성요소
①ECU( Electronic Control Unit) ②CAN(Controller Area Network)
①ECU( Electronic Control Unit)
ECU는 자동차를 전자적으로 제어하기 위해 사용되는 임베디드 장치이다. 차량 내에서 엔진 및 변속기 제어, 에어컨과 오디오와 같은 편의 기능 제공 등을 위해 ECU가 필요하다. 차량 내부에는 휠의 회전속도, 타이어 압력 등 컴퓨터들끼리 공유해야 할 정보들이 있다. ECU 들끼리 더욱 많은 연결이 필요해짐에 따라 복잡한 배선, 배선 무게 증가, 통신포트의 물리적 개수 제약 등의 문제가 발생하였다. 이를 해결하기 위해 중앙에 통신할 수 있는 하나의 선을 두고, 그 하나의 네트워크를 통해 모든 ECU들이 통신할 수 있게 설계한 CAN Bus Connection 기술이 개발되었다.
②Controller Area Network(CAN) 작동 방식
비트 만들기
Recessive bit(1) : 차등전위 없음. 명목 0V(기술적 한계로 0 ~ 0.5V)
Dominant bit(0) : 차등전위 있음. 명목 2V(기술적 한계로 1.5V ~ 3.5V)
이 비트들이 모여 CAN Data Frame을 만든다.
CAN Data Frame
Data 필드에 필요한 정보들이 담긴다. 64비트로 담을 수 있는 정보량이 적다.
차량 내부 네트워크 침입 방법
CAN Bus은 모든 ECU가 함께 연결되어 있어서 CAN Bus에서 송신하면 다른 모든 ECU가 그 메세지를 수신한다는 것과 송신자 인증이 부재하다는 보안 상 취약점이 있다. 예를들면 아무나 "나 문인데 문 열어줘" 하면 진짜 문인지 확인하지 않고 실행한다. 따라서 CAN Bus 내에 해킹된 장비 하나(침입조건)만 있으면 모든 ECU를 컨트롤 할 수 있다. 침입조건을 실행하는 방법에는
①OBD-ll 포트를 통한 침입
Can Bus에 연결되어 있고, ECU 업데이트 등에 사용되는 장비이다. 이 포트에 하드웨어장치(USB2CAN, Macchina M2,CLX000 등)를 연결하여 CAN Bus에 침입할 수 있다.
이 방법의 문제점은 침입자가 물리적으로 자동차 내부에 진입해야 한다는 점이다. 이 문제점을 해결하기 위해 원격으로 CAN Bus에 침입하는 방식이 개발되었다.
②OBD-ll 블루투스 동글 원격 해킹을 통한 침입
자동차 주인이 자기 자동차의 문제점을 파악하기 위해 혹은 보험사 운전 등급을 위해 OBD-ll 블루투스 동글을 꽂으면 근처의 공격자가 그 장치를 해킹하여 CAN Bus에 침입할 수 있다.
③Head-unit 원격 해킹을 통한 침입
Head-unitt 펌웨어 업데이트 시 공격자가 원하는 펌웨어로 업데이트하게 함으로써 침입한다. 다른 방법으로는 Head-unit의 브라우저 취약점을 이용할 수도 있다.
④자동차 공기압 센서 원격 해킹을 통한 침입
자동차 공기압 센서는 RF로 통신한다. 따라서 RF를 해킹하여 CAN Bus에 침입할 수 있다.
이제 침입조건은 만족한 상태이다. 이후의 공격 방법에 대해 알아보자
차량 네트워크 침입 후의 공격 방법
①다른 ECU인 척 하며 메시지 보내기
②메세지 계속 보내서 CAN Bus 점유하기(DoS - frame level)
CAN Bus가 한번에 통신할 수 있는 메세지의 개수는 정해져 있는데, 여기에 계속 메세지를 보내면 정작 다른 ECU들에 필요한 정보가 전달되지 못해서 자동차를 제대로 제어하지 못 하게 된다.
③0-1bit를 CAN 표준 bit보다 빠르게 계속 보내서 CAN Bus 점유하기(DoS - bit banging)
통신할 때 CAN Bus와 UART를 같이 쓰는 MCU 핀이 있을 때, 이 MCU의 CAN 전용 모드의 핀을 UART 모드로 바꿔서 CAN에서 줄 수 없는 주기로 bit를 CAN Bus에 전달한다.
④bus-off
ECU 1이 0을 전송하고 동시에 ECU 2가 1을 전송하면 0이 이기므로 ECU 2가 에러를 낸 것으로 판단하고 ECU 2의 에러카운터를 1 증가시킨다. 에러카운터가 많이 쌓인 ECU는 스스로 CAN Bus로부터 자가 격리시킨다. 공격자가 이를 이용해 특정 ECU의 에러카운터를 증가시켜 이 ECU를 CAN Bus에서 격리시킬 수 있다. 그럼 이 ECU는 작동불능이 된다. 이 공격 방법은 광역이 아닌 특정 ECU가 대상이다.
차량 네트워크 공격에 대한 방어 방법
①Hash-based Message Authentication Code(메세지가 변조되지 않았다는 것을 인증하는 코드)
전송 ECU와 수신 ECU가 공유하는 HMAC을 CAN Data Frame의 Data 필드에 넣어서 보내면 수신 ECU에서 HMAC이 일치하는지 확인하여 일치하는 CAN Data Frame의 메세지만 실행하는 방식이다. 이때 Data 필드의 크기가 64bit 밖에 안 되기 때문에 HMAC과 메세지가 한 개의 CAN Data Frame의 Data 필드에 같이 들어가기 보다는 보통 각각 하나의 CAN Data Frame의 Data 필드에 들어간다. 이러면 문제점이
- 하나의 정보를 전달하기 위하여 두 개의 CAN Data Frame이 필요하므로 CAN Bus에 부하가 걸린다.
- 메세지를 실행하기 전 HMAC을 확인하는 과정에서 시간이 걸리므로 브레이크와 같이 즉시 실행해야 하는 메세지의 경우 HMAC을 확인 할 시간적 여유가 없다.
- ECU는 임베디드 시스템이므로 HMAC을 확인하기 위한 컴퓨팅 파워가 부족한 경우가 많다. 따라서 HMAC 확인 과정이 오래 걸려서 메세지를 실행하기 까지의 시간이 오래 걸린다.
- HMAC 자체도 계속 업데이트 해줘야 하고, ECU가 여러개 이므로 HMAC의 개수 자체도 많아서 관리가 힘들다.
이 3가지 문제점을 모두 해결했다 하더라도 막을 수 있는 공격은 "①다른 ECU인 척 하며 메시지 보내기" 밖에 없다.
② CAN Bus 전위차의 노이즈의 패턴을 사용하여 감지(Physical characteristics IDS)
CAN Bus 전위차의 노이즈의 패턴을 통해 어떤 ECU가 보냈는지 확인하여 정식 ECU가 아닌 것으로 판정되면 해당 메세지는 실행하지 않는 방식이다. 자동차는 오탐, 미탐이 발생하면 안되는데 이 방식은 오탐, 미탐의 확률이 존재한다는 문제가 있다. 또한 " 0-1bit를 CAN 표준 bit보다 빠르게 계속 보내서 CAN Bus 점유하기(DoS - bit banging) " 공격은 막지 못 한다.
따라서 실제로 적용하기가 힘들다.
③ Clock 오차의 누적값 사용하여 감지(Physical characteristics IDS)
이 방법 역시 오탐, 미탐의 가능성이 존재하고, 모든 공격을 막을 순 없다.
④ 모든 ECU 앞에 물리적 IPS 달기
IPS가 방화벽 역할을 하여 이 ECU가 보내도 OR 받아도 되는 CAN Data Frame인지 체크해준다.
다만 이 방법은 " ②메세지 계속 보내서 CAN Bus 점유하기(DoS - frame level)" 공격은 막지 못한다. 이 공격 방법은 해킹된 ECU에서 보내면 안 되는 메시지를 보내는게 아니고, 보내도 되는 메시지를 좀 빠르게 계속 보내는 것이기 때문에 IPS에서 막을 수 없기 때문이다. 또한 IPS를 여러개 달면 비싸고 무거워지는 문제가 발생하고, IPS자체가 해킹당하는 문제가 발생할 수도 있다.
결론적으로 일단 침입자가 CAN Bus 내부에 침입한 후에는 모든 공격을 완벽히 막을 수 있는 방법이 현재 없다. 공격의 수준은 과거에 비해 월등히 높아진 반면, 방어는 현재 구현된 것이 없다.