Escrito em por arquivado em Blog, Debian, Segurança, SSH. Total de Acessos:266.

No texto anterior eu mostrei algumas práticas que utilizo tentando deixar os meus acessos via SSH mais seguros e no fim do artigo deixei uma promessa que faria esse texto falando sobre o SSHFP RR (Secure Shell Host Finger Print Resource Record).

Listado na RFC 4255, o SSHFP é um registro de DNS contendo o finger print do ssh de um determinado host, fazendo com que, caso solicitado, o cliente ssh (openssh-client) consulte no DNS o finger print do host, adicionando uma camada a mais de confiabilidade na conexão, evitando por exemplos ataques de Man in the Middle, principalmente para quem utiliza um host como tunnel ssh.

O Primeiro passo é obter os finger print do host com o comando ssh-keygen:
root@dio:~# ssh-keygen -r $HOSTNAME
dio.diegoneves.eti.br IN SSHFP 1 1 c9d56bbf56e46823c559d2ad7e336b408aeef3c0
dio.diegoneves.eti.br IN SSHFP 1 2 e83a1856dc4d20ae975298add1e275101356cab11834ab41b366abc230f079be
dio.diegoneves.eti.br IN SSHFP 2 1 64cd304575830c0b75d8766914a5fbe6c6d5cdde
dio.diegoneves.eti.br IN SSHFP 2 2 700a20e714bfd49ff34e208f743a05893c850dd2f574c8bdb2e546d089f98e65
dio.diegoneves.eti.br IN SSHFP 3 1 691f9b3d57a5aeb126f62ffec86f6dc268e86fe5
dio.diegoneves.eti.br IN SSHFP 3 2 a263b8ae9d803c3a1d1cc309855aae5bd39f3c0b59f4fa1d7f626e3891c178a6
dio.diegoneves.eti.br IN SSHFP 4 1 984ab11bdbbe71b66a461038127da269aa41f449
dio.diegoneves.eti.br IN SSHFP 4 2 4a1954809596b08755438046a1095aebac58d4e9faa635f138ad49649240b353

Onde a estrutura é:
[Nome] [TTL] [Classe] SSHFP <Algoritmo> <Tipo> <Fingerprint>

  • Nome: nome do host no domínio
  • TTL: Time to live (opcional)
  • Classe: Grupo de protocolos ao qual o registro pertence (opcional)
  • Algoritmo: Algoritmo da chave pública (0=reservado, 1=RSA, 2=DSA, 3=ECDSA, 4=Ed25519)
  • Tipo: Tipo da fingerprint (0=reservado, 1=SHA-1, 2=SHA-256)
  • Fingerprint: Representação em hexadecimal do hash.

Após a obter os registros, salve no arquivo da zona de DNS, altere o serial e reinicie o serviço:
$TTL 3D
@ SOA ns1.diegoneves.eti.br. diego.diegoneves.eti.br. (
2017011501
[...]

dio A 104.236.199.190
dio AAAA 2604:a880:800:10::22ac:f001
dio SSHFP 1 1 c9d56bbf56e46823c559d2ad7e336b408aeef3c0
dio SSHFP 1 2 e83a1856dc4d20ae975298add1e275101356cab11834ab41b366abc230f079be
dio SSHFP 2 1 64cd304575830c0b75d8766914a5fbe6c6d5cdde
dio SSHFP 2 2 700a20e714bfd49ff34e208f743a05893c850dd2f574c8bdb2e546d089f98e65
dio SSHFP 3 1 691f9b3d57a5aeb126f62ffec86f6dc268e86fe5
dio SSHFP 3 2 a263b8ae9d803c3a1d1cc309855aae5bd39f3c0b59f4fa1d7f626e3891c178a6
dio SSHFP 4 1 984ab11bdbbe71b66a461038127da269aa41f449
dio SSHFP 4 2 4a1954809596b08755438046a1095aebac58d4e9faa635f138ad49649240b353
[...]
root@ns1:~# systemctl restart bind9.service

Para efetuar uma verificação, pode ser utilizado o comando “dig”:
diego@vader:~$ dig sshfp dio.diegoneves.eti.br
; <<>> DiG 9.10.3-P4-Debian <<>> sshfp dio.diegoneves.eti.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2284
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;dio.diegoneves.eti.br. IN SSHFP

;; ANSWER SECTION:
dio.diegoneves.eti.br. 259200 IN SSHFP 3 1 691F9B3D57A5AEB126F62FFEC86F6DC268E86FE5
dio.diegoneves.eti.br. 259200 IN SSHFP 4 1 984AB11BDBBE71B66A461038127DA269AA41F449
dio.diegoneves.eti.br. 259200 IN SSHFP 4 2 4A1954809596B08755438046A1095AEBAC58D4E9FAA635F138AD4964 9240B353
dio.diegoneves.eti.br. 259200 IN SSHFP 3 2 A263B8AE9D803C3A1D1CC309855AAE5BD39F3C0B59F4FA1D7F626E38 91C178A6
dio.diegoneves.eti.br. 259200 IN SSHFP 2 2 700A20E714BFD49FF34E208F743A05893C850DD2F574C8BDB2E546D0 89F98E65
dio.diegoneves.eti.br. 259200 IN SSHFP 1 1 C9D56BBF56E46823C559D2AD7E336B408AEEF3C0
dio.diegoneves.eti.br. 259200 IN SSHFP 2 1 64CD304575830C0B75D8766914A5FBE6C6D5CDDE
dio.diegoneves.eti.br. 259200 IN SSHFP 1 2 E83A1856DC4D20AE975298ADD1E275101356CAB11834AB41B366ABC2 30F079BE

;; Query time: 209 msec
;; SERVER: 200.175.89.139#53(200.175.89.139)
;; WHEN: Sun Jan 15 22:03:29 BRST 2017
;; MSG SIZE rcvd: 370

Após efetuar a verificação, vamos fazer uma conexão utilizando a checagem do finger print via ssh:
diego@vader:~$ ssh -o "VerifyHostKeyDNS ask" dio.diegoneves.eti.br
The authenticity of host 'dio.diegoneves.eti.br (2604:a880:800:10::22ac:f001)' can't be established.
ECDSA key fingerprint is SHA256:omO4rp2APDodHMMJhVquW9OfPAtZ9Podf2JuOJHBeKY.
Matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)?

Para facilitar o uso dessa opção, é possível configurar no arquivo config na pasta do usuario: /home/usuario/.ssh/config da seguinte forma:
host dio.diegoneves.eti.br
VerifyHostKeyDNS ask

Agora para validar se realmente a opção está funcionando, podemos criar um registro no arquivo /etc/hosts
root@vader:~# echo "::1 dio.diegoneves.eti.br" >> /etc/hosts
root@vader:~# echo "127.0.0.1 dio.diegoneves.eti.br" >> /etc/hosts

E vamos efetuar uma nova conexão:
diego@vader:~$ ssh dio.diegoneves.eti.br
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:RUMY471EAgDPkHRECU4pS7v1H1pig1ECxwwd6oXNjpU.
Please contact your system administrator.
Update the SSHFP RR in DNS with the new host key to get rid of this message.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:RUMY471EAgDPkHRECU4pS7v1H1pig1ECxwwd6oXNjpU.
Please contact your system administrator.
Add correct host key in /home/diego/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/diego/.ssh/known_hosts:39
remove with:
ssh-keygen -f "/home/diego/.ssh/known_hosts" -R dio.diegoneves.eti.br
ECDSA host key for dio.diegoneves.eti.br has changed and you have requested strict checking.
Host key verification failed.

Após a verificação, vamos remover as entradas do arquivo /etc/hosts ,para que o host aponte para endereço correto.

Caso você queira testar a Digital Ocean, ela está dando $10, basta clicar neste link, efetuar o cadastro e cadastrar o cartão de crédito para cobrança e começar a brincadeira. Como a tarifação é por hora, dá pra fazer muitos testes legais por lá utilizando apenas os 10 dólares.