A dica da semana é sobre como configurar o WordPress para autenticação de 2 fatores usando HOTP, de forma que você possa aumentar a segurança no acesso administrativo ao seu blog.
O processo de configuração na verdade é bastante simples, e consiste basicamente de apenas 3 etapas, sendo elas instalação de um Soft Token (no meu caso eu uso um para iPhone), configuração do apache e instalação de um plugin no wordpress.
Etapa 1 – O Soft Token
Se você fizer uma busca na AppStore da Apple irá encontrar uma grande quantidade de soft tokens, a principio qualquer software que siga a RFC 4226 irá funcionar, o software que eu utilizo é gratuito e se chama OATH Token , uma vez instalado a configuração é super simples e leva menos de 15 segundos. Ao executar o programa, clique no sinal de “+” localizado no canto superior direito do aplicativo, e será exibida a tela abaixo:

Nesta tela você deve atribuir um identificador ao seu token, no exemplo usei “Meu Token”, em seguida você deve gerar a sua chave de segurança, para isso clique algumas vezes no botão “Generate Randon Key”. Você irá precisar desta chave na configuração do webserver, então copie a mesma, e envie para você mesmo por e-mail
Agora devemos escolher se o nosso token será baseado em um contador de eventos ou em epoch time, esta escolha é importante pois afetará a forma como seu token irá funcionar.
Se você escolher a opção “Event Based”, cada vez que você usar o aplicativo e gerar uma senha OTP o contador será incrementado, se você gerar senhas e não utilizá-las o seu softtoken irá perder a sincronia com o seu servidor e você não irá mais conseguir se autenticar, sendo necessário resincronizar o Soft Token e o componente de autenticação no servidor.
Se você escolher a opção “Time Based”, o aplicativo irá gerar uma nova senha automaticamente a cada X segundos (definido nesta mesma tela), e o fator de sincronismo será o epoch time do seu dispositivo e o do seu servidor. Deste que a data e hora em ambos esteja sincronizada você não terá problemas de sincronismo por gerar senhas e não utiliza-las. Como o problema de sincronismo de horario é algo que você consegue resolver colocando um simples ntpdate no cron do seu servidor, eu recomendo que você escolha a opção de token baseada em tempo.
Feita esta escolha, os próximos items a serem definidos são a janela de tempo após a qual o software irá gerar uma nova senha, sugiro utilizar 30 segundos. O numero de digitos da senha OTP que vai ser gerada, sugiro utilizar 6 digitos. Para simplificar nossa vida na hora de digitar a senha vamos manter a opção de exibir a senha em Hexadecimal desabilitada.
E por ultimo você tem a opção de “travar” o token que esta criando impedindo que ele seja editado no futuro, o que é muito util se você desconfia que alguém com acesso fisico ao seu telefone pode tentar copiar a sua chave secreta. No nosso exemplo esta opção foi ativada.
Abaixo você pode ver uma tela do nosso novo token em funcionamento:

Etapa 2 – O Webserver (Apache 2.X)
Agora que já temos um token HOTP funcional, precisamos configurar o componente de autenticação que vai rodar do lado do servidor. Existem diversas formas de implementar este componente do lado do servidor mas o mais simples é através da instalação de um modulo especifico no webserver, no caso deste tutorial vamos usar o Apache 2.X.
O nome do módulo para o Apache 2.X que implementa autenticação HOTP é o mod-authn-otp , ele não é instalado por default com o webserver e terá que ser compilado manualmente. O download do código fonte do módulo por ser feito no url abaixo:
http://mod-authn-otp.googlecode.com/files/mod_authn_otp-1.1.1.tar.gz
Para compilá-lo você irá precisar do código fonte do apache (obrigatoriamente da mesma versão que vc já esta rodando), e do código fonte do openssl.
Ao descompactar o arquivo será criado o diretorio mod_authn_otp-1.1.1, dentro dele você vai encontrar o arquivo INSTALL que tem as instruções de como compilar o módulo, como podem imaginar o processo consiste basicamente num:
# ./configure
# make
# make install
Se compilando desta forma você receber algum erro ao iniciar o seu webserver, recomendo que execute a compilação do módulo usando o apxs:
# tar xzvf mod_authn_otp-1.1.1.tar.gz
# cd mod_authn_otp-1.1.1
# apxs -c mod_authn_otp.c
# apxs -i -a -n "authn_otp" mod_authn_otp.la
# /etc/init.d/httpd restart
O próximo passo é editar a configuração do apache e incluir as diretivas no httpd.conf que vão “proteger” com a autenticação OTP o acesso administrativo do seu wordpress, ou seja, devemos restringir o acesso basicamente ao diretorio wp-admin, e dependendo da sua necessidade também ao arquivo wp-login.php:
<FilesMatch "wp-login\.php$">
AuthType basic
AuthName "Area Restrita"
AuthBasicProvider OTP
Require valid-user
OTPAuthUsersFile /usr/local/www/otp/mod_auth_otp
OTPAuthMaxOffset 6
OTPAuthMaxLinger 3600
</FilesMatch>
<Location /wp-admin>
AuthType basic
AuthName "Area Restrita"
AuthBasicProvider OTP
Require valid-user
OTPAuthUsersFile /usr/local/www/otp/mod_auth_otp
OTPAuthMaxOffset 6
OTPAuthMaxLinger 3600
</Location>
Se você preferir as mesmas diretivas podem ser ativadas através de um .htaccess ao invés de serem inseridas diretamente no httpd.conf.
Acima coloquei em vermelho os 3 parametros que você deve configurar de acordo com a sua necessidade:
- OTPAuthUsersFile – Arquivo no qual você irá manter os dados dos usuários. O usuário que roda seu webserver precisa de permissão de escrita neste arquivo, pois ele será alterado sempre que um usuário se logar;
- OTPAuthMaxOffset – Qual a diferença em segundos para mais ou para menos que você aceita entre o token e o servidor;
- OTPAuthMaxLinger – Segundos após o qual o usuário terá que se autenticar novamente.
Agora que já incluiu as diretivas na configuração do seu webserver é hora de criar o arquivo com os seus usuários, o formato do arquivo é bem simples, sendo composto inicialmente por 4 colunas separadas por espaço em branco:
- Tipo do token – No nosso caso vamos usar HOTP/T30 (token baseado em tempo de 30 segundos, com 6 digitos);
- Username - Utilize o mesmo login que você usa no WordPress;
- PIN – Especifique uma senha alfa numerica para digitar antes da senha OTP, se quiser usar apenas a senha OTP use – nesta coluna;
- Chave secreta do token – Insira nesta coluna a chage randômica que você criou la no seu soft token.
Ou seja, a linha para um usuário recem adicionado seria parecida com esta:
HOTP/T30 login1 w3Ro a4d8acbddef654fccc418db4cc2f85cea6339f00
De forma que se o Soft Token estiver exibindo a senha 486842, a senha que o usuário login1 teria que utilizar para se autenticar no webserver seria w3Ro486842.
Quando o usuário realizar sua primeira autenticação o webserver irá editar o arquivo acima, adicionando outras 3 colunas:
- Offset atual, para que você saiba o quão sincronizado está o relógio do token e o relógio do servidor;
- A senha OTP que foi inserida pelo usuário
- A data e hora da ultima autenticação
A linha deste arquivo para o usuário login 1 após a sua primeira autenticação seria parecida com esta:
HOTP/T30 login1 w3Ro a4d8acbddef654fccc418db4cc2f85cea6339f00 1 486842 2011-02-14T21:17:03L
Na documentação disponível do site do mod_authn_otp você encontra maiores detalhes sobre os tipos de token suportados pelo módulo.
Agora que já completamos a configuração, restarte seu webserver e verifique se você está conseguindo se autenticar usando o seu token ao tentar acessar o diretorio wp-admin.
Etapa 3 – O WordPress
Agora que já temos o token e o servidor configurados para se autenticar usando o sistema HOTP,você pode optar por parar aqui, ou seja, você prefere se autenticar 2 vezes, uma com o token no Apache e outra depois no wordpress (/Paranoia Mode On).
Ou então você pode optar por configurar o wordpress para utilizar apenas a autenticação do apache, o que para muitos já vai ser seguro o suficiente considerando que a senha vai mudar a cada 30 segundos.
Se você optar por utilizar apenas a autenticação do Apache, você deve instalar no seu WordPress o plugin HTTP Authentication.
A configuração dele é bem simples, bastando criar no wordpress um usuário com o mesmo login que o que você especificou na autenticação do apache, no nosso exemplo, bastaria criar um usuário no wordpress com o campo Nickname igual a login1.
Observe que uma vez que este plugin for ativado todo usuário que você editar o profile vai ter a sua senha nativa no wordpress alterada para uma senha aleatória, afinal você não vai mais precisar dela, se no futuro você decidir parar de utilizar a autenticação OTP, basta usar a funcionalidade do wordpress de resetar a senha (depois de desabilitar o mod_authn_otp) para poder acessar novamente seu blog.
Não disse que era simples
Espero que o tutorial seja util a vocês.
[ ]´s Edson