améliorer la sécurité d'un serveur Ubuntu

Il a deux jours, j’ai réalisé que les performances de mon serveur DigitalOcean étaient diminuées considérablement. En fait, le service web ne répondait plus. Après avoir analysé les fichiers d’activités (logs), j’ai réalisé que des milliers de tentatives de connexion SSH avait été lancées sur le serveur. Plusieurs tentatives par seconde avec plusieurs noms d’utilisateur différents. Les requêtes provenaient de la Chine.

C’est à ce moment que j’ai réalisé les dangers du far west du World Wide Web.

Voici donc les éléments traités à considérer afin d’améliorer la sécurité de votre serveur Web Ubuntu :

  • Identification des tentatives de connexion au serveur
  • Mise à jour des logiciels sur Ubuntu
  • Application des correctifs de sécurité sur Ubuntu
  • Identification des ports ouverts et services sur votre serveur Ubuntu
  • Mise en place d’un pare-feu

Carte des attaques Norse Map

La Norse Corp offre une carte qui présente les différentes attaques en temps réel grâce aux WebSockets. Il est intéressant de voir le type d’attaque, l’origine des attaques et les destinations. Cette belle application Web démontre à quel point les attaques sont fréquentes et mondiales. Après quelques heures d’analyse il est possible d’identifier les pays qui attaquent le plus : la Chine et la Russie.

Akamai offre aussi une carte temps-réel des attaques.

Analyse des dernières connexions SSH

Pour débuter, voici un truc utile afin d’identifier les connexions suspectes sur votre serveur web. Il est proposé d’utiliser les commandes last et lastb afin d’afficher les informations des dernières connexions.

Les dernières connexions avec last

La commande last affiche les dernières connexions au système. On y retrouve le nom de l’utilisateur utilisé, l’adresse IP de la connexion ainsi que l’heure de connexion.

Les dernières connexions pour chaque utilisateur Ubuntu

Pour sa part, lastlog affiche la liste de tous les utilisateurs avec la date de dernière connexion.

Filtrer les dernières connexions SSH

Afin d’éliminer les utilisateurs qui ne se sont jamais connectés, la commande grep est utilisée avec l’option -v qui permet d’inverser le résultat.

Les dernières connexions SSH refusées avec lastb

La commande lastb quant à elle, affiche la liste des dernières connexions refusées. C’est cette commande qui permettra de savoir si des tentatives de connexions par essais et erreurs sont lancées sur votre serveur web.

C’est dans le fichier /var/log/btmp que ces tentatives de connexions sont sauvegardées. La taille de ce fichier peut augmenter considérablement lorsqu’une attaque est lancée sur votre serveur web.

Voici un échantillon de la sortie pour  commande lastb. Il est il intéressant de noter que les adresses IP des attaquants sont sauvegardées.

 

Géolocalisation par IP

Un outil comme iplocation.net permet d’identifier la provenance de ces attaques.

 

Pour sa part, MaxMind offre la base de données GeoIP2 que vous pouvez mettre en place sur votre application afin de récupérer la ville ou le pays d’une adresse IP.

 

Liste noire des adresses IP

Void IP est un autre service intéressant qui vous indique si une adresse IP est sur la liste noire (black list). Il suffit d’entrer l’adresse IP qui nous intéresse et un rapport est affiché.

IP Void IP scan

 

Protéger son accès SSH avec DenyHosts

 

denyhost logo

 

Lorsque les attaques proviennent des mêmes adresses IP, il est possible de les bannir. DenyHost est un outil python qui détecte les tentatives répétées de connexion et gère un fichier d’adresses IP à bannir. Voici deux liens pour en savoir plus sur DenyHost :

Connexion SSH avec clé RSA

Il est de plus en plus difficile de sélectionner un bon mot de passe et encore plus difficile de s’en souvenir! Les gens sont de plus en plus sensibilisés, mais ne prennent pas les moyens nécessaires afin de mettre en place un mot de passe VRAIMENT sécuritaire.

Une solution consiste à désactiver la connexion de l’utilisateur ROOT par de mot de passe et de forcer la connexion par clé RSA.

Voici quelques avantages :

  • Augmente considérablement la sécurité de votre serveur.
  • On n’a pas à vérifier la qualité du mot de passe, puisqu’il n’y en a pas.
  • Lors d’une connexion, les clés sont automatiquement échangées, donc pas besoin d’entrer un mot de passe.
  • L’attaquant ne peut pas utiliser de dictionnaire de mot de passe (brute force) pour se connecter.

Mettre en place une connexion SSH avec clé publique sur Ubuntu

Voici la procédure proposée par Digital Ocean afin de mettre en place une connexion avec clé RSA  :

https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets

Forcer la connexion SSH avec une clé publique

La procédure qui permet de forcer la connexion avec un clé et non un mot de passe est simple sur Ubuntu. Il suffit de modifier le fichier de configuration du service SSH (sshd_config) et d’utiliser l’option without-password.

Note

Avant de procéder à ces modifications, s’assurer qu’il est déjà possible de se connecter avec une clé sans mot de passe.

 

Ajouter la ligne suivante :

Par défaut la connexion par mot de passe (PasswordAuthentication) est activée, il faut donc commenter cette option dans le fichier de configuration.

Par la suite, il faut indiquer que seules les connexions avec clé sont possibles.

# Définir la valeur no afin de désactiver la connexion par mot de passe :

# Il faut aussi ajouter la ligne suivante :

# Et ensuite la prochaine ligne :

# Finalement, relancer le service :

Une erreur de débutant qui peut couter cher

Note

Jouer avec le système d’authentification est risqué. Après avoir ajouté une clé publique au fichier know_host, il faut sauvegardé le fichier en question. La structure du fichier est simple mais importante : chaque ligne contient l’information d’une clé de domaine. Lors de la sauvegarde du fichier avec nano, des retours de chariots ont été ajoutés automatiquement au fichier rendant incompréhensible la nouvelle structure du fichier par le démon SSH. Imaginez perdre l’accès de votre propre serveur par cette erreur de débutant.

 

Mise à jour des logiciels et correctifs de sécurité

À toutes les semaines, des failles de sécurité sont découvertes dans le code que vous exécutez. Il est donc essentiel de mettre à jours vos logiciels et d’appliquer les correctifs de sécurité rapidement. C’est même extrêmement important si votre machine est connectée à Internet.

Sur Ubuntu, plusieurs commandes vous permettent de faire les mises à jour nécessaires afin d’augmenter la sécurité.

Note

Même si ces opérations de mise à jour sont fiables, elles pourraient tout de même rendre votre serveur inutilisable. Il est donc primordial de faire des sauvegardes des configurations et fichiers importants avant de procéder.

Simulation de mise à jour

Avec l’option simulate, il est possible de voir la liste des paquets qui seront mis à jour.

L’option simulate simule la mise à jour des paquets sans réellement les installer.

 

Mise à jour avec l’option upgrade ou dist-upgrade?

Afin d’appliquer la mise à jour sur Ubuntu, vous avez deux options : dist-upgrade et upgrade.

L’option upgrade met à jour tous les paquets installés sur le système vers les dernières versions .

L’option dist-upgrade met à jour tous les paquets installés vers les dernières versions en installant de nouveaux paquets si nécessaire, par opposition à l’upgrade simple qui n’ajoute pas de nouveaux paquets.

Note

Pour ma part, j’ai sélectionné l’option dist-upgrade qui me garanti que toutes les dépendances nécessaires aux paquets mis à jour seront bien installées.

Pour terminer, voici la commande proposée qui combine la mise à jour des dépôts de code et la mise à jour avec dist-upgrade.

Interruption de services lors de la mise à jour

Une fois le processus de mis à jour lancé, une interruption de service pourrait avoir lieu. Par exemple, si le serveur Web Apache est mis à jour, il devra être arrêté et ensuite relancé. Le même problème survient lors de la mise à jour de la base de données comme MySQL. Votre serveur pourrait afficher le message suivant :

Error establishing a database connection

Il est donc recommandé d’appliquer les mises à jour lors d’une période d’affluence minimale. Pour les administrateurs qui appliquent le principe de balance des charges (load balancing), plusieurs serveurs web sont donc disponibles. Il faut donc appliquer les mises à jour serveur après serveur afin d’éviter interruption de service.

Appliquer les mises à jour

La touche finale à votre mise à jour consister à relancer le serveur :

Changer de version Ubuntu

Finalement, si vous désirez mettre à jour votre version de Ubuntu, l’option do-release-upgrade est disponible. Cette option vous permettra de passer de la version Ubuntu 14 à Ubuntu 15 par exemple.

Upgrade the operating system to the latest release from the command-line. This is the preferred command if the machine has no graphic environment or if the machine is to be upgraded over a remote connection.

https://doc.ubuntu-fr.org/apt-get

Identifier les ports ouverts

Pour chaque port ouvert sur votre serveur, vous augmenter les risques d’une attaque fonctionnelle. Il est donc essentiel de connaitre les liste des ports ouverts et de s’assurer qu’il doivent être ouverts.

Identifier les ports ouverts avec nmap

Afficher les connexions Internet actives avec netstat

Afficher les fichiers ouverts avec lsof

lsof -i

Mise en place de règles de pare-feu

Une fois avoir pris connaissance des ports ouverts et des services qui gèrent ces ports, il est important de désactiver les services non utilisés ou de protéger les ports en ajoutant des règles dans votre pare-feu (firewall).

Sur Ubuntu, iptables et ufw sont deux options possibles. Le prochain article présentera quelques éléments de ces pare-feu.

https://help.ubuntu.com/community/UFW

Conclusion

Il ne faut pas sous-estimer les menaces et les esprits malveillants sur le net. Il est temps de prendre les actions nécessaires afin d’éviter qu’un autre prenne le contrôle de votre serveur ou vous le retire.

 


 

L’édition mai-juin 2016 de la revue Plan, la revue de l’Ordre des ingénieurs du Québec, soulève la question de la cybersécurité. En faisons-nous assez?


 

 

 

Facebook Comments

1 réponse
  1. ArkeUp Paris
    ArkeUp Paris dit :

    Internet a d’innombrables avantages tant sur la personne que la société. Mais sa grande faiblesse est la sécurité. Dès qu’un serveur, un site ou application est connecté sur le net, il faut qu’il soit au maximum sécurisé. Aujourd’hui, on la crainte tourne autour du vol de données sans oublier les rançongiciels.

    Répondre

Laisser un commentaire

Participez-vous à la discussion?
N'hésitez pas à contribuer!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.