- Pixel 8·Pixel 8 Pro의 하드웨어 메모리 태깅 지원이 Android 14 QPR2에서 Bluetooth LE에 새로 들어간 메모리 손상 버그를 드러냄
- 원인은 Bluetooth LE의 upstream use-after-free 버그로 확인됐고, GrapheneOS는 수정 패치를 만들어 새 릴리스에 포함할 예정임
- Samsung Galaxy Buds2 Pro의 Bluetooth LE 모드에서 문제를 재현한 사용자가 수정 동작을 확인했으며, stock Pixel OS도 영향을 받음
- GrapheneOS는 Bluetooth가 큰 공격 표면인 만큼, 해당 프로세스의 메모리 태깅을 끄는 우회책은 단기적으로도 부적절하다고 봄
- Android Bluetooth 코드 일부는 Rust로 이식됐지만, 남은 코드 이식과 HWASan·MTE 빌드의 실제 기기 테스트가 더 필요함
Android 14 QPR2의 Bluetooth LE 버그와 수정
- GrapheneOS는 Pixel 8 및 Pixel 8 Pro의 하드웨어 메모리 태깅 지원으로 Android 14 QPR2의 Bluetooth LE 메모리 손상 버그를 발견함
- 모든 Bluetooth 기기에서 발생하는 문제는 아니며, 특정 Bluetooth LE 기기에서만 재현됨
- GrapheneOS는 새로 도입된 기능을 수정하거나 임시로 비활성화하는 방법을 조사 중임
- 원인은 Bluetooth LE의 upstream use-after-free 버그로 확인됐고, GrapheneOS는 패치를 개발함
- 우선순위는 해당 수정이 들어간 GrapheneOS 릴리스를 빠르게 배포하는 것임
- Android 보안 버그로 보고할 예정임
- 이 수정은 BLE 오디오 회귀도 해결할 것으로 보임
- Samsung Galaxy Buds2 Pro를 Bluetooth LE 모드로 사용해 문제를 재현하던 사용자가 수정이 동작함을 확인함
- 같은 문제는 stock Pixel OS에도 영향을 줌
- GrapheneOS는 hardened_malloc의 메모리 태깅 지원으로 이를 감지했고, 복사 가능한 리포트를 담은 MTE 크래시 알림을 추가함
MTE 적용 방식과 Android Bluetooth 코드의 과제
- GrapheneOS는 이 프로세스에서 메모리 태깅을 끄는 우회책을 단기적으로도 적절하지 않다고 봄
- Bluetooth는 해당 버그의 실제 악용 가능성과 별개로 큰 공격 표면임
- Android는 Bluetooth 코드 상당 부분을 Rust로 이식했지만, 남은 코드 이식에도 더 많은 자원이 필요함
- 실제 환경에서는 다양한 Bluetooth 기기를 대상으로 HWASan 및 MTE 빌드 테스트가 더 필요함
- Pixel 기기는 큰 하드웨어 보안 기능인 MTE를 탑재했지만, 기본 OS는 3.125% 메모리·캐시 사용량 절감을 이유로 활성화하지 않음
- 계산은 태그된 메모리 16바이트당 4비트 태그에 기반함
- heap MTE는 비동기 모드(async mode)에서 성능 오버헤드가 거의 0%에 가깝고, asymmetric mode에서는 SSP 같은 기존 완화책보다 비용이 낮음
- GrapheneOS는 기본 OS와 호환성이 알려진 사용자 설치 앱에 MTE를 기본 활성화함
- Settings > Security에서 모든 사용자 설치 앱에 대해 opt-in으로 켤 수 있음
- 크래시 리포트를 복사할 수 있는 알림과 앱별 토글을 제공함
- GrapheneOS의 hardened_malloc MTE 구현은 표준 랜덤 태그와 전용 free 태그를 사용하며, 이전 태그와 현재 또는 이전 인접 태그를 동적으로 제외함
- Chromium 통합은 수정됐고, PartitionAlloc도 개선할 예정임