SSH port knocking – KNOCKD

Tecnologia infraestrutura e desenvolvimento

SSH port knocking – KNOCKD

Desta vez irei demonstrar como adicionar uma camada simples e eficiente para acesso via SSH em Firewall Linux criando uma blindagem extra bem interessante.
Na teoria para que vc tenha acesso ao seu Firewall remotamente vc acaba deixando a porta (22) SSH aberta e isso pode lhe causar varias tentativas de invasão. Sejam elas, simples tentativa em descobrir usuário e senhas com menor complexidade ou métodos mais avançado como SSH-BRUTEFORCE.

Hoje irei mostrar uma técnica muito utilizada contra Hacker utilizando-se da ferramenta KNOCKD, a outra técnica usando IPTABLES to acabando de escrever assim que tiver finalizado posto aqui.

Sem mais vamos aos trabalhos ….

Obs: Lembrando que todos esses exemplos estou me baseando em um CentoS 6.3

METODO 1 – KNOCK via daemon

Vamos instalar o knock-server via repositório para isso execute o comando abaixo:

# rpm -ivh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-1.el6.nux.noarch.rpm

Depois de instalado o Repositório do Knockd vamos instalar a versão server do mesmo:

# yum install knock-server

Após instalar o knock-server vamos configura-lo OK, para isso edite o arquivo knockd.conf

# vim /etc/knockd.conf

[options]
logfile = /var/log/knockd.log
Interface = eth0 # Esta e a interface do meu linux pode ser qq outra OK.

[openSSH]

sequence = 7080:tcp,8111:udp,9043:udp
seq_timeout = 5
command = /sbin/iptables -I INPUT -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]

sequence = 9043:udp,8111:udp,7080:tcp
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn

Vejam que no meu exemplo configurei 3 Estagio ou Sequências para dificultar o acesso, podem sem configurados mais estágios, mais isso fica a gosto do cliente ou do nível de stress do nosso administrador de redes em relação a segurança.

Após configurarmos o arquivo vamos subir o serviço e testa-lo

# chkconfig knockd on
# service knockd start

Agora vamos bloquear de vez a porta 22 (SSH) da maquina para que ninguém tenha acesso para isso execute os comando abaixo:

Mudando a policy da chain INPUT para DROP neste momento barra qualquer pacote destinado a INPUT

# iptables -P INPUT DROP

Rejeita qualquer pacote que seja direccionado para a INPUT com destino na porta 22. Blindagem extra não há necessidade porque na regra acima ja estamos barrando tudo mas para os psicopatas em segurança, segurança nunca e D+ .

# iptables -A INPUT -s 0/0 -d 192.168.0.117 -p tcp –dport 22 -j REJECT

Testando

# ssh 192.168.0.117 -l dejano -p 22
ssh: connect to host 192.168.0.117 port 22: Connection refused

Neste momento alem da policy estar como DROP qualquer pacote com destino a porta 22 será Rejeitado vejam que da ” Connection refused “

Bom fizemos a parte do Server e testamos e concluímos que realmente esta fechada a porta 22 (SSH) OK, agora vamos instalar o client knockd para acesso ao SSH.

Caso vc esteja usando Ubuntu 13.04 x64 como o meu baixe e instale este pacote para Ubuntu link abaixo, agora se vc estiver usando o próprio CentoS para teste e só instalar via repositório: yum install knockd beleza??

http://launchpadlibrarian.net/8972854/knockd_0.5-2ubuntu2_amd64.deb

Após vc instalar o knockd em seu Ubuntu ou qualquer outra distribuição vamos executar o desbloqueio das sequências para termos acesso a porta 22 (SSH) do nosso Firewall para isso execute no shell de seu linux:

knock 192.168.0.117 7080:tcp 8111:udp 9043:udp

Sintaxe = COMANDO + IP_FIREWALL + PORT_A + PORT_B + PORT_C

Vejam depois que no Log ele faz o desbloqueio das sequências que configuramos no arquivo /etc/knockd.conf e insere uma entrada na chain INPUT para o nosso acesso.

tail -f /var/log/knockd.log

[2013-06-13 00:22] 192.168.0.17: openSSH: Stage 1
[2013-06-13 00:22] 192.168.0.17: openSSH: Stage 2
[2013-06-13 00:22] 192.168.0.17: openSSH: Stage 3
[2013-06-13 00:22] 192.168.0.17: openSSH: OPEN SESAME
[2013-06-13 00:22] openSSH: running command: /sbin/iptables -A INPUT -s 192.168.0.17 -p tcp –dport ssh -j ACCEPT

# iptables -n -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp — 192.168.0.17 0.0.0.0/0 tcp dpt:22 <- Liberando o meu IP
REJECT tcp — 0.0.0.0/0 192.168.0.117 tcp dpt:22 reject-with icmp-port-unreachable

Teste Final

# ssh 192.168.0.117 -l dejano -p 22
dejano@192.168.0.117’s password: *********
Last login: Thu Jun 13 03:31:55 2013 from 192.168.0.17
[dejano@localhost ~]$

Bom até aqui vimos como foi feito uma blindagem na porta (22) SSH utilizando o KNOCKD para dificultar uma tentativa de intrusão, somente quem conhece a sequência dos estagios vai conseguir habilitar o acesso e claro que existem métodos para saber sobre tudo isso que mostrei acima, aqui ensinei como proteger em um próximo post ensino como descobrir e quebrar essa técnica.

OBS: Lembrando pessoal que nunca deixem a porta padrão habilitada pois é um alvo muito fácil para os atacantes sempre troque algumas portas default por outros números tipo a 22 (SSH) coloque mais alguns números na frente tipo 43522 no arquivo /etc/ssh/sshd_config na linha Port 22 substituindo para ” Port 43522 ” isso e uma dica dai vc pode usar a sua criatividade vai dificultar ainda mais a acção.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *