혼다 시빅과 악한 발렛

발행: (2026년 6월 14일 AM 09:49 GMT+9)
13 분 소요

Source: [Hacker News](https://juniperspring.org/posts/honda- evil-valet/)

3년 전, 저는 2021년식 혼다 시빅의 헤드유닛을 이해하고 리버스 엔지니어링하는 초기 작업을 발표했습니다.1

초기 반응은 대단히 격려적이었습니다. 프로젝트 업데이트를 제공하기 위해 글을 씁니다.

키의 왕국

가장 큰 진전은 업데이트 프로세스를 매핑하면서 이루어졌습니다.

혼다는 USB를 통해 헤드유닛을 업데이트할 수 있도록 지원합니다. 여러 Honda 전용 검사가 있지만, 결국 USB 드라이브에는 서명된 AOSP 업데이트 파일이 포함되어 있으며 Android 복구에서 스테이징되고 적용됩니다. 좋은 소식은? 그들은 공개적으로 알려진 AOSP 테스트 키를 res/keys*에 남겨두었고, recovery 바이너리를 수정했음에도 불구하고 verify_file 서명 로직이 표준 AOSP와 동일합니다.

USB 드라이브를 올바르게 포맷하고 공개적으로 알려진 AOSP 테스트 키로 서명할 수 있다면, 기존 루트 액세스 없이(‘su’와 ‘setuid’는 필요 없음) 헤드유닛에 원하는 것을 설치할 수 있습니다.
이것은 헤드유닛이 전원을 갖고, 공격자가 앞쪽 USB 포트에 물리적 접근을 할 경우, 업데이트 경로를 통해 헤드유닛에 임의 코드 실행을 수행한다는 의미입니다.

이건 악녀(maid) 공격입니다. 차 내부에서 물리적 접근이 필요하기 때문에 저는 이를 ‘악한 발레’ 공격이라 부릅니다. 기자가 호텔을 방문하고 차를 발레에게 맡긴다고 상상해 보세요. 3글자 기관사 직원이라면 USB를 통해 업데이트를 설치합니다. 차량이 반환될 때, 기자는 헤드유닛이 수정되었다는 사실을 알지 못합니다. 멋진 취약점 이름을 원하기 때문에 저는 이를 “EvilValet”이라 부릅니다.

이 블로그 글은 기술적인 자세한 설명을 목표로 하지 않습니다. 거친 세부 사항을 원한다면 기술 문서를 참고하십시오.2

저도 새로운 도구인 ota‑builder3을 발표했습니다. 이 도구는 헤드유닛에서 받아들여지는 업데이트 파일을 쉽게 준비할 수 있게 해줍니다. 초기 단계에서는 아직이지만, 이제 ota‑builder를 사용해 su 바이너리를 setuid 로 설정하여(즉, 디바이스 루팅) 업데이트 파일을 만들 수 있는 것이 상당히 쉬워졌습니다.

저는 모든 업데이트가 공개적으로 알려진 AOSP 테스트 키로 서명되어 있다고 강하게 믿습니다. 하지만 모든 공식 업데이트 파일에 접근할 수 없으며, 각 헤드유닛 변형과 그 파일시스템에도 접근하지 못했습니다. 제 헤드유닛에는 res/keys에 AOSP 테스트 키가 있으며, HondaHack를 설치했기에 이 키가 저장소에 주입된 것이 가능합니다. 그러나 MRC_EU_SW_v12_4.zip이라는 공개 EU 소프트웨어 업데이트 파일이 테스트 키로 서명되어 있음을 확인했습니다. 이 파일은 제가 수정한 적 없이 공공 포럼4에서 다운로드되었습니다. 따라서 모든 업데이트가 AOSP 테스트 키로 서명되어 있다고 보는 것이 매우 가능합니다. 기여자들은 이 가설을 지원하거나 반박하는 데 참여해 주세요.

도구 제작

업데이트 프로세스 외에도 가장 유용한 작업은 apk‑rebuilder5에 있었습니다. 이 도구는 하나의 매우 중요한 임무를 수행합니다: 인터넷에서 혼다 시빅 업데이트 파일을 가져와, 역량자(리버스 엔지니어)가 수동으로 해야 할 모든 작업을 자동화하는 깨끗한 출력 파일 트리를 생성합니다.

  • 리소스 해결
  • .smali 코드 재구성
  • APK 파일 포장(재패킹)
  • 램디스크 추출
  • 그 외 다양한 작업들

이 또한 중요한 역할을 합니다. 실제 혼다 소스 코드를 공개할 수 없기 때문입니다. 우리는 업데이트 파일을 (우리 ourselves 호스팅하지 않음) 받아 들여 혼다 .smali 코드, 이미지 자산 등 출력합니다. resulting output은 명확한 디렉터리 구조를 따르며, 민감한 파일을 실제로 업로드하지 않고 문서에 참고할 수 있습니다.

미완성 작업 - 기여자 요청

알려진 버전

업데이트 프로세스는 버전 numéro에 크게 의존하며 취약합니다. 이는 무단 코드 실행의 제한을 두지는 않는데, 버전 번호는 “스포핑”(위변조)될 수 있기 때문입니다(기술 문서 참조). 하지만 업데이트 파일을 만들기 위해서는 먼저 헤드유닛이 기대하는 버전을 알아야 합니다. 또한 제 빌드와 맞지 않는 헤드유닛 소프트웨어 변경은 예상치 못한 동작과 복구 루프를 초래할 수 있습니다.

10세대 혼다 시빅을 운전하고 기술에 익숙하다면, 레포의 “Known Versions, Display Audio Software” 섹션에 기여해 주세요.6

특히 용감해지고 싶다면 ota‑builder 코드를 읽고 업데이트를 플래시해 보세요. 하지만 자신의 위험을 감수해야 합니다; 헤드유닛이 제 것과 다르면 복구 루프에 갇혀 디바이스가 부드브릭(소프트 브릭)될 수 있습니다.

툴체인

저는 로컬 머신에 실험적인/진행 중인 툴체인을 보유하고 있습니다. 이 툴체인은 후보 .c 코드를 ARMv7용으로 컴파일하며, 원래 벤더 바이너리와 동일한 컴파일러 버전과 빌드 플래그를 사용합니다. 업데이트 프로세스를 이해하는 데 필수적이었습니다. Docker를 많이 사용합니다. 현재는 매우 혼잡하고 제 워크플로에 특화되어 있지만, 깔끔한 구현을 공개하고 싶습니다.

커스텀 테마

apk‑renderer를 vibe 코딩하면서 약간 탐구해 보았습니다. 커스텀 테마는 Mitsubishi가 AOSP 프레임워크 포크에 포함되어 있어 배포하기 어려울 가능성이 높으며, 헤드유닛 앱은 하드코딩된 리소스 ID를 기대하도록 미니화되어 있습니다. 커스텀 테마를 배포하려면 벤더 프레임워크를 수동으로 정교하게 편집하고 자동 도구를 작성해야 할 것입니다. 이 모든 것이 쉽지 않으며 probablemente 노력에 비해 가치가 낮을지도 모릅니다만, 기여자를 환영합니다.

aidl‑rebuilder 개선

저는 .smali 파일을 파싱하고 헤드유닛의 모든 AIDL 인터페이스를 생성/매핑하는 도구를 시작했습니다. 이 도구는 작동하지만 정확성에 대해 완전히 검토하지 못했습니다. 이를 통해 가상 속도계와 같은 커스텀 앱을 만들 수 있는 문이 열립니다. 기여자 환영.

문서화와 LLM에 대한 생각

저는 참고 문서에 더 집중하기보다 도구 개발에 더 중점을 두었습니다. 목표는 신뢰할 수 있는 결정적인 도구를 만들어 헤드유닛 코드를 보다 소비하기 쉬운 형태로 매핑하는 것이며, 이를 통해 사람들은 LLM을 활용해 구체적인 질문에 대한 답변을 얻을 수 있습니다. 이렇게 하면 실제 헤드유닛 코드와 어긋날 수 있는 참고 문서를 유지할 필요가 없어집니다. 헤드유닛 코드는 진실의 근원이기 때문입니다.

예를 들어, ADB를 통해 헤드유닛에 연결하는 방법을 설명하는 사용자 가이드는 여전히 유용합니다. 하지만 Java 코드가 어떻게 동작하는지 설명하는 문서가 LLM에게 제공되는 Java 코드 자체와 함께 있다면 유지보수 부담이 됩니다.

마무리 및 감사

이 시점에서 저는 헤드유닛에 대해 의도한 대로 대부분의 조사 작업을 완료했습니다. 이 프로젝트는 무한히 계속할 수 있지만, 다른 프로젝트로 전향할 가능성이 높습니다.

그럼에도 불구하고 레포는 완전히 방치된 것이 아닙니다. PR은 언제나 환영합니다.

특별히 Tunas8의 추억과 Hackaday9에 제가 초기 작업을 소개해 주셔서 감사합니다.

앞으로도 만나요 🌱

Eric McDonald, E. (2023). [“혼다 리버스 엔지니어링”](https://juniperspring.org/posts/honda- evil-valet/) Juniperspring. 2026년 6월 13일 확인. ↩︎

McDonald, E. (n.d.). “디스플레이 오디오 업데이트 파일”. GitHub. 2026년 6월 13일 확인. ↩︎

McDonald, E. (n.d.). “ota‑builder”. GitHub. 2026년 6월 13일 확인. ↩︎

felixlennart (2022년 9월 22일). [“미국 펌웨어로 유럽 헤드유닛 설치”](https://www.civicx.com/forum/threads/install-american-firmware-on-european-head- unit.78015/page-3). 2016+ Honda Civic Forum (CivicX.com). 2026년 6월 13일 확인. ↩︎

McDonald, E. (n.d.). “apk‑rebuilder”. GitHub. 2026년 6월 13일 확인. ↩︎

McDonald, E. (n.d.). “알려진 버전, 디스플레이 오디오 소프트웨어”. GitHub. 2026년 6월 13일 확인. ↩︎

0 조회
Back to Blog

관련 글

더 보기 »

클로드를 화학자로 만들다

We’re working with world-class synthetic, computational, and analytical chemists to make Claude better at chemistry. In this post, we share our first work as pa...

위브: 언어 구조 기반 병합

weavehttps://ataraxy-labs.github.io/weave/index.html Entity-level semantic merge driver for Git. Two agents edit different functions in the same file? Clean mer...