2020-06-19 23:49:39 -04:00
|
|
|
# Fragment and Forge: Breaking Wi-Fi Through Frame Aggregation and Fragmentation
|
2020-04-15 13:43:28 -04:00
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
## Introduction
|
|
|
|
|
|
|
|
Our attacks affect all Wi-Fi networks. Note that the recent WPA3 specification only introduced
|
|
|
|
a new authentication method, but its encryption ciphers (CCMP and GCMP) are identical to WPA2.
|
|
|
|
Because of this, our attack is identical against WPA2 and WPA3 networks.
|
|
|
|
|
|
|
|
Older WPA networks by default use TKIP for encryption, and the applicability of our attacks
|
|
|
|
against this cipher is discussed in the paper. Out of completeness, and to illustrate that Wi-Fi
|
|
|
|
has been vulnerable since its creation, the paper also briefly discusses the applicability of
|
|
|
|
our results against WEP.
|
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
## Supported Network Cards
|
|
|
|
|
|
|
|
Only specific wireless network cards are supported. This is because some network cards may overwrite the
|
|
|
|
sequence number of injected frames, may overwrite the fragment number, or reorder frames of different priority,
|
|
|
|
and this interferes with our scripts (i.e. our script might incorrectly say a device is secure although it's not).
|
|
|
|
We have confirmed that the following network cards work properly with our scripts:
|
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
| Network Card | USB | mixed mode | injection mode | hwsim mode (experimental) |
|
2020-05-23 20:39:15 -04:00
|
|
|
| ---------------------- | --- | ----------------------- | ----------------------- | ------------------------- |
|
2020-06-26 07:51:03 -04:00
|
|
|
| Intel Wireless-AC 8265 | No | patched driver | yes | as client |
|
|
|
|
| Intel Wireless-AC 3160 | No | patched driver | yes | as client |
|
2020-05-23 20:39:15 -04:00
|
|
|
| Technoethical N150 HGA | Yes | patched driver/firmware | patched driver/firmware | patched driver/firmware |
|
|
|
|
| TP-Link TL-WN722N v1.x | Yes | patched driver/firmware | patched driver/firmware | patched driver/firmware |
|
|
|
|
| Alfa AWUS036NHA | Yes | patched driver/firmware | patched driver/firmware | patched driver/firmware |
|
2020-06-26 07:51:03 -04:00
|
|
|
| Alfa AWUS036ACM | Yes | yes | yes | **yes?** |
|
|
|
|
| Alfa AWUS036ACH | Yes | no | patched driver | _under development_ |
|
|
|
|
| Netgear WN111v2 | Yes | patched driver | yes | yes |
|
|
|
|
|
|
|
|
**TODO: No longer recommend Virtual Machine, but instead show whether it supports 5GHz?**
|
|
|
|
|
|
|
|
**TODO: AWUS036ACM `iw set wlanX monitor active` in injection mode (but in mixed mode that crashes)**
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
The three last colums signify:
|
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
1. Injection mode: whether the network card can be used as a second interface to inject frames in [injection mode](#Injection-mode).
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
2. Mixed mode: whether the network card can be used in [mixed mode](#Mixed-mode).
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
3. Hwsim mode: whether the network card can be used in [hwsim mode](#Hwsim-mode).
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
_Yes_ indicates the card works out-of-the-box in the given mode. _Patched driver/firmware_
|
2020-06-26 07:51:03 -04:00
|
|
|
means that the card is compatible when used in combination with patched drivers (and/or firmware).
|
2020-06-19 23:49:39 -04:00
|
|
|
_As client_ means the mode only works when the test script is acting as a client (i.e. you
|
2020-06-26 07:51:03 -04:00
|
|
|
when are testing an AP). _No_ means this mode is not supported.
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
We recommend the use of the Technoethical N150 HGA in either injection mode or mixed mode. This deivce
|
2020-05-23 20:39:15 -04:00
|
|
|
requires the use of a patched driver and firmware, but since it's a USB dongle this can be
|
2020-06-26 07:51:03 -04:00
|
|
|
configured inside a virtual machine. When using Virtual Box, we recommend to configure the VM to
|
|
|
|
use a USB2.0 (OHCI + ECHI) controller, because we found the USB3.0 controller to be unreliable.
|
|
|
|
|
|
|
|
During our own tests, the AWUS036ACM dongle is supported by Linux, but at times was not correctly
|
|
|
|
recognized during our experiments. It may be necessairy to use a recent Linux kernel, and manually
|
|
|
|
executing `modprobe mt76x2u` to load the driver. This devices then works out-of-the-box without
|
|
|
|
patched drives. However, we seek feedback from the community on its reliability before recommending
|
|
|
|
this device.
|
2020-06-19 23:49:39 -04:00
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
The AWUS036ACH was tested on Kali Linux after installing the driver using `sudo apt install realtek-rtl88xxau-dkms`.
|
|
|
|
This device is generally not supported by default in most Linux distributions and requires manual
|
|
|
|
installation of drivers.
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
We tested the Intel AX200 as well and found that it is _not_ compatible with our tool: its firmware
|
|
|
|
crashes after sending a fragmented frame.
|
|
|
|
|
|
|
|
If you are unable to find one of the above network cards, you can search for [alternative network cards](#Alternative-network-cards)
|
|
|
|
that have a high chance of also working. When using a network card that is not explicitly support,
|
|
|
|
we strongly recommend to first run the [injection tests](#Network-card-injection-test).
|
2020-06-13 12:41:30 -04:00
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
## Prerequisites
|
|
|
|
|
2020-05-27 02:45:46 -04:00
|
|
|
Our scripts were tested on Kali Linux and Ubuntu 20.04. To install the required dependencies, execute:
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
# Kali Linux and Ubuntu
|
2020-06-26 07:51:03 -04:00
|
|
|
sudo apt-get update
|
|
|
|
sudo apt-get install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev libdbus-1-dev git pkg-config build-essential macchanger net-tools python3-venv
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
Now clone this repository, build the tools, and configure a virtual python3 environment:
|
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
# **Self note: replace with real HTTP unauthenticated link on release**
|
|
|
|
git clone https://gitlab.com/aconf/wifi.git fragattack --recursive
|
|
|
|
cd fragattack
|
2020-05-23 20:39:15 -04:00
|
|
|
./build.sh
|
|
|
|
cd research
|
|
|
|
python3 -m venv venv
|
|
|
|
source venv/bin/activate
|
2020-05-27 02:45:46 -04:00
|
|
|
pip install wheel
|
2020-05-23 20:39:15 -04:00
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
|
|
The above instructions only have to be executed once.
|
|
|
|
|
2020-05-27 02:45:46 -04:00
|
|
|
## Patched Drivers
|
|
|
|
|
|
|
|
Install patched drivers:
|
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
sudo apt-get install bison flex linux-headers-$(uname -r)
|
2020-06-19 23:49:39 -04:00
|
|
|
# **Self note: replace with real HTTP unauthenticated link on release instead of separate directory**
|
2020-06-26 07:51:03 -04:00
|
|
|
cd driver-backports-5.7-rc3-1
|
2020-05-27 02:45:46 -04:00
|
|
|
make defconfig-experiments
|
|
|
|
make -j 4
|
|
|
|
sudo make install
|
|
|
|
|
|
|
|
Install patched `ath9k_htc` firmware on Ubuntu:
|
|
|
|
|
|
|
|
cd research/ath9k-firmware/
|
2020-06-26 07:51:03 -04:00
|
|
|
sudo cp htc_9271.fw /lib/firmware/ath9k_htc/htc_9271-1.4.0.fw
|
|
|
|
sudo cp htc_7010.fw /lib/firmware/ath9k_htc/htc_7010-1.4.0.fw
|
|
|
|
# Now reboot the system
|
2020-05-27 02:45:46 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
Note that the above directories depend on the specific Linux distribution you are running.
|
2020-06-26 07:51:03 -04:00
|
|
|
If you Wi-Fi donle already is plugged in, unplug it. After installing the patched drivers
|
|
|
|
and firmware you must reboot your system. The above instructions have to be executed again
|
|
|
|
if your Linix kernel ever gets updated.
|
2020-05-27 02:45:46 -04:00
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
## Before every usage
|
|
|
|
|
|
|
|
Every time you want to use the script, you first have to load the virtual python environment
|
|
|
|
as root. This can be done using:
|
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
cd research
|
2020-05-23 20:39:15 -04:00
|
|
|
sudo su
|
|
|
|
source venv/bin/activate
|
|
|
|
|
|
|
|
You should now disable Wi-Fi in your network manager so it will not interfere with our scripts.
|
|
|
|
|
|
|
|
Our script can test both clients and APs:
|
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
- Testing APs: **configure the AP you want to test** by editing `research/client.conf`. This is a
|
|
|
|
standard `wpa_supplicant` configuration file, see the [hostap documentation] on how to edit it.
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
- Testing clients: you must execute the script with the extra `--ap` parameter. This instructs
|
|
|
|
the script into creating an AP with as name **testnetwork** and password **abcdefgh**. Connect
|
2020-06-19 23:49:39 -04:00
|
|
|
to this network with the client you want to test. By default the client must request an IP
|
|
|
|
using DHCP. To edit properties of the created AP, such as the channel it's created on, you
|
2020-05-23 20:39:15 -04:00
|
|
|
can edit `research/hostapd.conf`.
|
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
## Testing Modes
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
### Injection mode
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
This mode requires two wireless network cards: one will act as an AP or the client, and the other
|
|
|
|
one will be used to inject frames. Execute the script in this mode using:
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
./fragattack wlan0 --inject wlan1 [--ap] $COMMAND
|
|
|
|
|
|
|
|
Here interface wlan0 will act as a legitimate client or AP, and wlan1 will be used to inject
|
2020-06-19 23:49:39 -04:00
|
|
|
frames. For wlan0, any card that supports normal client or AP mode on Linux can be used. For
|
|
|
|
wlan1, a card must be used that supports injection mode according to [Supported Network Cards](#Supported-Network-Cards).
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-05-27 02:45:46 -04:00
|
|
|
In case the tests do not seem to be working, you can confirm that injection is properly working using:
|
|
|
|
|
|
|
|
./test-injection wlan1 wlan0
|
|
|
|
|
|
|
|
This will script will inject frames using interface wlan1, and uses wlan0 to check if frames are
|
|
|
|
properly injected. Note that both interfaces need to support monitor mode for this script to work.
|
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
**TODO: First test a normal ping. Frames may not arrive because the target is sleeping!**
|
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
### Mixed mode
|
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
This mode requires only one wireless network card. This disadvantage is that this mode requires a patched
|
|
|
|
driver and/or firmware, and that only a small amount of network cards are supported. Execute the script
|
|
|
|
in this mode using:
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
./fragattack wlan0 [--ap] $COMMAND
|
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
See [Supported Network Cards](#Supported-Network-Cards) for network cards that support this mode.
|
|
|
|
For most network cards, this mode requires the installation of modified drivers and/or firmware.
|
|
|
|
See [Patched Drivers](#Patched-Drivers) on how to install our patched drivers/firmware.
|
|
|
|
|
|
|
|
### Hwsim mode
|
|
|
|
|
|
|
|
This mode is experimental and only for research purposes. See [hwsim mode details](#Hwsim-mode-details)
|
|
|
|
for more information.
|
|
|
|
|
|
|
|
|
|
|
|
## Testing for Vulnerabilities
|
|
|
|
|
|
|
|
Before testing for vulnerabilities we recommand to execute the first five commands in the table
|
|
|
|
below. The first command performs a normal ping and can be used to confirm that the test setup
|
|
|
|
works. The second performs a fragmented ping, and the third can be used to determine how time-
|
|
|
|
sensitive attacks against the device would be.
|
|
|
|
|
|
|
|
The commands that test for vulnerabilities are grouped by their type along with a reference to
|
|
|
|
the paper in which section the vulnerability is explained.
|
|
|
|
|
|
|
|
| Command | Short description
|
|
|
|
| -------------------------------- | ---------------------------------
|
|
|
|
| `ping I,E` | Send a normal ping
|
|
|
|
| `ping I,E,E` | Send a normal fragmented ping
|
|
|
|
| `ping I,E,E --delay 5` | Send a normal fragmented ping with a 5 second delay between fragments
|
|
|
|
| `ping-frag-sep` | Send a normal fragmented ping with fragments separated by another frame
|
|
|
|
| <div align="center">*A-MSDU attacks (Section 3)*</div>
|
|
|
|
| `ping I,E --amsdu` | Send a normal ping encapsulated in a normal A-MSDU frame.
|
|
|
|
| `ping I,E,E --amsdu` | Send a normal ping an a fragmented A-MSDU frame.
|
|
|
|
| `amsdu-inject` | Send a valid A-MSDU frame whose start is also a valid LLC/SNAP header.
|
|
|
|
| `amsdu-inject linux` | Same as above, but works against targets that incorrectly parse the frame.
|
|
|
|
| <div align="center">*Mixed key attacks (Section 4)*</div> |
|
|
|
|
| `ping I,R,BE,AE` | Inject two fragments encrypted under a different key.
|
|
|
|
| `ping I,R,BE,AE --pn-per-qos` | Same as above, but also works if the target only accepts consecutive fragments.
|
|
|
|
| <div align="center">*Cache attacks (Section 5)*</div> |
|
|
|
|
| `ping I,E,C,AE` | Inject a fragment, reconnect or as client _reassociate_, then inject second fragment.
|
|
|
|
| `ping I,E,C,E` | Same as above, but with a longer delay before sending the second fragment.
|
|
|
|
| `ping I,E,C,AE --full-reconnect` | Inject a fragment, reconnect, then inject second fragment.
|
|
|
|
| `ping I,E,C,E --full-reconnect` | Same as above, but with a longer delay before sending the second fragment.
|
|
|
|
| <div align="center">*Non-consecutive (Section 6.2)*</div> |
|
|
|
|
| `ping I,E,E --inc-pn 2` | Send a fragmented ping with non-consecutive packet numbers.
|
|
|
|
| <div align="center">*Mixed plain/enc (Section 6.3)*</div> |
|
|
|
|
| `ping I,E,P` | Send a fragmented ping: first fragment encrypted, second fragment in plaintext.
|
|
|
|
| `ping I,P,E` | Send a fragmented ping: first fragment in plaintext, send fragment encrypted.
|
|
|
|
| `ping I,P` | Send a plaintext ping.
|
|
|
|
| `ping I,P,P` | Send a fragmented ping: both fragments are sent in plaintext.
|
|
|
|
| `linux-plain` | Mixed plaintext/encrypted fragmentation attack specific to Linux.
|
|
|
|
| <div align="center">*EAPOL forwarding (Section 6.4)*</div> |
|
|
|
|
| `eapol-inject 00:11:22:33:44:55` | Test if the AP forwards EAPOL frames before being connected.
|
|
|
|
| <div align="center">*Broadcast fragments (Section 6.7)*</div> |
|
|
|
|
| `ping I,D,P --bcast-ra` | Send ping in a 2nd plaintext broadcasted fragment.
|
|
|
|
| <div align="center">*EAPOL A-MSDUs (Section 6.8)*</div> |
|
|
|
|
| `eapol-amsdu BB` | Send A-MSDU frame disguised as EAPOL frame. Use tcpdump to check if vulnerable.
|
|
|
|
| `eapol-amsdu I,CC` | Same as above, except the frame is injected after obtaining an IP.
|
|
|
|
| `eapol-amsdu M,BB` | Send a malformed A-MSDU disguised as EAPOL. Use tcpdump to check if vulnerable.
|
|
|
|
| `eapol-amsdu M,I,CC` | Same as above, except the frame is injected after obtaining an IP.
|
|
|
|
|
|
|
|
Notable remarks:
|
|
|
|
|
|
|
|
- `ping I,E,E --delay 5`: this test is used to check the maximum accepted delay between two fragments.
|
|
|
|
If the default test doesn't work, try with `--delay 1.5` or lower. In case the maximum accepted delay
|
|
|
|
is low, this may impact other tests. In particular, all fragments sent in other tests must be sent
|
|
|
|
within the maximum delay, otherwise the test will trivially fail (and you might conclude a device
|
|
|
|
isn't vulnerable to an attack even though it might be).
|
|
|
|
|
|
|
|
- _Mixed key attacks_: When running the mixed key test against an AP, the AP must be configured to
|
|
|
|
regularly renew the PTK by executing a new 4-way handshake (e.g. every 30 seconds or minute). Against
|
|
|
|
a low number of APs, the client can also request the AP to renew the PTK. This can be done by adding
|
|
|
|
the `--rekey-request` parameter.
|
|
|
|
|
|
|
|
Home routers with a MediaTek driver will perform the rekey handshake in plaintext. To test these
|
|
|
|
devices, also add the `--rekey-plaintext` parameter.
|
|
|
|
|
|
|
|
Certain clients install the key too early during a pairwise session rekey. To test these devices,
|
|
|
|
add the `--rekey-early-install` parameter and retry the test.
|
|
|
|
|
|
|
|
In case the script doesn't appear to be working, check the following:
|
|
|
|
|
|
|
|
1. Check that you are using modified drivers if needed for your wireless network card.
|
|
|
|
|
|
|
|
2. Check that you are using modified firmware if needed for your wireless network card.
|
|
|
|
|
|
|
|
3. Run the [injection tests](#Network-card-injection-test) to make sure injection is working properly.
|
|
|
|
|
|
|
|
4. Check that you machine isn't generating background traffic that interferes with the tests. In
|
|
|
|
particular, disable networking in your OS, manually kill your DHCP client/server, etc.
|
|
|
|
|
|
|
|
5. Confirm that you are connecting to the correct network. Double-check `client.conf`.
|
|
|
|
|
|
|
|
6. Make sure the network is using (AES-)CCMP as the encryption algorithm.
|
|
|
|
|
|
|
|
## Extended Vulnerability Tests
|
|
|
|
|
|
|
|
Optionally you can also run more advanced tests. These have a lower chance of uncovering new vulnerabilities,
|
|
|
|
but against more exotic implementations these might reveal flaws that the normal tests could not detect.
|
|
|
|
|
|
|
|
| Command | Short description
|
|
|
|
| ---------------------------------- | ---------------------------------
|
2020-06-26 07:51:03 -04:00
|
|
|
| <div align="center">*A-MSDU attacks (Section 3)*</div>
|
|
|
|
| `ping I,E --fake-amsdu` | If this test succeeds, the A-MSDU flag is ignored (Section 3.5).
|
2020-06-19 23:49:39 -04:00
|
|
|
| <div align="center">*Mixed key attacks (Section 4)*</div>
|
|
|
|
| `ping I,E,R,AE` | In case the delay between fragments must be small.
|
|
|
|
| `ping I,E,R,AE --rekey-plaintext` | If the device performs the rekey handshake in plaintext.
|
|
|
|
| `ping I,E,R,AE --rekey-req --rekey-plain`| Same as above, and actively request a rekey as client.
|
|
|
|
| `ping I,E,R,AE --rekey-early-install`| Install the new key before sending message 4 as an AP.
|
|
|
|
| `ping I,R,BE,AE --freebsd` | Mixed key attack against FreeBSD.
|
|
|
|
| `ping I,R,BE,E` | In case the new key is installed relatively late.
|
|
|
|
| <div align="center">*Mixed plain/enc (Section 6.3)*</div>
|
|
|
|
| `ping I,E,P,E` | Ping with first frag. encrypted, second plaintext, third encrypted.
|
|
|
|
| `linux-plain 3` | Same as linux-plain but decoy fragment is sent using QoS priority 3.
|
|
|
|
| <div align="center">*EAPOL forwarding (Section 6.4)*</div>
|
|
|
|
| `eapol-inject L,00:11:22:33:44:55` | Try to make the AP send fragmented frames by EAPOL injection.
|
2020-06-26 07:51:03 -04:00
|
|
|
| <div align="center">*No fragmentation support (Section 6.6)*</div>
|
|
|
|
| `ping I,E,D` | Send ping inside an encrypted first fragment (no 2nd fragment).
|
|
|
|
| `ping I,D,E` | Send ping inside an encrypted second fragment (no 1st fragment).
|
2020-06-19 23:49:39 -04:00
|
|
|
| <div align="center">*Broadcast fragments (Section 6.7)*</div>
|
|
|
|
| `ping D,SP --bcast-ra` | Ping in a 2nd plaintext broadcasted fragment before 4-way handshake.
|
|
|
|
| `ping D,BP --bcast-ra` | Ping in a 2nd plaintext broadcasted fragment during 4-way handshake.
|
|
|
|
| `ping I,P --bcast-ra` | Ping in a plaintext broadcast Wi-Fi frame after 4-way handshake.
|
|
|
|
| `macos CC` | Experimental attack against macos.
|
|
|
|
| `macos BB` | Same as above, but inject during 4-way handshake.
|
|
|
|
| <div align="center">*EAPOL A-MSDUs (Section 6.8)*</div>
|
|
|
|
| `eapol-amsdu [M,]BB --bcast-dst` | Same as "eapol-amsdu [M,]BB" but ping is broadcasted.
|
|
|
|
| `eapol-amsdu [M,]I,CC --bcast-dst` | Same as "eapol-amsdu [M,]I,CC" but ping is broadcasted.
|
|
|
|
| `eapol-amsdu SS` | Same as "eapol-amsd BB" but inject frame before 4-way handshake.
|
|
|
|
| `eapol-amsdu AA` | Same as "eapol-amsd BB" but inject frame right after 4-way handshake.
|
|
|
|
|
|
|
|
## Advanced Usage
|
|
|
|
|
|
|
|
### Network card injection test
|
|
|
|
|
|
|
|
The script `test-injection.py` can be used to test whether frames are properly injected when
|
|
|
|
using _injection mode_:
|
|
|
|
|
|
|
|
./test-injection.py wlan0 wlan1
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
Here we test if network card `wlan0` properly injects frames and we use network card `wlan1`
|
|
|
|
to monitor whether frames are properly injected. In case you do not have a second network
|
|
|
|
card, you can execute a partial injection test using:
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
./test-injection.py wlan0
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
Unfortunately, the above test can only test if the kernel overwrites fields of injected frames,
|
|
|
|
it cannot test whether the firmware or wireless chip itself overwrites fields.
|
|
|
|
|
|
|
|
To test whether a network card properly injects frames in _mixed mode_, you can execute the
|
|
|
|
following two commands:
|
|
|
|
|
|
|
|
./fragattack wlan0 ping --inject-test wlan1
|
|
|
|
./fragattack wlan0 ping --inject-test wlan1 --ap
|
|
|
|
|
|
|
|
Here we test whether `wlan0` properly injects frames by monitor the injected frames using the
|
|
|
|
second network card `wlan1`. The first command tests if frames are properly injected when using
|
|
|
|
mixed mode as a client, and the second when using mixed mode as a client. In order to start the
|
|
|
|
test, the client must be able to connect to a network, and the AP waits until a client is
|
|
|
|
connecting. In case you do not have a second network card, you can execute a partial mixed mode
|
|
|
|
test using:
|
|
|
|
|
|
|
|
./fragattack wlan0 ping --inject-selftest
|
|
|
|
./fragattack wlan0 ping --inject-selftest --ap
|
|
|
|
|
|
|
|
Unfortunately, the above tests can only test if the kernel overwrites fields of injected frames,
|
|
|
|
it cannot test whether the firmware or wireless chip itself overwrites fields.
|
|
|
|
|
|
|
|
### Hwsim mode details
|
|
|
|
|
|
|
|
**Warning**: *this is currently an experimental mode, only use it for research purposes.*
|
|
|
|
|
|
|
|
This mode requires only one network card. The disadvantage is that this mode is the least reliable:
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
- Frames are handled slower, possibly causing the tested client/AP to timeout during authentication
|
|
|
|
or association.
|
|
|
|
|
|
|
|
- When injeting frames, they may be retransmitted even though an acknowledgement was recieved.
|
|
|
|
This will further slightly slowdown the handling of frames.
|
|
|
|
|
|
|
|
- Frames are not properly acknowledged depending on the wireless network card, which causes some
|
|
|
|
tested clients or APs to disconnect during authentication or association.
|
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
Nevertheless, the advantage is that is mode requires only one wirelss network card and can,
|
|
|
|
depending on the network card, be used without patches to the driver and/or firmware. Before
|
|
|
|
using this mode, create two virtual network cards:
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
./hwsim.sh
|
|
|
|
|
|
|
|
This will output the two created virtual "hwsim" interfaces, for example wlan1 and wlan2. Then
|
|
|
|
search for the channel of the AP you want to test, and put the real network card on this channel:
|
|
|
|
|
|
|
|
./scan.sh wlan0
|
|
|
|
iw wlan0 set type monitor
|
|
|
|
ifconfig wlan0 up
|
|
|
|
iw wlan0 set channel 11
|
|
|
|
|
|
|
|
You can now start the script as follows:
|
|
|
|
|
|
|
|
./fragattack wlan0 --hwsim wlan1,wlan2 [--ap] $COMMAND
|
|
|
|
|
|
|
|
After the script executed, you can directly run it again with a new command.
|
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
### Static IP Configuration
|
2020-05-23 20:39:15 -04:00
|
|
|
|
|
|
|
In case the device you are testing doesn't support DHCP, you can manually specify the IP addresses
|
|
|
|
that the script should use. For example:
|
|
|
|
|
|
|
|
./fragattack.py wlan0 ping --inject wlan1 --ip 192.168.100.10 --peerip 192.168.100.1
|
|
|
|
|
|
|
|
Here the testing script will use address 192.168.100.10, and it will inject a ping request
|
|
|
|
to the peer IP address 192.168.100.1.
|
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
### Alternative network cards
|
|
|
|
|
|
|
|
In case you cannot get access to one of the recommended wireless network cards, a second option
|
|
|
|
is to get a network card that uses the same drivers on Linux. In particular, you can try:
|
|
|
|
|
|
|
|
- Network cards that use [ath9k_htc](https://wikidevi.wi-cat.ru/Ath9k_htc)
|
|
|
|
|
|
|
|
- Network cards that use [iwlmvm](https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi)
|
|
|
|
|
|
|
|
We recommend cards based on `ath9khtc`. Not all cards that use `iwlmvm` will be compatible. When
|
|
|
|
using an alternative network card, we strongly recommend to first run the [injection tests](#Network-card-injection-test)
|
|
|
|
to confirm that the network card is compatible.
|
2020-05-23 20:39:15 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
## TODOs
|
2020-04-20 19:26:15 -04:00
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
- Confirm each device can detect all vulnerabilities in the recommended modes.
|
2020-04-16 00:56:34 -04:00
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
- Test the attacks against PEAP-MSchap for eduroam tests (basic test was working).
|
2020-04-16 00:56:34 -04:00
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
- TODO: Is it important to disable encryption? I don't think it is. Otherwise we need sysfsutils as a dependency too.
|
2020-04-16 00:56:34 -04:00
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
- Create an example pcap and debug output of all tests.
|
2020-04-15 13:43:28 -04:00
|
|
|
|
2020-05-23 20:39:15 -04:00
|
|
|
- Release a known vulnerable linux image to test against? Essential to confirm the tests are working!
|
2020-04-15 13:43:28 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
- sudo iw wlan0 set monitor otherbss. Does airmon-ng handle this better? Move to general section?
|
2020-04-15 13:43:28 -04:00
|
|
|
|
2020-06-19 23:49:39 -04:00
|
|
|
- Describe AP mode in hwsim mode?
|
2020-05-27 02:45:46 -04:00
|
|
|
|
2020-06-26 07:51:03 -04:00
|
|
|
- Support non-20MHz channels?
|
|
|
|
|