TP Sécurité réseau : Firewalls et outils d audit réseau CE TP ILLUSTRERA 1 Configuration réseau d un routeur filtrant 2 Utilisation des règles de filtrage ACL avec un routeur CISCO 1605 3 Utilisation de IPTABLES pour le filtrage des données par l intermédiaire d un routeur logiciel LINUX 4 Outils d audit réseau IENAC TR Durée : 4H Remarques préliminaires Pour ce TP, chaque binôme travaille sur un îlot isolé et dispose de trois PC Linux équipés de deux cartes Ethernet. Chaque îlot est doté de deux HUBs Ethernet ainsi que de deux SWITCHs Ethernet. Un routeur CISCO série 1600 est aussi disponible. Pour la partie 1 du TP seuls 2 PCs linux, deux HUBs (ou SWITCHs au choix) réseau et le routeur Cisco seront nécessaires. Le troisième PC linux n interviendra que dans les parties 2 et suivantes du TP. Toutes les commandes réseau (ifconfig, wireshark, iptables ) doivent être exécutées en tant que ROOT. Le mot de passe vous sera communiqué au début du TP. Attention en tant que ROOT vous pouvez endommager gravement votre système et hypothéquer le bon déroulement de votre TP, il est donc nécessaire de réflechir avant d exécuter toute commande en tant qu utilisateur ROOT. Le compte rendu devra faire apparaître en clair la séquence des commandes que vous aurez réalisée ainsi que les captures d écran des situations que vous jugerez utiles de mentionner par écrit. Toute commande ou capture d écran devra être justifiée et son fonctionnement explicité avec soin. Pour éviter tout problème avec une configuration de firewall existante dans votre îlot, veuillez exécuter le script de la partie II.III.III sur chacune de vos machines avant d aller plus loin.
I. Partie 1 : configuration réseau minimale et routage I.I. Branchement et découverte du matériel Connectez chacune de vos machines à un des deux hubs (ou switchs) via une prise RJ45. Connectez ensuite le routeur Cisco sur chacun des hubs (ou switchs) que vous avez utilisés précédemment en prenant soin de connecter chacune des interfaces du routeur sur un réseau disjoint. I.II. Paramétrage IP La commande ifconfig permet de récupérer les informations sur les interfaces réseaux de votre machine, utilisez la pour configurer les interfaces de vos deux machines afin de leur attribuer une adresse réseau valide. Il est vivement conseillé de regarder le man de cette commande. Attention au choix des adresses réseaux qui doivent faire appartenir chaque machine à des réseaux différents La configuration se fera sur l interface eth1 (carte réseau située en bas de votre unité centrale). - les réseaux utilisés sont les réseaux 192.168.1.0 et 192.168.2.0 - le dernier chiffre de la partie hôte de l adresse doit reprendre le numéro de la machine g17-xx (par exemple machine G17-12 => @IP 192.168.X.12). I.III. Utilisation d un routeur Nous allons maintenant utiliser un routeur CISCO de la série 1600 pour interconnecter les deux réseaux logiques avec les possibilités actuelles des matériels réseaux. I.III.I. Petit introductif au routeur CISCO série 1600 Les routeurs CISCO que nous utilisons proposent deux niveaux de commandes : le niveau EXEC, qui est assez limité et le niveau ENABLE qui correspond au niveau super-utilisateur. En mode ENABLE, le prompt change pour commencer par la caractère #. A chaque moment, on peut demander de l aide par l intermédiaire du caractère «?». Ainsi, dès le prompt, l utilisation du caractère «?» affiche l intégralité des commandes disponibles sur le routeur. Dans le même état d esprit, le système d exploitation du routeur est capable de compléter les commandes, quand il n y a pas de problème d interprétation. Ainsi, les commandes «en» «ena» «enable» sont identiques. De plus, la demande d aide permet de compléter les commandes, par affichage des paramètres obligatoires ou optionnels. Par exemple, la suite de commandes suivantes permet de se mettre en mode configuration : en config? Passe en mode ENABLE après saisie du mot de passe Demande de l aide sur le mode de configuration. Il est proposé de configurer le routeur par l intermédiaire du terminal, d un serveur TFTP, par le réseau. Les routeurs CISCO disposent d un espace mémoire pour stocker la configuration. Par défaut, la configuration en cours est en mémoire volatile. Elle peut être sauvegardée en demandant sa copie dans une mémoire non volatile par la commande : copy running-configuration startupconfiguration.
I.III.II. Configuration basique Le routeur le plus haut présent dans la baie de brassage n est pas configuré. On va donc commencer à le configurer, par l intermédiaire de la liaison série. Relier une des machines de l îlot à la prise série du routeur, lancer l outil kermit, signaler à kermit l utilisation de la liaison série par la commande set line /dev/ttys0, la non vérification de la porteuse par la commande set carrier-watch off et demander la connexion par la commande connect. Allumer le routeur et attendre la connexion entre le terminal et le routeur. Un certain nombre d information vont apparaître. A l issue de ceci vous pourrez effacer la configuration actuelle du routeur puis la mettre à jour en fonction des adresses réseaux que vous aurez choisies. Le routeur aura pour adresse de machine (dans chacun de vos réseaux respectifs) la valeur 100. La configuration du routeur (cf. setup simplifié ci-après) devra être la suivante : - nom du routeur = nom de la baie de brassage - le secret partagé et le mot de passe du compte enable = cisco. Le routeur signalera le doublon et demandera un autre mot de passe. On fournira à nouveau le mot de passe cisco qui sera alors accepté. - le mot de passe du terminal virtuel sera telpass. - la supervision SNMP ne sera pas activée. - l interface ethernet 0 sera configurée. Pour pouvoir avoir accès au setup simplifié des routeurs Cisco il est nécessaire d effectuer la séquence de commandes suivantes : enable (mdp cisco) erase startup reload -- la machine reboote avec une configuration vierge et le setup simplifié par -- questions réponses apparait -- à l issue de ce setup il ne reste plus qu à finaliser la configuration par les commandes enable configure terminal interface ethernet 0 no shutdown exit ip routing exit show running-config disable logout Commenter chacune de ces commandes et expliquer leur rôle.
La configuration par l intermédiaire du port série est assez laborieuse. On va donc en rester là avec cette méthode et passer maintenant à une configuration par telnet, qui est nettement plus agréable au niveau des temps de réponse. I.III.III. Fin de la configuration du routeur Connecter une machine et le routeur par telnet. On va maintenant configurer l interface ethernet 1 du routeur. Pour ce faire, il faut se placer en mode enable, puis demander à passer en mode configuration par terminal (commande configure terminal). Avec un peu de réflexion, vous devez pouvoir arriver à configurer l interface 1 correctement. I.III.IV. Vérification de la configuration du routeur Maintenant que le routeur est configuré, on va vérifier cette configuration par l utilitaire ping, disponible sur le routeur. A l aide de cet utilitaire, essayez de joindre les machines du réseau. A ce niveau, le routeur doit être capable de joindre toutes les machines. Essayer maintenant de faire communiquer les machines de votre îlot. Cela fonctionne-til (justifier)? I.IV. Routes statiques On veut maintenant faire en sorte que les deux réseaux, avec les caractéristiques définies précédemment soient capables de se voir. Pour réaliser cela, on va mettre en place des routes statiques, par l intermédiaire de la commande route. Par exemple sur une des machines linux d extrémité on exécute la commande : route add net 192.168.x.0/24 gw 192.168.x.100 eth1 Visualiser le résultat à l aide de la commande route n. Remarque : si des routes statiques passant par eth0 persistent dans votre configuration, exécutez la commande ifconfig eth0 down. Réaliser ces commandes sur vos deux machines d extrémité et vérifier la connectivité entre ces deux machines à l aide de la commande ping. II. II.I. Partie 2 : notion de filtrage en sécurité réseau Filtrage sur les routeurs : découverte des ACL CISCO Nous allons maintenant utiliser les possibilités de filtrage offertes par le routeur CISCO. Pour ce faire, nous n allons utiliser qu une petite partie de ces capacités, en se limitant au filtrage de niveau réseau. Cette fonctionnalité est appelée Access Control List. II.I.I. Introduction des ACL CISCO Les Access Control List (ACL) sont des listes de filtrage présentes sur quasiment tous les routeurs CISCO. On définit des autorisations et des interdictions. Une ACL :
- est définie par un numéro, qui permet de classifier sa complexité (d un simple filtrage sur les adresses IP à des filtres plus élaborés prenant en compte les ports sources et destinations des protocoles). - Par les règles qui lui son propre - Par son application sur une interface en entrée ou en sortie de cette dernière - Par un parcours séquentiel lors de son application, avec une sortie dès qu une condition est validée. L ordre des autorisation et des interdictions est donc très important. Nous nous limiterons à l utilisation de l ACL pour configurer les communications entre deux machines (ou leurs réseaux respectifs), par une (ou plusieurs) ACL étendue (numéro > 99) agissant sur le protocole transporté uniquement. Remarque : il est à signaler que la configuration des ACL est assez délicate et qu il n est pas possible de changer l ordre des autorisations et des interdictions. Il est donc vivement conseillé de commencer par une réflexion papier avant de se lancer directement sur la configuration. Néanmoins, il est possible d effacer une access-list erronée. Pour cela, il faut utiliser la commande : no access-list <ACLnumber> II.I.II. Paramétrage des ACL Pour paramétrer les ACL, se mettre en mode ENABLE, puis en configuration terminal. On voit alors, par l aide des commandes, qu on a accès aux ACL. Le numéro de l ACL sera le 105. Une fois l ACL paramétrée, on attache cette ACL à une interface, par la configuration de l interface : ip access-group 105 [in/out]. Ce qui suit est un exemple d une ACL qui peut être positionnée, elle est à adapter en fonction de vos configuration réseaux (notamment les adresses IP qui apparaissent dans les ACL). nantes(config)#access-list? <1-99> IP standard access list <100-199> IP extended access list <1100-1199> Extended 48-bit MAC address access list <1300-1999> IP standard access list (expanded range) <200-299> Protocol type-code access list <2000-2699> IP extended access list (expanded range) <700-799> 48-bit MAC address access list nantes(config)#access-list 105? deny Specify packets to reject dynamic Specify a DYNAMIC list of PERMITs or DENYs permit Specify packets to forward nantes(config)#access-list 105 deny? <0-255> An IP protocol number ahp Authentication Header Protocol [ / ] icmp Internet Control Message Protocol [ / ] ip Any Internet Protocol [ / ]
tcp udp Transmission Control Protocol User Datagram Protocol nantes(config)#access-list 105 deny ip? A.B.C.D Source address any Any source host host A single source host nantes(config)#access-list 105 deny ip 100.0.1.9? A.B.C.D Source wildcard bits nantes(config)#access-list 105 deny ip 100.0.1.9 0.0.0.0? A.B.C.D Destination address any Any destination host host A single destination host nantes(config)#access-list 105 deny ip 100.0.1.9 0.0.0.0 100.0.2.10 0.0.0.0? fragments Check non-initial fragments log Log matches against this entry log-input Log matches against this entry, including input interface precedence Match packets with given precedence value tos Match packets with given TOS value <cr> On met l'acl sur l'interface eth 0 en entrée : nantes(config)#interface ethernet 0 nantes(config-if)#ip access-group 105? in inbound packets out outbound packets nantes(config-if)#ip access-group 105 in On vérifie la configuration nantes(config-if)#exit nantes(config)#exit nantes#sh nantes#sh nantes#show run nantes#show running-config Building configuration... Current configuration: [ / ] interface Ethernet0 ip address 100.0.1.1 255.255.255.0 ip access-group 105 in no ip directed-broadcast interface Ethernet1 ip address 100.0.2.1 255.255.255.0 no ip directed-broadcast ip classless access-list 105 deny ip host 100.0.1.9 host 100.0.2.10 Objectif initial :
- A l aide de la commande Telnet, positionnez vos ACL pour autoriser le trafic ICMP entre vos deux réseaux. Questions : 1. Quel est le réglage à mettre dans l ACL? 2. Sur quelle interface faut-il l appliquer? En entrée ou en sortie? Remarque : il n existe pas une réponse unique aux deux questions précédentes. 3. Que se passe-t-il lorsque l ACL est appliquée sur l interface? II.I.III. Vérification et évolution de l ACL En fait, il n y a plus de communication entre les deux réseaux logiques. Ceci est dû au principe suivant : quand on programme une ACL, le routeur ajoute systématiquement une dernière instruction, qui est généralement une interdiction de tout ce qui n a pas été explicité précédemment dans l ACL. On ne corrigera pas ce problème pour autoriser le trafic Telnet, on se contentera de la connexion au routeur CISCO avec le lien série pour terminer la configuration des ACL. Objectif final : - Complétez vos ACL pour autoriser un flux SSH client d un réseau à se connecter sur un serveur SSH de l autre réseau. Questions : 4. Quel est le réglage à mettre dans l ACL? 5. Sur quelle interface faut-il l appliquer? En entrée ou en sortie? 6. Comment validez que l ACL fait uniquement le comportement pour laquelle nous l avons défini? 7. Rajoutez le cas échéant les ACL qui manquent à la configuration de votre routeur II.II. Evolution de la configuration réseau Nous allons maintenant délaisser l utilisation d un routeur matériel Cisco et le remplacer par un routeur logiciel Linux, qui va nous permettre de tester les fonctionnalités de filtrage avancé ainsi que d audit réseau. Pour ce faire, vous utiliserez la troisième machine à votre disposition dans l îlot de TP et vous configurerez ses deux interfaces pour que chacune d elle appartienne à un des réseaux défini au début de ce tp. Vérifier l activitation du forwarding IP sur la machine qui vous sert de routeur logiciel (fichier /proc/sys/net/ipv4/ip_forward à 1). A l issue de cette configuration, veuillez retester la connectivité entre les machines d extrémité à l aide de la commande ping.
II.III. Filtrage avancé avec «iptables» II.III.I. Description Iptables est le module noyau de linux gérant le filtrage des paquets. Il peut donc constituer un bon pare-feu, tant sur une station de travail qu'en tant qu'équipement dédié. Iptables est constituée de 3 tables. La trame est reçue par la carte réseau, qui décapsule le paquet IP et le relaie au noyau. Le paquet va ensuite traverser la chaîne INPUT, puis la chaîne FORWARD et enfin, la chaîne OUTPUT juste avant son envoi à la carte réseau. Par ailleurs, la table FILTER permet elle de traiter les paquets devant être routés. Elle permet donc de rediriger des flux à la volée, faire du NAT... Le filtrage est défini sous la forme de règles, aboutissant à une action : DROP, ACCEPT, LOG, REJECT, MASQUERADE, DNAT, SNAT... II.III.II. Commandes utiles Les commandes suivantes vous seront utiles : iptables -F : enlève les règles existantes sur la table principale (INPUT, OUTPUT, FORWARD) iptables -X : enlève les règles utilisateurs iptables -L : liste les règles iptables -P INPUT DROP : définit la police par défaut pour la table concernée iptables -t XXX -F : enlève les règles sur la table XXX. Vous utiliserez principalement les tables suivantes : o mangle : permet d'effectuer des traitements post et pré routage. o nat : pour la traduction d'adresses. Il existe deux types de chaînes : POSTROUTING et PREROUTING, avec les cibles MASQUERADE (traduction d'adresse), DNAT (changement de l'adresse ou du port de destination), SNAT (changement de l'adresse ou du port de la source) iptables -A INPUT -i lo -j ACCEPT : ajoute une règle dans la table principale INPUT qui autorise les paquets venant de l'interface loopback iptables -A FORWARD -i eth0 -o eth1 -s 192.168.100.0/24 -d 192.168.0.1 -m state -- state NEW,ESTABLISHED,RELATED -j ACCEPT : accepte de relayer les paquets venant de l'interface eth0 du réseau 192.168.100.0/24 et sortant sur l'interface eth1 vers 192.168.0.1 si la connexion est nouvelle, déjà établie, ou relative à une connexion déjà établie (utile pour les connexions FTP par exemple). iptables -N LOG_DROP : crée une nouvelle chaîne iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.0.1:22 : redirige tous les paquets TCP destinés au port 2222 vers l'hôte 192.168.0.1 sur le port 22 II.III.III. Initialisation iptables Avant de démarrer il est nécessaire d activer tous les échanges sur les différentes tables pour ne pas induire de comportement parasite. iptables -X
iptables P INPUT ACCEPT iptables P OUTPUT ACCEPT iptables P FORWARD ACCEPT iptables F INPUT iptables F OUTPUT iptables F FORWARD Commenter le résultat de l exécution de ces commandes en vous aidant du résultat de la commande iptables L avant et après l exécution du script ci-dessus. Remarque : cette configuration n est pas celle utilisée par défaut par les administrateurs réseau qui choisissent plutôt de tout bloquer et d autoriser uniquement les connexions qu ils jugent nécessaire. Néanmoins pour des besoins de simplification des règles nous ne suivront pas ce type de politique dans un premier temps. II.III.IV. Exercice basique Faites en sorte d interdire aux deux machines d extrémités de se pinguer. Pour plus de simplicité, vous pouvez créer un script regroupant toutes les règles définies, à lancer en une seule fois. Ceci évite de multiplier les fautes de frappe. Vous pouvez vous inspirer du script disponible sur chacun des ilôts dans le répertoire ~eleve/secre/ilot1_config_stagiaires_iptables.txt. Il est impératif de copier ce fichier et de ne pas travailler directement dessus. II.III.V. Exercice avancé Maintenant nous allons nous mettre dans le cas de figure d un vrai administrateur réseau. Il est donc nécessaire d interdire tous les échanges sur les différentes tables pour ne pas induire de failles de sécurité et de n autoriser que les connexions que l on a identifié. iptables P INPUT DROP iptables P OUTPUT DROP iptables P FORWARD DROP Nous proposons dans cette configuration que vous mettiez en place les règles suivantes : Autoriser les deux machines d extrémités à se pinguer. Autoriser les flux HTTP et SSH au sein du réseau. Pour plus de simplicité, vous pouvez, comme à la question précédente, créer un script regroupant toutes les règles définies, à lancer en une seule fois. Ceci évite de multiplier les fautes de frappe.
III. III.I. Partie 3 : outils de sécurité réseau pour l audit Scanner de port : NMAP Nmap permet d'obtenir des informations sur le système distant. La commande suivante permet de pinger un ensemble d'hôtes pour vérifier qu'ils sont atteignables : nmap -sp 192.168.X.1-255. III.I.I. Exercice Remarque : avant d éxécuter NMAP, pensez à supprimer les règles de filtrage IPTABLES précédemment mises en place. Vous pouvez utiliser la séquence de commandes suivantes : iptables -X iptables P INPUT ACCEPT iptables P OUTPUT ACCEPT iptables P FORWARD ACCEPT iptables F INPUT iptables F OUTPUT iptables F FORWARD Dans un deuxième temps, détectez les ports réseaux ouverts (de 1 à 5000) sur votre client, et détecter le système d'exploitation distant (vous pouvez vous aider de nmap -h ou man nmap). Attention : le scan d'un hôte est considéré juridiquement comme une attaque réseau. Seul est autorisé le scan sur un hôte dont l'auteur est lui même l'administrateur. Un scan doit être considéré comme un moyen pour réaliser un audit, mais en aucun cas une attaque. Corréler les informations relevées avec Wireshark pour décortiquer le fonctionnement de cet outil. III.II. Outil NESSUS Nessus est un outil permettant de détecter les failles d'un serveur. Il est évident que Nessus ne doit être exécuté que sur un de ses propres serveurs afin de tester sa robustesse et sa protection aux attaques. Une attaque réseau est passible de peines de prison. Nessus est continuellement mis à jour et possède actuellement plus de 10 000 plugins différents. Nessus se compose d'une partie serveur et d'une partie client. Le serveur ne devrait être démarré qu'à la demande, même s'il n'autorise que des connexions TLS et qu'une authentification par certificats est possible. En d'autres termes, il est conseillé d'arrêter le serveur lorsque l'opération souhaitée est terminée, afin d'éviter que tout autre client s'y connecte, et détecte ainsi les failles du réseau interne. Les versions 2.x sont opensource, les nouvelles versions 3.x sont maintenant devenues propriétaires. Pour démarrer la partie serveur exécutez la commande suivante : /etc/init.d/nessusd start
Pour démarrer la partie client exécutez la commande suivante : nessus III.II.I. Exercice Réalisez un scan de votre routeur logiciel et de votre machine cliente. Pour cela vous utiliserez le compte eleve et le mot de passe eleve à spécifier dans le logiciel nessus. Corréler les informations relevées avec Wireshark pour décortiquer le fonctionnement de cet outil. Des vulnérabilités importantes ont-elles été détectées?