Google, Pixel 10 베이스밴드 펌웨어에 Rust 도입

20 hours ago 1

Google이 Pixel 10의 셀룰러 베이스밴드(modem) 펌웨어에 메모리 안전 언어인 Rust 기반 DNS 파서를
도입했다. 원격 공격 표면이 큰 베이스밴드에서 메모리 안전 취약점 계열을 줄이기 위한 선제 대응이다.

핵심 포인트

  • Pixel 9에서는 메모리 안전 취약점 완화책을 적용했고, Pixel 10에서는 한 단계 더 나아가 Rust 코드를 실제
    베이스밴드 펌웨어에 넣었다.
  • 첫 적용 대상은 DNS 파서다. DNS는 브라우저뿐 아니라 착신 전환 같은 이동통신 기본 기능에도 쓰이며, 신뢰할 수 없는
    데이터를 직접 파싱하므로 취약점이 발생하기 쉬운 영역이다.
  • Google은 오픈소스 Rust DNS 라이브러리 hickory-proto를 채택했다. 유지보수 상태, 테스트
    커버리지, 커뮤니티 채택도를 높게 평가했다.
  • 다만 베어메탈 환경에 필요한 no_std 지원이 부족해, Google이 관련 crate와 의존성에 직접 no_std
    지원을 추가해 upstream에 기여했다.
  • 코드 크기는 대략 371KB 수준으로 측정됐다. 이 중 350KB가 hickory-proto와 의존성, 17KB가
    core·alloc·compiler_builtins, 4KB가 모뎀과 연결하는 shim 코드다.
  • Google은 Cargo로 독립 staticlib를 여러 개 붙이는 방식 대신, 기존 모뎀 빌드
    시스템(Pigweed/GN)에 Rust 컴파일 단계를 직접 통합하는 방식을 선택했다.
  • Rust의 메모리 할당기와 panic 처리도 기존 모뎀 펌웨어의 allocator, crash backend와 FFI로 연결해 통합했다.
  • 링크 단계에서는 compiler_builtins가 기존 모뎀 최적화 memcpy/memset 구현을 덮어써 성능
    저하가 생겼고, 이를 one-line 스크립트로 제거해 해결했다.
  • Google은 이번 적용이 단발성 조치가 아니라, 앞으로 베이스밴드 내 다른 고위험 파서와 코드에도 메모리 안전 언어를
    확대하기 위한 기반이라고 설명했다.

왜 중요한가

셀룰러 베이스밴드는 외부와 직접 맞닿아 있는 저수준 소프트웨어라 공격 가치가 높다. 실제로 Project Zero가 과거
Pixel 모뎀에서 인터넷을 통한 원격 코드 실행을 시연한 적도 있다. 이런 환경에서 C/C++ 중심 코드의 메모리 안전
문제는 구조적 위험이 되기 쉽다.

Google의 이번 발표는 단순히 “Rust를 썼다”는 수준보다, 모바일 베이스밴드처럼 제약이 크고 민감한 펌웨어 영역에서도
메모리 안전 언어를 실전 배치할 수 있다는 사례를 보여준다는 점에서 의미가 크다.

기술적으로 눈에 띄는 부분

  • hickory-proto를 bare-metal에서 돌리기 위해 no_std 지원을 추가했다.
  • Rust와 기존 C/C++ 코드 간 인터페이스는 FFI로 연결했다.
  • 응답 파싱은 Rust가 맡고, 기존 C 메모리 구조 업데이트는 기존 C 함수 콜백을 재사용했다.
  • 외부 crate가 30개 이상이라 수작업 빌드 규칙 대신 Fuchsia의 cargo-gnaw를 활용해 GN 빌드 규칙을 생성했다.
Read Entire Article