1P by GN⁺ | ★ favorite | 댓글 1개
  • AirPods 펌웨어의 CVE-2024-27867 때문에 Bluetooth MAC 주소를 아는 사람이 기기에 연결해 마이크를 듣거나 음악을 재생할 수 있음
  • 취약점은 Apple의 독자 프로토콜인 Fast Connect 경로에서 인증과 암호화 상태를 명시적으로 확인하지 않아 발생함
  • 공격에 필요한 Bluetooth MAC 주소는 완전히 비공개가 아니며, 페어링 모드나 AirPods 활성 상태에서 전파를 통해 얻을 수 있음
  • AirPods가 닫힌 충전 케이스나 AirPods Max의 Smart Case 안에 있으면 무선 기능이 꺼져 연결 자체가 불가능함
  • Apple은 AirPods와 일부 Beats용 펌웨어 업데이트를 배포했지만, iOS·macOS 없이 쓰는 Android·Windows·Linux 사용자는 업데이트 절차가 더 번거로울 수 있음

AirPods 펌웨어 취약점과 영향 범위

  • Apple AirPods 펌웨어에 CVE-2024-27867 보안 취약점이 있음
  • Bluetooth MAC 주소를 아는 사람은 AirPods에 연결해 다음 동작을 할 수 있음
    • 마이크 듣기
    • 음악 재생
    • 다른 연결 기기에서 재생 중인 음악 확인 및 일시정지
    • AAP 프로토콜이 가능한 일부 동작 수행
    • 잘못된 형식의 메시지를 보내 AirPods를 크래시시키는 동작
  • AirPods가 이미 휴대폰에 연결되어 있어도 공격자가 추가로 연결할 수 있음
    • 다만 공격자가 마이크를 켜면 음악 재생은 멈춤
  • AirPods가 닫힌 충전 케이스 안에 있거나 AirPods Max가 Smart Case 안에 있으면 무선 기능이 꺼져 어떤 연결도 불가능함

취약점 발견 경로

  • AirPods 3는 macOS와 Apple 기기 조합에서는 여러 기능이 자연스럽게 동작했지만, 같은 노트북을 Linux로 부팅하면 휴대폰과 노트북에 동시에 연결되지 않았음
  • 이 차이 때문에 일반 Bluetooth 헤드폰에는 없는 Apple 전용 프로토콜이 쓰인다고 보고, 일부 기능을 Linux에서 재구현하기 위해 분석을 시작함
  • 분석 과정에서 Bluetooth 주변기기를 연결하는 Apple의 Fast Connect 기능에서 취약점이 발견됨

Fast Connect 동작 방식

  • Fast Connect는 Apple의 독자 프로토콜이며, Bluetooth 명세의 ping 기능을 창의적으로 사용함
  • 목적은 두 Apple 기기 사이의 연결 설정 시간을 약 1초에서 약 0.5초로 줄이는 데 있음
  • 연결 대상 기기와 인증하기 전에 두 기기는 L2CAP ping 메시지를 주고받음
    • Apple은 ping 페이로드 안에 프로토콜 메시지를 넣음
    • 이 방식으로 Bluetooth 명세를 어기지 않으면서 양쪽이 Fast Connect를 지원하는지 확인함
  • 이후 3번의 추가 왕복 메시지로 연결에 필요한 협상을 진행함
  • 전체 왕복 메시지가 4번에 그쳐, 일반 Bluetooth 연결에서 SDP 디스크립터를 주고받고 채널을 구성하는 절차보다 빠름

인증 확인 누락

  • 문제는 Fast Connect를 구현하는 별도 코드 경로에서 중요한 검사가 빠진 점임
  • AirPods는 연결 상대가 실제로 인증했고 암호화를 켰는지 확인하지 않음
  • 정상적인 iOS와 macOS는 초기 Fast Connect 메시지 뒤에 인증과 암호화 활성화 단계를 수행함
  • 공격자가 이 단계를 건너뛰어도 AirPods는 Fast Connect 절차를 계속 진행함
  • Fast Connect 없이 일반 Bluetooth 방식으로 AirPods에 연결할 때는 인증 단계가 암묵적으로 포함되며, 이 때문에 Fast Connect 코드 경로에 명시적 확인이 빠졌을 가능성이 있음

Bluetooth MAC 주소 조건

  • 공격자는 AirPods의 고정 Bluetooth MAC 주소를 알아야 함
  • 이 주소는 완전히 비공개 정보가 아님
    • Bluetooth 기기가 페어링 모드일 때 전파로 광고됨
    • AirPods가 활성 상태일 때 Ubertooth One 같은 하드웨어로 전파에서 쉽게 얻을 수 있음

업데이트와 비 Apple 사용자 문제

  • Apple은 최근 며칠 사이 이 취약점을 수정한 여러 펌웨어 업데이트를 배포함
  • 적용 대상은 AirPods 2, AirPods 3, AirPods Pro, AirPods Pro 2, AirPods Max, 일부 Beats 헤드폰임
  • 사용자는 AirPods 펌웨어가 최신인지 확인해야 함
  • AirPods 펌웨어는 자동 업데이트되지만, iPhone이나 MacBook과 함께 사용할 때만 자동 업데이트됨
  • Android, Windows, Linux 사용자처럼 iOS나 macOS 기기 없이 AirPods를 쓰는 사람은 펌웨어를 쉽게 업데이트하기 어려움
  • 이런 사용자는 Apple Store에서 펌웨어 업데이트를 받을 수 있는 것으로 보임

보고와 도구

  • Bluetooth 관련 질문과 공개 절차에는 University of Potsdam의 Jiska Classen이 도움을 줌
  • BlueZ 같은 Linux 커뮤니티 도구가 이 문제를 찾는 데 필요했음

댓글과 토론

Hacker News 의견들
  • 같은 방 안의 두 기기가 전자기 스펙트럼의 아주 좁은 일부만 써도 초당 수천 개 메시지를 주고받을 수 있을 텐데, Bluetooth에서는 왜 메시지 하나가 마이크로초가 아니라 수백 밀리초씩 걸리는지 궁금함
    이 과정의 시간 단위를 결정하는 요인이 무엇인지 알고 싶음
    • 여기서는 확실치 않지만 보통은 몇 가지가 겹친 결과임: 광고 기기가 비콘을 얼마나 자주 보내는지, 광고 채널이 여러 개인지, 하위 호환성을 위해 비콘과 핸드셰이크가 프로토콜의 가장 느린 속도로 전송되는지, 주변 잡음 때문에 물리 계층 재전송이 필요한지 등이 영향을 줌
      결국 양쪽이 어떤 기능을 지원하는지 확인하고 어떤 물리 계층 프로토콜로 통신할지 정하는 핸드셰이크가 시간을 잡아먹는 구조임
  • 같은 칩을 쓰는 영향을 받은 Beats 기기들은 Android의 Beats 앱에서 실제로 업데이트할 수 있었던 것으로 기억함
    • AirPods Pro 1세대와 2세대를 Android 휴대폰과 써 왔는데, Android에서는 펌웨어 업데이트도, 버전 확인도, 모드 선택도, 길게 누르기 동작 변경도, 배터리 잔량 확인도 제대로 할 방법이 없음
      일부 서드파티 앱이 있긴 하지만 신뢰성이 낮고, 다행히 Mac에서는 대부분 가능하지만 착용 테스트는 iPhone만 필요함. 펌웨어 업그레이드는 사용자가 제어할 수도 없고 상태나 진행률 정보도 전혀 없어 최대한 혼란스럽게 되어 있음
      Apple Store 지원 직원이 “AirPods를 Mac에 연결한 채 열린 케이스에 넣고, 케이스를 전원에 연결해 30분 정도 두라”고 한 적이 있는데, 실제로는 업데이트에 무작위성이 꽤 있는 느낌임. Apple Store 직원들도 iPhone을 제외한 Apple 제품 간 연동은 가끔 매우 모호하게 아는 듯했고, AirPods를 iPhone 없이 Mac과 Android만으로 쓴다는 사실에 두 번이나 당황했음
  • 글에 나온 Apple Support 링크는 인도판으로 보이고, 미국판은 여기임:
    https://support.apple.com/en-us/106340
    미국판은 최신 펌웨어 버전 번호가 다르게 나오며, 예를 들어 AirPods Pro 2세대는 6F8인데 인도판은 6B34임
  • Linux에서도 이 기능을 구현한 세부 내용을 다루는 글이 나오면 매우 궁금함
    Linux 구현에 대한 후속 글을 기다리게 됨
  • AirPods 2의 펌웨어가 오래된 버전인데, 사용자 입장에서는 iOS에 명시적으로 업데이트를 시킬 수 없고 업데이트가 언제 일어나는지도 표시되지 않음
    업데이트 제어권이 더 있었으면 좋겠음
    • “AirPods가 충전 중이고 Wi‑Fi에 연결된 iPhone, iPad, Mac의 Bluetooth 범위 안에 있으면 펌웨어 업데이트가 자동으로 전달된다”고 되어 있음
      https://support.apple.com/en-us/106340
    • 현재와 미래의 AirPods에 기능이 더 추가될수록, 업데이트를 직접 트리거하거나 최소한 업데이트가 일어났다는 알림은 받고 싶음
      AirPods 사용자 95% 이상은 펌웨어 업데이트를 몰라도 되는 게 맞지만, 신경 쓰는 사람에게는 무슨 일이 일어나는지 확인할 방법이 있어야 함
      보통은 큰 문제가 아니지만 AirPods 펌웨어를 며칠 늦게 받은 적이 있고, 앞으로는 즉시 업데이트가 중요한 시점이 올 수도 있음
    • 더 많은 제어권을 원한다면 Apple 제품이 맞지 않을 수 있음
    • 이걸 역공학하는 데 시간을 투자해 보고 싶음. 재미있을 듯함
  • 취약점은 당연히 나쁘지만, 이게 실제로 얼마나 심각한지 알고 싶음. 공격자가 할 수 있는 “무서운” 일이 무엇인지 궁금함
    기존 연결을 끊는 방식이라면 사용자가 모르게 통화나 오디오 스트림을 엿듣기는 어려워 보임. 최악이 가까운 거리에서 MAC 주소를 스캔하고 자동 연결해 귀에 소음을 재생하는 정도인지, 아니면 더 큰 문제가 있는지 모르겠음
    고위 유명인이나 정치인이 화상 통화 중일 때 AirPods를 빼앗는 식은 가능할 수 있지만 바로 들킬 것 같고, 그보다 더 나쁜 일이 있는지 궁금함
    • 공격자는 위험할 만큼 큰 소리를 재생할 수 있고, AirPods를 끼고만 있고 사용하지 않는 사람의 주변 소리를 엿들을 수 있으며, 통화 서비스를 거치거나 통화 기록을 남기지 않고 발신자처럼 가장할 수도 있음
      또한 Bluetooth 연결을 장악한다는 건 꽤 넓은 공격 표면을 얻는 것이므로, 공격자가 다른 취약점을 알고 있다면 추가 익스플로잇 체인으로 이어질 길도 열림
    • 최악의 경우, 누군가 가방에 떨어뜨려 둘 수 있는 장치를 만들어 헤드폰의 모든 소리를 녹음할 수 있음. USB 드라이브 같은 형태도 가능함
      “Fast Connect” 프로토콜이 여러 기기에 동시에 “연결”되는 걸 허용하는 것으로 보이므로, 사용자는 알아차리지 못할 가능성이 큼. 또 다른 공격은 청소부처럼 사무실 곳곳에 커피 컵받침 모양 장치를 놓아 주변 AirPods의 오디오를 낚아채는 식임
      핵심적으로 어려운 부분은 이미 해결된 셈이고, 작은 배터리와 Bluetooth 송신기, 저장장치를 넣은 기기만 만들면 사람들이 말하는 곳 근처에서 고품질 오디오를 수집할 수 있음
    • 많은 사람이 AirPods를 적극적으로 쓰지 않을 때도 귀에 꽂고 다니므로, 그런 경우 마이크를 써서 대면 대화를 엿들을 수 있음
      다만 Bluetooth 범위 안에 있어야 하니 그냥 평범하게 엿듣는 편이 더 쉬울 수도 있음
    • 현실적으로 최악은 그냥 성가시게 만드는 정도임
      패치되지 않았다면 누군가 Flipper Zero용 AirPods 방해 앱을 만들어 공공장소에서 모두의 AirPods 오디오를 끊어 짜증나게 했을 것임
  • Settings > Bluetooth > Your AirPods에서 [i] 를 누르면 AirPods가 현재 연결되어 있지 않아도 버전을 볼 수 있음
    6A326이 수정이 포함된 버전으로 보임
    https://support.apple.com/en-us/HT214111
    • “AirPods Firmware Update 6A326, AirPods Firmware Update 6F8, and Beats Firmware Update 6F8”라고 되어 있고, 내 기기는 6F8임
      아마 AirPods Pro 2세대용 버전으로 보임
  • 가능성은 낮다는 걸 알지만, 이번 일이 Apple이 다른 운영체제, 최소한 Android에서의 AirPods 업데이트를 어떻게든 지원하게 만드는 계기가 되면 좋겠음
  • 수동 업데이트 옵션이 없음. 업데이트는 자동 업데이트뿐이고, 그 자동 업데이트를 어떻게 유도해야 하는지도 불분명함
    • 기억이 맞다면 AirPods를 제거하거나 페어링 해제한 뒤 강제로 다시 페어링하면 업데이트가 강제로 트리거됨
  • 배터리가 닳지 않는다는 점에 더해, 유선 헤드폰의 장점이 하나 더 늘었음
    • 안정적으로 연결된다는 장점도 있음. Linux에서 Bluetooth는 재앙임