Ubertooth

Getting Started

원문 - https://github.com/greatscottgadgets/ubertooth/wiki/Getting-Started
Spectrum Analysis
처음 Ubertooth One으로 시도해 볼것은 real-time spectrum analysis이다. 말그대로 실시간 블루투스신호를 스펙트럼으로 보여주는 기능이다.

안테나를 기기에 연결하고 컴퓨터에 연결해라. 안테나없이 연결하면 안된다.
연결했을때 RST, 1V8의 LED에 불이 들어와야한다.
- RST은 LPC175x microcontroller가 동작중이라는 뜻
- 1V8은 그 power가 cc2400 무선 송수신기 IC에 잘 공급되고 있다는 뜻
- USB LED도 불이들어올수있다. (Linux에서~)
꼽으면 RST and 1V8 LEDs 에 불이 들어와야한다.
ubertooth-specan-ui 를 입력하면 실행된다.

왼쪽엔 지속적인 신호가있고, 핸드폰간의 블루투스 데이터 전송을 했을때 신호가 많이 뜨는걸 볼 수 있다. 3초~9초, 40초~45초
실험끝나면 뺐다 꼽아서 reset 시켜준다.

LAP Sniffing

블루투스 패킷은 Low Address part(LAP)로 시작한다. 특정 블루투스 기기 주소(BD_ADDR)는 Ethernet 기기같은 48비트의 MAC주소이다. LAP는 BD_ADDR의 하위 24비트를 담고있다. 이는 모든 전송되는 패킷에 들어있다.
이 실습의 가장 중요한 기능은 채널에서 전송되고있는 블루투스 패킷에서  LAP 주소를 찾는것이다. LAP Sniffing은 당신 주변에서 작동하고있는 블루투스 기기들을 인식할 수 있게 해준다.
 
LAP Sniffing을 동작하는 명령어는 ubertooth-rx
 
 You should see various random LAPs detected. Due to uncertainties in identifying Bluetooth packets without prior knowledge of an address, it is normal for this process to identify false positives. error correction should mitigate this problem, but a small number of false positives may still be seen.
 
명령어를 실행시키고 같은 LAP가 한번이상 보인다면, 그것은 실제 블루투스 신호일 확률이 높다. 간단히 블루투스 신호를 발생시키려면 핸드폰을 이용하여 찾기 버튼을 눌러보자. 핸드폰이 주변의 연결할 수 잇는 블루투스 기기를 찾기위해 수많은 블루투스 신호를 발생시킨다. 찾기 신호는 LAP가 0x9e8b33이다.
 
다른 기기와 통신을 시켜 LAP를 여러번 발견하면 이를 진짜 Bluetooth Piconet으로 볼수 잇다.
Piconet Ad-hoc의 형태로 블루투스를 통해 연결된 디바이스의 모음
다음 byte, UAP를 찾기 위해선 ubertooth-rx -l [LAP]를 사용하면 된다.
ex) ubertooth-rx -l 0x123456
 
이 모드에서는 ubertooth-rx는 주어진 piconet의 패킷만을 탐색한다. 그리고 이를 다음 주소부분과 내부클락 값을 결정하는데 사용한다. 고하는데 내가했을때는 제대로 되지 않았다.
더 많은 정보를 얻고싶으면 이 링크를 따라가라.
링크에는 용어들에 대한 설명과 좀더 자세한 설명이 들어있다.

Kismet

훌륭한 802.11 모니터링 툴인 kismet의 플러그인을 통해 더 고급진 블루투스 스니핑을 할 수 있다.
플러그인 사용에 대해서  host/kismet/plugin-ubertooth/README에 있는 지시를 따라라.
 
Kismet-Ubertooth는 LAP뿐만 아니라 8비트의 UAP도 인식한다(가능하다면). 이 기능은 측정시간동안 여러패킷들의 타이밍과 다른 특성들을 분석하여 이루어진다.
또다른 이점은 Kismet이 완전히 해독된 패킷을 pcapbtbb 파일로 복사해준다는 점이다. 이 파일은 Wireshark 플러그인(에서 읽을수 있다. 패킷의 완전해독은 패킷의 UAP가 결정됬을때만 가능하다.

Capturing BLE in Wireshark
  1. 콘솔에 mkfifo /tmp/pipe 명령어를 입력
  2. Wireshark를 켠다.
  3. Capture -> Options를 클릭
  4. Manage Interfaces 버튼을 클릭한다.
  5. New 버튼을 클릭
  6. Pipe 텍스트 상자에 /tmp/pipe라고 입력한다.
  7. Save를 누르고, Close를 누른다.
  8. Start를 누른다.
  9. 터미널에서 ubertooth-btle를 실행시킨다. -> ubertooth-btle -f -c /tmp/pipe
  10. Wireshark에서 패킷을 확인할 수 있을 것이다.
  11. 필터를 적용할 수 잇다. -> btle.type == 0x05 || (btle.data && btle.length > 0)
  12. 연결요청이나 뭔가 들어있는 데이터패킷만 보기.
Capturing BLE in Wireshark를 하려는데 에러가뜬다. promiscous mode를 설정해주란다.
 
promiscous mode란 무작위 모드를 말합니다.
주로 스니핑에 주로 쓰이져 ifconfig으로 설정이 가능 합니다.
 
 
ifconfig eth0 promisc 라는 명령어를 실행하면 아래와 같이 변경된다.

댓글

댓글 본문
  1. 아자자
    BLE sniffing에 대해
    ubertooth로 패킷이 이런 것이구나 할때와 전문적으로 패킷해석하려면 필요한 것 같고
    wireshark을 사용해도 BLE할 때 특히 USB 오류가 많이 발생됩니다.
    이는 kismet(최신 2020년 3월)에서도 관련 tool 소개는 되어 있지만 usb 에러가 있을거라고만
    되어 있기 때문에 혹시 오픈튜토리언 중에
    BLE 공부하시는 분은 다른 H/W로 우회할 것을 추천드립니다.
버전 관리
1005ptr
현재 버전
선택 버전
graphittie 자세히 보기