--- title: "SSH : Configuration Sécurisée" date: 2017-07-27T14:26:58+01:00 description: "Comment configurer SSH pour une utilisation plus sécurisée, et une génération correcte des clés SSH." draft: false tags: ['SSH','harden'] --- ## Description Le propos de cet article est d'aider à comprendre ce qu'il faut configurer pour obtenir une configuration sécurisée de votre client SSH. Cela nécessite que votre version du client OpenSSH soit supérieure à la version 6.5 ! ## Configuration Côté client, le plus simple est de modifier votre fichier de configuration, dans votre home personnel, `~/.ssh/config`… ---- Cet article n'aborde que la partie concernant le client ; pour la partie serveur, merci de lire mon autre article : {{< inside "sec/ssh/sshd-durci" >}} ### Chiffrements Les algorithmes de **Chiffrement** à autoriser : `Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com` {{< note tip >}} Néanmoins, sachez que dans certains cas, tels que Filezilla, Putty, il vous faudra certainement ajouter l'un des trois paramètres suivants : `aes256-ctr,aes192-ctr,aes128-ctr`
Si le serveur sur lequel vous cherchez à vous connecter est **dropbear**, il vous sera nécessaire d'ajouter : `aes256-ctr` - *à définir dans une configuration personnalisée…* {{}} À vérifier au cas par cas… regardez donc le log d'authentification sur votre serveur ! ### Échange de clés Les **algorithmes des clés d'échange** à privilègier sont : `KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org` ### Algorithmes de la clé d'Hôte Les recommandations actuelles pour les **algorithmes des clés d'hôte** sont :
`HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-512,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com` Perso, je n'utilise QUE : `HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-ed25519` {{< note tip >}} Si le serveur sur lequel vous cherchez à vous connecter est **dropbear**, il vous sera nécessaire d'ajouter : `ssh-rsa` - *à définir dans une configuration personnalisée…* {{}} ### Message Authentication Codes Les algorithmes des **Code d'Authentification de Messages** à définir sont :
`MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com` Perso, je n'utilise plus QUE : `MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-512` {{< note tip >}} Si le serveur sur lequel vous cherchez à vous connecter est **dropbear**, il vous sera nécessaire d'ajouter : `hmac-sha2-256` - *à définir dans une configuration personnalisée…* {{}} ### TL;DR Voici un exemple de configuration sécurisée minimal : {{< file "sec-ssh-harden-minimal" cfg "~/.ssh/config" >}} Selon le manpage officiel, les configurations personnalisées à certains hôtes doivent être écrites avant la configuration générale `Host *` ! ## Utilisation {{< note warning >}} {{< color red >}}ne pas utiliser les protocoles de chiffrement DSA, ECDSA{{}}, mais **utilisez {{< anchor RSA "Nouvelle clé RSA + PKBDF" >}} en forçant le nombre de bits** - *de 4096 à 16384 -*, **ET en utilisant PKBDF**, ou mieux **utilisez directement {{< anchor ED25519 "nouvelle-clé-ed25519" >}}, ayant déjà PKBDF**. {{< /note >}} Les créations suivantes sont à faire côté client, bien sûr ! ### Mettre-à-jour vos clés RSA `ssh-keygen -o -p -f id_rsa -a 64` * L'option `-f` spécifie le fichier de clé privée à utiliser. * L'option `-o` est celle qui utilise le durcissement PKBDF. * et pour finir, l'option `-a` définit le nombre de tours "de moulinettes" que va effectuer la génération. {{< note info >}} Si cette option n'est pas spécifiée, la valeur par défaut est `16`. Vous pouvez lui demander `1000` tours, néanmoins pour les paranoïaques la valeur de `64` semble préférable ET suffisante. {{< /note >}} ### Nouvelles clés #### Nouvelle clé ED25519 {{< note info >}} Il n'est pas nécessaire de spécifier l'usage de l'option `-o` ; en effet, la génération des clés Ed25519 utilise toujours ce format par défaut ! {{< /note >}} `ssh-keygen -t ed25519 -f fichier_id -a nb_tours` Tel que, par exemple : `ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -a 64` #### Nouvelle clé RSA + PKBDF `ssh-keygen -t rsa -b nb_bits -f fichier_id -o -a nb_tours` Tel que, pour l'exemple : `ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -o -a 64` ## Astuces Si vous avez paramétré l'option `LoginGraceTime` sur le serveur, pensez à **augmenter sa valeur, sinon** vous aurez **le droit à ne pas pouvoir vous connecter, sans aucun message d'erreur** dans le log d'authentification. En effet, selon le nombre de tours que vous avez paramétrés pour la génération de votre clé, ou sa mise-à-jour, le déchiffrement et la réponse du serveur prendra plus de temps, peut-être plus que le temps d'ouverture, de la fenêtre de connexion, autorisé. Je mets à disposition mon [script shell de génération de clés](https://git.framasoft.org/hucste/tools/blob/master/mng_key_ssh), basé sur lesdites informations… ## Documentations ### Manpages * {{< man ssh >}}, {{< man ssh_config 5 >}} * {{< man ssh-keygen >}} ### Autres * Quand [Martin Kleppman a écrit](https://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-private-keys.html) sur le propos d'améliorer la sécurité de ses clés privées SSH… * [Pat Regan](http://blog.patshead.com/2013/09/generating-new-more-secure-ssh-keys.html) nous fait un petit rappel historique de comment utiliser PKCS#8 pour en aboutir à la conclusion d'utiliser PKBDF… * ou comment [Ted Unangst](http://www.tedunangst.com/flak/post/new-openssh-key-format-and-bcrypt-pbkdf) nous explique comment monter à niveau ses vieilles clés en utilisant PKBDF… * Voici une très bonne lecture, sur le propos de [sécuriser son serveur SSH](https://stribika.github.io/2015/01/04/secure-secure-shell.html), en utilisant les bons algorithmes, et autres méthodes d'authentification… *(osbolète)* * Voire le [référentiel de sécurité](https://www.ssi.gouv.fr/uploads/2014/01/NT_OpenSSH.pdf) de l'ANSSI à-propos des recommandations de sécurité autour de SSH. *(cf : https://www.ssi.gouv.fr/administration/guide/recommandations-pour-un-usage-securise-dopenssh/ )* ----