Honda Civics와 악의적 발레파킹

8 hours ago 2
  • 2021년형 Honda Civic 헤드유닛은 USB 업데이트 경로에서 공개 AOSP 테스트 키로 서명된 업데이트를 받아들일 수 있어, 물리 접근자가 임의 코드를 실행할 수 있음
  • Honda의 업데이트는 Android recovery를 통해 적용되며, recovery 바이너리가 수정됐어도 verify_file 서명 검증 로직은 기본 AOSP와 일치함
  • 공개 AOSP 테스트 키로 서명하고 USB 드라이브 형식을 맞추면 su와 setuid 없이도 원하는 코드를 설치할 수 있으며, 이를 EvilValet 공격으로 부름
  • 새 도구 ota-builder 는 헤드유닛이 받아들이는 업데이트 파일 준비를 쉽게 하며, apk-rebuilder 는 업데이트 파일을 역공학에 필요한 출력 트리로 변환함
  • 프로젝트는 조사 작업 대부분을 마쳤지만 저장소는 중단되지 않았으며, 버전 정보·툴체인·커스텀 테마·AIDL 매핑 개선에 기여가 필요함

프로젝트 업데이트 배경

  • 3년 전 2021년형 Honda Civic의 헤드유닛을 이해하고 역공학하기 위한 초기 작업이 공개됐으며, 이번 업데이트는 그 이후의 진행 상황을 정리함
  • 초기 반응은 매우 고무적이었고, 가장 큰 진전은 업데이트 프로세스를 파악하는 과정에서 나옴

왕국의 열쇠

  • Honda는 USB를 통한 헤드유닛 업데이트를 지원하며, 최종적으로 USB 드라이브 안의 서명된 AOSP 업데이트 파일이 Android recovery를 통해 준비되고 적용됨
  • Honda 고유 검사는 여러 개 존재하지만, res/keys에 공개적으로 알려진 AOSP 테스트 키가 남아 있었고 수정된 recovery 바이너리의 verify_file 서명 로직도 기본 AOSP와 일치함
  • USB 드라이브를 적절히 포맷하고 공개 AOSP 테스트 키로 서명하면, 기존 루트 접근 없이도 헤드유닛에 원하는 내용을 설치할 수 있음
    • su에 setuid를 설정하는 방식의 일반적인 루트 접근이 필요하지 않음
    • 헤드유닛에 전원이 있고 공격자가 가장 앞쪽 USB 포트에 물리적으로 접근할 수 있으면, 업데이트 경로를 통해 헤드유닛에서 임의 코드 실행이 가능함
  • 이 공격은 호텔 방에 물리 접근하는 evil maid attack과 유사하지만, 차량 실내에 접근해야 하므로 EvilValet으로 부름
    • 예시 시나리오에서 호텔 발레파킹 담당자가 USB로 업데이트를 설치하면, 차량이 반환된 뒤 운전자는 헤드유닛 변경 사실을 알지 못함
  • 이 글은 기술 상세 문서가 아니며, 자세한 내용은 Display Audio Update Files 문서에서 확인할 수 있음
  • 새 도구 ota-builder 는 헤드유닛이 받아들이는 업데이트 파일을 쉽게 준비할 수 있게 함
    • 초기 단계지만, 예를 들어 setuid가 설정된 su 바이리를 설치하는 업데이트 파일을 만드는 작업은 사소해졌음
  • 모든 업데이트가 공개 AOSP 테스트 키로 서명됐다고 볼 강한 이유가 있지만, 가능한 모든 공식 업데이트 파일과 모든 헤드유닛 변형 파일시스템에 접근한 것은 아님
    • 확인된 헤드유닛에는 res/keys에 AOSP 테스트 키가 있었지만, HondaHack 설치 이력이 있어 키스토어에 키가 주입됐을 가능성도 있음
    • 공개적으로 이용 가능한 EU 소프트웨어 업데이트 파일 MRC_EU_SW_v12_4.zip은 테스트 키로 서명됐으며, 공개 포럼에서 내려받은 뒤 수정하지 않은 파일임
    • 모든 업데이트가 AOSP 테스트 키로 서명됐을 가능성이 매우 높지만, 이 가설을 뒷받침하거나 반박할 기여가 필요함

도구 구축

  • 업데이트 프로세스 외에 가장 유용한 작업은 apk-rebuilder 개발이었음
  • apk-rebuilder는 인터넷에서 구한 Honda Civic 업데이트 파일을 입력으로 받아, 역공학자가 수동으로 해야 할 작업을 자동화한 깨끗한 출력 파일 트리를 생성함
    • 리소스 해석을 수행함
    • .smali 코드 재구성을 수행함
    • APK 파일 재패키징을 수행함
    • 램디스크 추출을 수행함
    • 그 외 작업도 수행함
  • 실제 Honda 소스 코드를 공개할 수 없기 때문에, apk-rebuilder는 공개 저장소가 호스팅하지 않는 업데이트 파일을 입력받아 Honda .smali 코드와 이미지 자산 등을 출력하는 함수 역할을 함
  • 생성된 출력물은 명확한 디렉터리 구조를 따르며, 민감한 파일 자체를 업로드하지 않고도 문서에서 참조할 수 있음

남은 작업과 기여 요청

  • 알려진 버전

    • 업데이트 프로세스는 취약하며 버전 번호에 크게 의존함
    • 버전 번호는 스푸핑할 수 있으므로 서명되지 않은 코드를 실행하는 능력을 제한하지 않음
    • 업데이트 파일을 만들려면 헤드유닛이 기대하는 버전을 알아야 함
    • 사용 중인 빌드와 일치하지 않는 헤드유닛 소프트웨어 변경은 예기치 않은 동작과 recovery loop로 이어질 수 있음
    • 10세대 Honda Civic을 운전하고 기술에 익숙한 사용자는 저장소의 Known Versions, Display Audio Software 섹션에 기여할 수 있음
    • 특히 과감한 사용자는 ota-builder 코드를 읽고 업데이트 플래시를 시도할 수 있지만, 헤드유닛이 기준 장치와 다르면 recovery loop에 빠지고 장치가 소프트브릭될 수 있음
  • 툴체인

    • 로컬 머신에는 실험적이고 작업 중인 툴체인이 존재함
    • 이 툴체인은 후보 .c 코드를 받아 원래 벤더 바이너리와 같은 컴파일러 버전과 빌드 플래그로 ARMv7용으로 컴파일함
    • 업데이트 프로세스를 이해하는 작업에서 이 툴체인은 필수적이었음
    • 현재 형태는 Docker를 많이 사용하지만 지저분하고 특정 워크플로에 크게 맞춰져 있으며, 깨끗한 구현을 공개하고자 함
  • 커스텀 테마

    • apk-renderer를 vibe-coding하던 중 커스텀 테마를 일부 탐색함
    • 커스텀 테마는 Mitsubishi의 AOSP framework 포크 안에 있고, 헤드유닛 앱은 하드코딩된 리소스 ID를 기대하도록 축소돼 있어 배포가 어려울 가능성이 큼
    • 커스텀 테마를 배포하려면 벤더 framework를 외과적으로 수정하고 이를 자동화하는 도구를 작성해야 할 가능성이 큼
    • 이 작업은 간단하지 않고 노력할 가치가 크지 않을 수 있지만, 기여자는 환영됨
  • aidl-rebuilder 개선

    • .smali 파일을 파싱해 헤드유닛의 모든 AIDL 인터페이스를 생성하고 매핑하는 도구 작업이 시작됐음
    • 도구는 작동하지만 정확성을 충분히 검토하지 못했음
    • 이 작업은 가상 속도계 같은 커스텀 앱 가능성을 열어줌

문서화와 LLM에 대한 생각

  • 참조 문서보다 도구화에 더 큰 비중을 둠
  • 신뢰할 수 있고 결정적인 도구가 헤드유닛 코드를 더 이해하기 쉬운 형태로 매핑하면, 사용자는 LLM으로 그 형태를 질의해 구체적인 질문에 답할 수 있음
  • 헤드유닛 코드가 진실의 원천이므로, 실제 코드와 어긋날 수 있는 참조 문서를 유지하는 부담을 줄일 수 있음
  • ADB로 헤드유닛에 연결하는 사용자 가이드는 여전히 유용함
  • Java 코드 자체를 LLM이 사용할 수 있는 상황에서 Java 코드 동작을 별도 문서로 유지하는 일은 유지보수 부담이 됨

마무리

  • 헤드유닛에 대해 의도했던 조사 작업은 대부분 완료됨
  • 계속 매달릴 수 있는 프로젝트지만, 앞으로는 다른 프로젝트로 전환할 가능성이 큼
  • 저장소는 중단된 상태가 아니며, PR은 언제나 환영됨
Read Entire Article