Un petit guide pour la sécurité
Alexandre Viardin (Mirabellug)
copyright Alexandre Viardin Novembre 2003
Table des matières
1 Sécurisation de base 8
1.1 Premier conseil : Verrouillez les stations . . . . . . . . . . . . . 10
1.2 Pour Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Pour Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Le lecteur de disquettes . . . . . . . . . . . . . . . . . . . . . . 10
1.5 Le lecteur de CDROM . . . . . . . . . . . . . . . . . . . . . . 11
1.6 N’oubliez pas le mot de passe pour le BIOS . . . . . . . . . . 11
2 La collecte d’informations 12
2.1 Le Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.1 Qu’est ce qu’un scanner? . . . . . . . . . . . . . . . . . 14
2.1.2 Comment marche Nmap? . . . . . . . . . . . . . . . . 16
2.1.3 La détermination du système d’exploitation avec Nmap 18
2.1.4 Quel est l’intêret d’utiliser Nmap? . . . . . . . . . . . 19
2.2 Identifier les versions des logiciels en écoute . . . . . . . . . . 21
2.2.1 Netcat . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Les failles applicatives 24
3.1 Les installations par défaut . . . . . . . . . . . . . . . . . . . . 26
3.2 Les mauvaises configurations . . . . . . . . . . . . . . . . . . . 26
3.3 Les bogues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.1 Des dénis de services applicatifs . . . . . . . . . . . . . 26
3.3.2 Outrepassement de droits . . . . . . . . . . . . . . . . 27
3.3.3 Les scripts . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4 Les exploits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4 Les outils indispensables pour la protection 29
4.1 Le firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.1 La configuration . . . . . . . . . . . . . . . . . . . . . . 31
4.1.2 Les attaques contre les firewalls . . . . . . . . . . . . . 31
4.2 Les NIDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.1 Prelude . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.2 Snort . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.3 Le tunneling . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3.1 Le protocole AH . . . . . . . . . . . . . . . . . . . . . 36
4.3.2 Le protocole ESP . . . . . . . . . . . . . . . . . . . . . 36
4.3.3 Le protocole IPcomp . . . . . . . . . . . . . . . . . . . 36
4.3.4 Le protocole IKE . . . . . . . . . . . . . . . . . . . . . 36
4.3.5 Les deux modes de fonctionnements de IPsec . . . . . . 37
4.3.6 Les limitations d’IPsec . . . . . . . . . . . . . . . . . . 37
4.4 Nessus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.4.1 Pour obtenir tout sur Nessus . . . . . . . . . . . . . . . 38
4.5 User Mode Linux - UML . . . . . . . . . . . . . . . . . . . . 39
5 Surveillance - Dissimulation - Maintien d’accès 40
5.1 Les chevaux de Troie . . . . . . . . . . . . . . . . . . . . . . . 42
5.2 Les backdoors . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.2.1 Les backdoors présentes dans les logiciels. . . . . . . . 43
5.2.2 Les backdoors dédiées aux connexions à distance . . . . 43
5.3 Les Rootkits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.4 L’interception des mots de passe en réseau. . . . . . . . . . . . 47
6 Dispositifs destructeurs 49
6.1 Le virus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.2 Les vers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3 Les bombes logiques . . . . . . . . . . . . . . . . . . . . . . . 53
6.4 Les attaques par déni de services . . . . . . . . . . . . . . . . 54
6.4.1 Le SYN flood . . . . . . . . . . . . . . . . . . . . . . . 54
6.4.2 L’UDP Flood . . . . . . . . . . . . . . . . . . . . . . . 54
6.4.3 Fragmentation de paquets . . . . . . . . . . . . . . . . 55
6.4.4 Ping of death . . . . . . . . . . . . . . . . . . . . . . . 55
6.4.5 Attaque par réflexion : Smurfing . . . . . . . . . . . . . 55
6.4.6 Dénis de services distribués . . . . . . . . . . . . . . . 56
6.4.7 Bombes e-mail . . . . . . . . . . . . . . . . . . . . . . 56
7 Sécurisation des mots de passe 57
7.1 L’attaque par dictionnaire . . . . . . . . . . . . . . . . . . . . 59
7.2 Le brute forcing . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.3 Tester la fiabilité de vos mots de passe! . . . . . . . . . . . . . 59
7.4 Choisir le bon mot de passe . . . . . . . . . . . . . . . . . . . 60
7.5 Prévenir l’utilisateur . . . . . . . . . . . . . . . . . . . . . . . 61
8 La base des attaques réseaux 62
8.1.1 ARP-Poisoning : . . . . . . . . . . . . . . . . . . . . . 64
8.1.2 Désynchronisation TCP : . . . . . . . . . . . . . . . . . 65
8.2 MIM - Man in the Middle . . . . . . . . . . . . . . . . . . . . 67
8.3 Encapsulation d’IP dans d’autres protocoles. . . . . . . . . . . 68
9 Description d’attaques sur différents protocoles 69
9.1 DHCP : Dynamic Host Configuration Protocol . . . . . . . . . 71
9.1.1 Attaque par épuisement de ressources . . . . . . . . . . 71
9.1.2 Faux serveurs DHCP . . . . . . . . . . . . . . . . . . . 71
9.2 DNS : Domain Name Server . . . . . . . . . . . . . . . . . . . 73
9.2.1 Le DNS ID spoofing . . . . . . . . . . . . . . . . . . . 73
9.2.2 Le DNS cache poisoning . . . . . . . . . . . . . . . . . 74
9.3 FINGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
9.4 FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
9.4.1 Le serveur FTP anonyme . . . . . . . . . . . . . . . . . 79
9.5 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9.5.1 Les serveurs trop bavards . . . . . . . . . . . . . . . . 81
9.5.2 Vulnérabilités liées aux applications web . . . . . . . . 81
9.6 IDENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.7 IP et l’IP-Spoofing . . . . . . . . . . . . . . . . . . . . . . . . 84
9.7.1 Un peu de théorie . . . . . . . . . . . . . . . . . . . 84
9.7.2 Prévenir l’IP spoofing grâce à Nmap . . . . . . . . . . 87
9.8 NETBIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9.9.1 Les attaques . . . . . . . . . . . . . . . . . . . . . . . . 91
9.10 NIS : Network Information Service . . . . . . . . . . . . . . . 92
9.10.1 Les attaques . . . . . . . . . . . . . . . . . . . . . . . . 92
9.11 PORTMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
9.12 Le protocole SMB . . . . . . . . . . . . . . . . . . . . . . . . . 94
9.12.1 Les scans de SMB shares . . . . . . . . . . . . . . . . . 94
9.13 SMTP - Les services de messagerie . . . . . . . . . . . . . . . 96
9.14 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
9.14.1 Le ”SQL-INJECTION” . . . . . . . . . . . . . . . . . . 97
9.15 SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
9.16 TELNET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.17 XWINDOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.17.1 Les attaques . . . . . . . . . . . . . . . . . . . . . . . . 100
9.18 Peer To Peer (eDonkey, Kazaa ) . . . . . . . . . . . . . . . . 101
10 Sécurité avancée 102
10.1 L’architecture sécurisée . . . . . . . . . . . . . . . . . . . . . . 104
10.1.1 Le réseau de départ . . . . . . . . . . . . . . . . . . . . 104
10.1.2 Le premier niveau de sécurité . . . . . . . . . . . . . . 105
10.1.3 NDIS : Deuxième niveau de sécurisation . . . . . . . . 105
10.1.4 Les niveaux plus élevés . . . . . . . . . . . . . . . . . 106
10.2 Développez vos propres utilitaires sécurité . . . . . . . . . . . 108
10.2.1 Le programme . . . . . . . . . . . . . . . . . . . . . . . 108
10.2.2 Comment obtenir et compiler le source entier du pro-
10.2.3 Documents . . . . . . . . . . . . . . . . . . . . . . . . 118
11 Annexes 119
11.1 Les sites et revues à consulter régulierement . . . . . . . . . . 120
11.2 Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Avant-propos
”Qui connaˆ?t l’autre et se connaˆ?t, en cent combats ne sera point défait; qui ne connaˆ?t l’autre mais se connaˆ?t, sera vainqueur une fois sur deux; qui ne connaˆ?t pas plus l’autre qu’il ne se connaˆ?t sera toujours défait.”
L’art de la guerre - Sun Tzu
Ce guide a été réalisé suite à un audit de sécurité que j’ai réalisé pour mon école et aux deux conférences sur la sécurité réseau présentées au groupe d’utilisateurs Linux de NANCY (coucou le Mirabellug). Je ne suis pas spécialiste en sécurité réseau; j’ai juste écrit ce guide dans le but de donner à des administrateurs ou à des particuliers, un descriptif technique et un manuel d’autoformation à la sécurité réseau.
La plupart des administrateurs ne sont pas spécialistes en securité, et peuvent
être perdus devant un problème de ce type. Le masse d’informations disponible sur Internet est parfois confuse, dense ou très technique. Ce guide sert de point de départ et d’introduction à la sécurité.
Il a été pensé dans un but évolutif. Si vous voulez participer en écrivant ou en complétant des chapitres, n’hésitez pas à me contacter sur . Le principe est simple : une description assez succinte sur une attaque et ensuite une description complète des méthodes de protection. Vos expériences personnelles et vos remarques sont aussi les bienvenues.
Evidemment, ce guide est sous license GPL donc gratuit. La seule récompense que pourront recevoir les éventuels participants est la mention de leurs noms en tant que collaborateurs.
Ce guide se compose d’une dizaines de chapitres.
Le premier chapitre montre comment sécuriser une station pour éviter toutes tentatives de piratage par un accès physique.
Le deuxième chapitre décrit le fonctionnement des outils de récupération d’informations à distance, notamment les scanners. Il montre l’utilité qu’ils ont pour vous protéger.
Le troisième chapitre introduit la notion de failles.
Le quatrième chapitre introduit différentes notions sur les firewalls et les principaux autres systèmes de protection logiciels.
Le cinquième chapitre explique comment un pirate dissimule sa présence sur un système.
Le sixième chapitre s’intéresse aux dispositifs destructeurs (virus, bombes mails ).
Le septième chapitre décrit les attaques sur les fichiers de mots de passe.
Les huitième et neuvième chapitres traitent de différents problèmes posés par certains protocoles réseaux.
Le dixième chapitre est divisé en deux parties : la première explique comment architecturer son réseau de fa¸con sécurisée. La deuxième partie est un cours sur le developpement d’outils dédiés uniquement à la sécurité.
Ou` trouver ce guide?
C’est très simple, il y a deux adresses :
Le site officiel :
Sur le site du Mirabellug :
Les OS visés :
La majorité des programmes défensifs utilisés et décrits dans ce guide sont disponibles sous LINUX. Je n’oublierai pas de parler de la sécurité pour les produits Microsoft. Cependant, Linux possède une certaine avance sur Microsoft dans le domaine de la sécurité (notamment par un plus grand nombre de logiciels performants et gratuits).
Les autres OS comme SunOS, VMS, MacOS, Plan9, Novell, seront passés sous silence mais si vous voulez voir des chapitres précis sur certains OS apparaitre, contactez moi par mail.
Bonne Lecture!
Chapitre 1
Sécurisation de base
Introduction
Dans ce chapitre, nous ne nous focaliserons pas sur un serveur dédié à un service particulier, mais plutôt sur les machines constituant les clients. Ces machines sont en accès libre dans une salle non surveillée.
L’objectif est d’empêcher une personne mal intentionnée d’obtenir les accès adiministrateur sur la machine qu’elle utilise. La plupart des utilitaires de piratage ont besoin des accès administrateur pour fonctionner; sans ces accès, la capacité de nuire est fortement diminuée.
1.1 Premier conseil : Verrouillez les stations
N’hésitez pas à poser un cadenas sur les tours des machines, cela empêchera tout d’abord le vol de matériel, mais cela évitera aussi d’avoir des disques durs montés en ”secret” avec toute une panoplie d’utilitaires installés dessus.
Le conseil à suivre impérativement (et vous comprendrez pourquoi en lisant les deux chapitres suivants) : il faut désactiver le boot sur le lecteur de disquette et sur le lecteur de CDROM.
1.2 Pour Linux
Evitez d’avoir l’option ”failsafe” au démarrage proposé par Lilo. Cette option peut permettre d’obtenir les accès root (sans mot de passe) pour la maintenance du système.
1.3 Pour Windows
Le système de fichier NTFS permet une sécurisation accrue par rapport aux systèmes de fichier FAT et FAT 32. Si vos machines fonctionnent avec de la FAT, passez en NTFS.
Je déconseille fortement d’utiliser Windows 95, 98 et Me, le niveau de sécurité offert par ces OS en natif n’étant pas assez élevé.
1.4 Le lecteur de disquettes
Le programme NTFS2DOS (sous DOS) permet de changer les partitions NTFS en partitions FAT et de pouvoir accéder à leurs contenus sans restrictions. NTFS2DOS est lancé depuis une disquette de boot DOS.
1.5 Le lecteur de CDROM
Des utilitaires comme Knoopix (un OS Linux bootant sur un seul CD et contenant lui aussi un nombre impressionnant d’utilitaires divers) peuvent être utilisés pour monter les différents systèmes de fichiers présents sur le(s) disque(s) dur(s).
1.6 N’oubliez pas le mot de passe pour le
BIOS
N’oubliez de protéger l’accès du BIOS par un mot de passe! Attention certains BIOS peuvent comporter des failles logicielles permettant d’outrepasser ces protections. Encore une fois, il ne faut pas oublier de cadenasser les tours, afin d’éviter à des utilisateurs (encore) mal intentionnés de retirer la pile du BIOS et d’outrepasser la protection par mot de passe.
Chapitre 2
La collecte d’informations
Introduction
Dans ce chapitre, nous allons décrire le fonctionnement des outils permettant de récupérer des informations à distance. Ces utilitaires sont fréquemment utilisés par les pirates pour préparer de futures attaques. C’est pour cette raison qu’il est indispensable de les décrire dès le début. Vous apprendrez également à les utiliser pour votre propre protection.
2.1 Le Scanner
L’objectif du pirate est de repérer les serveurs offrant des services particuliers et de les identifier. Pour obtenir ces informations, le pirate va utiliser
un scanner.
Le but de ce section est de présenter des méthodes de protections contre le scan (en utilisant des règles de firewalling sous iptables/ipchains par exemple) et de savoir utiliser un scanner pour anticiper les futures attaques.
Le scanner décrit dans ce chapitre est Nmap, un des scanners les plus utilisés et un des plus performants.
Attention : pour une capacité optimale de fonctionnement, Nmap doit être utilisé avec les accès root!
2.1.1 Qu’est ce qu’un scanner?
C’est très simple : lorsqu’un serveur offre un service particulier (Web, messagerie, mail), il exécute un programme assurant ce service. Ce programme est en attente de connexions.
Les clients devant accéder à ce service doivent connaˆ?tre l’adresse IP du serveur et le numéro de port associé au service.
Ce numéro de port aété attribué par l’OS du serveur au programme exécutant ce service.
La plupart des services ont un numéro de port bien défini. Par exemple, un serveur de messagerie utilise le port 25, un serveur Web le port 80
Lorsqu’un service est en écoute sur un port, on dit que le numéro de port associé à ce service est ouvert.
L’intérêt du scanner est très simple : il permet de trouver dans un délai très court, tous les ports ouverts sur une machine.
Il existe différents types de scanner, certains se contentent juste de donner le listing des ports ouverts, de donner le type et la version de l’OS tournant sur le serveur (ces fonctionnalités seront décrites dans ce chapitre avec Nmap). D’autres scanners comme Nessus permettent de tester différentes failles connues sur ces services ( Nessus sera décrit dans la section 4.4).
Exemple avec Nmap
Utilisons Nmap pour connaˆ?tre les services en écoute sur la machine d’adresse
IP 192.168.1.1
[ /root]# nmap 192.168.1.1
Starting nmap V. 2.54BETA31 ( ) Interesting ports on (192.168.1.1) :
(The 1544 ports scanned but not shown below are in state : closed)
Port State Service
21/tcp open ftp
53/tcp open domain
80/tcp open http
110/tcp open pop-3
111/tcp open sunrpc
113/tcp open auth
631/tcp open cups
845/tcp open unknown
901/tcp open samba-swat
10000/tcp open snet-sensor-mgmt
Nmap run completed – 1 IP address (1 host up) scanned in 2 seconds.
On peut observer ici que des serveurs FTP, DNS, WEB, POP-3 sont en attente de connexions.
2.1.2 Comment marche Nmap?
Je présenterai de manière très succinte Nmap et me focaliserai principalement sur les fonctions les plus utilisées.
Pour connaˆ?tre les ports ouverts sur une machine, Nmap procède à l’envoi de paquets sur tous les ports de cette machine et analyse les réponses. Bien suˆr, il y a différents types de scans, donc différents types d’envois et donc, différents types de réponses.
Nous nous intéresserons aux scans utilisant le protocole TCP (les scans UDP et ICMP étant possibles eux aussi).
Le scan en ”vanilla TCP connect”
Nmap procède à l’appel de la fonction connect() sur tous les ports de la machine. Ce type de scan est facilement repérable.
Le scan en ”vanilla TCP connect” est le scan par défaut avec Nmap, la commande est :
[ /root]# nmap [ip de la machine cible] ou
[ /root]# nmap -sT [ip de la machine cible]
Les scans furtifs
Nous rentrons maintenant dans une classe de scans plus difficiles à détecter : - Le scan en connexion demi-ouverte ou ”Syn-scan” :
Nmap envoie sur chaque port un paquet TCP avec le flag SYN armé; si un port est ouvert, il renverra un paquet avec les flags SYN et ACK armés.
Illustration
La commande se fait par l’appel de nmap avec l’option -sS : [ /root]# nmap -sS [ip de la machine cible]
- Les scans Xmas, FIN et NULL.
Le scan FIN consiste en l’envoi de paquets TCP avec seulement le flag FIN
armé :
La commande se fait par l’appel de nmap avec l’option -sF :
[ /root]# nmap -sF [ip de la machine cible]
Le scan NULL consiste en l’envoi de paquets TCP avec seulement le flag NULL armé :
La commande se fait par l’appel de nmap avec l’option -sN :
[ /root]# nmap -sN [ip de la machine cible]
Le Xmas scan (traduisez le scan de No¨el) consiste en l’envoi de paquets TCP avec les flags FIN/URG/PUSH armés.
[ /root]# nmap -sX [ip de la machine cible]
Pour ces trois types de scans, les systèmes répondent avec un paquet RST si le port est fermé et ne répondent pas si le port est ouvert. Le NULL scan ne fonctionne pas contre des plateformes Microsoft.
Illustration
2.1.3 La détermination du système d’exploitation avec Nmap
Si on lance Nmap avec l’option -O :
[ /root]# nmap -O 192.168.1.1
Starting nmap V. 2.54BETA31 ( ) Interesting ports on (192.168.1.1) :
(The 1544 ports scanned but not shown below are in state : closed)
Port State Service
21/tcp open ftp
53/tcp open domain
80/tcp open http
110/tcp open pop-3
111/tcp open sunrpc
113/tcp open auth
631/tcp open cups
845/tcp open unknown
901/tcp open samba-swat
10000/tcp open snet-sensor-mgmt
Remote operating system guess : Linux 2.2.12 - 2.2.19
Nmap run completed – 1 IP address (1 host up) scanned in 3 seconds
Notez bien l’avant-dernière ligne :
Remote operating system guess : Linux 2.2.12 - 2.2.19
Nmap parvient à déterminer le système d’exploitation tournant sur la machine cible. La machine cible utilisait un noyau 2.2.19. Nmap ne s’est pas trompé.
Il faut savoir que chaque système d’exploitation construit ses paquets d’une manière bien particulière. Certains champs au niveau de la couche IP ou TCP sont propres à chaque OS. Nmap contient une base de données d’un grand nombre d’OS. Nmap envoie donc des paquets tests à la machine cible et compare les paquets re¸cus en réponse à ceux de sa base de données et en déduit le type d’OS.
Cette base de données est mise à jour en fonction des différentes version de Nmap.
2.1.4 Quel est l’intêret d’utiliser Nmap?
Nmap est un logiciel très complet et très évolutif, et il est une référence dans le domaine du scanning.
Comment s’en protéger?
Configurer votre firewall pour empêcher les scans
[[email protected] /root]# iptables -A FORWARD -p tcp –tcp-flags SYN,ACK, FIN,RST RST -m limit –limit 1/s -j ACCEPT
Cette commande permet de détecter l’envoi un grand nombre de paquets TCP avec les flags FIN et/ou SYN et/ou ACK et/ou RST armé(s). Vérifiez que votre firewall (si ce n’est pas iptables) supporte la détection de scans.
(Pour plus de détails sur cette commande, je vous conseille de lire le document ”Packet Filtering HOWTO : Using iptables” (Chapitre 7.3) de Rusty Wagner).
Documents
Divers articles écris par le développeur de Nmap sur le scanning (en anglais) :
?p=51\&a=11 ?p=54\&a=9 ?p=57\&a=7
2.2 Identifier les versions des logiciels en écoute
Maintenant que notre pirate connaˆ?t les différents services en écoute, son objectif va être de découvrir les noms et les versions des logiciels utilisés pour assurer ces services.
L’objectif de ce chapitre est de présenter une parade pour éviter de donner trop d’informations sur votre système.
Le pirate peut déjà essayer de se connecter sur différents ports grâce aux programmes clients associés pour glaner des informations.
Rien que telnet donne beaucoup d’informations :
[ /root]# telnet 192.168.1.1
Trying 192.168.1.1
Connected to 192.168.1.1.
Escape character is ”CTRL-C”.
Welcome to muetdhiver
Linux Mandrake release 7.2 (Odyssey) for i586 Kernel 2.2.17-21mdk on an i586 login :
Avec la réponse :
Linux Mandrake release 7.2 (Odyssey) for i586
Kernel 2.2.17-21mdk on an i586
Trop de renseignements apparaissent.
Même si le port telnet est fermé, le pirate peut glaner d’autres informations sur les autres services.
Exemple d’un telnet sur le port FTP ( port 21)
[ /root]# telnet 192.168.1.1 21
Trying 192.168.1.1
Connected to 192.168.1.1.
Escape character is ’CTRL-C’.
220 ProFTPD 1.2.5rc1 Server (ProFTPD Default Installation) [neuromancer] La ligne qui nous intéresse le plus est celle-ci :
220 ProFTPD 1.2.5rc1 Server (ProFTPD Default Installation) [neuromancer]
La version du logiciel nous est donnée. Le pirate va alors rechercher des informations sur les faiblesses de sécurité de celui-ci.
Cependant, sur certains services, le client telnet sera inefficace. Le pirate peut alors utiliser un programme con¸cu pour écrire et lire de données sur machine cible et sur le port voulu. Ces programmes permettent d’envoyer des scripts directement sur le logiciel souhaité sans se soucier des limites pro-
tocolaires.
Le plus réputé de ces programmes est sans doute Netcat.
2.2.1 Netcat
Netcat permet d’établir une connexion (TCP ou UDP) sur un port souhaité et d’y envoyer ou d’y recevoir des données.
Voici un exemple :
[ /root]# nc 192.168.1.1 21
220 ProFTPD 1.2.5rc1 Server (ProFTPD Default Installation) [neuromancer]
On obtient directement la version du logiciel utilisé. Netcatcomporte plein d’autres fonctionnalités (comme l’envoi de scripts ).
Le pirate n’a plus qu’à trouver une faille applicative (voir chapitre suivant) sur le logiciel correspondant.
Comment s’en protéger?
Retirer les bannières donnant les versions de logiciel et les messages d’aide ou de bienvenue d’un service réseau en écoute qui peuvent donner des informations sur votre système.
Utilisez netcat contre vos serveurs pour repérer les services trop ”bavards”.
Chapitre 3
Les failles applicatives
Introduction
Nous allons aborder dans ce chapitre les failles liées aux applications utilisées.
Nous nous focaliserons principalement sur les failles logicielles : les failles applicatives.
3.1 Les installations par défaut
Lors d’une installation, beaucoup de services peuvent être installés par défaut (un serveur Web, FTP ). Ces services peuvent contenir les différents types de failles introduites auparavant.
L’important est de bien contrôler lors de l’installation, les services qui seront installés sur le système. Pour être bien suˆr de soi, il est aussi recommandé de ”scanner” la machine pour voir ce qui y tourne (voir section 2.1).
Même si certains logiciels ne comportent pas de failles connues, ils peuvent quand même donner des informations aux pirates (voir section 2.2).
3.2 Les mauvaises configurations
Lorsqu’une application est mal paramétrée, elle peut laisser l’accès libre à certaines bases de données sensibles (fichiers de mots de passe, d’utilisateurs) ou de permettre d’exécuter des commandes ou des scripts malveillants.
Il est important de bien lire le manuel avant d’activer un service (RTFM!) et de bien définir le ”qui fait quoi”.
Ce principe est simple : il suffit de bien définir les utilisateurs et les groupes et de limiter leurs droits sur certains types de fichiers et certaines opérations d’exécution de commandes système.
Le plus important est de restreindre au maximun les accès à certains fichiers sensibles et aux commandes systèmes.
3.3 Les bogues
Les bogues sont dus à des erreurs de programmation. Les bogues font apparaˆ?tre différents types de problèmes de securité :
3.3.1 Des dénis de services applicatifs
Ce type de faille empêche le logiciel de fonctionner et ainsi de répondre aux requêtes demandées (d’ou` l’appellation déni de service). La technique est simple, il suffit d’utiliser un bogue connu qui va faire planter le logiciel assurant un service.
3.3.2 Outrepassement de droits
3.3.3 Les scripts
Malheureusement, une mauvaise programmation de scripts ou l’utilisation de fonctions boguées peut être source de failles de sécurité. Il convient d’être très attentif au niveau du développement d’un script.
3.4 Les exploits
Pour exploiter ces bogues, le pirate fait appel à des ”exploits”. Ces ”exploits” sont en fait de petits programmes permettant d’exploiter une faille dans un but précis (obtenir un interpréteur de commandes, accéder à certains fichiers, augmenter ses droits ).
Les exploits peuvent aussi fonctionner à distance, pour l’obtention d’un shell (parfois avec les droits administrateur) sans mot de passe, ni nom d’utilisa-
teur.
Comment s’en proteger?
1 - Recensez les applications vulnérables.
Il est toujours bon de connaˆ?tre les failles de vos logiciels avant les pirates. Des sites comme celui du CERT (Computer Emergency Response Team) publie un rapport sur toute nouvelle faille de sécurité. Le CERT permet aussi d’obtenir de l’aide en cas de piratage.
Le site du CERT : (Anglais)
Les archives bugtraq font partie des meilleures sources sur les nouvelles vulnérabilités. Ces archives donnent des descriptions très précises sur des nouvelles failles de sécurité.
Le site BUGTRAQ : (en anglais) (en fran¸cais)
Certains sites comme ou www.securityfocus. com contiennent aussi de nombreuses informations. Le site securityfocus donne un classementdes failles en fonction du type d’architecture; il est facile de trouver rapidement le logiciel concerné.
2 - Limitez les programmes s’exécutant avec les droits administrateur.
Il est toujours bon de répérer les programmes s’exécutant avec les droits administrateur. Ainsi, vous pouvez changer leurs droits pour qu’ils ne deviennent pas un point critique pour la vulnérabilité du système.
Sous linux, la simple commande :
[ /root]# find / -perm +6000
3 - Les autres solutions.
Les NDIS (décrit dans le chapitre suivant) peuvent vous permettre de repérer les attaques exploitant des failles connues sur certains types de logiciel.
On peut aussi ”patcher” son noyau pour éviter l’exécution d’exploits utilisant des bogues de dépassement de buffer. Le patch OpenWallvous permet de protéger votre noyau Linux.
Chapitre 4
Les outils indispensables pour la protection
Introduction
Les firewalls, les tunnels et les IDS/NDIS sont des outils indispensables pour détecter, parer ou éviter de nombreuses attaques. Nous les décrirons dans ce chapitre, ainsi que la manière de les utiliser de fa¸con optimale.
4.1 Le firewall
La configuration d’un firewall peut s’avérer être un sujet très difficile à traiter. Cette configuration est surtout établie en fonction de vos besoins per-
sonnels.
L’objectif de ce chapitre est de donner des conseils à suivre pour bien utiliser un firewall. Ensuite, nous nous intéresserons aux différentes méthodes d’attaques contre les firewalls.
4.1.1 La configuration
Pour bien configurer son firewall, il suffit de bien respecter les conseils suivants :
- Essayez de limiter l’accès à votre réseau à des utilisateurs connus utilisant une adresse IP statique. Vous pourrez ainsi rejeter toutes les autres requêtes venant d’utilisateurs utilisant une adresse IP non autorisée. Vous effectuez de la sorte un filtrage au niveau IP.
- Fermez tous les ports en écoute sur les différents serveurs et ouvrez seulement ceux dont vous avez besoin.
- Filtrez ces ports, c’est à dire rejetez toutes les autres requêtes sur les autres ports que ceux en écoute.
4.1.2 Les attaques contre les firewalls
La première étape lors d’une attaque est de déterminer les règles de firewalling. Le but est simple : savoir quels ports ne sont pas filtrés.
Avec le scan
Nmap peut déterminer quels ports sont ou ne sont pas filtrés.
Voici un exemple :
[ /root]# nmap 192.168.1.2
Starting nmap V. 2.54BETA31 ( ) Interesting ports on (192.168.1.2) :
(The 1549 ports scanned but not shown below are in state : closed)
Port State Service
21/tcp filtered ftp
22/tcp filtered ssh
111/tcp open sunrpc
515/tcp open printer 1024/tcp open kdm
Nmap run completed – 1 IP address (1 host up) scanned in 1 second Les ports 21 (ftp) et 22 (ssh) sont filtrés.
Comment s’en protéger?
Protégez-vous contre le scanning (voir section 2.1).
Si le scan ne marche pas, d’autres méthodes peuvent être utilisés comme le firewalking.
Le firewalking
Cette technique de dévoilement des règles de firewalling repose sur un unique champ de l’en-tête IP, le TTL (pour Time To Live), ce champ représentant la durée de vie d’un paquet. Il est fixé dès son envoi par le système d’exploitation et est diminué d’une unité à chaque fois qu’il traverse un équipement assurant le routage; quand ce champ est égal à 0, le paquet disparaˆ?t.
Chaque passage d’un routeur à un autre est appelé un saut.
Si il y a N sauts jusqu’au réseau final, on réitère l’opération N fois.
On peut utiliser cette technique avec différents protocoles : UDP, TCP, ICMP.
Le firewalking repose sur cette technique pour déterminer les règles de firewalling. Firewalk(le programme implémentant le firewalking) détermine le nombre de routeurs entre la machine source et la machine cible (située derrière le firewall). Ensuite, il envoie des paquets tests avec un TTL égal à ce nombre de routeurs + 1. Si le paquet est accepté, il traverse le firewall et on obtient une réponse; sinon il n’y a aucune réponse.
Firewalk envoie différents types de paquets (TCP, UDP) pour déterminer les règles de firewalling. Néanmoins, de nombreux paramètres comme la congestion du réseau, le nombre de routeurs séparant la cible et l’émetteur peuvent fausser l’analyse de firewalk.
4.2 Les NIDS
Les outils les plus pratiques!
Ces utilitaires permettent de détecter une attaque et de vous en informer. Un IDS (pour Intrusion Detection System) analyse tout ce qui se passe sur une station. Il détecte les outrepassements de droits (obtention du compte root d’une manière suspecte) et d’autres types d’attaques, il contient une base de données sur différentes vulnérabiltés.
Les NIDS (Network Intrusion Detection System) travaillent de la même manière, mais sur les données transitant sur le réseau. Il peut détecter en temps réel une attaque s’effectuant sur l’ une des vos machines. Il contient une base de données avec tous les codes malicieux et peut détecter leurs envois sur une des machines. Le NIDS travaille comme un sniffer (voir section 5.4), sauf qu’il analyse automatiquement les flux de données pour détecter une attaque.
4.2.1 Prelude
Prelude-NIDSest un des détecteurs d’intrusions les plus connus. Prelude est disponible et libre sur les plateformes Linux, FreeBSD et Windows.
Prelude possède une achitecture modulaire et distribuée. Modulaire, car ses composants sont indépendants, et peuvent être facilement mis à jour. Distribuée, car ces composants indépendants interagissent les uns avec les autres. Cela permet d’avoir divers composants installés sur différentes machines et de réduire ainsi la surchage d’applications.
Ces différents composants sont les sondes et les managers. Les sondes peuvent
être de deux types : réseau ou local. Une sonde réseau analyse tout le traffic, pour y détecter d’éventuelles signatures d’attaques. La sonde locale assure la surveillance d’une seule machine, il analyse le comportement du système pour y détecter des tentatives d’exploitation de vulnérabilités internes. Les sondes signalent les tentatives d’attaques par des alertes. Ces alertes sont re¸cu par le manager qui les interprète et les stocke.
Pour une description complète de Prelude (installation, configuration et utilisation) consultez ce document :
4.2.2 Snort
Snortest un NIDS lui aussi. Il n’est pas structuré comme Prelude. Snort est un programme ”monolithique”, il ne comporte pas de module comme Prelude, ce qui peut rendre son implémentation dans un réseau un peu moins souple que Prelude. Snort fonctionne en trois modes (Sniffer, PacketLogger et NIDS). Les deux premiers modes ne sont pas intéressants pour la détection d’intrusion. Le troisième mode permet lui d’analyser le trafic réseau pour y détecter d’ éventuelles attaques.
Pour une description complète de Snort (installation, configuration et utilisation ) consultez ce site : (en anglais).
4.3 Le tunneling
IPsec est facultatif sur IPv4 mais est obligatoire sur IPv6. IPsec a d’autres avantages que la sécurisation du trafic, il permet par exemple d’économiser la bande passante grâce à la compression des en-têtes des paquets.
IPsec fonctionne sous deux modes différents : le mode transport et le mode tunnel. Ces deux modes seront décris dans ce qui suit.
IPsec est composé de plusieurs protocoles différents : AH, ESP, IPcomp et IKE.
4.3.1 Le protocole AH
Le protocole AH (Authentification Header) permet de garantir l’authenticité des paquets échangés en leur inscrivant une somme de contrôle (de l’en-tête IP jusqu’à la fin du paquet) chiffrée.
4.3.2 Le protocole ESP
Le protocole ESP (Encapsulating Security Payload) encrypte toutes les données du paquet garantissant leur confidentialité.
4.3.3 Le protocole IPcomp
Le protocole IPcomp (IP payload compression) permet de compresser un paquet avant de le chiffrer avec ESP.
4.3.4 Le protocole IKE
Le protocole IKE (Internet Key Exchange) est utilisé pour l’échange des clés utilisés pour l’encryptage.
4.3.5 Les deux modes de fonctionnements de IPsec
AH, ESP et IPcomp fonctionnent dans le mode transport ou le mode tunnel. Le mode ”transport” encrypte directement les échanges entre deux machines. Le mode ”tunnel” encapsule les paquets encryptés dans de nouveaux en-tête IPv4/IPv6. Il est con¸cu pour les passerelles VPN.
4.3.6 Les limitations d’IPsec
IPsec pose quelques problèmes dus à son implémentation. Certains problèmes apparaˆ?ssent au niveau des messages de broadcast et multicast. IPsec est difficile à filtrer sur les firewalls existants. Il est aussi impossible à gérer pour les translations d’adresse (NAT).
Documents
Description générale des tunnels et implémentation sous Linux :
Description générale des tunnels et implémentation sous :
Nessus est un outil de sécurité permettant de scanner une ou plusieurs machines. Il permet aussi de tester différentes attaques pour savoir si une ou plusieurs machines sont vulnérables.
Il est très utile lors de tests de pénétration (pen test) et fait gagner un temps incroyable.
Nessus se compose d’une partie serveur (qui contient une base de données regroupant différents types de vulnérabilités) et une partie client. L’utilisateur se connecte sur le serveur grâce au client et après authentification, il ordonne au serveur de procéder aux tests d’une ou plusieurs machines. Le client re¸coit ensuite les résultats du test.
Nessus est disponible sous Linux et Windows, et il est entièrement gratuit.
4.4.1 Pour obtenir tout sur Nessus
Pour télécharger les sources, binaires, ou différents documents concernant Nessus, consultez le site : http
4.5 User Mode Linux - UML
User Mode Linux est un dispositif permettant de lan¸cer un ou plusieurs noyau(x) linux dans l’espace utilisateur (comme un simple programme). En clair, il permet d’avoir plusieurs machines virtuelles sur une seule machine physique hôte exécutant Linux. Les avantages sont nombreux :
- Si une machine virtuelle plante, le système hôte n’est pas affecté. - Un utilisateur sera root sur une machine virtuelle, mais pas sur le système hôte.
- Il permet aussi de tester différents paramètres noyaux sans se soucier des conséquences.
User Mode Linux permet notamment de s’affranchir de chroot (pour, par exemple, la réalisation de serveurs FTP) et de toutes ses failles de sécurité.
Documents
La page web de User Mode Linux :
Un autre lien intéressant pour User Mode Linux et la sécurité :
Chapitre 5
Surveillance - Dissimulation Maintien d’accès
Introduction
5.1 Les chevaux de Troie
Le principe du cheval de Troie est facile à comprendre. Un programme ou un code malveillant est intégré à une application par ajout ou par modification de son code. Ainsi lors de l’exécution de ce programme inoffensif, le bout de code malveillant pourra exécuter des commandes spécifiques (récupération de fichiers de mot de passe, altération du système ) à l’insu de l’utilisateur.
Comment s’en protéger?
La plupart des antivirus peuvent détecter les chevaux de Troie. Néanmoins, comparer la signature numérique accompagnant les fichiers (cela se fait par un calcul reposant sur un algorithme de chiffrement appliqué à l’ensemble du fichier) avec la sienne permet de savoir directement si l’on est infecté.
Il est aussi conseillé de consulter les sites suivants pour vérifier que vos programmes ne contiennent pas de chevaux de Troie :
CERT : (Le CERT (Computer Emergency Response Team) est un organisme s’occupant des problèmes de sécurité sur Internet. Il recense les différents problèmes de sécurité et publie des articles (advisories) pour les décrire.
Bugtraq : bugtraq/
5.2 Les backdoors
Les backdoors sont des accès cachés sur un système ou sur une application. Le principe d’une backdoor est similaire à celui du cheval de Troie. L’objectif est de modifier ou d’utiliser un programme pour accèder discretement à un ordinateur distant, modifier le comportement d’un programme, devenir administrateur.
5.2.1 Les backdoors présentes dans les logiciels.
Parfois, certains logiciels (messagerie, utilitaires systèmes) peuvent contenir des backdoors, c’est-à-dire que, pour certaines commandes suivies d’arguments particuliers ou avec un mot de passe bien défini, le logiciel peut avoir un comportement différent (permettre à l’utilisateur de devenir root, renvoyer un shell système à l’utilisateur ).
Parfois, certains pirates diffusent des applications infestées de backdoors.
Comment s’en protéger?
Il convient de télécharger ses applications sur le site du distributeur ou du programmeur. Utiliser des serveurs de téléchargement non liés à l’auteur de l’application peut se réléver dangereux.
Il est aussi recommandé de vérifier les checksums s’il sont donnés par le développeur.
Il est aussi bon de consulter des listes de diffusion comme bugtraq pour savoir si la version de logiciel que vous utilisez ne comporte pas de backdoors.
5.2.2 Les backdoors dédiées aux connexions à distance
Ces backdoors peuvent très bien faire partie de la première catégorie. Comme il l’a été montré, certains logiciels peuvent autoriser un accès pour un mot de passe particulier. Toutefois, ce paragraphe va se focaliser sur des applications en écoute sur un port bien défini utilisées par les pirates pour obtenir un shell. Un logiciel préalablement installé par le pirate est en attente de connexion sur un port discret. La plupart de ces programmes sont en écoute sur des numéros de ports ayant une valeur assez élevée (supérieur à 5000). Le pirate n’a plus qu’à se connecter sur ce programme pour récupérer son accès sur la machine.
Comment s’en proteger?
Nmap peut se rélèver être une aide précieuse pour les débusquer. Si, en procédant au scan d’une machine, vous constatez qu’un port non autorisé est en écoute, il serait bon de vérifier celui-ci.
Les sites à consulter :
CERT : (en anglais) Bugtraq :
(en anglais)
5.3 Les Rootkits
Le rootkit est un programme permettant d’automatiser la dissimulation et l’effacement des traces d’un pirate sur une machine. L’objectif d’un rootkit est de modifier les commandes permettant d’administrer le système, de cacher les ports ouverts par le pirate
L’administrateur pouvait détecter ces modifications sur les logiciels concernés. Alors une seconde génération de rootkits apparut. Il faut savoir que des commandes comme ps, ls font appels à des bibliotheques partagées pour fonctionner. Les nouveaux rootkits modifiaient donc le code de ces bibliothèques pour modifier le comportement de ces commandes à l’avantage du pirate.
Encore une fois, ceci était détectable. Donc une troisième géneration de rootkits est née afin de modifier directement le comportement du noyau, par le biais de modules chargés en mémoire (LKM). C’est à l’heure actuelle la derniere génération.
Différents rootkits sont disponibles sur Linux.
Je ne donnerai (volontairement) pas dans cette partie une description complète de l’utilisation des rootkits. Cela n’a aucun interêt pour ce guide.
La plupart des rootkits utilisent le principe des backdoors (voir section 5.2) pour permettre au pirate de se connecter selon son envie sur un système.
Comment s’en protéger?
1) Les checksums.
Une base de données de checksums sur les différents fichiers système peut déjà constituer une bonne parade. Je vous conseille d’effectuer des checksums à la fin d’une installation sur les différents fichiers comme ls, ps, stat ifconfig et sur les différentes bibliothèques partagées.
Cette base de donnée devrait être stockée sur un CDROM ou tout autre support non réinscriptible.
2) Compiler les programmes vitaux en statique
Bien suˆr, pour compiler les programmes vitaux en statique, faut-il encore disposer d’un OS qui permette d’accéder aux sources de ces programmes vitaux
3) Chkrootkit
Chkrootkit (pour CHecK ROOTKIT) vous permet de détecter la présence d’un rootkit, il fonctionne sous Linux (FreeBsd ) et est téléchargeable librement sur
4) Compilez votre noyau en statique. Vous éviterez ainsi le chargement de modules externes.
5.4 L’interception des mots de passe en réseau.
Une autre technique utilisée pour collecter des informations (mots de passe par exemple) est l’utilisation d’un sniffer. Le sniffer place la carte réseau dans le mode transparent (promiscious), ce qui veut dire que la carte intercepte tous les paquets sur le segment réseau, même ceux qui ne lui sont pas destinés.
Plusieurs types de sniffers existent; certains affichent les données interceptées brutes comme Tcpdump, ce qui donne lieu à des fichiers de log très volumineux. D’autres sniffers permettent de récupérer les mots de passe en les affichant directement à l’écran associé avec le login, l’adresse du client et celle du serveur (comme dsniff).
Etherealpermet par exemple d’afficher toutes les transactions ayant cours sur le réseau.
Cependant, le sniffer reste un outil puissant pour la détection d’intrusion car, premièrement, il garde une trace de tous les échanges ayant cours sur le réseau. Deuxièment, il se révèle très utile pour démasquer un scan (un grand nombre de paquets envoyés d’un seul coup), de tracer l’adresse d’un pirate, de voir si des commandes particulières sont demandées sur le reseau.
La plupart des rootkits contiennent un programme pour sniffer.
Les NDIS utilisent un sniffer pour analyser les transactions réseau.
Comment s’en protéger?
Une deuxième parade pour déjouer le sniffing est de ”tunneler” toutes les transactions. Cela veut dire encrypter toutes les transactions réseaux. Utiliser IpvSec ou des VPN, ssh sur votre réseau s’avère être une défense efficace contre le sniffing.
L’utilisation de tunnels est traitée dans la section 4.3.
Chapitre 6
Dispositifs destructeurs
Introduction
Les dispositifs destructeurs sont utilisés pour paralyser, saturer ou détruire un système d’information. Ils constituent l’espèce la plus nuisible dans le domaine de la sécurité car ils peuvent être la source de perte de données. Le but de ce chapitre est d’expliquer leurs fonctionnements et la fa¸con de les combattre.
6.1 Le virus
Le virus est un programme dont le seul but est de consommer ou de paralyser des ressources système. Le virus s’autoduplique pour mieux infecter le système, il se propage en infectant tour à tour les fichiers. Les effets d’une contamination varient : fichiers effacés, disque dur formaté, saturation des disques, modification du MBR
La grande majorité d’entre eux existent sur les plates-formes, ils infectent en particulier les fichiers COM ou EXE. De plus, de nouvelles formes sont apparues comme les macro-virus qui attaquent les fichiers de données (word ou excel).
Les systèmes UNIX ne sont pas épargnés! Les administrateurs UNIX doivent faire face à des virus comme Winux. Néanmoins, la gestion des droits sous UNIX se révèle être un facteur limitant pour la propagation de virus.
Les virus sont de plus en plus évolués, ils peuvent s’automodifier pouréchapper à une éventuelle détection (virus polymorphes). D’autres types peuvent tenter de leurrer le système en s’installant dans des secteurs défecteux ou non utilisés (virus furtifs)
Comment s’en protéger?
Il est aussi important de suivre l’évolution et l’apparition de nouveaux virus; pour cela, consulter les sites (ainsi que pour tous les autres dispositifs destructeurs décrits dans ce chapitre) :
CERT : (en anglais) Le site du CNRS :
6.2 Les vers
Les vers sont du même acabit que les virus, sauf qu’ils n’utilisent pas nécessairement un fichier pour se propager. Ils sont aussi capables de se dupliquer et de se déplacer au travers d’un réseau informatique. Les vers utilisent différents supports pour se propager.
Les vers simples utiliseront des failles propres à certains logiciels (exemple du ver de Morris en 1988 qui paralysa une grande partie de l’Internet).
Les macro-vers utiliseront les pièces jointes contenant des documents bureautiques infectés (exemple du ver Nimda).
Les vers d’email sont contenus dans une pièce jointe comprenant un code malicieux exécuté automatiquement par le logiciel de courrier électronique ou manuellement par l’utilisateur.
Comment s’en protéger?
Comme pour les virus, l’antivirus se révèle être une parade efficace.
Consultez les listes citées dans la section 6.1.
6.3 Les bombes logiques
Les bombes logiques sont aussi néfastes que les virus ou les vers et sont la cause de dégats similaires. La différence est que la bombe logique a besoin d’un détonateur pour s’activer, c’est-à-dire qu’elle attend une date ou une action bien précise de l’utilisateur pour exploser.
Comment s’en protéger?
Utilisez un anti-virus performant (Mc Afee, Norton ) régulièrement mis à jour.
Consultez les sites décrits dans la section 6.1.
6.4 Les attaques par déni de services
Ce type d’attaques est la plus énervante qui soit. Elles ont pour but de saturer le réseau ou le système.
6.4.1 Le SYN flood
La plupart des attaques par SYN-flood sont bien détectées par différents
firewalls.
Comment s’en protéger?
Exemple avec iptables
[[email protected] /root]# iptables -A FORWARD -p tcp –syn m limit –limit 1/s -j ACCEPT
(Pour plus de details sur cette commande, je vous conseille de lire, le document ”Packet Filtering HOWTO : Using iptables” (Chapitre 7.3) de Rusty Wagner)
6.4.2 L’UDP Flood
De la même manière que pour le SYN flooding, l’attaquant envoie un grand nombre de requêtes UDP sur une machine. Le trafic UDP étant prioritaire sur le trafic TCP, ce type d’attaque peut vite troubler et saturer le trafic transitant sur le réseau.
La plus célèbre attaque utilisant l’UDP-flooding est le ”Chargen Denial of Service Attack”. Un pirate envoie une requête sur le port echo d’une machine A indiquant comme port source celui du port chargen d’une machine B. Le service chargen de la machine B renvoie un caractère sur le port echo de la machine A. Ensuite le service echo de A renvoie ce caractère sur chargen. chargen le re¸coit, en ajoute un autre et les renvoie sur le port echo de A qui les renvoient à son tour sur chargen et cela continue jusqu’à la saturation de la bande passante.
Comment s’en protéger?
Il est conseillé de désactiver les services chargen et echo.
Si vous ne voulez pas désactiver chargen et echo, configurez votre firewall pour éviter le ”Chargen Denial of Service Attack” en limitant le traffic UDP :
[[email protected] /root]# iptables -A FORWARD -p udp -m limit –limit 1/s -j ACCEPT
6.4.3 Fragmentation de paquets
Plus connu sous le nom de ”Teardrop Attack”, ”Bonk” ou encore ”Boink”, cette attaque utilise une faille propre à certaines piles TCP/IP. Cette vulnérabilité concerne la gestion de la fragmentation IP.
Cette faille est très connue sur les piles de.
6.4.4 Ping of death
Le principe est d’envoyer un paquet ICMP avec une quantité de données supérieure à la taille maximale d’un paquet IP . Encore une fois, la pile peut s’avérer incapable de gérer cette exception et le reste du traffic.
6.4.5 Attaque par réflexion : Smurfing
Cette attaque est basée sur le protocole ICMP. Lorsqu’on envoie un ping
à un réseau en broadcast (par exemple 255.255.255.0), le paquet est envoyé à chacune des machines du réseau.
Un pirate envoie un ping en broadcast sur un réseau (A) avec une adresse IP source correspondant à celle de la machine cible (B). Le flux entre le port ping de la cible (B) et du réseau (A) sera mulitplié par le nombre de machines sur le réseau (A).
Cela conduit à une saturation de la bande passante du réseau (A) et du système de traitement de paquets de (B).
Comment s’en protéger?
Configurez votre firewall pour limiter le traffic ICMP.
[[email protected] /root]# iptables -A FORWARD -p icmp – icmp-type echo- request -m limit –limit 1/s -j ACCEPT
(Pour plus de détails sur cette commande, je vous conseille de lire, le document ”Packet Filtering HOWTO : Using iptables” (Chapitre 7.3) de Rusty Wagner)
6.4.6 Dénis de services distribués
Plusieurs types d’attaques sont lancées en parallèle à partir de plusieurs sources.
6.4.7 Bombes e-mail
Le ”mail-bombing” consiste à envoyer de gros ou de nombreux fichiers à un utilisateur pour saturer sa boˆ?te de réception de courrier électronique.
Comment s’en protéger?
La plupart des logiciels de contrôle de contenu assure un filtrage du courrier pour détecter ce type d’attaque
Chapitre 7
Sécurisation des mots de passe
Introduction
Il faut savoir que les mots de passe utilisés sur un système d’information sont encryptés pour garantir leur confidentialité. Ces mots de passe encryptés sont stockés dans des listes de mots de passe sur des fichiers systèmes prédéfinis.
Un pirate peut fort bien récupérer ces listes et tester la fiabilité des mots de passe. Il utilise pour cela l’outil adéquat : un perceur de mot de passe.
La plupart des algorithmes d’encryptage repose sur l’utilisation de fonctions à sens unique. Ceci veut simplement dire qu’il est impossible de décrypter le mot de passe à partir sa forme encryptée. L’attaque consiste alors à encrypter différentes combinaisons de caractères et de comparer cette forme encryptée à celle du mot de passe voulu. Si les deux chaˆ?nes correspondent, alors la suite de caractères est celle du mot de passe.
Il y a deux types d’attaques pour le craquage de mots de passe qui seront définies dans ce chapitre.
7.1 L’attaque par dictionnaire
Le programme utilise une liste de mots prédéfinis dans un fichier externe. Cette liste est appelée un dictionnaire; ces mots sont la plupart du temps ceux provenant d’un dictionnaire contenant les mots du langage courant. Le programme les encrypte avec l’algorithme d’encryptage adéquat un par un et les compare au mot de passe encrypté.
Ce type d’attaque est très rapide. Un mot de passe mal choisi est vite découvert.
7.2 Le brute forcing
Si l’attaque par dictionnaire ne marche pas, le programme peut générer des mots de passe avec une suite aléatoire de caractères, les encrypter et les comparer au mot de passe à découvrir. Avec un mot de passe suffisament long (supérieur à 8 caractères), cette méthode a peu de chance d’aboutir. Si, de plus, des caractères spéciaux sont ajoutés comme des signes de ponctuation, la méthode peut se réveler inefficace.
7.3 Tester la fiabilité de vos mots de passe!
Sous UNIX
Sous UNIX, la liste des mots de passe des utilisateurs système est divisée en deux fichiers ”/etc/shadow” et ”/etc/passwd” ou réunis seulement dans le fichier ”/etc/passwd”. Le type d’encryptage peut être du MD5, DES, RSA
Pour tester la résistance de vos mots de passe, le logiciel John The Ripperpeut s’avérer être une bonne aide. Il supporte un grand nombre d’algorithmes d’encryptage, présente un important paramétrage des attaques.
John the Ripper est un programme distribué librement.
Pour tester la fiabilité des mots sous Windows, l’administrateur pourra utiliser le logiciel John the Rippersur Windows ou sur Unix ou le logiciel qui, lui, n’est pas distribué gra-
tuitement (enfin pas pour les versions récentes).
Sous, les mots de passe sont dispersés dans le répertoire racine de windows dans différents fichiers d’exention ”.PWL” portant comme nom celui de l’utilisateur.
Le chiffrement utilisé pour générer les mots de passe PWL est très faible. Le programme Cain permet de tester leur fiabilité.
7.4 Choisir le bon mot de passe
N’utilisez pas des mots de votre language courant ou des suites de chiffres!
Choisissez des mots de passe longs, avec une suite de caractères totalement aléatoires et avec des caractères spéciaux, alternez les majuscules et les miniscules.
Moyen mnemotechnique avec une phrase :
Choisissez une phrase et alternez les majuscules et minuscules avec les premières lettres de chaque mot en tenant compte de la ponctuation.
Par exemple :
A demain, Je t’ Aime mon Amour.
donne : Ad,Jt’AmA, qui est un mot de passe assez costaud.
7.5 Prévenir l’utilisateur
N’hésitez pas à organiser des réunions, faire circuler différents documents pour informer vos utilisateurs des problèmes de fiabilité des mots de passe.
Chapitre 8
Introduction
Dans ce chapitre, nous décrirons les principes sur lesquels reposent de nombreuses attaques réseaux (notamment celles décrites dans le chapitre 9), ainsi que les règles à respecter pour les éviter ou les parer.
8.1 Détournement de flux
Les techniques de détournement de flux servent à rediriger le flux réseau vers un client, vers un serveur, ou vers une autre machine.
8.1.1 ARP-Poisoning :
Toute carte réseau possède une adresse physique. C’est cette adresse qui lui permet de recevoir les paquets qui lui sont destinés. Cette adresse physique est associée à l’adresse IP grâce au protocole ARP. La table de correspondance entre les adresses IP et les adresses physiques est contenue dans le cache ARP. Lorsqu’un échange doit s’établir entre 2 machines, ces deux machines envoient des requêtes ARP avec l’adresse IP du récepteur, associée à un champ vide pour son adresse physique. Ce récepteur va renvoyer son adresse physique dans une réponse ARP. Si un attaquant envoie un message de réponse ARP avec son adresse physique correspondant à l’adresse IP du récepteur, tout le flux IP dirigé vers le récepteur sera ridirigé vers l’attaquant. On dit qu’il a empoisonné le cache ARP du recepteur.
Illustration
B envoie à A une requête ARP pour connaˆ?tre son adresse physique.
A renvoie à B son adresse physique par une réponse ARP. B la stocke dans son cache en faisant correspondre l’IP de A à son adresse physique.
Le trafic circule entre A et B.
C envoie à B, une réponse ARP avec son adresse physique correspondant à l’IP de A. B stocke cette nouvelle correspondance dans son cache en écrasant l’ancienne.
C dialogue avec B à la place de A. A ne re¸coit plus rien.
Comment s’en protéger?
On peut utiliser sous UNIX, le logiciel Arpwatchqui permet de surveiller tout le trafic ARP.
Documents
8.1.2 Désynchronisation TCP :
L’ARP-Poisining permet de rediriger tout le trafic IP mais, si l’attaquant n’a besoin que du trafic TCP, il peut interférer entre une connexion clientserveur pour rediriger le flux du client vers lui. La synchronisation TCP est assurée par les numéros de séquences TCP. Si, pendant un échange, l’attaquant envoie des paquets malformés au client avec une adresse IP correspondant à celle du serveur en y placant des mauvais numéros de séquences, le client va croire qu’il a perdu la connexion et stoppera ses échanges avec le serveur. Mais si l’attaquant envoie les bons numéros de séquences au serveur, il récupèrera la connexion pour lui.
Illustration
A dialogue avec B. Il envoie un paquet avec de 60 octets, avec les numéros de séquences indiqués.
C répond à A en se faisant passer pour B et envoie de mauvais numéros de sequences.
A ne répond plus à B car il croit qu’il a perdu la connexion.
C répond à la place de A et communique avec B, il a volé la connexion.
8.2 MIM - Man in the Middle
Les attaques de type Man-In-the-Middle sont très faciles à comprendre. Man-in-the-Middle signifie l’homme du milieu. Cette attaque fait intervenir trois protagonistes : le client, le serveur et l’attaquant. Le but de l’attaquant est de se faire passer pour le client auprès du serveur et se faire passer pour le serveur auprès du client. Il devient ainsi l’homme du milieu. Cela permet de surveiller tout le trafic réseau entre le client et le serveur, et de le modifier à sa guise pour l’obtention d’informations (mots de passe, accès système )
La plupart du temps, l’attaquant utilise les techniques de détournement de flux décrites dans les précédentes sections pour rediriger les flux du clients et du serveur vers lui.
8.3 Encapsulation d’IP dans d’autres protocoles.
Par exemple, imaginons cette situation : un pirate veut se connecter sur le port FTP (21) d’une machine A d’un réseau protégé par un firewall B. B n’autorise et n’assure que le trafic HTTP. Si le pirate veut se connecter sur A, il encapsule les paquets à destination de A dans des requêtes HTTP destinées à B. B accepte ces paquets car ils reposent sur le protocole HTTP. Si B est mal configuré, il enverra à A les paquets lui étant destinés.
Chapitre 9
Description d’attaques sur différents protocoles
Introduction
Ce chapitre décrit les failles intrinsèques de différents protocoles. Intrinsèques par le fait qu’elles ne sont pas liées à une faille applicative du client ou du serveur gérant ce protocole, mais plutôt à sa conception. Nous présenterons aussi la manière de s’en protéger.
9.1 DHCP : Dynamic Host Configuration Pro-
tocol
Le protocole DHCP est utilisé pour délivrer dynamiquement une adresse IP unique pour chaque machine le demandant sur le réseau interne. En clair, si un client interne veut obtenir une adresse IP pour bénéficier des services réseau, il envoie un message DHCP à tout le réseau (broadcast) pour trouver le serveur DHCP. Le serveur DHCP répondra en lui envoyant tous les paramètres de configuration réseau.
Ce service permet d’”alléger” la gestion du réseau en évitant d’avoir des configurations statiques à maintenir sur chaque machine. Malheureusement, le protocole DHCP comporte diverses failles que nous allons vous présenter.
9.1.1 Attaque par épuisement de ressources
Comme il l’a été décrit, un serveur DHCP possède un stock d’adresses IP qu’il distribue aux différents clients. Ce stock est bien suˆr limité. Il y aura seulement un nombre défini de clients pouvant disposer des différentes adresses IP en même temps (par exemple 255).
9.1.2 Faux serveurs DHCP
Cette attaque vient en complément de la première. Si un pirate a réussi à saturer un serveur DHCP par épuisement de ressources, il peut très bien en activer un autre à la place. Ainsi il pourra ainsi contrôler tout le traffic réseau.
Comment s’en protéger?
Segmentez votre réseau en sous-réseau et attribuez-leur chacun un serveur DHCP. Ces serveurs seront indépendants les uns des autres.
Associez une adresse IP définie à une adresse matérielle (MAC) spécifique.
Remplissez les champs de l’option ”Réservations” dans le programme de configuration du serveur DHCP
Sous Linux
Modifiez le fichier sur le serveur DHCP.
Exemple pour un client ”toto” d’adresse MAC 00 :C0 :34 :45 :56 :67 qui recevra l’adresse 192.168.1.2. Le routeur possède l’adresse 192.168.1.1 et le serveur de noms possède l’adresse 192.168.1.3.
host toto { hardware ethernet 00 :C0 :34 :45 :56 :67; fixed-address 192.168.1.2; option routers 192.168.1.1;
option domain-name-server 192.168.1.3; }
Les nouvelles versions du protocole DHCP permettent l’utilisation de mécanismes d’authentification plus stricts. Assurez vous que vos serveurs utilisent ces versions de protocoles. (Voir RFC 3118)
Documents :
Sécurisation sous windows :
?sid=62 Sous Linux :
?sid=89
html\# (configuration d’une passerelle d’authentification).
9.2 DNS : Domain Name Server
Le protocole DNS assure la correspondance entre le nom d’une machine et son adresse IP. Un serveur DNS est en écoute sur le port 53. Les attaques décrites ici concernent les faiblesses du protocole DNS.
9.2.1 Le DNS ID spoofing
C’est la première attaque que nous allons décrire. Elle aboutit à un détournement de flux entre deux machines à l’avantage du pirate.
Ce numéro a une valeur comprise entre 0 et 65535.
Le DNS ID spoofing a pour but de d’envoyer une fausse réponse à une requête DNS avant le serveur DNS. De cette fa¸con, le pirate peut rediriger vers lui le trafic à destination d’une machine qu’il l’intéresse.
Dans notre exemple, un pirate C doit répondre à A avant le serveur DNS (D) du réseau de B. Ainsi, il envoie à A son adresse IP associée au nom de la machine B. A communiquera alors avec le pirate C au lieu de la machine B.
Illustration
Néanmoins, pour implémenter cette attaque, le pirate doit connaˆ?tre l’ ID de requête DNS. Pour cela, il peut utiliser un sniffer s’il est sur le même réseau, soit prédire les numeros d’ID par l’envoi de plusieurs requêtes et l’analyse des réponses.
9.2.2 Le DNS cache poisoning
Le principe de cette attaque est très similaire à celui de l’ARP-Poisoining. Pour gagner du temps dans la gestion des requêtes, le serveur DNS possède un cache temporaire contenant les correspondances adresses IP - noms de machine. En effet, un serveur DNS n’a que la table de correspondance des machines du réseau sur lequel il a autorité. Pour des machines distantes, il doit interroger d’autres serveurs DNS. Pour éviter de les interroger à chaque requête, il garde en mémoire (dans un cache), le résultat des précédentes requêtes.
L’objectif du pirate est d’empoisonner ce cache avec de fausses informations. Pour cela, il doit avoir un nom de domaine sous contrôle et son serveur DNS.
Imaginons qu’un pirate (A) possède le nom de domaine ””, et son serveur DNS (C) et qu’il veuille empoisonner le cache du serveur DNS (B) du réseau ””.
Le pirate envoie une requête au serveur DNS (B) du réseau ”” demandant la résolution du nom de domaine ””.
Illustration
Comment s’en protéger?
Configurez votre serveur DNS pour qu’il ne résolve directement que les noms de machine du réseau sur lequel il a autorité.
Autorisez seulement des machines internes à demander la résolution de noms de domaines distants.
Mettez à jour ou changez les logiciels assurant le service DNS pour qu’ils vous protégent des attaques décrites précedemment.
Documents
Sous linux :
(Configuration DNS et sécurité)
9.3 FINGER
Le service finger permet d’obtenir des informations sur les utilisateurs du système.
finger s’invoque simplement avec la commande :
[[email protected] /root]#finger @machinecible
Le symbole @ produit le même effet que l’astérisque pour un listing de répertoire. En effet, les informations concernant tous les utilisateurs connectés à la machine de nom ”machinecible” seront listées et envoyées en réponse à la requête.
Exemple
[[email protected] /root]#finger @machinecible
Login Name Tty Idle Login Time Office toto Le toto pts/7 3d Mar 26 20 :43 (case)// root root pts/4 5d May 25 16 :20
On voit ainsi qui est connecté sur le système (toto et root) et depuis quand (colonne ”Time”).
finger n’est pas dangereux mais le laisser en écoute, sans en avoir réellement besoin, est une grossière erreur. finger donne trop d’informations sur les utilisateurs systèmes.
Comment s’en proteger?
UNIX
Il est conseillé de désactiver le service finger dans le fichier ””. Pour cela, ajoutez un dièse (#) devant la ligne relative au service finger.
# finger stream tcp nowait root /usr/sbin/tcpd in.fingerd
:
Désactivez le programme associé au service finger.
Si vous ne souhaitez pas désactiver le service finger, configurez votre firewall pour y limiter l’accès.
9.4 FTP
Le premier défaut du protocole FTP est de ne pas encrypter les mots de passe lors de leur transit sur le réseau. Les mots de passe associés aux logins circulent en clair à la merci des sniffers.
Voici l’exemple d’une interception par un sniffer d’une authentification FTP :
Le logiciel utilisé est tcpdump.
22 :10 :39.528557 192.168.1.3.1027 ¿ : P 1 :12(11) ack 47 win 5840 ¡nop,nop,timestamp 441749 100314¿ (DF) [tos 0x10] 0x0000 4510 003f 88d6 4000 4006 2e7b c0a8 0103 [email protected]@ .
0x0010 c0a8 0104 0403 0015 e351 3262 8d6a dd80 Q2b.j..
0x0020 8018 16d0 68da 0000 0101 080a 0006 bd95 .h ..
0x0030 0001 87da 5553 4552 2061 6c65 780d 0a00 .
22 :10 :57.746008 192.168.1.3.1027 ¿ : P 12 :23(11) ack 80 win 5840 ¡nop,nop,timestamp 443571 101048¿ (DF) [tos 0x10] 0x0000 4510 003f 88d8 4000 4006 2e79 c0a8 0103 [email protected]@..y .
0x0010 c0a8 0104 0403 0015 e351 326d 8d6a dda1 Q2m.j..
0x0020 8018 16d0 5ba1 0000 0101 080a 0006 c4b3 .[ ..
0x0030 0001 8ab8 5041 5353 2074 6f74 6f0d 0a00 .
On peut voir facilement que l’utilisateur ”alex” a le mot de passe ”toto”.
9.4.1 Le serveur FTP anonyme
Le serveur FTP anonyme pose de plus gros problèmes. Le premier est qu’ une mauvaise gestion des droits d’accès peut s’avérer être une erreur fatale. Laisser trop de répertoires en droit d’écriture et/ou d’exécution est plus que dangereux pour la suˆreté du système. Le pirate pourrait y installer ou y exécuter des codes malveillants lui permettant d’accroˆ?tre son pouvoir sur la
machine.
Boucing attack - Attaque par rebonds
Comment s’en protéger?
Installez un serveur FTP anonyme seulement en cas d’absolue nécessité. Si vous devez le faire, limitez au maximun les droits sur les différents répertoires et fichiers laissés au public.
Pour vous protéger des attaques par sniffer, je vous recommande d’utiliser SFTP (Secure FTP) pour vos transactions FTP. SFTP encryptera les échanges et les protégera ainsi des écoutes indiscrètes. Vous pouvez aussi utiliser des tunnels comme IPSec pour protéger vos connexions (voir section 4.3).
Filtrez les accès (via un firewall) en allouant seulement l’accès à un certain groupe d’adresses IP (en évitant d’inclure des serveurs anonymes permettant de servir de relais).
9.5 HTTP
Un serveur HTTP est en écoute sur le port 80. Le protocole HTTP est suˆrement le plus utilisé sur le web pour les pages html. Ce protocole ne comporte pas de failles intrinsèques majeures. Par contre, les applications assurant son traitement sont souvent bourrées de failles. Cela vient du fait que le web devient de plus en plus demandeur en terme de convivialité et cela génère une complexité plus grande des applications, d’ou` un risque de failles plus important.
Nous allons décrire ces failles une à une.
9.5.1 Les serveurs trop bavards
Parfois, les bannières des serveurs web sont trop explicites :
Exemple sur un serveur Apache (192.168.1.2) : [[email protected] /root]# telnet 192.168.1.2 80 avec l’envoi de la commande HEAD / HTTP/1.0
Trop d’informations sont données.
Les pages d’erreurs (404 : page non trouvée) peuvent aussi contenir des informations sur le système.
9.5.2 Vulnérabilités liées aux applications web
Les langages comme Javascript, Perl, PHP, ASP pour la réalisation de scripts peuvent se rélèver dangereux. L’origine d’une faille dans une application web peut apparaˆ?tre à cause de deux problèmes. Le premier est la fiabilité de la conception du script, le second est la fiabilité des fonctions utilisées. Si un script est mal con¸cu, il peut être la source de nombreuses failles. De même, si sa conception est bonne mais qu’il utilise des fonctions boguées, il peut se révéler encore plus dangeureux.
Comment se protéger?
Vérifiez que votre serveur web n’est pas trop bavard. Si c’est le cas, modifiez sa configuration pour qu’il se taise. Pour cela, consultez la documentation pour modifier le contenu des messages d’erreur ou de bienvenue.
Un serveur web ne devrait jamais être exécuté avec les droits administrateurs.
Mettez à jour les navigateurs et les serveurs pour prévoir d’éventuelles failles.
Lors du développement de scripts, prenez garde lors de la conception à la gestion des droits des utilisateurs pour son exécution. Informez-vous aussi sur les fonctions connues pour être ”sensibles”.
Les NIDS peuvent être une bonne parade contre les attaques reposant sur des failles logicielles. Ils permettent de détecter l’exécution de telles attaques. Les NIDS et IDS sont traités dans la section ??.
L’utilisation de SHTTP (Secure HTTP) est aussi une bonne parade contre les attaques HTTP.
Une bonne définition de SHTTP est donné par E.Rescorla et A. Schiffman :
”Le protocole SHTTP est une extension de HTTP qui fournit des services de sécurité, applicables indépendamment, qui permettent de garantir la confidentilité, l’authenticité/intégrité, et le non refus d’origine.”
SSL (”Secure Socket Layer” pour Netscape) permet de protéger les transactions web, il peut être judicieux de l’utiliser.
9.6 IDENT
Il convient de le supprimer, s’il n’a aucune utilité.
Comment s’en protéger?
UNIX
Pour désactiver le service ident, ajoutez un dièse (#) devant la ligne le concernant dans le fichier ””.
# :INFO : Info services
#ident stream tcp wait identd /usr/sbin/identd identd
9.7 IP et l’IP-Spoofing
Cette méthode de piratage date un peu. Mais elle demeure légendaire par l’utilisation qu’en a fait Kevin Mitnick en 1995 contre le Supercomputer Center de SanDiego protégé par Tsatumo Shimomura. Néanmoins, cette faille était connue depuis février 1985 comme le montre le rapport ”Weakness in the 4.2BSD Unix TCP/IP software” écrit par Robert Morris.
L’IP spoofing se base sur une usurpation d’adresse IP. L’IP spoofing est utilisé lorsque deux hôtes sont en relation de confiance grâce à leurs adresses IP, c’est-à-dire que la seule authentification faite au niveau du serveur consiste en une vérification de l’adresse IP du client.
L’IP spoofing a souvent lieu contre les services rlogin et rsh car leur mécanisme d’authentification est basée sur l’adresse IP. Le principe est simple : dès qu’un client possède une connexion établie sur le serveur avec un mode d’authenfication basée sur l’adresse IP, le pirate va essayer de se faire passer pour le client auprès du serveur. Pour cela, il va empêcher le client de dialoguer avec le serveur et répondra à sa place.
L’IP-Spoofing est une attaque concernant un nombre limité de machines. Vous découvrirez pourquoi en lisant la suite.
9.7.1 Un peu de théorie
Le protocole IP est non-orienté connexion, il n’assure aucune vérification de la réception des paquets et ne se soucie guère de la fa¸con de les traiter. IP n’assure qu’un routage d’une adresse vers autre. Il est donc facile de duper le routage IP en injectant des paquets falsifiés ayant des adresses IP valides sur le réseau.
C’est sur ces bases que nous allons décrire l’attaque.
Imaginons que le client A est connecté en rsh sur le serveur B. Le pirate C va tenter de voler la connexion au client.
Il va en premier lieu réduire au silence le client en le saturant avec des attaques tels que le syn-flooding, le déni de service (voir chapitre 6.4).
La seconde partie de l’attaque est assez simple. Le pirate envoie une série de demandes de connexion au serveur ( paquets TCP avec le flag SYN armé) en utilisant l’adresse de A. Le serveur répond avec une série de paquets d’acquittement (flags SYN et ACK armés). C’est là que réside toute la finesse de l’IP spoofing.
Mais d’abord, quelques rappels sur le protocole TCP. Pour l’établisement d’une connexion TCP, le client envoie un paquet avec un numéro de séquence initial (NS1). Le serveur va répondre avec un paquet d’acquittement ayant son propre numéro de séquence (NS2), mais ayant un numéro d’acquittement (NA1) égal au numéro de séquence initial incrémenté d’une unité (NA1=NS1+1). Ensuite le client renvoie un paquet avec un numéro d’acquittement (NA2=NS2+1). Une connexion TCP s’établit donc en trois parties.
Ce principe de numéros de séquences et d’acquittement est utilisé tout le long de la transaction pour en assurer la fiabilité. La subtilité de l’attaque réside dans le fait que le serveur génére la valeur NS2 suivant un cycle particulier. Il peut utiliser, par exemple, soit une fonction générant un nombre aléatoire, soit incrémenter une valeur initiale de 128 toutes les secondes et de 64 après chaque connexion. Tout dépend de l’implémentation de la pile TCP/IP du système.
Le fait que l’attaque ne se restreigne qu’à une petite partie de systèmes vient du fait que la plupart des piles TCP/IP utilisent des numéros de séquences basés sur des nombres aléatoires. Certains systèmes comme BSD ou HP-UX connaissent de gros problèmes à cause de l’IP-Spoofing.
Illustration
9.7.2 Prévenir l’IP spoofing grâce à Nmap
Nmap invoqué avec l’option -O et -v vous fournit une indication sur la difficulté qu’aura le pirate à procéder à une attaque par IP spoofing contre votre serveur.
Exemple
[[email protected] /root]# nmap -O -v 192.168.1.4
Starting nmap V. 2.54BETA31 ( ) Host (192.168.1.4) appears to be up good.
Initiating Connect() Scan against (192.168.1.4)
Adding open port 111/tcp Adding open port 21/tcp
Adding open port 515/tcp
Adding open port 1024/tcp
Adding open port 22/tcp
Adding open port 139/tcp
The Connect() Scan took 1 second to scan 1554 ports.
For OSScan assuming that port 21 is open and port 1 is closed and neither are firewalled
Interesting ports on (192.168.1.4) :
(The 1548 ports scanned but not shown below are in state : closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
111/tcp open sunrpc
139/tcp open netbios-ssn
515/tcp open printer 1024/tcp open kdm
Remote operating system guess : Linux 2.1.19 - 2.2.19
Uptime 0.122 days (since Thu Mar 27 16 :02 :38 2003)
TCP Sequence Prediction : Class=random positive increments
Difficulty=4687481 (Good luck!)
IPID Sequence Generation : Incremental
Nmap run completed – 1 IP address (1 host up) scanned in 3 seconds
Les lignes intéressantes :
TCP Sequence Prediction : Class=random positive increments Difficulty=4687481 (Good luck!)
Si, par malchance, lors d’un scan, vous obtenez un nombre très bas avec un message du type ”Trivial Joke”, cela signifie que votre système est très vulnérable à une attaque par IP-Spoofing.
Comment s’en protéger?
Sur la plupart des systèmes, les numéros de séquence sont incrémentés de fa¸con aléatoire, ce qui limite déjà une grande partie des attaques par IP spoofing.
Pour se protéger , il faut commen¸cer par supprimer tous les services se basant sur l’authentification IP (rloging, rsh).
Certains modules comme rp filter sous Linux permettent une défense contre ces attaques.
L’utilisation de tunnels permet également de parer cette attaque.
Documents
Déscription de l’IP-Spoofing :
?p=48\&a=14 (en anglais)
9.8 NETBIOS
NETBIOS n’est pas un protocole en lui-même, c’est une interface logicielle et un système de nommage. L’interface NETBIOS est très utilisée sur les réseaux. NETBIOS permet par exemple de partager des ressources en réseau. Ces ressources peuvent être des imprimantes, processus ou des espaces disques. Un pirate peut essayer d’accéder à ces ressources en s’y connectant et tester différents couples utilisateur/mot de passe. NETBIOS n’est pas une interface très sécurisée. Elle est surtout utilisée dans les réseaux pour le protocole SMB (bien qu’elle tend à être remplacée).
Comment s’en protéger?
Protégez toutes vos ressources NETBIOS par mot de passe.
Ne laissez jamais un service NETBIOS de votre réseau en écoute sur Internet.
Autorisez seulement l’accès aux ressources NETBIOS au client de votre réseau.
Documents
Un bon guide pour la sécurisation NETBIOS (en anglais) :
9.9 NFS : Network File System
NFS a pour but de partager un ensemble de fichiers sur un réseau. Il est souvent couplé à un serveur NIS pour l’authentification.
NFS a été développé par Sun Microsystems.
9.9.1 Les attaques
Comment s’en protéger?
Utilisez la commande mount avec l’option -nosuid sur les clients, ce qui empêche la modification ou l’utilisation des programmes setuid sur un système de fichier NFS.
Utilisez l’option root-squash dans le fichier ”/etc/exports” :
[[email protected] /root]#
Cela aura pour but d’empêcher un client root de devenir root sur le système de fichiers NFS stockés sur le serveur.
Protéger l’accès à votre serveur NFS en filtrant à partir de l’ adresse IP, les différents clients.
9.10 NIS : Network Information Service
NIS permet de partager, à travers un réseau, une base de données contenant des bases d’informations pour chacune des machines constituant le réseau (fichier de mots de passe, listes d’hôtes ).
La base de donnée est gérée par un serveur-maˆ?tre qui la partage avec des serveurs-esclaves pour être accessible aux machines clientes.
Cette base de données est identifiée par un nom de domaine propre à NIS.
Ce service a été développé par SUN Microsystems. Il s’accompagne souvent du service NFS pour permettre le partage de fichiers.
9.10.1 Les attaques
Il est possible d’obtenir des nombreuses informations (notamment les fichiers de mots de passe) à partir du nom de domaine NIS.
Il est aussi possible pour un utilisateur non autorisé d’obtenir les fichiers de mots de passe à partir d’un poste local client NIS.
Les mots de passe sont transmis en clair sur le réseau, donc facilement interceptable par un sniffer.
Comment s’en protéger?
Evitez de donner le même nom de domaine DNS au domaine NIS.
Vérifiez si votre version de NIS vous assure une vérification de l’adresse du domaine depuis lequel sont lancées les requêtes.
Supprimez la commande ”ypcat” sur les ordinateurs clients.
Protégez l’accès à votre serveur NIS en filtrant à partir de l’adresse IP, les différents clients.
9.11 PORTMAP
[[email protected] /root]# rpcinfo -p machinecible
program vers proto port 10000 2 tcp 111 portmapper
10000 2 udp 111 portmapper
10007 2 udp 661 ypbind
10007 2 tcp 664 ypbind
Lors de la requête, portmap ne possède aucun mécanisme de contrôle, il accepte donc la requête et la traite.
Comment s’en protéger?
Il est conseillé de filtrer l’accès sur ce port grâce à un firewall bien configuré ou de désactiver totalement ce service.
9.12 Le protocole SMB
Les serveurs SMB sont en écoute sur le port 139 ou 445.
SMB (pour Server Message Block) est le protocole utilisé pour interfacer les partages et les authentifications MICROSOFT. Les clients et serveurs SMB sous Linux et d’autres OS libres utilisent SAMBA pour traiter les échanges avec ce protocole.
SMB possède deux modes d’authentification : le mode ”share”, dans lequel il associe un mot de passe à une ressource (espace disque, imprimantes ), et le mode ”user”, ou` il associe un mot de passe à un utilisateur. Cet utilisateur peut être aussi propriétaire d’une ressource.
SMB utilise aussi deux modes pour l’envoi de ces mots de passe : encryptés ou non. C’est là que réside toute la faille. C’est le serveur qui donne l’information au client s’il supporte l’encryptage ou non.
Si un pirate parvient à détecter un établisement de session SMB avant cet
échange, il peut très bien détourner le flux entre les deux et demander au client d’envoyer son mot de passe en clair et le recevoir.
9.12.1 Les scans de SMB shares
Si vous avez des ressources partagées en accès libre à tout le monde (everyone shares), un pirate utilisera un scanner de share pour les détecter et s’y connecter.
Même si vous protégez ces shares par mot de passe, certains logiciels peuvent tester différents mots de passe en se loguant à la ressource et ainsi tenter différentes combinaisons de mots de passe (voir section 7.1).
Pour être suˆr que les mots de passe SMB soient envoyé encryptés sur le réseau (même en cas de requêtes ”frauduleuses”), vérifiez que la valeur des clés suivantes de la base de registre sont bien égales à 0 :
HKEY\LOCAL\MACHINE\SYSTEM\CurrentControlSet\Services\Rdr\Parameters ”EnablePlainTextPassword”=dword :00000000”
HKEY\ LOCAL\ MACHINE\SYSTEM\CurrentControlSet\Services\lanmanworkstation\param
”enableplaintextpassword”=dword :00000000”
Protégez toutes vos ressources par mots de passe, évitez les shares en accès libre à tout le monde et n’oubliez jamais de choisir des mots de passe associés de la bonne fa¸con (voir section 7.1 ).
Ne laissez jamais un serveur SMB en écoute sur Internet, cela est plus que suicidaire. Si vous êtes obligés d’utiliser SMB à travers Internet, utilisez les tunnels (voir section 4.3).
Sur votre réseau interne, filtrez l’accès sur votre serveur SMB grâce à un firewall.
Document
La description des problèmes de sécurité sur SMB (en anglais) :
?p=60\&a=11
9.13 SMTP - Les services de messagerie
SMTP : Simple Mail Transfert Protocol.
Un serveur SMTP sert à envoyer les mails sur le réseau local ou sur Internet. Ce service est en écoute sur le port 25.
Le premier problème avec un serveur SMTP est qu’il peut servir de relais de mailing anonyme. Un pirate peut très bien s’en servir pour envoyer des mails scabreux à travers Internet.
Un autre problème concerne les commandes EXPN et VRFY : ces commandes sont sources de nombreuses informations pour le pirate. Il convient de les désactiver si le logiciel de messagerie le permet.
Comment s’en protéger?
Appliquez des règles de firewalling assez strictes concernant le serveur SMTP (usage réservé exclusivement aux machines du réseau interne).
Certains serveurs SMTP empêchent le relayage, vérifiez si votre serveur de messagerie supporte cette option.
9.14 SQL
Ce chapitre va présenter une attaque très connue contre les serveurs SQL, le ”SQL-Injection”.
9.14.1 Le ”SQL-INJECTION”
Une requête SQL passe par plusieurs étapes avant d’aboutir.
Les données sont envoyées par le client par l’intermédiaire d’un script sur le serveur web. Il s’ensuit une connexion au serveur SQL, puis l’envoi des données de la requête du client. La rêquete est exécutée par le serveur SQL. La réponse est re¸cue par le client et est affichée sous la forme d’une page web
L’attaque par SQL-Injection consiste à injecter des caractères spéciaux ou des chaˆ?nes de caractères particulières dans les rêquetes SQL du client. Ces caractères peuvent être interprétés par le serveur SQL comme des commandes permettant d’obtenir un accès sans mot de passe, de récupérer des fichiers
Comment s’en protéger?
Pour bien sécuriser votre serveur SQL, vérifiez que tous les comptes possèdent un mot de passe. Sur certaines versions de serveur, les comptes administrateur ou de certains utilisateurs peuvent être accessibles sans mot de passe après une installation.
Se protéger du SQL-Injection n’est pas toujours aisé, il faut surtout être attentif à la programmation des scripts et aux fonctions utilisées.
Documents
La technique du ”SQL Injection” décrite par son inventeur :
(en anglais)
9.15 SSH
SSH vous permet de créer un tunnel chiffré pour vos connexions, il encrypte toutes les échanges. SSH est donc un outil conseillé (pour ne pas dire indispensable) pour les transactions réseaux.
Une autre attaque utilisant une faiblesse du protocole existe. Cette attaque se base sur la génération aléatoire des caractères de bourrage. Ces caractères sont utilisés pour rendre la longueur du paquet multiple de 64 bits. Ces caractères n’étant pas vérifiables, ils peuvent être utilisés pour modifier le bon déroulement de la communication. Cette faille est plus connue sous le nom de ”l’exploitation du canal caché”.
Ces attaques ne sont pas très faciles à implémenter.
9.16 TELNET
Le service telnet (en écoute sur le port 23) permet à deux machines distantes de communiquer. Telnet établit deux terminaux virtuels pour les deux machines. Ce type de terminal est semblable à une connexion série. L’utilisateur a l’impression d’être assis devant un terminal de la machine.
telnet repose sur une authentification par login et mot de passe. Malheureusement, telnet possède le même problème que FTP : il n’assure pas la protection des mots de passe contre l’écoute d’un sniffer. Les mots de passe associés du login circulent en clair sur le réseau.
Comment s’en protéger?
Utilisez plutôt SSH, qui présente les mêmes fonctionnalités que telnet mais permettant en plus de ”tunneler” la connexion en encryptant toutes les transactions.
Utilisez IPsec ou des utilitaires de ”tunneling” (voir section 4.3) pour protéger toutes vos connexions.
Je vous conseille aussi de restreindre l’accès à votre serveur telnet via un firewall.
9.17 XWINDOW
XWINDOW est un service permettant la gestion des interfaces graphiques sous UNIX. XWINDOW est en écoute sur le port 6000.
9.17.1 Les attaques
Comment s’en proteger?
Utilisez la commande : [[email protected] /root]# xhost pour fermer les accès au serveur XWINDOW.
9.18 Peer To Peer (eDonkey, Kazaa )
Les applications Peer to Peer permettent de faciliter l’échange de fichiers entre particuliers. Ces applications sont nombreuses et diverses (eDonkey, Kazaa ). Malheureusement, leur utilisation dans un réseau peut être source de problèmes de sécurité et consommer inutilement de la bande passante.
Comment s’en protèger?
Sous linux, le projet P2Pwall donne des utilitaires et des documents permettant d’utiliser le firewall iptables pour filtrer le trafic d’application Peer to Peer.
Il est disponible gratuitement à l’adresse :
Chapitre 10
Sécurité avancée
Introduction
Si vous avez lu les précédents chapitres (et surtout le chapitre 4), vous possédez maintenant toutes les connaissances requises pour pouvoir aborder cette partie. Elle concerne l’implémentation et le développement d’outils dédiés à la sécurité. La première section vous montrera comment architecturer son réseau de fa¸con sécurisée et comment bien implémenter les différents outils de protection. La deuxième section vous décrira différentes bibliothèques utilisées pour le développement d’utilitaires réseaux. Nous donnerons en exemple la programmation d’un simple scanner.
10.1 L’architecture sécurisée
Il existe une infinité de fa¸con d’organiser votre réseau mais, quand la sécurité entre en jeu, il est conseillé d’avoir une architecture réseau bien pensée. Ce chapitre va donner des exemples de réalisation d’architecture sécurisée. Il convient d’avoir lu préalablement les précédents chapitres pour bien saisir la subtilité des architectures décrites.
Nous décrirons différents niveaux d’architecture sécurisée. Nous partirons d’une architecture peu ou pas sécurisée pour arriver à une architecture ultrasécurisée.
Très simple, une PME ou une université possède un administrateur qui doit gérer l’ensemble du parc informatique et sa conception réseau. Il a pour cahier des charges d’assurer une connexion Internet avec le réseau local, un serveur de messagerie et un site web.
Avec peu de moyen, l’administrateur crée son réseau de la sorte :
Les serveurs web, de messagerie et de partage de connexion Internet seront assurés par une seule machine. Cette machine est connectée directement à Internet.
Dans ce type de réseau, il n’y aucune forme de sécurité : la connexion avec Internet n’est absolument pas sécurisée.
10.1.2 Le premier niveau de sécurité
Après un premier piratage, notre administrateur re¸coit de nouveaux crédits. Il repense l’architecture :
Il dédiera une machine pour le serveur web, une machine pour le serveur de messagerie, deux machines pour le firewalling et un routeur pour assurer la connexion Internet.
Les serveurs de messagerie et web sont dans une zone extérieure à celle du réseau local. Ils constituent une zone démilitarisée (DMZ). Démilitarisée car on peut s’y connecter depuis l’extérieur contrairement au réseau local.
Le firewall situé entre le réseau local et le routeur empêchera toute connexion de l’extérieur vers le réseau local, et autorisera seulement les connexions depuis le réseau local sur un nombre limité de services.
Le firewall situé entre le routeur et la DMZ autorisera tous les accès sur les serveurs web et de messagerie (depuis le réseau local comme depuis l’exterieur), mais en empêchera les tentatives de connexion sur les autres services.
Malheureusement, notre administrateur subit un autre piratage. Il suppose que le pirate a pu passer le routeur et les firewalls en soumettant des requêtes sur des ports autorisés. Il a très bien pu envoyer un exploit sur un serveur web ou de messagerie vulnérable.
Alors, pour se protéger, il intercale une sonde NDIS (voir section 4.2) entre le firewall et le réseau local et dans la DMZ. Si un pirate venait à envoyer des requêtes suspectes ou des exploits connus, les NIDS préviendraient du risque d’intrusion (de l’intérieur ou de l’extérieur). Le manager NDIS se situera dans le réseau local.
Il dédie toujours une seule machine pour un seul service. Il met régulierement à jour les logiciels, et s’informe sur les nouvelles failles de sécurité.
Ceci constitue un niveau acceptable permettant de résister à des nombreuses attaques.
10.1.4 Les niveaux plus élevés
Nous allons nous appuyer dans cette section sur l’architecture précédente. Nous allons modifier certaines parties du réseau.
Nous allons d’abord insérer une zone de décontamination entre Internet et le réseau interne. Cette zone est constituée d’analyseurs de contrôle de contenu, des antivirus et d’autres utilitaires surveillant le trafic réseau (comme des NIDS). Tous les flux entrants et sortants passeront par cette zone de décontamination. Ces proxys applicatifs peuvent prendre la décision de couper la connexion en cas d’attaques ou de simplement rejeter la de-
mande.
Cette zone est appelée zone de décontamination car elle permet de détecter des signatures d’attaques dans les flux de données provenant d’Internet et d’éviter la propagation dans le reste du réseau.
Pour le réseau local, nous le subdiviserons en sous-réseaux, chaque sousréseau possédera un NDIS (sonde + manager). Ces sous-réseaux seront reliés entre eux par des switchs.
Ce type d’architecture est très efficace pour la sécurité, mais reste néanmoins assez côuteuse et difficile à gérer. L’utilisation de tunnels (voir section 4.3) permet en plus d’accroˆ?tre la suˆreté des transactions.
10.2 Développez vos propres utilitaires sécurité
Le système d’exploitation utilisé est Linux avec un compilateur GCC. Nous allons étudier 2 bibliothèques permettant la création d’utilitaires réseaux : libnet et libpcap.
La première, Libnet, est développée par Mike D. Schiffman. C’est une bibliothèque opensource (donc gratuite). Libnet permet de fabriquer et d’injecter facilement des paquets sur un réseau. Un grand nombre de protocoles est supporté.
Note importante : La version de Libnet décrite est la version 1.1. De grosses modifications faites sur le code de la version 1.1 la rend incompatible avec les versions de bibliothèques antérieures.
La deuxième est Libpcap. Elle permet de capturer les paquets transitant sur le réseau. Cette bibliothèque est maintenue par l’ équipe de développement de tcpdump (présenté dans le chapitre 5.4).
Libnet est téléchargeable à cette adresse :
Libpcap est téléchargeable à cette adresse :
Pour donner une description de ces bibliothèques, nous allons étudier le développement d’un scanner de base. Ce scanner listera les ports TCP ouverts sur une machine avec une méthode de scan en port demi-ouvert (SYN scan, voir section 2.1). L’injection des paquets sera réalisée grâce à Libnet, la réception des réponses grâce à Libpcap.
10.2.1 Le programme
Le programme ”scanner” sera appelé en mode console et recevra deux arguments : l’interface réseau d’utilisation et l’adresse IP de la machine à scanner. Il affichera la liste des ports ouverts et se terminera.
Exemple d’utilisation :
[ /root]#./scanner -i eth0 -c 192.168.1.2
Le port 21 est ouvert
Le port 22 est ouvert
Le port 1111 est ouvert
Le port 1024 est ouvert
Mais intéressons-nous à son développement.
Un petit rappel théorique :
Le programme recevra en argument, l’IP de la machine à scanner et le nom de l’interface réseau (par exemple ”eth0”).
ATTENTION! Le but de ce chapitre est de présenter les librairies libnet et libpcap et certaines de leurs fonctions les plus utiles d’une manière succinte. Ce chapitre n’est en aucun cas un cours de programmation réseau.
Principe général de fonctionnement :
Le principe de fonctionnemt du programme est simple; il sera constitué de deux fonctions : la première permettra d’envoyer les paquets (sur les 16000 premiers ports) et la deuxième de les recevoir. Ces deux fonctions seront activées en parallèle dans deux processus distincts (grâce à l’appel de la fonction fork()).
Je présenterai les deux fonctions utilisées pour intercepter et envoyer :
Pour recevoir (void ReceptionPaquet(unsigned int, u char device) :
La fonction ReceptionPaquet permet de recevoir les paquets circulant sur le réseau. Pour cela, elle utilise la librairie libpcap. Nous utiliserons deux fonctions de cette librairie pour notre programme :
La première est la fonction pcap t *pcap t pcap open live(char *device, int snaplen, int promisc,int to ms,char *errbuf).
Cette fonction initialise la carte réseau et renvoie un descripteur de type pcap t sur cette interface réseau en écoute.
La paramètre *device est un pointeur sur une chaˆ?ne de caractères contenant le nom de l’interface réseau utilisée (par exemple ”eth0”).
Le paramètre snaplen représente la taille maximale (en octet) d’un paquet intercepté (max=65535).
Le paramètre promisc contrôle le fonctionnement de la carte réseau. S’il est
égal à 1, la carte est en mode transparent, c’est à dire qu’elle intercepte tous les paquets (même ceux qui ne lui sont pas destinés). Si cette valeur est différente de 1, la carte n’acceptera que les paquets lui étant destinés. Pour notre programme, la carte sera en mode transparent donc promisc sera égal
Le paramètre to ms spécifie le délai (en millisecondes) d’interception de paquets. Lorsque ce délai est écoulé, la fonction se termine.
Le paramètre *errbuf est un pointeur sur une chaˆ?ne de caractères pouvant contenir une message d’erreur en cas de mauvaise ou non exécution du programme.
La deuxième fonction est la fonction u char *pcap next(pcap t *p, struct pcap pkthdr *h). Cette fonction utilise comme argument le descripteur ”p” pour accéder à la carte réseau. Elle renvoie chaque paquet intercepté. C’est une fonction bloquante.
Ces deux fonctions sont toujours utilisées en série, la pcap open live initialise la carte réseau et renvoie un descripteur de fichier, ensuite ce descripteur de fichier est utilisé par la fonction *pcap next qui intercepte les paquets.
Voici la fonction ReceptionPaquet : void ReceptionPaquet(unsigned int IP Cible, u char *Device)
/*Variable utilisée par les fonctions de libpcap (elle contiendra notre paquet*/ struct pcap pkthdr Header;
/*Descripteur représentant l’interface réseau (retourné par la fonction pcap open live()*/ pcap t *Descr;
/*Structure pour l’en tête ETHERNET*/ struct ethhdr *EtherHdr;
/*Structure pour l’en tête IP*/ struct ip *IpHdr;
/*Structure pour l’en tête TCP*/ struct tcphdr *TcpHdr;
/*Tampon pour retour d’erreur*/ char ErrBuf[LIBNET ERRBUF SIZE];
/*Pointeur vers le paquet*/ u char *Packet;
/*Descripteur pour libnet*/ libnet t *l;
/* Initialisation pour les fonctions de libnet (obtention d’un descripteur)*/
l=libnet init(LIBNET RAW4,NULL,ErrBuf);
/*Descripteur ”Descr” sur l’interface réseau en écoute*/
Descr = pcap open live(Device,65535,1,0,ErrBuf);
while(1) /*On recupére le paquet (il est pointé par la variable ”Pa-
cket”)*/
Packet = (u char *) pcap next(Descr,&Header);
/*On convertit le paquet pour analyser l’en tête ETHERNET*/
if(ntohs(EtherHdr-¿h proto)==ETH P IP)
/*On convertit le paquet pour analyser l’en tête IP*/
IpHdr = (struct ip * ) (Packet +ETH HLEN); /*On verifie si le protocole est bien TCP*/
if(IpHdr-¿ip p==IPPROTO TCP)
TcpHdr = (struct tcphdr * ) ( Packet + ETH HLEN +
4 * (IpHdr-¿ip hl));
/* Cela sert à verifier que nous avons bien envoyé le paquet et qu’il provient bien de la machine ”scannée”. Ceci se base sur l’analyse des adresses IP */
if(
(IpHdr-¿ip src.s addr==IP Cible) &&
(IpHdr-¿ip dst.s addr== libnet get ipaddr4(l)))
/*Pour verifier que le port d’envoi correspond au même que le notre*/ if(ntohs(TcpHdr-¿dest)==PORT SOURCE)
/*Si les flags SYN et ACK sont armés, le port est ouvert*/ if((TcpHdr-¿ack==1) && (TcpHdr-¿syn==1))
printf(”Le port %d est ouvert n”,ntohs(TcpHdr-¿source)); /*Destruction du descripteur*/ libnet destroy(l);
Pour envoyer (void EnvoiPaquet(unsigned int,int)) :
La fonction EnvoiPaquet permet d’injecter les paquets sur le réseau. Pour cela, elle utilise la librairie Libnet.
Nous allons utiliser différentes fonctions de la librairie Libnet.
La première est la fonction libnet t *libnet init(int injection type, char *device, char *err buf).
Cette fonction permet d’initialiser une interface d’injection des paquets. Elle traite trois arguments :
Le premier injection type définit le type d’interface (niveau ethernet, IP ou TCP). Pour notre programme, une injection au niveau IP suffira (valeur LIBNET RAW4).
Le deuxième argument *device est un pointeur sur la chaˆ?ne de caractère contenant le nom de l’interface réseau qui sera sollicitée (ex : eth0), la valeur NULL conviendra car libnet choisira automatiquement une carte réseau.
Le dernier argument *err buf est utilisé pour les messages d’erreur (comme libpcap). Elle renvoie un pointeur sur l’interface d’injection de type libnet t.
Ces fonctions prenent en argument le pointeur sur l’interface d’injection (pointeur renvoyé par la fonction libnet init).
La fonction int libnet write(libnet t) injecte le paquet.
La fonction void libnet destroy(libnet t) détruit l’interface crée par libnet.
Voici la fonction EnvoiPaquet :
void EnvoiPaquet( /*IP Machine Cible*/ unsigned int IP cible, /*Port Destination*/ int port dest)
/*Variables pour les fonction de libnet*/ char ErrBuf[LIBNET ERRBUF SIZE]; libnet t *l; libnet ptag t Tag;
/*Pour initialiser et obtenir un descripteur*/ l=libnet init(LIBNET RAW4,NULL,ErrBuf); /*Pour construire l’en tête TCP*/
Tag=libnet build tcp(
PORT SOURCE, /*Port Source*/ port dest, /*Port destination*/
0, /*N? Séquence*/
0, /*N? Acquitement*/
TH SYN, /*Demande de connexions*/
4096, /*Taille de fenêtre*/
0, /*Somme de contrôle*/
0, /*Pointeur d’urgence*/
LIBNET TCP H, /*Taille en tête*/
(u char *) (NULL),/*Pointeur vers les données*/
0, /*Taille des données*/
0);
/*Pour construire l’en tête IP*/
Tag=libnet autobuild ipv4(
LIBNET IPV4 H+LIBNET TCP H, /*Taille du paquet*/
IPPROTO TCP, /*Protocole*/
IP cible, /*Adresse IP de la machine Cible*/
l);
/*Pour envoyer le paquet*/
/*Pour détruire le descripteur*/ libnet destroy(l);
La fonction main() :
La fonction main() traite les arguments de la ligne de commande, lance un processus enfant dans lequel, elle utilisera la fonction ReceptionPaquet et attendra une seconde pour le lancement du processus et de la fonction ReceptionPaquet puis exécutera 16000 fois la boucle d’envoi de paquets (16000 ports).Elle attendra encore 5 secondes pour le traitement des réponses et terminera le programme.
Voici la fonction main :
extern char *optarg; extern int optind; extern int opterr;
int main(int argc,char *argv[])
/*Pour avoir les paramètres de la ligne de commande*/ static char optstring[]=”i :c :”; int optch; char *Device;
/*Pour stocker l’adresse IP*/ u int32 t IP Cible;
/*Variable qui va re¸cevoir le PID du processus enfant*/ int Pid;
/*Pour traiter les paramètres de la ligne de commande*/
if(argc ¡ 5)
printf(” nscanner -i interface -c IP Cible n”); return 0;
while((optch= getopt(argc,argv,optstring))!=EOF) switch(optch)
/*Pour le nom de l’interface*/ case ’i’ :
Device = (char *) (malloc(strlen(optarg)*sizeof(char))); strncpy(Device,optarg,strlen(optarg)); break;
/*Pour l’adresse IP de la machine cible*/ case ’c’ :
IP Cible = inet addr(optarg); break;
default : printf(” nscanner -i interface -c IP Cible n”); return 0;
/*On lan¸ce le processus enfant (récuperation et analyse des paquets*/ Pid=fork(); if(Pid==0)
ReceptionPaquet(IP Cible,Device);
/*On attend une seconde*/
sleep(1);
/* On envoie les paquets sur les 16000 premiers ports*/
for(i=0;i¡16000;i++)
EnvoiPaquet(IP Cible,i);
/*On détruit le processus enfant*/
sleep(5);
kill(Pid,SIGINT);
return 0;
}
10.2.2 Comment obtenir et compiler le source entier du programme?
Pour le code source du programme et les commandes de compilation , consultez le lien :
10.2.3 Documents
Pour libnet :
Pour libpcap :
Chapitre 11
Annexes
11.1 Les sites et revues à consulter régulierement
Pour les sites :
Cert : (en anglais) Securityfocus :
(en anglais) Packetstorm security : (en anglais) Bugtraq :
(en anglais)
Le site du CNRS :
Le site du Renater :
Phrack (surtout en Janvier et aout/septembre!) : (en anglais) Pour les revues :
Pour les revues en fran¸cais disponibles en kiosque, je vous conseille d’acheter le magazine MISC. Je ne suis pas dépendant de MISC, mais c’est le seul magazine entièrement dédié à la sécurité apportant des réponses concrètes à de nombreux problèmes. Il est disponible tous les 2 ou 3 mois environ chez votre libraire.
Pour plus de renseignements :
11.2 Remerciements
Je tiens à remercier Nicolas Buratto et Christian Duclou pour leur aide sur ce manuel.
Un grand merci au Mirabellug.
Un petit coucou à celui sans qui rien n’aurait pu être possible.
Pour le soutien musical et moral : Jimi, Thimothy, Hunter, Tom, Neil et les tous les autres
When the going gets weird, the weird turns pro
Index
A
antisniff . 47 antivirus 42 architecture .. 104
ARP-Poisoning 64 arpwatch 65
B
backdoors .. 43 à distance . 43
logicielles .. 43
bannières 23
bibliotheques partagées . 45
BIOS . 11 bogues .. 26 bombes e-mail . 56
bombes logiques .. 53 boot . 10 disquette .. 10 brute forcing .. 59
C
Cain . 60
carte réseau
transparent 47 Chevaux de Troie . 42 chroot 39 configuration .. 31 mauvaise .. 26
D
dénis de services
applicatifs . 26 distribués .. 56 réseaux . 54 désynchronisation TCP . 65 détourment de flux .. 64
DHCP .. 71
épuisement de ressources . 71 faux serveurs . 71
dictionnaire
attaque . 59
DNS . 73 cache poisoning .. 74
spoofing 73 dsniff . 47
E
encapsulation .. 68 ethereal . 47 exploits . 27 EXPN 96
F
faille . 22 failsafe .. 10 FAT .. 10 FINGER 77
firewalking . 32 firewall .. 31 attaques 31
fragmentation de paquets .. 55
FTP . 79 attaque par rebonds 80
serveur anonyme 79
H
HTTP 81 I
IDENT .. 83
IDS .. 34 installations 26 IP spoofing . 84
IpvSec .. 36, 48
J
John The Ripper . 59
K
LophtCrack 60
M
man in the middle 67 MBR . 51 mot de passe
attaques 59 interception .. 47
N
NETBIOS .. 90
Netcat .. 22
NFS .. 91 Nimda .. 52 NIS .. 92
Nmap 14
NTFS 10
NTFS2DOS 10
O
outrepassements de droits . 27
P
ping of death .. 55 PORTMAP 93
prelude .. 34
R
réseau
privé virtuel .. 36 rootkit .. 45
S
scan .. 14 furtifs .. 16
vanilla TCP .. 16 scanner .. 14 scripts 27
SHTTP . 82
signatures .. 42
SMB . 94 scans de shares .. 94 SMTP 96
snort . 35
SQL .. 97 injection 97 SSH .. 98
SSL .. 82
SYN flood .. 54
T
tcpdump 47 TELNET 99
traceroute .. 32 trappe 43 Trinux .. 10 tunnel 36
U
UDP Flood . 54
UML . 39
User Mode Linux . 39
V
vers .. 52
virus . 51 furtifs .. 51 polymorphes .. 51
VPN . 36
VRFY .. 96
W
Winux .. 51
X
XWINDOW .. 100
[1] Nmap est disponible sous et Linux à l’adresse http , la version décrite dans ce chapitre étant celle disponible sous Linux.
Netcat est téléchargeable sur : http
http dans la rubrique ”Vulnerabilites”
librement téléchargeable sur
Disponible librement sur http
téléchargeable librement sur
téléchargeable librement sur
disponible sur
disponible sur
disponible sur
[11] disponible suret Linux à l’adresse http
[12] L’algorithme DES a été adopté par la NSA comme standard à la fin des années 70. Le DES est distribué publiquement mais il a été développé dans le secret. Certains suspectent le gouvernement américain de s’être reservé une ”gâche secrète” pour une décryptage plus rapide, je vous conseille d’utiliser d’autres algorithmes à la place.
John The Ripper est disponible sur http
Idem.
est disponible sur http
Disponible librement sur ftp
Suivre un cours en ligne est très simple et est de nos jours à la portée de tous. En effet, la seule chose dont vous avez besoin est une connexion Internet, de préférence avec une connexion rapide, et un terminal, que ce soit un smartphone, une tablette ou un PC.
Nous avons compilé pour vous une liste des meilleurs cours en ligne, pour vous procurer des connaissances sur un large éventail de domaines et de sujets. Nos cours sont répartis en 11 grands blocs thématiques: Informatique ;Comptabilité; Economie; Marketing; Management; Gestion ;Statistiques ; Finance ;Commerce; Electronique et Electricité.
Le champ de recherche ( à droite de l'icône de la loupe ) vous permettra de trouver le cours qui vous intéresse. Vous avez ainsi la possibilité de décider vous-même comment vous voulez apprendre: vous pouvez sauter des chapitres, mais vous pouvez également les répéter indépendamment; ou combiner plusieurs cours sur un même sujet.
Formez-vous en toute autonomie aux logiciels de bureautique du pack Microsoft Word, Excel, Powerpoint, Outlook et Access; et profitez des différentes ressources sur notre plateforme: des cours en PDF, des tutoriels avec exercices pratiques, des modèles/templates prêt à l'emploi.
Grâce à Cours-Gratuit, vous apprendrez à utiliser les logiciels de bureautique de façon optimale et efficace que ce soit pour votre travail professionnel, collaboratif ou dans le cadre de projets personnels.
Les tutoriels et les vidéos d’apprentissage font partie intégrante de notre quête d’informations. La raison est que ces méthodes se veulent plus interactives et plus spécifiques que les manuels et les livres.
Tous nos tutoriels sont le résultat d’une recherche minutieuse et approfondie. Ils vous permettront d'acquérir de nouvelles connaissances. Qu’il s’agisse d’un concept, d’un nouveau logiciel ou des instructions de réparation, vous êtes au bon endroit !
Si vous êtes étudiant ingénieur, dans une école supérieure ou encore à l'université, et que vous cherchez des cours ou des supports techniques gratuits, vous trouverez dans notre plateforme des centaines de cours informatiques, de logiciels et d’applications. Ces derniers sont téléchargeables en formats DOC, HTML, et PDF.
Et comme nous savons que les exercices sur divers supports facilitent l'assimilation des cours , nous mettons à votre disposition une kyrielle d’exercices. Certains comprennent des applications directes du cours, tandis que d'autres exigent plus de réflexion.
L'amélioration constante des compétences et des capacités consubstantielles à l'environnement de travail est l'une des principales exigences des employeurs. J’ai décidé de créer cette plateforme en 2010 pour encourager la promotion de la formation, faciliter l'accès aux connaissances, et fournir un contenu de qualité pour les professionnels et les étudiants.
Salim KHALIL
Fondateur, Directeur de la publication
Le monde du travail, aujourd'hui plus que jamais, vous oblige à mettre à jour constamment vos compétences. Par conséquent, l'élément fondamental pour saisir les opportunités auxquelles nous aspirons, est certainement celui d'avoir une solide formation professionnelle , qui peut être obtenue grâce à des cours en ligne.
Soukaina Sbai Tangi
Résponsable Editorial