
전화번호만으로 기기가 활성 상태인지, 대기 상태인지, 오프라인인지(그 외에도 더 많은 정보)를 알 수 있습니다. 이 PoC는 전송 확인(Delivery Receipts) + RTT 타이밍이 민감한 기기 활동 패턴을 어떻게 유출하는지 보여줍니다. (WhatsApp / Signal)
RTT 분석을 통한 WhatsApp 및 Signal 활동 추적기
⚠️ 면책 조항: 교육 및 보안 연구 목적의 개념 증명(PoC)입니다. WhatsApp과 Signal의 개인정보 보호 취약점을 시연합니다.
이 프로젝트는 Gabriel K. Gegenhuber, Maximilian Günther, Markus Maier, Aljosha Judmayer, Florian Holzbauer, Philipp É. Frenzel, Johanna Ullrich(비엔나 대학교 & SBA Research)의 논문 "Careless Whisper: Exploiting Silent Delivery Receipts to Monitor Users on Mobile Instant Messengers" 를 구현한 것입니다.
어떤 기능을 하나요? WhatsApp 메시지 전송 확인의 왕복 시간(RTT)을 측정하여 다음을 감지할 수 있습니다:
보안 영향: 이 도구는 메시징 앱의 심각한 개인정보 보호 취약점을 입증하며, 감시에 악용될 수 있음을 보여줍니다.
![]()
웹 인터페이스는 실시간 RTT 측정값, 기기 상태 감지, 활동 패턴을 표시합니다.
# 리포지토리 클론
git clone https://github.com/gommzystudio/device-activity-tracker.git
cd device-activity-tracker
# 의존성 설치
npm install
cd client && npm install && cd ..
요구 사항: Node.js 20+, npm, WhatsApp 계정
가장 쉬운 실행 방법은 Docker를 사용하는 것입니다:
# 환경 템플릿 복사
cp .env.example .env
# (선택 사항) .env 파일에서 포트 사용자 지정
# BACKEND_PORT=3001
# CLIENT_PORT=3000
# 컨테이너 빌드 및 시작
docker compose up --build
애플리케이션은 다음 주소에서 사용할 수 있습니다:
CLIENT_PORT)BACKEND_PORT)컨테이너를 중지하려면:
docker compose down
# 터미널 1: 백엔드 시작
npm run start:server
# 터미널 2: 프론트엔드 시작
npm run start:client
http://localhost:3000을 열고 WhatsApp으로 QR 코드를 스캔한 후 추적할 전화번호(예: 491701234567)를 입력하세요.
npm start
안내에 따라 인증하고 대상 번호를 입력하세요.
출력 예시:
╔════════════════════════════════════════════════════════════════╗
║ 🟡 Device Status Update - 09:41:51 ║
╠════════════════════════════════════════════════════════════════╣
║ JID: ***********@lid ║
║ Status: Standby ║
║ RTT: 1104ms ║
║ Avg (3): 1161ms ║
║ Median: 1195ms ║
║ Threshold: 1075ms ║
╚════════════════════════════════════════════════════════════════╝
추적기는 프로브 메시지를 보내고 왕복 시간(RTT)을 측정하여 기기 활동을 감지합니다. 두 가지 프로브 방법을 사용할 수 있습니다:
| 방법 | 설명 |
|---|---|
| Delete (기본값) | 존재하지 않는 메시지 ID에 대한 "삭제" 요청을 보냅니다. |
| Reaction | 존재하지 않는 메시지 ID에 반응 이모지를 보냅니다. |
프로브 메시지를 보내고 CLIENT ACK(상태 3)를 수신할 때까지의 시간을 RTT로 측정합니다. 기기 상태는 중앙값 RTT의 90%로 계산된 동적 임계값을 사용하여 감지됩니다. 임계값보다 낮으면 활성 사용, 높으면 대기 모드를 나타냅니다. 측정값은 기록에 저장되며 중앙값은 다양한 네트워크 조건에 적응하도록 지속적으로 업데이트됩니다.
웹 인터페이스에서는 제어판의 드롭다운을 사용하여 프로브 방법을 전환할 수 있습니다. CLI 모드에서는 기본적으로 delete(삭제) 방법이 사용됩니다.
auth_info_baileys/ 폴더를 삭제하고 QR 코드를 다시 스캔하세요.device-activity-tracker/
├── src/
│ ├── tracker.ts # WhatsApp RTT analysis logic
│ ├── signal-tracker.ts # Signal RTT analysis logic
│ ├── server.ts # Backend API server (both platforms)
│ └── index.ts # CLI interface
├── client/ # React web interface
└── package.json
가장 효과적인 완화 방법은 WhatsApp의 설정 → 개인정보 → 고급에서 "알 수 없는 계정의 메시지 차단"을 활성화하는 것입니다.
이 설정은 알 수 없는 번호에서 프로브 반응을 대량으로 보내는 공격자의 능력을 줄일 수 있습니다. WhatsApp은 알 수 없는 계정의 대량 메시지를 차단하기 때문입니다. 그러나 WhatsApp은 "대량"이 무엇을 의미하는지 공개하지 않으므로, 속도 제한이 적용되기 전에 공격자가 상당한 수의 프로브 반응을 보내는 것을 완전히 막지는 못합니다.
읽음 확인을 비활성화하면 일반 메시지에는 도움이 되지만 이 특정 공격을 막지는 못합니다. 2025년 12월 현재 이 취약점은 WhatsApp과 Signal에서 여전히 악용 가능합니다.
⚠️ 연구 및 교육 목적으로만 사용하세요. 명시적 동의 없이 사람을 추적하지 마세요. 개인정보 보호법을 위반할 수 있습니다. 인증 데이터(auth_info_baileys/)는 로컬에 저장되며 절대 버전 관리에 커밋해서는 안 됩니다.
Gegenhuber 외 연구진(비엔나 대학교 & SBA Research)의 연구에 기반합니다:
@inproceedings{gegenhuber2024careless,
title={Careless Whisper: Exploiting Silent Delivery Receipts to Monitor Users on Mobile Instant Messengers},
author={Gegenhuber, Gabriel K. and G{\"u}nther, Maximilian and Maier, Markus and Judmayer, Aljosha and Holzbauer, Florian and Frenzel, Philipp {\'E}. and Ullrich, Johanna},
year={2024},
organization={University of Vienna, SBA Research}
}
MIT 라이선스 - LICENSE 파일 참조.
@whiskeysockets/baileys로 제작되었습니다.
책임감 있게 사용하세요. 이 도구는 수백만 사용자에게 영향을 미치는 실제 보안 취약점을 보여줍니다.