Nastavení SSH

Bezpečné nastavení SSH je závislé na dílčích nastaveních, které administrátor aplikuje. Kromě povolení pouze kvalitních šifrovacích technik, je nutné zajistit i bezpečnou (úvodní) výměnu klíčů. K tomu SSH používá Diffie-Hellman algoritmus, příp. ve variantě s eliptickými křivkami. Jeho výhodou je, že se i při pozdějším prozrazení hesel nekompromituje již proběhlá komunikace. Algoritmus zajišťuje, že si oba konce spoje bezpečně ustanoví klíč pro následné šifrování. SSH implementuje DH ve spojení s hashovací funkcí, v čemž je skryté první úskalí. Standardní instalace podporuje následující výměny klíčů:

$ 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-sha256

Použ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).

Identita serveru

Klient ověřuje identitu serveru na základě podpisu, který server provede na dohodnutém klíči. K tomu lze využít:

  • dsa (+sha1)
  • ecdsa
  • ed25519
  • rsa

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

Identita klienta

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

Na 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

Šifrování

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-ctr

Na 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

Autentizace

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

Okamž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.com

Na 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

Ověření klíčů při přihlášení

Administrátor by měl předat svým uživatelům otisk svého veřejného klíče. Jeho zjištění je snadné:
# 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
Topic revision: r5 - 01 Oct 2016, LeoGalambos
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback