https://lea-linux.org/docs/api.php?action=feedcontributions&user=Merlin8282&feedformat=atomLea Linux - Contributions [fr]2024-03-29T13:52:44ZContributionsMediaWiki 1.40.1https://lea-linux.org/docs/index.php?title=Fiches:Administration-fichewakeonlan&diff=14536Fiches:Administration-fichewakeonlan2007-04-26T12:16:46Z<p>Merlin8282 : </p>
<hr />
<div>[[Category:Installation, administration du système]]<br />
<div class="fiche"><br />
<br />
= Comment démarrer un ordinateur à distance ? =<br />
<br />
<div class="leatitre">Comment démarrer un ordinateur à distance ?</div><div class="leapar">Par [[Utilisateur:merlin8282|merlin8282]]</div><br />
<br />
Il est possible de démarrer un ordinateur sans toucher à son bouton d'alimentation, simplement via le réseau. N'avez-vous jamais remarqué que les LEDs de la plupart des cartes réseau restent allumées même quand l'ordinateur est éteint ? Maintenant vous saurez pourquoi.<br />
<br />
== Comment ça fonctionne ? ==<br />
<br />
L'idée est d'envoyer un «paquet magique» (''magic packet'' en anglais) sur le réseau. La carte réseau reçoit ce paquet, vérifie sa validité et si tout est bon, elle fait démarrer l'ordinateur.<br />
<br />
=== Oui mais encore... ===<br />
<br />
Ce fameux paquet magique peut être envoyé via un certain nombre de protocoles en mode non-connecté. Généralement c'est UDP qui est utilisé. Le contenu de ce paquet est défini comme suit :<br />
* D'abord il y a 6 fois la séquence 0xFF : FF FF FF FF FF FF<br />
* Ensuite, il y a seize fois l'adresse MAC de la machine que l'on veut réveiller.<br />
* Enfin, on peut y mettre un mot de passe long de 4 ou 6 octets.<br />
<br />
== Compatibilité ==<br />
<br />
Je ne parle ici que pour les ordinateurs du type PC. Je ne sais pas si cette fonctionnalité existe sur les autres architectures, comme les ordinateurs de Apple ou Sun par exemple.<br />
<br />
Si vous avez une carte réseau intégrée à la carte-mère il est fort probable qu'il n'y ait simplement qu'à activer l'option dans le BIOS. Cette option se trouve dans la section de gestion d'énergie (''Power management'') sous un nom du genre ''Wake on LAN'' ou ''Remote wake up''. Toutefois, il faut aussi éventuellement activer l'option permettant le démarrage autre que par le bouton : ''PME boot event'' ou similaire.<br />
<br />
Si votre carte réseau est dans un port ISA ou PCI < 2.2, il faut utiliser un câble pour relier la carte réseau à la carte-mère. Eh oui, comment voulez-vous que la carte réseau soit alimentée sinon ?<br />
<br />
Si votre carte réseau est compatible PCI 2.2 (évidemment, il en va de même pour votre port PCI) il n'y a normalement pas besoin de câble : l'alimentation de la carte réseau se fait par le bus PCI.<br />
<br />
== Mise en oeuvre ==<br />
<br />
Première chose, activer les options dans le BIOS (Cf ci-dessus) et si besoin vérifier que le câble d'alimentation de la carte réseau soit en place.<br />
<br />
L'utilitaire ethtool n'est pas forcément nécessaire mais est toutefois bien pratique pour voir si votre carte supporte le démarrage par le réseau :<br />
<code>$ sudo ethtool eth0<br />
Settings for eth1:<br />
[...]<br />
Supports Wake-on: pumbg<br />
Wake-on: mb</code><br />
Le minimum est d'avoir un 'g' à la première ligne de cet exemple et autre chose qu'un 'd' à la seconde, en fonction de la manière dont vous voulez démarrer votre ordinateur. RTFM pour les détails (''man ethtool'').<br />
<br />
Si la dernière ligne de cet exemple comporte un 'd', lancez ethtool avec l'option suivante qui a pour but d'activer le réveil sur réception de paquet magique :<br />
<code>$ sudo ethtool -s eth0 wol g</code><br />
<br />
Relevez l'adresse MAC de votre carte réseau (si vous en avez plusieurs, prenez soin de noter la bonne adresse) à l'aide de la commande ''ifconfig'' :<br />
<code>$ sudo ifconfig eth0<br />
eth0 Lien encap:Ethernet HWaddr 00:11:22:AA:CC:FF<br />
[...]</code><br />
Éteignez votre ordinateur. Attention, ''a priori'' il faudrait que ce soit fait de manière logicielle, via ACPI. Normalement toutes les distributions pas trop anciennes (i.e. de moins d'une demi-douzaine d'années) sont configurées pour procéder ainsi.<br />
<br />
À présent il vous faut lancer à partir d'un autre ordinateur sur le réseau (ce peut être un ordinateur tout comme ce peut être un PDA) l'une des deux commandes suivantes, au choix :<br />
<code>$ sudo etherwake 00:11:22:AA:CC:FF<br />
$ wakeonlan 00:11:22:AA:CC:FF</code><br />
...en adaptant évidemment l'adresse MAC.<br />
<br />
Voilà, votre ordinateur doit normalement démarrer !<br />
<br />
== Résolution des problèmes ==<br />
<br />
Tout d'abord, si votre ordinateur refuse de démarrer relisez cet article et vérifiez tout, point par point. Vérifiez aussi que les LEDs de votre carte réseau soient allumées quand l'ordinateur est éteint, ainsi que les options dans le BIOS.<br />
Essayez avec différentes options pour ethtool.<br />
Vérifiez aussi, cela va de soi, que le câble réseau soit bien branché, des deux côtés ! De toute manière, ethtool détecte s'il y a une liaison ou non.<br />
<br />
== Liens ==<br />
<br />
L'article sur Wikipédia me semble suffisant, étant donné qu'il contient aussi des liens : [http://fr.wikipedia.org/wiki/Wake-on-LAN Wake on LAN sur la Wikipédia]<br />
<br />
= Copyright =<br />
Copyright &copy; merlin8282<br />
{{CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Fiches:Administration-fichewakeonlan&diff=14534Fiches:Administration-fichewakeonlan2007-04-26T12:10:53Z<p>Merlin8282 : /* Compatibilité */</p>
<hr />
<div>[[Category:Installation, administration du système]]<br />
<div class="fiche"><br />
<br />
= Comment démarrer un ordinateur à distance ? =<br />
<br />
<div class="leatitre">Comment démarrer un ordinateur à distance ?</div><div class="leapar">Par [[Utilisateur:merlin8282|merlin8282]]</div><br />
<br />
Il est possible de démarrer un ordinateur sans toucher à son bouton d'alimentation, simplement via le réseau. N'avez-vous jamais remarqué que les LEDs de la plupart des cartes réseau restent allumées même quand l'ordinateur est éteint ? Maintenant vous saurez pourquoi.<br />
<br />
== Comment ça fonctionne ? ==<br />
<br />
L'idée est d'envoyer un «paquet magique» (''magic packet'' en anglais) sur le réseau. La carte réseau reçoit ce paquet, vérifie sa validité et si tout est bon, elle fait démarrer l'ordinateur.<br />
<br />
=== Oui mais encore... ===<br />
<br />
Ce fameux paquet magique peut être envoyé via un certain nombre de protocoles en mode non-connecté. Généralement c'est UDP qui est utilisé. Le contenu de ce paquet est défini comme suit :<br />
* D'abord il y a 6 fois la séquence 0xFF : FF FF FF FF FF FF<br />
* Ensuite, il y a seize fois l'adresse MAC de la machine que l'on veut réveiller.<br />
* Enfin, on peut y mettre un mot de passe long de 4 ou 6 octets.<br />
<br />
== Compatibilité ==<br />
<br />
Je ne parle ici que pour les ordinateurs du type PC. Je ne sais pas si cette fonctionnalité existe sur les autres architectures, comme les ordinateurs de Apple ou Sun par exemple.<br />
<br />
Si vous avez une carte réseau intégrée à la carte-mère il est fort probable qu'il n'y ait simplement qu'à activer l'option dans le BIOS. Cette option se trouve dans la section de gestion d'énergie (''Power management'') sous un nom du genre ''Wake on LAN'' ou ''Remote wake up''. Toutefois, il faut aussi éventuellement activer l'option permettant le démarrage autre que par le bouton : ''PME boot event'' ou similaire.<br />
<br />
Si votre carte réseau est dans un port ISA ou PCI < 2.2, il faut utiliser un câble pour relier la carte réseau à la carte-mère. Eh oui, comment voulez-vous que la carte réseau soit alimentée sinon ?<br />
<br />
Si votre carte réseau est compatible PCI 2.2 (évidemment, il en va de même pour votre port PCI) il n'y a normalement pas besoin de câble : l'alimentation de la carte réseau se fait par le bus PCI.<br />
<br />
== Mise en oeuvre ==<br />
<br />
Première chose, activer les options dans le BIOS (Cf ci-dessus) et si besoin vérifier que le câble d'alimentation de la carte réseau soit en place.<br />
<br />
L'utilitaire ethtool n'est pas forcément nécessaire mais est toutefois bien pratique pour voir si votre carte supporte le démarrage par le réseau :<br />
<code>$ sudo ethtool eth0<br />
Settings for eth1:<br />
[...]<br />
Supports Wake-on: pumbg<br />
Wake-on: mb</code><br />
Le minimum est d'avoir un 'g' à la première ligne de cet exemple et autre chose qu'un 'd' à la seconde, en fonction de la manière dont vous voulez démarrer votre ordinateur. RTFM pour les détails (''man ethtool'').<br />
<br />
Si la dernière ligne de cet exemple comporte un 'd', lancez ethtool avec l'option suivante qui a pour but d'activer le réveil sur réception de paquet magique :<br />
<code>$ sudo ethtool -s eth0 wol g</code><br />
<br />
Relevez l'adresse MAC de votre carte réseau (si vous en avez plusieurs, prenez soin de noter la bonne adresse) à l'aide de la commande ''ifconfig'' :<br />
<code>$ sudo ifconfig eth0<br />
eth0 Lien encap:Ethernet HWaddr 00:11:22:AA:CC:FF<br />
[...]</code><br />
Éteignez votre ordinateur. Attention, ''a priori'' il faudrait que ce soit fait de manière logicielle, via ACPI. Normalement toutes les distributions pas trop anciennes (i.e. de moins d'une demi-douzaine d'années) sont configurées pour procéder ainsi.<br />
<br />
À présent il vous faut lancer à partir d'un autre ordinateur sur le réseau (ce peut être un ordinateur tout comme ce peut être un PDA) l'une des deux commandes suivantes, au choix :<br />
<code>$ sudo etherwake 00:11:22:AA:CC:FF<br />
$ wakeonlan 00:11:22:AA:CC:FF</code><br />
...en adaptant évidemment l'adresse MAC.<br />
<br />
Voilà, votre ordinateur doit normalement démarrer !<br />
<br />
== Résolution des problèmes ==<br />
<br />
Tout d'abord, si votre ordinateur refuse de démarrer relisez cet article et vérifiez tout, point par point. Vérifiez aussi que les LEDs de votre carte réseau soient allumées quand l'ordinateur est éteint, ainsi que les options dans le BIOS.<br />
Essayez avec différentes options pour ethtool.<br />
Vérifiez aussi, cela va de soi, que le câble réseau soit bien branché, des deux côtés ! De toute manière, ethtool détecte s'il y a une liaison ou non.<br />
<br />
= Copyright =<br />
Copyright &copy; merlin8282<br />
{{CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Fiches:Administration-fichewakeonlan&diff=14533Fiches:Administration-fichewakeonlan2007-04-26T12:07:31Z<p>Merlin8282 : /* Comment démarrer un ordinateur à distance ? */</p>
<hr />
<div>[[Category:Installation, administration du système]]<br />
<div class="fiche"><br />
<br />
= Comment démarrer un ordinateur à distance ? =<br />
<br />
<div class="leatitre">Comment démarrer un ordinateur à distance ?</div><div class="leapar">Par [[Utilisateur:merlin8282|merlin8282]]</div><br />
<br />
Il est possible de démarrer un ordinateur sans toucher à son bouton d'alimentation, simplement via le réseau. N'avez-vous jamais remarqué que les LEDs de la plupart des cartes réseau restent allumées même quand l'ordinateur est éteint ? Maintenant vous saurez pourquoi.<br />
<br />
== Comment ça fonctionne ? ==<br />
<br />
L'idée est d'envoyer un «paquet magique» (''magic packet'' en anglais) sur le réseau. La carte réseau reçoit ce paquet, vérifie sa validité et si tout est bon, elle fait démarrer l'ordinateur.<br />
<br />
=== Oui mais encore... ===<br />
<br />
Ce fameux paquet magique peut être envoyé via un certain nombre de protocoles en mode non-connecté. Généralement c'est UDP qui est utilisé. Le contenu de ce paquet est défini comme suit :<br />
* D'abord il y a 6 fois la séquence 0xFF : FF FF FF FF FF FF<br />
* Ensuite, il y a seize fois l'adresse MAC de la machine que l'on veut réveiller.<br />
* Enfin, on peut y mettre un mot de passe long de 4 ou 6 octets.<br />
<br />
== Compatibilité ==<br />
<br />
Si vous avez une carte réseau intégrée à la carte-mère il est fort probable qu'il n'y ait simplement qu'à activer l'option dans le BIOS. Cette option se trouve dans la section de gestion d'énergie (''Power management'') sous un nom du genre ''Wake on LAN'' ou ''Remote wake up''. Toutefois, il faut aussi éventuellement activer l'option permettant le démarrage autre que par le bouton : ''PME boot event'' ou similaire.<br />
<br />
Si votre carte réseau est dans un port ISA ou PCI < 2.2, il faut utiliser un câble pour relier la carte réseau à la carte-mère. Eh oui, comment voulez-vous que la carte réseau soit alimentée sinon ?<br />
<br />
Si votre carte réseau est compatible PCI 2.2 (évidemment, il en va de même pour votre port PCI) il n'y a normalement pas besoin de câble : l'alimentation de la carte réseau se fait par le bus PCI.<br />
<br />
== Mise en oeuvre ==<br />
<br />
Première chose, activer les options dans le BIOS (Cf ci-dessus) et si besoin vérifier que le câble d'alimentation de la carte réseau soit en place.<br />
<br />
L'utilitaire ethtool n'est pas forcément nécessaire mais est toutefois bien pratique pour voir si votre carte supporte le démarrage par le réseau :<br />
<code>$ sudo ethtool eth0<br />
Settings for eth1:<br />
[...]<br />
Supports Wake-on: pumbg<br />
Wake-on: mb</code><br />
Le minimum est d'avoir un 'g' à la première ligne de cet exemple et autre chose qu'un 'd' à la seconde, en fonction de la manière dont vous voulez démarrer votre ordinateur. RTFM pour les détails (''man ethtool'').<br />
<br />
Si la dernière ligne de cet exemple comporte un 'd', lancez ethtool avec l'option suivante qui a pour but d'activer le réveil sur réception de paquet magique :<br />
<code>$ sudo ethtool -s eth0 wol g</code><br />
<br />
Relevez l'adresse MAC de votre carte réseau (si vous en avez plusieurs, prenez soin de noter la bonne adresse) à l'aide de la commande ''ifconfig'' :<br />
<code>$ sudo ifconfig eth0<br />
eth0 Lien encap:Ethernet HWaddr 00:11:22:AA:CC:FF<br />
[...]</code><br />
Éteignez votre ordinateur. Attention, ''a priori'' il faudrait que ce soit fait de manière logicielle, via ACPI. Normalement toutes les distributions pas trop anciennes (i.e. de moins d'une demi-douzaine d'années) sont configurées pour procéder ainsi.<br />
<br />
À présent il vous faut lancer à partir d'un autre ordinateur sur le réseau (ce peut être un ordinateur tout comme ce peut être un PDA) l'une des deux commandes suivantes, au choix :<br />
<code>$ sudo etherwake 00:11:22:AA:CC:FF<br />
$ wakeonlan 00:11:22:AA:CC:FF</code><br />
...en adaptant évidemment l'adresse MAC.<br />
<br />
Voilà, votre ordinateur doit normalement démarrer !<br />
<br />
== Résolution des problèmes ==<br />
<br />
Tout d'abord, si votre ordinateur refuse de démarrer relisez cet article et vérifiez tout, point par point. Vérifiez aussi que les LEDs de votre carte réseau soient allumées quand l'ordinateur est éteint, ainsi que les options dans le BIOS.<br />
Essayez avec différentes options pour ethtool.<br />
Vérifiez aussi, cela va de soi, que le câble réseau soit bien branché, des deux côtés ! De toute manière, ethtool détecte s'il y a une liaison ou non.<br />
<br />
= Copyright =<br />
Copyright &copy; merlin8282<br />
{{CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Fiches:Administration-fichewakeonlan&diff=14532Fiches:Administration-fichewakeonlan2007-04-26T11:58:20Z<p>Merlin8282 : </p>
<hr />
<div>[[Category:Installation, administration du système]]<br />
<div class="fiche"><br />
<br />
= Comment démarrer un ordinateur à distance ? =<br />
<br />
<div class="leatitre">Comment démarrer un ordinateur à distance ?</div><div class="leapar">[[Utilisateur:merlin8282 merlin8282]]</div><br />
<br />
Il est possible de démarrer un ordinateur sans toucher à son bouton d'alimentation, simplement via le réseau. N'avez-vous jamais remarqué que les LEDs de la plupart des cartes réseau restent allumées même quand l'ordinateur est éteint ? Maintenant vous saurez pourquoi.<br />
<br />
== Comment ça fonctionne ? ==<br />
<br />
L'idée est d'envoyer un «paquet magique» (''magic packet'' en anglais) sur le réseau. La carte réseau reçoit ce paquet, vérifie sa validité et si tout est bon, elle fait démarrer l'ordinateur.<br />
<br />
=== Oui mais encore... ===<br />
<br />
Ce fameux paquet magique peut être envoyé via un certain nombre de protocoles en mode non-connecté. Généralement c'est UDP qui est utilisé. Le contenu de ce paquet est défini comme suit :<br />
* D'abord il y a 6 fois la séquence 0xFF : FF FF FF FF FF FF<br />
* Ensuite, il y a seize fois l'adresse MAC de la machine que l'on veut réveiller.<br />
* Enfin, on peut y mettre un mot de passe long de 4 ou 6 octets.<br />
<br />
== Compatibilité ==<br />
<br />
Si vous avez une carte réseau intégrée à la carte-mère il est fort probable qu'il n'y ait simplement qu'à activer l'option dans le BIOS. Cette option se trouve dans la section de gestion d'énergie (''Power management'') sous un nom du genre ''Wake on LAN'' ou ''Remote wake up''. Toutefois, il faut aussi éventuellement activer l'option permettant le démarrage autre que par le bouton : ''PME boot event'' ou similaire.<br />
<br />
Si votre carte réseau est dans un port ISA ou PCI < 2.2, il faut utiliser un câble pour relier la carte réseau à la carte-mère. Eh oui, comment voulez-vous que la carte réseau soit alimentée sinon ?<br />
<br />
Si votre carte réseau est compatible PCI 2.2 (évidemment, il en va de même pour votre port PCI) il n'y a normalement pas besoin de câble : l'alimentation de la carte réseau se fait par le bus PCI.<br />
<br />
== Mise en oeuvre ==<br />
<br />
Première chose, activer les options dans le BIOS (Cf ci-dessus) et si besoin vérifier que le câble d'alimentation de la carte réseau soit en place.<br />
<br />
L'utilitaire ethtool n'est pas forcément nécessaire mais est toutefois bien pratique pour voir si votre carte supporte le démarrage par le réseau :<br />
<code>$ sudo ethtool eth0<br />
Settings for eth1:<br />
[...]<br />
Supports Wake-on: pumbg<br />
Wake-on: mb</code><br />
Le minimum est d'avoir un 'g' à la première ligne de cet exemple et autre chose qu'un 'd' à la seconde, en fonction de la manière dont vous voulez démarrer votre ordinateur. RTFM pour les détails (''man ethtool'').<br />
<br />
Si la dernière ligne de cet exemple comporte un 'd', lancez ethtool avec l'option suivante qui a pour but d'activer le réveil sur réception de paquets magiques :<br />
<code>$ sudo ethtool -s eth0 wol g</code><br />
<br />
Relevez l'adresse MAC de votre carte réseau (si vous en avez plusieurs, prenez soin de noter la bonne adresse) à l'aide de la commande ''ifconfig'' :<br />
<code>$ sudo ifconfig eth0<br />
eth0 Lien encap:Ethernet HWaddr 00:11:22:AA:CC:FF<br />
[...]</code><br />
Éteignez votre ordinateur. Attention, ''a priori'' il faudrait que ce soit fait de manière logicielle, via ACPI. Normalement toutes les distributions pas trop anciennes (i.e. de moins d'une demi-douzaine d'années) sont configurées pour procéder ainsi.<br />
<br />
À présent il vous faut lancer à partir d'un autre ordinateur sur le réseau (ce peut être un ordinateur tout comme ce peut être un PDA) l'une des deux commandes suivantes, au choix :<br />
<code>$ sudo etherwake 00:11:22:AA:CC:FF<br />
$ wakeonlan 00:11:22:AA:CC:FF</code><br />
...en adaptant évidemment l'adresse MAC.<br />
<br />
Voilà, votre ordinateur doit normalement démarrer !<br />
<br />
== Résolution des problèmes ==<br />
<br />
Tout d'abord, si votre ordinateur refuse de démarrer relisez cet article et vérifiez tout, point par point. Vérifiez aussi que les LEDs de votre carte réseau soient allumées quand l'ordinateur est éteint, ainsi que les options dans le BIOS.<br />
Essayez avec différentes options pour ethtool.<br />
Vérifiez aussi, cela va de soi, que le câble réseau soit bien branché, des deux côtés ! De toute manière, ethtool détecte s'il y a une liaison ou non.<br />
<br />
= Copyright =<br />
Copyright &copy; merlin8282<br />
{{CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Mod%C3%A8le:Fiches:plan-installation&diff=14530Modèle:Fiches:plan-installation2007-04-26T10:37:27Z<p>Merlin8282 : /* Installation, administration du système */</p>
<hr />
<div>=== Installation, administration du système ===<br />
*[[Intro-wannapenguin|Bien choisir sa distribution]]<br />
*[[Fiches:administration-ficheinstall|Comment installer un programme ?]]<br />
*[[Fiches:administration-fichelaunch|Comment lancer une application ?]]<br />
*[[Fiches:administration-ficheurpmi|Configurer l'installation de programmes via internet avec Mandriva]]<br />
*[[Fiches:administration-ficheautologin|Comment connecter automatiquement un utilisateur au démarrage ?]]<br />
*[[Fiches:administration-fichewakeonlan|Démarrer son ordinateur à distance]]</div>Merlin8282https://lea-linux.org/docs/index.php?title=Mod%C3%A8le:Plan-interface_graphique&diff=14529Modèle:Plan-interface graphique2007-04-26T10:35:43Z<p>Merlin8282 : /* à rédiger */</p>
<hr />
<div>=== L’interface graphique ===<br />
*[[Fiches:Comment changer le thème de Gnome ?|Comment changer le thème de Gnome ?]]<br />
*[[Fiches:Comment modifier la carte de mon clavier ?|Comment modifier la carte de mon clavier ?]]<br />
====à rédiger====<br />
*[[Fiches:Comment changer le thème de KDE ?|Comment changer le thème de KDE ?]]</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Merlin8282&diff=14334Discussion utilisateur:Merlin82822007-02-22T08:52:48Z<p>Merlin8282 : </p>
<hr />
<div>== Hydroxyde de monooxygène ==<br />
<br />
Tu as écrit, dans la section "ce que je n'aime pas" : "le monoxyde de dihydrogène sauf pour boire". Serais-tu resté trop longtemps en compagnie de félins et aurais-tu adopté leur méthode de nettoyage à la place de la douche ? LOL ;-P<br />
<br />
/me > Ha ! Non, j'utilise un aspirateur à particules... #%b<br />
<br />
merlin8282>> Oui, j'y ai pensé quand j'ai rédigé ma page utilisateur sur la Wikipédia ^^</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Merlin8282&diff=14333Discussion utilisateur:Merlin82822007-02-22T08:52:23Z<p>Merlin8282 : </p>
<hr />
<div><br />
== Hydroxyde de monooxygène ==<br />
<br />
Tu as écrit, dans la section "ce que je n'aime pas" : "le monoxyde de dihydrogène sauf pour boire". Serais-tu resté trop longtemps en compagnie de félins et aurais-tu adopté leur méthode de nettoyage à la place de la douche ? LOL ;-P<br />
<br />
/me > Ha ! Non, j'utilise un aspirateur à particules... #%b<br />
<br />
Oui, j'y ai pensé quand j'ai rédigé ma page utilisateur sur la Wikipédia ^^</div>Merlin8282https://lea-linux.org/docs/index.php?title=Utilisateur:Merlin8282&diff=14332Utilisateur:Merlin82822007-02-22T08:49:24Z<p>Merlin8282 : </p>
<hr />
<div>Ma page utilisateur sur la Wikipédia, celle que je maintiens : http://fr.wikipedia.org/wiki/Utilisateur:Merlin8282<br />
<br />
Mon site perso, hébergé sur mon propre ordinateur : http://merlin8282.homelinux.net<br />
<br />
Mon profil sur le forum de Léa : http://lea-linux.org/pho/profile/15/2890<br />
<br />
=Moi=<br />
Bon, pour parler un peu de moi, puisque c'est apparemment un peu le but de cette page... Qui suis-je ?<br />
<br />
Je suis un alsacien né en 1982 dans le bas-rhin. Ma découverte de l'informatique m'a fait passer et obtenir un BTS Informatique Industrielle en 2002, après un baccalauréat STI Génie Mécanique (F1) en 2000. Voilà pour mes études.<br />
<br />
=Ma personnalité...=<br />
Comment en parler ? Je ne fume pas et n'ai jamais fumé. De temps à autres, de manière très occasionnelle (comprendre "très rarement") je bois un peu d'alcool mais je n'ai jamais été bourré. Cf. [http://lea-linux.org/nocache/action=view/index/Utilisateur:Merlin8282.html#Ce_que_je_n'aime_pas_(dans_le_désordre_aussi) ici]. Je veux être un homme bon sans pour autant me sacrifier, vivre de manière pacifique et autonome.<br />
Je n'aime pas faire le mouton, "comme tout le monde". Par conséquent, je n'ai pas de téléphone mobile, je n'aime pas le football, mon ordinateur fonctionne avec des logiciels libres, je n'aime pas la musique promue par les majors et j'ai une sainte horreur de la publicité répétitive (laveur de cerveau, c'est un métier paraît-il) sous toutes ses formes. Toutefois, je trouve par exemple que ce que font les jacky avec leurs voitures modifiées est totalement inutile, ma voiture est donc 100% d'origine. Je n'ai pas de moto, "comme tout le monde ces temps-ci". Mon but est de devenir humble et sage, d'avoir des connaissances dans les domaines qui m'intéressent.<br />
Quand je fais quelque-chose, il faut que ce soit bien fait sinon cela ne sert à rien (ou pas grand-chose) que ça soit fait.<br />
La vie ? Ce qui doit arriver arrive, c'est ainsi. Rien ne sert de stresser et d'être anxieux : cela ne peut qu'empirer les choses.<br />
<br />
=Ce que j'aime (dans le désordre)=<br />
Le jambon, le cla#%btis, ma copine bien qu'elle ne soit pas un objet !, l'humilité, la sagesse, manger, le sirop de violette, certains délires, certains fruits mais pas tous, faire l'imbécile, GNU/Linux, la diversité, la mayonnaise industrielle (celle faite maison a un goût que je n'aime pas, désolé), l'idée qu'on puisse un jour vivre tous en harmonie sans corruption gaspillage ni haine, les romans de Philip K. Dick et Stanislaw Lem ainsi que "La cité des permutants" de Greg Egan, Autonomy Project, les choses étranges et inexpliquées de notre monde, les modes de pensée différents ("penser à ce à quoi on n'aurait pas pensé"), la philosophie du libre (musique, logiciels, etc.), les réflexions et questions existentielles qui n'ont pas forcément pour réponse 42 (qui sommes-nous ? pourquoi ? les concepts de réalité, parallèles, dimensions, etc.), <br />
<br />
=Ce que je n'aime pas (dans le désordre aussi)=<br />
La bière, qu'on veuille m'inciter/forcer à boire, la connerie sous toutes ses formes ('''attention : la connerie != les conneries'''), la fumée (cigarette, etc.), le monoxyde de dihydrogène sauf pour boire, le poisson, les champignons, les oignons, qu'on se foute de moi, les monopoles, le football, qu'on me demande sans arrêt de l'aide pour réparer les ordinateurs ou même pour donner des conseils, quand d'autres savent le faire (genre "Il FAUT que j'envoie une image par e-mail à un_tel et je ne sais pas comment faire, j'ai absolument besoin de toi et pas quelqu'un d'autre !"), les pollueurs, les gens sans scrupules, que l'on ne respecte pas le code de la route sauf si c'est à but écologique et que ce n'est pas dangereux, le gaspillage, la guerre, les comportements d'autruche et de mouton, les films américains industriels : ils ont tous exactement la même structure, qu'on me prenne la tête, notre système social, <br />
<br />
=Ce dont je me fiche=<br />
La météo d'hier,</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=14114Tenir compte de la sécurité au quotidien2006-12-19T17:09:16Z<p>Merlin8282 : /* Mettre en place un système de sauvegarde */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tous ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretien, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et les laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant qui se fait alors passer pour l'agent d'un service technique quelconque, il prétend avoir besoin de leur mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un aplomb et un génie de l'improvisation alliés à des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple: Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demande.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles chiffrés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
==== Configuration minimale de Snort ====<br />
Voir : [http://lea-linux.org/cached/index/Reseau-secu-SNORT.html Installation de SNORT] (doc Lea).<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
Le mieux est encore de lire une [http://lea-linux.org/nocache/index/Catégorie:Trucs_Sauvegarde.html# documentation correcte à ce sujet], en l'occurence [http://lea-linux.org/nocache/index/Les_sauvegardes.html cet article].<br />
<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== Les symptômes ===<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient inoffensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affolement.<br />
<br />
== Récupération d'une machine corrompue ==<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute chose ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseau)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faites une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez-la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dit que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
== Voir aussi ==<br />
=== Sur le forum ===<br />
* [http://lea-linux.org/pho/read/1/311418#debut Hack VulnScan par perl... (lolotux)]<br />
<br />
=== Liens externes ===<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=14113Tenir compte de la sécurité au quotidien2006-12-19T17:08:38Z<p>Merlin8282 : /* Mettre en place un système de sauvegarde */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tous ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretien, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et les laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant qui se fait alors passer pour l'agent d'un service technique quelconque, il prétend avoir besoin de leur mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un aplomb et un génie de l'improvisation alliés à des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple: Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demande.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles chiffrés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
==== Configuration minimale de Snort ====<br />
Voir : [http://lea-linux.org/cached/index/Reseau-secu-SNORT.html Installation de SNORT] (doc Lea).<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
Le mieux est encore de lire une [http://lea-linux.org/cached/index/Catégorie:Trucs_Sauvegarde.html# documentation correcte à ce sujet], en l'occurence [http://lea-linux.org/cached/index/Les_sauvegardes.html cet article].<br />
<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== Les symptômes ===<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient inoffensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affolement.<br />
<br />
== Récupération d'une machine corrompue ==<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute chose ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseau)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faites une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez-la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dit que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
== Voir aussi ==<br />
=== Sur le forum ===<br />
* [http://lea-linux.org/pho/read/1/311418#debut Hack VulnScan par perl... (lolotux)]<br />
<br />
=== Liens externes ===<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=14016Tenir compte de la sécurité au quotidien2006-12-05T13:36:06Z<p>Merlin8282 : </p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tous ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretien, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et les laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant qui se fait alors passer pour l'agent d'un service technique quelconque, il prétend avoir besoin de leur mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un aplomb et un génie de l'improvisation alliés à des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple: Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demande.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles chiffrés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
==== Configuration minimale de Snort ====<br />
Voir : [http://lea-linux.org/cached/index/Reseau-secu-SNORT.html Installation de SNORT] (doc Lea).<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
Le mieux est encore de lire une [http://lea-linux.org/nocache/index/Catégorie:Trucs_Sauvegarde.html# documentation correcte à ce sujet], en l'occurence [http://lea-linux.org/nocache/index/Les_sauvegardes.html cet article].<br />
<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== Les symptômes ===<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient inoffensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affolement.<br />
<br />
== Récupération d'une machine corrompue ==<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute chose ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseau)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faites une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez-la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dit que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
== Voir aussi ==<br />
=== Sur le forum ===<br />
* [http://lea-linux.org/pho/read/1/311418#debut Hack VulnScan par perl... (lolotux)]<br />
<br />
=== Liens externes ===<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13643Tenir compte de la sécurité au quotidien2006-09-06T07:54:31Z<p>Merlin8282 : /* Sauvegardes et IDS systèmes */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tous ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles chiffrés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
==== Configuration minimale de Snort ====<br />
Voir : [http://lea-linux.org/cached/index/Reseau-secu-SNORT.html Installation de SNORT] (doc Lea).<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
Le mieux est encore de lire une [http://lea-linux.org/nocache/index/Catégorie:Trucs_Sauvegarde.html# documentation correcte à ce sujet], en l'occurence [http://lea-linux.org/nocache/index/Les_sauvegardes.html cet article].<br />
<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== Les symptômes ===<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Récupération d'une machine corrompue ==<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute chose ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseau)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faites une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez-la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dit que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Les_sauvegardes&diff=13642Les sauvegardes2006-09-06T07:52:47Z<p>Merlin8282 : /* Les outils de sauvegarde */</p>
<hr />
<div>== Les sauvegardes ==<br />
<br />
[[Category:Les plus de l'administration]]<br />
= Sauvegarder son système, ses données =<br />
<br />
<div class="leatitre">Sauvegarder</div><div class="leapar">Par Oudoubah</div><div class="leadesc"><br />
Sauvegarder son système ou ses données : que garder ? Quels logiciels utiliser ? Sur quel support ?<br />
</div><br />
<br />
== Que sauvegarder ==<br />
<br />
Avant d'entamer les différentes manières et d'apprendre les divers outils permettant d'effectuer une sauvegarde, il est tout d'abord nécessaire de définir ce que l'on souhaite sauver. On peut soit choisir de sauvegarder uniquement ses données importantes (plus simple à mettre en place), soit son système entier.<br />
<br />
=== Les types de sauvegardes ===<br />
<br />
Il existe deux types de sauvegardes :<br />
* '''Totales''' : avec une sauvegarde totale, on sauve l'intégralité des données que l'on souhaite garder<br />
* '''Partielles''' : Une sauvegarde partielle suit une sauvegarde totale ou une sauvegarde partielle. Ici, nous allons seulement sauver les nouveaux fichiers ou ceux qui ont été modifiés depuis la dernière sauvegarde. Cette sauvegarde est beaucoup plus rapide, mais peut demander beaucoup de manipulations en cas de restauration. Pour restaurer, il faudra partir de la dernière sauvegarde totale, puis passer dans l'ordre chronologique les sauvegardes partielles.<br />
<br />
=== Les médias ===<br />
<br />
Les médias possibles sont :<br />
* '''CD/DVD''' : ils permettent de stocker les données par tranches de 650 Mo, 700 Mo, 4.7 Go ou 8 Go. Ces médias optiques ont un support chimique, ce qui implique une déterioration avec le temps. Un CD gravé aujourd'hui et stocké dans son boîtier ne sera peut être pas lisible dans 10 ans! <br />
* '''disque dur''' : ce disque peut être interne, usb, un disque réseau (NAS), ou un partage réseau (lufs/nfs/samba/ftp). Il présente d'avoir l'avantage d'une capacité plus importante, voire la possibilité d'externaliser ses sauvegardes (utile si la maison brûle).<br />
* '''Clé usb''' : leurs capacités augmentent et peuvent être supérieures à celle d'un CD. Un de ses avantages est que c'est un média de stockage peu cher qui peut fonctionner sur d'anciens ordinateurs (pas besoin de graveur). C'est un des médias les plus pratiques : rapidité d'écriture par rapport à un CD (pas d'image à faire), peu encombrant, mais il est limité en cycles de lecture/écriture.<br />
<br />
Le choix du média sera dicté en partie selon la quantité de données à sauvegarder.<br />
<br />
== Les outils de sauvegarde ==<br />
<br />
Avant de sauvegarder, il faut commencer par recenser ce que l'on souhaite garder. De plus, l'idée serait que les utilisateurs n'aient aucun fichier en cours de modification au moment de la sauvegarde. On ne pourra pas garantir, le cas contraire, que son fichier sera bien sauvegardé.<br />
<br />
=== la commande tar ===<br />
<br />
La commande tar permet de sauvegarder un ensemble de fichiers dans une archive qui peut être compressée. Les fichiers ne seront donc pas directement lisibles.<br />
Pour créer une archive, il suffit d'utiliser la commande:<br />
<code>tar c nom_archive [fichier repertoire1] [fichier ou repertoire2]...</code><br />
Différentes options peuvent s'avérer utiles :<br />
* -v : mode verbeux, liste les fichiers qui sont en cours d'archivage<br />
* -z (resp. j) : permet de compresser l'archive avec le format gzip (resp. bzip2). Le format bzip2 permet d'avoir des fichiers plus petits au coût d'un traitement plus long<br />
* --preserve : permet de sauvegarder les permissions. De plus, lors de la restauration, les fichiers seront "détarrés" dans le même ordre<br />
* --same-owner : permet de sauvegarder l'appartenance du fichier<br />
* -T fichier : ''fichier'' est un fichier où chaque ligne correspond à un fichier ou répertoire à sauvegarder<br />
* -X fichier : ''fichier'' est un fichier où chaque ligne correspond à un fichier ou répertoire à exclure parmis les répertoires à sauvegarder<br />
* --exclude=fichier : ''fichier'' sera exclu de la sauvegarde<br />
<br />
Voici un petit script de base pour mettre en place une telle sauvegarde :<br />
<code>#!/bin/bash<br />
tar [OPTIONS] /chemin/vers/un/dossier/de/sauvegarde/ma_sauvegarde.[tgz|bz2] /home/moi/</code><br />
Ce script peut être appelé périodiquement par ''cron'', il suffit d'éditer sa crontab avec ''crontab -e''.<br />
<br />
'' TODO : la restauration d'un tar''<br />
<br />
=== la commande rsync ===<br />
<br />
== Spécificités de la sauvegarde système ==<br />
<br />
== Les conseils ==<br />
* Vérifier la sauvegarde après l'avoir faite : test md5 par exemple. Ce n'est pas lorsqu'on en aura besoin qu'il faut se rendre compte que le graveur ne gravait plus!<br />
* Tester la restauration<br />
* Vérifier régulièrement (tous les ans) que l'on arrive bien à relire sa sauvegarde (voire refaire une sauvegarde sur un média neuf tous les 2 ans par exemple)</div>Merlin8282https://lea-linux.org/docs/index.php?title=Les_sauvegardes&diff=13641Les sauvegardes2006-09-06T07:44:18Z<p>Merlin8282 : </p>
<hr />
<div>== Les sauvegardes ==<br />
<br />
[[Category:Les plus de l'administration]]<br />
= Sauvegarder son système, ses données =<br />
<br />
<div class="leatitre">Sauvegarder</div><div class="leapar">Par Oudoubah</div><div class="leadesc"><br />
Sauvegarder son système ou ses données : que garder ? Quels logiciels utiliser ? Sur quel support ?<br />
</div><br />
<br />
== Que sauvegarder ==<br />
<br />
Avant d'entamer les différentes manières et d'apprendre les divers outils permettant d'effectuer une sauvegarde, il est tout d'abord nécessaire de définir ce que l'on souhaite sauver. On peut soit choisir de sauvegarder uniquement ses données importantes (plus simple à mettre en place), soit son système entier.<br />
<br />
=== Les types de sauvegardes ===<br />
<br />
Il existe deux types de sauvegardes :<br />
* '''Totales''' : avec une sauvegarde totale, on sauve l'intégralité des données que l'on souhaite garder<br />
* '''Partielles''' : Une sauvegarde partielle suit une sauvegarde totale ou une sauvegarde partielle. Ici, nous allons seulement sauver les nouveaux fichiers ou ceux qui ont été modifiés depuis la dernière sauvegarde. Cette sauvegarde est beaucoup plus rapide, mais peut demander beaucoup de manipulations en cas de restauration. Pour restaurer, il faudra partir de la dernière sauvegarde totale, puis passer dans l'ordre chronologique les sauvegardes partielles.<br />
<br />
=== Les médias ===<br />
<br />
Les médias possibles sont :<br />
* '''CD/DVD''' : ils permettent de stocker les données par tranches de 650 Mo, 700 Mo, 4.7 Go ou 8 Go. Ces médias optiques ont un support chimique, ce qui implique une déterioration avec le temps. Un CD gravé aujourd'hui et stocké dans son boîtier ne sera peut être pas lisible dans 10 ans! <br />
* '''disque dur''' : ce disque peut être interne, usb, un disque réseau (NAS), ou un partage réseau (lufs/nfs/samba/ftp). Il présente d'avoir l'avantage d'une capacité plus importante, voire la possibilité d'externaliser ses sauvegardes (utile si la maison brûle).<br />
* '''Clé usb''' : leurs capacités augmentent et peuvent être supérieures à celle d'un CD. Un de ses avantages est que c'est un média de stockage peu cher qui peut fonctionner sur d'anciens ordinateurs (pas besoin de graveur). C'est un des médias les plus pratiques : rapidité d'écriture par rapport à un CD (pas d'image à faire), peu encombrant, mais il est limité en cycles de lecture/écriture.<br />
<br />
Le choix du média sera dicté en partie selon la quantité de données à sauvegarder.<br />
<br />
== Les outils de sauvegarde ==<br />
<br />
Avant de sauvegarder, il faut commencer par recenser ce que l'on souhaite garder. De plus, l'idée serait que les utilisateurs n'aient aucun fichier en cours de modification au moment de la sauvegarde. On ne pourra pas garantir, le cas contraire, que son fichier sera bien sauvegardé.<br />
<br />
=== la commande tar ===<br />
<br />
La commande tar permet de sauvegarder un ensemble de fichiers dans une archive qui peut être compressée. Les fichiers ne seront donc pas directement lisibles.<br />
Pour créer une archive, il suffit d'utiliser la commande:<br />
<code>tar c nom_archive [fichier repertoire1] [fichier ou repertoire2]...</code><br />
Différentes options peuvent s'avérer utiles :<br />
* -v : mode verbeux, liste les fichiers qui sont en cours d'archivage<br />
* -z (resp. j) : permet de compresser l'archive avec le format gzip (resp. bzip2). Le format bzip2 permet d'avoir des fichiers plus petits au coût d'un traitement plus long<br />
* --preserve : permet de sauvegarder les permissions. De plus, lors de la restauration, les fichiers seront "détarrés" dans le même ordre<br />
* --same-owner : permet de sauvegarder l'appartenance du fichier<br />
* -T fichier : ''fichier'' est un fichier où chaque ligne correspond à un fichier ou répertoire à sauvegarder<br />
* -X fichier : ''fichier'' est un fichier où chaque ligne correspond à un fichier ou répertoire à exclure parmis les répertoires à sauvegarder<br />
* --exclude=fichier : ''fichier'' sera exclu de la sauvegarde<br />
<br />
'' TODO : la restauration d'un tar''<br />
<br />
=== la commande rsync ===<br />
<br />
== Spécificités de la sauvegarde système ==<br />
<br />
== Les conseils ==<br />
* Vérifier la sauvegarde après l'avoir faite : test md5 par exemple. Ce n'est pas lorsqu'on en aura besoin qu'il faut se rendre compte que le graveur ne gravait plus!<br />
* Tester la restauration<br />
* Vérifier régulièrement (tous les ans) que l'on arrive bien à relire sa sauvegarde (voire refaire une sauvegarde sur un média neuf tous les 2 ans par exemple)</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Merlin8282&diff=13598Discussion utilisateur:Merlin82822006-09-04T11:40:48Z<p>Merlin8282 : </p>
<hr />
<div><br />
== Hydroxyde de monooxygène ==<br />
<br />
Tu as écrit, dans la section "ce que je n'aime pas" : "le monoxyde de dihydrogène sauf pour boire". Serais-tu resté trop longtemps en compagnie de félins et aurais-tu adopté leur méthode de nettoyage à la place de la douche ? LOL ;-P<br />
<br />
/me > Ha ! Non, j'utilise un aspirateur à particules... #%b</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Merlin8282&diff=13597Discussion utilisateur:Merlin82822006-09-04T11:40:13Z<p>Merlin8282 : </p>
<hr />
<div><br />
<br />
== Hydroxyde de monooxygène ==<br />
<br />
Tu as écrit, dans la section "ce que je n'aime pas" : "le monoxyde de dihydrogène sauf pour boire". Serais-tu resté trop longtemps en compagnie de félins et aurais-tu adopté leur méthode de nettoyage à la place de la douche ? LOL ;-P<br />
<br />
Ha ! Non, j'utilise un aspirateur à particules... #%b</div>Merlin8282https://lea-linux.org/docs/index.php?title=Utilisateur:Merlin8282&diff=13583Utilisateur:Merlin82822006-09-04T09:30:19Z<p>Merlin8282 : </p>
<hr />
<div>''Cette page est amenée à changer constamment mais pas régulièrement. Revenez la visiter de temps à autres ;-) .''<br />
<br />
Mon site perso, hébergé sur mon propre ordinateur : http://merlin8282.homelinux.net<br />
<br />
Mon profil sur le forum de Léa : http://lea-linux.org/pho/profile/15/2890<br />
<br />
=Moi=<br />
Bon, pour parler un peu de moi, puisque c'est apparemment un peu le but de cette page... Qui suis-je ?<br />
<br />
Je suis un alsacien né en 1982 dans le bas-rhin. Ma découverte de l'informatique m'a fait passer et obtenir un BTS Informatique Industrielle en 2002, après un baccalauréat STI Génie Mécanique (F1) en 2000. Voilà pour mes études.<br />
<br />
=Ma personnalité...=<br />
Comment en parler ? Je ne fume pas et n'ai jamais fumé. De temps à autres, de manière très occasionnelle (comprendre "très rarement") je bois un peu d'alcool mais je n'ai jamais été bourré. Cf. [http://lea-linux.org/nocache/action=view/index/Utilisateur:Merlin8282.html#Ce_que_je_n'aime_pas_(dans_le_désordre_aussi) ici]. Je veux être un homme bon sans pour autant me sacrifier, vivre de manière pacifique et autonome.<br />
Je n'aime pas faire le mouton, "comme tout le monde". Par conséquent, je n'ai pas de téléphone mobile, je n'aime pas le football, mon ordinateur fonctionne avec des logiciels libres, je n'aime pas la musique promue par les majors et j'ai une sainte horreur de la publicité répétitive (laveur de cerveau, c'est un métier paraît-il) sous toutes ses formes. Toutefois, je trouve par exemple que ce que font les jacky avec leurs voitures modifiées est totalement inutile, ma voiture est donc 100% d'origine. Je n'ai pas de moto, "comme tout le monde ces temps-ci". Mon but est de devenir humble et sage, d'avoir des connaissances dans les domaines qui m'intéressent.<br />
Quand je fais quelque-chose, il faut que ce soit bien fait sinon cela ne sert à rien (ou pas grand-chose) que ça soit fait.<br />
La vie ? Ce qui doit arriver arrive, c'est ainsi. Rien ne sert de stresser et d'être anxieux : cela ne peut qu'empirer les choses.<br />
<br />
=Ce que j'aime (dans le désordre)=<br />
Le jambon, le cla#%btis, ma copine bien qu'elle ne soit pas un objet !, l'humilité, la sagesse, manger, le sirop de violette, certains délires, certains fruits mais pas tous, faire l'imbécile, GNU/Linux, la diversité, la mayonnaise industrielle (celle faite maison a un goût que je n'aime pas, désolé), l'idée qu'on puisse un jour vivre tous en harmonie sans corruption gaspillage ni haine, les romans de Philip K. Dick et Stanislaw Lem ainsi que "La cité des permutants" de Greg Egan, Autonomy Project, les choses étranges et inexpliquées de notre monde, les modes de pensée différents ("penser à ce à quoi on n'aurait pas pensé"), la philosophie du libre (musique, logiciels, etc.), les réflexions et questions existentielles qui n'ont pas forcément pour réponse 42 (qui sommes-nous ? pourquoi ? les concepts de réalité, parallèles, dimensions, etc.), <br />
<br />
=Ce que je n'aime pas (dans le désordre aussi)=<br />
La bière, qu'on veuille m'inciter/forcer à boire, la connerie sous toutes ses formes ('''attention : la connerie != les conneries'''), la fumée (cigarette, etc.), le monoxyde de dihydrogène sauf pour boire, le poisson, les champignons, les oignons, qu'on se foute de moi, les monopoles, le football, qu'on me demande sans arrêt de l'aide pour réparer les ordinateurs ou même pour donner des conseils, quand d'autres savent le faire (genre "Il FAUT que j'envoie une image par e-mail à un_tel et je ne sais pas comment faire, j'ai absolument besoin de toi et pas quelqu'un d'autre !"), les pollueurs, les gens sans scrupules, que l'on ne respecte pas le code de la route sauf si c'est à but écologique et que ce n'est pas dangereux, le gaspillage, la guerre, les comportements d'autruche et de mouton, les films américains industriels : ils ont tous exactement la même structure, qu'on me prenne la tête, notre système social, <br />
<br />
=Ce dont je me fiche=<br />
La météo d'hier,</div>Merlin8282https://lea-linux.org/docs/index.php?title=Utilisateur:Merlin8282&diff=13582Utilisateur:Merlin82822006-09-04T09:11:34Z<p>Merlin8282 : /* Ma personnalité... */</p>
<hr />
<div>''Cette page est amenée à changer constamment mais pas régulièrement. Revenez la visiter de temps à autres ;-) .''<br />
<br />
Mon site perso, hébergé sur mon propre ordinateur : http://merlin8282.homelinux.net<br />
<br />
Mon profil sur le forum de Léa : http://lea-linux.org/pho/profile/15/2890<br />
<br />
=Moi=<br />
Bon, pour parler un peu de moi, puisque c'est apparemment un peu le but de cette page... Qui suis-je ?<br />
<br />
Je suis un alsacien né en 1982 dans le bas-rhin. Ma découverte de l'informatique m'a fait passer et obtenir un BTS Informatique Industrielle en 2002, après un baccalauréat STI Génie Mécanique (F1) en 2000. Voilà pour mes études.<br />
<br />
=Ma personnalité...=<br />
Comment en parler ? Je ne fume pas et n'ai jamais fumé. De temps à autres, de manière très occasionnelle (comprendre "très rarement") je bois un peu d'alcool mais je n'ai jamais été bourré. Cf. [http://lea-linux.org/nocache/action=view/index/Utilisateur:Merlin8282.html#Ce_que_je_n'aime_pas_(dans_le_désordre_aussi) ici]. Je veux être un homme bon sans pour autant me sacrifier, vivre de manière pacifique et autonome.<br />
Je n'aime pas faire "comme tout le monde". Par conséquent, je n'ai pas de téléphone mobile, je n'aime pas le football, mon ordinateur fonctionne avec des logiciels libres, je n'aime pas la musique promue par les majors et j'ai une sainte horreur de la publicité répétitive (laveur de cerveau, c'est un métier paraît-il) sous toutes ses formes. Toutefois, je trouve par exemple que ce que font les jacky avec leurs voitures modifiées est totalement inutile, ma voiture est donc 100% d'origine.<br />
<br />
=Ce que j'aime (dans le désordre)=<br />
Le jambon, le cla#%btis, ma copine bien qu'elle ne soit pas un objet !, l'humilité, la sagesse, manger, le sirop de violette, certains délires, certains fruits mais pas tous, faire l'imbécile, GNU/Linux, la diversité, la mayonnaise industrielle (celle faite maison a un goût que je n'aime pas, désolé), l'idée qu'on puisse un jour vivre tous en harmonie sans corruption gaspillage ni haine, les romans de Philip K. Dick et Stanislaw Lem ainsi que "La cité des permutants" de Greg Egan, Autonomy Project, les choses étranges et inexpliquées de notre monde, les modes de pensée différents ("penser à ce à quoi on n'aurait pas pensé"), <br />
<br />
=Ce que je n'aime pas (dans le désordre aussi)=<br />
La bière, qu'on veuille m'inciter/forcer à boire, la connerie sous toutes ses formes ('''attention : la connerie != les conneries'''), la fumée (cigarette, etc.), le monoxyde de dihydrogène sauf pour boire, le poisson, les champignons, les oignons, qu'on se foute de moi, les monopoles, le football, qu'on me demande sans arrêt de l'aide pour réparer les ordinateurs ou même pour donner des conseils, quand d'autres savent le faire (genre "Il FAUT que j'envoie une image par e-mail à un_tel et je ne sais pas comment faire, j'ai absolument besoin de toi et pas quelqu'un d'autre !"), les pollueurs, les gens sans scrupules,</div>Merlin8282https://lea-linux.org/docs/index.php?title=Utilisateur:Merlin8282&diff=13581Utilisateur:Merlin82822006-09-04T09:10:23Z<p>Merlin8282 : /* Ma personnalité... */</p>
<hr />
<div>''Cette page est amenée à changer constamment mais pas régulièrement. Revenez la visiter de temps à autres ;-) .''<br />
<br />
Mon site perso, hébergé sur mon propre ordinateur : http://merlin8282.homelinux.net<br />
<br />
Mon profil sur le forum de Léa : http://lea-linux.org/pho/profile/15/2890<br />
<br />
=Moi=<br />
Bon, pour parler un peu de moi, puisque c'est apparemment un peu le but de cette page... Qui suis-je ?<br />
<br />
Je suis un alsacien né en 1982 dans le bas-rhin. Ma découverte de l'informatique m'a fait passer et obtenir un BTS Informatique Industrielle en 2002, après un baccalauréat STI Génie Mécanique (F1) en 2000. Voilà pour mes études.<br />
<br />
=Ma personnalité...=<br />
Comment en parler ? Je ne fume pas et n'ai jamais fumé. De temps à autres, de manière très occasionnelle (comprendre "très rarement") je bois un peu d'alcool mais je n'ai jamais été bourré. Cf. [http://lea-linux.org/nocache/action=view/index/Utilisateur:Merlin8282.html#Ce_que_je_n'aime_pas_(dans_le_désordre_aussi) ici]. Je veux être un homme bon sans pour autant me sacrifier, vivre de manière pacifique et autonome.<br />
Je n'aime pas faire "comme tout le monde". Par conséquent, je n'ai pas de téléphone mobile, je n'aime pas le football, mon ordinateur fonctionne avec des logiciels libres, je n'aime pas la musique promue par les majors. Toutefois, je trouve par exemple que ce que font les jacky avec leurs voitures modifiées est totalement inutile, ma voiture est donc 100% d'origine.<br />
<br />
=Ce que j'aime (dans le désordre)=<br />
Le jambon, le cla#%btis, ma copine bien qu'elle ne soit pas un objet !, l'humilité, la sagesse, manger, le sirop de violette, certains délires, certains fruits mais pas tous, faire l'imbécile, GNU/Linux, la diversité, la mayonnaise industrielle (celle faite maison a un goût que je n'aime pas, désolé), l'idée qu'on puisse un jour vivre tous en harmonie sans corruption gaspillage ni haine, les romans de Philip K. Dick et Stanislaw Lem ainsi que "La cité des permutants" de Greg Egan, Autonomy Project, les choses étranges et inexpliquées de notre monde, les modes de pensée différents ("penser à ce à quoi on n'aurait pas pensé"), <br />
<br />
=Ce que je n'aime pas (dans le désordre aussi)=<br />
La bière, qu'on veuille m'inciter/forcer à boire, la connerie sous toutes ses formes ('''attention : la connerie != les conneries'''), la fumée (cigarette, etc.), le monoxyde de dihydrogène sauf pour boire, le poisson, les champignons, les oignons, qu'on se foute de moi, les monopoles, le football, qu'on me demande sans arrêt de l'aide pour réparer les ordinateurs ou même pour donner des conseils, quand d'autres savent le faire (genre "Il FAUT que j'envoie une image par e-mail à un_tel et je ne sais pas comment faire, j'ai absolument besoin de toi et pas quelqu'un d'autre !"), les pollueurs, les gens sans scrupules,</div>Merlin8282https://lea-linux.org/docs/index.php?title=Utilisateur:Merlin8282&diff=13580Utilisateur:Merlin82822006-09-04T09:03:20Z<p>Merlin8282 : </p>
<hr />
<div>''Cette page est amenée à changer constamment mais pas régulièrement. Revenez la visiter de temps à autres ;-) .''<br />
<br />
Mon site perso, hébergé sur mon propre ordinateur : http://merlin8282.homelinux.net<br />
<br />
Mon profil sur le forum de Léa : http://lea-linux.org/pho/profile/15/2890<br />
<br />
=Moi=<br />
Bon, pour parler un peu de moi, puisque c'est apparemment un peu le but de cette page... Qui suis-je ?<br />
<br />
Je suis un alsacien né en 1982 dans le bas-rhin. Ma découverte de l'informatique m'a fait passer et obtenir un BTS Informatique Industrielle en 2002, après un baccalauréat STI Génie Mécanique (F1) en 2000. Voilà pour mes études.<br />
<br />
=Ma personnalité...=<br />
Comment en parler ? Je ne fume pas et n'ai jamais fumé. De temps à autres, de manière très occasionnelle (comprendre "très rarement") je bois un peu d'alcool mais je n'ai jamais été bourré. Cf. la suite. Je veux être un homme bon sans pour autant me sacrifier, vivre de manière pacifique et autonome.<br />
Je n'aime pas faire "comme tout le monde". Par conséquent, je n'ai pas de téléphone mobile, je n'aime pas le football, mon ordinateur fonctionne avec des logiciels libres, je n'aime pas la musique promue par les majors. Toutefois, je trouve par exemple que ce que font les jacky avec leurs voitures modifiées est totalement inutile, ma voiture est donc 100% d'origine.<br />
<br />
=Ce que j'aime (dans le désordre)=<br />
Le jambon, le cla#%btis, ma copine bien qu'elle ne soit pas un objet !, l'humilité, la sagesse, manger, le sirop de violette, certains délires, certains fruits mais pas tous, faire l'imbécile, GNU/Linux, la diversité, la mayonnaise industrielle (celle faite maison a un goût que je n'aime pas, désolé), l'idée qu'on puisse un jour vivre tous en harmonie sans corruption gaspillage ni haine, les romans de Philip K. Dick et Stanislaw Lem ainsi que "La cité des permutants" de Greg Egan, Autonomy Project, les choses étranges et inexpliquées de notre monde, les modes de pensée différents ("penser à ce à quoi on n'aurait pas pensé"), <br />
<br />
=Ce que je n'aime pas (dans le désordre aussi)=<br />
La bière, qu'on veuille m'inciter/forcer à boire, la connerie sous toutes ses formes ('''attention : la connerie != les conneries'''), la fumée (cigarette, etc.), le monoxyde de dihydrogène sauf pour boire, le poisson, les champignons, les oignons, qu'on se foute de moi, les monopoles, le football, qu'on me demande sans arrêt de l'aide pour réparer les ordinateurs ou même pour donner des conseils, quand d'autres savent le faire (genre "Il FAUT que j'envoie une image par e-mail à un_tel et je ne sais pas comment faire, j'ai absolument besoin de toi et pas quelqu'un d'autre !"), les pollueurs, les gens sans scrupules,</div>Merlin8282https://lea-linux.org/docs/index.php?title=Utilisateur:Merlin8282&diff=13579Utilisateur:Merlin82822006-09-04T08:50:23Z<p>Merlin8282 : </p>
<hr />
<div>''Cette page est amenée à changer constamment mais pas régulièrement. Revenez la visiter de temps à autres ;-) .''<br />
<br />
Mon site perso, hébergé sur mon propre ordinateur : http://merlin8282.homelinux.net<br />
<br />
Mon profil sur le forum de Léa : http://lea-linux.org/pho/profile/15/2890<br />
<br />
=Moi=<br />
Bon, pour parler un peu de moi, puisque c'est apparemment un peu le but de cette page... Qui suis-je ?<br />
<br />
Je suis un alsacien né en 1982 dans le bas-rhin. Ma découverte de l'informatique m'a fait passer et obtenir un BTS Informatique Industrielle en 2002, après un baccalauréat STI Génie Mécanique (F1) en 2000. Voilà pour mes études.<br />
<br />
=Ma personnalité...=<br />
Comment en parler ? Je ne fume pas et n'ai jamais fumé. De temps à autres, de manière très occasionnelle (comprendre "très rarement") je bois un peu d'alcool mais je n'ai jamais été bourré. Cf. la suite. Je veux être un homme bon sans pour autant me sacrifier, vivre de manière pacifique et autonome.<br />
<br />
=Ce que j'aime (dans le désordre)=<br />
Le jambon, le cla#%btis, ma copine bien qu'elle ne soit pas un objet !, l'humilité, la sagesse, manger, le sirop de violette, certains délires, certains fruits mais pas tous, faire l'imbécile, GNU/Linux, la diversité, <br />
<br />
=Ce que je n'aime pas (dans le désordre aussi)=<br />
La bière, qu'on veuille m'inciter/forcer à boire, la connerie sous toutes ses formes ('''attention : la connerie != les conneries'''), la fumée (cigarette, etc.), le monoxyde de dihydrogène sauf pour boire, le poisson, les champignons, les oignons, qu'on se foute de moi, les monopoles,</div>Merlin8282https://lea-linux.org/docs/index.php?title=Connecter_un_lecteur_flash_USB&diff=13291Connecter un lecteur flash USB2006-08-24T13:50:44Z<p>Merlin8282 : /* Chasse aux troubles */</p>
<hr />
<div>[[Category:Stockage]]<br />
= Connecter un lecteur Flash USB =<br />
<br />
<div class="leatitre">Connecter un lecteur Flash USB</div><div class="leapar">par Laurent DUBETTIER-GRENIER, [mailto:jtmastom@.chez.wanadoo.fr Maston28] et Fred.</div><div class="leadesc">Connecter un lecteur flash USB (palmkey, diskonkey...) ou une clé usb sous Linux, mais aussi certains appareils photos numériques...</div><br />
----<br />
<br />
== Introduction ==<br />
<br />
Les lecteurs Flash USB deviennent de plus en plus populaires : faciles à utiliser et disposant d'une grande capacité de stockage, ils remplaceront avantageusement une pile de disquettes... Les lecteurs les plus récents sont conformes à la norme USB 2.0 (jusqu'à 40 fois plus rapide que USB 1.1 pour le taux de transfert) et disposent de capacités de stockage allant jusqu'à 512 Mo (note : la capacité ne cesse d'augmenter. En 2006 on en est à 4 Go), mais les prix sont alors très élevés... Personnellement, j'utilise un Palm Key de 64 Mo en norme USB 1.1, produit par [http://fwww.allwell.tv/Products/USB_FLASH/usb_flash.html Allwell]... Cet article a pour objectif d'expliquer la configuration permettant d'accéder à ce lecteur sous Linux. Je suppose que cela sera aussi utile aux possesseurs de lecteurs Flash USB de marques différentes ainsi qu'aux possesseurs d'appareils photo numériques comme le Sony Cyber-shot DSC P71.<br />
<br />
Cet article n'est que la traduction incomplète de l'excellent article de Matt Butcher, visible à [http://www.allwell.tv/Download/3rd_LED/PalmKey/palmkey.html cette adresse]. Dans cet article en anglais, il décrit, en plus de la partie traduite ci-dessous, le moyen de créer un système de fichiers crypté sur un lecteur Flash USB.<br />
<br />
Pour profiter de cet article, vous devez disposer :<br />
<br />
* d'un lecteur Flash USB (palmkey, diskonkey ou similaire)<br />
* d'un système Linux avec un noyau 2.4.x.<br />
<br />
== Procédure simplifiée ==<br />
<br />
=== Dernière minute (Mandrake 9.0) : ===<br />
<br />
Avec la dernière distribution de [http:/www.mandrakesoft.com Mandrakesoft], Linux Mandrake 9.0 (noyau 2.4.19-16mdk), c'est extrêmement simple ! Il suffit de connecter le lecteur Flash USB, et de le monter en tapant :<br />
<br />
<div class="code">$ mount /mnt/removable</div><br />
<br />
Pour accéder aux fichiers :<br />
<br />
<div class="code">$ cd /mnt/removable</div><br />
<br />
Avant de le déconnecter, il ne faut pas oublier de le démonter :<br />
<br />
<div class="code">$ umount /mnt/removable</div><br />
<br />
''Nota (voir la procédure détaillée ci-dessous pour plus d'information) :''<br /> Sur cette distribution linux, le fichier <tt>/etc/fstab</tt> contient la ligne suivante :<br />
<br />
<div class="code">/dev/sda1 /mnt/removable auto user,iocharset=iso8859-15,kudzu,codepage=850,noauto,umask=0,exec 0 0</div><br />
<br />
''Les modules chargés par défaut (visibles en tapant lsmod) sont <tt>usbcore</tt> et <tt>usb-uhci</tt>. Il n'y a pas <tt>usb-storage</tt>, mais cela fonctionne quand même...''<br />
<br />
=== Si vous n'avez pas Mandrake Linux 9.0 : ===<br />
<br />
''(ou plus précisement le dernier noyau...)''<br />
<br />
En considérant que le lecteur Flash USB est le premier périphérique de stockage SCSI (je suppose ici que vous n'avez pas d'autres périphériques SCSI ou USB), il suffit de suivre les instructions suivantes :<br />
<br />
<div class="code">$ mkdir /mnt/pk<br /> $ mount -t msdos /dev/sda1 /mnt/pk<br /> $ cd /mnt/pk</div><br />
<br />
Le lecteur Flash USB, livré avec un système de fichier DOS, est alors lisible et inscriptible. Avant de le déconnecter, ne pas oublier de le démonter :<br />
<br />
<div class="code">$ umount /mnt/pk</div><br />
<br />
== Procédure détaillée ==<br />
<br />
Ce paragraphe décrit la configuration pas à pas d'un lecteur Flash USB. Cela permet, en cas de problème d'accès à votre lecteur Flash USB, de cerner plus précisement d'où vient le problème.<br />
<br />
=== Préparer USB ===<br />
<br />
Avant de brancher votre lecteur Flash USB, vous devez vous assurer que votre système possède le module noyau USB. Nous avons besoin de <tt>usb-uhci</tt> (ou <tt>usb-ohci</tt>) et du module de stockage <tt>usb-storage</tt>chargé. Utiliser <tt>lsmod</tt> pour vérifier qu'ils sont bien présents. Sinon, utiliser <tt>modprobe</tt> :<br />
<br />
<div class="code">$ modprobe usb-uhci usb-storage</div><br />
<br />
''Nota : le driver <tt>usb-uhci</tt> est le driver pour un type de pont USB. Si cela ne fonctionne pas, c'est que vous avez un pont OHCI. Dans ce cas, il faut faire "modprobe usb-ohci".''<br />
<br />
En tapant de nouveau <tt>lsmod</tt>, vous devriez alors voir apparaître le noyau usb, les drivers <tt>usb-uhci</tt> ou <tt>usb-ohci</tt>, et <tt>usb-storage</tt>, entre autres.<br />
<br />
=== Préparer le périphérique ===<br />
<br />
Dès que les modules sont chargés, vous pouvez connecter le lecteur Flash USB. Attendre quelques secondes et changer de répertoire vers <tt>/proc/bus/usb</tt>. <tt>/proc/bus/usb</tt> est le répertoire regroupant les informations sur les périphériques usb. Le répertoire devrait contenir un fichier <tt>devices</tt>, un fichier <tt>drivers</tt>, et un répertoire pour le hub USB.<br />
<br />
Le fichier drivers contient une liste des périphériques USB disponibles. Il devrait contenir une entrée vers <tt>usb-storage</tt>, le module que nous avons inséré auparavant. Le fichier le plus important est le fichier <tt>devices</tt> : il liste tous les périphériques usb connectés au système.<br />
<br />
''Nota : On obtient la même information, dans un format plus lisible, en tapant directement l'instruction "usbview" depuis un serveur X (interface graphique).''<br />
<br />
Vous devriez avoir une entrée pour votre Lecteur Flash USB dans une des lignes commençant par "T:". Sur mon système :<br />
<br />
<div class="code">T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=3 Spd=12 MxCh=0</div><br />
<br />
La plupart des périphériques contiennent des informations en clair (une chaîne de caratère) les décrivant. Elles sont présentes dans les lignes commençant par "<tt>S:</tt>". Quelques lecteurs Flash USB ne contiennent aucune information (mon palm key est dans ce cas...). L'information relative à la version de vos périphériques est présente après "<tt>P:</tt>". Pour mon palm key :<br />
<br />
<div class="code">P: Vendor=0c76 ProdID=0003 Rev=1.0</div><br />
<br />
Dès que vous avez une entrée dans ce fichier pour votre lecteur Flash USB, vous pouvez continuer. Si il n'y a pas d'entrée, contrôler la connexion physique de votre périphérique et assurez-vous que les modules nécessaires sont bien chargés dans le noyau.<br />
<br />
=== Le driver usb-storage ===<br />
<br />
Le travail du driver usb-storage est de lier les périphériques de stockage de masse USB à des périphériques SCSI. Ceci autorise les périphériques USB à être traités comme des périphériques de stockage amovibles. Si tout c'est bien passé, le Lecteur Flash USB doit être assigné à un périphérique SCSI. Dans <tt>/proc/scsi</tt>, vous devez voir un répertoire nommé <tt>usb-storage-0</tt> ou similaire. Le numéro à la fin peut être différent, il dépend du nombre de périphériques de stockage USB présents sur votre système. Le fichier <tt>/proc/scsi/scsi</tt> contient des détails sur les périphériques sont répertoriés comme périphériques SCSI.<br />
<br />
<div class="code">Attached devices :<br /> Host: scsi0 channel: 00 Id: 00 Lun: 00<br /> Vendor: USB Flash Model: Disk<br /> Type: Direct-Access ANSI SCSI revision: 02</div><br />
<br />
Si vous n'avez pas d'autres périphériques SCSI, la seule entrée de ce fichier est votre lecteur Flash USB.<br />
<br />
''Note : en l'absence d'identification du vendeur sur le périphérique lui-même (et aussi dans le fichier <tt>/proc/bus/usb/devices</tt>), le périphérique est juste déclaré comme générique.''<br />
<br />
La première ligne <tt>host</tt> informe sur la localisation du périphérique. Si c'est le premier périphérique SCSI, il sera déclaré comme <tt>/dev/sda1</tt>.<br />
<br />
=== Monter le périphérique ===<br />
<br />
À ce moment, nous avons identifié quel périphérique SCSI est lié au lecteur Flash USB. Il ne reste plus qu'à le monter :<br />
<br />
<div class="code">$ mkdir /mnt/pk<br /> $ mount -t msdos /dev/sda1 /mnt/pk</div><br />
<br />
On peut alors aller sur <tt>/mnt/pk</tt> et écrire ou lire le lecteur Flash USB. Quand une action d'écriture arrive sur le périphérique, la led rouge doit clignoter. Comme les données sont stockées dans une zone tampon avant d'être écrites, ne paniquez pas si la led ne clignote pas à chaque fois que vous évcrivez sur le lecteur Flash USB.<br />
<br />
'''Attention :''' n'oubliez pas de démonter le système de fichiers avant de débrancher le lecteur Flash USB. Vous pouvez ajouter une entrée dans <tt>/etc/fstab</tt> pour faciliter le montage et le démontage du périphérique :<br />
<br />
<div class="code">/dev/sda1 /mnt/pk msdos user,noauto 0 0</div><br />
<br />
Avec l'entrée dans <tt>/etc/fstab</tt>, monter et démonter le périphérique est alors plus simple. L'indicateur "user" autorise une personne autre que root à monter et démonter le lecteur Flash USB.<br />
<br />
<div class="code">$ mount /mnt/pk<br /> $ umount /mnt/pk</div><br />
<br />
=== Remplacer le systeme de fichiers DOS ===<br />
<br />
Si vous n'êtes pas intéressé par partager vos données avec un système MS-DOS ou Windows, vous pouvez formater votre lecteur Flash USB avec un système de fichiers Linux. <tt>ReiserFS</tt> est journalisé et doit pouvoir être le système de fichiers de votre lecteur Flash USB. Les lignes suivantes décrivent l'installation d'un système de fichier <tt>extended2-fs</tt>.<br />
<br />
'''Attention :''' avant d'écrire un nouveau système de fichiers sur votre lecteur Flash USB, vous devez démonter le lecteur.<br />
<br />
'''Attention :''' les données présentes sur le lecteur Flash USB seront perdues.<br />
<br />
Exemple :<br />
<br />
<div class="code">$ umount /dev/sda1<br /> $ mke2fs /dev/sda1</div><br />
<br />
Ensuite, il faut changer la ligne de <tt>/etc/fstab</tt> pour que le système de fichiers soit <tt>ext2</tt> au lieu de <tt>msdos</tt>.<br />
<br />
== Application aux disque-durs externes USB ==<br />
<br />
par Maston28<br />
<br />
Si vous Possédez un disque dur externe en usb, alors cette partie va vous intéresser ! Vous pouvez en effet utiliser un disque-dur externe sous linux en reprenant ce principe (qui s'applique aussi aux lecteurs ZIP). Sachez tout d'abord que pour un gros disque dur, il vaut mieux avoir compilé son noyau avec l'option USB Mass Storage. Vous devez tout d'abord charger les modules requis :<br />
<br />
<div class="code">insmod usbcore<br /> insmod uhci-usb<br /> insmod usb-storage</div><br />
<br />
Il faut ensuite monter les périphériques USB dans /proc/bus/usb :<br />
<br />
<tt>mount -t usbdevfs none /proc/bus/usb</tt><br />
<br />
Nous allons maintenant monter le disque dur:<br />
<br />
<tt>mkdir /mnt/externe && mount -t vfat /dev/sda /mnt/externe</tt><br />
<br />
'''Attention :'''Je suppose ici que votre disque dur est formaté en FAT32 (par défaut à l'achat...)<br />
<br />
'''Attention :'''si le disque dur est partitionné, remplacez sda par sda<font color="red">x</font><br />
<br />
== Chasse aux troubles ==<br />
<br />
par Fred, d'après les questions du forum.<br />
<br />
Il existe plusieurs types de problèmes. Certains ayant une solution, d'autres pas :( .<br />
<br />
* Vous avez un lecteur de carte mémoire type 'n en 1' (4 en 1, 6 en 1) et ça ne semble pas fonctionner avec Linux alors que d'autres périphériques de stockage USB fonctionnent.<br />
<div class="note">Essayer de recompiler votre noyau en activant l'option : <code>Probe all LUNs on each scsi devices</code>.<br />Merci à mrcrabs (du phorum)<br />Sur une knoppix, il est possible de passer un parametre au boot: <code>max_scsi_luns=4</code> puisqu'en general il y'a 4 ports sur le lecteur.<br />Merci à JoDay du forum.</div><br />
* Vous avez un appareil photo numérique, mais il ne fonctionne pas en tant que périphérique de stockage.<br />
<div class="note">Essayer [http://gphoto.sourceforge.net/ gPhoto<sup>2</sup>] qui est spécialisé dans les appareils photos numériques (même non supportés par usb-storage), voir la [http://gphoto.sourceforge.net/proj/libgphoto2/support.php liste des appareils supportés].</div><br />
* Votre périphérique semble reconnu mais vous fait des erreurs du type (à lire dans /var/log/messages) :<br />
<div class="code">Jul 22 22:10:04 localhost kernel: usb-uhci.c: interrupt, status 2, frame# 1374<br /> Jul 22 22:10:04 localhost kernel: Device 08:00 not ready.<br /> Jul 22 22:10:04 localhost kernel: I/O error: dev 08:00, sector 0<br /> Jul 22 22:10:04 localhost kernel: FAT: unable to read boot sector</div><div class="note"> Cela peut être du à une protection de la clé (protection par mot de passe, c'est semble-t-il le cas du TravelDisk USB 2.O de PQI). Tentez alors de faire formater votre clé usb par un systéme d'exploitation reconnaissant votre clé en supprimant cette protection (par exemple Windows) chez vous, ou chez un amis, un revendeur.<br /> Merci à rami aubourg (du forum). </div><br />
* Lorsque vous branchez votre périphérique, il semble reconnu mais /dev/sdx n'apparait (cas ou vous utilisez devfs) pas ou ne fonctionne pas. D'ailleur tout semble normal quand vous regardez le log des messages (en tapant <code>dmesg</code>) :<br />
<div class="code">hub.c: new USB device 00:14.3-1.3, assigned address 6<br /> usb.c: USB device 6 (vend/prod 0x58f/0x9360) is not claimed by any active driver.<br /> Initializing USB Mass Storage driver...<br /> usb.c: registered new driver usb-storage<br /> scsi2 : SCSI emulation for USB Mass Storage devices </div><div class="note"><br />
Vérifiez que vous avez bien compilez (en module ou en 'dur') votre kernel avec les options :<br />
** SCSI support<br />
** SCSI generic support<br />
** SCSI disk support<br />
Si c'est le cas, et que vous avez compiler ces options en modules, après le chargement d'usb-storage, essayer de charger ces trois modules :<br />
<div class="code"> modprobe scsi_mod<br /> modprobe sd_mod<br /> modprobe sg </div><br />
Merci à Mr_youd (du forum).<br />
</div> <br />
* Votre périphérique est vu par le driver usb (uhci, ohci, etc.) mais pas par usb-storage (par exemple en cas de firmware buggué - mon appareil photo est dans ce cas).<br />
<div class="note"><br />
Essayer la procédure suivante, en tant que root :<br />
<div class="code">modprobe usb-storage<br /> rmmod usb-storage<br /> sleep 2s<br /> modprobe usb-storage </div><br />
Avec mon appareil photo 'buggué', /dev/sda1 apparait apres le second modprobe. Pourquoi ? Mystère ! Surement un problème de 'timing'.<br />
</div> <br />
* En désespoir de cause, peut-être votre périphérique n'est-il tout simplement pas reconnu, vérifiez dans cette [http://www.linux-usb.org/devices.html liste].<br />
<br />
<div class="merci">Cette page est issue de la documentation 'pré-wiki' de Léa et a été convertie avec HTML::WikiConverter. Elle fut créée par Laurent DUBETTIER-GRENIER le 25/10/2002.</div><br />
<br />
= Copyright =<br />
Copyright &copy; 25/10/2002, Laurent DUBETTIER-GRENIER<br />
{{CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Connecter_un_lecteur_flash_USB&diff=13290Connecter un lecteur flash USB2006-08-24T13:47:02Z<p>Merlin8282 : /* Introduction */</p>
<hr />
<div>[[Category:Stockage]]<br />
= Connecter un lecteur Flash USB =<br />
<br />
<div class="leatitre">Connecter un lecteur Flash USB</div><div class="leapar">par Laurent DUBETTIER-GRENIER, [mailto:jtmastom@.chez.wanadoo.fr Maston28] et Fred.</div><div class="leadesc">Connecter un lecteur flash USB (palmkey, diskonkey...) ou une clé usb sous Linux, mais aussi certains appareils photos numériques...</div><br />
----<br />
<br />
== Introduction ==<br />
<br />
Les lecteurs Flash USB deviennent de plus en plus populaires : faciles à utiliser et disposant d'une grande capacité de stockage, ils remplaceront avantageusement une pile de disquettes... Les lecteurs les plus récents sont conformes à la norme USB 2.0 (jusqu'à 40 fois plus rapide que USB 1.1 pour le taux de transfert) et disposent de capacités de stockage allant jusqu'à 512 Mo (note : la capacité ne cesse d'augmenter. En 2006 on en est à 4 Go), mais les prix sont alors très élevés... Personnellement, j'utilise un Palm Key de 64 Mo en norme USB 1.1, produit par [http://fwww.allwell.tv/Products/USB_FLASH/usb_flash.html Allwell]... Cet article a pour objectif d'expliquer la configuration permettant d'accéder à ce lecteur sous Linux. Je suppose que cela sera aussi utile aux possesseurs de lecteurs Flash USB de marques différentes ainsi qu'aux possesseurs d'appareils photo numériques comme le Sony Cyber-shot DSC P71.<br />
<br />
Cet article n'est que la traduction incomplète de l'excellent article de Matt Butcher, visible à [http://www.allwell.tv/Download/3rd_LED/PalmKey/palmkey.html cette adresse]. Dans cet article en anglais, il décrit, en plus de la partie traduite ci-dessous, le moyen de créer un système de fichiers crypté sur un lecteur Flash USB.<br />
<br />
Pour profiter de cet article, vous devez disposer :<br />
<br />
* d'un lecteur Flash USB (palmkey, diskonkey ou similaire)<br />
* d'un système Linux avec un noyau 2.4.x.<br />
<br />
== Procédure simplifiée ==<br />
<br />
=== Dernière minute (Mandrake 9.0) : ===<br />
<br />
Avec la dernière distribution de [http:/www.mandrakesoft.com Mandrakesoft], Linux Mandrake 9.0 (noyau 2.4.19-16mdk), c'est extrêmement simple ! Il suffit de connecter le lecteur Flash USB, et de le monter en tapant :<br />
<br />
<div class="code">$ mount /mnt/removable</div><br />
<br />
Pour accéder aux fichiers :<br />
<br />
<div class="code">$ cd /mnt/removable</div><br />
<br />
Avant de le déconnecter, il ne faut pas oublier de le démonter :<br />
<br />
<div class="code">$ umount /mnt/removable</div><br />
<br />
''Nota (voir la procédure détaillée ci-dessous pour plus d'information) :''<br /> Sur cette distribution linux, le fichier <tt>/etc/fstab</tt> contient la ligne suivante :<br />
<br />
<div class="code">/dev/sda1 /mnt/removable auto user,iocharset=iso8859-15,kudzu,codepage=850,noauto,umask=0,exec 0 0</div><br />
<br />
''Les modules chargés par défaut (visibles en tapant lsmod) sont <tt>usbcore</tt> et <tt>usb-uhci</tt>. Il n'y a pas <tt>usb-storage</tt>, mais cela fonctionne quand même...''<br />
<br />
=== Si vous n'avez pas Mandrake Linux 9.0 : ===<br />
<br />
''(ou plus précisement le dernier noyau...)''<br />
<br />
En considérant que le lecteur Flash USB est le premier périphérique de stockage SCSI (je suppose ici que vous n'avez pas d'autres périphériques SCSI ou USB), il suffit de suivre les instructions suivantes :<br />
<br />
<div class="code">$ mkdir /mnt/pk<br /> $ mount -t msdos /dev/sda1 /mnt/pk<br /> $ cd /mnt/pk</div><br />
<br />
Le lecteur Flash USB, livré avec un système de fichier DOS, est alors lisible et inscriptible. Avant de le déconnecter, ne pas oublier de le démonter :<br />
<br />
<div class="code">$ umount /mnt/pk</div><br />
<br />
== Procédure détaillée ==<br />
<br />
Ce paragraphe décrit la configuration pas à pas d'un lecteur Flash USB. Cela permet, en cas de problème d'accès à votre lecteur Flash USB, de cerner plus précisement d'où vient le problème.<br />
<br />
=== Préparer USB ===<br />
<br />
Avant de brancher votre lecteur Flash USB, vous devez vous assurer que votre système possède le module noyau USB. Nous avons besoin de <tt>usb-uhci</tt> (ou <tt>usb-ohci</tt>) et du module de stockage <tt>usb-storage</tt>chargé. Utiliser <tt>lsmod</tt> pour vérifier qu'ils sont bien présents. Sinon, utiliser <tt>modprobe</tt> :<br />
<br />
<div class="code">$ modprobe usb-uhci usb-storage</div><br />
<br />
''Nota : le driver <tt>usb-uhci</tt> est le driver pour un type de pont USB. Si cela ne fonctionne pas, c'est que vous avez un pont OHCI. Dans ce cas, il faut faire "modprobe usb-ohci".''<br />
<br />
En tapant de nouveau <tt>lsmod</tt>, vous devriez alors voir apparaître le noyau usb, les drivers <tt>usb-uhci</tt> ou <tt>usb-ohci</tt>, et <tt>usb-storage</tt>, entre autres.<br />
<br />
=== Préparer le périphérique ===<br />
<br />
Dès que les modules sont chargés, vous pouvez connecter le lecteur Flash USB. Attendre quelques secondes et changer de répertoire vers <tt>/proc/bus/usb</tt>. <tt>/proc/bus/usb</tt> est le répertoire regroupant les informations sur les périphériques usb. Le répertoire devrait contenir un fichier <tt>devices</tt>, un fichier <tt>drivers</tt>, et un répertoire pour le hub USB.<br />
<br />
Le fichier drivers contient une liste des périphériques USB disponibles. Il devrait contenir une entrée vers <tt>usb-storage</tt>, le module que nous avons inséré auparavant. Le fichier le plus important est le fichier <tt>devices</tt> : il liste tous les périphériques usb connectés au système.<br />
<br />
''Nota : On obtient la même information, dans un format plus lisible, en tapant directement l'instruction "usbview" depuis un serveur X (interface graphique).''<br />
<br />
Vous devriez avoir une entrée pour votre Lecteur Flash USB dans une des lignes commençant par "T:". Sur mon système :<br />
<br />
<div class="code">T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=3 Spd=12 MxCh=0</div><br />
<br />
La plupart des périphériques contiennent des informations en clair (une chaîne de caratère) les décrivant. Elles sont présentes dans les lignes commençant par "<tt>S:</tt>". Quelques lecteurs Flash USB ne contiennent aucune information (mon palm key est dans ce cas...). L'information relative à la version de vos périphériques est présente après "<tt>P:</tt>". Pour mon palm key :<br />
<br />
<div class="code">P: Vendor=0c76 ProdID=0003 Rev=1.0</div><br />
<br />
Dès que vous avez une entrée dans ce fichier pour votre lecteur Flash USB, vous pouvez continuer. Si il n'y a pas d'entrée, contrôler la connexion physique de votre périphérique et assurez-vous que les modules nécessaires sont bien chargés dans le noyau.<br />
<br />
=== Le driver usb-storage ===<br />
<br />
Le travail du driver usb-storage est de lier les périphériques de stockage de masse USB à des périphériques SCSI. Ceci autorise les périphériques USB à être traités comme des périphériques de stockage amovibles. Si tout c'est bien passé, le Lecteur Flash USB doit être assigné à un périphérique SCSI. Dans <tt>/proc/scsi</tt>, vous devez voir un répertoire nommé <tt>usb-storage-0</tt> ou similaire. Le numéro à la fin peut être différent, il dépend du nombre de périphériques de stockage USB présents sur votre système. Le fichier <tt>/proc/scsi/scsi</tt> contient des détails sur les périphériques sont répertoriés comme périphériques SCSI.<br />
<br />
<div class="code">Attached devices :<br /> Host: scsi0 channel: 00 Id: 00 Lun: 00<br /> Vendor: USB Flash Model: Disk<br /> Type: Direct-Access ANSI SCSI revision: 02</div><br />
<br />
Si vous n'avez pas d'autres périphériques SCSI, la seule entrée de ce fichier est votre lecteur Flash USB.<br />
<br />
''Note : en l'absence d'identification du vendeur sur le périphérique lui-même (et aussi dans le fichier <tt>/proc/bus/usb/devices</tt>), le périphérique est juste déclaré comme générique.''<br />
<br />
La première ligne <tt>host</tt> informe sur la localisation du périphérique. Si c'est le premier périphérique SCSI, il sera déclaré comme <tt>/dev/sda1</tt>.<br />
<br />
=== Monter le périphérique ===<br />
<br />
À ce moment, nous avons identifié quel périphérique SCSI est lié au lecteur Flash USB. Il ne reste plus qu'à le monter :<br />
<br />
<div class="code">$ mkdir /mnt/pk<br /> $ mount -t msdos /dev/sda1 /mnt/pk</div><br />
<br />
On peut alors aller sur <tt>/mnt/pk</tt> et écrire ou lire le lecteur Flash USB. Quand une action d'écriture arrive sur le périphérique, la led rouge doit clignoter. Comme les données sont stockées dans une zone tampon avant d'être écrites, ne paniquez pas si la led ne clignote pas à chaque fois que vous évcrivez sur le lecteur Flash USB.<br />
<br />
'''Attention :''' n'oubliez pas de démonter le système de fichiers avant de débrancher le lecteur Flash USB. Vous pouvez ajouter une entrée dans <tt>/etc/fstab</tt> pour faciliter le montage et le démontage du périphérique :<br />
<br />
<div class="code">/dev/sda1 /mnt/pk msdos user,noauto 0 0</div><br />
<br />
Avec l'entrée dans <tt>/etc/fstab</tt>, monter et démonter le périphérique est alors plus simple. L'indicateur "user" autorise une personne autre que root à monter et démonter le lecteur Flash USB.<br />
<br />
<div class="code">$ mount /mnt/pk<br /> $ umount /mnt/pk</div><br />
<br />
=== Remplacer le systeme de fichiers DOS ===<br />
<br />
Si vous n'êtes pas intéressé par partager vos données avec un système MS-DOS ou Windows, vous pouvez formater votre lecteur Flash USB avec un système de fichiers Linux. <tt>ReiserFS</tt> est journalisé et doit pouvoir être le système de fichiers de votre lecteur Flash USB. Les lignes suivantes décrivent l'installation d'un système de fichier <tt>extended2-fs</tt>.<br />
<br />
'''Attention :''' avant d'écrire un nouveau système de fichiers sur votre lecteur Flash USB, vous devez démonter le lecteur.<br />
<br />
'''Attention :''' les données présentes sur le lecteur Flash USB seront perdues.<br />
<br />
Exemple :<br />
<br />
<div class="code">$ umount /dev/sda1<br /> $ mke2fs /dev/sda1</div><br />
<br />
Ensuite, il faut changer la ligne de <tt>/etc/fstab</tt> pour que le système de fichiers soit <tt>ext2</tt> au lieu de <tt>msdos</tt>.<br />
<br />
== Application aux disque-durs externes USB ==<br />
<br />
par Maston28<br />
<br />
Si vous Possédez un disque dur externe en usb, alors cette partie va vous intéresser ! Vous pouvez en effet utiliser un disque-dur externe sous linux en reprenant ce principe (qui s'applique aussi aux lecteurs ZIP). Sachez tout d'abord que pour un gros disque dur, il vaut mieux avoir compilé son noyau avec l'option USB Mass Storage. Vous devez tout d'abord charger les modules requis :<br />
<br />
<div class="code">insmod usbcore<br /> insmod uhci-usb<br /> insmod usb-storage</div><br />
<br />
Il faut ensuite monter les périphériques USB dans /proc/bus/usb :<br />
<br />
<tt>mount -t usbdevfs none /proc/bus/usb</tt><br />
<br />
Nous allons maintenant monter le disque dur:<br />
<br />
<tt>mkdir /mnt/externe && mount -t vfat /dev/sda /mnt/externe</tt><br />
<br />
'''Attention :'''Je suppose ici que votre disque dur est formaté en FAT32 (par défaut à l'achat...)<br />
<br />
'''Attention :'''si le disque dur est partitionné, remplacez sda par sda<font color="red">x</font><br />
<br />
== Chasse aux troubles ==<br />
<br />
par Fred, d'après les questions du forum.<br />
<br />
Il existe plusieurs types de problèmes. Certains ayant une solution, d'autres pas :( .<br />
<br />
* Vous avez un lecteur de carte mémoire type 'n en 1' (4 en 1, 6 en 1) et ça ne semble pas fonctionner avec Linux alors que d'autres périphériques de stockage USB fonctionnent.<br />
<div class="note">Essayer de recompiler votre noyau en activant l'option : <code>Probe all LUNs on each scsi devices</code>.<br />Merci à mrcrabs (du phorum)<br />Sur une knoppix, il est possible de passer un parametre au boot: <code>max_scsi_luns=4</code> puisqu'en general il y'a 4 ports sur le lecteur.<br />Merci à JoDay du forum.</div><br />
* Vous avez un appareil photo numérique, mais il ne fonctionne pas en tant que périphérique de stockage.<br />
<div class="note">Essayer [http://gphoto.sourceforge.net/ gPhoto<sup>2</sup>] qui est spécialisé dans les appareils photos numériques (même non supportés par usb-storage), voir la [http://gphoto.sourceforge.net/proj/libgphoto2/support.php liste des appareils supportés].</div><br />
* Votre périphérique semble reconnu mais vous fait des erreurs du type (à lire dans /var/log/messages) :<br />
<div class="code">Jul 22 22:10:04 localhost kernel: usb-uhci.c: interrupt, status 2, frame# 1374<br /> Jul 22 22:10:04 localhost kernel: Device 08:00 not ready.<br /> Jul 22 22:10:04 localhost kernel: I/O error: dev 08:00, sector 0<br /> Jul 22 22:10:04 localhost kernel: FAT: unable to read boot sector</div><div class="note"> Cela peut être du à une protection de la clé (protection par mot de passe, c'est semble-t-il le cas du TravelDisk USB 2.O de PQI). Tentez alors de faire formater votre clé usb par un systéme d'exploitation reconnaissant votre clé en supprimant cette protection (par exemple Windows) chez vous, ou chez un amis, un revendeur.<br /> Merci à rami aubourg (du forum). </div><br />
* Lorsque vous branchez votre périphérique, il semble reconnu mais /dev/sdx n'apparait (cas ou vous utilisez devfs) pas ou ne fonctionne pas. D'ailleur tout semble normal quand vous regardez le log des messages (en tapant <code>dmesg</code>) :<br />
<div class="code">hub.c: new USB device 00:14.3-1.3, assigned address 6<br /> usb.c: USB device 6 (vend/prod 0x58f/0x9360) is not claimed by any active driver.<br /> Initializing USB Mass Storage driver...<br /> usb.c: registered new driver usb-storage<br /> scsi2 : SCSI emulation for USB Mass Storage devices </div><div class="note"><br />
Vérifiez que vous avez bien compilez (en module ou en 'dur') votre kernel avec les options :<br />
** SCSI support<br />
** SCSI generic support<br />
** SCSI disk support<br />
Si c'est le cas, et que vous avez compiler ces options en modules, après le chargement d'usb-storage, essayer de charger ces trois modules :<br />
<div class="code"> modprobe scsi_mod<br /> modprobe sd_mod<br /> modprobe sg </div><br />
Merci à Mr_youd (du forum).<br />
</div> <br />
* Votre périphérique est vue par le driver usb (uhci, ohci, etc.) mais pas par usb-storage (par exemple en cas de firmware buggué - mon appareil photo est dans ce cas).<br />
<div class="note"><br />
Essayer la procedure suivante, en tant que root :<br />
<div class="code"> modprobe usb-storage<br /> rmmod usb-storage<br /> sleep 2s<br /> modprobe usb-storage </div><br />
Avec mon appareil photo 'buggué', /dev/sda1 apparait apres le second modprobe. Pourquoi ? Mystère ! Surement un problème de 'timing'.<br />
</div> <br />
* En désespoire de cause, peut-être votre périphérique n'est-il tout simplement pas reconnu, vérifiez dans cette [http://www.linux-usb.org/devices.html liste].<br />
<br />
<div class="merci">Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Laurent DUBETTIER-GRENIER le 25/10/2002.</div><br />
<br />
= Copyright =<br />
Copyright &copy; 25/10/2002, Laurent DUBETTIER-GRENIER<br />
{{CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13289Discussion:Tenir compte de la sécurité au quotidien2006-08-24T11:54:37Z<p>Merlin8282 : </p>
<hr />
<div>--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:49 (CEST) <br><br />
Fred, tu ne voulais pas passer la fiche en article ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> si je pense le faire mais j'attends que l'article soit stabilisé. et par contre, une fiche avec des conseils élémentaires est toujours d'actualité quitte à ce quelle renvoie à cette doc si. Pour les remerciement, je pense que les auteurs ne sont pas obligé de se remercier ... ni dire individuellement qui ils remercient. Mais bon chacun fait comme bon lui semble du moment que ça reste léger.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 13 jul 2006 à 16:28><br />
Au fait, je vois cet article (puisqu'on parle d'un article à présent) comme une introduction à la sécurité sous Linux... Pas vraiment comme des conseils au quotidien. Mais bon, cela peut se discuter. :)<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> exactement, d'ou la nécessité d'une fiche qui donne des conseil précis et simples pour limiter un certain nombre de risque sans tous les exposer.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 jul 2006><br />
<br />
Hum, j'ai commencé à regarder la partie technique de l'article. J'aurais tendance à dire que c'est encore du n'importe quoi. Il faudrait tout revoir... :-/<br />
<br />
D'abord, je pense que l'article s'adresse à des gens qui ont seulement une machine personnelle ou un petit réseau. Les professionnels ne liront pas un article sur Léa de toute façon. Donc, la cible de cet article est (à mon humble avis) un administrateur amateur qui s'initie à la sécurité.<br />
<br />
Si on fait cette hypothèse, cela nous permet de faire un tri dans ce qui est "utile" et ce qui ne l'est pas dans l'article tel qu'il est actuellement.<br />
<br />
# '''Sécuriser son boot''': Cela suppose que l'attaquant peut se trouver devant la machine lors du boot... Ce genre d'attaque n'est pas réalisable dans le cas d'une machine personnelle ou d'un réseau domestique (ou sinon, c'est un cambrioleur et de toute façon il va repartir avec la machine)... Donc --> poubelle (J'ajouterai aussi, pour avoir un peu travaillé sur le problème du ''trusted boot'' sur des set top boxes qu'il ne s'agit pas d'un problème trivial et que cela ne risque pas de se traiter en une petite section sur grub).<br />
# '''Partionnement en conséquence''': Je ne vois pas ce que cela à voir avec la sécurité... o_O La mention d'un système de fichiers crypté n'ajoute ni n'enlève rien à la sécurité de la machine. Cela permet de sécuriser des données via un moyen cryptographique ''dur'', rien à voir avec le reste de l'article.<br />
# '''N'installer que le strict nécessaire''': Oui, c'est un conseil que je donnerai mais je ne vois pas la logique de progression dans tout cela ? Pourquoi le mentionner maintenant ? Est-ce que l'on suit l'ordre d'une installation classique ? Et si oui, pourquoi ne pas l'avoir dit précedemment ?<br />
# '''Utilisateurs''': Quelques conseils pertinents dans cette sous-section mais encore une fois, je ne comprends pas la logique non plus. En plus, la configuration par défaut empêche le root de se connecter de façon distante. Pourquoi préciser ce point (ou alors peut-être en encart).<br />
# '''Permissions''': Oui, c'est une explication du ''least privilege principle'', pertinent mais pas ce n'est pas introduit correctement, cela tombe à nouveau comme un cheveux en plein milieu de la soupe. La mention de <code>chroot</code> est complétement parachutée et on se demande ce que cela a à voir avec les permissions...<br />
# '''Bien configurer ses démons''': Pourquoi est-ce que c'est une section et pas une sous-section ???? Quelques remarques pertinentes mais qui n'ont rien à voir avec le titre. On mélange allègrement des conseils sur la sécurisation de son compte web (pourquoi l'utilisateur aurait-il un serveur Web par défaut) et le fait qu'il ne faut pas laisser trainer des données confidentielles en clair sur Internet... Pour moi la configuration des daemons est une chose à part et n'a rien à faire dans cet article (chaque daemon pouvant faire l'objet d'un article à lui tout seul sur comment le sécuriser).<br />
# '''Barrer la route aux connexions non souhaitées''': Oui, il faut une section sur la maîtrise de son traffic réseau et l'utilisation intelligente des firewall. Mais cette section est désastreuse. Elle est beaucoup trop succinte et ne fais que donner une impression de maîtrise (ce qui est encore plus dangereux).<br />
# '''Détecter les intrusions, connaître les outils''': C'est sans doute la seule section qui puisse être exploitable telle quelle.<br />
# '''Localiser le problème et nettoyer''': C'est redondant avec la section précédente, autant fusionner les deux.<br />
<br />
Bon, je vais essayer de m'atteler à un plan qui tienne la route et voir comment structurer les informations. Je ne pense pas détruire les sections avant d'avoir tout fini, donc j'ajouterai mes sections au fur et à mesure en les intercalants là où faut. Je ferai du nettoyage à la fin si vous êtes tous d'accord avec mes modifications.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 jul 2006> Voila, j'ai essayé mettre en place le squelette de l'article. Dites-moi ce que vous en pensez et n'hésitez pas à remplir des cases et/ou à modifier ce qui vous semble opportun.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 26 jul 2006> Je pars en vacances à la fin de la semaine pour deux semaines dans un endroit où je ne pourrais pas me connecter. Essayez de continuer l'article sans moi...<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 18 aoû 2006 à 09:18> Pardonnez-moi, je reviens de mes deux semaines de vacances sans avoir prévenu.<br />
Si à la base j'avais personnellement pensé à un article traitant de _tout_ ce qu'il faut savoir en matière de sécurité, c'est vrai qu'on doit faire la part des choses. Ainsi on peut transformer cet article-ci de manière à le destiner à un public qui utilise son ordi à la maison, tout seul dans son coin, et créer un autre article dans la section Léavancé "pour les pros" (pour serveurs en prod, donc).<br />
Je vais encore relire l'article.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 21 Août 2006> Je suis de retour ! :)<br />
<br />
Merlin8282, avoir un article qui couvre _tout_ ce qu'il faut savoir en matière de sécurité... c'est utopique. Cela n'existe pas. Et pour ce qui est de ton article plus "avancé", pourquoi ne pas finir correctement celui-ci avant ? Il ne reste plus qu'à remplir les trous...<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 22 aoû 2006 à 13:03 (CEST)<br />
> Je voudrais bien remplir les trous, mais je ne m'y connais pas assez pour prétendre être ne mesure de le faire. Par exemple, pour la config de snort je ne saurais absolument pas quoi dire, puisque je n'ai fait que l'installer, sur ma debian. La config est celle par défaut et je ne sais même pas ce qu'il y a comme option de config !<br />
La seule section où je pourrais mettre un petit quelque-chose, c'est pour la sauvegarden et encore : chez moi j'ai un petit script tout bête qui met toute ma home dans une archive .tar.gz, sur un autre disque-dur... (comme ici : http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-2.html#ss2.2 ).<br />
Donc voilà, mes compétences dans ce domaine s'arrêtent malheureusement là.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 Août 2006> Fais le truc sur la sauvegarde (c'est toujours ça de pris).<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 24 aoû 2006 à 13:54 (CEST) > fait.</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13288Tenir compte de la sécurité au quotidien2006-08-24T11:52:34Z<p>Merlin8282 : /* Mettre en place un système de sauvegarde */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles chiffrés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
Le mieux est encore de lire une [http://lea-linux.org/nocache/index/Catégorie:Trucs_Sauvegarde.html# documentation correcte à ce sujet]. Néanmoins une sauvegarde des plus rudimentaires peut être mise en place très rapidement avec le script suivant :<br />
<code>#!/bin/bash<br />
tar -cZf /chemin/vers/un/dossier/de/sauvegarde/ma_sauvegarde.tgz /home/moi/</code><br />
Ce script peut être appelé périodiquement par ''cron'', il suffit d'éditer sa crontab avec ''crontab -e''.<br />
<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute chose ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseau)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faites une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez-la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dit que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS est de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13287Tenir compte de la sécurité au quotidien2006-08-24T11:42:26Z<p>Merlin8282 : /* Mettre en place un système de sauvegarde */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles chiffrés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
Le mieux est encore de lire une [http://lea-linux.org/nocache/index/Catégorie:Trucs_Sauvegarde.html# documentation correcte à ce sujet]. Néanmoins une sauvegarde des plus rudimentaires peut être mise en place très rapidement avec le script suivant :<br />
[code]#!/bin/bash<br />
tar -cZf /chemin/vers/un/dossier/de/sauvegarde/ma_sauvegarde.tgz /home/moi/[/code]<br />
Ce script peut être appelé périodiquement par ''cron'', il suffit d'éditer sa crontab avec ''crontab -e''.<br />
<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute chose ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseau)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faites une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez-la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dit que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS est de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Mod%C3%A8le:Fiches:plan-securite&diff=13286Modèle:Fiches:plan-securite2006-08-24T11:29:56Z<p>Merlin8282 : /* Sécurité */</p>
<hr />
<div>=== Sécurité ===<br />
*[[Fiches:securite-ficheroot|Pourquoi ne faut-il pas utiliser l'utilisateur root par défaut ?]]<br />
* [[Fiches:Tenir compte de la sécurité au quotidien|Tenir compte de la sécurité au quotidien]]</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13276Discussion:Tenir compte de la sécurité au quotidien2006-08-22T11:03:35Z<p>Merlin8282 : </p>
<hr />
<div>--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:49 (CEST) <br><br />
Fred, tu ne voulais pas passer la fiche en article ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> si je pense le faire mais j'attends que l'article soit stabilisé. et par contre, une fiche avec des conseils élémentaires est toujours d'actualité quitte à ce quelle renvoie à cette doc si. Pour les remerciement, je pense que les auteurs ne sont pas obligé de se remercier ... ni dire individuellement qui ils remercient. Mais bon chacun fait comme bon lui semble du moment que ça reste léger.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 13 jul 2006 à 16:28><br />
Au fait, je vois cet article (puisqu'on parle d'un article à présent) comme une introduction à la sécurité sous Linux... Pas vraiment comme des conseils au quotidien. Mais bon, cela peut se discuter. :)<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> exactement, d'ou la nécessité d'une fiche qui donne des conseil précis et simples pour limiter un certain nombre de risque sans tous les exposer.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 jul 2006><br />
<br />
Hum, j'ai commencé à regarder la partie technique de l'article. J'aurais tendance à dire que c'est encore du n'importe quoi. Il faudrait tout revoir... :-/<br />
<br />
D'abord, je pense que l'article s'adresse à des gens qui ont seulement une machine personnelle ou un petit réseau. Les professionnels ne liront pas un article sur Léa de toute façon. Donc, la cible de cet article est (à mon humble avis) un administrateur amateur qui s'initie à la sécurité.<br />
<br />
Si on fait cette hypothèse, cela nous permet de faire un tri dans ce qui est "utile" et ce qui ne l'est pas dans l'article tel qu'il est actuellement.<br />
<br />
# '''Sécuriser son boot''': Cela suppose que l'attaquant peut se trouver devant la machine lors du boot... Ce genre d'attaque n'est pas réalisable dans le cas d'une machine personnelle ou d'un réseau domestique (ou sinon, c'est un cambrioleur et de toute façon il va repartir avec la machine)... Donc --> poubelle (J'ajouterai aussi, pour avoir un peu travaillé sur le problème du ''trusted boot'' sur des set top boxes qu'il ne s'agit pas d'un problème trivial et que cela ne risque pas de se traiter en une petite section sur grub).<br />
# '''Partionnement en conséquence''': Je ne vois pas ce que cela à voir avec la sécurité... o_O La mention d'un système de fichiers crypté n'ajoute ni n'enlève rien à la sécurité de la machine. Cela permet de sécuriser des données via un moyen cryptographique ''dur'', rien à voir avec le reste de l'article.<br />
# '''N'installer que le strict nécessaire''': Oui, c'est un conseil que je donnerai mais je ne vois pas la logique de progression dans tout cela ? Pourquoi le mentionner maintenant ? Est-ce que l'on suit l'ordre d'une installation classique ? Et si oui, pourquoi ne pas l'avoir dit précedemment ?<br />
# '''Utilisateurs''': Quelques conseils pertinents dans cette sous-section mais encore une fois, je ne comprends pas la logique non plus. En plus, la configuration par défaut empêche le root de se connecter de façon distante. Pourquoi préciser ce point (ou alors peut-être en encart).<br />
# '''Permissions''': Oui, c'est une explication du ''least privilege principle'', pertinent mais pas ce n'est pas introduit correctement, cela tombe à nouveau comme un cheveux en plein milieu de la soupe. La mention de <code>chroot</code> est complétement parachutée et on se demande ce que cela a à voir avec les permissions...<br />
# '''Bien configurer ses démons''': Pourquoi est-ce que c'est une section et pas une sous-section ???? Quelques remarques pertinentes mais qui n'ont rien à voir avec le titre. On mélange allègrement des conseils sur la sécurisation de son compte web (pourquoi l'utilisateur aurait-il un serveur Web par défaut) et le fait qu'il ne faut pas laisser trainer des données confidentielles en clair sur Internet... Pour moi la configuration des daemons est une chose à part et n'a rien à faire dans cet article (chaque daemon pouvant faire l'objet d'un article à lui tout seul sur comment le sécuriser).<br />
# '''Barrer la route aux connexions non souhaitées''': Oui, il faut une section sur la maîtrise de son traffic réseau et l'utilisation intelligente des firewall. Mais cette section est désastreuse. Elle est beaucoup trop succinte et ne fais que donner une impression de maîtrise (ce qui est encore plus dangereux).<br />
# '''Détecter les intrusions, connaître les outils''': C'est sans doute la seule section qui puisse être exploitable telle quelle.<br />
# '''Localiser le problème et nettoyer''': C'est redondant avec la section précédente, autant fusionner les deux.<br />
<br />
Bon, je vais essayer de m'atteler à un plan qui tienne la route et voir comment structurer les informations. Je ne pense pas détruire les sections avant d'avoir tout fini, donc j'ajouterai mes sections au fur et à mesure en les intercalants là où faut. Je ferai du nettoyage à la fin si vous êtes tous d'accord avec mes modifications.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 jul 2006> Voila, j'ai essayé mettre en place le squelette de l'article. Dites-moi ce que vous en pensez et n'hésitez pas à remplir des cases et/ou à modifier ce qui vous semble opportun.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 26 jul 2006> Je pars en vacances à la fin de la semaine pour deux semaines dans un endroit où je ne pourrais pas me connecter. Essayez de continuer l'article sans moi...<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 18 aoû 2006 à 09:18> Pardonnez-moi, je reviens de mes deux semaines de vacances sans avoir prévenu.<br />
Si à la base j'avais personnellement pensé à un article traitant de _tout_ ce qu'il faut savoir en matière de sécurité, c'est vrai qu'on doit faire la part des choses. Ainsi on peut transformer cet article-ci de manière à le destiner à un public qui utilise son ordi à la maison, tout seul dans son coin, et créer un autre article dans la section Léavancé "pour les pros" (pour serveurs en prod, donc).<br />
Je vais encore relire l'article.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 21 Août 2006> Je suis de retour ! :)<br />
<br />
Merlin8282, avoir un article qui couvre _tout_ ce qu'il faut savoir en matière de sécurité... c'est utopique. Cela n'existe pas. Et pour ce qui est de ton article plus "avancé", pourquoi ne pas finir correctement celui-ci avant ? Il ne reste plus qu'à remplir les trous...<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 22 aoû 2006 à 13:03 (CEST)<br />
> Je voudrais bien remplir les trous, mais je ne m'y connais pas assez pour prétendre être ne mesure de le faire. Par exemple, pour la config de snort je ne saurais absolument pas quoi dire, puisque je n'ai fait que l'installer, sur ma debian. La config est celle par défaut et je ne sais même pas ce qu'il y a comme option de config !<br />
La seule section où je pourrais mettre un petit quelque-chose, c'est pour la sauvegarden et encore : chez moi j'ai un petit script tout bête qui met toute ma home dans une archive .tar.gz, sur un autre disque-dur... (comme ici : http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-2.html#ss2.2 ).<br />
Donc voilà, mes compétences dans ce domaine s'arrêtent malheureusement là.</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13252Tenir compte de la sécurité au quotidien2006-08-18T08:40:01Z<p>Merlin8282 : /* Sécuriser son boot */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles cryptés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute chose ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseau)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faites une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez-la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dit que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS est de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13251Tenir compte de la sécurité au quotidien2006-08-18T08:36:51Z<p>Merlin8282 : /* Règles d'urgence */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles cryptés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute chose ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseau)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faites une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez-la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dit que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13250Tenir compte de la sécurité au quotidien2006-08-18T07:41:02Z<p>Merlin8282 : /* Mise à jour de votre distribution */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles cryptés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatique de vos logiciels. D'autres ont même des mises à jour spécifiquement orientées sécurité (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute choses ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseaux)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faire une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dis que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13249Tenir compte de la sécurité au quotidien2006-08-18T07:39:57Z<p>Merlin8282 : /* Politique de restriction des privilèges */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles cryptés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avérer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était la suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y prêtez pas attention, un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exécuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatiques de vos logiciels. D'autres ont même des mises à jours spécifiquement orientées sécuritée (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute choses ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseaux)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faire une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dis que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13248Tenir compte de la sécurité au quotidien2006-08-18T07:32:12Z<p>Merlin8282 : /* Un bon mot de passe, c'est quoi ? */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles cryptés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prêtent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ou plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciels de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avèrer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était le suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y pretez pas attention un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exéctuer un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatiques de vos logiciels. D'autres ont même des mises à jours spécifiquement orientées sécuritée (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute choses ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseaux)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faire une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dis que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13247Tenir compte de la sécurité au quotidien2006-08-18T07:28:22Z<p>Merlin8282 : /* Un bon mot de passe, c'est quoi ? */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles cryptés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est-il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est-il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est-il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait-il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscure aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prettent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ouo plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciel de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avèrer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était le suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y pretez pas attention un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exéctuer un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatiques de vos logiciels. D'autres ont même des mises à jours spécifiquement orientées sécuritée (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute choses ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseaux)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faire une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dis que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13246Tenir compte de la sécurité au quotidien2006-08-18T07:26:03Z<p>Merlin8282 : /* Les 10 règles d'or en sécurité */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint. Cet article est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur connecté à un réseau, ainsi que les bonnes habitudes à prendre afin de sécuriser sa machine personnelle (nous ne parlerons pas de la sécurisation de serveur en production). Enfin nous aborderons les différents moyens d'analyse post-mortem d'une machine après une attaque et comment la nettoyer avant de la remettre en ligne.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
Pour lire ce document, il est aussi important d'être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux comprendre ce que vous faîtes et d'autre part de mieux réagir en cas d'attaque, donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]). Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les daemons et comment ils fonctionnent]], comment fonctionne un réseau, comment gérer les permissions des fichiers, et tout ce qui pourrait être relatif à l'administration Linux. Plus vous en saurez à propos de Linux mieux vous serez armé pour démarrer avec ce document.<br />
<br />
== Petit survol de la sécurité informatique ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (pare-feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseau un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): <code>nmap -F -O -sV <ip_cible></code><br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter des informations qui transitent par la carte réseau de la machine piratée. Par exemple, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines et de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Contrairement à ce que vous pourriez croire, la plupart du temps, les attaques que subi votre ordinateur ne sont pas dûes à des humains mais plutôt à des logiciels automatiques. Les failles listées dans la catégorie ''sécurité logicielle'' sont donc exploitées le plus souvent par des logiciels ''malveillants'' ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des ''virus'', des ''vers'', des ''chevaux de Troie'' ou encore des ''rootkits'' mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs. Nous allons ici lister ces malware et tenter d'en donner une définition succinte.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix.<br />
<br />
Il est à signaler que le terme de ''virus'' n'est pas anodin, l'application des patchs de sécurité (l'équivalent d'un vaccin pour reprendre l'analogie biologique) pendant une attaque virale revient réellement à enrayer une épidémie. Ne pas ''vacciner'' votre PC pendant une épidémie virale revient presque exactement au même que refuser de vous vacciner contre la grippe en pleine épidémie (avec la différence que la propagation des virii informatiques est environs cent à mille fois plus rapide qu'avec les virii biologiques). Non seulement vous vous exposez au virus mais en plus vous créez un nouveau foyer d'infection qui va permettre au virus de se propager encore un peu plus. Il faut donc être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des virii, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes. <br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, etc). Ces logiciels semblent fonctionner exactement comme ils devraient mais peuvent accomplir des actions malveillantes contre votre système. Par exemple, si la commande <code>login</code> a été remplacée, on pourrait imaginer qu'un login particulier permette de se connecter en root de façon distante en plus de remplir sa tâche normalement. S'il s'agissait de la commande <code>ssh</code>, on pourrait effectuer une sauvegarde de toutes machines, les logins et les machines, les clefs privées, etc qui passent à travers cette commande (et même les envoyer vers un dépot quelque part sur l'Internet). Enfin, on peut imaginer un logiciel de jeu qui tous les vendredi 13 se mette à effacer le contenu de votre compte.<br />
<br />
Les chevaux de Troie peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement des logiciels du type [http://www.chkrootkit.org/ chkrootkit], qui vérifient la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe. Et bien qu'elle soit inclassable du point de vue technique, c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est humain, c'est un ''insider'' (quelqu'un de l'intérieur), ou quelqu'un qui peut avoir un accès physique aux machines (stagiaire, agent d'entretient, ou simplement qui connaît votre numéro de téléphone ou votre adresse e-mail). Dans ces conditions, ill aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. Cette méthode consiste à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres victimes sont par exemple appelées par téléphone ou contactées via e-mail par l'attaquant, se faisant alors passer pour un service technique quelconque, il prétend avoir besoin de votre mot de passe pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
Se prémunir contre ce genre d'attaques est simple.., Ne confiez vos mots de passe à personne et méfiez-vous lorsqu'on vous les demandes.<br />
<br />
== Sécuriser sa machine ==<br />
[http://fr.wikipedia.org/wiki/Bruce_Schneier Bruce Schneier], un des pontes de la sécurité informatique, a dit un jour: "''La sécurité n'est pas un produit, c'est un processus''" (''Security is not a product, it's a process''). L'idée que vous pourriez sécuriser votre machine une bonne fois pour toute lors de l'installation et ne plus y toucher ensuite n'est tout simplement pas envisageable. Tout comme les virii biologiques qui mutent pour contourner les défenses immunitaires de leurs hôtes et pouvoir survivre, les pirates inventent constamment de nouvelles techniques ou se servent de failles inédites et produisent des malwares qui pourront contourner des défenses qui étaient parfaitement sûres quelques semaines auparavant. Maintenir une défense contre les agressions des pirates est une veille constante de l'état de votre machine. Évidemment, sans sombrer dans la paranoïa, il va vous falloir accorder une attention à la sécurité de votre machine qui est proportionnelle à la valeur que vous accordez à ce qu'elle protège.<br />
<br />
Cette section essaye de donner quelques conseils pour rendre votre machine plus sûre en vous donnant les moyens de résister à la plupart des attaques. '''Attention''', même si vous suivez tous ces conseils votre machine ne sera pas invulnérable, elle sera seulement plus difficile d'accès (ce qui décourage déjà 99% des malwares et des attaquants).<br />
<br />
=== Les 10 règles d'or en sécurité ===<br />
Il existe certaines règles qui permettent de se prémunir contre la plupart des attaques. Certaines sont simples et faciles à mettre en œuvre, d'autres sont plus complexes. Voici une liste (non exhaustive) de dix règles à suivre pour sécuriser votre ordinateur. Ces règles sont classées dans un ordre de difficulté croissant. Suivre les règles les plus simples est '''indispensable''' alors que les plus complexes permettent de sécuriser un peu plus votre machine mais ne sont pas forcément aussi importantes. Le mieux est de s'arrêter à l'endroit de la liste qui vous semble trop obscur. Une mesure de protection mal configurée étant souvent pire qu'une absence de protection.<br />
<br />
# '''Attention à vos mots de passe''' (choisissez les bien et ne les confiez pas à des inconnu(e)s)<br />
# '''Préférez les protocoles cryptés''' (préférez ssh à telnet, scp à ftp, pop+ssl à pop, ...)<br />
# '''N'executez et/ou installez pas n'importe quoi''' (attention aux chevaux de Troie)<br />
# '''Passez root le moins souvent possible''' (root a beaucoup de droits et cela peut se retourner contre vous)<br />
# '''Appliquez le principe du privilège minimum''' (Ne donnez un droit que s'il est nécessaire)<br />
# '''Minimisez vos services''' (Si c'est inutile alors c'est dangereux)<br />
# '''Mettez votre distribution à jour''' (Appliquez les correctifs de sécurité aussi souvent que possible)<br />
# '''Filtrez et surveillez votre trafic réseau''' (Activez le firewall et éventuellement un IDS)<br />
# '''Gardez un œil sur vos données''' (Sauvegardez-les et utilisez des logiciels comme tripwire)<br />
# '''Renforcez votre noyau''' (Ajoutez des modules de sécurité optionnels: SELinux, ASLR, ...)<br />
<br />
Une fois ces dix règles édictées, nous allons creuser celles qui valent la peine de l'être.<br />
<br />
=== Un bon mot de passe, c'est quoi ? ===<br />
Votre mot de passe est la clef de voûte de votre sécurité, il est extrêmement important de le choisir correctement... mais aussi de le mémoriser facilement. <br />
<br />
Pour commencer, un ''mauvais'' mot de passe est un mot de passe pour lequel vous pouvez répondre "oui" à l'une des 7 questions suivantes:<br />
<br />
# Avez vous écrit sur un bout de papier votre mot de passe ?<br />
# Votre mot de passe est il un mot commun que l'on peut trouver dans le dictionnaire ?<br />
# Votre mot de passe est il un mot commun suivi de 2 chiffres ?<br />
# Votre mot de passe est il un nom de personne, de lieu ou d'animal ?<br />
# Quelqu'un d'autre connait il votre mot de passe ?<br />
# Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue période ?<br />
# Utilisez vous le mot de passe par défaut du constructeur ou de l'éditeur ?<br />
<br />
Si vous vous trouvez dans la situation de générer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:<br />
<br />
# Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscure aux yeux des autres). Par exemple votre personnage préféré dans une pièce, l'animal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "'''mot de passe'''"<br />
# Enlevez les espaces et le remplacez caractères non ASCII (difficile de trouver l'accent sur un clavier QWERTY-us si vous êtes en déplacement). Par exemple: "'''motdepasse'''"<br />
# Substituez les lettres qui s'y prettent par des nombres. Par exemple: "'''m0tdep4ss3'''"<br />
# Mettez en majuscule certaines lettres. Par exemple: "'''m0TDep4SS3'''"<br />
# Ajoutez des nombres en fin du mot de passe. Par exemple: "'''m0TDep4SS301'''"<br />
# Ajoutez un ouo plusieurs caractères qui ne sont ni des lettres, ni des nombres. Par exemple: "'''m0T'De'p4SS3#01'''"<br />
<br />
Et voilà, vous avez un beau mot de passe difficilement reconaissable mais mémorisable.<br />
<br />
Enfin, si vous n'avez toujours pas confiance dans votre mot de passe, il existe un certain nombre de logiciel de crackage de mots de passe qui peuvent tourner en tâche de fond et vous indiquer quand il est temps de changer de mot de passe. [http://www.openwall.com/john/ John The Ripper] est sans doute le plus célèbre de ces logiciels (un paquetage doit exister pour votre distribution).<br />
<br />
=== Politique de restriction des privilèges ===<br />
Comme nous l'avons dit plus haut, accorder des privilèges non nécessaires à des utilisateurs ou des programmes peut s'avèrer très dangereux si l'attaquant prend leur contrôle. Il pourra profiter de ces privilèges supplémentaires et les exploiter comme des failles de votre système.<br />
<br />
==== Principe du privilège minimum ====<br />
Le principe du privilège minimum est apparu au milieu des années 70 et sa formulation originale était le suivante: "'''Chaque programme et chaque utilisateur du système devrait opérer en utilisant le plus petit nombre de privilèges possible pour accomplir sa tâche.'''"<br />
<br />
Sous Linux, le [http://lea-linux.org/cached/index/Permissions.html modèle des privilèges] de base identifie des objets (les fichiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrôle que l'on peut exercer sur les privilèges est donné par le modèle du ''Discretionary Access Control'' (DAC) qui veut qu'une fois un utilisateur authentifié il ait tous les droits sur tous les objets qu'il possède.<br />
<br />
Pour appliquer le principe du privilège minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin d'être ouvert en lecture, écriture ou encore exécution. Si ce n'est pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accès à votre compte en lecture ? C'est certes plus pratiques de temps en temps, mais si vous n'y pretez pas attention un attaquant pourrait s'infiltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre <code>umask</code> à <code>700</code> et de restreindre ainsi l'accès à votre compte.<br />
<br />
'''Note''': D'autres modèles de contrôle existent, notamment de le ''Mandatory Access Control'' (MAC) implémenté par SELinux et d'autres (''Role-Based Access Control'', RBAC).<br />
<br />
==== Bit setuid et sudo, avantages et inconvénients ====<br />
Le bit setuid permet d'exéctuer un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possède. Évidemment, les bit setuid sont très pratiques mais provoquent souvent des failles importantes dans le système. L'exemple le plus flagrant étant celui d'une commande comme <code>halt</code> qui n'est habituellement utilisable que par root mais qui est bien pratique pour l'utilisateur de la machine. Mettre le bit setuid sur la commande <code>halt</code> permettra à n'importe quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte crée à la va vite, il peut provoquer l'arrêt inconditionnel de votre machine même si vous êtes en train de travailler dessus.<br />
<br />
En fait, si c'est votre propre machine, ce que vous désireriez, c'est simplement donner à l'utilisateur principal le droit de faire cela (sans avoir à passer root) et non pas à TOUS les utilisateurs à la fois. Un programme nommé <code>sudo</code> permet de gérer les autorisations de ce type (exécution ou accès sur la base de l'utilisateur et non des groupes).<br />
<br />
=== Restreindre les failles de votre système ===<br />
==== Mise à jour de votre distribution ====<br />
Toutes les distributions classiques ont un système qui permet la mise à jour automatiques de vos logiciels. D'autres ont même des mises à jours spécifiquement orientées sécuritée (Debian, RedHat, Mandriva). Si votre machine est importante n'hésitez pas à le faire souvent.<br />
<br />
==== Fermer les services inutiles ====<br />
Apprenez à gérer vos [http://lea-linux.org/cached/index/Admin-admin_boot-daemons.html services].<br />
<br />
=== Firewalls et IDS réseaux ===<br />
==== Configuration minimale de Netfilter ====<br />
==== Configuration minimale de Snort ====<br />
<br />
=== Sauvegardes et IDS systèmes ===<br />
==== Mettre en place un système de sauvegarde ====<br />
==== Configuration minimale de Tripwire ====<br />
<br />
== Récupération d'une machine corrompue ==<br />
==== Les symptômes ====<br />
<br />
# Votre système a un comportement étrange ou inhabituel.<br />
# Un des comptes a été utilisé ou des fichiers ont été modifiés à l'insu de son propriétaire légitime.<br />
# Un programme ou un utilisateur inconnu se balade sur votre système.<br />
# L'un de vos IDS vous signale une trace très probablement dûe à une attaque (attention aux faux positifs) ou une corruption anormale de votre système de fichiers.<br />
# Des outils d'audit révèlent des anomalies sur votre système.<br />
<br />
==== Règles d'urgence ====<br />
Que faut-il faire avant toute choses ? Comment réagir ? Comment se prémunir d'autres attaques ?<br />
<br />
# Mettre la machine hors-ligne (débranchez simplement la prise réseaux)<br />
# Faites une sauvegarde '''complète''' du système sur des supports qui seront mis en lieu sûr (cette image du système servira à l'analyse post-mortem).<br />
# Redémarrez à partir d'une image sûre de votre système, restaurez les données. Dans l'idéal, réinstallez complètement votre système (si possible).<br />
# Changez tous les mots de passe.<br />
# Faire une mise à jour '''complète''' de la distribution (installez éventuellement quelques contre-mesures supplémentaires).<br />
# Remettez la en ligne (en la surveillant plus attentivement que d'habitude, les pirates reviennent souvent sur les machines qu'ils ont réussi à pirater).<br />
<br />
Une fois ceci fait, rien ne vous dis que la ou les failles utilisées par les pirates ont disparues. Il vous faut donc procéder à l'analyse post-mortem de l'image de votre système pour déterminer quelle méthode ont utilisé les pirates pour compromettre votre ordinateur et vérifier que la ou les failles ont bien disparues sur votre système actuel.<br />
<br />
==== Analyse Post-mortem ====<br />
==== À qui signaler les intrusions et comment réagir face à la loi ? ====<br />
<br />
<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13245Discussion:Tenir compte de la sécurité au quotidien2006-08-18T07:18:50Z<p>Merlin8282 : </p>
<hr />
<div>[[Utilisateur:Fred (phorum)|Fred (phorum)]]><br />
Les défauts :<br />
Quelques défaut de mise en page subsiste mais c'est anecdotique.<br />
<br />
Par contre, le lien "Sécuriser Apache" arrive un peu comme un cheveu sur la soupe.<br />
<br />
Le script firewall, ne me semble pas à sa place, je m'explique, je voyais cette doc, comme un ensemble de bonnes mesures à prendre etc ... le script, n'a pas sa place dans cet optique, les renvois aux autres doc me parraissent plus adaptés. <br />
<br />
Le paragraphe "Détecter les intrusions" est à compléter / rédiger<br />
<br />
Pour le reste, ça me parait bien. Vu que c'est une fiche cela aurait été bien de mettre une ou deux images, mais bon vu la fiche c'est pas obligatoire.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 16:58> Tu penses à quoi comme image ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> vu la taille de l'article, je pense le renommer en tant qu'article, et les copies d'écran deviennent facultatives<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> J'ai "complété" le ''cheveu sur la soupe'', c'est mieux ainsi ? Je ne vois pas quoi mettre de plus pour ça.<br />
Pour le script iptables, je l'ai mis ici en exemple (ça ne prend pas beaucoup de place, visuellement) histoire que l'on puisse faire un simple copier/coller sans se prendre la tête -- solution rapide, d'urgence, chose qui arrive. Mais c'est vrai qu'on peut le déplacer dans l'article concernant iptables.<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> perso j'y vois pas d'intérêt, mais on peut le laisser<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> Sinon, globalement, que pourrais-je encore changer/améliorer ? Comment pourrais-je organiser un peu mieux tout ça ?<br />
<br />
Ah autre chose encore : pourquoi avoir supprimé le "sommaire" des pages ? (d'ailleur, pourquoi ne pas avoir utilisé le mot magique __NOTOC__ de wikimedia ?) Perso, je trouve plus pratique d'en avoir un, de sommaire : on peut bien le cacher, non ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> le sommaire existe, il n'est juste pas dans le corps de l'article, mais sur le coté gauche<br />
<br />
[[Utilisateur:Fleury|Fleury]] 5 jul 2006 à 18:37><br />
L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques. On y confond allégrement les chevaux de Troie et les vers. Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés. Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité (consultez la base de données du CERT pour plus de détails).<br />
<br />
Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs. J'ai un peu modifié une section mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 6 jul 2006 à 19:28 (CEST)><br />
* L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques.<br><br />
=> Tu peux me tutoyer ;-) . C'est possible que je mélange, je ne suis pas très doué dès qu'on parle d'organisation/structuration.<br />
<br />
* On y confond allégrement les chevaux de Troie et les vers.<br><br />
=> C'est surtout parce-que je n'avais pas vraiment l'intention de développer plus que ça. Et puis, je ne me tiens pas très au courant en ce qui concerne _ce_ genre de risque. Cela dit, tu expliques bien ce dont on parle :-) .<br />
<br />
* Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés.<br><br />
=> C'est que j'ai écrit l'article en n'ayant pas tellement windows à l'esprit. Mais dis ce qui te gène, je suis ouvert.<br />
<br />
* Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité<br><br />
=> Je vous laisse le choix, c'est un boulot communautaire. Après tout je ne suis que celui qui a écrit l'ébauche de l'article.<br />
<br />
* Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs.<br><br />
=> Je n'ai jamais été, je le répète, fort en organisation. Mon but est simplement (comme indiqué sur le forum : ) de centraliser un peu tout ce qu'on doit savoir sur la sécurité quand on a un ordinateur. Evidemment, on ne va pas dire ici tout ce qu'il faut faire pour sécuriser windows, c'est surtout orienté *nix mais comme les infos sont valables pour tous les systèmes...<br />
<br />
* mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br><br />
=> J'en ai déjà fait ! Imagine ce que ça aurait donné sans. Enfin non, ne l'imagine pas O:-) .<br />
<br />
Merci pour ta contribution, je t'ai rajouté dans les remerciements.<br />
<br />
A bon entendeur.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 7 jul 2006 à 10:30><br />
<br />
Salut,<br />
<br />
Ok, pas de problème. Je te propose de faire une relecture attentive de ton article et de te faire des propositions pour l'améliorer. Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-) <br />
<br />
Je pense que ton article est en bonne voie, mais je réitère ma remarque sur le manque de structure. C'est extrêmement important lorsqu'on écrit une documentation que le lecteur soit amené d'un point A à un point B. Si l'auteur de la doc n'a qu'une vague idée de là où il va et de comment il s'y rend cela fera une très mauvaise doc.<br />
<br />
Bon, il faut aussi me comprendre... Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br />
<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 7 jul 2006 à 16:17 (CEST) ><br><br />
Je ne comprends pas trop comment tu veux que la structure soit. Je veux dire, si j'essaye de décrire la structure de mon article en utilisant ton idée d'"ammener l'utilisateur d'un point A à un point B", je dirais que ça m'a l'air tout bon (dans l'ordre que j'ai mis) :<br />
* connaître les menaces (virus, vers & co, injections de code, etc.)<br />
* savoir comment les pirates utilisent ces logiciels<br />
* ensuite ce qu'on doit faire dès le début, à l'installation, pour prévenir les intrusions<br />
* enfin détecter les intrusions et puis nettoyer.<br />
<br />
Honnêtement, je ne vois pas comment faire autrement. Fais une proposition, explique-moi.<br />
<br />
* Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-)<br><br />
Non, ce n'est pas mon cas en effet. Quand je ne suis pas sûr, je me renseigne ou je n'aborde pas le sujet, ou seulement très brièvement.<br />
<br />
* Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br><br />
Je comprends : je suis un défenseur de la langue française et ça me fait parfois sursauter de voir certaines fautes :-D . D'où mes corrections sur les wiki où je passe...<br />
<br />
Pour terminer, n'hésite pas à modifier l'article, il ne m'appartient pas, il est à tout le monde !<br />
<br />
[[Utilisateur:Fleury|Fleury]] 11 jul 2006 à 15:08><br />
<br />
J'ai fait quelques modifications pour essayer d'être plus cohérent et de donner un aperçu plus global du sujet. Il me reste à finir la section sur les IDS/IPS et les honeypots. Une fois que j'aurais fini ça, je passerai à une revue de ce que tu as fait sur les aspects techniques.<br />
<br />
Note: Tu as oublié de parler d'outils comme [http://www.porcupine.org/forensics/tct.html tct] qui me semblent être aussi intéressant que chkrootkit (qui ne fait qu'une partie du travail).<br />
<br />
Fini avec les IDS. Je ferais la relecture technique plus tard.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 12 jul 2006 à 18:08><br />
<br />
Hum, pourquoi mettre des auteurs ? C'est un wiki après tout ! :)<br />
Je ne suis pas sûr d'être pour le fait d'apparaître en tant qu'auteur (cela me semble aller contre l'esprit du wiki mais ce n'est que mon opinion).<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> Disons que c'est historique, sur léa les articles ont toujours commencer par les noms des auteurs, maintenant si tu ne veux pas que ton nom apparaisse au début de l'article, tu peux le supprimer. Par contre, vu que tu as modifier de manière substantiel l'article original je pense qu'il faut que tu sois dans la liste des auteurs qui détiennent un copyright sur l'article.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 13 jul 2006 à 16:28><br />
<br />
Non, ce n'est pas que je ne veux pas mon nom sur cet article, c'est juste que le principe de signer un document modifiable par tous m'étonnai un peu. ;-)<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:45 (CEST)<br />
<br />
Tout à fait, Fred. D'ailleurs, j'ai quelque peu modifié mes remerciements. A ce propos, je suppose que c'est inutile de préciser qui remercie qui ? Par exemple :<br />
= Remerciements =<br />
* merlin8282 :<br><br />
/me remercie lui, elle, lui et elle, etc.<br />
* Fleury :<br><br />
idem<br />
<br />
----<br />
<br />
Fleury : je ne connaissais pas ''tct'', je te laisse le soin d'en parler ;-) .<br />
<br />
[[Utilisateur:Fleury|Fleury]] 13 jul 2006 à 16:28><br />
Ok, pas de problème.<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:49 (CEST) <br><br />
Fred, tu ne voulais pas passer la fiche en article ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> si je pense le faire mais j'attends que l'article soit stabilisé. et par contre, une fiche avec des conseils élémentaires est toujours d'actualité quitte à ce quelle renvoie à cette doc si. Pour les remerciement, je pense que les auteurs ne sont pas obligé de se remercier ... ni dire individuellement qui ils remercient. Mais bon chacun fait comme bon lui semble du moment que ça reste léger.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 13 jul 2006 à 16:28><br />
Au fait, je vois cet article (puisqu'on parle d'un article à présent) comme une introduction à la sécurité sous Linux... Pas vraiment comme des conseils au quotidien. Mais bon, cela peut se discuter. :)<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> exactement, d'ou la nécessité d'une fiche qui donne des conseil précis et simples pour limiter un certain nombre de risque sans tous les exposer.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 jul 2006><br />
<br />
Hum, j'ai commencé à regarder la partie technique de l'article. J'aurais tendance à dire que c'est encore du n'importe quoi. Il faudrait tout revoir... :-/<br />
<br />
D'abord, je pense que l'article s'adresse à des gens qui ont seulement une machine personnelle ou un petit réseau. Les professionnels ne liront pas un article sur Léa de toute façon. Donc, la cible de cet article est (à mon humble avis) un administrateur amateur qui s'initie à la sécurité.<br />
<br />
Si on fait cette hypothèse, cela nous permet de faire un tri dans ce qui est "utile" et ce qui ne l'est pas dans l'article tel qu'il est actuellement.<br />
<br />
# '''Sécuriser son boot''': Cela suppose que l'attaquant peut se trouver devant la machine lors du boot... Ce genre d'attaque n'est pas réalisable dans le cas d'une machine personnelle ou d'un réseau domestique (ou sinon, c'est un cambrioleur et de toute façon il va repartir avec la machine)... Donc --> poubelle (J'ajouterai aussi, pour avoir un peu travaillé sur le problème du ''trusted boot'' sur des set top boxes qu'il ne s'agit pas d'un problème trivial et que cela ne risque pas de se traiter en une petite section sur grub).<br />
# '''Partionnement en conséquence''': Je ne vois pas ce que cela à voir avec la sécurité... o_O La mention d'un système de fichiers crypté n'ajoute ni n'enlève rien à la sécurité de la machine. Cela permet de sécuriser des données via un moyen cryptographique ''dur'', rien à voir avec le reste de l'article.<br />
# '''N'installer que le strict nécessaire''': Oui, c'est un conseil que je donnerai mais je ne vois pas la logique de progression dans tout cela ? Pourquoi le mentionner maintenant ? Est-ce que l'on suit l'ordre d'une installation classique ? Et si oui, pourquoi ne pas l'avoir dit précedemment ?<br />
# '''Utilisateurs''': Quelques conseils pertinents dans cette sous-section mais encore une fois, je ne comprends pas la logique non plus. En plus, la configuration par défaut empêche le root de se connecter de façon distante. Pourquoi préciser ce point (ou alors peut-être en encart).<br />
# '''Permissions''': Oui, c'est une explication du ''least privilege principle'', pertinent mais pas ce n'est pas introduit correctement, cela tombe à nouveau comme un cheveux en plein milieu de la soupe. La mention de <code>chroot</code> est complétement parachutée et on se demande ce que cela a à voir avec les permissions...<br />
# '''Bien configurer ses démons''': Pourquoi est-ce que c'est une section et pas une sous-section ???? Quelques remarques pertinentes mais qui n'ont rien à voir avec le titre. On mélange allègrement des conseils sur la sécurisation de son compte web (pourquoi l'utilisateur aurait-il un serveur Web par défaut) et le fait qu'il ne faut pas laisser trainer des données confidentielles en clair sur Internet... Pour moi la configuration des daemons est une chose à part et n'a rien à faire dans cet article (chaque daemon pouvant faire l'objet d'un article à lui tout seul sur comment le sécuriser).<br />
# '''Barrer la route aux connexions non souhaitées''': Oui, il faut une section sur la maîtrise de son traffic réseau et l'utilisation intelligente des firewall. Mais cette section est désastreuse. Elle est beaucoup trop succinte et ne fais que donner une impression de maîtrise (ce qui est encore plus dangereux).<br />
# '''Détecter les intrusions, connaître les outils''': C'est sans doute la seule section qui puisse être exploitable telle quelle.<br />
# '''Localiser le problème et nettoyer''': C'est redondant avec la section précédente, autant fusionner les deux.<br />
<br />
Bon, je vais essayer de m'atteler à un plan qui tienne la route et voir comment structurer les informations. Je ne pense pas détruire les sections avant d'avoir tout fini, donc j'ajouterai mes sections au fur et à mesure en les intercalants là où faut. Je ferai du nettoyage à la fin si vous êtes tous d'accord avec mes modifications.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 jul 2006> Voila, j'ai essayé mettre en place le squelette de l'article. Dites-moi ce que vous en pensez et n'hésitez pas à remplir des cases et/ou à modifier ce qui vous semble opportun.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 26 jul 2006> Je pars en vacances à la fin de la semaine pour deux semaines dans un endroit où je ne pourrais pas me connecter. Essayez de continuer l'article sans moi...<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 18 aoû 2006 à 09:18> Pardonnez-moi, je reviens de mes deux semaines de vacances sans avoir prévenu.<br />
Si à la base j'avais personnellement pensé à un article traitant de _tout_ ce qu'il faut savoir en matière de sécurité, c'est vrai qu'on doit faire la part des choses. Ainsi on peut transformer cet article-ci de manière à le destiner à un public qui utilise son ordi à la maison, tout seul dans son coin, et créer un autre article dans la section Léavancé "pour les pros" (pour serveurs en prod, donc).<br />
Je vais encore relire l'article.</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13244Discussion:Tenir compte de la sécurité au quotidien2006-08-18T07:18:08Z<p>Merlin8282 : </p>
<hr />
<div>[[Utilisateur:Fred (phorum)|Fred (phorum)]]><br />
Les défauts :<br />
Quelques défaut de mise en page subsiste mais c'est anecdotique.<br />
<br />
Par contre, le lien "Sécuriser Apache" arrive un peu comme un cheveu sur la soupe.<br />
<br />
Le script firewall, ne me semble pas à sa place, je m'explique, je voyais cette doc, comme un ensemble de bonnes mesures à prendre etc ... le script, n'a pas sa place dans cet optique, les renvois aux autres doc me parraissent plus adaptés. <br />
<br />
Le paragraphe "Détecter les intrusions" est à compléter / rédiger<br />
<br />
Pour le reste, ça me parait bien. Vu que c'est une fiche cela aurait été bien de mettre une ou deux images, mais bon vu la fiche c'est pas obligatoire.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 16:58> Tu penses à quoi comme image ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> vu la taille de l'article, je pense le renommer en tant qu'article, et les copies d'écran deviennent facultatives<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> J'ai "complété" le ''cheveu sur la soupe'', c'est mieux ainsi ? Je ne vois pas quoi mettre de plus pour ça.<br />
Pour le script iptables, je l'ai mis ici en exemple (ça ne prend pas beaucoup de place, visuellement) histoire que l'on puisse faire un simple copier/coller sans se prendre la tête -- solution rapide, d'urgence, chose qui arrive. Mais c'est vrai qu'on peut le déplacer dans l'article concernant iptables.<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> perso j'y vois pas d'intérêt, mais on peut le laisser<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> Sinon, globalement, que pourrais-je encore changer/améliorer ? Comment pourrais-je organiser un peu mieux tout ça ?<br />
<br />
Ah autre chose encore : pourquoi avoir supprimé le "sommaire" des pages ? (d'ailleur, pourquoi ne pas avoir utilisé le mot magique __NOTOC__ de wikimedia ?) Perso, je trouve plus pratique d'en avoir un, de sommaire : on peut bien le cacher, non ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> le sommaire existe, il n'est juste pas dans le corps de l'article, mais sur le coté gauche<br />
<br />
[[Utilisateur:Fleury|Fleury]] 5 jul 2006 à 18:37><br />
L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques. On y confond allégrement les chevaux de Troie et les vers. Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés. Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité (consultez la base de données du CERT pour plus de détails).<br />
<br />
Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs. J'ai un peu modifié une section mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 6 jul 2006 à 19:28 (CEST)><br />
* L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques.<br><br />
=> Tu peux me tutoyer ;-) . C'est possible que je mélange, je ne suis pas très doué dès qu'on parle d'organisation/structuration.<br />
<br />
* On y confond allégrement les chevaux de Troie et les vers.<br><br />
=> C'est surtout parce-que je n'avais pas vraiment l'intention de développer plus que ça. Et puis, je ne me tiens pas très au courant en ce qui concerne _ce_ genre de risque. Cela dit, tu expliques bien ce dont on parle :-) .<br />
<br />
* Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés.<br><br />
=> C'est que j'ai écrit l'article en n'ayant pas tellement windows à l'esprit. Mais dis ce qui te gène, je suis ouvert.<br />
<br />
* Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité<br><br />
=> Je vous laisse le choix, c'est un boulot communautaire. Après tout je ne suis que celui qui a écrit l'ébauche de l'article.<br />
<br />
* Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs.<br><br />
=> Je n'ai jamais été, je le répète, fort en organisation. Mon but est simplement (comme indiqué sur le forum : ) de centraliser un peu tout ce qu'on doit savoir sur la sécurité quand on a un ordinateur. Evidemment, on ne va pas dire ici tout ce qu'il faut faire pour sécuriser windows, c'est surtout orienté *nix mais comme les infos sont valables pour tous les systèmes...<br />
<br />
* mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br><br />
=> J'en ai déjà fait ! Imagine ce que ça aurait donné sans. Enfin non, ne l'imagine pas O:-) .<br />
<br />
Merci pour ta contribution, je t'ai rajouté dans les remerciements.<br />
<br />
A bon entendeur.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 7 jul 2006 à 10:30><br />
<br />
Salut,<br />
<br />
Ok, pas de problème. Je te propose de faire une relecture attentive de ton article et de te faire des propositions pour l'améliorer. Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-) <br />
<br />
Je pense que ton article est en bonne voie, mais je réitère ma remarque sur le manque de structure. C'est extrêmement important lorsqu'on écrit une documentation que le lecteur soit amené d'un point A à un point B. Si l'auteur de la doc n'a qu'une vague idée de là où il va et de comment il s'y rend cela fera une très mauvaise doc.<br />
<br />
Bon, il faut aussi me comprendre... Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br />
<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 7 jul 2006 à 16:17 (CEST) ><br><br />
Je ne comprends pas trop comment tu veux que la structure soit. Je veux dire, si j'essaye de décrire la structure de mon article en utilisant ton idée d'"ammener l'utilisateur d'un point A à un point B", je dirais que ça m'a l'air tout bon (dans l'ordre que j'ai mis) :<br />
* connaître les menaces (virus, vers & co, injections de code, etc.)<br />
* savoir comment les pirates utilisent ces logiciels<br />
* ensuite ce qu'on doit faire dès le début, à l'installation, pour prévenir les intrusions<br />
* enfin détecter les intrusions et puis nettoyer.<br />
<br />
Honnêtement, je ne vois pas comment faire autrement. Fais une proposition, explique-moi.<br />
<br />
* Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-)<br><br />
Non, ce n'est pas mon cas en effet. Quand je ne suis pas sûr, je me renseigne ou je n'aborde pas le sujet, ou seulement très brièvement.<br />
<br />
* Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br><br />
Je comprends : je suis un défenseur de la langue française et ça me fait parfois sursauter de voir certaines fautes :-D . D'où mes corrections sur les wiki où je passe...<br />
<br />
Pour terminer, n'hésite pas à modifier l'article, il ne m'appartient pas, il est à tout le monde !<br />
<br />
[[Utilisateur:Fleury|Fleury]] 11 jul 2006 à 15:08><br />
<br />
J'ai fait quelques modifications pour essayer d'être plus cohérent et de donner un aperçu plus global du sujet. Il me reste à finir la section sur les IDS/IPS et les honeypots. Une fois que j'aurais fini ça, je passerai à une revue de ce que tu as fait sur les aspects techniques.<br />
<br />
Note: Tu as oublié de parler d'outils comme [http://www.porcupine.org/forensics/tct.html tct] qui me semblent être aussi intéressant que chkrootkit (qui ne fait qu'une partie du travail).<br />
<br />
Fini avec les IDS. Je ferais la relecture technique plus tard.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 12 jul 2006 à 18:08><br />
<br />
Hum, pourquoi mettre des auteurs ? C'est un wiki après tout ! :)<br />
Je ne suis pas sûr d'être pour le fait d'apparaître en tant qu'auteur (cela me semble aller contre l'esprit du wiki mais ce n'est que mon opinion).<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> Disons que c'est historique, sur léa les articles ont toujours commencer par les noms des auteurs, maintenant si tu ne veux pas que ton nom apparaisse au début de l'article, tu peux le supprimer. Par contre, vu que tu as modifier de manière substantiel l'article original je pense qu'il faut que tu sois dans la liste des auteurs qui détiennent un copyright sur l'article.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 13 jul 2006 à 16:28><br />
<br />
Non, ce n'est pas que je ne veux pas mon nom sur cet article, c'est juste que le principe de signer un document modifiable par tous m'étonnai un peu. ;-)<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:45 (CEST)<br />
<br />
Tout à fait, Fred. D'ailleurs, j'ai quelque peu modifié mes remerciements. A ce propos, je suppose que c'est inutile de préciser qui remercie qui ? Par exemple :<br />
= Remerciements =<br />
* merlin8282 :<br><br />
/me remercie lui, elle, lui et elle, etc.<br />
* Fleury :<br><br />
idem<br />
<br />
----<br />
<br />
Fleury : je ne connaissais pas ''tct'', je te laisse le soin d'en parler ;-) .<br />
<br />
[[Utilisateur:Fleury|Fleury]] 13 jul 2006 à 16:28><br />
Ok, pas de problème.<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:49 (CEST) <br><br />
Fred, tu ne voulais pas passer la fiche en article ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> si je pense le faire mais j'attends que l'article soit stabilisé. et par contre, une fiche avec des conseils élémentaires est toujours d'actualité quitte à ce quelle renvoie à cette doc si. Pour les remerciement, je pense que les auteurs ne sont pas obligé de se remercier ... ni dire individuellement qui ils remercient. Mais bon chacun fait comme bon lui semble du moment que ça reste léger.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 13 jul 2006 à 16:28><br />
Au fait, je vois cet article (puisqu'on parle d'un article à présent) comme une introduction à la sécurité sous Linux... Pas vraiment comme des conseils au quotidien. Mais bon, cela peut se discuter. :)<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> exactement, d'ou la nécessité d'une fiche qui donne des conseil précis et simples pour limiter un certain nombre de risque sans tous les exposer.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 jul 2006><br />
<br />
Hum, j'ai commencé à regarder la partie technique de l'article. J'aurais tendance à dire que c'est encore du n'importe quoi. Il faudrait tout revoir... :-/<br />
<br />
D'abord, je pense que l'article s'adresse à des gens qui ont seulement une machine personnelle ou un petit réseau. Les professionnels ne liront pas un article sur Léa de toute façon. Donc, la cible de cet article est (à mon humble avis) un administrateur amateur qui s'initie à la sécurité.<br />
<br />
Si on fait cette hypothèse, cela nous permet de faire un tri dans ce qui est "utile" et ce qui ne l'est pas dans l'article tel qu'il est actuellement.<br />
<br />
# '''Sécuriser son boot''': Cela suppose que l'attaquant peut se trouver devant la machine lors du boot... Ce genre d'attaque n'est pas réalisable dans le cas d'une machine personnelle ou d'un réseau domestique (ou sinon, c'est un cambrioleur et de toute façon il va repartir avec la machine)... Donc --> poubelle (J'ajouterai aussi, pour avoir un peu travaillé sur le problème du ''trusted boot'' sur des set top boxes qu'il ne s'agit pas d'un problème trivial et que cela ne risque pas de se traiter en une petite section sur grub).<br />
# '''Partionnement en conséquence''': Je ne vois pas ce que cela à voir avec la sécurité... o_O La mention d'un système de fichiers crypté n'ajoute ni n'enlève rien à la sécurité de la machine. Cela permet de sécuriser des données via un moyen cryptographique ''dur'', rien à voir avec le reste de l'article.<br />
# '''N'installer que le strict nécessaire''': Oui, c'est un conseil que je donnerai mais je ne vois pas la logique de progression dans tout cela ? Pourquoi le mentionner maintenant ? Est-ce que l'on suit l'ordre d'une installation classique ? Et si oui, pourquoi ne pas l'avoir dit précedemment ?<br />
# '''Utilisateurs''': Quelques conseils pertinents dans cette sous-section mais encore une fois, je ne comprends pas la logique non plus. En plus, la configuration par défaut empêche le root de se connecter de façon distante. Pourquoi préciser ce point (ou alors peut-être en encart).<br />
# '''Permissions''': Oui, c'est une explication du ''least privilege principle'', pertinent mais pas ce n'est pas introduit correctement, cela tombe à nouveau comme un cheveux en plein milieu de la soupe. La mention de <code>chroot</code> est complétement parachutée et on se demande ce que cela a à voir avec les permissions...<br />
# '''Bien configurer ses démons''': Pourquoi est-ce que c'est une section et pas une sous-section ???? Quelques remarques pertinentes mais qui n'ont rien à voir avec le titre. On mélange allègrement des conseils sur la sécurisation de son compte web (pourquoi l'utilisateur aurait-il un serveur Web par défaut) et le fait qu'il ne faut pas laisser trainer des données confidentielles en clair sur Internet... Pour moi la configuration des daemons est une chose à part et n'a rien à faire dans cet article (chaque daemon pouvant faire l'objet d'un article à lui tout seul sur comment le sécuriser).<br />
# '''Barrer la route aux connexions non souhaitées''': Oui, il faut une section sur la maîtrise de son traffic réseau et l'utilisation intelligente des firewall. Mais cette section est désastreuse. Elle est beaucoup trop succinte et ne fais que donner une impression de maîtrise (ce qui est encore plus dangereux).<br />
# '''Détecter les intrusions, connaître les outils''': C'est sans doute la seule section qui puisse être exploitable telle quelle.<br />
# '''Localiser le problème et nettoyer''': C'est redondant avec la section précédente, autant fusionner les deux.<br />
<br />
Bon, je vais essayer de m'atteler à un plan qui tienne la route et voir comment structurer les informations. Je ne pense pas détruire les sections avant d'avoir tout fini, donc j'ajouterai mes sections au fur et à mesure en les intercalants là où faut. Je ferai du nettoyage à la fin si vous êtes tous d'accord avec mes modifications.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 24 jul 2006> Voila, j'ai essayé mettre en place le squelette de l'article. Dites-moi ce que vous en pensez et n'hésitez pas à remplir des cases et/ou à modifier ce qui vous semble opportun.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 26 jul 2006> Je pars en vacances à la fin de la semaine pour deux semaines dans un endroit où je ne pourrais pas me connecter. Essayez de continuer l'article sans moi...<br />
<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 18 aoû 2006 à 09:18 (CEST)<br />
<br />
Pardonnez-moi, je reviens de mes deux semaines de vacances sans avoir prévenu.<br />
Si à la base j'avais personnellement pensé à un article traitant de _tout_ ce qu'il faut savoir en matière de sécurité, c'est vrai qu'on doit faire la part des choses. Ainsi on peut transformer cet article-ci de manière à le destiner à un public qui utilise son ordi à la maison, tout seul dans son coin, et créer un autre article dans la section Léavancé "pour les pros" (pour serveurs en prod, donc).<br />
Je vais encore relire l'article.</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13094Tenir compte de la sécurité au quotidien2006-07-17T15:17:49Z<p>Merlin8282 : /* Utilisateurs */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint.<br />
<br />
Cette fiche est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur, connecté à un réseau ou non, ainsi que pour se parer contre la plupart des attaques et enfin pour savoir comment nettoyer l'ordinateur après une attaque que l'on vient de subir.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
== Avant tout, connaître son système ==<br />
D'abord et avant tout il faut être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux connaître et comprendre ce que nous faisons et d'autre part de mieux réagir en cas d'attaque. Donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]).Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les démons et comment ils fonctionnent]]. Voyez comment fonctionne un réseau, ce que sont les ports réseau, les permissions des fichiers, ce que sont les failles de sécurité des logiciels, etc.<br />
<br />
== Connaître les risques ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (mur de feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseaux un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): -F -O -sV<br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter les informations utiles qui transitent par la carte réseau de la machine piratée. Ainsi, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines, de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Il faut savoir qu'en informatique il existe des logiciels malveillants ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des virus, des vers, des chevaux de Troie ou encore des rootkits. Mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix. Cependant il faut être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des malwares, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes.<br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, pour collecter les mots de passe vers d'autres systèmes, etc). Ils peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement [http://www.chkrootkit.org/ chkrootkit], qui vérifie la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe et bien qu'elle soit inclassable du point de vue technique c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est un ''insider'' (quelqu'un de l'intérieur), il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. C'est une méthode consistant à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres sont par exemple appelés par l'attaquant, se faisant alors passer pour le service technique de l'entreprise, qui prétend avoir besoin du mot de passe de l'utilisateur pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille par un intrus pour obtenir plus de permissions n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13052Discussion:Tenir compte de la sécurité au quotidien2006-07-13T12:49:12Z<p>Merlin8282 : </p>
<hr />
<div>[[Utilisateur:Fred (phorum)|Fred (phorum)]]><br />
Les défauts :<br />
Quelques défaut de mise en page subsiste mais c'est anecdotique.<br />
<br />
Par contre, le lien "Sécuriser Apache" arrive un peu comme un cheveu sur la soupe.<br />
<br />
Le script firewall, ne me semble pas à sa place, je m'explique, je voyais cette doc, comme un ensemble de bonnes mesures à prendre etc ... le script, n'a pas sa place dans cet optique, les renvois aux autres doc me parraissent plus adaptés. <br />
<br />
Le paragraphe "Détecter les intrusions" est à compléter / rédiger<br />
<br />
Pour le reste, ça me parait bien. Vu que c'est une fiche cela aurait été bien de mettre une ou deux images, mais bon vu la fiche c'est pas obligatoire.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 16:58> Tu penses à quoi comme image ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> vu la taille de l'article, je pense le renommer en tant qu'article, et les copies d'écran deviennent facultatives<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> J'ai "complété" le ''cheveu sur la soupe'', c'est mieux ainsi ? Je ne vois pas quoi mettre de plus pour ça.<br />
Pour le script iptables, je l'ai mis ici en exemple (ça ne prend pas beaucoup de place, visuellement) histoire que l'on puisse faire un simple copier/coller sans se prendre la tête -- solution rapide, d'urgence, chose qui arrive. Mais c'est vrai qu'on peut le déplacer dans l'article concernant iptables.<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> perso j'y vois pas d'intérêt, mais on peut le laisser<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> Sinon, globalement, que pourrais-je encore changer/améliorer ? Comment pourrais-je organiser un peu mieux tout ça ?<br />
<br />
Ah autre chose encore : pourquoi avoir supprimé le "sommaire" des pages ? (d'ailleur, pourquoi ne pas avoir utilisé le mot magique __NOTOC__ de wikimedia ?) Perso, je trouve plus pratique d'en avoir un, de sommaire : on peut bien le cacher, non ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> le sommaire existe, il n'est juste pas dans le corps de l'article, mais sur le coté gauche<br />
<br />
[[Utilisateur:Fleury|Fleury]] 5 jul 2006 à 18:37><br />
L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques. On y confond allégrement les chevaux de Troie et les vers. Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés. Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité (consultez la base de données du CERT pour plus de détails).<br />
<br />
Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs. J'ai un peu modifié une section mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 6 jul 2006 à 19:28 (CEST)><br />
* L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques.<br><br />
=> Tu peux me tutoyer ;-) . C'est possible que je mélange, je ne suis pas très doué dès qu'on parle d'organisation/structuration.<br />
<br />
* On y confond allégrement les chevaux de Troie et les vers.<br><br />
=> C'est surtout parce-que je n'avais pas vraiment l'intention de développer plus que ça. Et puis, je ne me tiens pas très au courant en ce qui concerne _ce_ genre de risque. Cela dit, tu expliques bien ce dont on parle :-) .<br />
<br />
* Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés.<br><br />
=> C'est que j'ai écrit l'article en n'ayant pas tellement windows à l'esprit. Mais dis ce qui te gène, je suis ouvert.<br />
<br />
* Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité<br><br />
=> Je vous laisse le choix, c'est un boulot communautaire. Après tout je ne suis que celui qui a écrit l'ébauche de l'article.<br />
<br />
* Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs.<br><br />
=> Je n'ai jamais été, je le répète, fort en organisation. Mon but est simplement (comme indiqué sur le forum : ) de centraliser un peu tout ce qu'on doit savoir sur la sécurité quand on a un ordinateur. Evidemment, on ne va pas dire ici tout ce qu'il faut faire pour sécuriser windows, c'est surtout orienté *nix mais comme les infos sont valables pour tous les systèmes...<br />
<br />
* mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br><br />
=> J'en ai déjà fait ! Imagine ce que ça aurait donné sans. Enfin non, ne l'imagine pas O:-) .<br />
<br />
Merci pour ta contribution, je t'ai rajouté dans les remerciements.<br />
<br />
A bon entendeur.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 7 jul 2006 à 10:30><br />
<br />
Salut,<br />
<br />
Ok, pas de problème. Je te propose de faire une relecture attentive de ton article et de te faire des propositions pour l'améliorer. Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-) <br />
<br />
Je pense que ton article est en bonne voie, mais je réitère ma remarque sur le manque de structure. C'est extrêmement important lorsqu'on écrit une documentation que le lecteur soit amené d'un point A à un point B. Si l'auteur de la doc n'a qu'une vague idée de là où il va et de comment il s'y rend cela fera une très mauvaise doc.<br />
<br />
Bon, il faut aussi me comprendre... Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br />
<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 7 jul 2006 à 16:17 (CEST) ><br><br />
Je ne comprends pas trop comment tu veux que la structure soit. Je veux dire, si j'essaye de décrire la structure de mon article en utilisant ton idée d'"ammener l'utilisateur d'un point A à un point B", je dirais que ça m'a l'air tout bon (dans l'ordre que j'ai mis) :<br />
* connaître les menaces (virus, vers & co, injections de code, etc.)<br />
* savoir comment les pirates utilisent ces logiciels<br />
* ensuite ce qu'on doit faire dès le début, à l'installation, pour prévenir les intrusions<br />
* enfin détecter les intrusions et puis nettoyer.<br />
<br />
Honnêtement, je ne vois pas comment faire autrement. Fais une proposition, explique-moi.<br />
<br />
* Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-)<br><br />
Non, ce n'est pas mon cas en effet. Quand je ne suis pas sûr, je me renseigne ou je n'aborde pas le sujet, ou seulement très brièvement.<br />
<br />
* Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br><br />
Je comprends : je suis un défenseur de la langue française et ça me fait parfois sursauter de voir certaines fautes :-D . D'où mes corrections sur les wiki où je passe...<br />
<br />
Pour terminer, n'hésite pas à modifier l'article, il ne m'appartient pas, il est à tout le monde !<br />
<br />
[[Utilisateur:Fleury|Fleury]] 11 jul 2006 à 15:08><br />
<br />
J'ai fait quelques modifications pour essayer d'être plus cohérent et de donner un aperçu plus global du sujet. Il me reste à finir la section sur les IDS/IPS et les honeypots. Une fois que j'aurais fini ça, je passerai à une revue de ce que tu as fait sur les aspects techniques.<br />
<br />
Note: Tu as oublié de parler d'outils comme [http://www.porcupine.org/forensics/tct.html tct] qui me semblent être aussi intéressant que chkrootkit (qui ne fait qu'une partie du travail).<br />
<br />
Fini avec les IDS. Je ferais la relecture technique plus tard.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 12 jul 2006 à 18:08><br />
<br />
Hum, pourquoi mettre des auteurs ? C'est un wiki après tout ! :)<br />
Je ne suis pas sûr d'être pour le fait d'apparaître en tant qu'auteur (cela me semble aller contre l'esprit du wiki mais ce n'est que mon opinion).<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> Disons que c'est historique, sur léa les articles ont toujours commencer par les noms des auteurs, maintenant si tu ne veux pas que ton nom apparaisse au début de l'article, tu peux le supprimer. Par contre, vu que tu as modifier de manière substantiel l'article original je pense qu'il faut que tu sois dans la liste des auteurs qui détiennent un copyright sur l'article.<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:45 (CEST)<br />
<br />
Tout à fait, Fred. D'ailleurs, j'ai quelque peu modifié mes remerciements. A ce propos, je suppose que c'est inutile de préciser qui remercie qui ? Par exemple :<br />
= Remerciements =<br />
* merlin8282 :<br><br />
/me remercie lui, elle, lui et elle, etc.<br />
* Fleury :<br><br />
idem<br />
<br />
----<br />
<br />
Fleury : je ne connaissais pas ''tct'', je te laisse le soin d'en parler ;-) .<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:49 (CEST) <br><br />
Fred, tu ne voulais pas passer la fiche en article ?</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13051Discussion:Tenir compte de la sécurité au quotidien2006-07-13T12:47:22Z<p>Merlin8282 : </p>
<hr />
<div>[[Utilisateur:Fred (phorum)|Fred (phorum)]]><br />
Les défauts :<br />
Quelques défaut de mise en page subsiste mais c'est anecdotique.<br />
<br />
Par contre, le lien "Sécuriser Apache" arrive un peu comme un cheveu sur la soupe.<br />
<br />
Le script firewall, ne me semble pas à sa place, je m'explique, je voyais cette doc, comme un ensemble de bonnes mesures à prendre etc ... le script, n'a pas sa place dans cet optique, les renvois aux autres doc me parraissent plus adaptés. <br />
<br />
Le paragraphe "Détecter les intrusions" est à compléter / rédiger<br />
<br />
Pour le reste, ça me parait bien. Vu que c'est une fiche cela aurait été bien de mettre une ou deux images, mais bon vu la fiche c'est pas obligatoire.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 16:58> Tu penses à quoi comme image ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> vu la taille de l'article, je pense le renommer en tant qu'article, et les copies d'écran deviennent facultatives<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> J'ai "complété" le ''cheveu sur la soupe'', c'est mieux ainsi ? Je ne vois pas quoi mettre de plus pour ça.<br />
Pour le script iptables, je l'ai mis ici en exemple (ça ne prend pas beaucoup de place, visuellement) histoire que l'on puisse faire un simple copier/coller sans se prendre la tête -- solution rapide, d'urgence, chose qui arrive. Mais c'est vrai qu'on peut le déplacer dans l'article concernant iptables.<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> perso j'y vois pas d'intérêt, mais on peut le laisser<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> Sinon, globalement, que pourrais-je encore changer/améliorer ? Comment pourrais-je organiser un peu mieux tout ça ?<br />
<br />
Ah autre chose encore : pourquoi avoir supprimé le "sommaire" des pages ? (d'ailleur, pourquoi ne pas avoir utilisé le mot magique __NOTOC__ de wikimedia ?) Perso, je trouve plus pratique d'en avoir un, de sommaire : on peut bien le cacher, non ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> le sommaire existe, il n'est juste pas dans le corps de l'article, mais sur le coté gauche<br />
<br />
[[Utilisateur:Fleury|Fleury]] 5 jul 2006 à 18:37><br />
L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques. On y confond allégrement les chevaux de Troie et les vers. Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés. Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité (consultez la base de données du CERT pour plus de détails).<br />
<br />
Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs. J'ai un peu modifié une section mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 6 jul 2006 à 19:28 (CEST)><br />
* L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques.<br><br />
=> Tu peux me tutoyer ;-) . C'est possible que je mélange, je ne suis pas très doué dès qu'on parle d'organisation/structuration.<br />
<br />
* On y confond allégrement les chevaux de Troie et les vers.<br><br />
=> C'est surtout parce-que je n'avais pas vraiment l'intention de développer plus que ça. Et puis, je ne me tiens pas très au courant en ce qui concerne _ce_ genre de risque. Cela dit, tu expliques bien ce dont on parle :-) .<br />
<br />
* Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés.<br><br />
=> C'est que j'ai écrit l'article en n'ayant pas tellement windows à l'esprit. Mais dis ce qui te gène, je suis ouvert.<br />
<br />
* Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité<br><br />
=> Je vous laisse le choix, c'est un boulot communautaire. Après tout je ne suis que celui qui a écrit l'ébauche de l'article.<br />
<br />
* Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs.<br><br />
=> Je n'ai jamais été, je le répète, fort en organisation. Mon but est simplement (comme indiqué sur le forum : ) de centraliser un peu tout ce qu'on doit savoir sur la sécurité quand on a un ordinateur. Evidemment, on ne va pas dire ici tout ce qu'il faut faire pour sécuriser windows, c'est surtout orienté *nix mais comme les infos sont valables pour tous les systèmes...<br />
<br />
* mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br><br />
=> J'en ai déjà fait ! Imagine ce que ça aurait donné sans. Enfin non, ne l'imagine pas O:-) .<br />
<br />
Merci pour ta contribution, je t'ai rajouté dans les remerciements.<br />
<br />
A bon entendeur.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 7 jul 2006 à 10:30><br />
<br />
Salut,<br />
<br />
Ok, pas de problème. Je te propose de faire une relecture attentive de ton article et de te faire des propositions pour l'améliorer. Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-) <br />
<br />
Je pense que ton article est en bonne voie, mais je réitère ma remarque sur le manque de structure. C'est extrêmement important lorsqu'on écrit une documentation que le lecteur soit amené d'un point A à un point B. Si l'auteur de la doc n'a qu'une vague idée de là où il va et de comment il s'y rend cela fera une très mauvaise doc.<br />
<br />
Bon, il faut aussi me comprendre... Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br />
<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 7 jul 2006 à 16:17 (CEST) ><br><br />
Je ne comprends pas trop comment tu veux que la structure soit. Je veux dire, si j'essaye de décrire la structure de mon article en utilisant ton idée d'"ammener l'utilisateur d'un point A à un point B", je dirais que ça m'a l'air tout bon (dans l'ordre que j'ai mis) :<br />
* connaître les menaces (virus, vers & co, injections de code, etc.)<br />
* savoir comment les pirates utilisent ces logiciels<br />
* ensuite ce qu'on doit faire dès le début, à l'installation, pour prévenir les intrusions<br />
* enfin détecter les intrusions et puis nettoyer.<br />
<br />
Honnêtement, je ne vois pas comment faire autrement. Fais une proposition, explique-moi.<br />
<br />
* Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-)<br><br />
Non, ce n'est pas mon cas en effet. Quand je ne suis pas sûr, je me renseigne ou je n'aborde pas le sujet, ou seulement très brièvement.<br />
<br />
* Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br><br />
Je comprends : je suis un défenseur de la langue française et ça me fait parfois sursauter de voir certaines fautes :-D . D'où mes corrections sur les wiki où je passe...<br />
<br />
Pour terminer, n'hésite pas à modifier l'article, il ne m'appartient pas, il est à tout le monde !<br />
<br />
[[Utilisateur:Fleury|Fleury]] 11 jul 2006 à 15:08><br />
<br />
J'ai fait quelques modifications pour essayer d'être plus cohérent et de donner un aperçu plus global du sujet. Il me reste à finir la section sur les IDS/IPS et les honeypots. Une fois que j'aurais fini ça, je passerai à une revue de ce que tu as fait sur les aspects techniques.<br />
<br />
Note: Tu as oublié de parler d'outils comme [http://www.porcupine.org/forensics/tct.html tct] qui me semblent être aussi intéressant que chkrootkit (qui ne fait qu'une partie du travail).<br />
<br />
Fini avec les IDS. Je ferais la relecture technique plus tard.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 12 jul 2006 à 18:08><br />
<br />
Hum, pourquoi mettre des auteurs ? C'est un wiki après tout ! :)<br />
Je ne suis pas sûr d'être pour le fait d'apparaître en tant qu'auteur (cela me semble aller contre l'esprit du wiki mais ce n'est que mon opinion).<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> Disons que c'est historique, sur léa les articles ont toujours commencer par les noms des auteurs, maintenant si tu ne veux pas que ton nom apparaisse au début de l'article, tu peux le supprimer. Par contre, vu que tu as modifier de manière substantiel l'article original je pense qu'il faut que tu sois dans la liste des auteurs qui détiennent un copyright sur l'article.<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:45 (CEST)<br />
<br />
Tout à fait, Fred. D'ailleurs, j'ai quelque peu modifié mes remerciements. A ce propos, je suppose que c'est inutile de préciser qui remercie qui ? Par exemple :<br />
= Remerciements =<br />
* merlin8282 :<br><br />
/me remercie lui, elle, lui et elle, etc.<br />
* Fleury :<br><br />
idem<br />
<br />
----<br />
<br />
Fleury : je ne connaissais pas ''tct'', je te laisse le soin d'en parler ;-) .</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13050Discussion:Tenir compte de la sécurité au quotidien2006-07-13T12:46:39Z<p>Merlin8282 : </p>
<hr />
<div>[[Utilisateur:Fred (phorum)|Fred (phorum)]]><br />
Les défauts :<br />
Quelques défaut de mise en page subsiste mais c'est anecdotique.<br />
<br />
Par contre, le lien "Sécuriser Apache" arrive un peu comme un cheveu sur la soupe.<br />
<br />
Le script firewall, ne me semble pas à sa place, je m'explique, je voyais cette doc, comme un ensemble de bonnes mesures à prendre etc ... le script, n'a pas sa place dans cet optique, les renvois aux autres doc me parraissent plus adaptés. <br />
<br />
Le paragraphe "Détecter les intrusions" est à compléter / rédiger<br />
<br />
Pour le reste, ça me parait bien. Vu que c'est une fiche cela aurait été bien de mettre une ou deux images, mais bon vu la fiche c'est pas obligatoire.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 16:58> Tu penses à quoi comme image ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> vu la taille de l'article, je pense le renommer en tant qu'article, et les copies d'écran deviennent facultatives<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> J'ai "complété" le ''cheveu sur la soupe'', c'est mieux ainsi ? Je ne vois pas quoi mettre de plus pour ça.<br />
Pour le script iptables, je l'ai mis ici en exemple (ça ne prend pas beaucoup de place, visuellement) histoire que l'on puisse faire un simple copier/coller sans se prendre la tête -- solution rapide, d'urgence, chose qui arrive. Mais c'est vrai qu'on peut le déplacer dans l'article concernant iptables.<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> perso j'y vois pas d'intérêt, mais on peut le laisser<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> Sinon, globalement, que pourrais-je encore changer/améliorer ? Comment pourrais-je organiser un peu mieux tout ça ?<br />
<br />
Ah autre chose encore : pourquoi avoir supprimé le "sommaire" des pages ? (d'ailleur, pourquoi ne pas avoir utilisé le mot magique __NOTOC__ de wikimedia ?) Perso, je trouve plus pratique d'en avoir un, de sommaire : on peut bien le cacher, non ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> le sommaire existe, il n'est juste pas dans le corps de l'article, mais sur le coté gauche<br />
<br />
[[Utilisateur:Fleury|Fleury]] 5 jul 2006 à 18:37><br />
L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques. On y confond allégrement les chevaux de Troie et les vers. Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés. Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité (consultez la base de données du CERT pour plus de détails).<br />
<br />
Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs. J'ai un peu modifié une section mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 6 jul 2006 à 19:28 (CEST)><br />
* L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques.<br><br />
=> Tu peux me tutoyer ;-) . C'est possible que je mélange, je ne suis pas très doué dès qu'on parle d'organisation/structuration.<br />
<br />
* On y confond allégrement les chevaux de Troie et les vers.<br><br />
=> C'est surtout parce-que je n'avais pas vraiment l'intention de développer plus que ça. Et puis, je ne me tiens pas très au courant en ce qui concerne _ce_ genre de risque. Cela dit, tu expliques bien ce dont on parle :-) .<br />
<br />
* Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés.<br><br />
=> C'est que j'ai écrit l'article en n'ayant pas tellement windows à l'esprit. Mais dis ce qui te gène, je suis ouvert.<br />
<br />
* Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité<br><br />
=> Je vous laisse le choix, c'est un boulot communautaire. Après tout je ne suis que celui qui a écrit l'ébauche de l'article.<br />
<br />
* Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs.<br><br />
=> Je n'ai jamais été, je le répète, fort en organisation. Mon but est simplement (comme indiqué sur le forum : ) de centraliser un peu tout ce qu'on doit savoir sur la sécurité quand on a un ordinateur. Evidemment, on ne va pas dire ici tout ce qu'il faut faire pour sécuriser windows, c'est surtout orienté *nix mais comme les infos sont valables pour tous les systèmes...<br />
<br />
* mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br><br />
=> J'en ai déjà fait ! Imagine ce que ça aurait donné sans. Enfin non, ne l'imagine pas O:-) .<br />
<br />
Merci pour ta contribution, je t'ai rajouté dans les remerciements.<br />
<br />
A bon entendeur.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 7 jul 2006 à 10:30><br />
<br />
Salut,<br />
<br />
Ok, pas de problème. Je te propose de faire une relecture attentive de ton article et de te faire des propositions pour l'améliorer. Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-) <br />
<br />
Je pense que ton article est en bonne voie, mais je réitère ma remarque sur le manque de structure. C'est extrêmement important lorsqu'on écrit une documentation que le lecteur soit amené d'un point A à un point B. Si l'auteur de la doc n'a qu'une vague idée de là où il va et de comment il s'y rend cela fera une très mauvaise doc.<br />
<br />
Bon, il faut aussi me comprendre... Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br />
<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 7 jul 2006 à 16:17 (CEST) ><br><br />
Je ne comprends pas trop comment tu veux que la structure soit. Je veux dire, si j'essaye de décrire la structure de mon article en utilisant ton idée d'"ammener l'utilisateur d'un point A à un point B", je dirais que ça m'a l'air tout bon (dans l'ordre que j'ai mis) :<br />
* connaître les menaces (virus, vers & co, injections de code, etc.)<br />
* savoir comment les pirates utilisent ces logiciels<br />
* ensuite ce qu'on doit faire dès le début, à l'installation, pour prévenir les intrusions<br />
* enfin détecter les intrusions et puis nettoyer.<br />
<br />
Honnêtement, je ne vois pas comment faire autrement. Fais une proposition, explique-moi.<br />
<br />
* Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-)<br><br />
Non, ce n'est pas mon cas en effet. Quand je ne suis pas sûr, je me renseigne ou je n'aborde pas le sujet, ou seulement très brièvement.<br />
<br />
* Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br><br />
Je comprends : je suis un défenseur de la langue française et ça me fait parfois sursauter de voir certaines fautes :-D . D'où mes corrections sur les wiki où je passe...<br />
<br />
Pour terminer, n'hésite pas à modifier l'article, il ne m'appartient pas, il est à tout le monde !<br />
<br />
[[Utilisateur:Fleury|Fleury]] 11 jul 2006 à 15:08><br />
<br />
J'ai fait quelques modifications pour essayer d'être plus cohérent et de donner un aperçu plus global du sujet. Il me reste à finir la section sur les IDS/IPS et les honeypots. Une fois que j'aurais fini ça, je passerai à une revue de ce que tu as fait sur les aspects techniques.<br />
<br />
Note: Tu as oublié de parler d'outils comme [http://www.porcupine.org/forensics/tct.html tct] qui me semblent être aussi intéressant que chkrootkit (qui ne fait qu'une partie du travail).<br />
<br />
Fini avec les IDS. Je ferais la relecture technique plus tard.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 12 jul 2006 à 18:08><br />
<br />
Hum, pourquoi mettre des auteurs ? C'est un wiki après tout ! :)<br />
Je ne suis pas sûr d'être pour le fait d'apparaître en tant qu'auteur (cela me semble aller contre l'esprit du wiki mais ce n'est que mon opinion).<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> Disons que c'est historique, sur léa les articles ont toujours commencer par les noms des auteurs, maintenant si tu ne veux pas que ton nom apparaisse au début de l'article, tu peux le supprimer. Par contre, vu que tu as modifier de manière substantiel l'article original je pense qu'il faut que tu sois dans la liste des auteurs qui détiennent un copyright sur l'article.<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:45 (CEST)<br />
<br />
Tout à fait, Fred. D'ailleurs, j'ai quelque peu modifié mes remerciements. A ce propos, je suppose que c'est inutile de préciser qui remercie qui ? Par exemple :<br />
= Remerciements =<br />
* merlin8282 :<br><br />
/me remercie lui, elle, lui et elle, etc.<br />
* Fleury :<br><br />
idem<br />
<br />
Fleury : je ne connaissais pas ''tct'', je te laisse le soin d'en parler ;-) .</div>Merlin8282https://lea-linux.org/docs/index.php?title=Discussion:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13049Discussion:Tenir compte de la sécurité au quotidien2006-07-13T12:45:51Z<p>Merlin8282 : </p>
<hr />
<div>[[Utilisateur:Fred (phorum)|Fred (phorum)]]><br />
Les défauts :<br />
Quelques défaut de mise en page subsiste mais c'est anecdotique.<br />
<br />
Par contre, le lien "Sécuriser Apache" arrive un peu comme un cheveu sur la soupe.<br />
<br />
Le script firewall, ne me semble pas à sa place, je m'explique, je voyais cette doc, comme un ensemble de bonnes mesures à prendre etc ... le script, n'a pas sa place dans cet optique, les renvois aux autres doc me parraissent plus adaptés. <br />
<br />
Le paragraphe "Détecter les intrusions" est à compléter / rédiger<br />
<br />
Pour le reste, ça me parait bien. Vu que c'est une fiche cela aurait été bien de mettre une ou deux images, mais bon vu la fiche c'est pas obligatoire.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 16:58> Tu penses à quoi comme image ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> vu la taille de l'article, je pense le renommer en tant qu'article, et les copies d'écran deviennent facultatives<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> J'ai "complété" le ''cheveu sur la soupe'', c'est mieux ainsi ? Je ne vois pas quoi mettre de plus pour ça.<br />
Pour le script iptables, je l'ai mis ici en exemple (ça ne prend pas beaucoup de place, visuellement) histoire que l'on puisse faire un simple copier/coller sans se prendre la tête -- solution rapide, d'urgence, chose qui arrive. Mais c'est vrai qu'on peut le déplacer dans l'article concernant iptables.<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> perso j'y vois pas d'intérêt, mais on peut le laisser<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 3 jul 2006 à 18:37> Sinon, globalement, que pourrais-je encore changer/améliorer ? Comment pourrais-je organiser un peu mieux tout ça ?<br />
<br />
Ah autre chose encore : pourquoi avoir supprimé le "sommaire" des pages ? (d'ailleur, pourquoi ne pas avoir utilisé le mot magique __NOTOC__ de wikimedia ?) Perso, je trouve plus pratique d'en avoir un, de sommaire : on peut bien le cacher, non ?<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> le sommaire existe, il n'est juste pas dans le corps de l'article, mais sur le coté gauche<br />
<br />
[[Utilisateur:Fleury|Fleury]] 5 jul 2006 à 18:37><br />
L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques. On y confond allégrement les chevaux de Troie et les vers. Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés. Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité (consultez la base de données du CERT pour plus de détails).<br />
<br />
Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs. J'ai un peu modifié une section mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 6 jul 2006 à 19:28 (CEST)><br />
* L'article contient pas mal d'imprécisions et de quelques raccourcis rapides qui semblent montrer que l'auteur mélange un peu tous les risques.<br><br />
=> Tu peux me tutoyer ;-) . C'est possible que je mélange, je ne suis pas très doué dès qu'on parle d'organisation/structuration.<br />
<br />
* On y confond allégrement les chevaux de Troie et les vers.<br><br />
=> C'est surtout parce-que je n'avais pas vraiment l'intention de développer plus que ça. Et puis, je ne me tiens pas très au courant en ce qui concerne _ce_ genre de risque. Cela dit, tu expliques bien ce dont on parle :-) .<br />
<br />
* Il y a plusieurs passages qui tentent de faire une éloge de Linux face à Windows qui tombent complétement à plat et qui devraient être retirés.<br><br />
=> C'est que j'ai écrit l'article en n'ayant pas tellement windows à l'esprit. Mais dis ce qui te gène, je suis ouvert.<br />
<br />
* Le passage sur les utilisateurs recevant des mails contenant des "virus" (chevaux de Troie en réalité) devrait être supprimé car ce genre de malware n'existe quasiment qu'en tant que "proof of concept" et n'ont jamais réelement eut d'impact en réalité<br><br />
=> Je vous laisse le choix, c'est un boulot communautaire. Après tout je ne suis que celui qui a écrit l'ébauche de l'article.<br />
<br />
* Bref, bref, bref, c'est très confus et les idées semblent se mélanger. J'ai du mal à y trouver un discour construit et les buts de l'auteurs.<br><br />
=> Je n'ai jamais été, je le répète, fort en organisation. Mon but est simplement (comme indiqué sur le forum : ) de centraliser un peu tout ce qu'on doit savoir sur la sécurité quand on a un ordinateur. Evidemment, on ne va pas dire ici tout ce qu'il faut faire pour sécuriser windows, c'est surtout orienté *nix mais comme les infos sont valables pour tous les systèmes...<br />
<br />
* mais peut-être que l'auteur devrait essayer de faire un effort sur la rédaction.<br><br />
=> J'en ai déjà fait ! Imagine ce que ça aurait donné sans. Enfin non, ne l'imagine pas O:-) .<br />
<br />
Merci pour ta contribution, je t'ai rajouté dans les remerciements.<br />
<br />
A bon entendeur.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 7 jul 2006 à 10:30><br />
<br />
Salut,<br />
<br />
Ok, pas de problème. Je te propose de faire une relecture attentive de ton article et de te faire des propositions pour l'améliorer. Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-) <br />
<br />
Je pense que ton article est en bonne voie, mais je réitère ma remarque sur le manque de structure. C'est extrêmement important lorsqu'on écrit une documentation que le lecteur soit amené d'un point A à un point B. Si l'auteur de la doc n'a qu'une vague idée de là où il va et de comment il s'y rend cela fera une très mauvaise doc.<br />
<br />
Bon, il faut aussi me comprendre... Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br />
<br />
<br />
[[Utilisateur:Merlin8282|Merlin8282]] 7 jul 2006 à 16:17 (CEST) ><br><br />
Je ne comprends pas trop comment tu veux que la structure soit. Je veux dire, si j'essaye de décrire la structure de mon article en utilisant ton idée d'"ammener l'utilisateur d'un point A à un point B", je dirais que ça m'a l'air tout bon (dans l'ordre que j'ai mis) :<br />
* connaître les menaces (virus, vers & co, injections de code, etc.)<br />
* savoir comment les pirates utilisent ces logiciels<br />
* ensuite ce qu'on doit faire dès le début, à l'installation, pour prévenir les intrusions<br />
* enfin détecter les intrusions et puis nettoyer.<br />
<br />
Honnêtement, je ne vois pas comment faire autrement. Fais une proposition, explique-moi.<br />
<br />
* Le sujet couvert est sensible et j'ai rencontré beaucoup de gens qui parlaient de choses qu'ils ne connaissaient que de loin avec beaucoup d'arrogance. Visiblement cela n'est pas ton cas. ;-)<br><br />
Non, ce n'est pas mon cas en effet. Quand je ne suis pas sûr, je me renseigne ou je n'aborde pas le sujet, ou seulement très brièvement.<br />
<br />
* Je fais de la sécurité quasiment tous les jours alors quand je vois écrire des choses fausses ou qui pourraient induire en erreur je bondis au plafond. ;-)<br><br />
Je comprends : je suis un défenseur de la langue française et ça me fait parfois sursauter de voir certaines fautes :-D . D'où mes corrections sur les wiki où je passe...<br />
<br />
Pour terminer, n'hésite pas à modifier l'article, il ne m'appartient pas, il est à tout le monde !<br />
<br />
[[Utilisateur:Fleury|Fleury]] 11 jul 2006 à 15:08><br />
<br />
J'ai fait quelques modifications pour essayer d'être plus cohérent et de donner un aperçu plus global du sujet. Il me reste à finir la section sur les IDS/IPS et les honeypots. Une fois que j'aurais fini ça, je passerai à une revue de ce que tu as fait sur les aspects techniques.<br />
<br />
Note: Tu as oublié de parler d'outils comme [http://www.porcupine.org/forensics/tct.html tct] qui me semblent être aussi intéressant que chkrootkit (qui ne fait qu'une partie du travail).<br />
<br />
Fini avec les IDS. Je ferais la relecture technique plus tard.<br />
<br />
[[Utilisateur:Fleury|Fleury]] 12 jul 2006 à 18:08><br />
<br />
Hum, pourquoi mettre des auteurs ? C'est un wiki après tout ! :)<br />
Je ne suis pas sûr d'être pour le fait d'apparaître en tant qu'auteur (cela me semble aller contre l'esprit du wiki mais ce n'est que mon opinion).<br />
<br />
[[Utilisateur:Fred (phorum)|Fred (phorum)]]> Disons que c'est historique, sur léa les articles ont toujours commencer par les noms des auteurs, maintenant si tu ne veux pas que ton nom apparaisse au début de l'article, tu peux le supprimer. Par contre, vu que tu as modifier de manière substantiel l'article original je pense qu'il faut que tu sois dans la liste des auteurs qui détiennent un copyright sur l'article.<br />
<br />
--[[Utilisateur:Merlin8282|Merlin8282]] 13 jul 2006 à 14:45 (CEST)<br />
Tout à fait, Fred. D'ailleurs, j'ai quelque peu modifié mes remerciements. A ce propos, je suppose que c'est inutile de préciser qui remercie qui ? Par exemple<br />
= Remerciements =<br />
* merlin8282 :<br><br />
/me remercie lui, elle, lui et elle, etc.<br />
* Fleury :<br><br />
idem<br />
<br />
Fleury : je ne connaissais pas ''tct'', je te laisse le soin d'en parler ;-) .</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13048Tenir compte de la sécurité au quotidien2006-07-13T12:39:24Z<p>Merlin8282 : /* Remerciements */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint.<br />
<br />
Cette fiche est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur, connecté à un réseau ou non, ainsi que pour se parer contre la plupart des attaques et enfin pour savoir comment nettoyer l'ordinateur après une attaque que l'on vient de subir.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
== Avant tout, connaître son système ==<br />
D'abord et avant tout il faut être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux connaître et comprendre ce que nous faisons et d'autre part de mieux réagir en cas d'attaque. Donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]).Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les démons et comment ils fonctionnent]]. Voyez comment fonctionne un réseau, ce que sont les ports réseau, les permissions des fichiers, ce que sont les failles de sécurité des logiciels, etc.<br />
<br />
== Connaître les risques ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (mur de feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseaux un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): -F -O -sV<br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter les informations utiles qui transitent par la carte réseau de la machine piratée. Ainsi, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines, de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Il faut savoir qu'en informatique il existe des logiciels malveillants ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des virus, des vers, des chevaux de Troie ou encore des rootkits. Mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix. Cependant il faut être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des malwares, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes.<br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, pour collecter les mots de passe vers d'autres systèmes, etc). Ils peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement [http://www.chkrootkit.org/ chkrootkit], qui vérifie la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe et bien qu'elle soit inclassable du point de vue technique c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est un ''insider'' (quelqu'un de l'intérieur), il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. C'est une méthode consistant à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres sont par exemple appelés par l'attaquant, se faisant alors passer pour le service technique de l'entreprise, qui prétend avoir besoin du mot de passe de l'utilisateur pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille pour obtenir plus de permissions par un intrus n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour avoir contribué grandement à l'article (''sécurité réseau'' et ''sécurité logicielle'', ainsi qu'une certaine restructuration de l'article)<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13047Tenir compte de la sécurité au quotidien2006-07-13T12:35:54Z<p>Merlin8282 : /* ps */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint.<br />
<br />
Cette fiche est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur, connecté à un réseau ou non, ainsi que pour se parer contre la plupart des attaques et enfin pour savoir comment nettoyer l'ordinateur après une attaque que l'on vient de subir.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
== Avant tout, connaître son système ==<br />
D'abord et avant tout il faut être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux connaître et comprendre ce que nous faisons et d'autre part de mieux réagir en cas d'attaque. Donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]).Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les démons et comment ils fonctionnent]]. Voyez comment fonctionne un réseau, ce que sont les ports réseau, les permissions des fichiers, ce que sont les failles de sécurité des logiciels, etc.<br />
<br />
== Connaître les risques ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (mur de feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseaux un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): -F -O -sV<br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter les informations utiles qui transitent par la carte réseau de la machine piratée. Ainsi, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines, de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Il faut savoir qu'en informatique il existe des logiciels malveillants ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des virus, des vers, des chevaux de Troie ou encore des rootkits. Mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix. Cependant il faut être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des malwares, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes.<br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, pour collecter les mots de passe vers d'autres systèmes, etc). Ils peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement [http://www.chkrootkit.org/ chkrootkit], qui vérifie la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe et bien qu'elle soit inclassable du point de vue technique c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est un ''insider'' (quelqu'un de l'intérieur), il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. C'est une méthode consistant à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres sont par exemple appelés par l'attaquant, se faisant alors passer pour le service technique de l'entreprise, qui prétend avoir besoin du mot de passe de l'utilisateur pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille pour obtenir plus de permissions par un intrus n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "inoffensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour sa contribution en rapport avec les virus, vers, chevaux de Troie, etc.<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13046Tenir compte de la sécurité au quotidien2006-07-13T12:35:19Z<p>Merlin8282 : /* Détecter les intrusions, connaître les outils */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint.<br />
<br />
Cette fiche est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur, connecté à un réseau ou non, ainsi que pour se parer contre la plupart des attaques et enfin pour savoir comment nettoyer l'ordinateur après une attaque que l'on vient de subir.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
== Avant tout, connaître son système ==<br />
D'abord et avant tout il faut être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux connaître et comprendre ce que nous faisons et d'autre part de mieux réagir en cas d'attaque. Donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]).Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les démons et comment ils fonctionnent]]. Voyez comment fonctionne un réseau, ce que sont les ports réseau, les permissions des fichiers, ce que sont les failles de sécurité des logiciels, etc.<br />
<br />
== Connaître les risques ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (mur de feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseaux un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): -F -O -sV<br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter les informations utiles qui transitent par la carte réseau de la machine piratée. Ainsi, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines, de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Il faut savoir qu'en informatique il existe des logiciels malveillants ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des virus, des vers, des chevaux de Troie ou encore des rootkits. Mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix. Cependant il faut être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des malwares, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes.<br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, pour collecter les mots de passe vers d'autres systèmes, etc). Ils peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement [http://www.chkrootkit.org/ chkrootkit], qui vérifie la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe et bien qu'elle soit inclassable du point de vue technique c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est un ''insider'' (quelqu'un de l'intérieur), il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. C'est une méthode consistant à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres sont par exemple appelés par l'attaquant, se faisant alors passer pour le service technique de l'entreprise, qui prétend avoir besoin du mot de passe de l'utilisateur pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille pour obtenir plus de permissions par un intrus n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "innofensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour sa contribution en rapport avec les virus, vers, chevaux de Troie, etc.<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13045Tenir compte de la sécurité au quotidien2006-07-13T12:35:10Z<p>Merlin8282 : /* Détecter les intrusions, connaître les outils */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint.<br />
<br />
Cette fiche est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur, connecté à un réseau ou non, ainsi que pour se parer contre la plupart des attaques et enfin pour savoir comment nettoyer l'ordinateur après une attaque que l'on vient de subir.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
== Avant tout, connaître son système ==<br />
D'abord et avant tout il faut être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux connaître et comprendre ce que nous faisons et d'autre part de mieux réagir en cas d'attaque. Donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]).Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les démons et comment ils fonctionnent]]. Voyez comment fonctionne un réseau, ce que sont les ports réseau, les permissions des fichiers, ce que sont les failles de sécurité des logiciels, etc.<br />
<br />
== Connaître les risques ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (mur de feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseaux un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): -F -O -sV<br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter les informations utiles qui transitent par la carte réseau de la machine piratée. Ainsi, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines, de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Il faut savoir qu'en informatique il existe des logiciels malveillants ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des virus, des vers, des chevaux de Troie ou encore des rootkits. Mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix. Cependant il faut être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des malwares, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes.<br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, pour collecter les mots de passe vers d'autres systèmes, etc). Ils peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement [http://www.chkrootkit.org/ chkrootkit], qui vérifie la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe et bien qu'elle soit inclassable du point de vue technique c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est un ''insider'' (quelqu'un de l'intérieur), il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. C'est une méthode consistant à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres sont par exemple appelés par l'attaquant, se faisant alors passer pour le service technique de l'entreprise, qui prétend avoir besoin du mot de passe de l'utilisateur pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille pour obtenir plus de permissions par un intrus n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "innofensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
=== Les systèmes de détection d'intrusion ===<br />
(Voir ci-dessus)<br />
<br />
On peut citer par exemple [[Reseau-secu-SNORT|snort]] et ''tiger'' mais il en existe d'autres.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour sa contribution en rapport avec les virus, vers, chevaux de Troie, etc.<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13044Tenir compte de la sécurité au quotidien2006-07-13T12:33:09Z<p>Merlin8282 : /* Ingénierie sociale */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint.<br />
<br />
Cette fiche est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur, connecté à un réseau ou non, ainsi que pour se parer contre la plupart des attaques et enfin pour savoir comment nettoyer l'ordinateur après une attaque que l'on vient de subir.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
== Avant tout, connaître son système ==<br />
D'abord et avant tout il faut être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux connaître et comprendre ce que nous faisons et d'autre part de mieux réagir en cas d'attaque. Donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]).Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les démons et comment ils fonctionnent]]. Voyez comment fonctionne un réseau, ce que sont les ports réseau, les permissions des fichiers, ce que sont les failles de sécurité des logiciels, etc.<br />
<br />
== Connaître les risques ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (mur de feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseaux un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): -F -O -sV<br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter les informations utiles qui transitent par la carte réseau de la machine piratée. Ainsi, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines, de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Il faut savoir qu'en informatique il existe des logiciels malveillants ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des virus, des vers, des chevaux de Troie ou encore des rootkits. Mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix. Cependant il faut être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des malwares, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes.<br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, pour collecter les mots de passe vers d'autres systèmes, etc). Ils peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement [http://www.chkrootkit.org/ chkrootkit], qui vérifie la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe et bien qu'elle soit inclassable du point de vue technique c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est un ''insider'' (quelqu'un de l'intérieur), il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ingénierie_sociale ingénierie sociale]. C'est une méthode consistant à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres sont par exemple appelés par l'attaquant, se faisant alors passer pour le service technique de l'entreprise, qui prétend avoir besoin du mot de passe de l'utilisateur pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomb et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permis de réaliser des miracles (du mauvais côté de la loi, hélas).<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille pour obtenir plus de permissions par un intrus n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "innofensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
=== Les systèmes de détection d'intrusion ===<br />
Un [http://fr.wikipedia.org/wiki/Système_de_détection_d'intrusion IDS (''Intrusion Detection System'')] est un logiciel qui a pour but de détecter toute intrusion dans le système. On peut citer par exemple [[Reseau-secu-SNORT|snort]] et tiger mais il en existe d'autres.<br />
Un tel logiciel fait des vérifications sur le système (logs, réseau, etc.) et reporte toute anomalie, tout ce qui est suspect.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour sa contribution en rapport avec les virus, vers, chevaux de Troie, etc.<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13043Tenir compte de la sécurité au quotidien2006-07-13T12:30:04Z<p>Merlin8282 : /* La sécurité logicielle */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint.<br />
<br />
Cette fiche est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur, connecté à un réseau ou non, ainsi que pour se parer contre la plupart des attaques et enfin pour savoir comment nettoyer l'ordinateur après une attaque que l'on vient de subir.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
== Avant tout, connaître son système ==<br />
D'abord et avant tout il faut être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux connaître et comprendre ce que nous faisons et d'autre part de mieux réagir en cas d'attaque. Donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]).Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les démons et comment ils fonctionnent]]. Voyez comment fonctionne un réseau, ce que sont les ports réseau, les permissions des fichiers, ce que sont les failles de sécurité des logiciels, etc.<br />
<br />
== Connaître les risques ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (mur de feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseaux un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): -F -O -sV<br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter les informations utiles qui transitent par la carte réseau de la machine piratée. Ainsi, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines, de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Il faut savoir qu'en informatique il existe des logiciels malveillants ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des virus, des vers, des chevaux de Troie ou encore des rootkits. Mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Linux, et par conséquent Unix. Cependant il faut être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des malwares, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes.<br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, pour collecter les mots de passe vers d'autres systèmes, etc). Ils peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkit permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement [http://www.chkrootkit.org/ chkrootkit], qui vérifie la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit ''erkms'' avant de continuer à se propager. Ce malware combinait à la fois un ver et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe, bien qu'elle soit inclassable du point de vue technique c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est un ''insider'' (quelqu'un de l'intérieur), il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ing%C3%A9nierie_sociale ingénierie sociale]. C'est une méthode consistant à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres sont par exemple appelés par l'attaquant, se faisant alors passer pour le service technique de l'entreprise, qui prétend avoir besoin du mot de passe de l'utilisateur pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomd et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permi de réaliser des miracles (du mauvais coté de la loi, hélas).<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille pour obtenir plus de permissions par un intrus n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "innofensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
=== Les systèmes de détection d'intrusion ===<br />
Un [http://fr.wikipedia.org/wiki/Système_de_détection_d'intrusion IDS (''Intrusion Detection System'')] est un logiciel qui a pour but de détecter toute intrusion dans le système. On peut citer par exemple [[Reseau-secu-SNORT|snort]] et tiger mais il en existe d'autres.<br />
Un tel logiciel fait des vérifications sur le système (logs, réseau, etc.) et reporte toute anomalie, tout ce qui est suspect.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour sa contribution en rapport avec les virus, vers, chevaux de Troie, etc.<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282https://lea-linux.org/docs/index.php?title=Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien&diff=13042Tenir compte de la sécurité au quotidien2006-07-13T12:21:02Z<p>Merlin8282 : /* La sécurité réseau */</p>
<hr />
<div>[[Category:Fiche sécurité]]<br />
<div class="leapar">Par [[Utilisateur:Merlin8282|merlin8282]] et [[Utilisateur:Fleury|Fleury]].</div><br />
== Introduction ==<br />
Un ordinateur n'est jamais en sécurité, quand bien même on croit qu'il l'est. Un dicton informatique dit d'ailleurs que l'ordinateur le plus sûr est celui qui est éteint.<br />
<br />
Cette fiche est là pour vous faire découvrir les différents risques que l'on court en ayant un ordinateur, connecté à un réseau ou non, ainsi que pour se parer contre la plupart des attaques et enfin pour savoir comment nettoyer l'ordinateur après une attaque que l'on vient de subir.<br />
<br />
Pour tout le document (et de manière générale), il est évidemment conseillé de lire les pages de manuel des commandes avant de poser des questions.<br />
Lisez aussi les articles connexes en cliquant sur les hyperliens dans le texte car dans ce document je ne m'étale justement pas sur les sujets pour lesquels il existe déjà un article.<br />
<br />
== Avant tout, connaître son système ==<br />
D'abord et avant tout il faut être à l'aise avec les concepts essentiels de [http://fr.wikipedia.org/wiki/Linux Linux]. Cela permettra d'une part de mieux connaître et comprendre ce que nous faisons et d'autre part de mieux réagir en cas d'attaque. Donc, documentez vous sur ce système et son langage de commande ([[Admin-admin_env-shell|shell]]).Lisez aussi la documentation expliquant ce que sont [[Admin-admin_boot-daemons|les démons et comment ils fonctionnent]]. Voyez comment fonctionne un réseau, ce que sont les ports réseau, les permissions des fichiers, ce que sont les failles de sécurité des logiciels, etc.<br />
<br />
== Connaître les risques ==<br />
La sécurité informatique est un domaine que l'on pourrait séparer en trois parties. La première s'occupe de la sécurité des données, c'est la cryptologie, la plus connue et la plus théorique des trois. La seconde s'occupe de la sécurité des protocoles, elle comprend notamment la sécurité réseau. Enfin, la dernière et la moins connue des trois est la sécurité logicielle, elle s'occupe notamment des failles du genre débordement de tampon (buffer-overflow) et autres (format string, integer overflow, etc). <br />
<br />
Dans ce petit survol des risques potentiels en matière de sécurité informatique nous aborderons la sécurité réseau et la sécurité logicielle. La cryptologie ne sera pas abordée car c'est une science très complexe et de toute façon inaccessible au simple utilisateur. Pour finir nous aborderons l'ingénierie sociale qui reste inclassable mais qui est un risque non négligeable.<br />
<br />
=== La sécurité réseau ===<br />
Le but de la sécurité réseau est de connaître les forces et les faiblesses des protocoles. Du point de vue de l'attaquant, on se posera des questions comme: ''Comment abuser un firewall ? Comment tirer un maximum d'informations d'un serveur ? Comment aveugler un système de détection d'intrusion ?'' Du point de vue du défenseur, les questions qui se posent sont surtout comment détecter les comportements réseaux anormaux et empêcher (ou au moins réagir face à) une attaque.<br />
<br />
Un certain nombre de mots clefs sont associés à la sécurité réseau. Ainsi on parle de firewalls, d'IDS, d'IPS, de scanneurs réseaux, de sniffeurs et autres. Nous allons ici définir quelques-uns de ces mots.<br />
<br />
==== Firewalls ====<br />
Pour le définir de manière concise, un firewall (mur de feu) est un filtre réseau qui va pouvoir stopper certains paquets réseau. Suivant le type de trafic qu'ils analysent et à quel niveau ils se placent sur la couche OSI on va parler de plusieurs types de firewalls:<br />
<br />
* '''Stateless firewall''': Ce firewall est le plus basique, il ne fait que regarder les paquets réseaux un par un et les accepte ou les rejette uniquement sur la base de son fichier de configuration.<br />
<br />
* '''Stateful firewall''': Aussi appelé ''connection tracking firewall'', ce firewall permet de tirer parti d'une connaissance du protocole (TCP par exemple). Il garde en mémoire les connections qui sont en cours et l'état dans lequel elles sont (en cours d'établissement, établie, en train d'être achevées, etc). L'avantage de ce firewall est qu'il permet une configuration plus fine avec moins de lignes mais son inconvénient est qu'il utilise un peu de mémoire pour chaque connexion et qu'il est susceptible de se faire saturer (Déni de service).<br />
<br />
* '''Firewall applicatif''': Il en existe plusieurs sortes : les proxy, les filtres de contenu (clamav), etc. sont tous des firewalls applicatifs. Contrairement aux firewalls précédents qui résident habituellement dans le noyau, les firewalls applicatifs sont habituellement basés dans l'espace utilisateur. Ces firewalls servent le plus souvent de relais avec éventuellement un contrôle sur le contenu de ce qui transite (quoique le plus souvent les proxy web ne contrôlent pas le contenu des requêtes même s'ils le pourraient).<br />
<br />
Sous Linux, le firewall par défaut est [http://www.netfilter.org/ Netfilter], il possède la capacité de faire du Stateless et du Stateful pour divers protocoles. Les firewalls applicatifs existent aussi mais ne sont pas gérés par Netfilter. Nous verrons plus loin comment piloter Netfilter à l'aide de iptables.<br />
<br />
==== Scanneur réseau ====<br />
Un scanneur réseau est simplement un petit logiciel qui tente d'explorer un réseau ou une machine de façon distante (c'est à dire via le réseau). Pour cette exploration le scanneur va tenter de se connecter à une ou plusieurs machines de façon directe ou indirecte. Il faut bien comprendre que le but premier du scanneur de réseau est de collecter de l'information (présence/abscence de services) sur un réseau ou une machine et uniquement cela. L'usage d'un scanneur est par conséquent légal (sauf si vous avez signé une charte qui dit le contraire) mais collecter beaucoup d'informations sur un réseau peut vous rendre suspect aux yeux de ceux qui le gèrent.<br />
<br />
Le plus connu des scanneur est sans conteste [http://www.insecure.org/nmap/ nmap]. Il possède un grand nombre d'options et permet d'extraire beaucoup d'informations sur votre environnement réseau. Pour peu que vous soyez root sur la machine que vous utilisez, vous pouvez tenter le jeu d'options suivant (regardez le manuel pour savoir ce qu'elles font): -F -O -sV<br />
<br />
<code>nmap</code> est bien sûr un scanneur réseau ''basique'', il en existe des bien plus avancés qui utilisent nmap comme brique de base mais qui scannent non plus les services réseau mais les vulnérabilités. On peut ainsi citer [http://www.nessus.org/ nessus] qui permet de tester son réseau contre un grand nombre d'attaques.<br />
<br />
Lorsqu'un pirate veut s'en prendre à vous, la première chose qu'il fera sera de vous scanner et extraire un maximum d'informations sur votre réseau. Mieux vaut savoir quelles informations vous laissez filtrer à l'extérieur pour connaître vos faiblesses.<br />
<br />
==== Sniffeurs ====<br />
Un sniffeur est un petit logiciel qui va se mettre à l'écoute de tous les paquets réseau qui passent à la portée de votre ordinateur. Habituellement votre machine ne va considérer que les paquets qui vous sont addressés mais l'on peut pervertir l'usage habituel et faire en sorte que votre machine vous permette d'accéder aussi aux paquets qui ne vous sont pas adressés. On appelle cela le mode ''promiscuous'' pour les cartes ethernet et le mode ''monitor'' pour les cartes wifi.<br />
<br />
Les sniffeurs sont largement utilisés à la fois par les pirates et par les ingénieurs systèmes. Les pirates les utilisent essentiellement pour récupérer des informations sur un réseau ou même plus. En effet, lorsqu'ils ont compromis une machine de votre réseau, il peuvent laisser tourner de façon cachée un de ces sniffeurs qui va collecter les informations utiles qui transitent par la carte réseau de la machine piratée. Ainsi, tous les mots de passe en clair peuvent être récupérés à moindre frais. D'un autre coté, les administrateurs réseaux ont aussi un grand usage des sniffeurs, ils servent le plus souvent de débogueur réseau mais aussi d'espion pour essayer d'identifier des comportements sur le réseau qui ne seraient pas normal ou qui laisseraient supposer à une attaque (voir les IDS plus loin).<br />
<br />
Il existe un très grand nombre de sniffeurs réseau, les deux plus connus sont sans doute [http://www.wireshark.org wireshark] (ex-[http://www.ethereal.com/ ethereal]) et [http://www.tcpdump.org tcpdump]. D'autres sont plus spécialisés comme par exemple [http://lcamtuf.coredump.cx/p0f.shtml p0f] (sniffeur passif de détection d'OS), [http://www.monkey.org/~dugsong/dsniff/ dsniff] (sniffeur de mots de passe) ou encore [http://www.kismetwireless.net/ kismet] (sniffeur wifi).<br />
<br />
==== IDS, IPS et honeypots ====<br />
Pour finir ce petit tour de la sécurité réseau nous allons faire un tour du coté des armes auxquelles vous avez accès pour vous défendre. <br />
<br />
Pour faire court, les IDS (Intrusion Detection Systems) sont des sondes qui espionnent votre réseau et enregistrent les phénomènes bizarres ou qui pourraient ressembler à des attaques potentielles. Le rôle d'un IDS n'est pas de prévenir des attaques mais vraiment de jouer un rôle similaire à celui de la boîte noire d'un avion après une catastrophe afin de savoir ce qui s'est passé et éventuellement collecter des preuves contre les attaquants.<br />
<br />
Il y a trois types d'IDS :<br />
* les '''IDS réseaux''' du genre [http://www.snort.org snort] qui s'assurent de l'intégrité d'un réseau par une analyse du trafic qu'il y a dessus,<br />
* les '''IDS systèmes''' du genre [http://sourceforge.net/projects/tripwire/ tripwire] qui s'assurent de l'intégrité d'un système en stockant un [http://fr.wikipedia.org/wiki/Cyclic_redundancy_check CRC] des principaux fichiers de configuration et des binaires pour s'assurer qu'ils n'ont pas été corrompu,<br />
* les '''IDS hybrides''' qui tentent de rassembler les deux précédents, du genre [http://www.prelude-ids.org/ prelude-IDS].<br />
<br />
Les IPS (Intrusion Prevention Systems) sont à peine différents des IDS puisqu'en cas de détection d'une attaque probable, alors que l'IDS se contente d'enregistrer les logs, l'IPS tente de contrer l'attaque en réagissant. <br />
<br />
Enfin, les [http://fr.wikipedia.org/wiki/Honeypot honeypots] (pots de miel) sont des simulations de machines faibles. La constatation est simple, les pirates s'attaquent logiquement toujours au point le plus faible de votre réseau. Avoir des points faibles factices et bardés d'alarmes discrètes vous permet non seulement de détourner momentanément les pirates des vraies machines, de les freiner mais aussi de détecter plus facilement les intrus qui se laissent prendre au piège.<br />
<br />
Voila, nous avons fait un (très) rapide tour des mots clefs importants en matière de sécurité réseau. Nous allons à présent quitter le réseau et nous intéresser de plus près à ce qui se passe sur vos serveurs et vos machines.<br />
<br />
=== La sécurité logicielle ===<br />
Lorsque les pirates n'en ont pas après ce qui circule sur votre réseau, c'est qu'ils tentent de pénétrer l'une (ou plusieurs) machine(s) et c'est là que commence la sécurité logicielle...<br />
<br />
Il faut savoir qu'en informatique il existe des logiciels malveillants ([http://fr.wikipedia.org/wiki/Logiciel_malveillant malware] en anglais). Ces logiciels peuvent être des virus, des vers, des chevaux de Troie ou encore des rootkits. Mais ils ont tous en commun d'exploiter des failles classiques ou de rendre les systèmes sur lesquels ils résident plus faibles face à des attaquants extérieurs.<br />
<br />
==== Virii et Vers ====<br />
Un virus est un petit programme qui a la particularité de se reproduire et de se propager d'un système à l'autre suivant certains vecteurs. Cela peut être les mails ou même l'utilisateur lui-même qui va copier le logiciel sur d'autres systèmes. Les vers sont une sorte particulière de virus qui se propagent uniquement via le réseau Internet (l'un des plus célèbre fut Blaster en 2003 qui visait essentiellement des systèmes Microsoft Windows). Certains virus fonctionnent et infectent les systèmes linux, mais leur nombre est plus réduit que ceux qui attaquent les systèmes Windows. Grâce à la rareté de ces virus et à la réactivité de la communauté libre face aux nouvelles failles découvertes, ce genre de malware ne se propage que très difficilement sur les systèmes Unix. Cependant il faut être vigilant et appliquer régulièrement les correctifs de sécurité de votre système pour ne pas s'exposer à des malwares, qui pourraient alors s'infiltrer facilement via les failles que vous auriez laissé béantes.<br />
<br />
==== Chevaux de Troie ====<br />
Les chevaux de Troie sont des logiciels qui tentent d'abuser l'utilisateur en se faisant passer pour autre chose que ce qu'ils sont réellement (un jeu, un petit utilitaire, ou encore une commande classique comme <code>ssh</code>, pour collecter les mots de passe vers d'autres systèmes, etc). Ils peuvent être aussi un vecteur de propagation pour les virus comme le célèbre ver "I love you" qui se propageait par mail ou aussi être contenu dans un virus qui va l'installer sur le système qu'il a infecté avant de tenter de se propager vers d'autres systèmes.<br />
<br />
==== Rootkits ====<br />
Enfin, les [http://fr.wikipedia.org/wiki/Rootkit rootkits] sont des logiciels qui facilitent l'accès réseau discret des pirates sur le système. Leur nom vient du fait qu'ils permettent aux pirates d'accéder au système infecté avec des droits équivalents (ou même supérieurs) au root. À l'origine ces rootkits étaient un ensemble de chevaux de Troie mimant les commandes classiques du système (<code>ps</code>, <br />
<code>login</code>, <code>ls</code>, etc). De nos jours, les rootkits sont quasi-essentiellement des kernel-rootkits, c'est à dire qu'ils se branchent directement sur le noyau pour modifier les informations que pourraient lire les utilisateurs du système. Ce dernier type de rootkits permet aux pirates une réelle invisibilité du point de vue des autres utilisateurs (y compris du root). Vous l'aurez compris, ces rootkits sont très difficiles à repérer avec des moyens standards et compromettent très profondément votre système. C'est pour cela qu'il n'est jamais mauvais d'installer et de lancer régulièrement [http://www.chkrootkit.org/ chkrootkit], qui vérifie la présence de rootkits.<br />
<br />
==== Attention aux mélanges !!! ====<br />
Évidemment, tout ces malwares peuvent se combiner entre eux pour former des combinaisons souvent difficiles à contrer. On peut citer l'exemple du vers 1i0n ([http://www.cert.org/incident_notes/IN-2001-03.html|rapport CERT], Mars 2001) qui ciblait essentiellement des failles sur les systèmes Unix faisant tourner un serveur BIND et qui installait le rootkit erkms avant de continuer à se propager. Ce malware combinait à la fois un vers et un rootkit lui-même composé d'un certain nombre de chevaux de Troie.<br />
<br />
=== Ingénierie sociale ===<br />
Une dernière technique de piratage existe, bien qu'elle soit inclassable du point de vue technique c'est probablement la plus efficace. <br />
<br />
Souvent, si le pirate est un ''insider'' (quelqu'un de l'intérieur), il aura simplement recours à de l'[http://fr.wikipedia.org/wiki/Ing%C3%A9nierie_sociale ingénierie sociale]. C'est une méthode consistant à profiter de la crédulité des gens qui souvent écrivent leurs mots de passe sur un bout de papier et le laissent à proximité de l'ordinateur. D'autres sont par exemple appelés par l'attaquant, se faisant alors passer pour le service technique de l'entreprise, qui prétend avoir besoin du mot de passe de l'utilisateur pour faire des tests.<br />
<br />
Cela peut paraître trivial mais c'est la technique qui donne le plus de résultats avec le moins d'investissement en temps et en connaissance. [http://fr.wikipedia.org/wiki/Kevin_Mitnick Kevin Mitnick], un des rois du piratage était passé maître dans ce type d'attaques. Il avait un applomd et un génie de l'improvisation allié avec des connaissances techniques hors du commun qui lui ont permi de réaliser des miracles (du mauvais coté de la loi, hélas).<br />
<br />
== Protéger son ordinateur ==<br />
=== Sécuriser son boot ===<br />
Si l'accès physique à la machine est une faille, il faut configurer son bios. Celui-ci ne doit autoriser que le boot sur disque dur, et doit être protégé par mot de passe.<br />
[http://fr.wikipedia.org/wiki/GRand_Unified_Bootloader Grub] permettant d'éditer manuellement le boot (périphérique de démarrage, noyau, options pour l'init...), il est nécessaire de le protéger par mot de passe afin qu'on ne puisse pas modifier les configurations prédéfinies.<br />
En fait il est même parfois conseillé de supprimer tout périphérique susceptible d'être source d'insécurité à ce niveau, comme le lecteur de disquettes par exemple. Cela dit, si c'est une station de bureau il vaut mieux garder ce dont on a besoin, cela va sans dire. C'est à vous d'en juger.<br />
<br />
De toute manière, un système n'est jamais sûr puisque pour l'exemple présent, il est possible de supprimer le mot de passe du [http://fr.wikipedia.org/wiki/Basic_Input_Output_System BIOS] en réinitialisant celui-ci. Ainsi pour quelqu'un ayant un accès physique à la machine il est facile d'ouvrir le boîtier et de retirer quelques secondes la batterie alimentant le BIOS. La parade consisterait à verrouiller l'accès à l'intérieur de la machine (cadenas).<br />
<br />
Pire encore : le BIOS étant de nos jour stocké dans une mémoire accessible en écriture -- généralement de la mémoire flash. Sur les carte-mères plus anciennes le BIOS est stocké dans une ROM. -- ce qui permet potentiellement à quelqu'un de le flasher (le mettre à jour) pour le remplacer par une version vérolée.<br />
<br />
Avant de continuer sur le BIOS, voyons un peu comment celui-ci fonctionne et pourquoi il existe :<br />
<br />
Immédiatement à la mise sous tension, le BIOS déroule la procédure de POST (''Power-On Self Test'' ou ''vérification de mise sous tension''). Durant cette phase, le BIOS effectue divers contrôles : [http://fr.wikipedia.org/wiki/Processeur CPU], [http://fr.wikipedia.org/wiki/Somme_de_contrôle autovérification par chiffre de contrôle], contrôle des paramètres BIOS enregistrés (mémoire de "setup"), initialisation de divers composants (horloge, [http://fr.wikipedia.org/wiki/Accès_direct_mémoire DMA], etc), vérification de la mémoire, des périphériques (claviers, lecteur(s) de disquette, disque(s) dur(s), etc.).<br />
<br />
En cas d'erreur, le BIOS tente de continuer ou, en cas d'erreur grave il arrête le système et affiche, si possible, un message d'erreur. Autrement il fait une série de beep pour aider au diagnostic de la panne. Il envoie également un code sur le port série, code qui peut être récupéré par divers moyens.<br />
<br />
Immédiatement après le POST, le BIOS va charger le premier secteur du disque amorçable. Ce secteur contient un petit programme de chargement (boot loader) du chargeur du (des) système(s) d'exploitation (grub, lilo ou, pour Windows, NTLDR). Le POST se termine en transférant l'exécution au boot loader. <br />
<br />
C'est en fait, à l'origine, la fonctionnalité principale (c'est elle qui a donné son nom au BIOS) du BIOS : fournir une couche logicielle d'abstaction (permettant d'ignorer lors de la programmation les aspects purement matériels) pour les périphériques les plus courants : clavier, écran, lecteur de disquettes, disques durs, souris, etc.<br />
On accède à ces fonctions par l'envoi d'interruptions logicielles ou, plus rarement, par accès direct à la mémoire BIOS.<br />
<br />
Fort heureusement, linux étant un bon système d'exploitation il n'utilise pas le BIOS, qui sert comme on l'a vu de couche d'abstraction entre le logiciel et le matériel. Le risque d'attaque via le BIOS est donc considéré comme nul. Cependant, il reste techniquement possible -- mais les pirates n'y auraient aucun intérêt -- de flasher le BIOS de telle sorte qu'il ne puisse plus booter l'ordinateur, bloqué dans une boucle infinie.<br />
<br />
=== Partitionnement conséquent ===<br />
À l'installation du système, il faut bien réfléchir au partitionnement des disques. Les données statiques (binaires, fichiers de configuration, etc.) seront sur une partition montée en lecture seule pour éviter toute modification :<br />
* /bin<br />
* /boot<br />
* /lib<br />
* /sbin<br />
* /usr<br />
Eventuellement d'autres dossiers, selon la distribution.<br />
<br />
Lorsque l'accès physique à la machine est une faille potentielle de sécurité, il n'est pas une mauvaise idée que de créer une partition dédiée à /etc , qui serait formatée en un système de fichiers chiffré (voir [http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ Encrypted root filesystem howto]). Dans ce cas-là, même si on démarre l'ordinateur avec un LiveCD il devient impossible à moins d'avoir les identifiants idoïnes d'accéder aux données de la partition.<br />
<br />
=== N'installer que le strict nécessaire ===<br />
Chaque bout de code est potentiellement une faille. C'est pour cela que moins il y a de logiciels installés, plus le risque d'avoir une faille est réduit. Un exemple courant pour faire comprendre le principe est que sur un serveur il n'est généralement nul besoin de serveur X. Un autre exemple, dans un environnement unix il n'est nul besoin de serveur Samba.<br />
Une fois le ménage fait dans votre installation, il faut bien configurer ses logiciels. D'ailleurs pour être certain d'avoir une machine propre, faites l'installation hors-ligne et ne mettez la machine en réseau qu'une fois bien sécurisée, surtout au niveau de Netfilter/iptables.<br />
<br />
=== Utilisateurs ===<br />
Vérifier que root n'est pas autorisé à se connecter. [[Sudo|Utiliser sudo]] plutôt que [[Fiches:Securite-ficheroot|le compte root directement]] pour les tâches d'administration.<br />
Evitez par ailleurs d'avoir des comptes inutiles sur votre machine car même s'ils n'ont que des droits restreints, l'utilisation d'une faille pour obtenir plus de permissions par un intrus n'est pas impossible.<br />
<br />
=== Permissions ===<br />
De manière générale, éviter autant que possible de positionner les droits ''setuid'' et ''setgid'' d'un éxécutable, qui permettent, en particulier, d'exécuter un programme avec les droits de '''root''' alors qu'on est connecté en simple utilisateur.<br />
<br />
<cadre>'''setuid bit ''' droit donné à un fichier exécutable d'utiliser les droits du propriétaire du fichier éxécutable (en général le root).<br />
<br />
'''setgid bit''' droit donné à un fichier exécutable d'utiliser les droits du groupe propriétaires du fichier éxécutable.</cadre><br />
<br />
Utiliser [[Admin-admin_env-chroot|chroot]] pour les services et les utilisateurs distants qui doivent avoir un accès restreint à la machine.<br />
<br />
Pour plus d'information sur les droits, consulter la [[Permissions|documentation de Léa sur les permissions]]<br />
<br />
== Bien configurer ses démons ==<br />
[[Reseau-web-Apache_protec|Sécuriser Apache]] en limitant les accès aux répertoires. On peut pour cela utiliser les fichiers .htaccess ou modifier directement la configuration du serveur, généralement <code>/etc/apache/httpd.conf</code> ou <code>/etc/apache2/apache2.conf</code> .<br />
<br />
Utilisez [[Reseau-secu-ssh|ssh/sshd]] plutôt que <code>telnet</code>. En effet, ce dernier ne chiffre pas ses flux de données, contrairement à ssh, ce qui permet grâce à un simple sniffeur réseau de voler identifiants et mots de passe via le réseau.<br />
<br />
Les serveurs de fichiers (ou apparents) tels <code>Samba</code>, <code>NFS</code> ou encore <code>FTP</code> ne doivent accepter de connexion que des utilisateurs enregistrés : une section est prévue à cet effet dans le fichier de configuration de chaque serveur. Il est préférable de faire ceci, même si les services n'autorisent que les connexions locales et même si l'authentification des utilisateurs est déjà limitée : mieux vaut trop de sécurité que pas assez. Si vous cherchez à faire du transfert de fichiers de manière sécurisée, préférez <code>scp</code> (qui est en fait une manière d'utiliser le protocole ssh).<br />
<br />
Si vous utilisez vnc, préférez le faire de manière sécurisée : [[Reseau-resau_plus-vnc|vnc au-dessus de ssh]].<br />
<br />
== Barrer la route aux connexions non souhaitées ==<br />
Une fois limité les ports réseau attendant des connexions, il faut mettre en place un firewall filtrant grâce à iptables (ou autre). Netfilter est le nom de la couche du noyau qui permet de filtrer tout ce qui passe par les interfaces réseau, tandis que iptables est une interface permettant de piloter Netfilter. Ne pas confondre, donc.<br />
Des articles ont déjà été écrits à ce propos :<br />
* [[Reseau-secu-iptables|iptables par l'exemple]]<br />
* [[Reseau-secu-murdefeu|Mur de feu pas à pas]]<br />
* [[Leapro-pro_reseau-qos|QoS via iptables]]<br />
<br />
De manière très succincte, il faut fermer tous les ports puis ouvrir ceux dont on a besoin : le port 80 (et le 443 pour du https) doit être ouvert si l'on a un serveur web, le port 110 si l'on a un serveur pop dont on veut qu'il soit accessible d'internet, etc.<br />
<br />
Voici un bon script de base qu'on peut adapter :<br />
<code>#!/bin/sh<br />
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net><br />
# Modifié par merlin8282 (je ne sais plus où j'ai pioché l'original mais il y ressemble encore vraiment beaucoup).<br />
# this script is free software according to the GNU General Public License (see [www.gnu.org])<br />
# Start/stop/restart/status firewall:<br />
<br />
firewall_start() {<br />
<br />
echo "[Démarrage du firewall]"<br />
<br />
############################### REGLES PAR DEFAUT ###########################<br />
<br />
echo "[Initialisation de la table filter]"<br />
iptables -F<br />
iptables -X<br />
<br />
echo "[Politique par défaut de la table filter]"<br />
<br />
# On ignore tout ce qui entre ou transite par la passerelle<br />
iptables -P INPUT DROP<br />
iptables -P FORWARD DROP<br />
<br />
# On accepte, ce qui sort<br />
iptables -P OUTPUT ACCEPT<br />
<br />
# Pour éviter les mauvaises suprises, on va autoriser l'accès à la loopback :<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A OUTPUT -o lo -j ACCEPT<br />
<br />
############################### LOCAL-INTERNET ###########################<br />
<br />
echo "[On autorise les clients à accéder à internet]"<br />
<br />
#On créé une nouvelle chaîne, le nom est indifférent<br />
# appelons-la "local-internet"<br />
iptables -N local-internet<br />
<br />
# On définit le profil de ceux qui appartiendront à "local-internet"<br />
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)<br />
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.<br />
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.<br />
# (Remplacer ppp0 en fonction de votre configuration)<br />
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT<br />
<br />
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer<br />
# et faire des petits :<br />
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
<br />
# On termine en indiquant que les connections appartenant à "local-internet"<br />
# accèdent à internet de manière transparente.<br />
iptables -A INPUT -j local-internet<br />
iptables -A FORWARD -j local-internet<br />
<br />
############################### LES TABLES NAT ET MANGLE #############################<br />
<br />
echo "[Initialisation des tables nat et mangle]"<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
############################### LE MASQUERADING #########################<br />
<br />
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)<br />
#echo "[Mise en place du masquerading]"<br />
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE<br />
<br />
########################### ACTIVATION DE LA PASSERELLE ##################<br />
<br />
#echo "[Activation de la passerelle]"<br />
#echo 1 > /proc/sys/net/ipv4/ip_forward<br />
<br />
############################## PAS DE SPOOFING ##########################<br />
<br />
echo "[Pas de spoofing]"<br />
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then<br />
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter<br />
do<br />
echo 1 > $filtre<br />
done<br />
fi<br />
<br />
########################## PAS DE SYNFLOOD ####################<br />
<br />
echo "[Pas de synflood]"<br />
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then<br />
echo 1 > /proc/sys/net/ipv4/tcp_syncookies<br />
fi<br />
<br />
############################### PAS DE PING ############################<br />
<br />
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle<br />
echo "[Pas ping]"<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all<br />
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts<br />
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then<br />
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses<br />
fi<br />
<br />
############# Priorisation de la bande passante et des connections - QoS ############<br />
<br />
echo "[priorisation des connections ssh ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay<br />
<br />
echo "[priorisation des connections http ...]";<br />
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput<br />
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput<br />
<br />
############################ Fonctionnalités serveurs #####################################<br />
<br />
echo "[Etude des fonctionalités serveurs, visibles depuis internet]"<br />
<br />
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,<br />
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne<br />
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.<br />
<br />
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,<br />
# en décommentant les 2 ou 3 lignes correspondantes.<br />
<br />
#echo "[autorisation du serveur ssh(22) ...]"<br />
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
<br />
#echo "[autorisation du serveur smtp(25) ...]"<br />
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT<br />
<br />
#echo "[autorisation du serveur http(80) ...]"<br />
#iptables -A INPUT -p tcp --dport www -j ACCEPT<br />
<br />
#echo "[autorisation du serveur https(443) ...]"<br />
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur DNS(53) ...]"<br />
#iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
<br />
#echo "[autorisation du serveur irc(6667) ...]"<br />
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT<br />
<br />
#echo "[autorisation du serveur cvs (2401) ...]"<br />
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT<br />
<br />
#echo "[autorisation du serveur FTP(21 et 20) ...]"<br />
#iptables -A INPUT -p tcp --dport ftp -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT<br />
<br />
# Ne pas décommenter les 3 lignes qui suivent.<br />
# Plus généralement :<br />
#echo "[autorisation du serveur Mon_truc(10584) ...]"<br />
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur aMule (4662/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT<br />
<br />
#echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"<br />
#iptables -A INPUT -p tcp --dport 6881:6889 -j ACCEPT<br />
<br />
echo "[firewall activé !]"<br />
}<br />
<br />
firewall_stop() {<br />
<br />
<br />
iptables -F<br />
iptables -X<br />
iptables -P INPUT ACCEPT<br />
iptables -P FORWARD ACCEPT<br />
iptables -P OUTPUT ACCEPT<br />
<br />
iptables -t nat -F<br />
iptables -t nat -X<br />
iptables -t nat -P PREROUTING ACCEPT<br />
iptables -t nat -P POSTROUTING ACCEPT<br />
iptables -t nat -P OUTPUT ACCEPT<br />
<br />
iptables -t mangle -F<br />
iptables -t mangle -X<br />
iptables -t mangle -P PREROUTING ACCEPT<br />
iptables -t mangle -P OUTPUT ACCEPT<br />
<br />
echo " [firewall descativé!]"<br />
}<br />
<br />
firewall_restart() {<br />
firewall_stop<br />
sleep 2<br />
firewall_start<br />
}<br />
<br />
case "$1" in<br />
'start')<br />
firewall_start<br />
;;<br />
'stop')<br />
firewall_stop<br />
;;<br />
'restart')<br />
firewall_restart<br />
;;<br />
'status')<br />
iptables -L<br />
iptables -t nat -L<br />
iptables -t mangle -L<br />
;;<br />
*)<br />
echo "Usage: firewall {start|stop|restart|status}"<br />
esac</code><br />
Ce script est à mettre généralement dans un fichier du dossier <code>/etc/init.d/</code> .<br />
<br />
== Détecter les intrusions, connaître les outils ==<br />
=== who ===<br />
La commande <code>who</code> ou <code>w</code> permet de voir les utilisateurs actuellement connectés (loggés) au système. Attention cependant car un agresseur peut être -- et l'est certainement si c'est le cas -- connecté sous votre nom, s'il est parvenu à s'immiscer dans votre système.<br />
<br />
=== ps ===<br />
La commande <code>ps</code> liste tous les processus actuellement en cours d'exécution sur le système. S'il en est un que vous ne connaissez pas, identifiez-le. Si vous ne savez toujours pas ce que c'est, pas d'affollement : utilisez la commande <code>lsof</code> et voyez si vous trouvez des fichiers en rapport avec ce processus. Vous pouvez alors identifier le processus et déterminer si c'est un processus "innofensif". Si ce n'est pas le cas, vous pouvez supprimer les fichiers qu'il faut. Attention toutefois à bien être certain que ce soit un logiciel malveillant que vous supprimez ! En revanche, si c'est un logiciel qui s'est fait infecter (par exemple apache) il suffit de réinstaller celui-ci, après avoir vidé le cache des paquets de votre gestionnaire de packages. Vérifiez aussi la configuration après réinstallation. Nul besoin de redémarrer, sauf si évidemment c'est le noyau qui est corrompu, chose qui est à mon avis très rare.<br />
<br />
=== netstat ===<br />
La commande <code>netstat</code> est une commande qui liste toutes les connexions réseau actives sur votre machine ainsi que l'état dans lequel elles sont (listening, connected, established, etc.) :<br />
<code>Proto Recv-Q Send-Q Adresse locale Adresse distante Etat<br />
tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN<br />
tcp6 0 0 :::443 :::* LISTEN</code><br />
On voit ici par exemple que le port 3129 écoute (LISTEN) sur la machine locale (0.0.0.0) et que le port 443 en fait de même.<br />
Vérifiez les connexions actives, les ports ouverts, et faites le lien avec vos démons et autres programmes qui tournent. Si un port ne vous dit rien, informez-vous.<br />
<br />
=== lsof ===<br />
La commande <code>lsof</code> liste tous les fichiers ouverts actuellement. Elle indique aussi quel utilisateur utilise quel fichier.<br />
<code>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root mem REG 3,65 31432 1720343 /sbin/init<br />
apache2 597 root mem REG 3,65 385484 25423 /usr/sbin/apache2</code><br />
Les informations parlent d'elle-mêmes. Ce sont deux cas précis parce-que le processus <code>init</code> a le fichier <code>/sbin/init</code> d'ouvert (de même pour apache).<br />
<br />
=== fcheck ===<br />
C'est un utilitaire qui notifie l'administrateur en cas de modification de fichiers. On précise dans le fichier de configuration quels fichiers ou dossiers on veut surveiller et un mail est envoyé en cas de changement.<br />
<br />
=== logcheck ===<br />
<code>logcheck</code> est un outil qui scrute les logs, en fait un résumé et envoie un courriel à l'administrateur (généralement root en local) régulièrement. Evidemment, il est possible de configurer le niveau de ce qui est rapporté.<br />
<br />
=== chkrootkit ===<br />
C'est un logiciel important, puisqu'il détecte la présence de rootkits. Son principe de fonctionnement est l'écoute des ports réseau. Relativement souvent, cependant, des logiciels tels les clients peer2peer sont détectés comme une menace, bien qu'ils soient innofensifs. En effet, ils utilisent des ports qui ne sont pas "officiellement" connus (contrairement au port 80, par exemple, qui est celui de tout serveur web). Donc pas d'affollement.<br />
<br />
=== Les systèmes de détection d'intrusion ===<br />
Un [http://fr.wikipedia.org/wiki/Système_de_détection_d'intrusion IDS (''Intrusion Detection System'')] est un logiciel qui a pour but de détecter toute intrusion dans le système. On peut citer par exemple [[Reseau-secu-SNORT|snort]] et tiger mais il en existe d'autres.<br />
Un tel logiciel fait des vérifications sur le système (logs, réseau, etc.) et reporte toute anomalie, tout ce qui est suspect.<br />
<br />
== Localiser le problème et nettoyer ==<br />
Grâce aux outils précédents il est plus ou moins facile de localiser d'où vient le problème. On peut alors agir en conséquence, à savoir tuer les processus incriminés et supprimer les logiciels correspondants. Au préalable on peut aussi, si l'on est curieux, regarder ce qu'a fait l'attaquant : il a certainement laissé des traces que l'on peut examiner pour mieux comprendre.<br />
<br />
L'intrus ayant pu avoir les droits root il serait de bon augure de réinstaller proprement -- en ayant pris soin de vider le cache de son gestionnaire de paquets -- les outils permettant la découverte de logiciels non souhaités, comme chkrootkit. Ceci fait un scan complet de tous les disques doit être fait. Prenez soin de monter toutes les partitions avant de lancer le scan. Veillez aussi à vérifier le partitionnement de vos disques, au cas où l'attaquant aurait créé une partition dans le but d'avoir un endroit de stockage de ses outils malveillants que l'administrateur de la machine -- vous-même -- ne verrait pas. Eh oui, il faut penser à toutes les éventualités ! Je pense qu'il vaut mieux être trop paranoïaque que pas assez, lorsqu'on administre un serveur.<br />
<br />
Lors de la possible compromission de la machine, il faut considérer les commandes sensibles (ps, top, who...) comme compromises.<br />
Un LiveCD peut dans le cadre d'une machine personnelle vous fournir une base de commandes saines.<br />
Dans le cadre d'une machine en production (serveur) qui ne doit souffrir de l'arrêt des services, un jeu de commandes compilées (avec librairie statique) sur un support extérieur (CD, clef USB...) peut être nécessaire.<br />
<br />
== Voir aussi ==<br />
* [http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Logiciel_de_s%C3%A9curit%C3%A9_informatique Wikipédia : Catégorie:Logiciel de sécurité informatique]<br />
* [http://fr.wikipedia.org/wiki/S%C3%A9curit%C3%A9_informatique Wikipédia : Sécurité des systèmes d'information]<br />
* [http://fr.wikipedia.org/wiki/Risques_en_s%C3%A9curit%C3%A9_informatique Wikipédia : Risques en sécurité informatique]<br />
* [http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html Une excellente documentation concernant la sécurisation de la distribution Debian GNU/Linux]<br />
<br />
== Conclusion ==<br />
Même si l'on connaît les risques, il est toujours impératif de rester sur ses gardes. De nouvelles menaces apparaissent régulièrement, de nouvelles failles sont découvertes chaque jour, de nouveaux virus aussi, etc. L'avenir nous dira si un jour on aura des ordinateurs sûrs à 100%, chose qui n'est pas impossible mais cependant improbable.<br />
<br />
== Remerciements ==<br />
Un grand merci à abgech pour sa contribution à la partie concernant le BIOS,<br><br />
Merci à oudoubah, pour ses idées et son expérience,<br><br />
Merci à Morgan pour l'aide qu'il m'a apporté pour restructurer l'article, ainsi que pour ses idées et ses critiques également.<br><br />
Merci à Fleury pour sa contribution en rapport avec les virus, vers, chevaux de Troie, etc.<br><br />
Merci enfin à Léa d'être là pour le logiciel libre !<br />
<br />
{{Copy|2006|[[Utilisateur:Merlin8282|Merlin8282]], [[Utilisateur:Fleury|Fleury]]|CC-BY-NC-SA}}</div>Merlin8282