$ ssh -Q kex diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 curve25519-sha256@libssh.org gss-gex-sha1- gss-group1-sha1- gss-group14-sha1-Pro bezpečné nastavení je vhodné eliminovat použití *-sha1. Rovněž ECDH se považuje kvůli potenciálním útokům za rizikové a stejně tak DH nad group1, kde již nemusí dostačovat využívaných 1024bitů. Tím zůstává prakticky použitelné nastavení
/etc/ssh/sshd_config
:
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256Použití
diffie-hellman-group-exchange-sha256
ale zároveň vede ke kontrole /etc/ssh/moduli
. V tomto souboru jsou uložena prvočísla, které DH využívá. Je žádoucí eliminovat všechny, které mají svoji délku ostře menší než 2047 bitů (hodnota v patém sloupci).
Klient ověřuje identitu serveru na základě podpisu, který server provede na dohodnutém klíči. K tomu lze využít:
Ve verzi 1 SSH protokolu se používal i rsa1, což je dnes již principiálně zastaralá verze.
Z nabízených klíčů je vhodné eliminovat *DSA (implikuje klíče velikosti pouhých 1024bitů a navíc možné NIST dírky pro NSA). V konfiguraci by se tedy měly objevit pouze tyto klíče a navíc s výhradním uvedením protokolu 2, neboť protokol 1 je překonaný:
Protocol 2 HostKey /etc/ssh/ssh_host_ed25519_key HostKey /etc/ssh/ssh_host_rsa_key
Příslušné klíče většinou vygeneruje startovací skript, manuálně lze totéž provést pomocí:
# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key # ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key # chmod 640 /etc/ssh/*_key
Podobně jako u serveru, i klient musí prokázat svoji identitu. Může tak učinit pomocí jména a hesla, ale s ohledem na možnou kompromitaci serveru je vhodnější tento způsob co nejdříve zakázat. Nejobvyklejší je pak ověřování pomocí veřejného klíče. Nastavení by proto mělo být:
PasswordAuthentication no ChallengeResponseAuthentication no PubkeyAuthentication yes
Klient by měl rovněž vyžadovat jen výše uvedené bezpečné algoritmy s ohledem na jejich dostupný seznam:
$ ssh -Q key ssh-ed25519 ssh-ed25519-cert-v01@openssh.com ssh-rsa ssh-dss ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-rsa-cert-v01@openssh.com ssh-dss-cert-v01@openssh.com ecdsa-sha2-nistp256-cert-v01@openssh.com ecdsa-sha2-nistp384-cert-v01@openssh.com ecdsa-sha2-nistp521-cert-v01@openssh.comNa straně klienta (
/etc/ssh/ssh_config
) z toho vychází:
Host * PasswordAuthentication no ChallengeResponseAuthentication no PubkeyAuthentication yes HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
Obdobně jako na serveru, klient musí vygenerovat své vlastní klíče:
$ ssh-keygen -t ed25519 $ ssh-keygen -t rsa
Nová verze OpenSSH nabízí silnější ochranu před zcizením klíčů. Využívá k tomu nový formát uložení místo standardního PEM, a možnost nastavení počtu použití KDF (key-derivation-function):
$ ssh-keygen -t ed25519 -o -a 99 $ ssh-keygen -t rsa -o -a 99
Až teprve nyní vstupuje do hry samotné šifrování. K dispozici jsou následující algoritmy:
$ ssh -Q cipher 3des-cbc blowfish-cbc cast128-cbc arcfour arcfour128 arcfour256 aes128-cbc aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com chacha20-poly1305@openssh.com
Z tohoto seznamu nejsou bezpečné šifry používající DES (3des*) a RC4 (arcfour*). Délka klíče pod 128bitů se dnes ukazuje jako zcela nedostatečná, obecně se vyplatí delší klíče. Buď algoritmy s krátkými klíči úplně vyloučíme, anebo je uvedeme v pořadí s ohledem na jejich prioritu.
U šifrování, které není proudové, je žádoucí používat jen bloky velikosti nad 128bitů. Opatrně tedy s CAST5 a Blowfish. Proto je vhodné povolit chacha20-poly1305 a GCM varianty. Z důvodu kompatibility lze ještě povolit CTR varianty. V/etc/ssh/sshd_config
se uvede:
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com # optional: ,aes256-ctr,aes192-ctr,aes128-ctrNa straně klienta v
/etc/ssh/ssh_config
:
Host * Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com # optional: ,aes256-ctr,aes192-ctr,aes128-ctr
Se šifrováním úzce souvisí autentizace. K dispozici jsou tyto algoritmy:
$ ssh -Q mac hmac-sha1 hmac-sha1-96 hmac-sha2-256 hmac-sha2-512 hmac-md5 hmac-md5-96 hmac-ripemd160 hmac-ripemd160@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha1-etm@openssh.com hmac-sha1-96-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-md5-etm@openssh.com hmac-md5-96-etm@openssh.com hmac-ripemd160-etm@openssh.com umac-64-etm@openssh.com umac-128-etm@openssh.comOkamžitě můžeme vyloučit sha1 a md5. Rovněž výsledná značka pod 128bitů není prakticky použitelná (umac-64*). Podobně jako u IPsec by měly být používány jen varianty EtM (Encrypt then Mac). Na serveru, v
/etc/ssh/sshd_config
by proto mělo být:
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com # optional: ,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.comNa klientovi, v
/etc/ssh/ssh_config
Host * MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com # optional: ,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub 256 bb:56:44:0d:75:15:cd:9c:f6:38:a9:8e:70:41:19:31 (ED25519)Uživatel se starším SSH klientem tento otisk uvidí a může ho při prvním příhlášení schválit. V případě nového klienta však uvidí jiný formát zápisu otisku klíče:
# ssh -vvv db@10.0.0.1 : : debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug3: receive packet: type 31 debug1: Server host key: ecdsa-sha2-nistp256 SHA256:seIOekunMZPoo6EjzGq8VhJ5OkgAJSEo2aDA0OZQeAc : :Příslušný otisk může vytvořit administrátor manuálně:
# cut -f 2 -d ' ' /etc/ssh/ssh_host_ecdsa_key.pub | base64 -d | sha256sum -b | cut -f 1 -d ' ' | xxd -r -p | base64 seIOekunMZPoo6EjzGq8VhJ5OkgAJSEo2aDA0OZQeAc=Pokud jste již nastavili své SSH podle výše uvedeného postupu, server nebude používat ECDSA jak je tomu v defaultní konfiguraci CentOS 7. Ověřování by se pak provádělo vůči veřejnému klíči ze souboru
/etc/ssh/ssh_host_ed25519_key.pub
.
Některé Linuxové distribuce (CentOS nevyjímaje) disponují programem xxd
v doplňkovém balíku vim-common
.
-- LeoGalambos - 28 Sep 2016