• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 24/08/2021

Auditez le service SSH

 Le service SSH est sûrement le service le plus critique sur le serveur. En effet, c'est le moyen le plus connu et le plus commun pour obtenir un shell distant sur le système d'exploitation. Cela est possible en se connectant via un terminal sur le service et en chiffrant les communications avec le protocole SSH. Il est donc très important de veiller à ce que ce service soit configuré de manière sécurisée. Dans ce chapitre, je vous propose d'effectuer un audit du niveau de durcissement de SSH.

Auditez les fondamentaux du service SSH

Je vous propose de l'auditer en vidéo ! Vous trouverez aussi les étapes dans le texte ci-dessous. 

Vérifiez dans un premier temps la version du protocole SSH supporté avec la commande suivante :

[root@fichesproduits ssh]# ssh -v localhost
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
...
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
..
ECDSA key fingerprint is SHA256:7H8DIiivqyhmlDIcOFc7jq3C4zna6CdPxrVH+ng5VSI.
ECDSA key fingerprint is MD5:c5:86:1e:cd:ab:69:b9:a0:6a:bf:d2:89:6e:dd:31:9f.
Are you sure you want to continue connecting (yes/no)?

Parmi les lignes affichées, vous devez retrouver Remote protocol version 2.0. La version 2 amène plus de fonctionnalités, et la version 1 du protocole est aujourd'hui obsolète.

S'il y a une chose qu'il faut absolument bannir en ce qui concerne le service SSH, c'est la possibilité de se connecter directement avec le compte root. Ce réglage est indiqué dans le fichier de configuration avec la directive PermitRootLogin :

[root@fichesproduits ~]# grep PermitRootLogin /etc/ssh/sshd_config
#PermitRootLogin yes

Sur CentOS, par défaut, cette directive possède la valeur « yes », ce qui n'est pas le cas sur Debian.

Ici, il faudrait indiquer :

PermitRootLogin no

À noter qu'il est possible de positionner cette valeur sur forced-commands-only, ce qui laisse la possibilité au compte root de lancer une commande via le service en utilisant les clés d'authentification. J'y reviens juste après.

Enfin, dernier point fondamental : le port d'écoute. Par défaut, ssh écoute sur le port 22. Il faut changer ce port afin de compliquer le travail des attaquants !

[root@fichesproduits ~]# grep Port /etc/ssh/sshd_config
#Port 22

Par exemple, on pourrait indiquer ici :

Port 6060

Auditez le durcissement avancé du service SSH

Une fois les directives basiques passées, il est temps de se pencher sur l'aspect un peu plus sécurisé de la configuration du service :

  • pour empêcher des sessions connectées sans activité (idle), il faut utiliser les directives suivantes dans le fichier /etc/ssh/sshd_config :

ClientAliveInterval 300 # Timout idle max en seconde
ClientAliveCountMax 0 # Nombre de messages de continuité autorisés sans réponse du client
  • pour empêcher toute connexion d'un compte utilisateur sans mot de passe, il faut positionner la directive suivante :

PermitEmptyPasswords no
  • pour autoriser une seule liste d'utilisateurs ou de groupes utilisateur à se connecter, il faut positionner les directives suivantes :

AllowGroups groupe1,groupe2,...
AllowUsers user1,user2,...
  • pour tracer les tentatives de connexion échouées en détail, il faut positionner la directive suivante :

MaxAuthTries 4 # Après 2 tentatives, les traces seront détaillées dans les fichiers de log
  • enfin, dans le meilleur des cas, il est possible d'indiquer au service SSH de procéder à l'authentification des comptes uniquement par échange de clés de cryptographie asymétrique (duo clé privée/publique). Ces clés doivent être générées de préférence avant le déploiement du service. Elles permettent de s'authentifier sans avoir à saisir de mot de passe, ce qui complique toute tentative d'espionnage de ces mots de passe. Les directives concernées sont :

PasswordAuthentication no
PubkeyAuthentication yes

En résumé

L'audit du service SSH vient terminer cette partie autour de l'analyse des accès réseau sur le serveur. Il ne faut pas oublier que le réseau est probablement le moyen le plus simple pour un attaquant de contacter le serveur et de le corrompre. Mais ce n'est pas le seul, et les protections plus « physiques » évoquées dans les parties précédentes sont tout aussi importantes. Il me semble que nous avons fait le tour d'un audit visant à sécuriser le serveur, il est désormais temps de passer au livrable avec la rédaction du rapport d'audit !

Résumé des recommandations de cette cinquième partie :

Recommandation

Type

Principe

Examiner la liste des sockets et ports ouverts sur le réseau

CRITICAL

Minimisation

Vérifier que les services qui ouvrent des ports inutiles sont désactivés

CRITICAL

Minimisation

Vérifier que les services qui ouvrent des ports sur une interface externe sont pertinents

CRITICAL

Défense en profondeur

Vérifier que les ports par défaut des services ont été changés dans la mesure du possible

WARNING

Défense en profondeur

Vérifier que les TCP Wrappers sont configurés pour les services réseau compatibles

CRITICAL

Défense en profondeur

Vérifier qu'il est possible de rendre les services réseau compatibles avec les TCP Wrappers

WARNING

Défense en profondeur

Vérifier qu'il est possible d'accéder au firewall Netfilter par le noyau sans la contrainte module

WARNING

Minimisation

Vérifier que les règles Netfilter sont bien positionnées

CRITICAL

Défense en profondeur

Vérifier que les règles Netfilter par défaut sont définies dans le fichier de configuration

CRITICAL

Défense en profondeur

Vérifier le positionnement des sysctl réseau communes du noyau dans le fichier /etc/sysctl.conf

CRITICAL

Défense en profondeur

Vérifier la version du protocole SSH supporté par le service exploité sur le serveur

CRITICAL

Défense en profondeur

Examiner la directive PermitRootLogin du service SSH

CRITICAL

Moindre privilège

Vérifier le port d'écoute du service SSH

CRITICAL

Défense en profondeur

Vérifier le durcissement avancé du service SSH

WARNING

Défense en profondeur

Exemple de certificat de réussite
Exemple de certificat de réussite