
블루투스 기기에서 오디오를 녹음하는 PoC

이 저장소는 정당한 사용자가 인식하지 못하는 상태에서 블루투스 기기의 오디오를 녹음하고 재생하는 개념 증명(PoC) 구현을 포함합니다.
해당 PoC는 마드리드에서 열린 RootedCON 2024의 BSAM: Seguridad en Bluetooth 강연에서 시연되었습니다.
이는 블루투스 기기의 안전하지 않은 사용과 보안 평가를 위한 일관된 방법론의 필요성에 대한 인식을 높이기 위해 설계되었습니다. 이것이 Tarlogic이 발표하고 여기에서 확인할 수 있는 **BSAM, 블루투스 보안 평가 방법론(Bluetooth Security Assessment Methodology)**의 목적입니다.
이 개념 증명은 BSAM 방법론 내 BSAM-PA-05 통제를 준수하지 않는 문제를 악용합니다. 결과적으로, 해당 기기는 사용자 상호 작용 없이 페어링 절차를 활성화하고 신호 범위 내의 모든 주체에게 그 기능을 노출합니다.
자세한 내용은 블로그에서 확인하세요.
이 코드는 Python으로 작성되었으며 Python 3.11.8에서 테스트되었지만, 주로 Linux 시스템에서 널리 사용되는 도구들을 사용합니다.
PoC는 다음 도구들을 사용합니다:
bluetoothctlbtmgmtpactlparecordpaplayArch Linux 배포판에서 bluetoothctl과 btmgmt는 bluez-utils 패키지로 설치할 수 있으며, pactl, parecord, paplay는 libpulse 패키지에서 사용할 수 있습니다.
PoC가 작동하려면 Arch Linux 배포판의 bluez 패키지에서 제공하는 BlueZ 블루투스 스택이 정상적으로 설치되어 있어야 합니다. 또한 오디오를 녹음하고 재생하려면 PipeWire와 같은 PulseAudio 호환 오디오 서버가 정상적으로 설치되어 있어야 합니다.
사용자의 기기가 마이크를 보유한 오디오 소스로 기능할 수 있고, 블루투스를 통해 검색 가능하고 연결 가능한 상태인지 확인하세요.
예를 들어, 강연 중 사용된 이어버드는 검색 가능하고 연결 가능한 상태가 되려면 충전 케이스에서 꺼내져 있어야 합니다. 기본적으로 이어버드는 사용자의 귀에 착용했을 때만 마이크를 활성화하지만, 이 설정은 구성 앱에서 조정할 수 있습니다.
또한 기기가 이미 연결되어 있지 않은지, 또는 여러 연결을 지원하는지 확인하세요.
먼저, bluetoothctl과 같은 도구를 사용하여 기기의 주소를 검색해야 합니다:
$ bluetoothctl
[bluetooth]# scan on
기기의 주소를 찾으면 스크립트가 나머지 작업을 처리할 수 있습니다:
$ python BlueSpy.py -a <address>
참고: 스크립트는 BlueZ 인스턴스의 구성을 수정하고 원격 기기와 페어링하기 위해 슈퍼유저 권한을 요청할 수 있습니다.
BlueSpy.py는 프로세스의 모든 단계를 실행하는 메인 스크립트입니다. 그러나 특정 단계에서 문제가 발생하면 각각을 개별적으로 실행하는 것이 도움이 될 수 있습니다:
pair.py는 명령줄 도구 btmgmt를 사용하여 BlueZ 구성을 수정하고 원격 기기와 페어링 프로세스를 시작합니다. 사용되는 정확한 명령은 core.py의 pair 함수에 있습니다.connect.py는 명령줄 도구 bluetoothctl을 사용하여 빠른 스캔(BlueZ에 필요)을 시작하고 기기에 연결을 설정합니다. 사용되는 정확한 명령은 core.py의 connect 함수에 있습니다.just_record.py는 명령줄 도구 pactl과 parecord를 사용하여 시스템의 오디오 소스에서 기기를 검색하고(마이크로 기능해야 함) 녹음 세션을 시작합니다. 사용되는 정확한 명령은 core.py의 record 함수에 있습니다.core.py의 함수는 를 실행하여 캡처된 오디오를 재생합니다.단계 중 하나에서 문제가 발생하면 core.py의 명령을 살펴보고 셸에서 직접 실행해 보세요. 무엇이 실패하고 있는지에 대한 더 많은 정보를 얻을 수 있습니다.
블루투스 표준이 어떻게 작동하는지 또는 블루투스 기기의 보안을 어떻게 평가하는지에 대한 질문이 있으면 BSAM 방법론 웹페이지를 참조하세요:
playbackpaplay