BLERP: BLE Re-Pairing Attacks and Defenses 논문 리뷰
BLE 프로토콜 스택 및 아키텍처 계층 분석
BLE 프로토콜 스택은 크게 물리적 무선 신호와 실시간 타이밍을 제어하는 하위 계층인 '컨트롤러(Controller)'와, 고수준의 데이터 처리와 프로토콜 다중화를 담당하는 상위 계층인 '호스트(Host)'로 분리된다. 이 두 계층은 호스트-컨트롤러 인터페이스(HCI, Host Controller Interface)를 통해 상호 통신한다.
컨트롤러(Controller) 계층의 역할
컨트롤러는 물리 계층(Physical Layer, PHY)과 링크 계층(Link Layer, LL)으로 구성된다. 물리 계층은 2.4 GHz ISM 대역을 40개의 채널(각 2 MHz 간격)로 분할하여 사용하며, 가우시안 주파수 편이 변조(GFSK) 방식을 통해 디지털 데이터를 무선 신호로 변환한다.
링크 계층(Link Layer)은 BLE 통신의 핵심 상태 머신(State Machine)을 제어한다. 링크 계층은 디바이스를 대기(Standby), 광고(Advertising), 스캐닝(Scanning), 개시(Initiating), 연결(Connection) 상태 중 하나로 유지시킨다. 통신은 한 디바이스가 3개의 기본 광고 채널(37, 38, 39번)을 통해 패킷을 브로드캐스트하는 '광고' 상태에서 시작되며, 다른 디바이스가 이를 '스캐닝'하여 발견한 뒤 '개시' 상태로 전환하여 연결 요청(CONNECT_IND 또는 AUX_CONNECT_REQ)을 전송함으로써 '연결' 상태로 진입한다. 또한 링크 계층은 적응형 주파수 도약(Adaptive Frequency Hopping, AFH)을 사용하여 전파 간섭을 최소화하고, 순환 중복 검사(CRC)를 통해 패킷의 무결성을 하드웨어 수준에서 검증한다.
호스트(Host) 계층과 논리적 역할 정의
호스트 계층은 L2CAP(Logical Link Control and Adaptation Protocol)을 기반으로 여러 프로토콜을 다중화(Multiplexing)하고 패킷의 분할 및 재조립(Segmentation and Reassembly)을 수행한다. L2CAP 위에는 데이터의 구조화 및 교환을 담당하는 ATT(Attribute Protocol)와 GATT(Generic Attribute Profile), 그리고 디바이스의 발견과 연결 토폴로지를 정의하는 GAP(Generic Access Profile)가 존재한다.
GAP는 링크 계층의 상태를 바탕으로 디바이스의 논리적 역할을 네 가지로 규정한다.
-
브로드캐스터(Broadcaster): 연결을 허용하지 않고 데이터를 송신만 하는 역할.
-
옵저버(Observer): 연결을 개시하지 않고 수신만 하는 역할.
-
페리페럴(Peripheral): 광고를 수행하며 다른 디바이스로부터의 연결을 수락하는 역할 (일반적으로 센서, 스마트워치 등 전력 제한 기기).
-
센트럴(Central): 스캐닝을 수행하고 연결을 개시하는 주도적 역할 (일반적으로 스마트폰, 랩탑 등 자원이 풍부한 기기).
BLERP 공격의 주요 대상이 되는 연결(Connection) 토폴로지에서는 항상 센트럴과 페리페럴의 비대칭적 관계가 성립하며, 이 역할의 비대칭성은 보안 프로토콜인 SMP의 키 분배 논리에도 직접적인 영향을 미친다.
보안 관리자 프로토콜(SMP)과 페어링 메커니즘 심층 해부
블루투스 기기 간의 신뢰 관계는 호스트 계층에 위치한 보안 관리자 프로토콜(SMP, Security Manager Protocol)에 의해 수립된다. SMP는 L2CAP의 고정 채널(0x0006)을 통해 통신하며, 두 기기 간에 보안 매개변수를 협상하고, 암호화 키를 생성 및 분배하는 전체 과정을 통제한다.
흔히 혼용되는 '페어링(Pairing)'과 '본딩(Bonding)'은 엄연히 다른 개념이다. 페어링은 현재의 통신 세션을 암호화하기 위해 단기적인 키를 협상하고 생성하는 능동적인 절차이다. 반면, 본딩은 페어링 과정에서 생성된 장기 키(Long-Term Key, LTK)와 다양한 식별 키들을 디바이스의 비휘발성 메모리인 보안 데이터베이스(Security Database)에 영구적으로 '저장(Storage)'하여, 향후 재연결 시 복잡한 페어링 절차를 생략하고 즉각적인 암호화 세션을 수립할 수 있도록 하는 사후 조치이다.
BLE의 페어링 절차는 표준 사양에 따라 다음 세 가지 명확한 페어링 단계(Phase)로 나뉘어 수행된다.
Phase 1: 페어링 기능 교환 (Pairing Feature Exchange)
페어링의 첫 단계는 센트럴 기기가 페리페럴 기기에게 SMP_PAIR_REQ (Pairing Request) 패킷을 전송하고, 페리페럴이 SMP_PAIR_RSP (Pairing Response) 패킷으로 응답하면서 시작된다. 만약 페리페럴이 센트럴에게 페어링을 먼저 유도하고 싶다면, 페어링 요청 대신 SMP_SEC_REQ (Security Request) 패킷을 전송하여 센트럴이 SMP_PAIR_REQ를 보내도록 촉발할 수 있다.
이 교환 과정에서 기기들은 입출력(IO) 기능, OOB(Out-of-Band) 데이터 지원 여부, 최대 암호화 키 크기, 분배할 키의 종류, 그리고 가장 핵심이 되는 인증 요구사항(Authentication Requirements, AuthReq) 플래그를 상호 교환한다.
AuthReq는 8비트(1옥텟) 길이의 비트 필드로, 기기가 요구하는 보안 속성을 매우 구체적으로 정의하며, BLERP 공격자들은 바로 이 필드의 조작을 통해 보안 수준을 강제로 낮추는 기법(Security Downgrade)을 사용한다. 각 비트 필드의 의미는 다음과 같다.
| 비트 위치 (LSB->MSB) |
플래그 명칭 |
상세 의미 및 암호학적 파급력 |
| Bit 0-1 |
bonding (Bonding Flags) |
디바이스가 장기 키(LTK)를 교환하고 향후 사용을 위해 보안 데이터베이스에 저장(본딩)할 것인지를 결정하는 2비트 플래그이다. 00은 본딩을 하지 않음(No Bonding)을, 01은 본딩 수행(Bonding)을 의미하며 나머지 값은 예약(RFU)되어 있다. |
| Bit 2 |
mitm (Man-in-the-Middle) |
중간자 공격(MitM) 보호를 요구하는 1비트 플래그이다. 이 값이 1로 설정되면, 기기는 반드시 사용자 인증이 수반되는 페어링 모델(예: Passkey Entry, Numeric Comparison)을 요구한다. 이 플래그가 0이거나 디바이스에 적절한 입출력 장치(IO Capability)가 없다면, 아무런 인증 없이 키가 교환되는 'Just Works' 방식이 채택되어 심각한 보안 위협에 노출될 수 있다. |
| Bit 3 |
sc (Secure Connections) |
블루투스 4.2 버전에서 도입된 LE 보안 연결(LE Secure Connections, LESC) 지원 여부를 나타낸다. 두 기기 모두 이 비트를 1로 설정해야만 FIPS 호환 타원 곡선 암호(ECDH P-256) 알고리즘을 사용한 페어링이 진행된다. 한쪽이라도 0일 경우, 취약한 구형 암호화 방식인 LE 레거시 페어링(Legacy Pairing)으로 강등(Fallback)된다. |
| Bit 4 |
keypress |
Passkey Entry 모델에서만 사용되는 플래그로, 사용자가 비밀번호를 입력할 때마다 한 비트씩 키 입력 알림(Keypress Notification)을 전송할지 여부를 결정한다. 이는 패스키 전체가 한 번에 탈취되는 것을 방지하기 위해 도입되었다. |
| Bit 5 |
ct2 |
교차 전송 키 파생(Cross-Transport Key Derivation, CTKD) 시 블루투스 클래식과 BLE 간의 암호키 변환에 사용되는 h7 해시 함수의 지원 여부를 알리는 플래그이다. |
| Bit 6-7 |
rfu (Reserved for Future Use) |
현재 표준에서는 사용되지 않으며 미래의 기능 확장을 위해 예약된 공간이다. |
Phase 2: 암호 키 생성 및 인증 (Key Generation Method Selection)
2단계에서는 1단계에서 협상된 sc 플래그의 값에 따라 암호 키 생성 알고리즘이 두 가지 갈래로 나뉜다.
1. LE 레거시 페어링 (LE Legacy Pairing, sc=0): 과거 블루투스 4.0/4.1의 표준 방식이다. 선택된 결합 모델에 따라 임시 키(Temporary Key, TK)가 생성된다 (예: Just Works의 경우 TK는 0으로 고정됨). 이후 센트럴과 페리페럴은 각각 무작위 난수(Mrand, Srand)를 생성하여 교환한 뒤, 이를 TK와 함께 AES-128 암호화 함수에 통과시켜 128비트 단기 키(Short Term Key, STK)를 파생한다 (STK = AES128(TK, Srand || Mrand)). 레거시 페어링의 치명적인 약점은 TK가 단순할 경우(예: 0이거나 6자리 PIN), 패시브 스니핑(Passive Eavesdropping)을 통해 무선상에 노출된 난수를 수집한 공격자가 STK를 쉽게 역산해 낼 수 있다는 점이다.
2. LE 보안 연결 (LE Secure Connections, LESC, sc=1): STK의 취약성을 극복하기 위해 블루투스 4.2에서 도입된 방식으로, FIPS 승인 알고리즘인 타원 곡선 디피-헬만(Elliptic Curve Diffie-Hellman, ECDH) P-256 곡선을 사용한다. 양 기기는 자신만의 개인 키(Private Key)와 공개 키(Public Key)를 생성하고, 무선상을 통해 공개 키만을 교환한다. 이후 각자는 자신의 개인 키와 상대방의 공개 키를 결합하여 동일한 256비트 공유 비밀(Shared Secret, DHKey)을 안전하게 연산해 낸다. 이 과정에서 서명 검증 및 인증을 위해 AES-CMAC 기반의 암호학적 해시 함수인 f4, f5, f6 함수가 동원된다. 공유 비밀은 f5 함수(KDF)를 통과하여 최종 통신 암호화에 사용될 장기 키(Long Term Key, LTK)와, 다음 단계의 메시지 무결성을 검증하기 위한 MacKey로 파생된다. 결과적으로 LESC 방식에서는 LTK가 무선상으로 절대 전송되지 않으므로, 공격자가 공개 키 교환 과정을 모두 감청하더라도 개인 키를 모르면 LTK를 역산할 수 없다.
Phase 3: 전송 계층 종속 키 분배 (Transport Specific Key Distribution)
2단계에서 생성된 STK(레거시) 또는 LTK(LESC)를 이용하여 통신 링크가 암호화되면, 비로소 3단계인 키 분배 과정이 시작된다. 페어링 1단계에서 상호 요청했던 Initiator Key Distribution 및 Responder Key Distribution 필드의 설정값에 따라, 미래의 세션과 식별을 위해 필수적인 여러 암호학적 키와 정보들이 안전하게 암호화된 채널을 통해 상대방에게 전달된다.
이 단계에서 교환 및 저장되는 핵심 요소들은 다음과 같다.
-
장기 키 (Long Term Key, LTK): 레거시 페어링의 경우 페리페럴이 독자적으로 무작위 128비트 LTK를 생성하여 센트럴에게 전송한다. (LESC의 경우 이미 2단계에서 상호 도출되었으므로 전송하지 않는다 ). 이 LTK는 페어링 절차가 끝난 후 향후 기기들이 재연결(Reconnection)될 때 암호화 세션 키(Session Key)를 파생하기 위한 근원 키(Root Key)로 사용된다.
-
EDIV (Encrypted Diversifier) & Rand (Random Number): 레거시 페어링에서 페리페럴이 LTK와 함께 생성하여 센트럴에 전달하는 식별자이다. 16비트의 EDIV와 64비트의 Rand 값은 페리페럴의 보안 데이터베이스(Security Database)에 저장된 수많은 LTK 중, 현재 연결을 시도하는 센트럴과 매칭되는 정확한 LTK를 식별하고 조회(Database Lookup)하기 위한 인덱스 역할을 수행한다.
-
IRK (Identity Resolving Key): 128비트 식별 확인 키이다. BLE 기기는 프라이버시 보호 및 위치 추적 방지를 위해 자신의 MAC 주소를 주기적으로 변경하는 임의 결정 가능 비공개 주소(Resolvable Private Address, RPA) 메커니즘을 사용한다. RPA는 난수(prand)와 이를 IRK로 해시(hash = AES128(IRK, prand))한 값을 이어 붙여 생성된다. IRK를 분배받아 보안 데이터베이스에 보관한 신뢰된 기기만이 수신된 RPA의 해시를 역산하여, 해당 기기의 변하지 않는 고정 신원 주소(Identity Address)를 알아낼 수 있다.
-
CSRK (Connection Signature Resolving Key): 통신 링크를 암호화하지 않고 데이터를 평문으로 전송할 때, 데이터의 출처를 인증하고 위변조(무결성)를 방지하기 위해 사용되는 128비트 데이터 서명(Data Signing) 키이다. 송신자가 CSRK를 이용해 데이터에 암호학적 서명을 부착하면 수신자는 이를 검증한다.
성공적으로 3단계가 완료되면, 양 기기는 교환된 키들(LTK, IRK, CSRK 등)을 자신들의 호스트 스택 내에 구현된 비휘발성 스토리지인 보안 데이터베이스(Security Database)에 영구적으로 기록한다. 이 행위가 바로 '본딩(Bonding)'이며, 본딩이 완료된 기기 간에는 향후 무거운 페어링 연산(Phase 1~3)을 전면 생략할 수 있게 된다.
세션 수립 (Session Establishment) 및 페어링과의 논리적 분리
BLE 프로토콜 설계상 가장 주목해야 할 점은, 장기 키(LTK)를 생성하고 교환하는 '페어링(SMP)' 과정과, 이미 본딩된 기기가 재연결되어 암호화된 통신을 시작하는 '세션 수립(Link Layer)' 과정이 아키텍처 상으로 완벽하게 분리되어 있다는 사실이다. 이 아키텍처의 논리적 단절이 바로 향후 논의할 BLERP 공격의 주요 표적이 된다.
본딩된 두 기기(Alice와 Bob)가 물리적으로 재연결되면, SMP를 통하지 않고 컨트롤러의 링크 계층(LL) 수준에서 직접 세션 수립 절차가 진행된다.
-
암호화 요청 (LL_ENC_REQ): 센트럴 기기는 자신의 난수인 세션 키 다양화기(SKD_C, 8바이트)와 초기화 벡터(IV_C, 4바이트)를 포함하는 LL_ENC_REQ 패킷을 전송한다. 레거시 연결의 경우 이 패킷에 EDIV와 Rand 값도 평문으로 함께 포함되어 페리페럴이 데이터베이스에서 올바른 LTK를 찾을 수 있도록 한다.
-
암호화 응답 (LL_ENC_RSP): 페리페럴은 수신한 EDIV와 Rand를 통해 보안 데이터베이스에서 128비트 LTK를 조회한다. 성공적으로 LTK를 찾으면, 페리페럴 역시 자신의 난수인 SKD_P(8바이트)와 IV_P(4바이트)를 담은 LL_ENC_RSP를 센트럴에 회신한다.
-
세션 키 (Session Key, SK) 파생: 두 기기는 교환된 SKD_C와 SKD_P를 이어 붙여 16바이트의 전체 SKD를 구성한다. 이후 저장되어 있던 장기 키(LTK)를 마스터 키로 사용하여, AES-ECB 암호화 알고리즘에 SKD를 평문으로 입력하여 고유한 128비트 세션 키(SK)를 파생한다 (SK = AES-ECB(LTK, SKD_C || SKD_P)).즉, 세션 키는 매 연결마다 교환된 평문 난수(SKD)와 기기 내부에 저장된 비밀 키(LTK)의 결합으로 완전히 새롭게 생성된다.
-
암호화 시작 3방향 핸드셰이크: 세션 키가 준비되면 센트럴은 평문 상태의 LL_START_ENC_REQ를 전송한다. 페리페럴은 방금 생성한 세션 키(SK)와 양측의 IV를 결합하여 AES-CCM 알고리즘을 초기화하고, 이를 바탕으로 페이로드 없이 암호화 및 인증(MIC) 코드가 포함된 LL_START_ENC_RSP 패킷을 전송한다. 센트럴 역시 동일한 방식으로 암호화된 LL_START_ENC_RSP를 회신하여 핸드셰이크를 완료한다. 이후의 모든 L2CAP 및 GATT 데이터 통신은 이 세션 키(SK)를 이용해 AES-CCM으로 강력하게 암호화된다.
BLE 표준의 재페어링(Re-Pairing) 메커니즘과 결정 트리 로직
블루투스 핵심 규격 v6.1(Bluetooth Core Specification v6.1, Vol 3, Part H)은 이미 본딩이 완료되어 장기 키(PK/LTK)를 공유하고 있는 두 기기가, 더 높은 수준의 보안을 협상하기 위해 기존의 키를 폐기하고 새로운 키로 덮어쓸 수 있도록 허용하는 '재페어링(Re-pairing)' 메커니즘을 명시하고 있다. 예를 들어, 과거에 디스플레이가 없어 'Just Works' 방식(인증 없음)으로 본딩되었던 기기가, 펌웨어 업데이트를 통해 OOB 방식을 지원하게 되어 더 강력한 보안 수준으로 갱신하려는 합법적인 유스케이스를 지원하기 위함이다.
표준 명세서의 결정 트리(Decision Tree, Vol 3, Part H, Figure 2.7)는 센트럴 기기가 페리페럴로부터 재페어링을 요구하는 SMP_SEC_REQ (Security Request) 패킷을 수신했을 때 이를 어떻게 처리해야 하는지에 대한 로직(Listing 1)을 다음과 같이 유사 코드로 정의하고 있다.
-
만약 두 기기가 현재 이미 페어링 절차를 진행 중이라면, 중복된 보안 요청은 무시한다 (ignore_security_request).
-
만약 두 기기가 이미 본딩되어 PK(LTK)를 가지고 있다면:
-
센트럴은 수신된 SMP_SEC_REQ 패킷에 포함된 AuthReq 필드의 보안 수준(AR_SR)과, 현재 데이터베이스에 저장되어 있는 기존 키의 보안 수준(AR_PK)을 비교한다.
-
만약 요청된 보안 수준이 기존 수준보다 엄격하게 높다면 (AR_SR > AR_PK), 센트럴은 SMP_PAIR_REQ를 전송하여 기존 PK를 덮어쓰기 위한 재페어링 절차를 개시한다 (repair()).
-
만약 AR_SR <= AR_PK 이고, 현재 연결 세션이 이미 암호화되어 있다면, 센트럴은 암호화 일시 중지 요청(LL_PAUSE_ENC_REQ) 등을 통해 세션을 중단하고 세션 키를 리프레시한다 (stop_session_and_restart()).
-
만약 AR_SR <= AR_PK 이지만, 현재 연결 세션이 아직 평문(Unencrypted) 상태라면, 페어링 대신 단순히 기존 PK를 사용한 세션 수립 절차를 개시한다 (session_establishment()).
-
만약 기기가 본딩되어 있지 않다면, 정상적인 최초 페어링 절차를 개시한다 (pair()).
이 결정 트리 로직은 센트럴이 페리페럴의 보안 요청을 처리하는 방법만 구체적으로 서술할 뿐, 페리페럴이 센트럴의 재페어링 요청을 어떻게 다루어야 하는지, 혹은 AR_SR과 AR_PK의 정확한 비교 알고리즘은 무엇인지에 대해서는 심각할 정도로 모호하게 기술(Underspecification)되어 있다. 이러한 명세의 공백이 바로 BLERP 취약점의 근본 원인이 된다.
BLERP (BLE Re-Pairing) 설계 취약점 (V1 ~ V6) 분석
위에서 살펴본 BLE 페어링, 세션 수립, 그리고 재페어링 로직의 표준 설계 자체에 내재된 논리적 결함을 분석한 결과, 연구진은 총 6가지의 심각한 설계 취약점(Design Vulnerabilities)을 식별하였다. 이는 특정 벤더의 구현 실수가 아니라 Bluetooth v6.1 표준 자체의 결함이므로, 규격을 준수하는 모든 버전(4.2 ~ 5.4) 및 최고 보안 설정(LESC, SCO) 기기에 광범위하게 영향을 미친다.
BLERP 공격 시나리오와 프로토콜 악용 메커니즘
1. 페리페럴 사칭 공격 (Peripheral Impersonation, PI)
PI 공격은 공격자 찰리가 센트럴(Alice)에게 신뢰받는 페리페럴(Bob, 예: 스마트 키보드)인 것처럼 위장하여, 앨리스가 자신의 데이터베이스에 저장된 진짜 LTK를 지우고 찰리와 공유하는 가짜 PK로 덮어쓰도록 기만하는 공격이다. 이 공격은 특히 '세션 수립' 단계에서 '페어링' 상태로 역행하는 최초의 공격 기법으로, SMP_SEC_REQ 메시지의 악용이 두드러진다.
-
MAC 주소 스푸핑 및 연결: 찰리는 밥의 MAC 주소와 광고(Advertising) 데이터를 복제하여 방송한다. 앨리스는 밥과 연결하려 시도하다가 찰리와 물리적 연결을 맺게 된다.
-
세션 수립 차단 (V5 악용): 앨리스는 기존에 본딩된 밥과의 LTK가 있으므로, 암호화 통신을 위해 링크 계층에서 LL_ENC_REQ(자신의 다이버시파이어 SKD_A 포함)를 찰리에게 전송한다. LTK가 없는 찰리는 정상적인 LL_ENC_RSP를 보낼 수 없으므로, 즉시 LL_REJECT_IND 패킷(명령어 거부 등 에러 코드 포함)을 주입하여 세션 수립 절차를 강제로 중단시킨다. 앨리스의 스택은 연결을 끊지 않고 평문 통신 상태로 대기한다.
-
위조된 보안 요청 주입 (V1 악용): 찰리는 앨리스에게 즉각적으로 SMP_SEC_REQ를 전송하여 재페어링을 유발한다. 이때 앨리스의 결정 트리 로직(AR_SR > AR_PK)을 통과하기 위해, 찰리는 패킷 내의 AuthReq 필드(AR_SR)를 고의로 높게 설정(예: 예약 비트 조작, SC 플래그 활성화)하여 보낸다. 앨리스는 이를 인증 없이 수용하여 재페어링을 시작하기 위해 SMP_PAIR_REQ를 보낸다.
-
보안 수준 강등 및 키 덮어쓰기 (V3, V4 악용): 찰리는 앨리스의 SMP_PAIR_REQ에 대해 SMP_PAIR_RSP로 응답하면서, 이번에는 실제 AuthReq 필드의 mitm 및 sc 플래그를 모두 0으로 설정한다. 앨리스의 시스템은 V3/V4 취약점에 의해 이를 검증하지 못하고, 결국 가장 취약한 'Just Works' 방식으로 결합 모델을 강등시킨다.
-
목적 달성: 인증 절차 없이 찰리와 앨리스 간에 새로운 PK가 도출되며, 앨리스는 이를 밥의 식별자와 함께 보안 데이터베이스에 덮어쓴다. 이제 찰리는 완벽하게 밥의 권한을 얻어 앨리스에게 임의의 키보드 입력을 주입하거나 평문 데이터를 읽어낼 수 있다.
2. 센트럴 사칭 공격 (Central Impersonation, CI)
CI 공격은 찰리가 신뢰받는 센트럴(Alice)인 것처럼 위장하여 페리페럴(Bob)을 공격하는 방식이다. 페리페럴 기기는 일반적으로 자원이 부족하고 인증 로직이 빈약한 특성(V2)을 가지고 있어 PI보다 훨씬 직접적으로 수행된다.
-
위조된 연결 개시: 찰리는 스캐닝 중인 밥에게 앨리스의 MAC 주소를 위조하여 연결 요청(CONNECT_IND)을 보낸다.
-
직접적인 재페어링 강요 (V2, V4 악용): 찰리는 세션 수립 단계를 거치지 않고, 즉시 mitm=0, sc=0 (Just Works)으로 조작된 AuthReq가 포함된 SMP_PAIR_REQ를 밥에게 전송한다. 밥의 표준 스택은 수신된 센트럴의 재페어링 요청을 인증할 능력이 없으며, 기존의 보안 수준(AR_PK)보다 낮은 요청(V4)임에도 불구하고 무조건적으로 수락한다.
-
키 덮어쓰기: 밥은 찰리와 Just Works 방식으로 새로운 PK를 파생하고, 앨리스의 기존 LTK를 삭제해버린다. 찰리는 이제 앨리스의 권한을 획득하여 밥(스마트워치 등)에서 민감한 건강 정보를 추출하거나 설정을 변경할 수 있다.
3. 단일 채널 중간자 공격 (Single-Channel MitM)
이 공격은 찰리가 앨리스와 밥 사이에 물리적으로 개입하여, 두 기기가 정상적으로 통신하는 것처럼 속이면서 암호화의 강도를 극도로 낮춰 오프라인에서 키를 크랙하는 기법이다.
찰리는 PI 공격 기법을 사용하여 앨리스의 세션 수립을 중단시키고 재페어링을 유도한다.
이후 앨리스와 밥이 페어링 패킷(SMP_PAIR_REQ, SMP_PAIR_RSP)을 교환할 때 찰리는 이를 중계(Relay)하면서 패킷의 내용만 교묘하게 변조한다. 구체적으로 V6 취약점을 악용하여 두 기기가 협상하는 '최대 암호화 키 크기'를 단 7바이트로 축소시키거나, LSC(레거시 페어링) 방식을 강제한다.
두 피해자는 찰리의 개입을 모른 채 약화된 암호화 강도로 성공적으로 페어링(PK 생성)을 마친다.
찰리는 협상된 키의 엔트로피가 56비트(7바이트)에 불과함을 이용하여, 사전에 수집한 난수 교환 패킷들을 바탕으로 KNOB 공격과 유사한 방식을 적용해 오프라인 브루트포스(Brute-force) 연산으로 짧은 시간 안에 새로운 PK를 찾아낸다. 이후의 모든 세션 트래픽은 찰리에 의해 실시간으로 복호화된다.
4. 이중 채널 중간자 공격 (Double-Channel MitM)
이중 채널 MitM은 BLERP 취약점을 극대화한 형태로, 찰리가 두 피해자와 각각 독립적인 PK를 맺어 완벽한 능동형 트래픽 통제권을 얻는 공격이다. 이 공격은 SCO(Secure Connections Only)와 같은 최고 보안 모드에서도 동작할 수 있다는 점에서 매우 치명적이다.
찰리는 앨리스(센트럴)에게는 PI 공격을, 밥(페리페럴)에게는 CI 공격을 동시에 병렬로 수행한다. 단일 채널 공격처럼 패킷을 중계하는 것이 아니라, 두 피해자와 각각 완벽하게 분리된 페어링 절차를 끝까지 완료한다.
그 결과, 앨리스의 보안 데이터베이스에는 찰리와 공유하는 PK_C1이 밥의 키로 저장되고, 밥의 보안 데이터베이스에는 찰리와 공유하는 PK_C2가 앨리스의 키로 저장된다.
이후 앨리스가 밥에게 보내는 모든 암호화된 GATT 트래픽은 실제로는 찰리의 링크 계층으로 들어온다. 찰리는 PK_C1으로 트래픽을 복호화하여 데이터를 열람 및 악의적으로 변조한 뒤, 다시 PK_C2로 암호화하여 밥에게 전달한다. 양측의 피해자는 정상적으로 자신들의 LTK를 사용해 세션을 수립했다고 믿기 때문에 어떠한 보안 경고나 연결 끊어짐 현상도 인지하지 못한다.
실제 환경에서의 파급력 및 제조사 구현 결함
연구진은 저비용의 오픈소스 테스트 환경(nRF52, Mynewt, NimBLE, Scapy 기반의 커스텀 파이썬 호스트)을 구축하여 시중에 유통되는 22종의 BLE 디바이스를 대상으로 대규모 평가를 진행하였다. 실험 대상에는 Google, Microsoft, Samsung, Qualcomm, Apple, Logitech 등 주요 벤더의 최신 스마트폰, 랩탑, 마우스 등이 포함되었으며, 블루투스 4.2부터 5.4 버전까지 망라되었다.
평가 대상이 된 15개의 BLE 호스트 스택과 12개의 컨트롤러가 모두 BLERP 공격에 취약함이 입증되었으며, 디바이스의 하드웨어 스펙이나 소프트웨어 버전, 보안 설정(SC, SCO, MitM 보호 활성화 등)에 관계없이 공격은 성공하였다. 이는 앞서 언급한 바와 같이 해당 결함이 암호화 알고리즘 자체(AES-CCM이나 ECDH)의 버그가 아니라, 표준이 명시한 '상태 전이(State Machine Transition)'의 논리적 결함에서 기인하기 때문이다.
더불어, 실험 과정에서 안드로이드, 애플, 아파치(NimBLE)의 BLE 프로토콜 스택 구현체들에서 표준보다 더 취약하게 동작하는 치명적인 소프트웨어 결함들이 추가로 발견되었다.
-
Apple 스택: 표준 로직인 AR_SR > AR_PK를 어기고, AR_SR >= AR_PK 조건만으로도 재페어링을 허용하는 버그가 있었다. 이로 인해 최고 수준의 보안(MitM 방어 및 SC)을 갖춘 기기도 강제로 재페어링 공격에 노출되었다.
-
Android (Fluoride 스택): PI 공격자가 LL_ENC_REQ를 두 번 연속으로 거부(LL_REJECT_IND)하면, 안드로이드 스택은 원인을 알 수 없는 이유로 기존에 저장된 신뢰할 수 있는 페리페럴의 LTK를 데이터베이스에서 영구 삭제해 버리는 심각한 오류가 존재했다. LTK가 삭제되므로 AR_PK와의 비교 로직 자체가 무력화되어 공격자의 SMP_SEC_REQ를 무조건적으로 승인하게 된다.
-
Apache NimBLE: SMP_SEC_REQ 수신 시 bonding 플래그 비트가 설정되어 있지 않으면, 보안 수준의 높낮이와 관계없이 맹목적으로 재페어링을 개시하는 논리적 버그(CVE-2025-62235 할당)가 확인되었다.
방어 대책(Countermeasures): 프로토콜 로직의 강화 및 재설계
BLERP 공격의 근본 원인을 제거하기 위해서는 컨트롤러의 세션 수립 단계와 호스트의 페어링 협상 단계 사이의 단절된 상태 검증을 강화해야 한다. 논문은 즉시 배포 가능한 하위 호환성 방어책과, 블루투스 표준의 근본적 개정이 필요한 암호학적 방어책 두 가지를 제시한다.
1. 강화된 재페어링 로직 (Hardened Re-pairing)
기존 블루투스 기기의 하위 호환성을 유지하면서 펌웨어 업데이트만으로 즉각적인 완화 효과를 거둘 수 있는 휴리스틱 방어 기법이다. 표준의 모호한 비교 검증 알고리즘을 엄격한 3단계 규칙으로 강화한다.
-
암호화 실패 시 즉각 연결 종료 (PI 공격 방어 / V5 완화): 컨트롤러가 세션 수립 중 상대방으로부터 LL_REJECT_IND 패킷(암호화 거부)을 수신하거나 암호화 절차에 실패할 경우, 평문 상태로 물러서서 SMP_SEC_REQ를 기다리는 것이 아니라 LL_TERMINATE_IND 메시지를 발생시켜 즉시 블루투스 물리적 연결을 끊어버린다. 이를 통해 V5 취약점을 통한 PI 공격 진입을 원천 차단한다.
-
일관성 검증 로직 도입 (V3 완화): 센트럴의 SMP 상태 머신은 최초에 페리페럴이 보낸 SMP_SEC_REQ의 AR_SR 값을 메모리에 캐싱(Caching)해둔다. 이후 재페어링 절차가 개시되어 페리페럴이 SMP_PAIR_RSP 패킷을 응답할 때, 이 패킷 내의 실제 AuthReq 값이 캐싱된 AR_SR과 일치하는지 엄격히 검증한다. 일치하지 않고 보안 수준이 강등되었다면 연결을 즉각 종료(Authentication Requirements 에러 발생)한다.
-
강력한 하한선(Anti-Downgrade) 강제 (V4, V6 완화): 새로운 장기 키(PK/LTK)를 도출하여 기존 키를 덮어쓰기 직전에, 새롭게 협상된 보안 수준 및 패킷 엔트로피 크기가 기존 보안 데이터베이스에 보관된 AR_PK 및 이전 엔트로피보다 절대 낮아질 수 없도록 차단벽을 형성한다.
2. 인증 및 무결성 보장 재페어링 (Authenticated and Integrity-Protected Re-pairing)
'강화된 재페어링 로직'은 효과적인 완화책이지만, 요청 자체에 대한 인증이 결여된 V1과 V2의 근본적 문제(가짜 보안 요청을 통한 불필요한 재페어링 시도 자체)를 완벽히 억제하지는 못한다. 이를 디자인 바이 디폴트(Design-by-default)로 해결하기 위해, 연구진은 새로운 암호학적 재페어링 프로토콜을 블루투스 표준에 개정안으로 제안하였다.
이 제안의 핵심은 기존에 저장된 장기 키(PK_old)를 새로운 키 파생에 대한 '암호학적 증명 수단'으로 활용하는 것이다.
-
키 체이닝(Key Chaining): 새로운 페어링 키(PK_new)를 생성하는 KDF(Key Derivation Function) 알고리즘에, 새로 교환된 ECDH 공유 비밀(Shared Secret, ss)뿐만 아니라, 기존에 신뢰를 맺었던 장기 키(PK_old)를 필수 입력 파라미터로 추가한다 (PK_new = KDF(ss, h_{transcript} || PK_old)).이를 통해 기존 PK_old를 알지 못하는 공격자(Charlie)는 올바른 PK_{new}를 수학적으로 도출할 수 없게 되어 재페어링 시도가 무조건 실패하게 된다 (암묵적 인증 보장).
-
트랜스크립트 해싱(Transcript Hashing): 페어링 과정에서 교환되는 모든 SMP 메시지 패킷(AuthReq 플래그, 엔트로피 크기 등)을 누적 해싱하여 h_{transcript}를 생성하고 이를 키 파생 과정에 결합한다 (h = hash(h || msg)). 이는 공격자가 중간에 릴레이 공격을 통해 AuthReq 패킷의 한 비트라도 변조할 경우, 양 기기에서 계산되는 h_{transcript} 값이 달라져 최종 도출되는 PK_new가 불일치하게 되므로 MitM 공격(릴레이 기반 단일 채널 공격 등)을 원천 차단하는 무결성 보장 기능이다.
이 방식은 오버헤드를 거의 증가시키지 않으며, ProVerif 등 정형 검증(Formal Verification) 도구를 통해 재전송(Replay) 및 반사(Reflection) 공격을 방어하고 강력한 상호 인증이 보장됨을 수학적으로 증명하였다. 단, 기기가 공장 초기화되어 PK_{old}를 소실한 경우 사용자 개입을 통해 예외 처리해야 하는 UX 측면의 트레이드오프가 존재한다.
Reference
- http://www.ktword.co.kr/test/view/view.php?no=1082
- The Bluetooth® Low Energy Primer Document