Skip to content

tumbleRF: a unified fuzzing framework for low-level RF and HW protocol/PHY/MAC analysis

License

Notifications You must be signed in to change notification settings

matt-knight/tumblerf

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TumbleRF: RF Fuzzing Framework

Overview

While fuzzing is known to be a powerful mechanism for fingerprinting and enumerating bugs within hardware and software systems, the application of this technique to wireless systems remains nontrivial due to fragmented and siloed tools. Join us as we cover wireless fuzzing fundamentals and introduce a new tool to unify the approach across protocols, radios, and drivers.

Presentations

"Unifying RF Fuzzing Techniques under a Common API: Introducing TumbleRF", TROOPERS 18

Install

Create a Python 2.7 virtaulenv and activate it:

virtualenv -p $(which python2.7) py2-virtualenv
source py2-virtualenv/bin/activate

You should now see a prompt that looks similar to:

(py2-virtualenv) ... $

Now, install the required dependencies:

pip install -r unfapi/requirements.txt

Install dependencies for specific features:

Some of these steps and dependencies are not needed if you do not use certain features/generators.

For specific generators:

  1. For dot15d4_* generators, you must install Scapy (in the GPL version of this code): ** First install dependencies: *** macOS:
pip install pcapy
brew install --with-python libdnet
echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> py2-virtualenv/lib/python2.7/site-packages/homebrew.pth

*** Linux: install pcapy with your package manager:

sudo apt-get install python-pcapy
#or
pip install pcapy

** Then install Scapy, which must be the exact correct version which contains scapy/layers/dot15d4.py and has it configured to load:

git clone [email protected]:BastilleResearch/scapy-radio.git
pushd scapy-radio/scapy
# Now, manually edit scapy/config.py to add 'dot15d4' to the list
python setup.py install
popd

For specific harnesses:

  1. For ssh_* harness test suites, you must have Docker installed and running.

For specific interfaces:

See ./interfaces/README.md.

Running

This tool needs to be scripted to carry out most tasks, however a CLI is available for some uses.

Running ./unfapi/cli.py will tell you what interfaces, generators, and harnesses are available so you can define each.

A very simple run case can be done based on something like the following. This just transmits random frames from one device to another which looks to see if it got them, and is thus uninteresting. However, it demonstrates how we pick the second interface to use for TX, as ReceivedFrameHarness will ... TODO

(py2-virtualenv)$ zbid
           Dev Product String       Serial Number
           1:3 KILLERB001           A60400A01C25
           1:4 KILLERB001           0004251CA001

(py2-virtualenv)$ ./unfapi/cli.py -I KillerBeeInterface -i 1:3 -G Dot15d4RandomPayloadGenerator -H ReceivedFrameHarness --rx_iface_device 1:4

NOTE: If you see errors such as the below, you may have a permission issue accessing your USB devces. You may correct this via your OS and permissions, or you may run with sudo (not recommended...).

ERROR:Tue Mar 13 12:16:26 2018 KillerBee Interface:Error when starting, unable to open KillerBee interface. INFO: Transmit Interface is 802.15.4 KillerBee Interface(Not Available)


## Looking at Results

You can process the JSON however you desire, but you may desire to use `parse_results.py` to visualize summaries.

## Testing

~~~bash
pytest -s
~~~

> NOTE: This will, by default, run all test suites. See notes above about certain test suites having additional dependencies.

## Contributing

We welcome bug fixes, feature additions, and more with open arms. Please submit a pull-request.

We ask that you adhere to the Python style guide and implement pytest unit testing wherever possible.

About

tumbleRF: a unified fuzzing framework for low-level RF and HW protocol/PHY/MAC analysis

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 93.2%
  • C++ 6.8%