Brute forcing Wi-Fi Protected Setup
When poor design meets poor implementation.
Introduction
“Wi-Fi Protected Setup™ is an optional certification program from the Wi-Fi Alliance that is designed to ease the task of setting up and configuring security on wireless local area networks. Introduced by the Wi-Fi Alliance in early 2007, the program provides an industry-wide set of network setup solutions for homes and small office (SOHO) environments.
Wi-Fi Protected Setup enables typical users who possess little understanding of traditional Wi-Fi configuration and security settings to automatically configure new wireless networks, add new devices and enable security. More than 200 products have been Wi-Fi CERTIFIED™ for Wi-Fi Protected Setup since the program was launced (sic!) in January 2007.”1
The Wi-Fi Simple Configuration Specification (WSC) is the underlying technology for the Wi-Fi Protected Setup certification.
Almost all major vendors (including Cisco/Linksys, Netgear, D-Link, Belkin, Buffalo, ZyXEL and Technicolor) have WPS-certified devices, other vendors (eg. TP-Link) ship devices with WPS-support which are not WPS-certified.
WPS is activated by default on all devices I had access to.
Although WPS is marketed as being a secure way of configuring a wireless device, there are design and implementation flaws which enable an attacker to gain access to an otherwise sufficiently secured wireless network.
Configuration Options Overview
WPS supports out-of-band configuration over Ethernet/UPnP (also NFC is mentioned in the specification) or in-band configuration over IEEE 802.11/EAP. Only in-band configuration will be covered in this paper.
Terminology2
-
-
Push-Button-Connect (“PBC”)
The user has to push a button, either an actual or virtual one, on both the Access Point and the new wireless client device. PBC on the AP will only be active until authentication has succeeded or timeout after two minutes.
This Option is called wps_pbc in wpa_cli3 (text-based frontend program for interacting with wpa_supplicant).

Firgure 1: activated “virtual Push Button” (Windows acts as enrollee) (Windows 7)
Figure 2: Description of PBC option (Linksys WRT320N User Manual)
PIN
Internal Registrar
The user has to enter the PIN of the Wi-Fi adapter into the web interface of the access point. The PIN can either be printed on the label of the adapter or generated by software.
This option is called wps_pin in wpa_cli.

Figure 4: PIN field – Router is Registrar (LinksysWRT320N Web Interface)
Figure 3: Description of PIN internal Registrar option (Linksys WRT320N User Manual)
http://hostap.epitest.fi/wpa_supplicant/
External Registrar
The user has to enter the PIN of the access point into a form on the client device (eg. computer).
This option is called wps_reg in wpa_cli.

Figure 7: Label with WPS PIN on the back of a D-Link router
Design Flaw #1
Option / Authentication
|
Physical Access
|
Web Interface
|
PIN
|
|
|
|
|
Push-button-connect
|
X
|
|
|
PIN – Internal Registrar
|
|
X
|
|
PIN – External Registrar
|
|
|
X
|
WPS Options and which kind of authentication they actually use.
As the External Registrar option does not require any kind of authentication apart from providing the PIN, it is potentially vulnerable to brute force attacks.
Authentication (PIN – External Registrar)4


IEEE 802.11
|
|
Supplicant → AP
|
|
|
Authentication Request
|
|
|
|
|
|
|
|
|
|
802.11 Authentication
|
|
|
Supplicant ← AP
|
|
|
Authentication Response
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Supplicant → AP
|
|
|
Association Request
|
|
|
|
|
|
|
|
|
|
802.11 Association
|
|
|
Supplicant ← AP
|
|
|
Association Response
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IEEE 802.11/EAP
|
|
|
|
|
Supplicant → AP
|
|
|
|
EAPOL-Start
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Supplicant ← AP
|
|
|
|
EAP-Request Identity
|
|
|
|
EAP Initiation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Supplicant → AP
|
|
|
|
EAP-Response Identity
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(Identity: “WFA-SimpleConfig-Registrar-1-0”)
|
|
|
|
|
|
IEEE 802.11/EAP Expanded Type, Vendor ID: WFA (0x372A), Vendor Type: SimpleConfig (0x01)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M1
|
|
|
Enrollee → Registrar
|
|
|
N1
|
|| Description || PKE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Diffie-Hellman Key Exchange
|
|
|
M2
|
|
|
Enrollee ← Registrar
|
|
|
N1
|
|| N2 || Description || PKR || Authenticator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M3
|
|
|
Enrollee → Registrar
|
|
|
N2
|
|| E-Hash1 || E-Hash2 || Authenticator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M4
|
|
|
Enrollee ← Registrar
|
|
|
N1
|
|| R-Hash1 || R-Hash2 || EKeyWrapKey(R-S1) ||
|
|
|
proove posession of 1st half of PIN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Authenticator
|
|
|
|
|
|
|
M5
|
|
|
Enrollee → Registrar
|
|
|
N2
|
|| EKeyWrapKey(E-S1) || Authenticator
|
|
|
proove posession of 1st half of PIN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M6
|
|
|
Enrollee ← Registrar
|
|
|
N1
|
|| EKeyWrapKey(R-S2) || Authenticator
|
|
|
proove posession of 2nd half of PIN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M7
|
|
|
Enrollee → Registrar
|
|
|
N2
|
|| EKeyWrapKey(E-S2 ||ConfigData) || Authenticator
|
|
|
proove posession of 2nd half of PIN,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
send AP configuration
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M8
|
|
|
Enrollee ← Registrar
|
|
|
N1
|
|| EKeyWrapKey(ConfigData) || Authenticator
|
|
|
set AP configuration
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Enrollee = AP
|
|
|
|
|
|
|
|
|
PSK1 = first 128 bits of HMACAuthKey(1st half of PIN)
|
|
Registrar = Supplicant = Client/Attacker
|
PSK2 = first 128 bits of HMACAuthKey(2nd half of PIN)
|
|
|
PKE = Diffie-Hellman Public Key Enrollee
|
E-S1 = 128 random bits
|
|
|
|
|
|
PKR = Diffie-Hellman Public Key Registrar
|
E-S2 = 128 random bits
|
|
|
|
|
|
Authkey and KeyWrapKey are derived from the Diffie-
|
E-Hash1 = HMACAuthKey(E-S1 || PSK1 || PKE || PKR)
|
|
|
Hellman shared key.
|
|
|
|
|
|
|
E-Hash2 = HMACAuthKey(E-S2 || PSK2 || PKE || PKR)
|
|
|
Authenticator = HMACAuthkey(last message || current
|
R-S1 = 128 random bits
|
|
|
|
|
|
message)
|
|
|
|
|
|
|
|
|
|
R-S2 = 128 random bits
|
|
|
|
|
|
EKeyWrapKey = Stuff encrypted with KeyWrapKey (AES-
|
R-Hash1 = HMACAuthKey(R-S1 || PSK1 || PKE || PKR)
|
|
|
R-Hash2 = HMACAuthKey(R-S2 || PSK2 || PKE || PKR)
|
|
|
CBC)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1
|
2
|
|
3
|
|
4
|
5
|
6
|
7
|
0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1st half of
|
|
|
|
|
checksum
|
|
|
|
|
|
|
|
|
|
|
PIN
|
|
|
2nd half of PIN
|
|
|
|
|
|
|
|
If the WPS-authentication fails at some point, the AP will send an EAP-NACK message.

Design flaw #2
An attacker can derive information about the correctness of parts the PIN from the AP´s responses.
This form of authentication dramatically decreases the maximum possible authentication attempts needed from 108 (=100.000.000) to 104 + 104 (=20.000).
As the 8th digit of the PIN is always a checksum of digit one to digit seven, there are at most 104 + 103 (=11.000) attempts needed to find the correct PIN.
Brute Force Methodology

Figure 8: Flowchart showing how an optimized brute force attack works
Brute Force Implementation
A proof-of-concept brute force tool was implemented in Python. It uses the Scapy5 Library for decoding, generating, sending and receiving packets. This tool was used on several routers made by different vendors.
Sample output
sniffer started
trying 00000000
attempt took 0.95 seconds trying 00010009
attempt took 1.28 seconds trying 00020008
attempt took 1.03 seconds
<snip>
|
|
|
|
|
|
|
|
trying
|
18660005
|
|
|
|
|
attempt took
|
1.08
|
seconds
|
|
|
trying
|
18670004
|
|
# found 1st half of PIN
|
|
attempt took
|
1.09
|
seconds
|
|
|
trying
|
18670011
|
|
|
|
|
attempt took
|
1.08
|
seconds
|
|
|
trying
|
18670028
|
|
|
|
|
attempt took
|
1.17
|
seconds
|
|
|
trying
|
18670035
|
|
|
|
|
attempt took
|
1.12
|
seconds
|
|
|
<snip>
|
|
|
|
|
|
|
|
trying
|
18674071
|
|
|
|
|
attempt took
|
1.15
|
seconds
|
|
|
trying
|
18674088
|
|
|
|
|
attempt took
|
1.11
|
seconds
|
|
|
trying
|
18674095
|
|
# found 2nd half of PIN
|
|
E-S2:
|
|
|
|
|
|
|
|
0000
|
16
|
F6
|
82
|
CA A8 24 7E 98
|
85 4C BD A6 BE D9 14 50
|
.....$~..L.....P
|
SSID:
|
|
|
|
|
|
|
|
0000
|
74
|
70
|
2D
|
74 65 73 74
|
|
tp-test
|
MAC:
|
|
|
|
|
|
|
|
0000
|
F4
|
EC
|
38
|
CF AC 2C
|
|
..8..,
|
Auth Type:
|
|
|
|
|
|
|
0000
|
00
|
20
|
|
|
|
|
.
|
Encryption Type:
|
|
|
|
|
0000
|
00
|
08
|
|
|
|
|
..
|
Network Key:
|
|
|
|
|
|
0000
|
72
|
65
|
61
|
6C 6C 79 5F 72
|
65 61 6C 6C 79 5F 6C 6F
|
really_really_lo
|
0010
|
6E
|
67
|
5F
|
77 70 61 5F 70
|
61 73 73 70 68 72 61 73
|
ng_wpa_passphras
|
0020
|
65
|
5F
|
67
|
6F 6F 64 5F 6C
|
75 63 6B 5F 63 72 61 63
|
e_good_luck_crac
|
0030
|
6B
|
69
|
6E
|
67 5F 74 68 69
|
73 5F 6F 6E 65
|
king_this_one
|
Key Wrap Algorithm:
|
|
|
0000
|
76
|
3C
|
7A
|
87 0A 7D F7 E5
|
|
v<z..}..
|
Results
Authentication attempt duration
One authentication attempt usually took between 0.5 and 3 seconds to complete. It was observed that the calculation of the Diffie-Hellman Shared Key (needs to be done before generating M3) on the AP took a big part of the authentication time. This can be speeded up by choosing a very small DH Secret Number, thus generating a very small DH Public Key and making Shared Key calculation on the AP’s side easier.
Implementation Flaws
Some vendors did not implement any kind of blocking mechanism to prevent brute force attacks. This allows an attacker to try all possible PIN combinations in less than four hours (at 1.3 seconds/attempt).
On average an attack will succeed in half the time.
The Netgear device has lock down functionality implemented, but the lock down phases are not long enough to make an attack impractical. In this case an attack will on average succeed in less than a day (timing data can be found on the next page).
Vendor
|
Device Name
|
HW-Version
|
FW-Version
|
Lock down
|
WPS-
|
certified
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D-Link
|
DIR-655
|
A4
|
(Web Interface)
|
1.35
|
No
|
Yes
|
|
|
A5
|
(Label)
|
|
|
|
Linksys
|
WRT320
|
1.0
|
1.0.04
|
?6
|
Yes
|
|
|
|
|
|
|
|
Netgear
|
WGR614v10
|
?
|
|
1.0.2.26
|
Yes
|
Yes
|
|
|
|
|
|
|
TP-Link
|
TL-WR1043ND
|
1.8
|
V1_110429
|
No
|
No
|
|
|
|
|
|
|
|
Firmware versions are up-to-date as of 18.10.2011.
In rare cases devices started to send malformed messages or their web interface and routing did not work properly anymore. A reboot was needed to solve the problem. This might be evidence of some kind of corruption, but was not investigated further.
6 WPS-functionality always stopped to work somewhere between 2 and 150 failed authentication attempts. The functionality did not even return after several hours. I would consider this a bug in the firmware which causes a DoS rather than lock-down functionality.
Mitigations
End users
Deactivate WPS. This may not always be possible.
Vendors
Introduce sufficiently long lock-down periods in order to make an attack impractical. Of course this requires a new firmware release.
Attempts
|
Lock
|
Attempts
|
Maximum
|
Maximum
|
Comment
|
before
|
down
|
per
|
attack time
|
attack time
|
|
lock
|
time
|
minute
|
|
|
|
|
|
|
|
|
|
11000
|
0 minutes
|
46.15
|
3.97 hours
|
0.17 days
|
no lock down
|
|
|
|
|
|
|
?7
|
|
4.20
|
43,65 hours
|
1,82 days
|
Netgear WGR614v10
|
|
|
|
|
|
|
3
|
1 minutes
|
2.82
|
65.08 hours
|
2.71 days
|
Requirement for WSC 2.0
|
|
|
|
|
|
|
15
|
60 minutes
|
0.25
|
737.31 hours
|
30.72 days
|
|
|
|
|
|
|
Lock down configurations making
|
10
|
60 minutes
|
0.17
|
1103.97
|
46.00 days
|
brute force less practical
|
|
|
|
|
|
5
|
60 minutes
|
0.08
|
2203.97
|
91.83 days
|
|
|
|
|
|
|
|
Assumed time per attempt: 1.3 seconds
Considering that an AP typically runs for several months, a determined attacker might still be able to successfully attack a WPS-enabled AP. This attack is low-cost and has a high success guarantee compared to cracking WPA/WPA2-PSK.
Conclusion
As nearly all major router/AP vendors have WPS-certified devices and WPS – PIN (External Registrar) is mandatory for certification, it is expected that a lot of devices are vulnerable to this kind of attack.
Having a sufficiently long lock-down period is most likely not a requirement for certification. However it might be a requirement in the (new) WSC Specification Version 28. I contacted the Wi-Fi Alliance about this – they have yet to respond.
Collaboration with vendors will be necessary for identifying all vulnerable devices. It is up to the vendors to implement mitigations and release new firmware.
Affected end-users will have to be informed about this vulnerability and advised to disable WPS or update their firmware to a more secure version (if available).
No consistent lock down pattern was found. However on average about 4.20 authentication attempts per minute were possible.
-