IoTcube Logo
IoTcube

Security Platform

User Guide : Blackbox-testing vfuzz

INTRODUCTION

vfuzz is a Z-Wave protocol fuzzing tool for finding vulnerabilities and implementation errors in smart homes devices that use the Z-Wave chipset.

It generates semi-valid Z-Wave inputs that are less likely to be rejected by the target device.

vfuzz research summary and discovered vulnerabilities can be found at : https://ccs.korea.ac.kr/research/vfuzz/

The research paper: "Riding the IoT Wave With vfuzz: Discovering Security Flaws in Smart Homes"

USAGE

Requirements

To send and receive Z-Wave packet, vfuzz uses the YardStick One dongle (https://greatscottgadgets.com/yardstickone/)

Step 1. Getting Started

To begin fuzz testing with VFUZZ, click on Blackbox Testing in the main page of IoTcube, then proceed by clicking on Wireless Testing.

Step 1. Getting Started

Step 2. Downloading vfuzz

In the I/O page, download vfuzz for linux.

Step 2. Downloading vfuzz

Step 3. Using vfuzz

After downloading vfuzz, unzip it.

You can run vfuzz in two modes: Scanning with "-s argument" or Manual modes.

A. SCANNING MODE ( "-s"):

1. Run: python2 ./vfuzz.py -s 2. Select your devices supported Z-Wave frequency: [1] for USA, [2] for Korea, [3] for EU and press ENTER.

Additional content 1

3. In order for vfuzz to scan your devices it requires their network traffic. Therefore, open your mobile phone app (e.g., SmartThings) that manages your Z-Wave devices and start controlling them (turn on/off, lock/unlock, check battery status, etc.). This will generate Z-Wave traffic from devices to controller and vice versa. vfuzz will sniff the devices generated Z-Wave traffic and it will retrieve your smart home network information details such as the main Z-Wave Home ID and current active devices Nodes ID.

Additional content 2

4. Select the target device node ID you would like to conduct a fuzz testing. Here we type 0e (without 0x prefix). Note that numbers are converted automatically in hexadecimal (e.g., 0x0e) by vfuzz.

Additional content 3

5. Then the fuzz testing on the target device with node ID (e.g.,0x0e) will start

Additional content 4

6. During the fuzz testing, if the target device crashes or cannot be reached for a timeout threshold, then a crash input will be added into the log file. If the device cannot be reached, vfuzz will stop running automatically and will provide a brief fuzzing summary (see picture below).

Additional content 5

7. After fuzz testing, go to STEP 4 in order to upload the .wfl log file to IOTCUBE for online results visualization.

B. MANUAL MODE:

vfuzz can be run in manual mode as well. This requires the knowledge of the target Z-Wave network information such as the Home ID and device ID. To run VFUZZ in manual mode type: 1. Run: python2 ./vfuzz.py 2. Insert your Z-Wave Network Home ID and Target device Node ID:

Additional content 7

3. Select the supported frequency of the Z-Wave device:

Additional content 8

4. Finally, the fuzz testing on the target device will start. Therefore, after fuzz testing upload the .wfl log file to IOTCUBE server for details visualization.

Additional content 9

Step 4. Uploading the log file (.wfl) to IOTCUBE

1. After fuzz testing, open the logs folder and upload the .wfl log file to IOTCUBE for online fuzzing details visualization. IOTCUBE automatically proceeds to the result page when the file upload is completed.

Step 4. Uploading the log file (.wfl) to IOTCUBE

2. Visualization details are available online on IOTCUBE.

Additional content 1

3. More visualization details:

Additional content 2

POSSIBLE COLLABORATION

For inquiries, suggestions or possible collaboration please send an email to cssa@korea.ac.kr.