Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/aalex954/whisperpair-poc-tool
ReconnaissanceBluetooth SecurityVulnerability AnalysisExploitationInformation GatheringWireless SecurityPenetration TestingHardware SecurityRed Teaming
GitHubaalex954/whisperpair-poc-tool

whisperpair-poc-tool

CVE-2025-36911: Fast Pair Pairing Mode Bypass 취약점을 식별하고 시연하는 보안 연구 도구

76개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

WhisperPair-PoC-Tool 및 연구

CVE-2025-36911과 Google Fast Pair 생태계의 보안 취약점에 대한 심층 분석

블로그 게시물

데모

요약

Google Fast Pair는 Bluetooth 페어링을 매끄럽게 만들기 위해 설계되었습니다. 알림을 탭하면 연결되는 방식입니다. 하지만 이 매끄러운 경험이 보안상의 책임이 되면 어떻게 될까요? WhisperPair-PoC-Tool은 수백만 개의 Bluetooth 액세서리에 영향을 미치는 두 가지 중요한 취약점 클래스, 즉 무단 페어링 우회와 Find My Device 네트워크 추적 악용을 드러내는 보안 연구 도구입니다.

이 글은 WhisperPair-PoC-Tool의 기술적 내부 구조, 이 도구가 악용하는 프로토콜 취약점, 그리고 이것이 Bluetooth 액세서리 생태계에 의미하는 바를 자세히 설명합니다.


목차

  1. 취약점
  2. Fast Pair 프로토콜 입문
  3. WhisperPair-PoC-Tool 작동 방식
  4. 공격 표면
  5. 탐지 방법론
  6. 악용 기능
  7. 수정 지침
  8. 윤리적 고려 사항

취약점

CVE-2025-36911: Fast Pair 페어링 모드 우회

Google Fast Pair 사양은 명시적으로 다음과 같이 명시합니다:

"선택적 공개 키(Public Key) 필드가 있는 경우: 기기가 페어링 모드가 아니면 쓰기를 무시하고 종료합니다."

  • Google Fast Pair GATT 프로시저 사양

이것이 중요한 보안 관문입니다. 기기는 사용자가 명시적으로 페어링 모드로 전환한 경우(일반적으로 버튼을 길게 누름)에만 키 기반 페어링(Key-Based Pairing) 요청에 응답해야 합니다. 이는 사용자 의도를 보장하므로, 상대방이 착용 중인 이어버드에 페어링할 수 없습니다.

문제점: 많은 제조사가 이 검사를 완전히 건너뜁니다. 페어링 모드 상태와 관계없이 페어링 요청을 처리하여 다음과 같은 문제를 가능하게 합니다:

  • 사용자 상호작용 없는 무음 페어링
  • 근접 공격에서의 액세서리 하이재킹
  • 피해자 기기에 연결하여 발생하는 개인정보 침해

Find Hub 계정 키 노출

Google의 Find My Device 네트워크(FMDN)는 크라우드소싱된 Android 기기 네트워크를 통해 Bluetooth 액세서리를 추적할 수 있게 해줍니다. 이를 위해서는 기기를 Google 계정에 연결하는 16바이트 대칭 키인 **계정 키(Account Key)**가 필요합니다.

문제점: Account Key 특성(characteristic)은 인증 없이 쓰기를 허용하는 경우가 많습니다:

  • 공격자가 기존 Account Key를 덮어쓸 수 있음
  • 피해자의 Find My Device 통합이 중단됨
  • 공격자가 자신의 키를 사용하여 기기를 추적할 수 있음
  • 공장 초기화 전까지 지속됨

Fast Pair 프로토콜 입문

악용에 대해 자세히 살펴보기 전에, 정상적인 Fast Pair 흐름을 이해해 봅시다:

광고 단계

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                    BLE Advertisement                         │
├─────────────────────────────────────────────────────────────┤
│  Service UUID: 0xFE2C (Fast Pair)                           │
│  Service Data:                                               │
│    [Pairing Mode]   → 3 bytes: Model ID only                │
│    [Not Pairing]    → 4+ bytes: 0x00 + Account Key Filter   │
└─────────────────────────────────────────────────────────────┘

광고 형식은 페어링 상태를 드러냅니다:

  • 3바이트 = Model ID만 = 기기 검색 가능(페어링 모드)
  • 4바이트 이상 = 버전 바이트 + Account Key 데이터 = 페어링 모드 아님

키 기반 페어링 핸드셰이크

root@kitploit:~
Seeker (Phone)                              Provider (Accessory)
      │                                              │
      │───── GATT Connect ──────────────────────────>│
      │                                              │
      │───── Discover Services ─────────────────────>│
      │<──── Service: 0xFE2C ────────────────────────│
      │                                              │
      │───── Enable Notifications (0xFE2C1234) ─────>│
      │                                              │
      │───── Write Key-Based Pairing Request ───────>│
      │      [16-byte encrypted block]               │
      │      [64-byte ECDH Public Key] (optional)    │
      │                                              │
      │      ┌────────────────────────────────────┐  │
      │      │ SECURITY CHECK:                    │  │
      │      │ If Public Key present AND          │  │
      │      │ device NOT in pairing mode:        │  │
      │      │   → IGNORE and EXIT                │  │
      │      │ Else:                              │  │
      │      │   → Process request                │  │
      │      └────────────────────────────────────┘  │
      │                                              │
      │<──── Notification: Encrypted Response ───────│
      │      [Provider's BR/EDR Address]             │
      │                                              │
      │═══════ Bluetooth Classic Pairing ═══════════>│

취약점은 기기가 'SECURITY CHECK' 상자를 완전히 건너뛸 때 발생합니다.


WhisperPair-PoC-Tool 작동 방식

WhisperPair-PoC-Tool은 Bleak BLE 라이브러리 기반의 Python 기반 보안 연구 도구입니다. 여러 단계로 작동합니다:

아키텍처 개요

root@kitploit:~
┌────────────────────────────────────────────────────────────────┐
│                        WhisperPair-PoC-Tool                          │
├────────────────────────────────────────────────────────────────┤
│  CLI Layer                                                      │
│  ├── Argument parsing (--target-name, --scan-duration)         │
│  ├── TargetPolicy construction                                  │
│  └── REPL initialization                                        │
├────────────────────────────────────────────────────────────────┤
│  Discovery Engine                                               │
│  ├── BLE scanning via Bleak                                    │
│  ├── Advertisement parsing                                      │
│  ├── Protocol detection (Fast Pair, FMDN, Swift Pair)          │
│  └── Device fingerprinting (Model ID, OUI lookup)              │
├────────────────────────────────────────────────────────────────┤
│  Check Engines                                                  │
│  ├── FastPairCheckEngine (passive advertisement analysis)      │
│  ├── FastPairBypass (active CVE-2025-36911 testing)           │
│  ├── FindHubCheckEngine (Account Key status detection)         │
│  └── RiskScorer (composite vulnerability assessment)           │
├────────────────────────────────────────────────────────────────┤
│  Connection Manager                                             │
│  ├── GATT connect with MTU negotiation                         │
│  ├── Service/characteristic discovery                          │
│  ├── Read/Write/Notify operations                              │
│  └── Error handling and retry logic                            │
├────────────────────────────────────────────────────────────────┤
│  Exploitation Modules                                           │
│  ├── ring_device() - Trigger locator sound                     │
│  ├── set_account_key() - Write Account Key                     │
│  └── Response parsing (BR/EDR address extraction)              │
└────────────────────────────────────────────────────────────────┘

핵심 구성 요소

1. 검색 엔진 (discovery.py)

스캐너는 Bleak의 탐지 콜백을 사용하여 BLE 광고를 캡처합니다:

root@kitploit:~
async def _detection_callback(
    self, device: BLEDevice, advertisement_data: AdvertisementData
) -> None:
    """Process each detected BLE advertisement."""
    discovered = DiscoveredDevice(
        address=device.address,
        name=device.name or advertisement_data.local_name,
        rssi=advertisement_data.rssi,
        advertisement=self._convert_advertisement(advertisement_data),
        first_seen=datetime.now(UTC),
        last_seen=datetime.now(UTC),
    )
    self._devices[device.address] = discovered

각 기기에 대해 도구는 다음을 추출합니다:

  • 서비스 UUID (Fast Pair 0xFE2C, FMDN 0xFD44 등 탐지)
  • 제조업체 데이터 (Google 0x00E0, Apple 0x004C)
  • 서비스 데이터 (Model ID 및 페어링 상태 파싱)

2. 페어링 모드 추론 (fastpair.py)

기기의 광고를 분석하여 페어링 모드를 결정합니다:

root@kitploit:~
def _analyze_service_data(self, evidence: FastPairEvidence) -> None:
    """Analyze Fast Pair service data to infer pairing mode."""
    data = evidence.service_data_bytes
    
    # 3 bytes = Model ID only = Pairing Mode (discoverable)
    if len(data) == 3:
        evidence.inferred_pairing_mode = PairingModeState.IN_PAIRING_MODE
        return
    
    # 4+ bytes with version 0x00 = Not in pairing mode
    if data[0] == 0x00:
        akd_byte = data[1]
        akd_type = akd_byte & 0x0F  # Lower 4 bits
        # Type 0x00 = Show UI, Type 0x02 = Hide UI
        # Both indicate NOT in pairing mode
        evidence.inferred_pairing_mode = PairingModeState.NOT_IN_PAIRING_MODE

이것이 중요합니다. 기기가 페어링 모드가 아닌 것으로 확인되었는데도 페어링 요청에 응답한다면 취약한 것입니다.

3. 취약점 탐지 (fastpair_attack.py)

핵심 취약점 테스트는 키 기반 페어링 요청을 보내고 응답을 모니터링합니다:

root@kitploit:~
async def check_vulnerability(self, device: DiscoveredDevice) -> BypassCheckResult:
    """Test if device responds to pairing requests when not in pairing mode."""
    
    # Enable notifications to receive response
    await self.connection_manager.start_notify(
        KEY_BASED_PAIRING_CHAR,
        self._notification_handler,
    )
    
    # Build and send request (multiple strategies)
    for strategy in self.strategies:
        request, flags = self._build_strategy_request(device.address, strategy)
        await self.connection_manager.write_characteristic(
            KEY_BASED_PAIRING_CHAR,
            request,
        )
        
        # Wait for response
        try:
            await asyncio.wait_for(
                self._response_received.wait(),
                timeout=self.response_timeout,
            )
            # Response received = VULNERABLE
            return BypassCheckResult(result=BypassResult.VULNERABLE, ...)
        except asyncio.TimeoutError:
            # No response = Device correctly ignored request
            continue
    
    return BypassCheckResult(result=BypassResult.NOT_VULNERABLE, ...)

도구는 여러 요청 전략을 구현합니다. 기기마다 서로 다른 플래그 조합에 응답하기 때문입니다:

4. 응답 파싱

취약한 기기가 응답하면 도구는 BR/EDR(Bluetooth Classic) 주소를 추출합니다:

root@kitploit:~
def _parse_response(self, response_data: bytes) -> str | None:
    """Extract provider's BR/EDR address from response."""
    
    # Strategy 1: Standard response (type 0x01)
    if response_data[0] == 0x01:
        return self._extract_address(response_data, offset=1)
    
    # Strategy 2: Extended response (type 0x02)
    if response_data[0] == 0x02:
        addr_count = response_data[2]
        return self._extract_address(response_data, offset=3)
    
    # Strategy 3: Brute force pattern matching
    for offset in range(len(response_data) - 5):
        addr = self._extract_address(response_data, offset)
        if self._is_valid_mac(addr):
            return addr

이 BR/EDR 주소는 Bluetooth Classic 페어링을 시작하는 데 사용될 수 있습니다(단, WhisperPair-PoC-Tool은 탐지 단계까지만 수행합니다).


공격 표면

무엇이 기기를 취약하게 만드는가?

연구를 통해 일반적인 구현 실패 사례가 확인되었습니다:

1. 페어링 모드 검사 누락

가장 흔한 문제: 제조사가 단순히 검사를 구현하지 않습니다:

root@kitploit:~
// VULNERABLE: No pairing mode check
void handle_kbp_write(uint8_t* data, size_t len) {
    if (len >= 80 && has_public_key(data)) {
        // Should check: if (!is_in_pairing_mode()) return;
        process_pairing_request(data);  // Processes regardless
    }
}

2. 보호되지 않는 Account Key 쓰기

Account Key 특성은 인증을 요구해야 합니다:

root@kitploit:~
// VULNERABLE: No authentication required
void handle_account_key_write(uint8_t* key, size_t len) {
    if (len == 16) {
        store_account_key(key);  // Accepts any key from anyone
    }
}

// SECURE: Verify caller knows existing key
void handle_account_key_write_secure(uint8_t* encrypted_key, size_t len) {
    if (!verify_encrypted_with_existing_key(encrypted_key)) {
        return;  // Reject unauthorized writes
    }
    store_account_key(decrypt(encrypted_key));
}

3. 광고 정보 노출

페어링 모드가 아닌 상태에서 Fast Pair 서비스 데이터를 광고하는 기기는 다음 정보를 노출합니다:

  • Fast Pair를 지원한다는 사실(공격 표면 식별)
  • Account Key 필터(기기 지문 인식에 사용 가능)
  • 잠재적으로 Model ID(정확한 기기 모델 식별)

탐지 방법론

WhisperPair-PoC-Tool은 계층적 탐지 방식을 사용합니다:

계층 1: 수동 광고 분석

연결이 필요 없습니다. 도구는 기기가 브로드캐스트하는 내용을 분석합니다:

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│  Passive Checks                                              │
├─────────────────────────────────────────────────────────────┤
│  ✓ Fast Pair service UUID present (0xFE2C)                  │
│  ✓ FMDN service UUID present (0xFD44)                       │
│  ✓ Pairing mode inferred from service data length           │
│  ✓ Model ID extracted (when in pairing mode)                │
│  ✓ Account Key Filter detected (when not in pairing mode)   │
│  ✓ Address type analysis (static vs. random)                │
└─────────────────────────────────────────────────────────────┘

Result: "Device advertising Fast Pair data while NOT in pairing mode"
        → Potential gating violation (needs active test to confirm)

계층 2: 능동 GATT 프로빙

연결이 필요합니다. 도구가 GATT 서비스와 상호작용합니다:

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│  Active Checks                                               │
├─────────────────────────────────────────────────────────────┤
│  1. Connect to device via BLE                               │
│  2. Discover Fast Pair service (0xFE2C)                     │
│  3. Locate Key-Based Pairing characteristic (0xFE2C1234)    │
│  4. Enable notifications                                     │
│  5. Write Key-Based Pairing request                         │
│  6. Wait for response (with timeout)                        │
│  7. Response received → VULNERABLE                          │
│     Timeout/Rejected → NOT VULNERABLE                       │
└─────────────────────────────────────────────────────────────┘

계층 3: 위험 점수 산정

복합 위험 점수가 계산됩니다:

위험 수준:

  • 낮음(LOW) (≤0): 심각한 문제가 감지되지 않음
  • 중간(MEDIUM) (1-2): 일부 우려되는 신호
  • 높음(HIGH) (≥3): 여러 취약점 확인됨

악용 기능

WhisperPair-PoC-Tool은 영향을 입증하기 위한 통제된 악용 기능을 포함합니다:

1. 기기 울리기 (ring 명령)

FMDN Beacon Actions 특성을 트리거하여 위치 알림음을 재생합니다:

공개 버전에서는 삭제됨

영향: 공격자는 소리를 반복적으로 트리거하여 피해자를 괴롭히거나, 훔치려는 기기의 위치를 파악하는 데 사용할 수 있습니다.

2. Account Key 조작 (set account-key 명령)

새 Account Key를 기기에 씁니다:

공개 버전에서는 삭제됨

영향:

  • 피해자의 Find My Device 통합을 중단시킴
  • 공격자가 자신이 아는 키로 기기를 추적할 수 있음
  • 공장 초기화를 통해서만 복구 가능

구현되지 않은 기능

WhisperPair-PoC-Tool은 의도적으로 완전한 악용 직전까지만 수행합니다:


수정 지침

기기 제조사를 위한 지침

  1. 페어링 모드 검사를 구현하십시오:
root@kitploit:~
if (has_public_key(request) && !is_in_pairing_mode()) {
    return;  // Ignore request per spec
}
  1. Account Key 쓰기에 대한 인증 요구:

    • 새 키를 기존 키로 암호화
    • 저장 전에 검증
  2. 광고 노출 최소화:

    • 페어링 모드에서만 Fast Pair UUID 광고
    • 가능하면 회전 주소 사용
  3. 펌웨어 업데이트 메커니즘:

    • 현장의 영향을 받는 기기에 수정 사항을 푸시

최종 사용자를 위한 지침

  1. Bluetooth 액세서리의 펌웨어를 최신 상태로 유지하십시오
  2. 손상이 의심되면 공장 초기화하십시오
  3. 버튼을 누르지 않고 자동 페어링되는 기기에 주의하십시오
  4. Find My Device 설정을 정기적으로 확인하십시오

의도된 용도

이 도구는 다음 용도로 사용됩니다:

  • ✅ 액세서리 구현을 평가하는 보안 연구자
  • ✅ 자사 제품을 테스트하는 QA 엔지니어
  • ✅ 자신의 액세서리를 점검하는 기기 소유자
  • ❌ 타인의 기기에 대한 무단 접근 아님

결론

WhisperPair-PoC-Tool은 '매끄러운' Fast Pair 경험에 많은 제조사가 해결하지 못하는 보안상의 트레이드오프가 수반됨을 보여줍니다. 페어링 모드 검사는 안전한 기기와 취약한 기기를 가르는 단 하나의 조건문이지만, 자주 누락됩니다.

Fast Pair의 신뢰 모델은 기기가 사용자 의도를 강제할 것이라고 가정합니다. 그렇지 않을 경우 공격자는 피해자 기기를 대상으로 무음 페어링, 추적 기능, 서비스 거부(DoS) 벡터를 얻게 됩니다.

이 도구는 생태계가 이러한 문제를 식별하고 수정하여 모든 사람을 위한 더 안전한 Bluetooth 액세서리를 만드는 데 기여하는 것을 목표로 합니다.


참고 자료

  • WhisperPair 원본 연구
  • Google Fast Pair 사양
  • CVE-2025-36911
  • Find My Device 네트워크 프로토콜
  • Bluetooth 핵심 사양
  • Bleak BLE 라이브러리

WhisperPair-PoC-Tool은 승인된 보안 연구 목적으로만 배포됩니다. 이 도구의 오용에 대한 책임은 지지 않습니다.

도구 다운로드
전략플래그설명
RAW_KBP0x11INITIATE_BONDING | EXTENDED_RESPONSE
WITH_PUBLIC_KEY0x11ECDH 공개 키가 포함된 80바이트 요청
RETROACTIVE0x0A일부 제조사 검사를 우회함
EXTENDED0x10최신 기기 펌웨어용
신호점수의미
게이팅 위반(수동)+2페어링 모드가 아닌데 FP 광고
우회 확인(능동)+2페어링 모드가 아닌데 KBP에 응답
Account Key 없는 FMDN+2Find My 네트워크를 통해 추적 가능
정적 BLE 주소+1기기가 지속적으로 추적 가능
주소 회전 관찰됨-1개인정보 보호 동작
기능구현 여부이유
취약점 탐지✅ 예핵심 목적
BR/EDR 주소 추출✅ 예증거 수집
Bluetooth Classic 페어링❌ 아니요플랫폼별 코드 필요
HFP 오디오 하이재킹❌ 아니요BLE 도구 범위를 벗어남
지속형 임플란트❌ 아니요악성 기능