TP Sécurité réseau - recherche.enac.fr

Transcription

TP Sécurité réseau - recherche.enac.fr
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.
II.III.I.
Filtrage avancé avec « iptables »
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.
Partie 3 : outils de sécurité réseau pour l’audit
III.I.
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 ?