393 lines
14 KiB
Plaintext
393 lines
14 KiB
Plaintext
|
Automatic regression and interoperability testing of wpa_supplicant's
|
||
|
IEEE 802.1X/EAPOL authentication
|
||
|
|
||
|
Test program:
|
||
|
- Linked some parts of IEEE 802.1X Authenticator implementation from
|
||
|
hostapd (RADIUS client and RADIUS processing, EAP<->RADIUS
|
||
|
encapsulation/decapsulation) into wpa_supplicant.
|
||
|
- Replaced wpa_supplicant.c and wpa.c with test code that trigger
|
||
|
IEEE 802.1X authentication automatically without need for wireless
|
||
|
client card or AP.
|
||
|
- For EAP methods that generate keying material, the key derived by the
|
||
|
Supplicant is verified to match with the one received by the (now
|
||
|
integrated) Authenticator.
|
||
|
|
||
|
The full automated test suite can now be run in couple of seconds, but
|
||
|
I'm more than willing to add new RADIUS authentication servers to make
|
||
|
this take a bit more time.. ;-) As an extra bonus, this can also be
|
||
|
seen as automatic regression/interoperability testing for the RADIUS
|
||
|
server, too.
|
||
|
|
||
|
In order for me to be able to use a new authentication server, the
|
||
|
server need to be available from Internet (at least from one static IP
|
||
|
address) and I will need to get suitable user name/password pairs,
|
||
|
certificates, and private keys for testing use. Other alternative
|
||
|
would be to get an evaluation version of the server so that I can
|
||
|
install it on my own test setup. If you are interested in providing
|
||
|
either server access or evaluation version, please contact me
|
||
|
(j@w1.fi).
|
||
|
|
||
|
|
||
|
Test matrix
|
||
|
|
||
|
+) tested successfully
|
||
|
F) failed
|
||
|
-) server did not support
|
||
|
?) not tested
|
||
|
|
||
|
Cisco ACS ----------------------------------------------------------.
|
||
|
hostapd --------------------------------------------------------. |
|
||
|
Cisco Aironet 1200 AP (local RADIUS server) ----------------. | |
|
||
|
Periodik Labs Elektron ---------------------------------. | | |
|
||
|
Lucent NavisRadius ---------------------------------. | | | |
|
||
|
Interlink RAD-Series ---------------------------. | | | | |
|
||
|
Radiator -----------------------------------. | | | | | |
|
||
|
Meetinghouse Aegis ---------------------. | | | | | | |
|
||
|
Funk Steel-Belted ------------------. | | | | | | | |
|
||
|
Funk Odyssey -------------------. | | | | | | | | |
|
||
|
Microsoft IAS --------------. | | | | | | | | | |
|
||
|
FreeRADIUS -------------. | | | | | | | | | | |
|
||
|
| | | | | | | | | | | |
|
||
|
|
||
|
EAP-MD5 + - - + + + + + - - + +
|
||
|
EAP-GTC + - - ? + + + + - - + -
|
||
|
EAP-OTP - - - - - + - - - - - -
|
||
|
EAP-MSCHAPv2 + - - + + + + + - - + -
|
||
|
EAP-TLS + + + + + + + + - - + +
|
||
|
EAP-PEAPv0/MSCHAPv2 + + + + + + + + + - + +
|
||
|
EAP-PEAPv0/GTC + - + - + + + + - - + +
|
||
|
EAP-PEAPv0/OTP - - - - - + - - - - - -
|
||
|
EAP-PEAPv0/MD5 + - - + + + + + - - + -
|
||
|
EAP-PEAPv0/TLS + + - + + + F + - - + +
|
||
|
EAP-PEAPv0/SIM - - - - - - - - - - + -
|
||
|
EAP-PEAPv0/AKA - - - - - - - - - - + -
|
||
|
EAP-PEAPv0/PSK - - - - - - - - - - + -
|
||
|
EAP-PEAPv0/PAX - - - - - - - - - - + -
|
||
|
EAP-PEAPv0/SAKE - - - - - - - - - - + -
|
||
|
EAP-PEAPv0/GPSK - - - - - - - - - - + -
|
||
|
EAP-PEAPv1/MSCHAPv2 - - + + + +1 + +5 +8 - + +
|
||
|
EAP-PEAPv1/GTC - - + + + +1 + +5 +8 - + +
|
||
|
EAP-PEAPv1/OTP - - - - - +1 - - - - - -
|
||
|
EAP-PEAPv1/MD5 - - - + + +1 + +5 - - + -
|
||
|
EAP-PEAPv1/TLS - - - + + +1 F +5 - - + +
|
||
|
EAP-PEAPv1/SIM - - - - - - - - - - + -
|
||
|
EAP-PEAPv1/AKA - - - - - - - - - - + -
|
||
|
EAP-PEAPv1/PSK - - - - - - - - - - + -
|
||
|
EAP-PEAPv1/PAX - - - - - - - - - - + -
|
||
|
EAP-PEAPv1/SAKE - - - - - - - - - - + -
|
||
|
EAP-PEAPv1/GPSK - - - - - - - - - - + -
|
||
|
EAP-TTLS/CHAP + - +2 + + + + + + - + -
|
||
|
EAP-TTLS/MSCHAP + - + + + + + + + - + -
|
||
|
EAP-TTLS/MSCHAPv2 + - + + + + + + + - + -
|
||
|
EAP-TTLS/PAP + - + + + + + + + - + -
|
||
|
EAP-TTLS/EAP-MD5 + - +2 + + + + + + - + -
|
||
|
EAP-TTLS/EAP-GTC + - +2 ? + + + + - - + -
|
||
|
EAP-TTLS/EAP-OTP - - - - - + - - - - - -
|
||
|
EAP-TTLS/EAP-MSCHAPv2 + - +2 + + + + + + - + -
|
||
|
EAP-TTLS/EAP-TLS + - +2 + F + + + - - + -
|
||
|
EAP-TTLS/EAP-SIM - - - - - - - - - - + -
|
||
|
EAP-TTLS/EAP-AKA - - - - - - - - - - + -
|
||
|
EAP-TTLS/EAP-PSK - - - - - - - - - - + -
|
||
|
EAP-TTLS/EAP-PAX - - - - - - - - - - + -
|
||
|
EAP-TTLS/EAP-SAKE - - - - - - - - - - + -
|
||
|
EAP-TTLS/EAP-GPSK - - - - - - - - - - + -
|
||
|
EAP-TTLS + TNC - - - - - + - - - - + -
|
||
|
EAP-SIM + - - ? - + - ? - - + -
|
||
|
EAP-AKA - - - - - + - - - - + -
|
||
|
EAP-AKA' - - - - - - - - - - + -
|
||
|
EAP-PSK +7 - - - - + - - - - + -
|
||
|
EAP-PAX - - - - - + - - - - + -
|
||
|
EAP-SAKE - - - - - - - - - - + -
|
||
|
EAP-GPSK - - - - - - - - - - + -
|
||
|
EAP-FAST/MSCHAPv2(prov) - - - + - + - - - + + +
|
||
|
EAP-FAST/GTC(auth) - - - + - + - - - + + +
|
||
|
EAP-FAST/MSCHAPv2(aprov)- - - - - + - - - - + +
|
||
|
EAP-FAST/GTC(aprov) - - - - - + - - - - + +
|
||
|
EAP-FAST/MD5(aprov) - - - - - + - - - - + -
|
||
|
EAP-FAST/TLS(aprov) - - - - - - - - - - + +
|
||
|
EAP-FAST/SIM(aprov) - - - - - - - - - - + -
|
||
|
EAP-FAST/AKA(aprov) - - - - - - - - - - + -
|
||
|
EAP-FAST/MSCHAPv2(auth) - - - - - + - - - - + +
|
||
|
EAP-FAST/MD5(auth) - - - - - + - - - - + -
|
||
|
EAP-FAST/TLS(auth) - - - - - - - - - - + +
|
||
|
EAP-FAST/SIM(auth) - - - - - - - - - - + -
|
||
|
EAP-FAST/AKA(auth) - - - - - - - - - - + -
|
||
|
EAP-FAST + TNC - - - - - - - - - - + -
|
||
|
LEAP + - + + + + F +6 - + - +
|
||
|
EAP-TNC +9 - - - - + - - - - + -
|
||
|
EAP-IKEv2 +10 - - - - - - - - - + -
|
||
|
|
||
|
1) PEAPv1 required new label, "client PEAP encryption" instead of "client EAP
|
||
|
encryption", during key derivation (requires phase1="peaplabel=1" in the
|
||
|
network configuration in wpa_supplicant.conf)
|
||
|
2) used FreeRADIUS as inner auth server
|
||
|
5) PEAPv1 required termination of negotiation on tunneled EAP-Success and new
|
||
|
label in key deriviation
|
||
|
(phase1="peap_outer_success=0 peaplabel=1") (in "IETF Draft 5" mode)
|
||
|
6) Authenticator simulator required patching for handling Access-Accept within
|
||
|
negotiation (for the first EAP-Success of LEAP)
|
||
|
7) tested only with an older (incompatible) draft of EAP-PSK; FreeRADIUS does
|
||
|
not support the current EAP-PSK (RFC) specification
|
||
|
8) PEAPv1 used non-standard version negotiation (client had to force v1 even
|
||
|
though server reported v0 as the highest supported version)
|
||
|
9) only EAP-TTLS/EAP-TNC tested, i.e., test did not include proper sequence of
|
||
|
client authentication followed by TNC inside the tunnel
|
||
|
10) worked only with special compatibility code to match the IKEv2 server
|
||
|
implementation
|
||
|
|
||
|
|
||
|
Automated tests:
|
||
|
|
||
|
FreeRADIUS (2.0-beta/CVS snapshot)
|
||
|
- EAP-MD5-Challenge
|
||
|
- EAP-GTC
|
||
|
- EAP-MSCHAPv2
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / GTC
|
||
|
- EAP-PEAPv0 / MD5-Challenge
|
||
|
- EAP-PEAPv0 / TLS
|
||
|
- EAP-TTLS / EAP-MD5-Challenge
|
||
|
- EAP-TTLS / EAP-GTC
|
||
|
- EAP-TTLS / EAP-MSCHAPv2
|
||
|
- EAP-TTLS / EAP-TLS
|
||
|
- EAP-TTLS / CHAP
|
||
|
- EAP-TTLS / PAP
|
||
|
- EAP-TTLS / MSCHAP
|
||
|
- EAP-TTLS / MSCHAPv2
|
||
|
- EAP-TTLS / EAP-TNC (partial support; no authentication sequence)
|
||
|
- EAP-SIM
|
||
|
- LEAP
|
||
|
|
||
|
Microsoft Windows Server 2003 / IAS
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / TLS
|
||
|
- EAP-MD5
|
||
|
* IAS does not seem to support other EAP methods
|
||
|
|
||
|
Funk Odyssey 2.01.00.653
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / GTC
|
||
|
- EAP-PEAPv1 / MSCHAPv2
|
||
|
- EAP-PEAPv1 / GTC
|
||
|
Note: PEAPv1 requires TLS key derivation to use label "client EAP encryption"
|
||
|
- EAP-TTLS / CHAP (using FreeRADIUS as inner auth srv)
|
||
|
- EAP-TTLS / MSCHAP
|
||
|
- EAP-TTLS / MSCHAPv2
|
||
|
- EAP-TTLS / PAP
|
||
|
- EAP-TTLS / EAP-MD5-Challenge (using FreeRADIUS as inner auth srv)
|
||
|
- EAP-TTLS / EAP-GTC (using FreeRADIUS as inner auth srv)
|
||
|
- EAP-TTLS / EAP-MSCHAPv2 (using FreeRADIUS as inner auth srv)
|
||
|
- EAP-TTLS / EAP-TLS (using FreeRADIUS as inner auth srv)
|
||
|
* not supported in Odyssey:
|
||
|
- EAP-MD5-Challenge
|
||
|
- EAP-GTC
|
||
|
- EAP-MSCHAPv2
|
||
|
- EAP-PEAP / MD5-Challenge
|
||
|
- EAP-PEAP / TLS
|
||
|
|
||
|
Funk Steel-Belted Radius Enterprise Edition v4.71.739
|
||
|
- EAP-MD5-Challenge
|
||
|
- EAP-MSCHAPv2
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / MD5
|
||
|
- EAP-PEAPv0 / TLS
|
||
|
- EAP-PEAPv1 / MSCHAPv2
|
||
|
- EAP-PEAPv1 / MD5
|
||
|
- EAP-PEAPv1 / GTC
|
||
|
- EAP-PEAPv1 / TLS
|
||
|
Note: PEAPv1 requires TLS key derivation to use label "client EAP encryption"
|
||
|
- EAP-TTLS / CHAP
|
||
|
- EAP-TTLS / MSCHAP
|
||
|
- EAP-TTLS / MSCHAPv2
|
||
|
- EAP-TTLS / PAP
|
||
|
- EAP-TTLS / EAP-MD5-Challenge
|
||
|
- EAP-TTLS / EAP-MSCHAPv2
|
||
|
- EAP-TTLS / EAP-TLS
|
||
|
|
||
|
Meetinghouse Aegis 1.1.4
|
||
|
- EAP-MD5-Challenge
|
||
|
- EAP-GTC
|
||
|
- EAP-MSCHAPv2
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / TLS
|
||
|
- EAP-PEAPv0 / GTC
|
||
|
- EAP-PEAPv0 / MD5-Challenge
|
||
|
- EAP-PEAPv1 / MSCHAPv2
|
||
|
- EAP-PEAPv1 / TLS
|
||
|
- EAP-PEAPv1 / GTC
|
||
|
- EAP-PEAPv1 / MD5-Challenge
|
||
|
Note: PEAPv1 requires TLS key derivation to use label "client EAP encryption"
|
||
|
- EAP-TTLS / CHAP
|
||
|
- EAP-TTLS / MSCHAP
|
||
|
- EAP-TTLS / MSCHAPv2
|
||
|
- EAP-TTLS / PAP
|
||
|
- EAP-TTLS / EAP-MD5-Challenge
|
||
|
- EAP-TTLS / EAP-GTC
|
||
|
- EAP-TTLS / EAP-MSCHAPv2
|
||
|
* did not work
|
||
|
- EAP-TTLS / EAP-TLS
|
||
|
(Server rejects authentication without any reason in debug log. It
|
||
|
looks like the inner TLS negotiation starts properly and the last
|
||
|
packet from Supplicant looks like the one sent in the Phase 1. The
|
||
|
server generates a valid looking reply in the same way as in Phase
|
||
|
1, but then ends up sending Access-Reject. Maybe an issue with TTLS
|
||
|
fragmentation in the Aegis server(?) The packet seems to include
|
||
|
1328 bytes of EAP-Message and this may go beyond the fragmentation
|
||
|
limit with AVP encapsulation and TLS tunneling. Note: EAP-PEAP/TLS
|
||
|
did work, so this issue seems to be with something TTLS specific.)
|
||
|
|
||
|
Radiator 3.17.1 (eval, with all patches up to and including 2007-05-25)
|
||
|
- EAP-MD5-Challenge
|
||
|
- EAP-GTC
|
||
|
- EAP-OTP
|
||
|
- EAP-MSCHAPv2
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / GTC
|
||
|
- EAP-PEAPv0 / OTP
|
||
|
- EAP-PEAPv0 / MD5-Challenge
|
||
|
- EAP-PEAPv0 / TLS
|
||
|
Note: Needed to use unknown identity in outer auth and some times the server
|
||
|
seems to get confused and fails to send proper Phase 2 data.
|
||
|
- EAP-PEAPv1 / MSCHAPv2
|
||
|
- EAP-PEAPv1 / GTC
|
||
|
- EAP-PEAPv1 / OTP
|
||
|
- EAP-PEAPv1 / MD5-Challenge
|
||
|
- EAP-PEAPv1 / TLS
|
||
|
Note: This has some additional requirements for EAPTLS_MaxFragmentSize.
|
||
|
Using 1300 for outer auth and 500 for inner auth seemed to work.
|
||
|
Note: Needed to use unknown identity in outer auth and some times the server
|
||
|
seems to get confused and fails to send proper Phase 2 data.
|
||
|
- EAP-TTLS / CHAP
|
||
|
- EAP-TTLS / MSCHAP
|
||
|
- EAP-TTLS / MSCHAPv2
|
||
|
- EAP-TTLS / PAP
|
||
|
- EAP-TTLS / EAP-MD5-Challenge
|
||
|
- EAP-TTLS / EAP-GTC
|
||
|
- EAP-TTLS / EAP-OTP
|
||
|
- EAP-TTLS / EAP-MSCHAPv2
|
||
|
- EAP-TTLS / EAP-TLS
|
||
|
Note: This has some additional requirements for EAPTLS_MaxFragmentSize.
|
||
|
Using 1300 for outer auth and 500 for inner auth seemed to work.
|
||
|
- EAP-SIM
|
||
|
- EAP-AKA
|
||
|
- EAP-PSK
|
||
|
- EAP-PAX
|
||
|
- EAP-TNC
|
||
|
|
||
|
Interlink Networks RAD-Series 6.1.2.7
|
||
|
- EAP-MD5-Challenge
|
||
|
- EAP-GTC
|
||
|
- EAP-MSCHAPv2
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / GTC
|
||
|
- EAP-PEAPv0 / MD5-Challenge
|
||
|
- EAP-PEAPv1 / MSCHAPv2
|
||
|
- EAP-PEAPv1 / GTC
|
||
|
- EAP-PEAPv1 / MD5-Challenge
|
||
|
Note: PEAPv1 requires TLS key derivation to use label "client EAP encryption"
|
||
|
- EAP-TTLS / CHAP
|
||
|
- EAP-TTLS / MSCHAP
|
||
|
- EAP-TTLS / MSCHAPv2
|
||
|
- EAP-TTLS / PAP
|
||
|
- EAP-TTLS / EAP-MD5-Challenge
|
||
|
- EAP-TTLS / EAP-GTC
|
||
|
- EAP-TTLS / EAP-MSCHAPv2
|
||
|
- EAP-TTLS / EAP-TLS
|
||
|
* did not work
|
||
|
- EAP-PEAPv0 / TLS
|
||
|
- EAP-PEAPv1 / TLS
|
||
|
(Failed to decrypt Phase 2 data)
|
||
|
|
||
|
Lucent NavisRadius 4.4.0
|
||
|
- EAP-MD5-Challenge
|
||
|
- EAP-GTC
|
||
|
- EAP-MSCHAPv2
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MD5-Challenge
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / GTC
|
||
|
- EAP-PEAPv0 / TLS
|
||
|
- EAP-PEAPv1 / MD5-Challenge
|
||
|
- EAP-PEAPv1 / MSCHAPv2
|
||
|
- EAP-PEAPv1 / GTC
|
||
|
- EAP-PEAPv1 / TLS
|
||
|
"IETF Draft 5" mode requires phase1="peap_outer_success=0 peaplabel=1"
|
||
|
'Cisco ACU 5.05' mode works without phase1 configuration
|
||
|
- EAP-TTLS / CHAP
|
||
|
- EAP-TTLS / MSCHAP
|
||
|
- EAP-TTLS / MSCHAPv2
|
||
|
- EAP-TTLS / PAP
|
||
|
- EAP-TTLS / EAP-MD5-Challenge
|
||
|
- EAP-TTLS / EAP-MSCHAPv2
|
||
|
- EAP-TTLS / EAP-GTC
|
||
|
- EAP-TTLS / EAP-TLS
|
||
|
|
||
|
Note: user certificate from NavisRadius had private key in a format
|
||
|
that wpa_supplicant could not use. Converting this to PKCS#12 and then
|
||
|
back to PEM allowed wpa_supplicant to use the key.
|
||
|
|
||
|
|
||
|
hostapd v0.3.3
|
||
|
- EAP-MD5-Challenge
|
||
|
- EAP-GTC
|
||
|
- EAP-MSCHAPv2
|
||
|
- EAP-TLS
|
||
|
- EAP-PEAPv0 / MSCHAPv2
|
||
|
- EAP-PEAPv0 / GTC
|
||
|
- EAP-PEAPv0 / MD5-Challenge
|
||
|
- EAP-PEAPv1 / MSCHAPv2
|
||
|
- EAP-PEAPv1 / GTC
|
||
|
- EAP-PEAPv1 / MD5-Challenge
|
||
|
- EAP-TTLS / CHAP
|
||
|
- EAP-TTLS / MSCHAP
|
||
|
- EAP-TTLS / MSCHAPv2
|
||
|
- EAP-TTLS / PAP
|
||
|
- EAP-TTLS / EAP-MD5-Challenge
|
||
|
- EAP-TTLS / EAP-GTC
|
||
|
- EAP-TTLS / EAP-MSCHAPv2
|
||
|
- EAP-SIM
|
||
|
- EAP-PAX
|
||
|
|
||
|
PEAPv1:
|
||
|
|
||
|
Funk Odyssey 2.01.00.653:
|
||
|
- uses tunneled EAP-Success, expects reply in tunnel or TLS ACK, sends MPPE
|
||
|
keys with outer EAP-Success message after this
|
||
|
- uses label "client EAP encryption"
|
||
|
- (peap_outer_success 1 and 2 work)
|
||
|
|
||
|
Funk Steel-Belted Radius Enterprise Edition v4.71.739
|
||
|
- uses tunneled EAP-Success, expects reply in tunnel or TLS ACK, sends MPPE
|
||
|
keys with outer EAP-Success message after this
|
||
|
- uses label "client EAP encryption"
|
||
|
- (peap_outer_success 1 and 2 work)
|
||
|
|
||
|
Radiator 3.9:
|
||
|
- uses TLV Success and Reply, sends MPPE keys with outer EAP-Success message
|
||
|
after this
|
||
|
- uses label "client PEAP encryption"
|
||
|
|
||
|
Lucent NavisRadius 4.4.0 (in "IETF Draft 5" mode):
|
||
|
- sends tunneled EAP-Success with MPPE keys and expects the authentication to
|
||
|
terminate at this point (gets somewhat confused with reply to this)
|
||
|
- uses label "client PEAP encryption"
|
||
|
- phase1="peap_outer_success=0 peaplabel=1"
|
||
|
|
||
|
Lucent NavisRadius 4.4.0 (in "Cisco ACU 5.05" mode):
|
||
|
- sends tunneled EAP-Success with MPPE keys and expects to receive TLS ACK
|
||
|
as a reply
|
||
|
- uses label "client EAP encryption"
|
||
|
|
||
|
Meetinghouse Aegis 1.1.4
|
||
|
- uses tunneled EAP-Success, expects reply in tunnel or TLS ACK, sends MPPE
|
||
|
keys with outer EAP-Success message after this
|
||
|
- uses label "client EAP encryption"
|
||
|
- peap_outer_success 1 and 2 work
|