Um pouco de SysAdmin

linux, Telefonia IP, *BSD's, Segurança

Aumentando a segurança para autenticação ssh em sistemas GNU/Linux

leave a comment »

opensshBom 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.

Anúncios

Written by lucianoborguetti

novembro 1, 2009 às 11:06 pm

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: