요약 

-    openpilot을 지원하는 자동차는 대부분 CAB-bus 를 이용해 통신하는데, 최근 생산되는 자동차는 FlexRay 프로토콜을 사용함. 

EPS를 조정하는 FlexRay 버스의 정상적인 비트를 조작하고 이를 panda 인터페이스 통해 전송하여 조향 시스템을 컨트롤 할 수 있음

- 주요 용어 설명:  

*openpilot : 오픈소스 운전자 보조 시스템으로, 적응형 크루즈 컨트롤, 자동 차선 중앙 유지 장치, 전방추돌경고, 차선 이탈 경고 등의 기능을 제공함.

*CAN-Bus(Controlled Area Network Bus) : 차량 간 데이터 공유 시 사용되는 커뮤니케이션 프로토콜

*FlexRay : Daimler, BMW, Motorola, Philips가 공동 개발한 프로토콜로 CAN 프로토콜 보다 빠르고, 안정적임. 

  유럽 자동차 브랜드 Audi, BMW, Mercedes 등이 최근 생산된 자동차에 사용되고 있음   

  특징 : 기존 CAN과 비교할 때 타이밍(timing)이 매우 엄격함

  (전자제어장치 (Engine Control Unit, ECU)가 보내는 모든 메시지의 전송 스케줄이 정해져 있음)

*Panda : OBD-II 포트에 부착하여 차량의 다수 종류의 버스(CAN/LIN 등)에 액세스/ 모니터링 가능


- 테스트 가정 : 조향에 관한 명령을 주입하기 위해서는 차선유지도움장치(Lane Keeping Assist System, LKAS)가 보내는 특정 메시지를 차단하고 

                   임의의 명령어를 삽입할 수 있음.

- 테스트 요건 

A. 대상 : 운전자 보조 패키지 탑재 Audi Q8 (*Q8은 FlexRay를 사용하는 Audi, Volkswagen사의 다른 모델과 매우 유사하나, 

                LKAS 카메라를 관리하는 운전자 보조 전자제어장치가 운전석 밑에 따로 매립되어 있는 차이점이 있음)

    *운전자 보조 패키지 : 적응형 크루즈 컨트롤, 차선유지도움장치 포함.

B. PoC :  

- 구현 목표 : EPS 모듈 쪽에 FPGA 하드웨어를 설치하고 자체적으로 특정 비트를 조작하여 CAN 메시지를 전달하면, 

                 할당된 FlexyRay 타이밍에  메시지를 전달하여 조작을 수행 

① 전자식 파워 조향장치(Electric Power Steering, EPS) 쪽의 FlexRay 버스 앞 단에 프록시 하드웨어를 설치하여 EPS 쪽으로 들어가는 

    모든 신호를 제어.

② FlexRay 메시지 리버스 엔지니어링을 통해 차선유지도움장치의 조향 명령이 프레임 ID 65에 속한다는 것을 확인 

     *Panda의 OBD-II 포트를 통해 LKAS CAN 메시지를 읽어 변경해야 하는 특정 비트를 알아내고 Bit를 만들어 보낼 수 있으나, 

     이를 통해 직관적인 조작은 불가능.

③ 일부 바이트를 조작한 패킷을 EPS로 전송 

④ 조향장치 컨트롤 성공


참고자료

출처 : hxxps://medium.com/@comma_ai/hacking-an-audi-performing-a-man-in-the-middle-attack-on-flexray-2710b1d29f3f

+ Recent posts