2FA via freeRADIUS, ignorando a senha

5

Recebi a tarefa de configurar o freeRADIUS para solicitar ao usuário o segundo fator de autenticação (por exemplo, Google Authenticator OTP), MAS sem primeiro verificar a senha do usuário.

Estou entrando nisso completamente cego, sem experiência anterior com o RADIUS. Temos um webapp que solicita ao usuário que faça login para que a autenticação de senha já esteja concluída. Em seguida, precisamos solicitar ao usuário um segundo fator de autenticação para executar determinadas ações. Nós não queremos pedir repetidamente ao usuário para digitar sua senha (e armazenar em cache localmente é um não-não, aparentemente), então o que nós gostaríamos de fazer é configurar o freeRADIUS de alguma forma para que ele:

  • Ignore o valor que passamos pela senha na solicitação inicial
  • Retorna uma resposta de desafio que solicitará que o usuário insira seu segundo fator de autenticação (por exemplo, OTP)

Isso é mesmo viável? Como eu disse, não tenho experiência anterior com o RADIUS, então peço desculpas se essa é uma pergunta idiota.

    
por Jeedee 01.10.2018 / 15:38

2 respostas

1

Eu mesmo descobri isso. Se alguém estiver interessado, está relacionado com a configuração em /etc/pam.d/radiusd

Primeiro, siga um desses tutoriais para configurar o Google Authenticator como o segundo fator em seu servidor freeRADIUS: link link

Quando se trata de fazer alterações em /etc/pam.d/radiusd, use uma destas configurações:

  1. Para solicitar senha E OTP do Google Auth:

    Requisito de autenticação pam_google_authenticator.so forward_pass
    auth required pam_unix.so use_first_pass
    conta exigida pam_unix.so auditoria
    conta requerida pam_permit.so

  2. Para SOLICITAR APENAS a OTP do Google Auth (ou seja, sem senha):

    auth required pam_google_authenticator.so
    conta exigida pam_unix.so auditoria
    conta requerida pam_permit.so

Note que isso não envia uma resposta de desafio - significa apenas que a senha não precisa ser inserida em primeiro lugar.

    
por 09.10.2018 / 16:12
1

O Radius é um protocolo de autenticação / autorização / contabilidade da rede. Ele opera na camada 3 no modelo OSI.

Seu aplicativo da Web opera na camada 7.

Então, há um pouco de mis-match aqui. Você pode usar o Radius para autenticar conexões de rede, como WiFi ou portas de rede, mas precisa de algo baseado em http para seu aplicativo da Web.

Estou fazendo algumas suposições, mas parece que você tem um servidor Radius para autenticar usuários em sua rede e aproveitou o mesmo banco de dados de usuários para autenticar usuários em seu aplicativo da web. Quer o aplicativo da Web esteja ou não falando o protocolo Radius para autenticar usuários, seus usuários não estão falando Radius quando eles inserem um nome de usuário e senha em uma página da Web, então o Radius não vai ajudá-lo com isso - precisa ser feito em o aplicativo da web.

Se o seu aplicativo da Web tiver acesso ao servidor radius, talvez seja possível determinar qual usuário é autenticado e autorizar / prompt do OTP com base nisso, mas essa é a lógica do aplicativo da web. Nenhuma quantidade de configuração no FreeRadius pode conseguir isso para você.

Então, eu recomendo dar um passo para trás e considerar onde seus dados de usuário estão armazenados. Enquanto você pode estar autenticando em um servidor freeRadius, o Radius é apenas um protocolo e, no backend, há um banco de dados de usuários. Este poderia ser um servidor LDAP, um banco de dados SQL, pam ou apenas um arquivo de texto simples.

Supondo que você tenha um banco de dados de usuário comum, você pode adicionar algum tipo de aplicativo de logon único Oauth / SAML (Okta e PingID são alguns exemplos comerciais) ao fluxo de autenticação de cada serviço, para que um logon um lugar entra em vigor em outro. Com o SSO, você pode modificar seu aplicativo da Web para exigir o segundo fator em determinados pontos (ele precisaria saber o segredo OTP existente do usuário ou exigir que ele configurasse outro para essa finalidade) ou você poderia usar algum tipo de política e reauth se a tecnologia SSO que você usa suportar.

Em conclusão, não consigo ver uma maneira de fazer isso no freeRadius sozinho, e mesmo se você pudesse, você provavelmente não deveria. E para fazer a parte de autorização, você sempre precisará modificar o aplicativo, a menos que você implemente algum proxy horrível do tipo "homem no meio", o que compromete totalmente a segurança.

    
por 03.10.2018 / 20:17