Loupe: iOS 기기 핑거프린팅 표면 시각화
Loupe는 네이티브 애플리케이션에서 사용할 수 있는 기기 핑거프린팅 표면을 보여주기 위해 설계된 오픈 소스 iOS 및 iPadOS 애플리케이션입니다. 모든 서드파티 앱에서 사용할 수 있는 것과 동일한 공개 iOS API로부터 실제 값을 읽음으로써, Loupe는 이름이나 이메일 주소와 같은 명시적인 식별자가 필요하지 않더라도 앱이 사용자를 인식하고 여러 플랫폼에 걸쳐 추적할 수 있도록 수집할 수 있는 원시 데이터를 공개합니다.
기기 핑거프린팅 메커니즘
기기 핑거프린팅은 앱이 기기의 고유 식별자를 생성하기 위해 다양한 비고유 데이터 포인트를 수집할 때 발생합니다. 개별 데이터는 그 자체로 고유하지 않을 수 있지만, 이러한 신호들의 조합은 추적자가 여러 앱과 웹사이트에서 사용자를 식별할 수 있게 하는 높은 엔트로피의 핑거프린트를 생성합니다.
Loupe의 데이터 접근 계층
Loupe는 데이터 접근의 "비용"과 운영 체제에서 요구하는 권한 수준에 따라 수집된 데이터를 세 가지 계층으로 분류합니다:
수동적 신호 (Passive Signals)
수동적 신호는 시스템 프롬프트를 트리거하지 않고 모든 애플리케이션에서 볼 수 있습니다. 여기에는 다음이 포함됩니다:
- Locale settings
- Time zone
- Screen specifications
- Battery status
- 기타 일반적인 기기 메타데이터
권한 기반 신호 (Permission-Based Signals)
이러한 데이터 읽기는 표준 iOS 권한 프롬프트를 트리거하며, 사용자가 다음과 같은 특정 데이터 범주에 대한 접근을 명시적으로 허용해야 합니다:
- Contacts
- Photos
- Location
- Calendars
고급 신호 (Advanced Signals)
고급 신호는 정보를 수집하기 위해 공개 API를 사용하는 사이드 채널 방식을 포함합니다. 예시는 다음과 같습니다:
- URL-scheme probing:
canOpenURL을 사용하여 기기에 어떤 다른 앱이 설치되어 있는지 감지합니다. - Keychain persistence: Keychain을 활용하여 앱이 삭제되고 재설치된 후에도 유지되는 데이터를 저장합니다.
개인정보 보호 및 개발
Loupe는 개인정보 보호를 우선시하는 방식으로 구축되었습니다. 사용자가 명시적으로 내보내지 않는 한, 앱이 읽은 데이터는 기기를 떠나지 않습니다. 모든 값은 집계나 해싱 없이 원시 상태로 표시되며, 외부 서버로 업로드되거나 동기화되지 않습니다.
특히, 이 프로젝트는 거의 전까지 AI 코딩 도구를 사용하여 개발되었습니다. 소스 코드는 MIT License 하에 공개되지만, 브랜딩, 로고 및 디자인 파일은 Mysk의 독점 자산으로 남습니다.
빌드 요구 사항
소스에서 Loupe를 빌드하고자 하는 개발자는 다음 요구 사항이 필요합니다:
- Xcode 26 또는 최신 버전.
- 유효한
DEVELOPMENT_TEAM및 번들 식별자(bundle identifiers)가 포함된 로컬Signing.local.xcconfig파일 구성.
Loupe는 macOS도 지원하지만, 현재 Mac 버전은 iOS 버전보다 덜 다듬어진 상태입니다.