Dando continuidade à série de artigos sobre organização VPN de Acesso Remoto de acesso, não posso deixar de compartilhar uma experiência interessante de implementação de uma configuração VPN altamente segura. Um cliente lançou um desafio não trivial (há criadores de histórias nas aldeias russas), mas Aceitei o Desafio e realizei-o de forma criativa. O resultado foi um conceito interessante com as seguintes características:
- Vários fatores de proteção contra falsificação do dispositivo final (com vinculação rígida ao usuário);
- Avaliação da conformidade do PC do usuário com o UDID designado do PC permitido no banco de autenticação;
- Com MFA, utilizando o UDID do PC do certificado para autenticação secundária através do Cisco DUO (Pode-se integrar qualquer compatível com SAML/RADIUS);
- Autenticação multifatorial:
- Certificado do usuário com verificação de campos e autenticação secundária com base em um deles;
- Login (imutável, retirado do certificado) e senha;
- Avaliação do estado do host conectado (Postura)
Componentes utilizados na solução:
- Cisco ASA (Gateway VPN);
- Cisco ISE (Autenticação / Autorização / Contabilização, Avaliação de Estado, CA);
- Cisco DUO (Autenticação Multifatorial) (Pode-se integrar qualquer compatível com SAML/RADIUS);
- Cisco AnyConnect (Agente multifuncional para estações de trabalho e sistemas operacionais móveis);
Comecemos pelos requisitos do cliente:
- O usuário deve, com sua autenticação de Login/Senha, ter a capacidade de fazer o download do cliente AnyConnect do gateway VPN, todos os módulos necessários do AnyConnect devem ser instalados automaticamente de acordo com a política do usuário;
- O usuário deve ter a possibilidade de emissão automática do certificado (para um dos cenários, o cenário principal é a emissão manual e upload no PC), eu implementei a emissão automática para demonstração (nunca é tarde demais para remover).
- A autenticação principal deve ocorrer em várias etapas, inicialmente a autenticação do certificado com análise dos campos necessários e seus valores, em seguida login/senha, mas desta vez na janela de login deve ser inserido o nome de usuário especificado no campo do certificado Nome do Assunto (CN) sem a possibilidade de edição.
- É necessário garantir que o dispositivo a partir do qual o acesso é realizado seja o laptop corporativo fornecido ao usuário para acesso remoto, e não qualquer outra coisa. (Vários métodos foram implementados para satisfazer este requisito)
- Deve ser realizada uma avaliação do estado do dispositivo conectado (nesta fase, o PC) com a verificação de toda a extensa tabela de requisitos do cliente (resumindo):
- Arquivos e suas propriedades;
- Entradas do registro;
- Patches do SO da lista fornecida (futuramente integração SCCM);
- Presença de antivírus de um fabricante específico e atualidade das assinaturas;
- Atividade de determinados serviços;
- Presença de certos programas instalados;
Para começar, sugiro obrigatoriamente assistir à demonstração em vídeo da implementação obtida em Youtube (5 minutos).

Agora, proponho examinar os detalhes da implementação não abordados no vídeo.
Vamos preparar o perfil AnyConnect:
Um exemplo de criação de perfil (em termos de menu no ASDM) foi anteriormente apresentado em meu artigo sobre configuração . Agora, quero destacar separadamente as opções que precisaremos:
No perfil, indicaremos o gateway VPN e o nome do perfil para conexão no cliente final:

Faremos a configuração da emissão automática de certificado pelo perfil, especificando, entre outras coisas, os parâmetros do certificado e, notavelmente, prestaremos atenção ao campo Initials (I), onde um valor específico foi inserido manualmente UDID do dispositivo de teste (Identificador Único do Dispositivo, gerado pelo cliente Cisco AnyConnect).

Aqui quero fazer uma digressão lírica, pois este artigo descreve a concepção; para fins de demonstração, esse UDID foi inserido no campo Initials do perfil AnyConnect. Claro que, na vida real, se você fizer isso, todos os clientes receberão um certificado com o mesmo UDID nesse campo e nada funcionará para eles, pois eles precisam do UDID específico de seu PC. Infelizmente, o AnyConnect ainda não implementa a substituição no perfil da solicitação do certificado pelo campo UDID através de variável de ambiente, como faz, por exemplo, com a variável %USER%.
Vale ressaltar que o cliente (deste cenário) inicialmente planeja emitir os certificados com o UDID especificado manualmente para esses PCs Protegidos, o que não é um problema para ele. No entanto, para a maioria de nós, a automação é desejável (bem, para mim com certeza =).
E aqui está o que eu posso oferecer em termos de automação. Se o certificado puder ser gerado automaticamente, colocando o UDID dinamicamente, ainda há outra maneira que exigirá um pouco de criatividade e mãos habilidosas – vou explicar a concepção. Para começar, vamos analisar como o UDID é gerado em diferentes sistemas operacionais pelo agente AnyConnect:
- Windows — hash SHA-256 da combinação da chave do registro DigitalProductID e Machine SID
- OSX — hash SHA-256 do PlatformUUID
- Linux — hash SHA-256 do UUID da partição raiz.
- Apple iOS — hash SHA-256 do PlatformUUID
- Android – Veja o documento sobre
Assim, vamos criar um script para nossos sistemas operacionais Windows corporativos, e com esse script calculamos localmente o UDID a partir das informações conhecidas e geramos um pedido para a emissão do certificado inserindo este UDID no campo correto, aliás, pode ser também o certificado de máquina emitido pelo AD (adicionando à estrutura a dupla autenticação via certificado. Multiple Certificate).
Prepararemos as configurações do lado do Cisco ASA:
Vamos criar um TrustPoint para o servidor ISE CA, que será o responsável pela emissão dos certificados para os clientes. Não falarei sobre o procedimento de importação de Key-Chain, um exemplo está descrito no meu artigo sobre configuração. .
crypto ca trustpoint ISE-CA
enrollment terminal
crl configureConfiguramos a distribuição por Tunnel-Group com base nas regras de acordo com os campos no certificado, que é utilizado para autenticação. Aqui também é configurado o perfil AnyConnect que criamos na etapa anterior. Chamo a atenção para o fato de que estou usando o valor SECUREBANK-RA, para transferir usuários com o certificado emitido para o grupo de túnel SECURE-BANK-VPN, observe que este campo está preenchido no pedido de certificado do perfil AnyConnect.
tunnel-group-map enable rules
!
crypto ca certificate map OU-Map 6
subject-name attr ou eq securebank-ra
!
webvpn
anyconnect profiles SECUREBANK disk0:/securebank.xml
certificate-group-map OU-Map 6 SECURE-BANK-VPN
!Configuramos os servidores de autenticação. No meu caso, este é o ISE para a primeira fase de autenticação e DUO (Radius Proxy) como MFA.
! CISCO ISE
aaa-server ISE protocol radius
authorize-only
interim-accounting-update periodic 24
dynamic-authorization
aaa-server ISE (inside) host 192.168.99.134
key *****
!
! DUO RADIUS PROXY
aaa-server DUO protocol radius
aaa-server DUO (inside) host 192.168.99.136
timeout 60
key *****
authentication-port 1812
accounting-port 1813
no mschapv2-capable
!Criamos políticas de grupo e grupos de túnel e seus componentes auxiliares:
Grupo de túnel DefaultWEBVPNGroup será usada primeiramente para baixar o cliente AnyConnect VPN e emitir o certificado do usuário usando a função SCEP-Proxy do ASA, para isso temos opções correspondentes ativadas tanto no grupo de túnel quanto na política de grupo associada AC-Download, bem como no perfil AnyConnect baixado (campos de emissão de certificado, etc.). Também nesta política de grupo, especificamos a necessidade de download ISE Posture Module.
Grupo de túnel SECURE-BANK-VPN será automaticamente usado pelo cliente na autenticação do certificado emitido na etapa anterior, pois de acordo com o Mapa de Certificados, a conexão será estabelecida exatamente neste grupo de túnel. Farei uma breve descrição das opções interessantes aqui:
- grupo de servidor de autenticação secundária DUO # Задаем вторичную аутентификацию на сервере DUO (Radius Proxy)
- nome de usuário do certificado CN # Используем для первичной аутентификации поле CN сертификата для наследования логина пользователя
- nome de usuário secundário do certificado I # Для вторичной аутентификации на сервере DUO используем имя пользователя, извлеченное и поля Initials (I) сертификата.
- preencher-nome-de-usuário cliente # делаем предзаполненным имя пользователя в окне аутентификации без возможности изменения
- preencher-nome-de-usuário secundário cliente oculto usar-senha-comum push # Прячем окно ввода логина/пароля для вторичной аутентификации DUO и используем для запроса аутентификации вместо поля пароля метод уведомления (sms/push/phone) – дока
!
lista-de-acesso posture-redirect estendida permite tcp qualquer host 72.163.1.80
lista-de-acesso posture-redirect estendida nega ip qualquer qualquer
!
lista-de-acesso VPN-Filter estendida permite ip qualquer qualquer
!
piscina local vpn-pool 192.168.100.33-192.168.100.63 máscara 255.255.255.224
!
pólitica-de-grupo SECURE-BANK-VPN interna
pólitica-de-grupo SECURE-BANK-VPN atributos
servidor-dns valor 192.168.99.155 192.168.99.130
filtro-vpn valor VPN-Filter
protocolo-túnel-vpn ssl-client
política-túnel-dividido tunnelall
domínio-padrão valor ashes.cc
piscinas-de-endereços valor vpn-pool
webvpn
anyconnect ssl dtls habilitar
anyconnect mtu 1300
anyconnect manter-instalador instalado
anyconnect ssl manter-vivo 20
anyconnect ssl rekey tempo nenhum
anyconnect ssl rekey método ssl
anyconnect dpd-interval cliente 30
anyconnect dpd-interval gateway 30
anyconnect ssl compressão lzs
anyconnect dtls compressão lzs
anyconnect módulos valor iseposture
anyconnect perfis valor SECUREBANK tipo usuário
!
pólitica-de-grupo AC-DOWNLOAD interna
pólitica-de-grupo AC-DOWNLOAD atributos
servidor-dns valor 192.168.99.155 192.168.99.130
filtro-vpn valor VPN-Filter
protocolo-túnel-vpn ssl-client
política-túnel-dividido tunnelall
domínio-padrão valor ashes.cc
piscinas-de-endereços valor vpn-pool
scep-forwarding-url valor http://ise.ashes.cc:9090/auth/caservice/pkiclient.exe
webvpn
anyconnect ssl dtls habilitar
anyconnect mtu 1300
anyconnect manter-instalador instalado
anyconnect ssl manter-vivo 20
anyconnect ssl rekey tempo nenhum
anyconnect ssl rekey método ssl
anyconnect dpd-interval cliente 30
anyconnect dpd-interval gateway 30
anyconnect ssl compressão lzs
anyconnect dtls compressão lzs
anyconnect módulos valor iseposture
anyconnect perfis valor SECUREBANK tipo usuário
!
grupo-túnel DefaultWEBVPNGroup atributos-gerais
piscina-de-endereços vpn-pool
grupo-servidor-autenticação ISE
grupo-servidor-contabilidade ISE
política-grupo-padrão AC-DOWNLOAD
scep-inscrição habilitar
grupo-túnel DefaultWEBVPNGroup atributos-webvpn
autenticação aaa certificado
!
grupo-túnel SECURE-BANK-VPN tipo acesso-remoto
grupo-túnel SECURE-BANK-VPN atributos-gerais
piscina-de-endereços vpn-pool
grupo-servidor-autenticação ISE
grupo-servidor-autenticação-secundária DUO
grupo-servidor-contabilidade ISE
política-grupo-padrão SECURE-BANK-VPN
nome-de-usuário-do-certificado CN
nome-de-usuário-secundário-do-certificado I
grupo-túnel SECURE-BANK-VPN atributos-webvpn
autenticação aaa certificado
preencher-nome-de-usuário cliente
preencher-nome-de-usuário-secundário cliente oculto usar-senha-comum push
apelido-do-grupo SECURE-BANK-VPN habilitar
grupo-dns ASHES-DNS
!Em seguida, vamos para o ISE:
Configuramos um usuário local (também é possível usar AD/LDAP/ODBC, etc.), para simplificar, eu criei um usuário local diretamente no ISE e atribuí no campo descrição UDID do PC a partir do qual ele está autorizado a entrar via VPN. No caso de usar autenticação local no ISE, serei limitado a apenas um dispositivo, pois não existem muitos campos, mas em bancos de autenticação externos não terei essas restrições.

Vamos dar uma olhada na política de autorização, que é dividida em quatro etapas de conexão:
- Etapa 1 — Política para download do agente AnyConnect e emissão do certificado
- Etapa 2 — Política de autenticação primária Login (do certificado)/Senha + Certificado com validação UDID
- Etapa 3 — Autenticação secundária via Cisco DUO (MFA) com UDID como nome de usuário + Avaliação de estado
- Etapa 4 — Autorização final no estado:
- Conforme;
- validação do UDID (do certificado + vinculação ao login),
- Cisco DUO MFA;
- Autenticação por login;
- Autenticação por certificado;

Vamos analisar uma condição interessante UUID_VALIDATED, que verifica se o usuário autenticado realmente está vindo de um PC com o UDID permitido associado no campo Descrição da conta, a condição é a seguinte:

O perfil de autorização usado nas etapas 1, 2 e 3 é o seguinte:

Podemos verificar como o UDID é recebido do cliente AnyConnect observando os detalhes da sessão do cliente no ISE. Nos detalhes, veremos que o AnyConnect usa o mecanismo ACIDEX para enviar não apenas dados sobre a plataforma, mas também o UDID do dispositivo como Cisco-AV-PAIR:

Vamos prestar atenção no certificado emitido para o usuário e no campo Initials (I), que é usado para pegar esse campo como login para a autenticação secundária MFA na Cisco DUO:

Do lado do Proxy RADIUS da DUO, no log, vemos claramente como ocorre a solicitação de autenticação, que é feita usando o UDID como nome de usuário:

Do portal DUO, vemos um evento de autenticação bem-sucedido:

E nas propriedades do usuário, tenho definido um ALIAS, que utilizei para o login, que por sua vez é o UDID permitido para o PC de login:

Como resultado, obtivemos:
- Autenticação multifatorial do usuário e do dispositivo;
- Proteção contra substituição do dispositivo do usuário;
- Avaliação do estado do dispositivo;
- Potencial para aumentar o controle com certificado de máquina do domínio, etc.;
- Proteção abrangente do ambiente de trabalho remoto com módulos de segurança implantáveis automaticamente;
Links para artigos da série Cisco VPN:
Fonte: habr.com
