책 소개
요약
최근 자동차 분야의 기술 발전은 놀라울 정도로 빠르게 변화하고 있다. 그 배경에는 IT 기술과 자동차의 결합이 가장 중요한 역할을 하고 있다는 것은 이미 많은 사람이 인지하고 있다. 하지만 그 이면에는 IT 분야에 존재하고 있던 많은 보안 위협이 자동차 분야로 전이됐고, 이에 대한 심각성이 인지되기 시작한 것은 얼마 되지 않았다. 이 책은 자동차 기술에 대한 기본 지식부터 향후 발전 방향을 소개하며, 해킹 전문가 그룹에서 오랫동안 분석한 자동차 해킹 기술에 대해 자세히 소개하고 있다. 자동차 산업 관련 전문가, 보안 전문가 또는 자동차 튜닝에 관심 있는 일반인에게 추천한다.
추천의 글
세상은 더 많은 해커를 원하고 있으며, 더 많은 자동차 해커 역시 필요로 한다. 차량 기술은 점점 더 복잡하고 연결 지향적으로 발전하고 있다. 이러한 변화들에 대처하기 위해서는 차량 보안에 대한 더 높은 관심과 더 능력 있는 전문가들이 필요할 것이다. 하지만 해커란 무엇인가? 이 용어는 많은 미디어 매체를 거치면서 의미가 변질돼 알려져 버린 용어다. 그러나 해커라는 용어의 정확한 의미는 창조하는 사람, 탐험하는 사람, 보수하는 사람(즉, 예술적으로 실험하고, 동작 방법을 이해하기 위해 시스템을 디스어셈블해서 발견해내는 사람이다)과 관련 있다. 내 경험에 비춰보면 최고의 보안 전문가(보안이 취미인 사람)들은 자연스럽게 어떤 것이 어떻게 동작하는지에 대해 관심을 갖는 사람이다. 이런 사람은 탐험하고 보수하고 실험하며 단지 발견의 재미를 위해서만 디스어셈블하고, 이런 사람이 해킹을 한다.
자동차는 매우 위협적인 해킹의 대상이 될 수 있다. 대부분의 차량에는 키보드나 로그인을 하기 위한 입력 창이 존재하지 않지만, 익숙하지 않은 프로토콜의 배열, CPU, 연결 단자, 운영체제들이 탑재돼 있다. 이 책은 차량 내의 일반적인 요소들을 분석하며, 차량 해킹 시작에 필요한 정보들과 즉시 사용 가능한 툴들을 소개한다. 이 책을 다 읽을 때쯤이면 차량은 서로 연결된 컴퓨터들의 집합이며, 바퀴는 그저 붙어있는 것일 뿐이라는 사실을 알게 될 것이다. 적절한 툴과 정보들로 무장하면 해킹을 할 수도 있음을 느낄 것이다.
이 책은 또한 열려있는 많은 주제들을 다룬다. 자동차를 비롯해서 우리가 의존하는 시스템이 조사, 검사를 통한 문서화가 가능하다면 우리는 더 안전할 것이다. 이 책을 통해 습득하는 지식을 이용하면 차량을 조사하고 검사하고 문서화할 수 있다. 독자들의 새로운 발견을 볼 수 있기를 기대한다.
이 책에서 다루는 내용
■ 차량에 대한 위협 모델링 수립
■ CAN bus 리버스엔지니어링(Reverse Engineering) 기술을 통한 엔진 신호 조작
■ 진단 및 데이터 로깅 시스템의 익스플로잇(Exploit) 공격
■ ECU, 펌웨어, 임베디드 시스템 해킹
■ 인포테인먼트(Infotainment)와 V-to-V 통신 시스템의 익스플로잇 공격
■ 성능 튜닝 기법을 이용한 차량 출하 시 설정 변경
■ 물리적/가상적 테스트 벤치를 구성하여 익스플로잇 공격 테스트
이 책의 대상 독자
자동차 산업 관련 전문가, 보안전문가 또는 자동차 튜닝에 관심 있는 일반인에게 추천한다. 차량 보안에 호기심이 있고 2톤짜리 컴퓨터를 해킹하고 싶은 충동이 있다면, 이 책을 펼치길 추천한다.
이 책의 구성
1장, ‘위협 모델의 이해’에서는 차량을 평가하는 방법을 배우며, 고위험 영역을 식별하는 방법을 알게 될 것이다. 자동차 산업에서 종사하고 있다면 내부의 위협 모델링 시스템을 구축하는 데 유용한 가이드 역할을 하게 될 수 있다.
2장, ‘버스 프로토콜’에서는 차량을 평가할 때나 버스 프로토콜, 전압, 전선을 분석할 때 접하게 되는 다양한 버스 네트워크의 종류를 자세히 다룬다.
3장, ‘SocketCAN을 이용한 차량 통신’에서는 리눅스 시스템에서 SocketCAN을 이용해 다양한 CAN 하드웨어 툴을 구현하는 방법을 소개하며, 어떤 진단 대상이든 사용할 수 있는 툴을 스스로 만들 수 있도록 설명한다.
4장, ‘고장 진단과 로깅’에서는 엔진의 코드, 범용 진단 서비스, ISO-TP 프로토콜을 읽는 방법을 다룬다. 각 서비스 모듈이 어떻게 동작 방식이 다르고, 공통적으로 갖고 있는 취약점은 무엇인지, 저장되는 로그 정보가 무엇이고 어디에 존재하는지에 대해 알게 된다.
5장, ‘CAN 버스 리버스엔지니어링’에서는 가상 CAN 네트워크를 구성하는 방법과, CAN 보안 관련 툴과 퍼저(Fuzzer)를 이용해 CAN 네트워크를 분석하는 방법을 다룬다.
6장, ‘ECU 해킹’에서는 ECU에서 동작하는 펌웨어에 초점을 맞춘다. 펌웨어를 얻는 방법과 수정하는 방법, 그리고 펌웨어의 바이너리 데이터를 분석하는 방법을 다룬다.
7장, ‘ECU 테스트 벤치 구축과 활용’에서는 안전한 테스트 환경을 구축하기 위해 차량의 부품을 제거하는 방법을 설명한다. ECU 간 배선도를 읽고 엔진의 ECU 구성 요소인 온도 센서들과 크랭크축의 동작 등을 시뮬레이션하는 방법을 다룬다.
8장, ‘ECU와 기타 임베디드 시스템 공격’에서는 집적회로의 디버깅 핀을 연결하는 방법을 다룬다. 또한 전압 차 분석(Differential Power Analysis)이나 클록 글리칭(Clock Glitching)과 같은 부채널 공격(Side Channel Analysis Attacks)을 다룬다.
9장, ‘차량 내 인포테인먼트 시스템’에서는 차량 내부의 인포테인먼트 시스템이 가장 많은 공격 지점을 갖고 있는 중요한 포인트이기 때문에 인포테인먼트 시스템의 동작 원리를 자세히 다룬다. 펌웨어를 획득하는 여러 접근법과 펌웨어를 시스템상에서 실행하는 방법을 중점적으로 다룰 것이며, 테스트를 위해 일부 오픈소스 인포테인먼트 시스템을 활용한다.
10장, ‘V2V 통신’에서는 차량과 차량 사이 네트워크가 어떻게 동작하도록 설계됐는지 설명하고, 암호 방식과 여러 나라에서 제안된 여러 프로토콜 방식을 다룬다. 그리고 일부 잠재적인 문제점도 언급한다.
11장, ‘CAN 결과의 활용’에서는 CAN 분석의 결과들을 어떻게 사용 가능한 익스플로잇으로 만드는지 설명한다. PoCProof-of-Concept, 개념 증명 코드를 어셈블리 코드(Assembly Code)와 궁극적인 셸코드(Shellcode)로 변환하는 방법을 배우고, 특정 목표 차량만을 익스플로잇하는 방법과, 취약점이 발견되지 않은 차량을 분석하는 방법도 테스트한다.
12장, ‘SDR을 이용한 무선 시스템 공격’에서는 무선 통신을 분석하기 위해 SDR(Software-Defined Radio)을 사용하는 방법을 다루며, TPMS, Key fobs, 이모빌라이저 시스템(Immobilizer Systems)들을 분석하는 데 활용한다. 예제로 이모빌나이저 시스템이 동작할 때 사용하는 암호 구조나 기타 알려진 무선통신의 문제점을 분석해 본다.
13장, ‘성능 튜닝’에서는 차량의 성능을 향상시키고 변화시키는 기술을 다룬다. 칩 튜닝이나 일반적인 튜닝 툴, 그리고 엔진을 원하는 상태로 변경하는데 필요한 기술을 다룬다.
부록 A, ‘차량 해킹 툴 모음’에서는 차량 보안 연구실을 구축할 때 유용한 하드웨어, 소프트웨어 툴의 목록을 제공한다.
부록 B, ‘진단 코드 모드와 PID’에서는 일반적인 진단 모드와 사용하기 쉬운 PID의 목록을 제공한다.
부록 C, ‘자신만의 Open Garage 만들기’에서는 차량 해킹 커뮤니티에 참가하는 방법과 자신만의 Open Garage를 시작하는 방법을 다룬다.
목차
목차
- 1장. 위협 모델의 이해
- 공격 지점 식별
- 위협 모델링
- 레벨 0: 데이터 흐름 파악
- 레벨 1: 데이터 처리 프로세스 분석
- 레벨 2: 데이터처리 프로세스 세분화
- 위협 식별
- 레벨 0: 전반적 위협 식별
- 레벨 1: 데이터처리 프로세스별 위협 식별
- 레벨 2: 데이터처리 프로세스 위협 세분화
- 위협 등급 체계
- DREAD 등급 체계
- CVSS: DREAD의 대안
- 위협 모델 결과 활용
- 요약
- 2장. 버스 프로토콜
- CAN 버스
- OBD-II 커넥터
- CAN 연결 위치 찾기
- CAN 버스 패킷 구성
- ISO-TP 프로토콜
- CANopen 프로토콜
- GMLAN 버스
- SAE J1850 프로토콜
- PWM 프로토콜
- VPW 프로토콜
- 키워드 프로토콜과 ISO 9141-2
- LIN 프로토콜
- MOST 프로토콜
- MOST 네트워크 계층 구조
- MOST 제어 블록
- MOST 해킹
- 플렉스레이 버스
- 하드웨어
- 네트워크 토폴로지
- 구현
- 플렉스레이 사이클
- 패킷 구성
- 플렉스레이 네트워크 스니핑
- 차량 이더넷
- OBD-II 커넥터 핀아웃 맵
- OBD-III 표준
- 요약
- CAN 버스
- 3장. SocketCAN을 이용한 차량 통신
- CAN 디바이스 연결을 위한 can-utils 설정
- can-utils 설치
- 내장형 칩셋 설정
- 시리얼 CAN 디바이스 설정
- 가상 CAN 네트워크 설정
- CAN 유틸리티 스위트
- 추가 커널 모듈 설치
- can-isotp.ko 모듈
- SocketCAN 애플리케이션 코딩
- CAN 소켓 연결
- CAN 프레임 설정
- Procfs 인터페이스
- socketcand 데몬
- Kayak
- 요약
- CAN 디바이스 연결을 위한 can-utils 설정
- 4장. 고장 진단과 로깅
- 고장 진단 코드
- DTC 포맷
- DTC 스캔 툴 활용
- DTC 삭제
- 통합 진단 서비스
- ISO-TP와 CAN을 이용한 데이터 전송
- 진단 모드와 PID에 대한 이해
- 진단 모드 무작위 대입
- 차량 진단 상태 유지
- EDR 로깅
- EDR의 데이터 읽어오기
- SAE J1698 표준
- 기타 데이터 검색 사례
- 자동 충돌 통보 시스템
- 악의적 의도
- 요약
- 고장 진단 코드
- 5장. CAN 버스 리버스엔지니어링
- CAN 버스 연결
- can-utils와 와이어샤크를 이용한 CAN 버스 통신 리버싱
- 와이어샤크 사용
- candump 사용
- CAN 버스에 전송된 데이터 그룹화
- 패킷 기록과 재생
- 창조적인 패킷 분석
- 엔진 속도계 정보 읽어오기
- ICSim를 이용한 백그라운드 노이즈 생성
- ICSim 설정
- ICSim의 CAN 버스 트래픽 읽기
- ICSim 난이도 변경
- OpenXC를 이용한 CAN 버스 리버싱
- CAN 버스 메시지 변환
- CAN 버스 데이터 전송
- OpenXC 해킹
- CAN 버스 퍼징
- 트러블슈팅
- 요약
- 6장. ECU 해킹
- 프론트 도어 공격
- J2534: 차량 통신 API 표준
- J2534 툴 활용
- KWP2000과 기타 이전 프로토콜
- 프론트 도어 접근 방식의 활용: Seed-Key 알고리즘
- 백도어 공격
- 익스플로잇
- 차량 펌웨어 리버싱
- 자체 진단 시스템
- 라이브러리 프로시저
- 파라미터 식별을 위한 바이트 비교
- WinOLS를 이용한 ROM 데이터 식별
- 코드 분석
- 전용 디스어셈블러
- 대화형 디스어셈블러
- 요약
- 프론트 도어 공격
- 7장. ECU 테스트 벤치 구축과 활용
- 기본적인 ECU 테스트 벤치
- ECU 찾기
- ECU 배선 분석
- 배선 연결
- 고급 테스트 벤치 제작
- 센서 시그널 시뮬레이션
- 홀 이펙트 센서
- 차량 속도 시뮬레이션
- 요약
- 기본적인 ECU 테스트 벤치
- 8장. ECU와 기타 임베디드 시스템 공격
- 회로 기판 분석
- 모델 번호 식별
- 칩의 분해와 분석
- JTAG, 시리얼 와이어 디버그를 이용한 하드웨어 디버깅
- JTAG
- 시리얼 와이어 디버깅
- 고급 사용자 디버거
- 넥서스
- ChipWhisperer를 이용한 부채널 공격
- 소프트웨어 설치
- 타겟 보드 준비
- 전원 분석 공격을 이용한 보안 부트 무작위 대입 시도
- AVRDUDESS를 이용한 테스트 과정 준비
- 시리얼 통신을 위한 ChipWhisperer 설정
- 패스워드 변경
- AVR 리셋
- ChipWhisperer ADC 설정
- 패스워드 입력 시 전력 사용량 모니터링
- 파이썬을 이용한 ChipWhisperer 스크립트 제작
- 결함 주입
- 클록 글리칭
- 트리거 라인 설정
- 전원 글리칭
- 외과적 결함 주입
- 요약
- 회로 기판 분석
- 9장. 차량 내 인포테인먼트 시스템
- 공격 지점
- 업데이트 시스템을 통한 공격
- 시스템 식별
- 업데이트 파일 타입 식별
- 시스템 변경
- 애플리케이션과 플러그인
- 취약점 식별
- IVI 하드웨어 공격
- IVI 기기의 연결 분석
- IVI 기기 분해
- 인포테인먼트 테스트 벤치
- GENIVI Meta-IVI
- AGL
- 테스트를 위한 OEM IVI 얻기
- 요약
- 10장. V2V 통신
- V2V 통신 방식
- DSRC 프로토콜
- 특징과 용도
- 도로 주변 DSRC 시스템
- WAVE 표준
- DSRC를 이용한 차량 추적
- 보안 문제
- PKI 기반 보안 대책
- 차량 인증서
- 익명 인증서
- 인증서 등록
- 인증서 폐지 항목 갱신
- 비정상적 행위 보고
- 요약
- 11장. CAN 결과의 활용
- C 언어를 이용한 익스플로잇 작성
- 어셈블리어 코드로 변환
- 어셈블리 코드를 셸코드로 변환
- NULL 제거
- 메타스플로잇 페이로드 생성
- 공격 대상 차종 알아내기
- 대화형 탐색
- 수동적 CAN 버스 핑거프린팅
- 책임감 있는 익스플로잇
- 요약
- C 언어를 이용한 익스플로잇 작성
- 12장. SDR을 이용한 무선 시스템 공격
- 무선 시스템과 SDR
- 신호 변조
- TPMS 해킹
- 라디오 수신기를 이용한 도청
- TPMS 패킷
- 신호 활성화
- 차량 추적
- 이벤트 트리거링
- 변조된 패킷 전송
- 전자 키와 이모빌라이저 공격
- 전자 키 해킹
- PKES 시스템 공격
- 이모빌라이저 암호 기술
- 이모빌라이저 시스템상 물리적 공격
- 플래시백: 핫와이어링
- 요약
- 무선 시스템과 SDR
- 13장. 성능 튜닝
- 성능 튜닝의 타협
- ECU 튜닝
- 칩 튜닝
- 플래시 튜닝
- 독립형 엔진 관리
- 요약
- 부록 A. 차량 해킹 툴 모음
- 하드웨어
- 보급형 CAN 디바이스
- 고급형 CAN 디바이스
- 소프트웨어
- 와이어샤크
- PyOBD Module
- 리눅스 툴
- CANiBUS 서버
- Kayak
- SavvyCAN
- O2OO 데이터 로거
- Caring Caribou
- c0f Fingerprinting 툴
- UDSim ECU Simulator
- Octane CAN 버스 스니퍼
- AVRDUDESS GUI
- RomRaider ECU Tuner
- Komodo CAN 버스 스니퍼
- Vehicle Spy
- 하드웨어
- 부록 B. 진단 코드 모드와 PID
- 0x10 모드
- 유용한 PID
- 부록 C. 자신만의 Open Garage 만들기
- 특성 시트 작성
- 모임 일정
- 제휴와 프라이빗 멤버십
- 미팅 공간에 대한 명시
- 연락 정보
- 그룹 초기 관리자
- 장비
- 특성 시트 작성