Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tutoriel:que_faire_en_cas_de_serveur_compromis [Le 19/07/2012, 21:14] – [Bloquer tous les accès instantanément] cartmeleon | tutoriel:que_faire_en_cas_de_serveur_compromis [Le 02/01/2015, 14:20] (Version actuelle) – [Prévoyez un accès de secours] 82.231.25.232 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | {{tag> | ||
| + | ---- | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ====== Que faire en cas de soupçons d'un serveur compromis ? ====== | ||
| + | |||
| + | |||
| + | Récemment, j'ai eu des doutes quant à l' | ||
| + | |||
| + | Rentrons dans le vif du sujet. | ||
| + | |||
| + | |||
| + | ===== Bloquer tous les accès instantanément ===== | ||
| + | |||
| + | La première chose à faire, c'est d' | ||
| + | |||
| + | ==== Prévoyez un accès de secours ==== | ||
| + | |||
| + | === Si vous avez accès au serveur et si celui ci peut être redémarré. === | ||
| + | Munissez vous d'un [[: | ||
| + | Il vous faudra donc booter sur le [[: | ||
| + | |||
| + | === Si vous n'avez pas accès au serveur, si vous ne pouvez pas le redémarrer. === | ||
| + | Seul le compte **root** sera autorisé a se reconnecter, | ||
| + | |||
| + | <note warning> | ||
| + | La connection en tant que **root** est fortement déconseillée, | ||
| + | </ | ||
| + | |||
| + | S'il s'agit d'une connexion [[:SSH]], vérifiez que **root** soit autorisé a se connecter. La variable suivante du fichier **/ | ||
| + | < | ||
| + | PermitRootLogin yes | ||
| + | </ | ||
| + | |||
| + | Initialisez le mot de passe **root** | ||
| + | < | ||
| + | sudo passwd root | ||
| + | </ | ||
| + | |||
| + | Dè que vous aurez de nouveau autorisé les connexions utilisateurs, | ||
| + | < | ||
| + | sudo passwd -l root | ||
| + | </ | ||
| + | |||
| + | ==== Bloquez toutes les connexions ==== | ||
| + | |||
| + | Pour bloquer toute connection locale ou distante, entrez la commande suivante : | ||
| + | < | ||
| + | sudo touch / | ||
| + | </ | ||
| + | |||
| + | À partir de ce moment, toutes les connexions locales et distantes sont refusées. | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | Si vous êtes déconnecté d'une session [[:SSH]], voyez le résultat : | ||
| + | < | ||
| + | user@serveur: | ||
| + | [sudo] password for user: | ||
| + | user@serveur: | ||
| + | déconnexion | ||
| + | Connection to serveur.lan closed. | ||
| + | user@client: | ||
| + | Ubuntu 12.04 LTS | ||
| + | |||
| + | Connection closed by serveur.lan | ||
| + | user@client: | ||
| + | </ | ||
| + | |||
| + | Quand vous le jugerez opportun, vous autoriserez de nouveau les connexions en supprimant le fichier **nologin**: | ||
| + | < | ||
| + | sudo rm / | ||
| + | </ | ||
| + | |||
| + | Blocage alternatif pour connexion entrante et sortant ( moins dangereuse ) avec le firewall intégré [[ufw]] : | ||
| + | < | ||
| + | sudo ufw disable | ||
| + | sudo ufw default deny incoming | ||
| + | sudo ufw default deny outgoing | ||
| + | sudo ufw enable | ||
| + | sudo ufw status verbose | ||
| + | </ | ||
| + | |||
| + | ===== Examen des logs d' | ||
| + | |||
| + | La première source d' | ||
| + | |||
| + | Si c'est le cas, toutes les actions sont logguées dans le fichier ''/ | ||
| + | |||
| + | Évidemment, | ||
| + | |||
| + | |||
| + | ===== Examen des historiques des utilisateurs ===== | ||
| + | |||
| + | Ensuite, vous pouvez examiner les commandes introduites par les utilisateurs dans l' | ||
| + | |||
| + | Ces historiques sont beaucoup moins précis que les logs d' | ||
| + | |||
| + | Les historiques se trouvent dans les répertoires des utilisateurs (''/ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Bloquer un utilisateur et politique des mots de passe ===== | ||
| + | |||
| + | Si vous avez vu quelque chose de suspect par rapport à un utilisateur, | ||
| + | |||
| + | Pour ce faire, il vous suffit de remplacer le shell par défaut de l' | ||
| + | < | ||
| + | sudo chsh -s /bin/false user | ||
| + | </ | ||
| + | Ensuite, vous supprimez tous les processus attachés à cet utilisateur (par exemple, pour l' | ||
| + | < | ||
| + | sudo killall -u jf | ||
| + | </ | ||
| + | |||
| + | Vous pouvez, a priori, réouvrir les connexions entrantes (surtout si la machine est une machine de production) : | ||
| + | < | ||
| + | sudo rm / | ||
| + | </ | ||
| + | |||
| + | Concernant les mots de passe, qui sont souvent une faille de sécurité, il est intéressant de les changer régulièrement (tous les 3 mois par exemple ou mieux, tous les mois) et d' | ||
| + | |||
| + | Vous trouverez des informations pour la génération des mots de passe sur [[: | ||
| + | |||
| + | ===== Arrêt de tous les services ===== | ||
| + | |||
| + | Ensuite, il est intéressant d' | ||
| + | |||
| + | < | ||
| + | sudo / | ||
| + | </ | ||
| + | |||
| + | Pensez également à arrêter le '' | ||
| + | Sans oublier les services // | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Scan des ports ouverts sur la machine ===== | ||
| + | |||
| + | À partir d'une autre machine et sur chacune des interfaces réseaux du serveur suspect, lancer un '' | ||
| + | |||
| + | L' | ||
| + | |||
| + | < | ||
| + | sudo apt-get install nmap | ||
| + | </ | ||
| + | |||
| + | Ensuite, vous l' | ||
| + | |||
| + | < | ||
| + | sudo nmap 192.168.0.1 -p 1-65535 | ||
| + | </ | ||
| + | |||
| + | Le résultat indique quels sont les ports ouverts sur la machine. Ne paniquez pas tout de suite si vous avez des ports ouverts : il s'agit peut être d'un service que vous avez oublié d' | ||
| + | |||
| + | Si vous n'avez aucun port ouvert, c'est un bon signe. S'il reste des services ouverts, arrêtez-les et relancez le scan. | ||
| + | |||
| + | Si vous ne trouvez rien cela ne veut pas dire que vous n'avez pas été compromis… car il est possible que vous ayez des connexions inversées ! C'est à dire des connexions créées dans le sens inverse : le pirate a ouvert les ports sur sa propre machine et votre machine s'y connecte. Il y a deux façons de voir les connexions : '' | ||
| + | |||
| + | |||
| + | |||
| + | ===== Vérification des rootkits ===== | ||
| + | |||
| + | Après cela, il est intéressant de vérifier qu' | ||
| + | |||
| + | Il existe deux applications permettant d' | ||
| + | |||
| + | < | ||
| + | sudo apt-get install chkrootkit rkhunter | ||
| + | </ | ||
| + | |||
| + | Exécutez-les par les commandes suivantes : | ||
| + | |||
| + | < | ||
| + | sudo chkrootkit | ||
| + | </ | ||
| + | |||
| + | et | ||
| + | |||
| + | < | ||
| + | sudo rkhunter --propupdate | ||
| + | sudo rkhunter --checkall | ||
| + | </ | ||
| + | |||
| + | la commande **sudo rkhunter --propupdate** sert a la mise a jour des hash de fichiers pour limiter les faux positifs | ||
| + | |||
| + | Rkhunter affiche ensuite les test effectués et affiche les fichiers annalysés : | ||
| + | < | ||
| + | sudo rkhunter --checkall | ||
| + | [sudo] password for user: | ||
| + | [ Rootkit Hunter version 1.3.8 ] | ||
| + | |||
| + | Checking system commands... | ||
| + | |||
| + | Performing ' | ||
| + | Checking ' | ||
| + | |||
| + | Performing ' | ||
| + | Checking for preloading variables | ||
| + | Checking for preloaded libraries | ||
| + | Checking LD_LIBRARY_PATH variable | ||
| + | |||
| + | Performing file properties checks | ||
| + | Checking for prerequisites | ||
| + | / | ||
| + | / | ||
| + | ............... | ||
| + | </ | ||
| + | Un exemple d' | ||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | Suite des tests | ||
| + | < | ||
| + | Checking for rootkits... | ||
| + | |||
| + | Performing check of known rootkit files and directories | ||
| + | 55808 Trojan - Variant A [ Not found ] | ||
| + | ADM Worm [ Not found ] | ||
| + | ............... | ||
| + | |||
| + | Performing additional rootkit checks | ||
| + | Suckit Rookit additional checks | ||
| + | Checking for possible rootkit files and directories | ||
| + | Checking for possible rootkit strings | ||
| + | |||
| + | Performing malware checks | ||
| + | Checking running processes for suspicious files [ None found ] | ||
| + | Checking for login backdoors | ||
| + | Checking for suspicious directories | ||
| + | Checking for sniffer log files [ None found ] | ||
| + | Checking for Apache backdoor | ||
| + | |||
| + | Performing Linux specific checks | ||
| + | Checking loaded kernel modules | ||
| + | Checking kernel module names [ OK ] | ||
| + | ............... | ||
| + | </ | ||
| + | Encore des tests | ||
| + | < | ||
| + | Checking the network... | ||
| + | |||
| + | Performing checks on the network ports | ||
| + | Checking for backdoor ports [ None found ] | ||
| + | Checking for hidden ports [ Skipped ] | ||
| + | |||
| + | Performing checks on the network interfaces | ||
| + | Checking for promiscuous interfaces | ||
| + | |||
| + | Checking the local host... | ||
| + | |||
| + | Performing system boot checks | ||
| + | Checking for local host name [ Found ] | ||
| + | Checking for system startup files [ Found ] | ||
| + | Checking system startup files for malware | ||
| + | |||
| + | Performing group and account checks | ||
| + | Checking for passwd file [ Found ] | ||
| + | Checking for root equivalent (UID 0) accounts | ||
| + | Checking for passwordless accounts | ||
| + | Checking for passwd file changes | ||
| + | Checking for group file changes | ||
| + | Checking root account shell history files [ OK ] | ||
| + | |||
| + | Performing system configuration file checks | ||
| + | Checking for SSH configuration file [ Found ] | ||
| + | Checking if SSH root access is allowed | ||
| + | Checking if SSH protocol v1 is allowed | ||
| + | Checking for running syslog daemon | ||
| + | Checking for syslog configuration file [ Found ] | ||
| + | Checking if syslog remote logging is allowed | ||
| + | |||
| + | Performing filesystem checks | ||
| + | Checking /dev for suspicious file types [ None found ] | ||
| + | </ | ||
| + | L' | ||
| + | < | ||
| + | Checking for hidden files and directories | ||
| + | </ | ||
| + | Puis vient le récapitulatif. | ||
| + | < | ||
| + | System checks summary | ||
| + | ===================== | ||
| + | |||
| + | File properties checks... | ||
| + | Files checked: 135 | ||
| + | Suspect files: 1 | ||
| + | |||
| + | Rootkit checks... | ||
| + | Rootkits checked : 248 | ||
| + | Possible rootkits: 0 | ||
| + | |||
| + | Applications checks... | ||
| + | All checks skipped | ||
| + | |||
| + | The system checks took: 2 minutes and 1 second | ||
| + | |||
| + | All results have been written to the log file (/ | ||
| + | |||
| + | One or more warnings have been found while checking the system. | ||
| + | Please check the log file (/ | ||
| + | </ | ||
| + | |||
| + | Vous retrouvez un fichier suspect dans les propriétés de fichiers, en fait 1 faux positif identifié.\\ | ||
| + | Après avoir consulté le fichier de log,si rien ne vous semble suspect comme ci-dessus, | ||
| + | |||
| + | Si quelque chose est détecté comme suspect, l' | ||
| + | FIXME A quoi ça ressemble quelque chose de suspect ? | ||
| + | |||
| + | Pour déterminer quelle application a ouvert ce port (éventuellement non détecté par le scanner '' | ||
| + | |||
| + | < | ||
| + | sudo lsof -i:600 | ||
| + | </ | ||
| + | |||
| + | Après, à vous de voir si c'est vraiment une intrusion ou si c'est un service qui tourne en arrière-plan… | ||
| + | |||
| + | ===== Vérification des virus et vers ===== | ||
| + | |||
| + | La dernière vérification indispensable à faire est le scan complet du disque dur avec un antivirus (**à jour !!!**). | ||
| + | Sur la page wiki traitant de la [[: | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Après tout… ===== | ||
| + | |||
| + | Une fois la batterie de tests effectuée, si rien n'a été trouvé, relancez tous les tests mais après un redémarrage de la machine (au cas où un système d' | ||
| + | |||
| + | Si tout va bien, il n'y a **a priori** rien d' | ||
| + | |||
| + | Je ne prétends pas répondre à tous les problèmes de sécurité dans ce court document, cependant, les intrusions fréquentes sont effectuées par des [[http:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | // Contributeurs : [[utilisateurs: | ||
