BluetoothStackSmasher icon indicating copy to clipboard operation
BluetoothStackSmasher copied to clipboard

Clone and moddifications from http://www.secuobs.com/news/15022006-bss_0_8.shtml

BSS - Bluetooth Stash Smasher

Pierre BETOUIN [email protected] http://securitech.homeunix.org/blue/

Performs several L2CAP checks sending malicious packets (L2CAP) Initial source code analysis from tanya tool (tbear)

Example of use (short random L2CAP packets):

An example: ./bss -M 0 -m 13 -s 10 EF:F0:00:00:00:00
. [*] bss: l2ping returned that the host is up! [I] Potential crash detected for EF:F0:00:00:00:00, check l2ping response above [I] ---------------------------------------------------- [I] Host EF:FF:00:00:00:00 [I] Packet size 0 [I] ---------------------------------------------------- [I] Replay buffer: char replay_buggy_packet[]="";

[I]----------------------------------------------------

Now isolate the packet you think caused it, then if you had autogenerate test case on (-o) do the following: [1] If you generated the test case go into the 'replay_packet' dir [2] locate the testcase file [3] ./makereplay <file - minus extension> i.e. ./makereplay replay_l2cap_packet_11022005101938.0 [4] ./replay

and try this packet against your equipment : ./replay 00:12:EE:XX:XX:XX

see ./replay_packet/README for more details

CORE OPTIONS


BSS - Bluetooth Stack Smasher - version 0.8

Usage: ./bss [-i iface] [-d delay] [-c] [-v] [-x] [-P0] [-q] [-o] [-s size] [-m mode] [-p pad_byte] [-M maxcrash_count]

EXTRA OPTIONS

There are a number of other options side of core set these are detailed below. [-d delay] - Optional delay (miliseconds). [-c] - Continue even on errors we would normally exit on (except malloc) This overrides -x in most places [-v] - Verbose debugging [-x] - Exit on potential crashes that also don't respond to secondary l2ping's * [-P0] - Do not perform L2CAP ping (some hosts don't respond to such packets This overrides -x in most places [-q] - Quiet mode - print minimal output [-o] - Generate replay_packet.c automatically [-s size] - L2CAP packet size (bytes) [-M value] - Max crash count before exiting (Mode 13) [-p value] - Padding value (modes 1-11)

[*] these can be considered verified crashes

TIPS

  • In order to benchmark BT implementation, you may want to use time command : time ./bss -m 13 <BT_ADDR>

  • You may increase -M value, which allows you to go on fuzzing even if some packets have not been sent to the equipment : some devices may crash because of flooding for instance. 0 means an infinite loop.

OTHER EXAMPLES USING NEW OPTIONS

[quite mode, generate testcase replay] This will generate a replay template for each test case which it thinks caused a crash while running in quiet mode. ./bss -q -o -M 0 -m 13 -s 10 00:11:22:XX:YY:ZZ [] silent mode: on [] automatic replay_packet.c generation: on .!G.!G.!G.!G.!G.!G.!G. [!] l2ping: Recv failed: Connection reset by peer !G.!G.!G.!G.!G.!G.!G.!G.!G.!G.!G.!G.!G.!G.!G.!G.!G. [!] l2ping: Recv failed: Connection reset by peer !G.!G.23 sent, 23 received, 0% loss

The output means: . (test case sent) ! (we think we got a crash) G (we generated a replay file in 'replay_packet/'

[quite mode, generate testcase replay only when host is down, exit when crash] This will generate a replay template for each test case which it verifys causes a crash while running in quiet mode. This will also exist once it's verified the device has crashed. ./bss -x -q -o -M 0 -m 13 -s 10 DE:AD:BE:EF:00:00 [] exit on no response to l2ping: on [] silent mode: on [*] automatic replay_packet.c generation: on .!.!.!.!.!.!.!. [!] l2ping: Recv failed: Connection reset by peer !.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!. [!] l2ping: Recv failed: Connection reset by peer !G

[ Available modes ] 0 ALL MODES LISTED BELOW 1 L2CAP_COMMAND_REJ 2 L2CAP_CONN_REQ 3 L2CAP_CONN_RSP 4 L2CAP_CONF_REQ 5 L2CAP_CONF_RSP 6 L2CAP_DISCONN_REQ 7 L2CAP_DISCONN_RSP 8 L2CAP_ECHO_REQ 9 L2CAP_ECHO_RSP 10 L2CAP_INFO_REQ 11 L2CAP_INFO_RSP 12 L2CAP full header fuzzing 13 L2CAP Random Fuzzing

[generate testcase] This will generate a test case .c file for everyone it suspects ./bss -o -M 0 -m 13 -s 10 CA:FE:BE:EF:00:00 [] automatic replay_packet.c generation: on . [] bss: l2ping returned that the host is up! [I] Potential crash detected for CA:FE:BE:EF:00:00, check l2ping response above [I] ---------------------------------------------------- [I] Host CA:EF:BE:EF:00:00 [I] Packet size 0 [I] ---------------------------------------------------- [I] Replay buffer: char replay_buggy_packet[]="";

[I]----------------------------------------------------
[d] generated ok!
.