Réseau - Web - GNU/Linux

2017 28 décembre

Comment savoir si votre serveur Linux a été compromis

Rédigé par Marc GUILLAUME | Aucun commentaire

Traduction de l'article How To Tell If Your Linux Server Has Been Compromised. Article original publié le 28 novembre 2017 sur bash-prompt.net.

Un serveur qui a été compromis ou détourné dans le sens de ce guide consiste dans le fait qu'une personne non autorisée ou un robot se soit loggé sur le serveur dans le but de l'utiliser pour son propre usage, généralement à de mauvaises fins.

Avertissement : si votre serveur a été compromis par la NSA ou une autre organisation criminelle sérieuse, alors vous ne remarquerez aucun de ces problèmes et les techniques exposées ci-dessous ne vous révèleront pas leur présence. ;-)

Cependant la majorité des serveurs compromis le sont soit par des robots, c'est-à-dire par des programmes d'attaque automatiques, soit par des attaquants sans grande compétence (les script-kiddies) ou des criminels ordinaires.

Ce type d'attaquants abusent des serveurs pour toute sorte d'usages tant qu'ils y ont accès et prennent peu de précautions pour cacher ce qu'ils font.

Symptômes d'un serveur compromis

Quand un serveur a été compromis par quelqu'un de peu expérimenté ou un programme d'attaque automatique, ces attaquants vont généralement l'utiliser pour faire quelque chose qui va consommer 100% des ressources de la machine. Ces ressources seront soit le processeur pour faire des choses comme du minages de monnaies cryptées ou l'envoi de spam, ou la bande passante pour lancer des attaques en déni de service.

Cela signifie que la première indication que quelque chose cloche est que le serveur est « ralenti ». Cela peut se manifester par le fait que le site web sert ses pages beaucoup plus lentement qu'à la normale, ou que les mails mettent plusieurs minutes à être distribués.

Quelles vérifications doit-on alors faire ?

Vérification 1 - Qui est actuellement loggé ?

La première chose à faire est de voir qui est actuellement loggé sur le serveur. Il n'est pas rare de trouver l'attaquant loggé sur le serveur et en train de travailler dessus.

La commande shell pour savoir ça est w. Lancer w donne un affichage de ce genre :

08:32:55 up 98 days,  5:43,  2 users,  load average: 0.05, 0.03, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    113.174.161.1    08:26    0.00s  0.03s  0.02s ssh root@coopeaa12
root     pts/1    78.31.109.1      08:26    0.00s  0.01s  0.00s w

Une de ces IP provient du Royaume Uni et la seconde est une IP vietnamienne. Il y a des chances que ce ne soit pas une bonne chose.

Arrêtez-vous et prenez une respiration, ne paniquez pas, mais ne tuez pas simplement leur connexion ssh. À moins que vous ne puissiez bloquer leur retour sur le serveur, ils vont faire si vite pour se reconnecter qu'ils vont probablement vous déconnecter et vous empêcher de vous reconnecter.

Regardez la section Que faire si votre serveur a été compromis à la fin de ce guide pour savoir comment procéder si vous trouvez des preuves d'une compromission.

La commande whois peut être utilisée avec une adresse IP et vous donnera tout les informations à propos de l'organisation à laquelle cette IP est confiée, y compris le pays où elle se situe.

Vérification 2 - Qui s'est connecté ?

Les serveurs linux enregistrent les connexions des utilisateurs qui se sont connectés, de l'IP à partir de laquelle ils se sont connectés, à quel moment et pendant combien de temps. Ces informations sont accessibles par la commande last.

Son affichage ressemble à ça :

root     pts/1        78.31.109.1      Thu Nov 30 08:26   still logged in
root     pts/0        113.174.161.1    Thu Nov 30 08:26   still logged in
root     pts/1        78.31.109.1      Thu Nov 30 08:24 - 08:26  (00:01)
root     pts/0        113.174.161.1    Wed Nov 29 12:34 - 12:52  (00:18)
root     pts/0        14.176.196.1     Mon Nov 27 13:32 - 13:53  (00:21)

Il y a un mélange de mes IP du Royaume Uni et quelques IP vietnamiennes, avec les deux premières encore connectées. Si vous voyez des IP non autorisées, alors reportez-vous à la dernière section.

L'historique des connections est contenu dans un fichier binaire dont le chemin est /var/log/wtmp et qui est donc facilement supprimable. Souvent les attaquants effacent simplement ce fichier pour essayer d'effacer leurs traces. En conséquence si vous lancez la commande last et que vous ne voyez que votre connexion actuelle, c'est mauvais signe.

Si il n'y a pas d'historique des connexions soyez très, très suspicieux et continuez à chercher des indications de compromission. 

Vérification 3 - Épeluchez l'historique des commandes

Les attaquants de ce niveau ne prennent souvent aucune précaution pour enlever les commandes qu'ils ont lancé de l'historique, du coup afficher l'historique des commandes va vous montrer tout ce qu'ils ont fait. Recherchez particulièrement les commandes wget ou curl qui auraient été utilisées pour télécharger des programmes en dehors des dépôts comme des robots de spam ou des programmes de minage de monaies chiffrées.

L'historique des commandes est contenu dans le fichier ~/.bash_history et du coup certains attaquants effacent ce fichier pour cacher ce qu'ils ont fait. Comme avec l'historique des connexions, si vous lancez la commande history et que vous ne voyez rien, c'est que le fichier d'historique a été effacé. Ceci est de nouveau un mauvais signe, et vous devriez contrôler votre serveur très soigneusement.

Vérification 4 - Qu'est-ce qui utilise toute la puissance du processeur ?

Le type d'attaquant que vous rencontrerez couramment ne prend pas trop de précautions pour cacher ce qu'ils font. Ils vont donc lancer des processus qui consomment toute la puissance du CPU. Cela permet généralement de les repérer assez facilement. Lancez simplement la commande top et regardez les processus affichés en haut.

Cela va aussi vous montrer les personnes qui utilisent votre serveur sans s'y être connecté. Comme par exemple quelqu'un utilisant un formulaire de mail non protégé pour relayer du spam.

Si le processus supérieur vous est inconnu, cherchez son nom sur Google ou recherchez ce qu'il peut bien faire avec losf ou strace.

Pour utiliser ces outils, copiez leur PID sur top et lancez la commande :

strace -p PID

Cela affichera tous les appels système que le processus effectue. Il y a beaucoup d'informations, mais les parcourir vous donnera une idée de ce qui se passe.

lsof  -p PID

Ce programme va lister les fichiers ouverts de ce processus. Cela encore va vous conner une bonne idée de ce qui se passe en vous montrant quels fichiers sont utilisés.

Vérification 5 - Contrôlez tous les processus du système

Si un processus non autorisé ne consomme pas assez de puissance du processeur pour être repéré avec top il apparaîtra lors de l'affichage de tous les processus avec ps. Ma commande préférée est ps auxf pour fournir le maximum d'informations de façon claire. 

Vous devriez rechercher tout les processus que vous ne reconnaissez pas. Plus vous lancerez ps sur vos serveur (ce qui est une bonne habitude) plus facilement un processus étranger vous sautera aux yeux.

Vérification 6 - Passez en revue l'utilisation du réseau par les processus

La commande iftop fonctionne commme top pour afficher une liste classée de processus qui envoient et reçoivent des données avec les sources et les destinations de ces données. Un processus comme un attaque DOS ou un robot de spam seront immédiatement visibles en haut de la liste.

Vérification 7 - Quels processus attendent-ils des connexions réseau ?

Souvent un attaquant installera un programme qui ne fait rien à part attendre des instructions sur un port réseau. Ce type de programme ne consomme pas de ressources processeur ou de bande passante tant qu'il est en attente et peut donc passer inaperçu des commandes de type top.

Les commandes lsof et netstat vont toutes les deux afficher tous les processus réseau. Je les utilise avec les options suivantes :

lsof -i
netstat -plunt

Vous devriez chercher chaque processus dans la liste qui est dans l'état LISTEN ou ESTABLISHED car ces processus soit sont en attente d'une connexion (LISTEN) soit ont ouvert une connexion (ESTABLISHED). Si vous ne reconnaissez pas ces processus utilisez strace ou lsof pour essayer de voir ce qu'ils sont en train de faire.

Que faire si votre serveur a été compromis ?

La première chose à faire est de ne pas paniquer, particulièrement si l'attaquant est actuellement connecté. Il faut que vous soyez capable de reprendre le contrôle de la machine avant que les attaquants ne s'aperçoivent que vous savez qu'ils existent.  Si ils réalisent que vous les avez détectés ils peuvent vous éjecter de votre serveur et commencer à détruire votre serveur par vengeance.

Si vous n'êtes pas très versé dans la technique, contentez vous d'arrêter le serveur. Soit depuis le serveur lui-même en utilisant les commandes shutdown -h now ou systemctl poweroff. Ou bien connectez-vous sur la page d'administration du serveur sur le site de votre hébergeur et arrêtez le serveur. Une fois qu'il est arrêté vous pouvez travailler sur les règles de pare-feu nécessaires et consulter votre hébergeur à tête reposée. 

Si vous vous sentez un peu plus confiant et que votre hébergeur ait un pare-feu en amont, alors créez et activez les deux règles suivantes dans cet ordre :

  1. Autorisez les connexions SSH seulement depuis votre adresse IP ;
  2. Bloquez tout le reste, pas seulement SSH mais tous les protocoles sur tous les ports.

Cela coupera immédiatement leur session SSH et vous rendra l'accès à votre serveur.

Si vous n'avez pas accès à un pare-feu en amont alors il faudra que vous créiez ces règles de pare feu sur le serveur lui-même, et lorsqu'elles seront en place tuer la session SSH des attaquants avec la commande kill.

La méthode utlime, si c'est possible, est de vous connecter à votre serveur par une connexion indépendante du réseau, comme une console série et arrêter le réseau avec la commande systemctl stop network.service. Cela arrêtera immédiatement tout accès réseau à la machine de façon à ce que vous puissiez mettre en place les règles de pare-feu à votre rythme.

Une fois que vous avez regagné le contrôle sur votre serveur, ne lui faites plus confiance.

N'essayez-pas de corriger les choses et de continuer à utiliser le serveur. Vous ne pouvez jamais être certain de ce qu'a fait l'attaquant, et donc vous ne pouvez pas être certain que le serveur soit sûr.

La seule chose sensée à faire est de copier toutes les données dont vous avez besoin et de repartir sur un nouvelle installation du système.

Ressources sur le sujet de la sécurité serveurs :

Surveillance des modifications du système de fichier :

Deux logiciels à signaler, un plus complexe à configurer que l'autre.

Integrit

Le plus simple à configurer, le sous-titre de leur site github est « l'alternative la plus simple à tripwire ». Quelques ressources intéressantes :

Tripwire

L'outil le plus ancien, un peu plus long à configurer, mais offrant de larges possibilités.

Écrire un commentaire

Quelle est la troisième lettre du mot dvmql ?

Fil RSS des commentaires de cet article

À propos

Yakati.info - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.021s  - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.info
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml