2013년 11월 16일 토요일

[번역] CAN 통신 해킹하기 : 차량 내 네트워크

[출처 : http://hackaday.com/2013/10/22/can-hacking-the-in-vehicle-network/]

 지난 시간에 우리는 차량 내 네트워크가 어떻게 CAN 통신 위에서 작동하는지에 대해서 논의 하였다. 이제는 그 통신 규약과 어떻게 자동차 산업에서 사용되는지에 대해서 살펴볼 것이다.

신호선로(The Bus)

 하드웨어적인 측면에서 두 가지 종류의 CAN이 존재한다: 고속 통신이 가능한 상호 반전 선로 방식(differential) 그리고 단일 선로 방식. 상호 반전 선로는 두 개의 신호선을 사용하고 1Mbps까지의 속도로 동작 가능하다. 단일 선로는 한개의 신호선위에서 동작하고 낮은 속도이지만, 저렴하게 구현할 수 있다. 상호 반전 선로 방식은 엔진 제어 같은 좀 중요한 분야에서 사용되고, 단일 선로 방식은 HVAC나 유리창 제어 같은 덜 중요한 분야에 사용된다.

 많은 제어기들은 다중-master 설정에서 동일 신호선로에 연결할 수 있다. 모든 메세지들은 신호선로를 통해 모든 제어기에 전달 된다. 

매우 단순화된 차량내 네트워크

CAN 메세지의 구조

  소프트웨어적인 관점에서 CAN 메세지는 3개의 부분으로 구성된다: 구분자(ID), 데이터 길이 코드, 그리고 8byte까지의 데이터.

 구분자(ID)는 메세지가 무엇을 의미하는지 누가 보내는 것이지를 지정하는데 사용된다. 보통은 표준 ID들은 11bit이지만, 29bit의 확장된 형태의 ID도 있다. ID는 또한 우선 순위도 정의한다. ID 값의 낮고 높음이 메세지의 우선순위가 된다.

 데이터이 길이 코드(DLC)는 4bit이고 메세지에 얼마나 많은 byte가 있게 될 것이지를 지정한다. 어떤 분야에서 8값을 갖는 DLC가 항상 사용되고 사용되지 않는 byte들은 0값으로 채워지곤한다. 

 마지막으로 8byte의 데이터는 실제적으로 정보를 포함한다. 정보의 의미는 메세지의 ID와 DLC에서 지정되는 길이로부터 추정되어 진다. 

의미 해석과 데이터베이스 (Decoding & Databases)

 8byte의 데이터를 이해하기 위해서 제어기는 데이터를 엔진 RPM, 기름 수위, 혹은 브레이크의 위치 같은 신호로 해석한다. 각각의 신호는 8byte 이외에 정정을 위한 bit를 선택하는데 사용되어 지는 시작 bit와 마지막 bit를 갖는다. 아무런 정보가 없는 신호가 신호선로에 보내지면, 대신 모든 제어기들은 앞서 보내진 신호와 메세지의 형태에 동의하게 된다. 아래는 신호 테이블과 샘플 메세지의 도표화된 형태를 보여주고 있다.
메세지를 형성하는 CAN 신호들의 테이블

단순한 CAN 메세지의 형태

 신호들과 메세지에 동의하는 제어기를 프로그램하는데 도움이 되기 위해서 CAN 데이터베이스가 사용된다. 이 데이터베이스는 모든 메세지와 신호의 정의들을 포함하고 있다. 가장 많이 사용되는 형식은 Vector사에 의해서 제작된 사유화된 형태이지만 ASCII 코드에 기반한 DBC이다. DBC 변경도구인 CANDB++는 공짜(as in beer ?)이다. 데이터베이스들은 메세지를 해석할 수 있는 코드를 자동 생성하는데 사용된다.

 수중에 데이터베이스 파일을 넣게 되면 여러분들은 CAN 신호선을 쉽게 엿볼 수 있고 모든 종류의 데이터를 해석 할 수 있다. 단적인 예가 우리가 작성한 해킹인 운전대의 버튼을 위한 신호 엿보기(sniffed the bus for steering wheel button presses)이다. 여러분은 또한 신호선로에 속임수 데이터를 보내서 어떤 제어기 인척 만들 수도 있다. 예를 들면, 여러분은 계기판에 거짓 엔진 RPM 정보를 보낼 수도 있다.


아니야, 이 차는 8000 RPM 까지 정말로 올라 갈 수 없어.

 정상 운행중에 발생하는 통신의 대부분은 데이터베이스를 해석하는데 할여된다. 그러나, 진단 분야를 위해서 사용되어지는 특별한 통신 규약들이 있다. 다음에 우리는 이러한 통신 규약들이 어떻게 동작 하는지를 알아 보고, 그것을 가지고 어떤 재미있는 것을 할 수 있을 것이다.



댓글 없음:

댓글 쓰기