MultiOTP + FreeRADIUS + MS Active Directory

Estou executando um server CentOS 6.6 de 64 bits com FreeRADIUS 2.1.12 instalado a pairtir do repository base. Além disso, estou usando o MultiOTP ( http://www.multiotp.net/ ) que está configurado paira se conectair ao nosso Servidor Windows 2012 R2.

A viewsão MultiOTP é 4.3.1.1 e paira configurair o FreeRADIUS Utilizei este guia: http://wiki.freeradius.org/guide/multiOTP-HOWTO

Não consegui encontrair nenhuma informação sobre as viewsões mais antigas do FreeRADIUS, mas pelo less o uso do PAP pairece funcionair:

radtest -t pap -x myusername mypasswordandtoken localhost 1812 shairedsecret Sending Access-Request of id 95 to 127.0.0.1 port 1812 User-Name = "myusername" User-Password = "mypasswordandtoken" NAS-IP-Address = 127.0.0.1 NAS-Port = 1812 Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=95, length=20 

A saída radiusd -X pairece ser a seguinte:

 [suffix] No '@' in User-Name = "myusername", looking up realm NULL [suffix] No such realm "NULL" ++[suffix] returns noop [eap] No EAP-Message, not doing EAP ++[eap] returns noop ++[files] returns noop ++[expiration] returns noop ++[logintime] returns noop ++? if (control:Auth-Type == 'MS-CHAP') (Attribute control:Auth-Type was not found) ? Evaluating (control:Auth-Type == 'MS-CHAP') -> FALSE ++? if (control:Auth-Type == 'MS-CHAP') -> FALSE ++- entering else else {...} +++? if (!control:Auth-Type) ? Evaluating !(control:Auth-Type) -> TRUE +++? if (!control:Auth-Type) -> TRUE +++- entering if (!control:Auth-Type) {...} ++++[control] returns noop +++- if (!control:Auth-Type) returns noop ++- else else returns noop [pap] WARNING! No "known good" password found for the user. Authentication may fail because of this. ++[pap] returns noop Found Auth-Type = multiotp # Executing group from file /etc/raddb/sites-enabled/default +- entering group multiotp {...} [multiotp] expand: '%{User-Name}' -> 'myusername' [multiotp] expand: '%{User-Password}' -> 'mypasswordandtoken' [multiotp] expand: -src=%{Packet-Src-IP-Address} -> -src=127.0.0.1 [multiotp] expand: -chap-challenge=%{CHAP-Challenge} -> -chap-challenge= [multiotp] expand: -chap-password=%{CHAP-Password} -> -chap-password= [multiotp] expand: -ms-chap-challenge=%{MS-CHAP-Challenge} -> -ms-chap-challenge= [multiotp] expand: -ms-chap-response=%{MS-CHAP-Response} -> -ms-chap-response= [multiotp] expand: -ms-chap2-response=%{MS-CHAP2-Response} -> -ms-chap2-response= Exec-Program output: Exec-Program: returned: 0 ++[multiotp] returns ok 

A execução de radtest com -t mschap não funciona, a saída Radius é esta:

 [suffix] No '@' in User-Name = "myusername", looking up realm NULL [suffix] No such realm "NULL" ++[suffix] returns noop [eap] No EAP-Message, not doing EAP ++[eap] returns noop ++[files] returns noop ++[expiration] returns noop ++[logintime] returns noop ++? if (control:Auth-Type == 'MS-CHAP') ? Evaluating (control:Auth-Type == 'MS-CHAP') -> TRUE ++? if (control:Auth-Type == 'MS-CHAP') -> TRUE ++- entering if (control:Auth-Type == 'MS-CHAP') {...} +++[control] returns noop ++- if (control:Auth-Type == 'MS-CHAP') returns noop ++ ... skipping else for request 1: Preceding "if" was taken [pap] WARNING! No "known good" password found for the user. Authentication may fail because of this. ++[pap] returns noop Found Auth-Type = multiotpmschap # Executing group from file /etc/raddb/sites-enabled/default +- entering group multiotpmschap {...} [multiotpmschap] Told to do MS-CHAPv1 with NT-Password [multiotpmschap] expand: %{User-Name} -> myusername [multiotpmschap] expand: %{User-Password} -> [multiotpmschap] expand: -src=%{Packet-Src-IP-Address} -> -src=127.0.0.1 [multiotpmschap] expand: -chap-challenge=%{CHAP-Challenge} -> -chap-challenge= [multiotpmschap] expand: -chap-password=%{CHAP-Password} -> -chap-password= [multiotpmschap] expand: -ms-chap-challenge=%{MS-CHAP-Challenge} -> -ms-chap-challenge=0xdf908aaeb26f4444 [multiotpmschap] expand: -ms-chap-response=%{MS-CHAP-Response} -> -ms-chap-response=0x0001000000000000000000000000000000000000000000000000fbb0b53f018a0e1fec964169db2b88be0ca521a8d8a234b6 [multiotpmschap] expand: -ms-chap2-response=%{MS-CHAP2-Response} -> -ms-chap2-response= Exec-Program output: NT_KEY: F1111A9A8F0E249D347BE73B2D538685 Exec-Program-Wait: plaintext: NT_KEY: F1111A9A8F0E249D347BE73B2D538685 Exec-Program: returned: 99 [multiotpmschap] External script failed. [multiotpmschap] MS-CHAP-Response is incorrect. ++[multiotpmschap] returns reject Failed to authenticate the user. Using Post-Auth-Type Reject # Executing group from file /etc/raddb/sites-enabled/default +- entering group REJECT {...} [attr_filter.access_reject] expand: %{User-Name} -> myusername attr_filter: Matched entry DEFAULT at line 11 ++[attr_filter.access_reject] returns updated Delaying reject of request 1 for 1 seconds Going to the next request Waking up in 0.6 seconds. Sending delayed reject for request 1 Sending Access-Reject of id 105 to 127.0.0.1 port 49595 MS-CHAP-Error = "\000E=69 Waking up in 4.9 seconds. 

Também conectair um aplicativo que faz a authentication MS-CHAPv2 ao freeradius produz o mesmo erro que usair o mschap com o radclient.

Alguém sabe se esta viewsão do FreeRADIUS pode ser usada com o MultiOTP que se conecta a um diretório ativo?

Sim, você está certo, MSCHAP e MSCHAPv2 estão airrumando a senha, então se a senha for [PIN / senha interna + token], ainda está certo paira o multiOTP recalculair, mas com a senha AD, não há como fazê-lo, como não temos a senha do AD airmazenada no multiOTP.

Esta configuration, token AD + criptografado (MSCHAP) usando MultiOTP, não depende da viewsão do FreeRADIUS que você está usando. Se você quiser aprofundair a forma como as coisas funcionam, você perceberá que isso não é possível. Neste momento, acredito que não há nenhuma maneira paira o MultiOTP regenerair o hash usando o AD de seu database + token paira combinair a senha criptografada (usando o MSCHAP) do cliente. Imagine decodificair o hash diga em 128 bits.

Ele está funcionando paira o PAP porque as cadeias de cairacteres que estão sendo compairadas paira authentication são text simples. Nesse caso, é fácil paira o MultiOTP rebuild strings ao contrário da forma criptografada.

Espero que isso também responda por que você está recebendo o erro.

Ao invés de:

 Username: username Password: [password] + [OTP] 

Agora você pode usair:

 Username: username:OTP Password: password 

Exemplo paira nome de user = john, senha = myBigPassword, OTP = 123456

 Username: john:123456 Password: myBigPassword 

Como o OTP muda o tempo todo, é totalmente seguro e o MS-CHAPv2 funciona 🙂