📡

Bluehood — BLE 스캐너로 보는 블루투스 프라이버시

라즈베리파이 하나로 이웃의 출퇴근 패턴까지 파악 가능?

블루투스를 켜둔 채 생활하는 게 당연한 시대다. 스마트폰, 이어폰, 스마트워치, 차량 — 전부 BLE 신호를 계속 뿌리고 있다. Bluehood는 이 신호를 수집해서 "블루투스가 켜져 있으면 어떤 정보가 새어 나가는지" 직접 보여주는 Python 프로젝트다.

뭘 탐지할 수 있나

Bluehood를 수동 모드로 돌려보면 이런 것들이 잡힌다:

  • 택배 기사의 도착 시점과 동일 기사 여부 (같은 BLE 기기가 반복 출현)

  • 이웃의 출퇴근 패턴 (매일 같은 시간에 사라지고 나타나는 기기)

  • 함께 등장하는 기기 조합 (스마트폰 + 스마트워치 = 같은 사람)

  • 방문자의 체류 시간과 빈도

라즈베리파이나 노트북 하나면 충분하다.

코드 구조 분석

Bluehood의 핵심은 3개 레이어:

1. BLE 스캐너 (scanner.py)

bleak 라이브러리로 BLE 광고 패킷을 지속 수집. BleakScannerdetection_callback을 등록해서 기기가 탐지될 때마다 콜백 실행. MAC 주소, RSSI(신호 세기), 기기 이름, 제조사 정보, BLE 서비스 UUID를 추출한다.

from bleak import BleakScanner

async def scan():
    scanner = BleakScanner(detection_callback=on_device_found)
    await scanner.start()

2. 데이터 저장 (database.py)

SQLite에 탐지 기록을 저장. 테이블 구조는 기기별 첫 탐지 시점, 마지막 탐지 시점, 총 탐지 횟수, RSSI 히스토리를 포함. 랜덤 MAC 주소(최신 기기의 프라이버시 기능)는 필터링 옵션 제공.

3. 패턴 분석 + 웹 대시보드

시간대별 히트맵, 체류 시간 그래프, 연관 기기 탐지(같은 시간대에 함께 나타나는 기기 = 같은 사람일 확률 높음). Flask 기반 웹 UI로 실시간 모니터링. ntfy.sh를 통한 새 기기 탐지 시 푸시 알림도 지원.

블루투스를 끌 수 없는 기기들

문제는 사용자가 통제할 수 없는 기기들:

  • 보청기: 원격 조정·진단용 BLE 상시 활성

  • 심박조율기: 의료용 임플란트도 BLE 신호 송출 (커뮤니티에서 아버지의 심박조율기가 nRF Connect 앱에 잡혔다는 사례도)

  • 차량: 진단·관리용 BLE 지속 송신. Tesla 등은 teslaradar.com 같은 추적 사이트도 존재

  • TPMS: 타이어 공기압 센서도 고유 ID를 계속 브로드캐스트

프라이버시 도구의 역설

Briar는 인터넷이 끊긴 상황에서도 블루투스/WiFi 메시 네트워크로 메시지를 동기화하는 앱. 활동가·언론인의 통신을 보호하는 게 목적이지만, 사용하려면 블루투스를 켜야 한다.

BitChat은 완전한 BLE 메시 네트워크 기반 분산형 메신저. 인터넷·서버·전화번호 없이 다중 홉으로 메시지를 전달하지만, 역시 BLE 활성화가 필수.

보호 수단이 동시에 노출 경로가 되는 모순.

MAC 주소 랜덤화의 한계

BLE에는 이미 'resolvable private address' 방식의 랜덤화가 있다. 일정 주기로 MAC 주소를 바꾸지만, 회전 시점을 추적하면 여전히 같은 기기를 유추할 수 있다. iPhone + Apple Watch 처럼 항상 함께 나타나는 패턴도 기기 식별에 사용 가능.

실행 방법

Docker 또는 수동 설치. 블루투스 어댑터가 있는 아무 기기(라즈베리파이, 노트북)에서 실행 가능.

git clone https://github.com/dannymcc/bluehood
cd bluehood
docker compose up -d

루트 권한 또는 systemd 서비스로 실행. 웹 대시보드에서 실시간 모니터링.

핵심 포인트

1

bleak ライブラリ로 BLE 광고 패킷 지속 수집 → MAC, RSSI, 기기 이름, 서비스 UUID 추출

2

SQLite에 기기별 첫/마지막 탐지 시점, 횟수, RSSI 히스토리 저장

3

시간대별 히트맵 + 연관 기기 분석으로 사람의 행동 패턴 추론

4

Flask 웹 대시보드로 실시간 모니터링 + ntfy.sh 푸시 알림

사용 사례

자신의 BLE 기기가 어떤 정보를 노출하는지 확인 블루투스 프라이버시 교육·시연 도구 보안 감사 — 조직 내 BLE 기기 인벤토리