OpenHaystack: Apple 네트워크를 통한 Bluetooth 기기 추적 ‘AirTags’ 제작 기술
(github.com/seemoo-lab)- OpenHaystack은 Apple의 Find My 네트워크를 이용해 개인용 Bluetooth 기기를 추적하는 프레임워크로, Mac과 BBC micro:bit 또는 Bluetooth 지원 기기로 자체 추적 태그를 만들 수 있음
- 주변 iPhone이 OpenHaystack 액세서리의 BLE 광고를 발견하면 위치를 암호화해 Apple 서버에 업로드하고, OpenHaystack은 해당 위치 보고서를 내려받아 복호화해 지도에 표시함
- 이 프로젝트는 TU Darmstadt Secure Mobile Networking Lab의 Find My 네트워크 역공학·보안 분석 결과물이며, 위치 데이터 접근 취약점 CVE-2020-9986은 Apple이 수정함
- macOS 앱은 위치 보고서를 받기 위해 Apple Mail 플러그인을 사용하며, 설치 중 Gatekeeper를 일시적으로 비활성화하고 사용 중 Mail을 열어둬야 함
- 실험적 소프트웨어라 코드가 테스트되지 않았고 불완전하며, 제공 펌웨어 기반 액세서리는 고정 공개키를 브로드캐스트해 근처 다른 기기에서도 추적 가능할 수 있음
OpenHaystack이 하는 일
- OpenHaystack은 Apple의 Find My 네트워크를 통해 개인 Bluetooth 기기를 추적하는 프레임워크임
- 사용자는 자체 추적 태그를 만들어 열쇠고리, 백팩 같은 물체에 붙이거나 노트북 같은 Bluetooth 지원 기기에 통합할 수 있음
- 필요한 것은 Mac과 BBC micro:bit 또는 다른 Bluetooth 지원 기기임
- 셀룰러 연결이 없어도 주변 iPhone이 액세서리를 발견하고 네트워크 연결 시 위치를 Apple 서버에 업로드함
연구 기반과 보안 분석
- OpenHaystack은 Apple의 Find My network 또는 offline finding에 대한 역공학과 보안 분석 결과에서 나옴
- TU Darmstadt의 Secure Mobile Networking Lab은 2019년 6월 Apple의 offline finding 발표 이후 분석을 시작함
- 이 시스템은 다음 요소를 결합함
-
Bluetooth 광고
- 공개키 암호화
- 암호화된 위치 보고서의 중앙 데이터베이스
- 분석 과정에서 두 가지 취약점이 발견됨
- 가장 심각한 취약점은 악성 애플리케이션이 위치 데이터에 접근할 수 있게 했음
- 해당 취약점은 Apple이 수정했으며 CVE-2020-9986로 식별됨
- 관련 보안·프라이버시 분석은 PoPETs 2021 논문 Who Can Find My Devices? Security and Privacy of Apple's Crowd-Sourced Bluetooth Location Tracking System에서 다룸
-
실험적 소프트웨어라는 제약
- OpenHaystack은 실험적 소프트웨어이며 코드가 테스트되지 않았고 불완전함
- 제공 펌웨어를 사용하는 OpenHaystack 액세서리는 고정 공개키를 브로드캐스트함
- 이 때문에 근처의 다른 기기에서도 추적 가능할 수 있음
- 이 동작은 향후 릴리스에서 바뀔 수 있음
- OpenHaystack은 Apple Inc.와 제휴하거나 Apple의 보증을 받는 프로젝트가 아님
구성 요소와 사용 흐름
- OpenHaystack은 두 가지 구성 요소로 이뤄짐
- macOS 애플리케이션: 개인 Bluetooth 기기의 마지막 보고 위치를 표시함
- 펌웨어 이미지: Bluetooth 기기가 iPhone에 발견될 수 있는 비콘을 브로드캐스트하게 함
- 시스템 요구 사항은 macOS 11 Big Sur임
- 새 액세서리를 만들 때 사용자는 이름을 입력하고 선택적으로 아이콘과 색상을 고름
- 앱은 위치 보고서 암호화와 복호화에 사용할 새 키 쌍을 생성함
- 개인키는 Mac의 키체인에 저장됨
- 기기 배포는 USB로 지원 기기를 Mac에 연결한 뒤 앱의 Deploy 버튼을 사용하는 방식임
- 통합 배포 대신 광고에 쓰이는 공개키를 복사해 수동 배포할 수도 있음
- 지도에서 첫 위치 보고서가 보이기까지 최대 30분이 걸릴 수 있음
- 지도는 모든 항목의 최신 위치를 표시함
- 각 항목을 클릭하면 마지막 업데이트 수신 시점을 확인할 수 있음
- reload 버튼으로 위치 보고서를 갱신할 수 있음
Mail 플러그인과 설치 방식
- OpenHaystack 앱은 Apple 서버에서 위치 보고서를 내려받기 위해 Apple Mail용 커스텀 플러그인을 요구함
- 이 플러그인은 비공개 API 사용에 필요한 Apple Mail의 권한을 상속받는 방식으로 동작함
- 설치 과정에서 Gatekeeper를 일시적으로 비활성화해야 함
sudo spctl --master-disable로 Gatekeeper를 끔- Mail의 Preferences → General → Manage Plug-Ins에서
OpenHaystackMail.mailbundle을 활성화함 - 이후
sudo spctl --master-enable로 Gatekeeper를 다시 켬
- 플러그인은 이메일 같은 다른 개인 데이터에 접근하지 않는다고 되어 있음
- 위치 보고서 다운로드 중에는 OpenHaystack 앱이 플러그인과 통신하므로 Mail을 열어둬야 함
Find My 네트워크 동작 방식
- OpenHaystack은 Apple의 offline finding 시스템을 네 단계로 설명함
-
페어링
- Find My 네트워크 사용을 위해 P-224 타원곡선 기반 공개키·개인키 쌍을 생성함
- 개인키는 Mac 키체인에 안전하게 저장됨
- 공개키는 micro:bit 같은 액세서리에 배포됨
-
분실 상태
- 액세서리는 공개키를 Bluetooth Low Energy 광고로 브로드캐스트함
- 주변 iPhone은 OpenHaystack 액세서리를 실제 Apple 기기 또는 인증 액세서리와 구별할 수 없음
-
발견
- 주변 iPhone이 BLE 광고를 받으면 GPS로 현재 위치를 가져옴
- iPhone은 광고에 포함된 공개키로 위치를 암호화하고 Apple 서버에 암호화된 보고서를 업로드함
- iOS 13 이상 iPhone은 기본적으로 이 동작을 수행함
- 이 단계에는 OpenHaystack이 관여하지 않음
-
검색
- Apple은 어떤 암호화된 위치가 어떤 Apple 계정이나 기기에 속하는지 알지 못함
- 대응하는 공개키를 알면 Apple 사용자는 어떤 위치 보고서든 내려받을 수 있음
- 보고서는 종단간 암호화되어 있어 개인키가 없으면 복호화할 수 없음
- OpenHaystack은 OpenHaystack 액세서리용 보고서를 Apple에서 내려받고, Mac 키체인에 저장된 개인키로 복호화한 뒤 지도에 최신 위치를 표시함
- Apple은 인증된 Apple 사용자만 위치 보고서를 내려받게 해 데이터베이스의 임의 접근을 제한함
지원 기기와 확장
- 원칙적으로 Bluetooth 기기는 Apple Find My 네트워크로 추적 가능한 OpenHaystack 액세서리로 만들 수 있음
- 현재 편리한 펌웨어 배포 방식은 일부 임베디드 기기만 지원함
- Linux 기기는 일반 HCI 스크립트로 지원함
- 지원 예시는 다음과 같음
- Nordic nRF51: BBC micro:bit v1에서 테스트됨, 앱 배포 지원, 현재 nRF51822만 지원함
- Espressif ESP32: ESP32-WROOM, ESP32-WROVER에서 테스트됨, 앱 배포 지원, 배포에 최대 3분이 걸릴 수 있고 Python 3이 필요함
- Linux HCI: Raspberry Pi 4와 Raspbian에서 테스트됨, 모든 Linux 머신을 지원해야 함
- Bluetooth Low Energy를 지원하는 다른 기기로 포팅할 수 있으며, 펌웨어 소스 코드와 논문 명세를 기반으로 작업할 수 있음
OpenHaystack Mobile
- OpenHaystack Mobile은 OpenHaystack macOS 애플리케이션을 스마트폰용으로 완전히 다시 구현한 앱임
- 액세서리 생성과 추적 기능을 제공하며, 특히 신규 사용자의 사용성을 높이는 것을 목표로 함
- macOS 앱과 달리 스마트폰에서는 위치 보고서를 직접 가져올 수 없음
- Find My 네트워크에 접근하려면 Mac 하드웨어에서 호스팅되는 프록시 서버가 필요함
- 프록시 서버는 네트워크를 통해 여러 사용자가 동시에 접근할 수 있음
- 프록시 서버에 연결하려면
openhaystack-mobile/lib/findMy/reports_fetcher.dart에서 올바른 URL을 설정해야 함 - OpenHaystack Mobile은 Flutter framework로 만들어졌고 Android와 iOS에서 실행됨
라이선스와 참고 자료
- OpenHaystack은 GNU Affero General Public License v3.0으로 배포됨
- 주요 참고 자료
댓글과 토론
Hacker News 의견들
-
Apple 사용자가 아닌 사람에게도 좋은 선택지가 있으면 좋겠음. 들은 바로는 Google 버전은 예상대로 꽤 별로라고 함
자기 태그를 검색할 수 있는 빈도에 제한이 있고, 여러 대의 휴대폰에 감지되기 전까지 위치를 보여주지 않으며, 커버리지도 나쁨
한 테스트에서는 Samsung 네트워크가 더 낫다고 나왔는데, Samsung 폰은 Google 네트워크 안의 모든 Android 폰 중 일부여야 하니 말이 안 됨. 이론상 좋아 보여도 Apple이 방법을 보여준 지 몇 년이 지난 뒤에도 실행이 형편없는 Google 제품다운 모습임
https://security.googleblog.com/2024/04/find-my-device-netwo...
https://9to5google.com/2024/08/01/find-my-device-stress-test...
https://9to5google.com/2024/08/03/google-android-find-my-dev...
https://www.androidcentral.com/accessories/testing-new-googl...- Google의 찾기 네트워크 담당자가 개인정보 보호를 우선하느라 제품의 유일한 기능을 망가뜨린 게 황당할 정도임
이 선택으로 Google은 실제 성능이 얼마나 나쁜지 검증되기 전 “혁신적” 개인정보 보호 개선을 다룬 기사 몇 개를 얻었지만, Apple과 이 분야에서 경쟁할 기회를 잃었고 Android/Pixel 생태계와 시장 점유율에도 악영향을 줌. 이 정도 무능은 지어내기도 어려움 - Google이 네트워크를 이렇게 망친 게 믿기 어려움. 원래라면 Android 점유율 때문에 Apple 네트워크를 압도해야 함
유목 여행자 입장에서는 Apple 네트워크가 특별히 유용하지 않음. Apple 폰이 많은 부유한 도시가 아니라 Android 점유율이 90%에 가까운 “나머지 세계”로 다니기 때문임. 그런데도 그곳에서도 Apple이 Google보다 더 잘하는 것처럼 보임 - 열쇠에 하나 달아뒀는데, 한 번 써보려 했을 때 여러 번 새로고침해도 반경 0.25마일짜리 원만 보여줬음
실제로는 바로 옆 가방 안에 있었음 - Samsung의 해법은 하위 집합이 아니라 별도의 더 나은 방식임
아주 외진 나라의 공항이나 마을에서도 태그 2개를 잘 찾을 수 있어서 마음이 놓임. 이 영상도 iPhone 사용자라도 Samsung SmartTag가 최고라고 결론냄
https://m.youtube.com/watch?v=9wefUV_bR0Y - Google도 그냥 Find My에 올라타야 할 것 같음
- Google의 찾기 네트워크 담당자가 개인정보 보호를 우선하느라 제품의 유일한 기능을 망가뜨린 게 황당할 정도임
-
코드를 보면 FindMy 네트워크의 기기들이 수집한 위치를 가져오기 위해 개인 Apple Mail 권한을 쓰는 것 같음
https://github.com/seemoo-lab/openhaystack/blob/8d214aa5eb68...
Apple 개발자 계정을 만들면 이것도 가능할지 궁금함- Apple Mail과 상호작용하지 않아도 되는 버전들이 있음
필요한 건 Apple 계정뿐이고, Apple 하드웨어에서 코드를 실행할 필요도 없음
https://github.com/biemster/FindMy
- Apple Mail과 상호작용하지 않아도 되는 버전들이 있음
-
예전에 본 자료를 찾고 싶음. Apple은 “당신을 따라다닐 수 있는 태그”를 사용자에게 알리는데, 누군가 키 유도 함수(KDF) 로 MAC 주소나 개인 키 같은 것을 회전시키는 구현을 만들었고, 그 파생값들을 추적할 수 있을 만큼 예측 가능했던 것으로 기억함
사는 곳에 사소한 절도 문제가 정말 심해서, 깨진 창문을 계속 고치거나 강제 침입 흔적을 치우는 데 드는 시간이 꽤 큼. 누구와 직접 대면할 생각은 전혀 없지만, 언젠가 사설탐정이나 법집행기관에 줄 수 있는 이동 경로를 만들고 싶음- GPS 셀룰러 추적기를 사고 아주 싼, 심지어 무료인 IoT SIM을 쓰면 됨
아니면 생수 한 박스를 들고 가까운 약물 중독자 모임 장소로 가서 물건 좀 그만 털어달라고 부탁할 수도 있음 - 알기로는 AirTag도 어차피 개인 키를 회전하므로 그게 문제 해결에 도움이 될지 모르겠음
다만 회전 주기가 느릴 수도 있고, 정확한 알고리즘은 잘 모름 - 내 제출 목록에 OpenHaystack과 그 알림에 대해 쓴 글 링크가 있음. 요약하면, 한동안 차 안에 넣어둔 OpenHaystack 기반 추적기에 대해 iOS가 한 번도 경고하지 않았음
다만 몇 년 전 일이라 지금은 달라졌을 수 있음
- GPS 셀룰러 추적기를 사고 아주 싼, 심지어 무료인 IoT SIM을 쓰면 됨
-
자체적인 불안정한 절차로 위치를 가져오는 대신 Find My 앱과 통합할 방법이 있으면 좋겠음
중국산 복제품들은 자체 브랜드를 달고도 되니, 어떻게든 가능한 게 분명해 보임- 여기서 그게 Apple의 울타리 친 정원처럼 보임. 예전에 공식 파트너용 Apple 사양을 읽어보니, 페어링 과정에서 Apple이 해당 개발자에게 발급한 인증서/키로 기기가 무언가에 서명함. 계약, 즉 돈을 거친 뒤의 키이고, 실제 방송에 쓰는 키쌍과는 다르다는 점이 중요함
그 서명은 Apple이 검증하고, 그래서 해당 Apple ID 계정과 앱에 추가될 수 있음. 반면 분실 모드에서 기기들이 방송하는 키는 임의이고 완전히 불투명해서 Apple도 이를 ID, 기기, 개발자와 연결할 방법이 없음. 이 프로젝트가 동작하는 이유도 그 키들이 결국 Apple 서버로 들어가기 때문임
복제품들은 페어링 과정용 정상 키를 탈취한 것처럼 보임. Apple이 마음먹고 그 키를 찾아내면 모든 계정에서 모든 기기를 제거할 수 있을 것 같지만, 기기 자체는 계속 방송하고 위와 같은 조잡한 방식으로 위치에 접근할 수 있음. 원래 키 소유자가 나중에 Apple이 데이터베이스에서 “이 키로 서명되어 Apple ID에 추가된 기기 수”를 세면 기기당 로열티로 큰 청구서를 받게 될지도 궁금함 - “중국산 복제품”은 공식 지원 제품이고, 방법은 여기 있음: https://developer.apple.com/find-my/
- 중국산 복제품들은 Apple Find My 프로그램을 사용하므로 앱에 표시될 수 있는 공식 태그임
OpenHaystack은 다른 키를 쓰는 해킹이라, 암호학적인 이유로 앱에 표시될 수 없음 - 복제품들도 제한이 있지 않나? 예를 들어 방향 찾기 같은 기능은 없는 것으로 기억하는데, 다른 데서 읽은 걸 잘못 기억하는 걸 수도 있음
- 여기서 그게 Apple의 울타리 친 정원처럼 보임. 예전에 공식 파트너용 Apple 사양을 읽어보니, 페어링 과정에서 Apple이 해당 개발자에게 발급한 인증서/키로 기기가 무언가에 서명함. 계약, 즉 돈을 거친 뒤의 키이고, 실제 방송에 쓰는 키쌍과는 다르다는 점이 중요함
-
정말 멋짐. Apple AirTag를 좋아하지만 너무 두껍고 모양도 애매함
지갑에 넣을 수 있는 신용카드 형태 AirTag가 있으면 좋겠고, 고양이 목걸이에 달 수 있는 더 작은 AirTag도 있으면 좋겠음- Temu나 Aliexpress에서 약 5달러에 서드파티 Find My 호환 태그를 살 수 있음. 일반 AirTag와 크기는 비슷하지만, 케이스를 버리고 싶을 때 분해가 더 쉽고 더 저렴함
가지고 있던 것 하나를 케이스에서 꺼내 무엇을 더 얇게 만들 수 있는지 봤더니, 두께의 대부분은 CR2032 배터리 홀더, 스피커, 버튼 때문이었음. 스피커와 버튼은 초기 설정 뒤에는 없앨 수 있을 것 같고, 배터리 홀더도 제거한 뒤 얇은 카드형 폼팩터를 원한다면 위쪽이 아니라 옆쪽에서 전원을 공급할 수 있음 - 지갑에 들어가는 초박형 AirTag 호환 카드가 이미 있음
- 몸무게 8.5파운드인 내 삼색 고양이가 생후 3개월 때부터 목걸이에 달고 다닌 AirTag 사진임
https://imgur.com/a/r9EGSOc
사진은 방금 Meta Stories 안경으로 찍었음 - 개에게 이걸 쓰고 있는데 매우 미니멀함
https://www.amazon.com/gp/product/B09DCVFNFF/
다만 AirTag가 홀더에서 비틀려 빠지지 않도록 투명 테이프로 감아둘 필요가 있었음
- Temu나 Aliexpress에서 약 5달러에 서드파티 Find My 호환 태그를 살 수 있음. 일반 AirTag와 크기는 비슷하지만, 케이스를 버리고 싶을 때 분해가 더 쉽고 더 저렴함
-
자세히 조사해보진 않았지만, 이걸 이용해 작은 임의 데이터 페이로드를 얹어 보낼 수 있을지 궁금함
- 가능함. 최근에 AirTag 네트워크를 이용해 하드웨어 키로거 데이터를 전송한 프로젝트가 있었음
컴퓨터가 완전히 격리되어 있어도, 타이핑하는 사람의 iPhone을 통해 데이터가 돌아갈 수 있음 - 우편함 상태를 추적하는 데 이걸 쓴 사례를 봤음. 우편함 안의 접촉 센서가 트리거 횟수에 따라 방송 키를 회전시킴
키가 바뀌어 새로운 다른 기기가 보이면 우편물이 들어왔다는 뜻이라 꽤 영리함
- 가능함. 최근에 AirTag 네트워크를 이용해 하드웨어 키로거 데이터를 전송한 프로젝트가 있었음
-
단일 기기가 Apple 서버에 올릴 수 있는 전송량의 상한이 궁금함. Apple 기기에 셀룰러나 Wi-Fi가 없으면 그 위치 핑 기록이 기기에 얼마나 오래 남을까?
또 여기 서비스 거부 공격 가능성이 있는지도 궁금함. 공격자가 100만 개 이상의 Bluetooth 기기를 흉내 내고, 피해자가 우연히 지나가면 한 장소에 엄청난 수의 기기가 있어 휴대폰이 멈추고 Apple 서버로 계속 업로드하게 되는 식임 -
그런데 iPhone이나 Mac 같은 다른 Apple 기기 없이도 이걸로 실제 AirTag 설정이 가능할까?
- https://github.com/dchristl/macless-haystack로 가능함
- 가능할 것 같음. 직접 해보진 않았지만 이 저장소를 확인해보면 됨: https://github.com/malmeloo/FindMy.py/blob/main/examples/rea...
- 이 질문에 누가 왜 다운보트했는지 알고 싶음. 유효한 질문 아닌가?
-
이것들을 실제 Apple Find My 앱과 페어링해서 앱 안에서 찾을 수 있나?