
Sweyntooth Bluetooth Low Energy (BLE) 취약점에 대한 개념 증명(Proof of Concept).
이 저장소는 ASSET Research Group의 연구 성과의 일부입니다.

SweynTooth는 6개 주요 시스템온칩(SoC) 벤더의 서로 다른 Bluetooth Low Energy (BLE) 소프트웨어 개발 키트(SDK) 전반에 걸친 18개 취약점 군을 포착합니다. 이 취약점들은 특정 BLE SoC 구현의 결함을 드러내며, 무선 범위 내의 공격자가 상황에 따라 교착 상태, 충돌 및 버퍼 오버플로를 유발하거나 보안을 완전히 우회할 수 있게 합니다. (업데이트) BLE KNOB 변종에 대한 기기 점검 테스트 스크립트도 포함했습니다.
취약점, 사용 가능한 패치 및 영향을 받는 기기에 대한 자세한 정보는 ASSET Research Group SweynTooth 공개 웹사이트에서 확인할 수 있습니다.
Fitbit, August Smart Lock, Eve Energy, CubiTag 및 기타 "스마트" 기기가 영향을 받습니다.
이 PoC는 Scapy 및 Colorama와 같은 잘 유지 관리되는 라이브러리를 사용합니다. BLE 패킷 생성 및 분석은 맞춤형 Scapy 프로토콜 레이어(bluetooth4LE 및 bluetooth.py)를 통해 수행됩니다. Scapy의 메인 저장소에 우리의 추가 사항을 포함하기 위한 병합이 진행 중입니다.
먼저 시스템에 Python2.7과 requirements.txt 파일에 나열된 Python 패키지가 있는지 확인해야 합니다.
Ubuntu를 사용하는 경우 다음을 실행하세요:
sudo apt-get install python2.7
sudo pip install -r requirements.txt
둘째, SweynTooth는 Nordic nRF52840 동글을 사용하여 취약한 주변 기기와 무선으로 원시 링크 계층 패킷을 송수신합니다. Python 2.7 스크립트를 시작하기 전에 드라이버 펌웨어를 보드에 플래시해야 합니다.
펌웨어 코드의 바이너리는 nRF52_driver_firmware.zip 파일에 있습니다. 보드에 펌웨어를 플래시하려면 nrfutil 도구를 설치해야 합니다. 플래시하기 전에 nRF52840을 DFU 모드로 전환해야 합니다(PC에 연결된 상태에서 작은 리셋 버튼을 눌러 USB 동글을 리셋하세요).
다음 명령을 실행하여 Python 종속성을 설치하고 펌웨어를 플래시할 수 있습니다:
python -m pip install nrfutil pyserial pycryptodome
nrfutil dfu usb-serial -p COM_PORT -pkg nRF52_driver_firmware.zip
스크립트는 Linux 또는 Windows에서 작동합니다. COM_PORT 매개변수를 nRF52840 포트 이름에 맞게 변경하기만 하면 됩니다.
이전 플래시 방법이 작동하지 않는 경우, hex 펌웨어(nRF52_driver_firmware.hex)를 플래시할 수 있는 편리한 인터페이스를 제공하는 nRF Connect App for Desktop을 사용하여 펌웨어를 플래시할 수도 있습니다.
요구 사항이 설치된 후 다음 명령을 실행하여 익스플로잇 스크립트를 실행할 수 있습니다:
python Telink_key_size_overflow.py COM7 A4:C1:38:D8:AD:A9
첫 번째 인자는 직렬 포트 이름(일반적으로 Linux에서는 /dev/ttyACM0)이고 두 번째는 취약한 BLE 기기의 주소입니다. BLE 스캐너나 nRF Connect App을 사용하여 해당 주소를 찾을 수 있습니다.
Key Size Overflow 취약점을 예로 들면, 취약한 기기가 충돌 후 멈추는 경우 스크립트는 다음과 같은 출력을 제공합니다:

Python 종속성 설치를 피하기 위해 Docker 이미지로 SweynTooth를 사용하려면, docker.sh 헬퍼 스크립트를 사용하여 Docker 인스턴스를 빌드하고 실행하거나 릴리스 페이지에서 제공되는 사전 빌드된 Docker 이미지(링크)를 다운로드할 수 있습니다. docker.sh의 사용법은 아래에 설명되어 있습니다.
--------- HELP -------------
sudo ./docker run <script_name> <serial_port> <ble_target_address> - Start any sweyntooth script by its name (<script_name>)
sudo ./docker build - Build docker container
sudo ./docker build release - Build docker container and create compressed image for release
sudo ./docker shell - Start docker container shell
---------- EXAMPLE ----------
./docker.sh run extras/Microchip_and_others_non_compliant_connection.py /dev/ttyACM0 f0:f8:f2:da:09:63
각 익스플로잇 스크립트는 하나의 결함에 대응합니다. 다음 요약 표는 취약점과 영향을 받는 SoC에서 해당 취약점을 익스플로잇하기 위한 스크립트 간의 대응 관계를 보여줍니다.