Aumentando a segurança para autenticação ssh em sistemas GNU/Linux
Bom aqui vai uma dica para aumentar a segurança para autenticação ssh no seu sistema GNU/Linux usando Port Knocking e One Time Password.
Para fazer o Port Knocking vamos utilizar Netfilter/Iptables com o módulo Recent e para o One Time Password o módulo do Pam chamado opie.
Pode parecer um pouco de paranóia, mais segurança nunca é de mais.
* Port Knocking usando Netfilter/Iptables.
Como funciona?
A idéia aqui é manter a porta do ssh bloqueada, só liberar o acesso para o host que fazer uma conexão em outra porta do sistema e também deixar essa conexão liberada somente por alguns segundos.
Assumindo que a porta do ssh é a padrão (22) e que a porta que vamos usar para fazer a liberação do acesso é a porta 25128.
Para conseguir acesso ao ssh:
usuario@bob-esponja:~$ ssh usuario@IP_DO_SERVIDOR -p 25128
ou
usuario@bob-esponja:~$ telnet IP_DO_SERVIDOR 25128
Agora sim, conseguimos a conexão normalmente
usuario@bob-esponja:~$ ssh usuario@IP_DO_SERVIDOR
Exemplo de regras para Port Knocking utilizando Netfilter/Iptables usando o módulo Recent.
usuario@bob-esponja:~# externa=eth0
usuario@bob-esponja:~# portknock=25128
usuario@bob-esponja:~# iptables -t mangle -A PREROUTING -p tcp –dport $portknock -m state –state NEW -m recent –name SSH –set
usuario@bob-esponja:~# iptables -t filter -A INPUT -p tcp –dport 22 -m recent –name SSH –rcheck –seconds 10 -j ACCEPT
usuario@bob-esponja:~# iptables -t filter -A INPUT -i $externa -p tcp –dport 22 -m state –state NEW -j REJECT
Obs: Após a liberação o acesso ao ssh só é permitido para o host que fez a conexão na porta 25128 por 10 segundos.
Obs2: Estamos usando como exemplo a porta padrão do ssh (22), mais aconselho em ambiente em produção também alterar a porta do ssh.
* One Time Password
Com o OTP vamos utilizar uma “contra senha” antes de solicitar a senha do seu usuário.
E essa “contra senha” será utilizada apenas uma única vez, após a utilização ela pode ser descartada, pois não será mais solicitada.
Utilizando Debian/Ubuntu
usuario@bob-esponja:~# aptitude install opie-server libpam-opie
Configuração
usuario@bob-esponja:~# vi /etc/pam.d/sshd
Acima de
——-
# Standard Un*x authentication.
@include common-auth
——-
Adicione:
———- recorte ———–
# One Time Password
auth required pam_opie.so
———- recorte ———–
Agora edite o arquivo /etc/ssh/sshd_config
“ChallengeResponseAuthentication” deve ser configurado para “yes”
——-
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes
——-
Reinicie o ssh
usuario@bob-esponja:~# /etc/init.d/ssh restart
Precisamos adicionar nosso usuário na base de dados do Opie, para permitir o uso do One Time Password para esse usuário
usuario@bob-esponja:~# opiepasswd -c usuario -s usuario
Por padrão a sequencia de senhas terão inicio em 499.
Será solicitada uma “pass phrase” que será utilizada para a criação das senhas OTP
Após adicionar o usuário no Opie, vamos criar algumas senhas.
# opiekey -n 10 -x 499 usuario
A saída do comando será algo como:
usuario@bob-esponja:~$ opiekey -n 10 -x 499 usuario
Using the MD5 algorithm to compute response.
Reminder: Don’t use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
490: 19FD 71FE CFEF EE93
491: C9C2 A929 FD38 341F
492: 3427 12CA 2188 557E
493: D513 2B4D B38E A262
494: 8BCB 1EAA B4AD B3F7
495: C008 E161 B4DB 5EF1
496: 9FEA 5A93 8025 06F6
497: 4F8F 17AE 0616 BE07
498: 5F1E BF3B 2BA1 92B4
499: 6104 DDE3 3BE4 E9BE
Pronto, agora já da pra fazer os testes com o OTP
Obs: A parte legal aqui é que pode ser gerada somente a senha solicitada na hora da autenticação. Também existem programas para criação das senhas que rodam em smartphones/palm’s.
usuario@bob-esponja:~$ ssh localhost
otp-md5 497 usuario ext, Response:
Após entrar-mos com a senha solicitada (497),
usuario@bob-esponja:~$ ssh localhost
otp-md5 497 usuario ext, Response: 4F8F 17AE 0616 BE07
Será solicitada a senha do usuário realmente
usuario@bob-esponja:~$ ssh localhost
otp-md5 497 usuario ext, Response:
Password:
Obs: Caso a senha OTP não for a correta (ou mesmo em branco), será solicitado a senha do usuário, porém como no pam está configurado requirindo a autenticação OTP, a autenticação da senha do usuário não vai funcionar.
Bom agora é só testar tudo, temos ai Port Knocking + OTP (usando como contra senha).
Avaliando o que temos de segurança, agora para um atacante conseguir acesso ao nosso servidor por ssh ele precisa:
1° – Descobrir a porta do Port Knocking;
2°- Descobrir a porta do ssh, caso não seja a padrão (é interessente deixar a porta do ssh e a usada para o Port Knocking bem dispares);
3° – A contra senha;
4° – A senha do usuário.
Considerações:
Existem outras técnicas de Port Knocking para o GNU/Linux que adicionam ainda mais segurança do que essa técnica utilizando o módulo Recent do Netfilter.
Nenhum trackbacks ainda.