Bypass da autenticação MFA para Outlook com Exchange Online (Office 365)

Recentemente participei da implementação de uma solução MFA (Multi-Factor Authentication) de terceiro com Office 365, no caso Symantec VIP Service, mas o artigo pode ser utilizado para qualquer provedor de MFA, inclusive da Microsoft.

O principal desafio destas soluções de MFA é tratar as conexões do Outlook Client e da Lync client com o Office 365, pois estas aplicações não utilizar SAML padrão para fazer a autenticação, logo, quando habilitado MFA, os usuários dessas aplicações não conseguem se autenticar e ficam repetidamente solicitando as credencias do usuário.

Algumas alternativas:

1) Habilitar MFA apenas para acesso externo e liberar apenas o OWA (Outlook Web App), mas limitaria significativamente a experiência dos usuários, logo não atende.

2) Habilitar MFA apenas para acesso externo e forçar que o acesso seja sempre feito via VPN, na maioria dos casos também não atende, pois perde-se o conceito de “nuvem” (acesso de qualquer lugar, qualquer devices).

Mesmo que qualquer uma destas soluções acima atendesse a necessidade de negócio, tem um problema adicional. O Outlook client dentro da rede corporativa tenta fazer a autenticação externamente (passando pelo Web Application Proxy também conhecido como ADFS Proxy).

Para resolver isso, é necessário criar uma condição adicional de uso do MFA.

Quando o MFA é ativado para acesso externo uma regra adicional de autenticação é criada, que valida se a solicitação de autenticação está vindo da rede corporativa ou da rede externa. Se a condição for verdadeira aplica a regra, ou seja, exige MFA.

Intranet = solicitação direto no ADFS

Extranet = solicitação encaminhada via Web Proxy Application

c:[Type == "https://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value == "false"] => issue(Type = "https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "https://schemas.microsoft.com/claims/multipleauthn");

Em resumo: essa regra foça autenticação MFA para todas as aplicações (Portal, Outlook, Lync) quando vindo de fora da rede corporativa, o que faz o Outlook e Lync pararem de funcionar externamente o Outlook internamente.

Para solicitar isso, é necessário adicionar uma nova condição na regra acima, controlando qual tipo de cliente que está requisitando a autenticação. Se for requisição web, solicita MFA, se for aplicação Outlook ou Lync não pede MFA.

A condição mais fácil de ser aplicada é a que valida o valor se o valor “x-ms-endpoint-absolute-path” recebida na requisição de autenticação é igual a “/adfs/ls”, isso quer dizer que requisição é vinda de um browser, como por exemplo, acesso ao portal do Office 365 ou mesmo OWA.

Com isso a regra ficaria:

c:[Type == "https://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-endpoint-absolute-path", Value =~ "(/adfs/ls)"] => issue(Type = "https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "https://schemas.microsoft.com/claims/multipleauthn"); c:[Type == "https://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(Type = "https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "https://schemas.microsoft.com/claims/multipleauthn");

Explicação dada, vamos à prática, como implementar isso no servidor ADFS:

O ajuste necessário para fazer o “by-pass” do Outlook tanto quando é acessado de dentro e de fora segue abaixo:

1) Adicionar as a Claim rules para Active Directory Provider, conforme step2 do artigo https://technet.microsoft.com/en-us/library/hh526961(v=ws.10).aspx

Além das 5 rules regras já documentadas, incluir também a https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod

2) Habilitar o MFA para Extranet no console do ADFS, selecionando apenas Extranet;

3) Fazer backup do configuração das Relying Party Trust, com o comando: Get-AdfsRelyingPartyTrust (guardar o resultado de saída para uma eventual necessidade de restore);

4) Rodar o seguinte comando PowerShell para reconfigurar o Relying Party Trust forçando autenticação MFA apenas para acesso via browser e fazendo by-pass da autenticação quando acesso for por Outlook/Lync, etc....

$rp = Get-AdfsRelyingPartyTrust -Name "Microsoft Office 365 Identity Platform"

$GroupMfaClaimTriggerRule = 'c:[Type == "https://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-endpoint-absolute-path", Value =~ "(/adfs/ls)"] && c1:[Type == "https://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value == "false"] => issue(Type = "https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "https://schemas.microsoft.com/claims/multipleauthn");'

Set-AdfsRelyingPartyTrust -TargetRelyingParty $rp -AdditionalAuthenticationRules $GroupMfaClaimTriggerRule

5) Fazer os testes.

 

(nos próximos dias colocaria alguns Print Screen de referência)