Sem necessidade de mágica VPNs básicas não fornecem segurança suficiente por si só; em vez disso, experimente uma delicada mistura de OpenVPN com e-tokens Aladdin. por Daniel von Soest e Charly Kühnast Como conta a história, Aladdin era uma pessoa que não servia para nada: era desocupado, malicioso e não respeitava os pais. Você colocaria a segurança da sua empresa nas mãos de um inútil como esse? Felizmente, com a ajuda de um pouco de magia, o mágico e o gênio da lâmpada transformaram o garoto em um sultão [1]. OpenVPN e Aladdin Por sorte, não é necessário nenhuma mágica para usar e-tokens Aladdin com Linux e OpenVPN, esse último sendo um aplicativo livre para rede privada virtual (VPN, na sigla em inglês) com SSL, que chegou à classe dos softwares-padrão na versão 2.1, sendo útil, principalmente, em configurações de ambientes de larga escala. Já o Aladdin [2] domina o mercado de controle de acesso com criptografia a partir de chaveiros USB com seus e-tokens, sendo esse um dos motivos pelos quais foi adquirido pela SafeNet. Contudo, um e-token é um e-token, tanto faz se venha com o rótulo Aladdin ou Safe- Net. Apesar de custar, aproximadamente, US$ 100, um e-token nada mais é do que um dispositivo USB que contém um certificado de usuário. No entanto, não é nada trivial integrar a autenticação de chaveiros USB com gerenciamento de senha e entrada PIN. Neste artigo, mostramos como uma organização pode configurar e implementar a segurança de uma infraestrutura de larga escala com essas técnicas. Abordamos também a integração de clientes Linux e Windows, configurações personalizadas dos clientes para a VPN e um script inicial para lidar com entrada PIN no Linux. Tokens e certificados Obviamente, a conexão VPN não mais usa uma simples chave previamente compartilhada (PSK, na sigla em inglês), mas sim, certificados X.509 seguros e gerenciados de modo centralizado [3], que expiram automaticamente. Você também pode usar o OpenVPN em combinação com certificados mais simples de chaves públicas, uma técnica que a Strato emprega para sua rede de armazenamento HiDrive. Contudo, isso significa que você precisa criar o certificado de modo clientauth; senão, o OpenVPN não vai abrir o túnel. Chaves e certificados individuais de clientes são preferíveis para empresas, mas ainda precisam de proteção; é aqui que entra 41
Figura 1 O administrador CA deve copiar os arquivos para a configuração VPN descrita neste artigo. o Aladdin, com sua solução que combina hardware e software. É pedida uma senha para a leitura do e-token, satisfazendo, assim, a exigência nas boas práticas de proteção de dados do tipo algo que você tem e algo que você sabe. Além disso, o e-token é um dispositivo inteligente que bloqueia o token se o usuário errar a senha muitas vezes. Essa precaução evita que um terceiro não autorizado abra uma conexão com um token roubado ou perdido. O certificado armazenado é lido conforme o padrão PKCS#11 [4]. Passo a passo Em um servidor Ubuntu, começamos instalando o pacote openvpn, que depende Figura 2 A ferramenta SAC não serve apenas para exportar, mas também para destravar e-tokens bloqueados por engano por seus usuários. dos pacotes liblzo2-2, libpkcs11-helper1, openssl-blacklist e openvpn-blacklist. O próximo passo é configurar sua própria PKI (Public Key Infraestructure). O OpenVPN fornece uma ferramenta de software para configurações pequenas e médias: o Easy RSA, uma boa opção para testes. Administradores que precisem de PKIs mais amplas podem experimentar ferramentas como o OpenCA [5] ou terceirizar a tarefa. Independentemente da ferramenta, após criar os certificados, você precisará mover sua PKI, preferivelmente, para uma máquina sem conexão de rede. Caso a PKI seja comprometida (principalmente o arquivo CA.key), toda a estrutura de TI de sua empresa fica em risco: a PKI jamais deve ser acessível pela rede. Easy RSA Os scripts Easy RSA fornecidos com o pacote permitem ao administrador uma técnica simples e descomplicada para configurar a PKI; os scripts estão em /usr/share/doc/openvpn/ examples/easy-rsa/2.0. Podemos começar modificando algumas coisas no arquivo vars; isso ajudar a deixar todo o processo mais conveniente (listagem 1). Após modificar essas linhas, não será preciso fornecer esses detalhes manualmente; em vez disso, basta teclar [Y] e pressionar [Enter]. A próxima etapa é limpar alguns comandos, exportar os valores que você acabou de editar e criar uma chave Diffie-Hellman 42 www.admin-magazine.com.br
(DH), que você precisa para tornar segura a troca das chaves: após uma espera e algumas telas cheias de caracteres crípticos, você deverá ter sua chave DH e pode executar o script./build-ca para criar sua própria CA. Os scripts vão te guiar pelo processo, oferecendo os valores pré-definidos no arquivo vars como padrões. Mas será preciso digitar manualmente o Organizational Unit Name e o Common Name. Depois, você pode criar um certificado de servidor. O Easy RSA inclui o script build-keyserver para isso; o nome do certificado precisa ser digitado como um parâmetro. Isso significa digitar manualmente diversas porções de informação, sendo uma delas o Common Name, que geralmente é o FQDN (Fully Qualified Domain Name) do servidor. Não esqueça de incluir uma challenge password aqui, já que a assinatura vai ocorrer imediatamente depois desse processo. Você pode responder sim Y para as outras duas perguntas: Sign the certificate [y/n]: 1 out of 1 certificate requests certified, commit? [y/n]: Após completar essa etapa, você poderá emitir quantos certificados de usuários quiser. Novamente, o Easy RSA oferece um script, o build-key, para isso. É preciso confirmar as configurações-padrão e adicionar detalhes pessoais antes de prosseguir para a criação de uma chave TLS, para fornecer proteção contra ataques do tipo DoS. O seguinte comando é útil para isso: openvpn --genkey --secret tls-auth.key Ele armazena a chave no arquivo tls-auth.key. Lugar correto O processo de colocar os certificados que você cria nos lugares certos pode ser confuso. A figura 1 mostra os locais corretos: os arquivos CA.crt, server.crt, server.key, tls-auth.key, dh.key e client.crt precisam estar no servidor OpenVPN. No lado do cliente (no meu caso um laptop), são necessários apenas os arquivos CA.crt e tls-auth.key. O arquivo client. pem fica no e-token. A parte de baixo da figura 2 mostra a máquina de gerenciamento PKI isolada e o arquivo client.pem na direita. Finalmente, vamos armazenar os novos certificados de usuários nos e-tokens. O seguinte comando openssl pkcs12 -export -in John_Doe.crt -inkey John_Doe.key -out John_Doe.p12 combina o par certificado/chave do cliente em um arquivo PKCS#12, que você copia no e-token usando o SafeNet Authentication Client (SAC) [7]. Conhecido antes como Aladdin PKI Client, esse programa foi renomeado após a aquisição do Aladdin pela SafeNet, mas contém os mesmos recursos. Quando você inicia o software pela primeira vez, um botão na visão Advanced inicializa o e-token. Você precisa digitar um login de administrador para destravar o e- -token. Também é possível definir o número Listagem 1: variáveis 01 01 # tamanho da chave 02 02 export KEY_SIZE=1024 03 03 04 04 # validade da CA (em dias) 05 05 export CA_EXPIRE=3650 06 06 07 07 # validade do certificado (em dias) 08 08 export KEY_EXPIRE=3650 09 09 10 10 # valores pré-definidos do certificado 11 11 export KEY_COUNTRY= DE 12 12 export KEY_PROVINCE= BY 13 13 export KEY_CITY= Muenchen 14 14 export KEY_ORG= Linux-Magazin 15 15 export KEY_EMAIL= pki@linux-magazin.de 16 17./clean_all 18./vars 19./build-dh.sh Listagem 2: /etc/openvpn/server.conf 01 port 443 02 dev tun 03 proto tcp 04 topology subnet 05 06 dh /etc/openvpn/keys/dh1024.pem 07 ca /etc/openvpn/keys/ca.crt 08 cert /etc/openvpn/keys/server.crt 09 key /etc/openvpn/keys/server.key 10 tls-auth /etc/openvpn/keys/tls-auth.key 11 12 server 192.168.1.0 255.255.255.0 13 14 keepalive 10 60 15 comp-lzo 16 17 persist-key 18 persist-tun 19 client-config-dir /etc/openvpn/ccd 20 ccd-exclusive 21 status /var/log/openvpn/status.log 22 log-append /var/log/openvpn/openvpn.log 23 verb 5 43
de tentativas antes de o usuário ter o e-token bloqueado. O quadro 1 mostra em linhas gerais a técnica correta para reativar um e-token com a ferramenta SAC (figura 2). Importar e exportar A função de importar ajuda a colocar o certificado no e-token. Quando for pedida a senha, coloque a senha de usuário que você acabou de especificar. Na próxima janela de autenticação, se você especificou uma Chalenge Password ao emitir o certificado, terá que digitá-la agora; senão, apenas deixe o campo em branco e o e-token está pronto para uso. Servidor OpenVPN Administradores de ambientes de larga escala geralmente executam o OpenVPN em uma DMZ (zona desmilitarizada) separada, o que é, provavelmente, a solução ideal, já que isso roteia o acesso através dos sistemas centralizados de firewall e, assim, permite seu controle. Mas, nessa abordagem, cada usuário da VPN precisa de um endereço IP estático, para o qual regras estão definidas nos firewalls; afinal, você não quer dar os mesmos privilégios de um funcionário trabalhando em casa, para uma empresa terceirizada, por exemplo. Para permitir isso, a versão 2.1 (ou mais nova) do OpenVPN oferece uma topologia Listagem 3: /etc/openvpn/ccd/john_doe 01 # John Doe 02 ifconfig-push 192.168.1.3 255.255.255.0 03 push "topology subnet" 04 push "redirect-gateway" 05 push "dhcp-option DNS 192.168.10.1" 06 push "dhcp-option WINS 192.168.10.1" 07 push "dhcp-option DOMAIN linux-magazin.de" Listagem 4: client.ovpn (Windows) 01 remote myopenvpn.exmaple.com 443 02 dev tun 03 proto tcp 04 client 05 tun-mtu 1500 06 ca "C:\\program files\\openvpn\\keys\\ca.crt" 07 tls-auth "C:\\program files\\openvpn\\keys\\ tls-auth.crt" 08 cryptoapicert "THUMB:xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx" 09 10 cipher BF-CBC 11 comp-lzo 12 register-dns 13 explicit-exit-notify de sub-rede. Em combinação com o prático parâmetro ccd-exclusive, ele designa um endereço fixo de IP ao par certificado/usuário e impede o acesso de usuários não especificados. O administrador precisa criar um arquivo de configuração.conf em /etc/ openvpn no servidor (listagem 2). Esse arquivo faz o OpenVPN ser executado na porta 443 TCP, utilizar um dispositivo TUN para um túnel e usar topologia subnet. Nesse modo, o servidor OpenVPN é designado como o primeiro endereço do intervalo especificado (no exemplo, 192.168.1.1). Os detalhes do certificado e caminho da chave são fornecidos pela diretriz server, junto com o intervalo de IPs da rede virtual. O importante aqui é modificar o roteamento dos firewalls envolvidos e rotear a rede privada com o servidor OpenVPN. Os parâmetros keepalive da linha 14, fazem o OpenVPN terminar automaticamente a conexão com o túnel após 60 segundos se a conexão falhar, permitindo que o usuário tente reconectar. A diretriz comp-lzo habilita a compressão, o que melhora perceptivelmente a resposta ao lidar com o túnel. Já persist-key e persist- -tun evitam que o OpenVPN reanalise os arquivos do túnel e da chave quando o túnel é reiniciado. Isso faz sentido quando o Open- VPN perde privilégios ao iniciar, porque apenas o usuário root pode criar o dispositivo TUN e analisar o arquivo da chave. A diretriz client-config-dir define onde a configuração de usuário (ou seja, as designações individuais de IPs e rotas especiais) é armazenada. A próxima diretriz, ccd-exclusive, faz o OpenVPN rejeitar quaisquer usuários que não tenham uma configuração client-config- -dir. Os parâmetros status, log e verb configuram os arquivos de log e a quantidade de informações exibidas. Configurações push A configuração no lado do servidor para o usuário de exemplo John Doe fica em um arquivo chamado /etc/openvpn/ccd/john_doe, sendo muito similar à listagem 3. O importante é que o nome do arquivo corresponda ao CN da linha subject no certificado do cliente; em outras palavras, é preciso planejar bem o desenho de sua PKI previamente. O servidor designa para o cliente um endereço IP de 192.168.1.3 na hora da conexão. Ao mesmo tempo, redirect-gateway faz o 44 www.admin-magazine.com.br
Figura 3 O Microsoft Management Console com o snap-in do certificado. cliente executar seu gateway padrão através do túnel VPN. Além disso, o OpenVPN usa o parâmetro dhcp-option para modificar as configurações de DNS, WINS e de domínio. Infelizmente, apenas clientes Windows vão compreender a diretriz dhcp-option, mas é possível usar o script /etc/openvpn/update- -resolv-conf para clientes Linux. Se sua distribuição não fornecer esse script, é possível baixar uma versão modificada [9]. Obviamente, é possível lidar com todas as configurações listadas no diretório ccd no lado do cliente, mas isso não é uma boa ideia por questões de segurança. Um usuário poderia facilmente mudar o endereço IP para escalar privilégios. O servidor VPN também precisa dar suporte a encaminhamento de pacotes, recurso fornecido com ip_forward, através do parâmetro de kernel sysctl -w net.ipv4.ip_forward=1. Integração de clientes Windows Clientes Linux e Windows usam configurações OpenVPN totalmente diferentes. Os programas Windows necessários estão em [8]. A equipe editorial da Linux Magazine recomenda os programas comunitários do projeto OpenVPN.net. Essa alternativa não inclui drivers com certificação Microsoft, o que pode causar problemas com algumas versões do Windows. Além do software OpenVPN, será preciso o programa para e- -tokens SAC, que você pode obter após se registrar [6]. Após instalar os dois aplicativos, podemos começar a configuração. Comece criando um arquivo client.ovpn com o conteúdo da listagem 4 em C:\Program files\openvpn\. As barras duplas não são erros de digitação, são absolutamente necessárias. Lembre-se de corrigir o caminho se estiver executando um sistema 64-bits precisa ser C:\Program files (x86)\ openvpn\, novamente com barras duplas. Além dos certificados, que ficam em C:\ Program files\openvpn\keys, a maior parte da configuração que precisa ser modificada está no diretório cyptoapicert. Substitua a seção xx:xx... com a impressão digital do certificado. Sistemas Windows usam um depósito de certificados (certificate store), que armazena todos os certificados temporários e permanentes. Você pode usar uma API para analisá-lo em busca de e-tokens, por exemplo, no Microsoft Management Console. Clique em Iniciar/Executar e digite mmc para iniciar o programa; então acrescente o snap-in do certificado (figura 3). Na etapa final, escolha se o MMC deve abrir o depósito de certificados do usuário atual, da conta de serviço ou da conta do computador. Se houver mais de uma conta de usuário na máquina, você deve escolher 45
a conta do computador; se não, a conta do usuário serve. Depois, abra a crypto store e vá até My Certificates para analisar o token conectado. Clicar duas vezes no certificado dá uma visão geral das opções. Escolha a impressão digital, depois copie e cole em client.ovpn. Antes de sair do MMC, acrescente o certificado CA, ca.crt, como uma autoridade de certificação root para indicar que o e-token é confiável. O próximo passo não é obrigatório, mas ajuda em algumas situações. O parâmetro register-dns ajuda a habilitar as opções DHCP. Em alguns casos, o Windows não carrega a nova configuração de DNS depois de estabelecer o túnel; explicit-exit-notifiy ajuda a reconectar clientes rapidamente. Com Listagem 5: client.conf (Linux) 01 remote myopenvpn.exmaple.com 443 02 dev tun 03 proto tcp 04 client 05 tun-mtu 1500 06 ca /etc/openvpn/keys/ca.crt 07 tls-auth /etc/openvpn/keys/tls-auth.key 08 09 up /etc/openvpn/update-resolv-conf 10 down /etc/openvpn/update-resolv-conf 11 12 pkcs11-providers /usr/lib/libetpkcs11.so 13 pkcs11-id 'Aladdin\x20Knowledge\x20Systems\ x20ltd\xxx/etoken/0000xxxx/etoken\xxx\xxx\ xxxxxx/xxxx' 14 15 management 127.0.0.1 4711 16 management-query-passwords 17 18 cipher BF-CBC 19 comp-lzo 20 explicit-exit-notify 21 verb 3 Listagem 6: openvpn --show-pkcs11-ids... 01 The following objects are available for use. 02 Each object shown below may be used as parameter to 03 --pkcs11-id option please remember to use single quote mark. 04 05 Certificate 06 DN: /C=DE/ST=BY/L=Muenchen/O=Linux Magazin/OU=TR/CN=John_Doe/emailAddress= jd@example.com 07 Serial: 03 08 Serialized id: SafeNet\x20Inc\x2E/eToken/ xxxxxxxx/etoken/xxxxxxxxxxxxxxxxxx essa opção, o cliente OpenVPN informa ao servidor explicitamente quando sai, para que o servidor possa fechar a conexão de modo elegante; de outra maneira, o cliente precisa esperar até o esgotamento do parâmetro keepalive no servidor. Para permitir que usuários sem privilégios de administração se conectem com o Open- VPN, é preciso colocá-los no grupo local de Network Configuration Operators. No Windows 7, ainda é preciso clicar em OpenVPN GUI Client Properties e, dentro de Shortcut, clicar em Advanced. Depois, marque a opção Run as administrator. Se não fizer isso, o novo sistema UAC iria impedir a funcionalidade do túnel. Agora, quando você inicia a interface gráfica do OpenVPN, e clica com o botão direito no ícone da barra de início para abrir uma conexão, o cliente SAC pede pela senha do token. Caso a senha esteja correta, o túnel é configurado imediatamente. Clientes Linux Em clientes Linux, é preciso instalar os pacotes openvpn e pcscd, e a ferramenta SAC [7] (que depende da libhal0, entre outras). Distribuições novas fornecem a versão 1.7.0 do pcscd, que não mais é executado como daemon. O problema é que o SAC precisa de um daemon. No entanto, é possível corrigir isso comentando a linha exit 0 no script de inicialização /etc/init.d/pcscd. Então, você pode criar um arquivo client. conf, em /etc/openvpn/, como o da listagem 5. Os certificados precisam estar em /etc/ openvpn/keys. Como clientes Linux não podem usar o parâmetro dhcp-option, no lado do servidor, é preciso executar o script update-resolv-conf, fornecido pelo Open- VPN ou então disponível para download em [8]. O script converte a opção em comandos compreensíveis ao Linux, que então são executados na hora de criar ou desfazer o túnel. A diretriz pkcs-11-providers define o caminho da biblioteca SafeNet necessária para analisar o e-token; pkcs11-id especifica o e- -token usado nesse sistema (como a impressão digital da configuração Windows). Para descobrir a cadeia de caracteres de que você precisa, conecte o chaveiro USB e execute o seguinte comando: openvpn --show-pkcs11-ids /usr/lib/libetpkcs11.so 46 www.admin-magazine.com.br
A saída do comando está na listagem 6. Interface de gerenciamento Como sistemas Linux não têm o equivalente a uma crypto store Windows, é preciso uma técnica diferente para habilitar a verificação de senha do e-token. As linhas management e management-query-password ajudam nessa tarefa. Agora, se você iniciar o OpenVPN pelo console como usuário root e digitar openvpn --config /etc/openvpn/client.conf, a saída mostra as etapas que foram processadas até então. O programa geralmente para com a seguinte mensagem: openvpn --config /etc/openvpn/client.conf [...] Sun Aug 15 15:07:56 2011 Need password(s) from management interface, waiting... O OpenVPN está aguardando uma conexão Telnet na porta 4711 no host local. A interface de gerenciamento do OpenVPN recebe os usuários com a seguinte mensagem: telnet 127.0.0.1 4711 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. >INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info A interface OpenVPN requer uma sintaxe específica para a senha. Digitar o seguinte comando na sessão Telnet completa o truque: password 'etoken John_Doe' senha Aqui, senha é a senha do e-token. Se tudo correr bem, o OpenVPN irá agora configurar o túnel. Script para conexão Obviamente você não pode exigir que seus usuários façam tudo isso. Por isso, a equipe da Linux Magazine preparou um script Bash chamado Etovpn. Ele está disponível na versão de teste 0.42, incluindo pacotes Debian, Suse ou como tarball [8]. O script abre o túnel VPN ao fundo e pede a senha ao usuário. Então, repassa a senha ao OpenVPN através de uma sessão Telnet local. Você pode configurá-lo no arquivo /etc/ etovpn.conf. Tempo de conexão O diretório de configuração do cliente também oferece uma opção simples para ge- renciamento do tempo de conexão. Após habilitar a diretriz ccd-exclusive, é possível facilmente controlar o tempo de login de um usuário com um comando mv que move o arquivo de configuração para fora do diretório ccd. Um cronjob pode ajudar a automatizar esse processo e, assim, funcionários remotos ou fornecedores de serviços agora têm tempos de conexão predefinidos. Vale ressaltar uma precaução: essa restrição não se aplica a túneis pré-existentes; para isso, seria preciso derrubar o túnel através da interface de gerenciamento do servidor. Quadro 1: Servidores de email Embora o programa SAC exiba o botão Unlock etoken, ele se refere ao programa Token Management System (TMS), que também é oferecido pela SafeNet e usa a técnica de request/response para reativar tokens. Mas se você não usa o SafeNet TMS, ainda pode destravar um e-token bloqueado. Para fazer isso, faça login como administrador do e-token e digite uma nova senha; esse processo automaticamente destrava o token (figura 2). Mais informações [1] História de Aladdin: http:// en.wikipedia.org/wiki/aladdin [2] Safenet Aladdin: http://www.safenetinc.com/ [3] X.509: http://en.wikipedia.org/ wiki/x.509 [4] PKCS#11: http://en.wikipedia.org/ wiki/pkcs11 [5] OpenCA: http://www.openca.org/ [6] Programa SAC: http://www3.safenetinc.com/support/etoken_download.aspx [7] Cliente OpenVPN Windows: http:// openvpn.net/index.php/ open-source/ downloads.html [8] Etovpn: http://public.zii.krzn.de/ etovpn Gostou deste artigo? Veja este artigo em nosso site: http://www.lnm.com.br/admin/article/6151 Queremos ouvir sua opinião. Fale conosco em: cartas@admin-magazine.com.br 47