Por padrão, o FreeBSD inclui suporte para senhas de uso único em tudo (OPIE). O OPIE é projetado para evitar ataques repetidos, nos quais um atacante descobre a senha de um usuário e a usa para acessar um sistema. Como uma senha é usada apenas uma vez em OPIE, uma senha descoberta é de pouca utilidade para um invasor. O OPIE usa um hash seguro e um sistema de desafio/resposta para gerenciar senhas. A implementação do FreeBSD usa o hash MD5 por padrão.
O OPIE usa três tipos diferentes de senhas. A primeira é a senha usual UNIX® ou Kerberos. A segunda é a senha única que é gerada pelo opiekey
. O terceiro tipo de senha é a “senha secreta” que é usada para gerar senhas de uso único. A senha secreta não tem nada a fazer com ela e deve ser diferente da senha UNIX®.
Existem duas outras partes de dados importantes para o OPIE. Uma é o “seed” ou “chave”, composta por duas letras e cinco dígitos. A outra é a “contagem de iteração”, um número entre 1 e 100. O OPIE cria a senha única concatenando o seed e a senha secreta, aplicando o hash MD5 quantas vezes forem especificadas pela contagem de iterações e transformando o resultado em seis palavras inglesas curtas que representam a senha de uso único. O sistema de autenticação controla a última senha descartável usada e o usuário é autenticado se o hash da senha fornecida pelo usuário for igual à senha anterior. Como um hash unidirecional é usado, é impossível gerar futuras senhas de uso único se uma senha usada com êxito for capturada. A contagem de iteração é diminuída após cada login bem-sucedido para manter o usuário e o programa de login em sincronia. Quando a contagem de iterações descer para 1
, o OPIE deve ser reinicializado.
Existem alguns programas envolvidos neste processo. Uma senha de uso único, ou uma lista consecutiva de senhas de uso único, é gerada passando uma contagem de iteração, um seed e uma senha secreta para o opiekey(1). Além de inicializar o OPIE, o opiepasswd(1) é usado para alterar senhas, contagens de iteração ou seeds. Os arquivos de credenciais relevantes em /etc/opiekeys
são examinados pelo opieinfo(1) o qual imprime a iteração atual e o seed do usuário solicitante atual.
Esta seção descreve quatro tipos diferentes de operações. A primeira é como configurar senhas de uso único pela primeira vez em uma conexão segura. A segunda é como usar o opiepasswd
em uma conexão insegura. A terceira é como efetuar login em uma conexão insegura. A quarta é como gerar um número de chaves que podem ser escritas ou impressas para uso em locais inseguros.
Para inicializar o OPIE pela primeira vez, execute este comando a partir de um local seguro:
%
opiepasswd -c
Adding unfurl: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: Again new secret pass phrase: ID unfurl OTP key is 499 to4268 MOS MALL GOAT ARM AVID COED
A opção -c
define o modo de console que assume que o comando está sendo executado de um local seguro, como um computador sob o controle do usuário ou uma sessão SSH para um computador sob o controle do usuário.
Quando solicitado, insira a senha secreta que será usada para gerar as chaves de login de uso único. Essa senha deve ser difícil de adivinhar e deve ser diferente da senha associada à conta de login do usuário. Deve ter entre 10 e 127 caracteres. Lembre-se desta senha.
A linha ID
lista o nome de login (unfurl
), a contagem de iterações padrão (499
) e o seed padrão (to4268
). Ao efetuar o login, o sistema lembrará esses parâmetros e os exibirá, o que significa que eles não precisam ser memorizados. A última linha lista a senha única gerada que corresponde a esses parâmetros e a senha secreta. No próximo login, use essa senha única.
Para inicializar ou alterar a senha secreta em um sistema inseguro, é necessária uma conexão segura em algum lugar onde o opiekey
possa ser executado. Isso pode ser um prompt de shell em uma máquina confiável. Uma contagem de iteração é necessária, em que 100 é provavelmente um bom valor, e o seed pode ser especificado ou a gerado aleatoriamente. Na conexão insegura, a máquina sendo inicializada, use opiepasswd(1):
%
opiepasswd
Updating unfurl: You need the response from an OTP generator. Old secret pass phrase: otp-md5 498 to4268 ext Response: GAME GAG WELT OUT DOWN CHAT New secret pass phrase: otp-md5 499 to4269 Response: LINE PAP MILK NELL BUOY TROY ID mark OTP key is 499 gr4269 LINE PAP MILK NELL BUOY TROY
Para aceitar o seed padrão, pressione Return. Antes de inserir uma senha de acesso, passe para a conexão segura e forneça os mesmos parâmetros:
%
opiekey 498 to4268
Using the MD5 algorithm to compute response. Reminder: Do not use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT
Volte para a conexão insegura e copie a senha única gerada para o programa relevante.
Depois de inicializar o OPIE e efetuar login, um prompt como este será exibido:
%
telnet example.com
Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login:<username>
otp-md5 498 gr4269 ext Password:
Os prompts do OPIE fornecem um recurso útil. Se o Enter for pressionado no prompt de senha, o prompt ativará o echo e exibirá o que foi digitado. Isso pode ser útil ao tentar digitar uma senha manualmente a partir de uma impressão.
Neste ponto, gere a senha de uso único para responder a este aviso de login. Isso deve ser feito em um sistema confiável em que seja seguro executar o opiekey(1). Existem versões deste comando para Windows®, Mac OS® e FreeBSD. Esse comando precisa da contagem de iteração e do seed como opções da linha de comandos. Use recortar e colar no prompt de login da máquina que está sendo conectada.
No sistema confiável:
%
opiekey 498 to4268
Using the MD5 algorithm to compute response. Reminder: Do not use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT
Depois que a senha descartável for gerada, continue a logar.
Às vezes, não há acesso a uma máquina confiável ou conexão segura. Neste caso, é possível usar o opiekey(1) para gerar algumas de senhas de uso único antecipadamente. Por exemplo:
%
opiekey -n 5 30 zz99999
Using the MD5 algorithm to compute response. Reminder: Do not use opiekey from telnet or dial-in sessions. Enter secret pass phrase:<secret password>
26: JOAN BORE FOSS DES NAY QUIT 27: LATE BIAS SLAY FOLK MUCH TRIG 28: SALT TIN ANTI LOON NEAL USE 29: RIO ODIN GO BYE FURY TIC 30: GREW JIVE SAN GIRD BOIL PHI
A opção -n 5
solicita cinco chaves em seqüência e 30
especifica qual deve ser o último número de iteração. Note que estes são impressos na ordem reversa de uso. O usuário realmente paranóico pode querer escrever os resultados manualmente; caso contrário, imprima a lista. Cada linha mostra a contagem de iteração e a senha de uso único. Risque as senhas conforme elas forem usadas.
O OPIE pode restringir o uso de senhas UNIX® com base no endereço IP de uma sessão de login. O arquivo relevante é o /etc/opieaccess
, que está presente por padrão. Consulte opieaccess(5) para obter maiores informações sobre esse arquivo e sobre quais considerações de segurança você deve estar ciente ao usá-lo.
Aqui está um exemplo do arquivo opieaccess
:
permit 192.168.0.0 255.255.0.0
Esta linha permite que os usuários cujo endereço de origem IP (que é vulnerável a spoofing) corresponda ao valor e à máscara especificados, para usar as senhas UNIX® a qualquer momento.
Se nenhuma regra do arquivo opieaccess
for correspondida, o padrão é negar logins que não sejam OPIE.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.