
Bluetooth Smart 기기와 모바일 앱 간의 GATT 트래픽을 웹 기반 가로채기 프록시를 통해 가로채고, 재생하고, 수정하는 BLE 중간자(Man-in-the-Middle) 프레임워크입니다.
BtleJuice는 Bluetooth Smart 기기(Bluetooth Low Energy라고도 함)에 대한 중간자(Man-in-the-Middle) 공격을 수행하기 위한 완전한 프레임워크입니다. 구성 요소는 다음과 같습니다:
BtleJuice 설치는 아주 쉽습니다. 먼저 시스템이 최신 버전의 Node.js(>=4.3.2)와 npm을 사용하는지 확인하세요. 그런 다음 필요한 모든 종속 항목을 설치합니다:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo yum install bluez bluez-libs bluez-libs-devel npm
마지막으로 npm을 사용하여 BtleJuice를 설치합니다:
sudo npm install -g btlejuice
모든 것이 잘 진행되었다면 BtleJuice를 사용할 준비가 된 것입니다!
BtleJuice는 인터셉션 프록시와 코어라는 두 가지 주요 구성 요소로 이루어져 있습니다. 이 두 구성 요소는 두 개의 Bluetooth 4.0+ 어댑터를 동시에 운영하기 위해 서로 다른 머신에서 실행되어야 합니다. BtleJuice 프록시는 Docker 컨테이너에서 작동하지 않습니다.
가상 머신을 사용하면 이 프레임워크를 단일 컴퓨터에서 작동시키는 데 도움이 될 수 있습니다.
가상 머신에서 btlejuice를 설치하고 USB BT4 어댑터를 가상 머신에서 사용할 수 있는지 확인하세요:
$ sudo hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 10:02:B5:18:07:AD ACL MTU: 1021:5 SCO MTU: 96:6
DOWN
RX bytes:1433 acl:0 sco:0 events:171 errors:0
TX bytes:30206 acl:0 sco:0 commands:170 errors:0
$ sudo hciconfig hci0 up
그런 다음 가상 머신에 호스트에서 연결 가능한 IP 주소가 있는지 확인하세요.
가상 머신에서 프록시를 실행하세요:
$ sudo btlejuice-proxy
호스트 머신에서는 블루투스 서비스를 중지하고 HCI 장치가 열려 있거나 초기화된 상태로 유지되도록 해야 합니다:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
마지막으로 호스트 머신에서 다음 명령을 실행하세요:
$ sudo btlejuice -u <Proxy IP address> -w
-w 플래그는 BtleJuice가 웹 인터페이스를 시작하도록 지시하며, -u 옵션은 프록시의 IP 주소를 지정합니다.
이제 웹 사용자 인터페이스를 http://localhost:8080에서 사용할 수 있습니다. 웹 서버 포트는 명령줄을 통해 변경할 수 있습니다.
BtleJuice의 웹 인터페이스는 아래와 같이 오른쪽 상단에 인터셉션 코어를 제어할 수 있는 링크 집합을 제공합니다.

먼저 Select target 버튼을 클릭하면 인터셉션 코어가 감지한 사용 가능한 모든 Bluetooth Low Energy 장치를 표시하는 대화 상자가 나타납니다:

원하는 대상을 더블클릭하고 인터페이스가 준비될 때까지 기다립니다(블루투스 버튼의 모양이 변경됩니다). 더미 장치가 준비되면 연결된 모바일 애플리케이션 또는 다른 장치(예상되는 방식에 따라 다름)를 사용하여 더미 장치에 연결합니다. 연결에 성공하면 Connected 이벤트가 기본 인터페이스에 표시됩니다.

그러면 인터셉트된 모든 GATT 작업이 해당 서비스 및 특성 UUID와 함께 표시되며, 물론 관련 데이터도 함께 표시됩니다. 데이터는 기본적으로 HexII 형식(Ange Albertini가 설계한 형식의 변형)으로 표시되지만, 데이터 자체를 클릭하여 HexII에서 Hex로(그리고 다시) 전환할 수 있습니다. BtleJuice는 Hex와 HexII 형식을 모두 지원합니다.
GATT 작업을 마우스 오른쪽 버튼으로 클릭한 다음 아래와 같이 Replay 옵션을 선택하여 어떤 GATT 작업이든 재생할 수 있습니다:


Write(또는 Read) 버튼을 클릭하여 해당 GATT 작업을 재생합니다. 이 작업은 기본 인터페이스에 기록됩니다.
마지막으로, 인터페이스는 모든 GATT 작업을 로컬 또는 전역적으로 인터셉트하여 실시간 데이터 수정을 허용할 수 있습니다. 오른쪽 상단의 Intercept 버튼을 클릭하여 전역 인터셉션을 사용하거나 컨텍스트 메뉴를 사용하여 특정 서비스 및 특성에 대한 후크를 활성화 또는 비활성화할 수 있습니다. GATT 작업이 인터셉트될 때마다 다음과 같은 대화 상자가 표시됩니다:

버전 1.0.6부터 인터페이스는 읽기 가능한 내보내기와 JSON 내보내기를 지원하는 데이터 내보내기 기능을 제공합니다. 이러한 내보내기는 인터셉트된 GATT 작업을 기반으로 생성되며 대상 장치에 대한 정보도 포함합니다. Export 버튼을 클릭하면 다음 대화 상자가 표시됩니다:

대화 상자 하단의 Export 버튼을 클릭하여 인터셉트된 데이터의 JSON(또는 텍스트) 버전을 다운로드합니다.
설정 대화 상자는 현재 대상 장치가 연결 해제될 때 프록시를 자동으로 다시 연결할 수 있는 단일 옵션을 제공합니다. 이는 짧은 시간 동안만 활성화되는 장치를 다룰 때 유용할 수 있습니다.

프록시가 활성화된 상태에서 오른쪽 상단의 Select Target 버튼을 클릭하면 프록시가 중지되고 다시 대상 선택이 가능해집니다.
BtleJuice의 Node.js 바인딩도 npm을 통해 설치할 수 있습니다:
$ sudo npm install -g btlejuice-bindings
Node.js 바인딩 사용 방법에 대한 자세한 내용은 패키지 문서를 참조하세요.
모바일 애플리케이션 문제를 피하기 위한 많은 noble/bleno 트릭을 알려주고 DEF CON 24에서 BLE MITM 전략을 공유해 준 Slawomir Jasek에게 특별히 감사드립니다 =). 그는 또한 Gattacker의 저자이기도 합니다.
Copyright (c) 2016 Econocom Digital Security
이로써 본 소프트웨어 및 관련 문서 파일(이하 "소프트웨어")의 사본을 취득한 모든 사람에게 제한 없이 소프트웨어를 다룰 수 있는 권한이 무료로 부여됩니다. 여기에는 사용, 복사, 수정, 병합, 게시, 배포, 서브라이선스 및/또는 소프트웨어 사본 판매 권한이 제한 없이 포함되며, 소프트웨어가 제공되는 모든 사람에게 다음 조건에 따라 이를 허용합니다:
위 저작권 고지 및 이 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함되어야 합니다.
소프트웨어는 "있는 그대로" 제공되며, 상품성, 특정 목적에의 적합성 및 비침해성에 대한 보증을 포함하되 이에 국한되지 않는 어떠한 종류의 명시적 또는 묵시적 보증도 없이 제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타 행위에 관계없이 소프트웨어 또는 소프트웨어 사용이나 기타 거래에서 발생하거나 이와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다.