diff --git a/research/README.md b/research/README.md index 87420b283..ff725b115 100644 --- a/research/README.md +++ b/research/README.md @@ -20,6 +20,15 @@ the paper also briefly discusses the applicability of the attacks against WEP. ## 2.2. Change log +**Version 1.2 (? November 2020)**: + +- Clarified that all commands can test both clients and APs unless noted otherwise. + +- Clarified the description of cache attacks, Broadcast fragment, and A-MSDU EAPOL attack tests in this README. + +- Debug output now shows the correct (group) key when encrypting broadcast/multicast frames. This does not + influence any test results, it only changes the output of the test tool. + **Version 1.1 (20 October 2020)**: - Fixed a bug where the command `ping I,E,D` would send a normal encrypted ping request. It now sends an @@ -234,6 +243,7 @@ for more information. You can test devices by running the test tool as discussed in [interface modes](#id-interface-modes) and replacing `$COMMAND` with one of the commands in the table blow. We assume that clients will request an IP using DHCP (if this is not the case see [static IP configuration](#id-static-ip-config)). +All commands work against both clients and APs unless noted otherwise. The tool outputs `TEST COMPLETED SUCCESSFULLY` if the device is vulnerable to the attack corresponding to the given `$COMMAND`, and outputs `Test timed out! Retry to be sure, or manually check result` if @@ -315,7 +325,7 @@ include) these reference CVEs as a way to easily refer to each type of discovere sending other frames between two fragments). The only purpose of this test is to better understand the behaviour of a device and to learn why other tests might be failing. -- `ping-frag-sep --pn-per-qos`: Same as above, but adding the `--pn-per-qos` parametermeans both fragments +- `ping-frag-sep --pn-per-qos`: Same as above, but adding the `--pn-per-qos` parameter assures both fragments have a consecutive Packet Number (PN). This is something that a reciever should be verifying in order to be secure. Unfortunately, many implementations don't verify whether PNs are consecutive. @@ -379,11 +389,11 @@ The last two tests are used to simulate our A-MSDU injection attack: sending frames to the tested device, etc. - `ping I,E,R,AE [--full-reconnect]`: Here the second fragment is sent immediately after reconnecting with the - AP, which is important in case the device under test clears fragments from memory after a short time. + device under test, which is important in case the device clears fragments from memory after a short time. -- `ping I,E,R,E [--full-reconnect]`: Here the second fragment is sent 1 second after reconnecting with the AP, - which can be useful in case there is a small delay between completion of the handshake and installing the - negotiated key. +- `ping I,E,R,E [--full-reconnect]`: Here the second fragment is sent 1 second after reconnecting with the + device under test, which can be useful in case there is a small delay between completion of the handshake + and installing the negotiated key. - Overall it can be tedious to test if a device is vulnerable to cache attacks. Therefore I also recommend to perform a code audit to check if fragments stay in the memory after disassociating or deauthenticating from @@ -421,30 +431,34 @@ recommended to **execute them several times**. This is because background noise from receiving the injected broadcast frame: - `ping I,D,P --bcast-ra`: Send a unicast ping in a plaintext broadcasted 2nd fragment once connected. The result - of this variant of the attack is checked automatically by the test tool. + of this variant of the attack is checked automatically by the test tool. In my experiments mainly clients were + affected. - `ping D,BP --bcast-ra`: Here the above frame is sent while connecting to the network (i.e. during the 4-way handshake). This is important because several clients and APs are only vulnerable before completing the 4-way handshake. To confirm the result of this test you have to run wireshark or tcpdump on the victim, and monitor whether the injected ping request is received by the victim. In tcpdump you can use the filter `icmp` and in wireshark you - can also use the filter `frame contains "test_ping_icmp"` to more easily detect this ping request. + can also use the filter `frame contains "test_ping_icmp"` to more easily detect this ping request. In my experiments + mainly clients were affected. ## 7.8. A-MSDU EAPOL attack tests (§6.5 -- CVE-2020-26144) - `eapol-amsdu I,P`: This is the standard test for the implementation-specific vulnerability discussed in - Section 6.5 of the paper. Its result is checked automatically by the test tool. + Section 6.5 of the paper. Both clients and APs can be vulnerable. Its result is checked automatically by + the test tool. - Tests ending on `BP` (`eapol-amsdu BP` and `eapol-amsdu-bad BP`): These tests inject the malicious frame - while the client is still connecting to the network (i.e. during the execution of the 4-way handshake). - To confirm the result of this test you have to run wireshark or tcpdump on the victim, and monitor whether - the injected ping request is received by the victim. In tcpdump you can use the filter `icmp` and in wireshark - you can also use the filter `frame contains "test_ping_icmp"` to more easily detect this ping request. + during the execution of the 4-way handshake. To confirm the result of this test you have to run wireshark + or tcpdump on the victim, and monitor whether the injected ping request is received by the victim. In tcpdump + you can use the filter `icmp` and in wireshark you can also use the filter `frame contains "test_ping_icmp"` + to more easily detect this ping request. - Tests starting with `eapol-amsdu-bad` (`eapol-amsdu-bad BP` and `eapol-amsdu-bad I,P`): Several implementations - incorrectly process A-MSDU frames whose first 6 bytes also equal a valid EAPOL header. To test these implementations, - you have to use the `eapol-amsdu-bad` test variant. Note that if this tests succeeds, the impact of the attack is - identical to implementations that correctly parse such frames (for details see Section 3.6 and 6.8 in the paper). + incorrectly process A-MSDU frames whose first 6 bytes also equal a valid RFC1042 header for EAPOL. To test these + implementations, you have to use the `eapol-amsdu-bad` test variant. Note that if this tests succeeds, the impact + of the attack is identical to implementations that correctly parse such frames (for details see Section 3.6 and + 6.8 in the paper). ## 7.9. Troubleshooting checklist @@ -497,7 +511,8 @@ I also recommend the following more advanced tests. These have a lower chance of but might reveal attack variants or particular device behaviour that the normal tests can't detect. If the normal tests in [Testing for Vulnerabilities](#id-testing-for-flaws) have already confirmed the -presence of a certain vulnerability class, there is no need to test the other attack variants of that vulnerability. +presence of a certain vulnerability class, there is little need to test the other attack variants of that vulnerability. +All commands work against both clients and APs unless noted otherwise. | Command | Short description | -------------------------------------- | --------------------------------- @@ -523,7 +538,7 @@ presence of a certain vulnerability class, there is no need to test the other at | `ping I,P --bcast-ra` | Ping in a plaintext broadcast frame after 4-way HS. | `ping BP --bcast-ra` | Ping in plaintext broadcast frame during 4-way HS (use tcpdump). | `eapfrag BP,BP` | Experimental broadcast fragment attack (use tcpdump). -|