Ce document espère devenir une référence pour l'implémentation de la sécurité d'ordinateurs Linux dans plusieurs types d'environement mais tente surtout de donner des approches pratiques à la sécurité pour quelqu'un qui souhaite en apprendre d'avantage en s'amusant avec son réseau.
1. Introduction
1.1. Introduction
1.2. Pré-requis & installation
1.3. Soumettre un commentaire
1.4. Copyright
1.5. Historique du document
2.1. Mise en place du système
2.2. Administration locale
2.3. Administration réseau
2.4. Gestions des problèmes
2.5. Optimisation de la machine
3. Sécurité
3.1. Introduction
3.2. La base
3.3. La sécurité physique
3.4. La sécurité locale du serveur
3.5. La sécurité réseau
3.6. Sécurité avancée réseau et autres
3.7. Conceptes avancés
4. Conclusion
5.1. Que faire après avoir constaté une intrusion?
5.2. Foire aux questions (FAQ)
5.3. Sources d'informations supplémentaires
5.4. Trucs et astuces
6. Remerciement
7. Projets
7.1 Ajouter des sections =)
7.2 Projets connexes
De plus en plus de personnes se lancent vers linux ou d'autres systèmes libres mais ne savent pas toujours comment se sortir d'affaire pendant les premiers mois de leur apprentissage. Ce guide est donc une intiative pour aider des gens qui ont quelques connaissances en informatique mais qui ne sont pas habitués à linux et qui veulent connaitre tout les petits trucs. Il sera amélioré au fil du temps et est écrit pour en apprendre plus moi aussi. :-)
La philosophie de ce document est que nous n'utiliserons pas d'outils spécifique à une distribution mais que nous allons vraiment y aller avec les commandes standard de unix!
1.2. Pré-requis & installation
La première étape consiste à ce procurer la distribution, soit par disquette, soit par CD ou encore de faire une installation réseau avec les disquettes de base. La distribution que je vais utiliser pour faire mes explications est "Debian GNU/Linux unstable" mais la majorité des choses devraient s'appliquer à n'importe quelle distribution. À partir de maintenant, je vais prendre pour aquis que vous venez de redémarrer votre machine pour la première fois et que vous avez déjà quelques connaissances de bases en unix suffisantes pour vous promener dans le système et modifier des fichiers.
Je propose de faire ce texte de facon ouverte, et j'aimerai recevoir des suggestions pour rendre ce document plus complet et plus intéréssant pour tous, si vous avez une sections que vous aimeriez rajouter, n'hésitez pas à me la faire parvenir :-)
1.4. Copyright (des suggestions?:-)
La distribution de ce document doit se conformer aux termes de la licence LDP tels que définis à l'adresse : http://metalab.unc.edu/LDP/COPYRIGHT.html
1.5. Historique du document
19/4/00
v0.1 - mis en place de la structure du document et rédaction de quelques sections.
22/7/00
v0.5.0 - Nettoyage et complétion de certaines parties. On y est presque ;-)
5/8/01
v0.5.3 - Ajout de la section sur vpnd.
27/8/01
je recommence l'école donc les mises-à-jour seront moin fréquentes! :/
Une recommendation que j'aimerai faire à ceux qui voudraient se lancer vers linux serait de vérifier leur matériel avant, surtout si vous allez vous acheter un ordinateur, évitez tout les péréphériques qui contiennent le mot "win"! Voici donc une liste rapide de pièces recommendé et non recommendé pour chaque catégorie:
Carte de son: à peu près n'importe quoi est supporté de nos jours, soit par un pilote commercial dans le pire des cas, ou des modules de la companie si la carte est très récente.
Carte vidéo: à peu près toutes les cartes sont supportées sous X en mode 2D, par contre pour ce qui est du OpenGL accéléré il faut avoir une Matrox (G[24]00), une RIVA, une 3DFX, une Intel 810, SIS 6326, S3 Virge ou une ATI Rage Pro. Etant de montréal et avec leur excellent support pour Linux, matrox est d'après moi un très bon choix 8-) (voir Utah-GLX et DRI)
Modem: Un vrai modem!! pas de la !*@&$ à 20$ avec winmodem écrit en gros dessus :-) (évitez tout les softmodems, si vous avez un laptop allez voir linmodems.org)
Carte réseau: Elle sont à peu près toutes supportées surtout si c'est une marque connue ou une Ne2000 compatible.
2.1.1. Niveau de l'ordinateur
Pour ceux qui n'ont pas encore installé leur système, je vous recommende de faire une partition pour /tmp, /var, et peut être /home si vous pensez avoir des usagers sur votre machine. Plus tard vous pourrez montez ces partition avec les options noexec, nosuid et nodev afin d'éviter que les usagers compilent ou ajoutent des programmes qui pourraient être des "exploits".
(noexec pour /home est peut être un peu trop poussé mais c'est à vous de décider:)
La première chose à faire après avoir démarré le système fraichement installé, si ce n'est pas déjà fait, c'est de créer un nouveau compte utilisateur (2.2.2). Ce compte vous servira en tout temps car le compte root ne doit servir qu'en cas de besoins réels, c'est à dire seulement si vous devez faire des modifications au système ou encore avoir accès à des ressources spéciales. Il est beaucoup trop facile de se tirrer dans le pied en restant root.
2.1.2. Niveau du réseau
Si vous avez un réseau complet à installer il faut prévoir l'architecture de celui ci avant de commencer. Premièrement il faut isoler votre réseau de travail des serveurs publiques et filtrer ce qui accède vos serveurs privées et aussi filtrer ce qui provient de l'intérieur du réseau pour des réseaux importants car plusieurs attaques proviennent de l'intérieur de la compagnie.
___ +--------------+--------+------------+ +------------+ +------------+ (NET)#####| Routeur +------+ | FTP server | | WWW server | |Mail server | | et Filtre +----+ | +------------+ +-----|------+ +------|-----+ +-------------++ | +----------------------+ | | | \ +----------------------------------------+ +------+----+ | \ ZONE-FILTRÉE |DNS server1| | \ +---------------+ +-----------+ | +------| Private Net | +-------------+ | Gate/Firewall | |DNS server2| +---------------+ +-----------+ | | +------------+ +-+-+ +-------------------+ | Desktop #1 |-------------+Hub+--------| Private server #1 | +------------+ +-+-+ +-------------------+ .. \ .. .. ZONE-PRIVÉE | .. .. \ .. +------------+ ++--+ +-------------------+ | Desktop #N |-----------------+Hub+----| Private server #N | +------------+ +-+-+ +-------------------+
2.2.1. Obtenir des renseignements sur le serveur
Voici quelques commandes qui vous seront très utiles pour vous repérer dans le système, afficher les ressources et autres:
a) df: Vous permet d afficher l'espace utilisé sur vos différentes partitions montées.
b) free: Affiche la quantité de mémoire physique et swap utilisées.
c) ps: Cette commande permet d'afficher les processus qui tournent sur votre machine, une utilisation courante et d'afficher la liste complète avec "ps aux" et de faire un "pipe" dans grep pour trouver ce qu'on cherche :-)
d) top: Affiche dynamiquement tout les processus qui tournent et que vous pouvez voir.
e) mount: Cette commande affiche les partitions montées et les options utilisées, elle permet aussi de monter des partitions, ex: mount /dev/hda1 /mnt/winchose.
f) chattr et lsattr: Celle ci permet de modifier les attributs des fichiers. Elle permet par exemple d'empêcher que le "access time" soit mis à jour, forcer l'éffacement des fichiers de façon sécuritaire ou encore d'être inchangeable.
2.2.2. Gérer les comptes
adduser, userdel, sécurisation des comptes..
2.3. Adminstration réseau
(les adresses IPs sont modifiées pour protéger les coupables :-)
2.3.1. ifconfig
Un des problèmes qu'ont les nouveaux utilisateurs de linux c'est souvent de se connecter à l'internet. Je ne vais pas aller dans les détails de la configuration de modems et autres périphériques car des millions de documents et de programmes rendent la tâche très facile de nos jours, mais je voudrai quand même prendre le temps d'expliquer des commandes de base pour obtenir des informations sur vos options réseaux et les changer au besoin.
La première commande intéréssante est ifconfig, cette commande vous permet de voir la configuration de toues les interfaces réseaux physiques ou virtuelles (d'ou le nom InterFace Configuration). Pour l'utiliser il faut soit faire ifconfig -a pour voir toutes les interfaces du système, on encore infconfig <nom-d'un-périphérique>. Un utilisation typique donne le résultat suivant:
serveur:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:DE:4D:B3:3F:86
inet addr:23.210.123.4 Bcast:255.255.255.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:1344387 errors:0 dropped:21 overruns:0 frame:8
TX packets:721012 errors:0 dropped:0 overruns:0 carrier:0
collisions:4080 txqueuelen:100
Interrupt:10 Base address:0x300
On remarque donc que c'est très pratique pour obtenir l'adresse MAC de la carte (identificateur de 48-bits en HEX unique à chaque carte qui se trouve sur la première ligne (mais qui peut être cloné :-) ) ainsi que toutes les options réseaux telles que l'adresse IP, le netmask, l'état du périphérique, le nombre de paquets de collisions etc. Voici quelques exemples de reconfiguration: (voir man ifconfig pour tout les détailles sanglants.)
serveur:~# ifconfig eth0 10.23.34.45 netmask 255.255.255.0 broadcast 10.255.255.255
serveur:~# ifconfig eth0 down
2.3.2. route
Une autre commande très utile dans un environement réseau est la commande route. Celle ci permet de modifier au besoin les routes utilisez pour les diférents réseaux. voici un exemple:
serveur:~# route -n
Destination |
Gateway |
Genmask |
Flags |
Metric |
Ref |
Use |
Iface |
192.168.1.65 |
192.168.1.65 |
255.255.255.255 |
UH |
0 |
0 |
0 |
sl0 |
192.168.1.16 |
192.168.1.14 |
255.255.255.240 |
UG |
0 |
0 |
0 |
eth1 |
192.168.1.0 |
0.0.0.0 |
255.255.255.240 |
U |
0 |
0 |
0 |
eth1 |
192.168.1.64 |
192.168.1.65 |
255.255.255.192 |
UG |
0 |
0 |
0 |
sl0 |
23.210.123.0 |
0.0.0.0 |
255.255.255.0 |
U |
0 |
0 |
0 |
eth0 |
0.0.0.0 |
23.210.123.1 |
0.0.0.0 |
UG |
0 |
0 |
0 |
eth0 |
2.3.3. nslookup, dig & host
Ces commandes sont très utiles et permettent d'obtenir l'adresse ip d'un serveur en donnant comme argument son nom de domaine et vis versa. On peut aussi obtenir la liste complète des ordinateurs d'un réseau sur la plus part des serveurs DNS qui sont mal configurés!
2.3.4. whois
whois donne les informations sur un domain name enregistré telles que les DNS, des contactes pour le domaine et autres. Il permet aussi de voir à qui appartient une adresse IP.
2.3.5. netstat
Cette commande vous donnera la liste des connections actives ou dormantes ainsi que les sockets, les routes, les statistiques des interfaces etc...
2.4. Gestion et prévention des problèmes
Un outil intéréssant pour être sûr d'éviter certains problèmes lors de manipulations de fichier est chattr. Ce programme permet de bloquer (-i) un fichier en empèchant la modification, de le comprésser (-c) automatiquement ou encore de forcer que les fichiers soit éffacés sécuritairement(-s ou -u)! allez voir la man page pour les détails.
Si vous voulez pousser le concept précédent beaucoups plus loin, je vous conseille d'installer LIDS. C'est un outil qui permet de gérer l'accès à peu près tout sur le système au niveau du noyau, ce qui fait que même si une personne réussi à obtenir root sur la machine il ne pourra probablement rien faire!
2.5.Optimisation de la machine
Un noyau étant construit de facon monolithique devrait tourner un peu plus rapidement mais vous perdrez alors la fléxibilité des modules, à vous de voir ce qui vous tient à coeur!
Plusieurs optimisations du noyau, qu'elles soit au niveau du stack TCP/IP ou du système de fichier, peuvent être faites directement à partir de /proc et avec sysctl.conf dans toutes les distributions modernes. Ce fichier fonctionne de la facon suivante:
Son point de départ est le répertoire /proc/sys, si vous voulez modifier /proc/sys/net/ipv4/tcp_timestamps il faut écrire dans sysctl.conf:
net.ipv4.tcp_timestamps=0
Cela aura pour effet de désactiver les marques de temps dans les paquets (ce qui est une bonne chose afin d'éviter que quelqu'un puisse facilement prédire les séquences pour faire du ip spoofing). Il est possible faire la même chose avec ipchains: ipchains -A input -s 0/0 13 -p icmp -j DENY ipchains -A output -s 0/0 14 -p icmp -j DENY
Mais plus de détails là dessus plus loin :)
Une optimisation intéréssante du côté performance et de désactiver la sauvegarde du dernier temps d'accès sur des fichiers qui sont constemment accédés. Par exemple en utilisant chattr -R +A /var/spool vous allez sauver plusieurs cycles de CPU.
Il y a aussi moyen de monter une partition pour avoir le même effet sur l'ensemble des fichiers qui s'y trouvent avec l'option à mettre dans fstab: noatime
La partition swap devrait se trouver de préférence le plus près possible du début du disque, c'est à dire, la première partition crée. L'extérieur du disque étant plus rapide que l'intérieur cela va permettre d'optimiser les accès les plus fréquents au disque.
Il serait aussi intéréssant de mentionner hdparm qui permet de modifier les modes de fonctionnement des disques durs IDE.
La sécurité est un problème qui est passé du théorique au pratique depuis plusieurs années et qui a poussé beaucoups d'entreprises à se munir de moyen de prévention. Malheureusement plusieurs restent vulnérables et surtout chez les particuliers qui n'ont aucune idée de la facon à employer pour sécuriser leur réseau, sendmail ou encore bind.
Un des débats importants sur la sécurité actuellement est de savoir si un programme à code source libre est plus sécuritaire ou moin sécuritaire que des produits propriétaire. Quand on regarde l'évolution du problème sur des sites comme securityfocus on constate rapidement que les problèmes dans les systèmes à code source libre sont trouvé et fixé beaucoup plus rapidement et sont moin vicieux que ceux des produits fermées (backdoor etc). L'avantage étant que il suffit qu'une seule personne soit du bon coté pour qu'elle annonce un bug alors que personne ne peut aller vérifier le code lorsqu'il est fermé.
Un aspect important d'un système multi-utilisateur comme Linux c'est que les fichiers ont des modes d'accès. ceux si sont divisé en 4 valeurs octales qui se succèdent. voici quelques exemples:
-rwxr-xr-x 1 root root 14128 Mar 7 05:43 /sbin/shutdown
- -r-s--x--x 1 root root 12244 Feb 7 17:20 /usr/bin/passwd
crw-rw---- 1 root audio 15, 128 Mar 31 21:37 dsp
brw-rw---- 1 root floppy 2, 0 Dec 4 20:00 fd0
srwxrwxrwx 1 root root 0 Apr 16 15:07 gpmctl
prw------- 1 root root 0 Apr 15 15:40 initctl
drwxr-xr-x 9 root root 4096 Apr 19 07:35 log
drwxrwxrwt 6 root root 1024 Apr 19 21:16 tmp
Le premier caractère indique le type de fichier, un - indique que c'est un fichier standard, un d veut dire que nous avons à faire à un répertoire tant dis qu'un s veut dire que c'est un lien symbolique. c et b sont des fichiers spéciaux que l'on retrouve généralement dans /dev (et qui sont très louche si vous les trouvez ailleurs!) et qui signifie "Caracter" ou "Block device".
voici donc donc les types de fichiers possibles sur un système et tout les modes existants. le fonctionnement des rwx et companie que vous voyez au début de la ligne est assez simple:
|
|
|
|
||||||||
suid (s) |
sgid (s) |
sticky (t) |
(r)ead |
(w)rite |
(x)ecute |
(r)ead |
(w)rite |
(x)ecute |
(r)ead |
(w)rite |
(x)ecute |
4 |
2 |
1 |
4 |
2 |
1 |
4 |
2 |
1 |
4 |
2 |
1 |
Ce que cela signifie, c est qu en additionant la valeur désiré dans chacune des catégorie, j'obtient le mode d'accès souhaité, par exemple:
4750 veux dire, 4 dans spécial, 7 = 4 +2 +1 dans usager, 5 = 4 +1 dans groupes et 0 ou rien dans autres. Cela donne donc, Suid, Read Write et execute pour l'usager auquel appartient ce fichier, read et execute pour les gens du bon groupe, et aucun accès pour les autres. Le suid bit est quelque chose de particulier, il permet, par exemple, de faire tourner un processus en tant que l'usager auquel appartient l'éxécutable et non celui qui l'éxécute. Cela a des avantages comme par exemple permettre à un usager de changer son mot de passe par un programme qui permet de modifier /etc/passwd mais cela a aussi des défauts car dans le cas d'une application mal écrite, on peut profiter des privilèges sous lesquels s'éxécute l'application pour en tirer profit... Mais on en verra plus sur ce sujet plus tard (buffers overflow)
une commande intéréssante que vous pouvez ajouter à votre .bash_profile est umask 037 par exemple, comme le nom de la commande le dit, c est un mask donc le résultat de cette commande est que tout les fichiers que vous allez créer aura comme mode par défaut 0740.
La sécurité physique est un gros problème car n'importe qui ayant accès à votre machine peut, dépendant de ses habiletés, prendre contrôle de votre machine très facilement! Le mieux que vous puissiez faire, sans tomber dans la paranoïa la plus complète et mêtre votre ordi dans un coffre, c'est de mêtre un mot de passe sur le bios et d'interdire la demarrage par la disquette et CD. Une autre chose utile et de rajouter les options suivantes à son fichier /etc/lilo.conf:
password=blabla
restricted
puis d'éxécuter lilo après avoir changé le mode d'accès de ce fichier à fichier à 600 (avec chmod) pour ne pas laisser la chance aux autres utilisateurs de lire le mot de passe qui s'y trouve (De préférence, il faudrait faire cette étape en premier). Si on enlève "restricted" mème les démarrages sans options seront protégés alors la prochaine fois que quelqu'un tombe du plafond pendu à un fil (déjà vu?) pour vous pirater, il ne pourra pas avoir accès. :-)
Un autre fichier intéréssant est le fichier shutdown.allow qui se trouve comme la majorité des fichiers de configuration système dans /etc. Il permet, en mettant un nom d'usager par ligne, de restreindre l'accès au fameux ctr-alt-del à certains usager qui devront se brancher à la console pour pouvoir l'éxécuter. Il est d'ailleur possible de modifier la fonction du ctr-alt-del, allez voir dans /etc/inittab.
Les autres choses à considérer sont la sécurité du poste pendant qu'il est ouvert sous X, un solution et de tourner xscreensaver avec un mot de passe et surtout de se déloguer de la console par laquelle on a éxécuté X en faisant ctrl-alt-F1, ctrl-Z puis "bg" et finalement Ctrl-D (c'est à dire, retourner sur cette console, mettre X en background et fermer la session). (ou encore startx & exit)
3.4. La sécurité locale du serveur
3.4.1. Les logiciels installés
Lorsque vous installez votre distribution ou lorsque vous y rajoutez des logiciels, gardez bien en tête que ceux ci rendent le systême plus complexe et comme la sécurité de celui ci n'est aussi solide que son plus faible maillon, il ne faut surtout pas laisser trainer des binaires (surtout suid!!) qui ne servent à rien. Pour ce qui est du noyau, un patch indispensable pour un serveur est celui distribué par Openwall qui permet de rendre la pile mémoire non éxécutable et ainsi prévenir plusieurs attaques par débordement de tampons.
Il est aussi intéréssant de rajouter md5 à la fin de la ligne qui débute par password dans /etc/pam.d/passwd et /etc/pam.d/login et de refaire passwd pour changer son mot de passe. Cela va permettre d'utiliser md5 pour encrypter les mots de passe (si ce n'est pas déjà le cas) ce qui est beaucoup plus dur à briser que le DES traditionnel.
L'utilisation des groupes pour limiter complètement l'accès à certaines commandes est aussi une bonne idée lorsque vous n'avez pas le choix de les laisser SUID / SGID.
3.4.2. Vérifier l'intégrité des fichiers
Afin de s'assurer que les fichiers sur le système n'ont pas été modifiés (par exemple la modification de login pour y insérer un cheval de troie) il faut utiliser des outils qui crée une signature de chacun des fichiers que l'on pourra réutiliser par la suite pour assurer l'intégrité du système. Il existe plusieurs solutions à ce probleme, une des plus simples est d'installer un logiciel comme tripwire ou AIDE(voir apt:) qui fait automatiquement une base de donnée avec cron pour automatiser le tout et vous fait des rapports. Il y a aussi moyen de le faire en une ligne de commande avec md5sum.
Ce dont il faut se souvenir si vous voulez réellement assurer l'intégrité de votre serveur c'est de faire des sauvegardes de cette base de donnée car un cracker aurait vite fait de la changer si elle demeure sur le disque lors d'une intrusion!
3.4.3. Backups
(?)
3.4.4. Syslog
Les logs sont des fichiers très important sur un système et leur intégrité devrait être maintenue à tout prix. Pour ce faire, il est recommandé de dédier une machine aux logs de toutes les machines sur le réseau afin de centraliser ces logs et en avoir une copie en cas de besoin. On peut par exemple ajouter une ligne comme la suivante pour loguer tout vers l'ordi 10.11.12.13:
*.* @10.11.12.13
Autrement, il est possible de loguer par le port série pour assurer que la machine de log ne puisse être modifiée ou encore directement sur une imprimante (dans quel cas il est recommandé d'utiliser des imprimantes matricielles.)
*.* /dev/ttyS0
3.4.5. Détection des attaques locales
hostsentry, Fork Bomb Diffuser, ... ?
3.4.6. Encryption du disque dur
Recommendations
Si vous n'avez aucun besoin de maintenir une architecture actuel il est conseillé d'éviter d'utiliser tout les protocoles non encryptés de communications tel que telnet, rlogin, nfs, samba. Ces protocoles sont trop peu sûr sur l'internet et sont trop facile à écouter.
Des services tels que ssh soit beaucoups plus appropriés si il est possible de les utiliser (ce qui devrait toujours être le cas). De plus il est possible de se servir de ssh entre 2 machines pour créer des tunnels encryptés pour d'autres services.
Il est recommendé de protéger les fichiers de configuration avec chattr une fois que la configuration est faites pour éviter qu'il soit modifié par erreur ou autrement...
3.5.1. Tcpwrapper et inetd.
La plus part des distributions viennent malheureusement avec beaucoup de services inutiles et dangereux qui sont activés par défaut(finger, portmap etc.). La première chose à faire pour mettre fin à ce problème est d'aller modifier le fichier /etc/inetd.conf où l'on retrouve la liste de services activés ou non par tcpwrapper. Ce dernier permet de centraliser la configuration de plusieurs services réseaux. Le fonctionnement de ce fichier est très simple, pour désactiver un service il suffit de mettre un # au début de la ligne pour qu'il soit considéré comme étant un commentaire. Je sugère que vous désactiviez tout sauf peut être identd si vous pensez aller sur irc (mais peut aussi être utile ailleur) et telnetd mais je vous conseille(!) de remplacer telnet par OpenSSH car telnet n'est pas encrypté.
Une fois que vous avez laissé seulement les services désirés il est possible de restreindre l'accès à ceux ci à des adresses particulière. Pour cela il faut modifier les fichiers dans /etc qui se nomment hosts.allow et hosts.deny. La meilleur chose à faire est de mettre ALL: ALL dans hosts.deny et ensuite de réactiver les services au besoin dans hosts.allow.
Par exemple pour permettre au réseau local d'accéder aux services du gateway il faudrait mettre ALL: 192.168.1. (le . à la fin veux dire qu'il peut être suivie de n'importe quelle adresse) dans hosts.allow. Le premier argument est le service visé, le 2e les adresses et le 3e est facultatif et permet de spécifier des commandes à utiliser par rapport à ces services. (par exemple faire un finger de la personne qui nous telnet). Le nom des services est celui que l'on trouve dans inetd.conf, exemple:
wu-ftpd: 192.168.1. 333.444.222.111 .foo.net EXECPT bar.foo.net
Seul les applications lancées par tcpd sont affectées par hosts.allow et hosts.deny, exemple(de inetd.conf):
ident stream tcp wait identd /usr/sbin/identd identd
shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd
identd n'est pas partit par tcpd (tcp_wrapper)
rsh(shell) est partit par tcpd (tcp_wrapper)
Une alternative intéréssante à inetd est xinetd qui permet une configuration beaucoups plus précise de l'accès aux services. (man xinetd.conf une fois que vous l avez installé).
3.5.2. init.d.
Ensuite une étape importante est de s'assurer que les services qui tournent sont bien ceux que vous souhaitez faire rouler. Pour trouver les scripts qui font partir ces services au démarrage, il vous faudra aller dans le répertoire /etc/rc?.d sous debian (/etc/rc.d/rc?.d sous beaucoup d'autres distributions) où "?" représente un chiffre allant de à 6 qui représente le runlevel que vous voulez modifier.
En générale sous Debian le runlevel par défaut est le 2 alors que c'est le 3 sous d'autres distributions. les runlevels 0 et 6 sont shutdown et reboot respectivement. Une fois que vous vous trouvez dans le répertoire approprié, vous vous trouvez devant plusieurs fichiers dont les noms commencent soit par SXX et peut être KXX où XX sont des chiffres, tout autres fichiers sont ignorés.
Les fichiers qui nous intérèssent sont ceux qui commencent par un S pour Start (K = Kill). si vous n' avez pas besoin de NFS, alors enlevez tout ce qui contient *nfs* et aussi *portmap, ensuite si il y a apache et que vous n'en avez pas besoin, enlevez le à son tour. N'ayez pas peur d'éffacer ces fichiers car ce ne sont que des liens symboliques aux scripts qui se trouvent dans /etc/init.d (ou /etc/rc.d/init.d) et que si vous regardez les runlevels supérieurs vous en aurez des copies en cas de problèmes.
3.5.3. courrier.
(sendmail | postfix & pop3 ... à qui la chance!? ;-)
Si vous voulez simplement utiliser sendmail localement sans recevoir de courrier directement vous pouvez enlever l'option -bd afin d'éviter d'écouter sur le port 25.
3.5.4. BIND (named).
Cette partie n'a pas comme objectif de vous expliquer comment fonctionne bind mais plutôt comment rendre son utilisation plus sécuritaire. Nous allons faire fonctionner bind dans un environement chroot (jailed, c'est à dire qu'il n'a pas accès à tout le système de fichier mais se retrouve prisonier dans son propre coin) et sous un usager named plutôt que root pour limiter les dégars en cas de problème.
Pour commencer il faut créer un répertoire /chroot et un répertoire /chroot/named dans lequel nous allons recréer un environement pour named. (lors de l'installation du serveur une partition /chroot devrait être créer pour empêcher que named puisse affecter le reste du système)
Ensuite il faut trouver quelles librairies sont utilisés par named en utilisant la commande ldd /usr/sbin/named ce qui devrait donner quelque chose comme ceci:
server:~# ldd /usr/sbin/named
libc.so.6 => /lib/libc.so.6 (0x00128000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00110000)
Copiez les librairies qui ont été identifiées ci-dessus dans le répertoire /chroot/named/lib/ et /chroot/named/usr/lib/
La commande suivante peut aussi servir à tout faire d'un coup:
cp `ldd /usr/sbin/named | awk {'print $3'}` /chroot/named
Maintenant il faut créer les répertoires suivant sous /chroot/named:
dev/ lib/ etc/bind/ usr/sbin/ var/run/ var/named/ (noter que named.conf ne se trouve pas dans /etc/bind mais dans /etc pour plusieurs distributions, ajuster la localisation des fichiers en conséquence.)
Puis il faut copier /etc/bind/named.conf dans /chroot/named/etc/bind/ et copier de la même façon tout les fichiers de named dans leur répertoire respectif sous /chroot/named. Puis il faut créer un /dev/null avec la commande suivante:
mknod /chroot/named/dev/null c 1 3 && chmod 666 /chroot/named/dev/null
Il faut ensuite copier /usr/sbin/{named,named-xfer,ndc} vers le même répertoire dans /chroot.
Enfin, il faut que le répertoire qui contient les configurations de BIND appartienne à l'usager named seulement si vous êtes sur le serveur "slave".
Copiez le fichier pointé par localtime dans /etc ansi que nsswitch.conf dans le nouveau etc et assurez vous qu'il soit protégé par chattr +i afin qu'il ne puiss pas être modifié.
Maintenant que tout a été copié au bonne endroit et qu'un usager named a été créé avec un login shell /bin/false (option -s /bin/false à donner à useradd) et un répertoire home /chroot/named, il faut prévenir syslog d'écouter sur un device suplémentaire en modifiant son script de démarrage et en ajoutant l'option: -a /chroot/named/dev/log ...
Ouf, on y est presque :-), il ne reste qu'à modifier le script de démarrage pour faire partir named avec les options -u named -g named -t /chroot/named...
Une alternative pour le problème de syslog est d'utiliser un programme qui s'appele holelogd qui permet de repasser les infos d'un socket de log à sysklogd.
Et voilà, tout devrait maintenant être fonctionnel :-)
N'oubliez pas de rajouter allow-transfer { 127.0.0.1; };à votre named.conf pour ne pas permettre à n'importe qui de lister votre DNS et ainsi ramasser de l'information sur votre réseau. De plus allow-query { 192.168.1/24; 127.0.0/24; }; pourrait être utile pour un réseau privé (mais je ne vous suggère pas de tourner BIND sur un Gateway qui touche au net et au réseau local en même temps.)
3.5.5. NFS
Côté serveur: Du côté du serveur il intéréssant d'exporter ses fichiers avec quelques options supplémentaire. Il est d'ailleur recommendé d'un point de vue purement technique d'ajouter rsize=8192 et wsize=8192 pour ne pas envoyer des paquets vide sur le réseau et donc permettre d'optimiser les temps d'accès. Ensuite si vos clients n'ont pas besoin d'écrire sur ces partitions rajoutez l'option "ro" pour que ceux ci soit "read-only" (en lecture seulement).
Il est aussi possible de limité l'accès à des sous répertoire avec l'option noaccess. Il faut s'assurer que l'option root_squash soit activer pour que le root des machines client ne soit pas considéré comme étant root sur le serveur mais comme un usager nobody (ce qui est normalement déjà éffectué par défaut). L'option all_squash applique les même sanctions à tout le monde et les options squash_uids et squash_gids permettent de spécifier les usagers ou groupes visés.
Voici quelques exemples tiré du man page de exports(5):
/ 192.168.1.2(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/bob pc001(rw,all_squash,anonuid=150,anongid=100) /pub (ro,insecure,all_squash) /pub/private (noaccess)
3.5.6. Samba
3.5.7. X-Window
S'assurer de ne pas faire xhost +.
Si on veut que d'autres usagers sur la meme machine (ex: root qui voudrait faire fonctionner un programme de sécurité qui requiert root mais en restant sous son usager normal) ait acces au serveur:
$ echo "xhost +127.0.0.1" >> ~/.xinitrc
pour le rendre permanent (sans >> ~/.xinitrc pour l'activer directement) et NON
$ xhost +
qui donne accès à tout le monde!
Il est aussi possible de partir X avec l'option '-nolisten tcp' si on n'a pas besoin de X en réseau. (Par exemple remplacer /usr/X11R6/bin/X par un script qui appele le binaire déplacé ailleur avec les options désirés)
3.5.8. SSH/Telnet (chroot)
(?!)
3.5.9. wu-ftpd (chroot)
3.5.10. Serveur Web Apache
Avant de parler de la façon de rendre apache plus sécuritaire en le mettant dans un environement chroot, voici un petit truc pour protéger un répertoire avec un mot de passe (dans httpd.conf):
<Directory "/var/www/secret">
Options None
AllowOverride AuthConfig
AuthName "restricted stuff"
AuthType Basic
AuthDBUserFile /etc/apache/.dbmpasswd
require valid-user
</Directory>
Ensuite il faut utiliser la commande suivante et repartir apache pour bénéficier de l'authentification:
dbmmanage /etc/apache/dbmpasswd adduser usager
Il suffit d'aller voir le répertoire secret avec un fureteur pour constater qu'il nous demande un mot de passe (ne pas oublier d'activer le module db_auth dans le httpd.conf de apache!)
LoadModule db_auth_module /usr/lib/apache/1.3/mod_auth_db.so
chroot:
De la même façon que pour BIND, il faut créer un répertoire /chroot/apache dans lequel on va créer les répertoires: dev/ etc/ lib/ usr/sbin/ var/run/ var/log/apache/ home/ pour que apache ait sa propre copie de ce dont il a besoin. Il faut aussi changer le répertoire de log de apache au mode 750.
Ensuite il faut trouver les librairies qu'il faut copier dans /chroot/apache/lib ou usr/lib/ dépendant de ce que ldd vous dira. (/lib/libnss_{compat,dns,files}* peuvent aussi servir)
La commande suivante peut aussi servir à tout faire d'un seul coup: cp `ldd /usr/sbin/apache | awk {'print $3'}` /chroot/apache/
server:~# ldd /usr/sbin/apache
/usr/sbin/apache:
libm.so.6 => /lib/libm.so.6 (0x4001b000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40038000)
libgdbm.so.1 => /usr/lib/libgdbm.so.1 (0x40065000)
libdb.so.3 => /lib/libdb.so.3 (0x4006b000)
libdl.so.2 => /lib/libdl.so.2 (0x400a7000)
libc.so.6 => /lib/libc.so.6 (0x400ab000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Sous debian apache possède déjà un usager www-data, si non créer lui un usager avec un shell /bin/false et un home étant /chroot/apache ainsi qu'un groupe du même nom.
Il faut maintenant copier /etc/apache et /etc/ssl (au besoin) dans /chroot/apache/etc et faire de même pour votre répertoire de cgi et votre DocumentRoot ainsi que pour /usr/sbin/apache (si non chroot ne pourra pas fonctionner).
Finalement il faut créer un dev/null avec mknod et le mêttre en mode 666:
mknod /chroot/apache/dev/null c 1 3 && chmod 666 /chroot/apache/dev/null
Il faut maintenant copier /etc/passwd et /etc/group mais après il faut enlever toutes les lignes sauf celle qui contient le groupe et l'usager de apache, c'est à dire www-data dans notre cas. Il faut aussi copier resolv.conf, nsswitch.conf, localtime et hosts dans /chroot/apache/etc.
N'oubliez pas de rendre impossible la modification des fichiers dans le etc du chroot avec chattr pour une meilleur sécurité.
Il faut maintenant ajouter /chroot/apache/dev/log à syslog avec l'option -a /chroot/apache/dev/log dans les scriptes d'initialisation et relancer syslog.
Il ne reste finalement plus qu'à modifier le lancement d'apache pour qu'il parte en mode chroot en remplacant $APACHECTL start par la ligne suivante et relancer apache:
/usr/sbin/chroot /chroot/apache/ /usr/sbin/apache -option-que-vous-utilisez
Si vous utilisez perl ou autre en plus, il vous faudra copier ces librairies aussi. Et il faut peut être modifier les scriptes de logrotate pour qu'ils pointent vers le répertoire chroot.
Pour vérifier que ca marche vous pouvez faire ls -l /proc/_PID_DE_APACHE_/root et vous allez voir le système de fichier du chroot :-)
SSL:
3.5.11. LDAP
?
3.5.12. Syslog/Syslog-ng
??
3.6. Sécurité avancé réseau et autres.
3.6.1. Les en-tête de paquets (headers).
en-tête IP ________________________________________________________________ |version|long. en-tete|TOS | longueur totale | \ |4bit | 4bit | 8bit | 16bit | | |_______________________________________________________________| | | |flags| decalage de fragment | | | 16bit |3bit | 13bit | | |_______________________________________________________________| | | TTL | protocol | somme de controle de l'entete | | 20 octets | 8bit | 8bit | 16bit | | |_______________________________________________________________| | | adresse IP source | | | 32bit | | |_______________________________________________________________| | | adresse IP destination | | | 32bit | / |_______________________________________________________________| | options(s'il y en a) | taille variable |_______________________________________________________________| | donnees | taille variable |_______________________________________________________________| en-tete TCP ________________________________________________________________ | port source | port destination | \ | 16bit | 16bit | | |_______________________________________________________________| | | numero de sequence | | | 32bit | | |_______________________________________________________________| | | numero d'acquittement | | | 32bit | | |_______________________________________________________________| | |long. entete| reserve| FLAG* | taille de fenetre | | 20 octets | 4bit | 6bit | 6bit | 16bit | | |_______________________________________________________________| | | somme de controle TCP | pointeur urgent | | | 16bit | 16bit | | |_______________________________________________________________| / | options(s'il y en a) | taille variable |_______________________________________________________________| | donnees('il y en a) | taille variable |_______________________________________________________________|
3.6.2. ipchains et netfilter(iptable). Règles de coupe-feu.
1. Carte Ethernet initialisé.
2. Les règles de firewall sont mise en place par ipchains.
Quelques IP à envoyer à la poubelle sur vos cartes réseaux publiques. (Et sur les adresses privés qui ne sont pas visées par celle ci)
iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j FIREWALL
iptables -A INPUT -i eth0 -s 0.0.0.0/8 -j FIREWALL
iptables -A INPUT -i eth0 -s 255.255.255.255/32 -j FIREWALL
iptables -A INPUT -i eth0 -s 169.254.0.0/16 -j FIREWALL
iptables -A INPUT -i eth0 -s 192.0.2.0/24 -j FIREWALL
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j FIREWALL
iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j FIREWALL
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j FIREWALL
iptables -A INPUT -i eth0 -s 224.0.0.0/4 -j FIREWALL
iptables -A INPUT -i eth0 -s 240.0.0.0/5 -j FIREWALL
iptables -A INPUT -i eth0 -s 248.0.0.0/5 -j FIREWALL
3. Activer le Forwarding.
4. Les services réseaux sont démarrés.
3.6.3. Les VPNs
3.6.3.1. vpnd
Une des solutions disponible pour faire un vpn sous linux (la plus simple selon moi) s'appele vpnd. Elle ne nécéssite pas de reconfiguration du noyau comem FreeS/WAN mais n'a malheureusement pas été mise à jour depuis 2+ ans. Sa configuration est assez simple une fois que vous avez généré la clé et les choses de bases que la documentation explique.
Une des machines doit être configurée avec la ligne: "mode server" et l'autre avec "mode client" dans les 2 cas les lignes clients et serveurs sont les mêmes, c'est à dire que dans les 2 vpnd.conf on retrouve quelque chose comme:
client 10.10.10.10 server 20.20.20.20
Ensuite chacun aura la configuration qui représente son interface interne au réseau privé:
Par exemple si vous avez utilisé les trames 192.168.1.x et 192.168.2.y pour vos 2 réseaux privés, voilà à quoi cela ressemblerait si vos adresses de cartes intérieur au réseau était toutes deux .1:
local 192.168.1.1 remote 192.168.2.1
et
local 192.168.2.1 remote 192.168.1.1
finalement il ne reste qu'à configuré le réseau suivi du netmask et de l'adresse interne sur chacun des 2 serveurs:
Sur 192.168.1.1:
route1 192.168.2.0 255.255.255.0 192.168.2.1
Sur 192.168.2.1:
route1 192.168.1.0 255.255.255.0 192.168.1.1
Il ne reste plus qu'à ajuster vos règles de MASQ avec ipchains:
Sur le premier serveur:
ipchains -A forward -s 192.168.1.0/24 -d ! 192.168.2.0/24 -j MASQ ipchains -A forward -b -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
Sur le deuxième serveur:
ipchains -A forward -s 192.168.2.0/24 -d ! 192.168.1.0/24 -j MASQ ipchains -A forward -b -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
La première ligne MASQ tout ce qui ne vas pas à l'autre réseau pour que vous puissiez toujours accéder à internet et la deuxième ligne "forward" entre les 2 réseaux. Et voilà, vous pouvez partir vpnd en tappe "vpnd -l" et tester votre vpn :)
3.6.3.2. FreeS/WAN
3.6.4. 802.11b (Wi-Fi 2.4000 GHz to 2.4835 GHz)
(Pre-scriptum: je n'ai pas encore de Wi-Lan alors toutes ces informations ne sont qu'un résumé de ce que j'ai pu retrouver sur internet)
Les réseaux sans-fils sont de plus en plus utilisés en entreprise. Ils ont malheureusement (ou heureusement pour ceux qui ont maintenant une connection au net gratuit partout en ville?:) été démontrés insécuritaire au niveau physique car l'encryption WEP (Layer 2) dont se sert l'équipement Wi-Fi a été cracké (Tant la 64-bit que la 128-bit on été cracké car la clé n'est que de 24-bit pour l'initialisation dans les deux cas et la sécurité n'augmente donc pas de facon linéaire (semble-t-il :-) ) Le logiciel AirSnort va probablement vous convaincre de ne pas faire confiance à l'impémentation matériel de la sécurité sur votre réseau sans-fils. Premièrement, vous devriez traiter votre réseau sans-fils comme si il s'agissait d'un hub publique sur votre galerie. Vu que vous ne pouvez pas faire confiance au réseau vous devriez probablement faire les choses suivantes:
1- Activez WEP même si c'est insécure, au moin ca fait une barrière de plus et c'est fait en hardware. Ca évitera les "drive-by" cracker qui ne vous en veulent pas personnellement et ne souhaite que lire slashdot sur la route! :-)
2- Changer votre SSID et mot de passe par défault et désactiver le broadcast du SSID si votre équipement le permet. Ne mettez pas votre adresse comme SSID afin d'éviter de facilier que les intrus puisse savoir où se placer pour avoir une meilleur signale. En fait, ne mettez rien qui puisse être utile à quelqu'un... appelez votre réseau "net1" par exemple.
3- Si vous n'utilisez votre point d'accès qu'à l'intérieur d'un building, déplacez le vers le centre afin de minimiser les radiations vers l'extérieur.
4- servez vous de l'authentification par adresse MAC (Oui ca peut être cloné mais il faut mettre toutes les chances de son côté :)
5- Désactivez DHCP et utilisez des adresses IP static. (Rendant l'accès au réseau, une fois de plus, juste un peu plus compliqué (utilisation de sniffer requise, etc))
6- Si vous n'avez pas encore acheté votre matériel, assurez vous qu'il a un ROM "flashable" afin de mettre votre matériel à jour si et quand il y aura des nouvelles versions des logiciels de sécurité (remplaçant ceux qui sont actuellement plutôt inéficaces.)
7- Finalement, utilisez un niveau d'authentification suplémentaire RADIUS (Remote Authentication Dial-in User Service) et implémentez votre VPN dans un DMZ (De-Militarized Zone). Utilisez ensuite FreeS/WAN et iptables pour créer un réseau qui ne permet l'accès qu'à ceux qui peuvent utiliser FreeS/WAN (et peut être SSH)
3.6.5. Les Routeurs (DDoS?)
Pour prévenir un déni de service distribué (DDoS), allez voir antioffline!
3.7.1. La cryptographie
GPG/intro: Patie-1 Patie-2
loopback FS encrypté,(?)
3.7.2. Les Buffers Overflow (Débordement de tampon? Ecraser la pile? Détournement de pointeurs? :-)
3.7.3. Les types d'attaque
Worms: Les worms sont des logiciels qui se répliquent eux même. Mais contrairement aux virus, ils ne modifient pas d'autres programmes et ne sont pas activés par les utilisateurs. Ils attaquent d'autres systèmes en utilisant le réseau. Le plus célèbre de ceux ci est le fameux internet worm du 2 novembre 1988 qui exploitait des failles dans sendmail et fingerd et qui s'étant éxécuté plus rapidement que prévu, réussi à faire tomber 6000 serveurs, soit à peu près tout le réseau. Les worms se font plus rare de nos jours, mais merci à Microsoft, ca recommence ;-).
Trojan: Un trojan est une application qui se déguise comme une autre, elle prétend faire une action pour l'usager mais en arrière plan elle peut infecter le système ou encore cacher des données en les filtrants. Cette technique est souvent utilisée pour cacher ses traces sur un serveur dont on a pris le contrôle.
crack de l'extérieur: Une attaque de l'extérieur (C'est à dire par le réseau) est plus complexe qu'une attaque où on a déjà un compte sur la machine visé. Il faut utiliser plusieurs techniques pour ramasser de l'information sur la machine à attaquer et ce dans le but de pouvoir trouver une faille à exploiter.
Attaque physique: Si quelqu'un arrive à accéder physiquement à la machine, en règle générale vous avec perdu.. La seul chose que vous pouvez faire pour prévenir que des données soit copiées c'est de les avoirs encryptées avant.
Spoofing: Une technique qui consiste à envoyer des paquets vers une machine en se faisant passer pour une autre en utilisant des addresses sources fausses. Il serait ainsi possible d'avoir accès à des services se servant d'authentification au niveau des adresses. Cette technique est très difficile à utiliser sur internet car il faut pouvoir prédire les numéros de séquences des paquets sans pouvoir les recevoirs (puisque les réponses vont vers la fausse adresse) et cela n'est pas facile sauf avec des serveurs windows... (je n'ai jamais dit que je serai objectif! ;)
DoS: Une technique utilisé pour rendre inutilisable un réseau ou un ordinateur en l'inondant de requête en saturant la connection ou les capacitées de la machine ou encore en exploitant une faille dans un programme qui le lancera dans une boucle infinie, consommant ainsi toutes les ressources disponibles.
Buffer overflow: Voir la section plus haut.
www et CGI: Il y a souvent des erreurs de programmation dans les scripts CGI qui permette de passer des paramètres non désirés au serveur afin de faire éxécuter des commandes sur le serveur et donc modifier des fichiers.
3.7.4. Comment se déroule une attaque et les techniques employées
Premièrement le cracker va vouloir trouver le plus d'information possible sur la machine qu'il attaque et celles qui l'entourent en faisant le moin de bruit possible (bon c'est pas exactement le cas si dessous mais je suis pas exactement proféssionnel dans le domaine, si quelqu'un pouvait mieux simuler ce qui se passe réellement, j'en serai très heureux!)
server:~$ host -l adresse.com
server:~$ traceroute adresse.com
server:~$ showmount -e addresse.com
server:~$ finger @adresse.com
server:~$ rpcinfo -p adresse.com
server:~$ nmap -O -sS addresse.com
server:~$ dig @dns.adresse.com version.bind chaos txt
Social Engineering, dumpster diving...?
3.7.5. Systèmes automatique de détection et de prévention d'intrusion réseau
Un système automatique de détection d'intrusion réseau est un ensemble de logiciels ou de dispositifs qui vous permettent de constater des comportements anormaux se produisant sur le réseau.
Il existe plusieurs façons d'installer un tels systèmes.
snort: Une de ces façons est de mettre en place une interface qui écoute tout le traffique dans un endroit ou la plus grande partie du traffique du réseau circule. Ce logiciel cherche ensuite pour des signatures connues d'attaques. (IDS)
Honey-pot: Une autre facon de faire, qui est par contre beaucoup plus difficile à mettre correctement en place, est d'installer un ordinateur avec un système semblable aux systèmes de production du réseau, dans lequel on s'arrange pour laisser un trou de sécurité connu pour que quelqu'un puisse s'y introduire et ainsi qu'on puisse comprendre les raisons de la pénétration et peut être apprendre des nouvelles techniques. Biensûr c'est une technique très risquée si elle n'est pas faite correctement et éventuellement l'intru va réaliser qu'il est sur un système bidon.
LIDS:LIDS est un patch au noyau qui permet de controller l'accès au "CAPABILITIES" du noyau de facon très stricte et cela à un point telle qu'il est possible de rendre l'usager root inofensif..
portsentry: Ce logiciel permet de détecter des gens qui scannent vos ports en temps réel et y réagir de différentes façons. Il peut par exemple laisser tomber la connection qu'il détecte comme anormal avec l'aide de route, ipchains ou hosts.deny.
IP Personality: Ce patch au kernel permet de modifier les spécifications dans la pile TCP/IP du noyau pour éviter que les outils comme nmap ne puissent détecter la version du système employé!
4. Conclusion
Si un cracker possède un "exploit" qui n'est même pas publique la seul chose que vous pouvez faire pour tenter de prévenir une intrusion est de bien s'y préparer. Pour cela, il faut donc avoir une politique de firewall qui a été bien implémentée et testée, des machines qui sont constemment patché aux dernières versions et dont les programmes SUIDs sont bien connus et gérés. Les services superflus désactivés et les autres hautement sécurisés. Finalement, une augmentation de la sécurité de la machine au niveau des shells, du kernel, du boot etc, est aussi important!
La sécurité est un travail de tout les jours, un système qui est sécuritaire aujourd'hui ne le sera pas forcément demain donc il faut se tenir à jour par les listes de discussions comme bugtraq pour ne pas manquer des bugs qui pourraient affecter votre distribution ou même celle des gens qui sont autour de votre réseau. Il est aussi important d'être au courant des conceptes de sécurités.
5.1. Que faire après avoir constaté une intrusion?
server:~#
Voici quelques suggestions:
(à faire avec des éxécutables dans lesquels vous pouvez avoir confiance!)
Examinez les fichiers de log, les .bash_history et tout autre fichier laissant des traces.
Vérifiez les fichiers suid et sgid.
Vérifiez les éxécutables qui se trouve sur le système. (Probablement avec tripwire ou AIDE etc)
Vérifiez qu'il n'y a pas un sniffer qui est s'éxécute.
Vérifiez ce qui se trouve dans les "cron" et "at" de chaque usager.
Vérifier qu'il n'y a pas de services non authorizés qui s'éxécute.
Vérifier les fichiers de configuration dans /etc, surtout password, group et les configurations réseaux.
Vérifier partout pour voir si vous ne trouvez pas des fichiers étrange ou caché (comme des répertoire ".. " ou "...").
Vérifier les autres machines du réseau local!
5.2. Foire aux questions (FAQ)
5.2.1. Qu'es ce qu'un script kittie?
C'est un chat qui roule sur votre clavier...(Il est temps d'aller se coucher.)
5.2.2. Pourquoi es que je n'ai rien appris?
Probablement parceque vous n'avez pas participé à la création de ce document *hint-hint* :-)
5.2.3. Cette FAQ va t elle rester inutile comme c'est le cas actuellement?
hrm, non, des suggestions?
5.2.4. foo-quoi?
FOOBAR!
5.3. Sources d'informations supplémentaires
Plusieurs sites web intéréssants:
5.4. Trucs et astuces
Au lieu d'utiliser "ps aux | grep blabla" il est plus simple de rajouter à votre .bashrc la ligne suivante qui va permettre de simplement tapper psgrep blabla:
alias psgrep='ps aux | grep'
Tuer un zombie process?
cacher des processus?
Un remerciement particulier à:
7.1 Ajouter des sections, mettre de l'ordre et corriger les phote! (me relire! =)
Recruter de l'aide pour écrire des sections du comment-faire. ;-)