authenticate against SHA2 hash in EAP-MSCHAPv2

Volodymyr Litovka doka.ua at gmx.com
Wed Feb 28 11:56:49 CET 2018


Hi again,

and worth to say that plain authentication using "radtest doka q1w2e3 
localhost 1812 mysecret" agains SHA2-Password in "users" works perfectly:

Sent Access-Request Id 237 from 0.0.0.0:37952 to 127.0.0.1:1812 length 74
     User-Name = "doka"
     User-Password = "q1w2e3"
     NAS-IP-Address = 127.0.1.1
     NAS-Port = 1812
     Message-Authenticator = 0x00
     Cleartext-Password = "q1w2e3"
Received Access-Accept Id 237 from 127.0.0.1:1812 to 0.0.0.0:0 length 33
     Reply-Message = "Hello, doka"

with the following debug

(0) eap: No EAP-Message, not doing EAP
(0)     [eap] = noop
(0) files: users: Matched entry doka at line 69
(0) files: EXPAND Hello, %{User-Name}
(0) files:    --> Hello, doka
(0)     [files] = ok
(0)     [expiration] = noop
(0)     [logintime] = noop
(0) pap: Normalizing SHA2-Password from hex encoding, 64 bytes -> 32 bytes
(0)     [pap] = updated
(0)   } # authorize = updated
(0) Found Auth-Type = pap
(0) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
(0)   Auth-Type PAP {
(0) pap: Login attempt with password
(0) pap: Comparing with "known-good" SHA2-Password
(0) pap: User authenticated successfully
(0)     [pap] = ok
(0)   } # Auth-Type PAP = ok

so there are no problems with crypto libraries and "SHA2-Password" 
statement itself.

On 2/28/18 12:34 PM, Volodymyr Litovka wrote:
> Hi colleagues,
>
> I'm pretty new in FreeRadius and looks missing something that will 
> allow me to authenticate MSCHAP users agains stored SHA256 hashes.
>
> Having the following entries in the "users" file :
>
> #doka   Cleartext-Password := "q1w2e3"
> doka    SHA2-Password := 
> "AE5A853873043C7B011C6300C464D8D4014BF833697A3C01817D83AA91A53166"
>
> I'm trying to authenticate Stronswan connections, which use 
> EAP-MSCHAPv2. In both cases, FreeRadius notes that "pap: WARNING: 
> Auth-Type already set. Not setting to PAP" but while it's not required 
> with Cleartext-Password, it's required (but not called) for 
> SHA2-Password:
>
> There are two different debugs:
>
> 1) for clear-text password it works:
>
> (1) eap: No EAP Start, assuming it's an on-going EAP conversation
> (1)     [eap] = updated
> (1) files: users: Matched entry doka at line 68
> (1) files: EXPAND Hello, %{User-Name}
> (1) files:    --> Hello, doka
> (1)     [files] = ok
> (1)     [expiration] = noop
> (1)     [logintime] = noop
> (1) pap: WARNING: Auth-Type already set.  Not setting to PAP
> (1)     [pap] = noop
> (1)   } # authorize = updated
> (1) Found Auth-Type = eap
> (1) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
> (1)   authenticate {
> (1) eap: Expiring EAP session with state 0xa83c0023a83d1a89
> (1) eap: Finished EAP session with state 0xa83c0023a83d1a89
> (1) eap: Previous EAP request found for state 0xa83c0023a83d1a89, 
> released from the list
> (1) eap: Peer sent packet with method EAP MSCHAPv2 (26)
> (1) eap: Calling submodule eap_mschapv2 to process data
> (1) eap_mschapv2: # Executing group from file 
> /etc/freeradius/3.0/sites-enabled/default
> (1) eap_mschapv2:   authenticate {
> (1) mschap: Found Cleartext-Password, hashing to create NT-Password
> (1) mschap: Found Cleartext-Password, hashing to create LM-Password
> (1) mschap: Creating challenge hash with username: doka
> (1) mschap: Client is using MS-CHAPv2
> (1) mschap: Adding MS-CHAPv2 MPPE keys
> (1)     [mschap] = ok
> (1)   } # authenticate = ok
> (1) MSCHAP Success
>
> 2) while as soon as I switch to SHA2-Password, it stops authenticate 
> requests
>
> (1) eap: No EAP Start, assuming it's an on-going EAP conversation
> (1)     [eap] = updated
> (1) files: users: Matched entry doka at line 69
> (1) files: EXPAND Hello, %{User-Name}
> (1) files:    --> Hello, doka
> (1)     [files] = ok
> (1)     [expiration] = noop
> (1)     [logintime] = noop
> (1) pap: Normalizing SHA2-Password from hex encoding, 64 bytes -> 32 
> bytes
> (1) pap: WARNING: Auth-Type already set.  Not setting to PAP
> (1)     [pap] = noop
> (1)   } # authorize = updated
> (1) Found Auth-Type = eap
> (1) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
> (1)   authenticate {
> (1) eap: Expiring EAP session with state 0x1ba8bb871ba9a1a0
> (1) eap: Finished EAP session with state 0x1ba8bb871ba9a1a0
> (1) eap: Previous EAP request found for state 0x1ba8bb871ba9a1a0, 
> released from the list
> (1) eap: Peer sent packet with method EAP MSCHAPv2 (26)
> (1) eap: Calling submodule eap_mschapv2 to process data
> (1) eap_mschapv2: # Executing group from file 
> /etc/freeradius/3.0/sites-enabled/default
> (1) eap_mschapv2:   authenticate {
> (1) mschap: WARNING: No Cleartext-Password configured. Cannot create 
> NT-Password
> (1) mschap: WARNING: No Cleartext-Password configured. Cannot create 
> LM-Password
> (1) mschap: Creating challenge hash with username: doka
> (1) mschap: Client is using MS-CHAPv2
> (1) mschap: ERROR: FAILED: No NT/LM-Password.  Cannot perform 
> authentication
> (1) mschap: ERROR: MS-CHAP2-Response is incorrect
> (1)     [mschap] = reject
> (1)   } # authenticate = reject
> (1) eap: Sending EAP Failure (code 4) ID 1 length 4
> (1) eap: Freeing handler
> (1)     [eap] = reject
> (1)   } # authenticate = reject
> (1) Failed to authenticate the user
>
> Configuration is the following:
>
> 1) sites-enabled/default :
> authorize {
>     filter_username
>     preprocess
>     auth_log
>     chap
>     mschap
>     digest
>     suffix
>     eap {
>         ok = return
>     }
>     files
>     -sql
>     -ldap
>     expiration
>     logintime
>     pap
> }
> authenticate {
>     Auth-Type PAP {
>         pap
>     }
>     Auth-Type CHAP {
>         chap
>     }
>     Auth-Type MS-CHAP {
>         mschap
>     }
>     mschap
>     digest
>     eap
> }
>
> 2) mods-enabled/eap :
> eap {
>     default_eap_type = mschapv2
>     timer_expire     = 60
>     ignore_unknown_eap_types = no
>     cisco_accounting_username_bug = no
>     max_sessions = ${max_requests}
>     md5 {
>     }
>     mschapv2 {
>     }
> }
>
> 3) mods-enabled/mschap (unmodified) :
> mschap {
>     pool {
>         start = ${thread[pool].start_servers}
>         min = ${thread[pool].min_spare_servers}
>         max = ${thread[pool].max_servers}
>         spare = ${thread[pool].max_spare_servers}
>         uses = 0
>         retry_delay = 30
>         lifetime = 86400
>         cleanup_interval = 300
>         idle_timeout = 600
>     }
>     passchange {
>     }
> }
>
> 4) mod-enabled/pap (unmodified) :
> pap {
> }
>
> I will greatly appreciate any help on working around this issue. Please.
>
> Thank you!
>
> -- 
> Volodymyr Litovka
> "Vision without Execution is Hallucination." -- Thomas Edison

-- 
Volodymyr Litovka
   "Vision without Execution is Hallucination." -- Thomas Edison



More information about the Freeradius-Users mailing list