Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
tutoriel:que_faire_en_cas_de_serveur_compromis [Le 20/07/2012, 00:01] xavier4811 |
tutoriel:que_faire_en_cas_de_serveur_compromis [Le 11/09/2022, 12:18] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 9: | Ligne 9: | ||
- | Récemment, j'ai eu des doutes quant à l'intégrité d'un de nos serveurs car il redémarrait de manière aléatoire. J'ai alors cherché d'éventuelles traces de passage d'un pirate qui aurait pu compromettre ce serveur. Pour ce faire, j'ai fait beaucoup d'opérations et il m'a semblé judicieux d'en faire part à d'autres. Si vous pensez à d'autres vérifications qui peuvent être utiles, n'hésitez pas à les ajouter à ce document. Par chance, la machine n'était pas compromise, il s'agissait juste d'un problème d'alimentation. | + | Récemment, j'ai eu des doutes quant à l'intégrité d'un de nos serveurs car il redémarrait de manière aléatoire. J'ai alors cherché d'éventuelles traces de passage d'un pirate qui aurait pu compromettre ce serveur. Pour ce faire, j'ai fait beaucoup d'opérations etil m'a semblé judicieux d'en faire part à d'autres. Si vous pensez à d'autres vérifications qui peuvent être utiles, n'hésitez pas à les ajouter à ce document. Par chance, la machine n'était pas compromise, il s'agissait juste d'un problème d'alimentation. |
Rentrons dans le vif du sujet. | Rentrons dans le vif du sujet. | ||
Ligne 16: | Ligne 16: | ||
===== Bloquer tous les accès instantanément ===== | ===== Bloquer tous les accès instantanément ===== | ||
- | La première chose à faire, c'est d'empêcher tous les accès (distants et locaux) à la machine, mais vous devez aussi pouvoir accéder au serveur en cas de déconnexion.\\ | + | La première chose à faire, c'est d'empêcher tous les accès (distants etlocaux) à la machine, mais vous devez aussi pouvoir accéder au serveur en cas de déconnexion.\\ |
- | Sans solution de secours, en cas de déconnexion, il faudra booter sur un [[:live_cd]] ou [[:live_usb]] pour supprimer le fichier **/etc/nologin** créé ci-dessous. | + | |
+ | ==== Prévoyez un accès de secours ==== | ||
+ | |||
+ | === Si vous avez accès au serveur etsi celui ci peut être redémarré. === | ||
+ | Munissez vous d'un [[:live_cd]] ou [[:live_usb]], en cas de déconnexion involontaire, vous ne pourrez pas vous reconnecter.\\ | ||
+ | Il vous faudra donc booter sur le [[:live_cd]] ou [[:live_usb]] pour supprimer le fichier **nologin** qui va être créé ci-dessous.\\ | ||
+ | |||
+ | === 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, vous devez donc préparer cetaccès de secours. | ||
<note warning> | <note warning> | ||
Ligne 23: | Ligne 31: | ||
</note> | </note> | ||
- | Commencez par initialiser le mot de passe **root** | + | S'il s'agit d'une connexion [[:SSH]], vérifiez que **root** soit autorisé a se connecter. La variable suivante du fichier **/etc/ssh/sshd_config** doit être égale à **yes**.\\ |
- | <code> | + | |
- | sudo passwd root | + | |
- | </code> | + | |
- | En cas de déconnexion forcée, seul l'administrateur **root** aura le droit de se reconnecter sur le serveur.\\ | + | |
- | S'il s'agit d'une connexion [[:SSH]], vérifiez que **root** est autorisé a se connecter. La variable suivante du fichier **/etc/ssh/sshd_config** doit être égale à **yes**. | + | |
<file> | <file> | ||
PermitRootLogin yes | PermitRootLogin yes | ||
</file> | </file> | ||
+ | |||
+ | Initialisez le mot de passe **root** | ||
+ | <code> | ||
+ | sudo passwd root | ||
+ | </code> | ||
+ | |||
+ | Dè que vous aurez de nouveau autorisé les connexions utilisateurs, veillez aussi a désactiver le mot de passe **root** | ||
+ | <code> | ||
+ | sudo passwd -l root | ||
+ | </code> | ||
+ | |||
+ | ==== Bloquez toutes les connexions ==== | ||
Pour bloquer toute connection locale ou distante, entrez la commande suivante : | Pour bloquer toute connection locale ou distante, entrez la commande suivante : | ||
Ligne 38: | Ligne 53: | ||
</code> | </code> | ||
- | À partir de ce moment, toutes les connexions locales et distantes sont refusées. | + | À partir de ce moment, toutes les connexions locales etdistantes sont refusées. |
- | <note important>ATTENTION !!! Veillez à ne pas sortir de la session en cours,\\ sinon vous ne pourrez vous reconnecter sur la machine qu'en tant que **root**.</note> | + | <note important>ATTENTION !!! Veillez à ne pas sortir de la session en cours, sinon vous devrez utiliser votre solution de secours.</note> |
Si vous êtes déconnecté d'une session [[:SSH]], voyez le résultat : | Si vous êtes déconnecté d'une session [[:SSH]], voyez le résultat : | ||
Ligne 48: | Ligne 63: | ||
user@serveur:~$ exit | user@serveur:~$ exit | ||
déconnexion | déconnexion | ||
- | Connection to 192.168.1.250 closed. | + | Connection to serveur.lan closed. |
- | user@client:~$ ssh user@192.168.1.250 | + | user@client:~$ ssh user@serveur.lan |
Ubuntu 12.04 LTS | Ubuntu 12.04 LTS | ||
- | Connection closed by 192.168.1.250 | + | Connection closed by serveur.lan |
user@client:~$ | user@client:~$ | ||
</code> | </code> | ||
- | Quand vous le jugerez opportun, vous autoriserez de nouveau les connexions par: | + | Quand vous le jugerez opportun, vous autoriserez de nouveau les connexions en supprimant le fichier **nologin**: |
<code> | <code> | ||
sudo rm /etc/nologin | sudo rm /etc/nologin | ||
</code> | </code> | ||
- | Veillez aussi a désactiver le mot de passe **root** | + | Blocage alternatif pour connexion entrante etsortant ( moins dangereuse ) avec le firewall intégré [[ufw]] : |
<code> | <code> | ||
- | sudo passwd -l root | + | sudo ufw disable |
+ | sudo ufw default deny incoming | ||
+ | sudo ufw default deny outgoing | ||
+ | sudo ufw enable | ||
+ | sudo ufw status verbose | ||
</code> | </code> | ||
===== Examen des logs d'authentification ===== | ===== Examen des logs d'authentification ===== | ||
- | La première source d'information qui peut vous aider sont les logs du système. Si vous avez bien lu ce qu'à écrit [[utilisateurs:Ju]] à propos du [[:sudo]], vous n'avez pas donné de mot de passe au ''root'' et toutes les actions des administrateurs du système passent par la commande ''sudo''. | + | La première source d'information qui peut vous aider sont les logs du système. Si vous avez bien lu ce qu'à écrit [[utilisateurs:Ju]] à propos du [[:sudo]], vous n'avez pas donné de mot de passe au ''root'' ettoutes les actions des administrateurs du système passent par la commande ''sudo''. |
Si c'est le cas, toutes les actions sont logguées dans le fichier ''/var/log/auth.log''. Ces logs vous permettront de savoir si un utilisateur a fait une erreur de manipulation ou si quelqu'un a utilisé son mot de passe à de mauvaises fins. | Si c'est le cas, toutes les actions sont logguées dans le fichier ''/var/log/auth.log''. Ces logs vous permettront de savoir si un utilisateur a fait une erreur de manipulation ou si quelqu'un a utilisé son mot de passe à de mauvaises fins. | ||
Ligne 77: | Ligne 96: | ||
===== Examen des historiques des utilisateurs ===== | ===== Examen des historiques des utilisateurs ===== | ||
- | Ensuite, vous pouvez examiner les commandes introduites par les utilisateurs dans l'historique du bash (le système qui permet de retrouver les anciennes lignes tapées avec la flèche HAUT du clavier). | + | Ensuite, vous pouvez examiner les commandes introduites par les utilisateurs dans l'historique du bash (le système qui permetde retrouver les anciennes lignes tapées avec la flèche HAUT du clavier). |
- | Ces historiques sont beaucoup moins précis que les logs d'authentification mais elles permettront de mettre en cause ou non un utilisateur. Les pirates ne pensent pas toujours à supprimer ces historiques, ce qui peut aider à déterminer si le système est corrompu et prendre des mesures. | + | Ces historiques sont beaucoup moins précis que les logs d'authentification mais elles permettront de mettre en cause ou non un utilisateur. Les pirates ne pensent pas toujours à supprimer ces historiques, ce qui peut aider à déterminer si le système est corrompu etprendre des mesures. |
- | Les historiques se trouvent dans les répertoires des utilisateurs (''/root'', ''/home/jf'', ''/home/ju'',...) et porte le nom ''.bash_history''. | + | Les historiques se trouvent dans les répertoires des utilisateurs (''/root'', ''/home/jf'', ''/home/ju'',...) etporte le nom ''.bash_history''. |
- | ===== Bloquer un utilisateur et politique des mots de passe ===== | + | ===== Bloquer un utilisateur etpolitique des mots de passe ===== |
- | Si vous avez vu quelque chose de suspect par rapport à un utilisateur, la première chose à faire est de lui bloquer ses accès et supprimer les processus qui lui sont attachés. | + | Si vous avez vu quelque chose de suspect par rapport à un utilisateur, la première chose à faire est de lui bloquer ses accès etsupprimer les processus qui lui sont attachés. |
Pour ce faire, il vous suffit de remplacer le shell par défaut de l'utilisateur en ''/bin/false'' par la commande : | Pour ce faire, il vous suffit de remplacer le shell par défaut de l'utilisateur en ''/bin/false'' par la commande : | ||
Ligne 93: | Ligne 112: | ||
sudo chsh -s /bin/false user | sudo chsh -s /bin/false user | ||
</code> | </code> | ||
- | Ensuite, vous supprimez tous les processus attachés à cet utilisateur (par exemple, pour l'utilisateur ''jf'') : | + | Ensuite, vous supprimez tous les processus attachés à cetutilisateur (par exemple, pour l'utilisateur ''jf'') : |
<code> | <code> | ||
sudo killall -u jf | sudo killall -u jf | ||
Ligne 103: | Ligne 122: | ||
</code> | </code> | ||
- | 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'utiliser des mots de passe un peu complexe. | + | 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) etd'utiliser des mots de passe un peu complexe. |
Vous trouverez des informations pour la génération des mots de passe sur [[:securite|cette page]]. | Vous trouverez des informations pour la génération des mots de passe sur [[:securite|cette page]]. | ||
Ligne 109: | Ligne 128: | ||
===== Arrêt de tous les services ===== | ===== Arrêt de tous les services ===== | ||
- | Ensuite, il est intéressant d'arrêter tous les services tournant sur la machine pour examiner les portes dérobées. Pour ce faire, il vous suffit de parcourir vos notes d'exploitations (que vous avez rédigées au préalable...) et d'utiliser les commandes du type : | + | Ensuite, il est intéressant d'arrêter tous les services tournant sur la machine pour examiner les portes dérobées. Pour ce faire, il vous suffit de parcourir vos notes d'exploitations (que vous avez rédigées au préalable...) etd'utiliser les commandes du type : |
<code> | <code> | ||
Ligne 115: | Ligne 134: | ||
</code> | </code> | ||
- | Pensez également à arrêter le ''portmap'', l' ''inetd'' et l' ''xinetd''. | + | Pensez également à arrêter le ''portmap'', l' ''inetd'' etl' ''xinetd''. |
Sans oublier les services //spéciaux// ou propriétaires. | Sans oublier les services //spéciaux// ou propriétaires. | ||
Ligne 125: | Ligne 144: | ||
===== Scan des ports ouverts sur la machine ===== | ===== Scan des ports ouverts sur la machine ===== | ||
- | À partir d'une autre machine et sur chacune des interfaces réseaux du serveur suspect, lancer un ''nmap''. | + | À partir d'une autre machine etsur chacune des interfaces réseaux du serveur suspect, lancer un ''nmap''. |
L'application ''nmap'' est un scanneur de ports qui s'installe très facilement via la commande suivante : | L'application ''nmap'' est un scanneur de ports qui s'installe très facilement via la commande suivante : | ||
<code> | <code> | ||
- | sudo apt-get install nmap | + | sudo apt-getinstall nmap |
</code> | </code> | ||
Ligne 139: | Ligne 158: | ||
</code> | </code> | ||
- | 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'arrêter. | + | 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'arrêter. |
- | 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 n'avez aucun port ouvert, c'est un bon signe. S'il reste des services ouverts, arrêtez-les etrelancez 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 : ''netstat -antp'' et ''wireshark''. Le programme ''netstat'' peut avoir été modifié par l'intrus aussi il est conseillé de faire tourner ''wireshark'' ou tout autre analyseur de paquets pour détecter les connexions suspectes. | + | 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 etvotre machine s'y connecte. Il y a deux façons de voir les connexions : ''netstat -antp'' et''wireshark''. Le programme ''netstat'' peut avoir été modifié par l'intrus aussi il est conseillé de faire tourner ''wireshark'' ou tout autre analyseur de paquets pour détecter les connexions suspectes. |
Ligne 149: | Ligne 168: | ||
===== Vérification des rootkits ===== | ===== Vérification des rootkits ===== | ||
- | Après cela, il est intéressant de vérifier qu'aucun rootkit n'a été installé. Dans les grandes lignes, un rootkit est un cheval de Troie ( qui permet à un intrus de reprendre le contrôle de la machine ultérieurement en laissant un petit programme lui ouvrant la porte) mettant en œuvre des techniques furtives lui permettant de ne pas apparaître à première vue lors de l'examen d'une machine. Les fichiers d'un rootkit n'apparaissent pas avec la commande ''ls'' par exemple, le processus n'apparaît pas non plus avec la commande ''ps'', etc… | + | Après cela, il est intéressant de vérifier qu'aucun rootkit n'a été installé. Dans les grandes lignes, un rootkit est un cheval de Troie ( qui permetà un intrus de reprendre le contrôle de la machine ultérieurement en laissant un petit programme lui ouvrant la porte) mettant en œuvre des techniques furtives lui permettant de ne pas apparaître à première vue lors de l'examen d'une machine. Les fichiers d'un rootkit n'apparaissent pas avec la commande ''ls'' par exemple, le processus n'apparaît pas non plus avec la commande ''ps'', etc… |
- | Il existe deux applications permettant d'identifier les rootkits les plus courants : il s'agit de ''rkhunter'' et ''chkrootkit''. Pour les installer, utilisez la commande suivante : | + | Il existe deux applications permettant d'identifier les rootkits les plus courants : il s'agit de ''rkhunter'' et''chkrootkit''. Pour les installer, utilisez la commande suivante : |
<code> | <code> | ||
- | sudo apt-get install chkrootkit rkhunter | + | sudo apt-getinstall chkrootkit rkhunter |
</code> | </code> | ||
Ligne 163: | Ligne 182: | ||
</code> | </code> | ||
- | et | + | et |
<code> | <code> | ||
Ligne 172: | Ligne 191: | ||
la commande **sudo rkhunter --propupdate** sert a la mise a jour des hash de fichiers pour limiter les faux positifs | 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 : | + | Rkhunter affiche ensuite les test effectués etaffiche les fichiers annalysés : |
<code> | <code> | ||
sudo rkhunter --checkall | sudo rkhunter --checkall | ||
Ligne 194: | Ligne 213: | ||
............... | ............... | ||
</code> | </code> | ||
- | Un exemple d'avertissement, ce fichier est un faux positif, affiché pour l'exemple, il fait partie du paquet RkHunter. le fichier de configuration **/etc/rkhunter.conf** contient des exemples utilisables pour ignorer les faux positifs. | + | Un exemple d'avertissement, ce fichier est un faux positif, affiché pour l'exemple, il fait partie du paquetRkHunter. le fichier de configuration **/etc/rkhunter.conf** contient des exemples utilisables pour ignorer les faux positifs. |
<code> | <code> | ||
/usr/bin/unhide.rb [ Warning ] | /usr/bin/unhide.rb [ Warning ] | ||
Ligne 290: | Ligne 309: | ||
Vous retrouvez un fichier suspect dans les propriétés de fichiers, en fait 1 faux positif identifié.\\ | 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,redémarrez la machine et procédez à nouveau à la vérification.\\ | + | Après avoir consulté le fichier de log,si rien ne vous semble suspect comme ci-dessus,redémarrez la machine etprocédez à nouveau à la vérification.\\ |
- | Si quelque chose est détecté comme suspect, l'application indiquera le nombre de rootkits possibles et quels sont les ports suspectés. | + | Si quelque chose est détecté comme suspect, l'application indiquera le nombre de rootkits possibles etquels sont les ports suspectés. |
- | FIXME A quoi ça ressemble quelque chose de suspect ? | + | 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 ''nmap''), vous pouvez utiliser la commande suivante (exemple, pour le port 600) : | Pour déterminer quelle application a ouvert ce port (éventuellement non détecté par le scanner ''nmap''), vous pouvez utiliser la commande suivante (exemple, pour le port 600) : | ||
Ligne 303: | Ligne 322: | ||
Après, à vous de voir si c'est vraiment une intrusion ou si c'est un service qui tourne en arrière-plan… | 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 ===== | + | ===== Vérification des virus etvers ===== |
- | La dernière vérification indispensable à faire est le scan complet du disque dur avec un antivirus (**à jour !!!**). | + | La dernière vérification indispensable à faire est le scan completdu disque dur avec un antivirus (**à jour !!!**). |
Sur la page wiki traitant de la [[:sécurité]], vous trouverez différents antivirus. | Sur la page wiki traitant de la [[:sécurité]], vous trouverez différents antivirus. | ||
Ligne 317: | Ligne 336: | ||
Si tout va bien, il n'y a **a priori** rien d'anormal sur votre serveur. « A priori » car à moins de couler un système informatique dans du béton sans aucune connexion vers l'extérieur, la sécurité totale n'existe jamais. | Si tout va bien, il n'y a **a priori** rien d'anormal sur votre serveur. « A priori » car à moins de couler un système informatique dans du béton sans aucune connexion vers l'extérieur, la sécurité totale n'existe jamais. | ||
- | 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://fr.wikipedia.org/wiki/Script_kiddie|script-kiddies]] : des pirates amateurs qui utilisent des failles de sécurité connues et des outils les exploitant créés par d'autres. Fondamentalement, 95% des attaques sont toujours faites avec une poignée de [[http://fr.wikipedia.org/wiki/Rootkit|rootkits]] connus. Dès lors, si vous avez été piraté par un pirate amateur, cela devrait être détecté avec les quelques outils présentés ici. | + | 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 [[https://fr.wikipedia.org/wiki/Script_kiddie|script-kiddies]] : des pirates amateurs qui utilisent des failles de sécurité connues etdes outils les exploitant créés par d'autres. Fondamentalement, 95% des attaques sont toujours faites avec une poignée de [[http://fr.wikipedia.org/wiki/Rootkit|rootkits]] connus. Dès lors, si vous avez été piraté par un pirate amateur, cela devrait être détecté avec les quelques outils présentés ici. |
---- | ---- | ||
- | // Contributeurs : [[utilisateurs:SunWukong]]// | + | // Contributeurs : [[utilisateurs:SunWukong]], [[utilisateurs:xavier4811|Xavier4811]]// |