Configuration avancée et sécurisation d’un routeur Cisco (IOS 12.4 et supérieur)

Configuration avancée et sécurisation d’un routeur Cisco (IOS 12.4 et supérieur

Introduction

Le but de cet article est de configurer proprement un routeur cisco. Afin d’avoir une vue plus rapide sur l’ensemble des options, nous allons analyser un fichier de configuration réalisé dans le cadre d’un projet IS1.

Pourquoi sécuriser un routeur ? Pour renforcer la sécurité d’un réseau bien évidement . C’est pour cela que nous allons essayer de voir la plus grande partie des options qui le permettent et que certaines peuvent paraitre un peu « extreme ». Cependant, il ne faut pas perdre de vue que si vous subissez une attaque avec du matériel cisco, votre pirate est soit quelqu'un connaissant parfaitement IOS soit un parfait inconscient. Le premier cas, le plus probable, oblige à envisager le plus de cas de figures possibles.

Nous nous sommes volontairement limiter à un trafique en interne sans accès à internet.

1 Configuration générale du routeur.

!

Commentaires propre au fichier de configuration du routeur.

Version 12.4

Version de l’IOS utilisé.

service timestamps debug uptime

service password-encryption

no service config

no service pad

no ip bootp server

no ip finger

no service tcp-small-servers

no service udp-small-servers

service timestamps debug uptime:

Mise en place d’un système de temps en milliseconde pour le debugage et le logging.

service password-encryption :

IOS utilise du cryptage pour le mot de passe d’ouverture d’une session en Telnet.

no service config :

Désactive les demandes en TFTP de vérification de mise à jour. Ce trafique est volumineux et ajoute des logs inutiles sur les machines server FTP et sur le routeur. De plus ceci créé du trafique supplémentaire en cas de monitoring.

no service pad:

Cette commande désactive le service d’assembleur/désassembleur de paquets (PAD) et les connexions entre des périphériques PAD et des serveurs d’accès. Source Cisco.

no ip bootp server :

Cette commande désactive le service BOOTP qui autorise le routeur à configurer automatiquement au démarrage les informations Internet nécessaires à partir d’un serveur central, y compris le téléchargement du logiciel Cisco IOS. Source Cisco.

Une attaque existe à ce niveau :

- Lors d’un redémarrage forcé d’un routeur celui-ci peut aller chercher une version modifiée et charger la configuration modifiée.

no ip finger:

Cette commande désactive l’identification des utilisateurs connectés à un périphérique réseau.

Bien que ces informations ne soient pas très sensibles, elles peuvent parfois être utiles à un pirate. Source Cisco.

no service tcp-small-servers,

no service udp-small-servers :

Par défaut dans IOS 11.3 et supérieur: inutile. Source Cisco.

hostname routerA

Définition du nom d’hôte du routeur. Change le prompte de commande également.

enable secret 5 %WhizZ@070458%A

Mise en place de cryptage MD5 pour le mot de passe.

Commande :

enable-password restreint l'accès au mode EXEC privilégié.

enable-secret password (à partir de la console de configuration système servant à définir les paramètres globaux) utilise un procédé de chiffrement propriétaire de Cisco pour transformer la chaîne de caractères du mot de passe.

Ip subnet-zero

Autorise l’adressage avec une adresse de sous-réseaux.

Ip cef

Cette commande autorise le “network accounting of Cisco Express Forwarding (CEF)”. CEF est une fonctionnalité permettant d’effectuer de la commutation de niveau 3 et la mise en cache des routes. A n’utiliser qu’avec une version postérieure à IOS 12.2T : avec les versions précédentes, on peut récupérer une partie des données précédemment traitées par l'équipement affecté grâce à l'envoi de paquets mal formés. Source Cisco. Source Gouvernement.

Commande :

ip cef accounting [per-prefix] [non-recursive]

no ip cef accounting [per-prefix] [non-recursive]

Per-prefix et non-recursive sont optionnels.

Per-prefix accepte une collection de nombre de packets

de bites transmis à une destination.

Non-recursive accepte le mode non récursif (sur les préfixes)

de la commande.

no cdp run

no cdp run :

On ne met pas en marche le protocole de Cisco de découverte du réseau. Ceci évite du trafique et permet d’éviter toute interception / modification d’informations.

2 Configuration des interfaces séries.

interface Serial0

description interface routeur batiment A

ip address 192.168.2.129 255.255.255.252

no ip directed-broadcast

clock rate 128000

bandwidth 128

ip verify unicast reverse-path

ip access-group 100 in

ip access-group 101 in

no ip directed-broadcast : permet d’éviter la réponse à des attaques de types "déni de service" ICMP.


image002.gif

A attaque B en envoyant à D un packet ICMP « echo request » avec en adresse de retour B. Imaginez la même chose, avec un nombre n de machine à la place de D et un envoie de A en broadcast. Tous les ordinateurs vont renvoyer un packet ICMP « echo response » à B.

clock rate 128000 : Définit du côté DCE d’une interface serial la fréquence de cette dernière.

bandwidth 128 : Définit la bande passante réelle d’une liaison en kb.s^-1. Cette information est utilisée par les protocoles de routage dans les calculs de métrique. D’un point de vue sécurité, il est important de les définir car ceci permet d’éviter avec certains protocoles de routage des attaques visant à déstabiliser le réseau. Les pirates floodent le réseau, faussent les calculs de métrique et obligent à utiliser des liaisons lentes.

ip verify unicast reverse-path : On met en place ici l'algorithme de cisco vérifiant le spoufing d'adresse ip Unicast Reverse Path Forwarding (Unicast RPF).

ip access-group 100 in :

On associe à chaque interface du routeur une ACL ou access-liste ou règle de filtrage ip (niveau 3). On peut aussi préciser le sens du trafic selon qu'on souhaite que l'ACL s'applique aux paquets entrant dans le routeur ou bien aux paquets sortant du routeur par une interface donnée.

image004.gifimage004.gif

Prenons l’exemple d’une ACL de type « access-list 100 deny ip any any » qui sur l’interface A du routeur est de type in, tout le trafique arrivant sur cette interface ne sera pas accepté.

Prenons l’exemple d’une ACL de type « access-list 101 permit tcp 192.168.0.0 0.0.0.255 0.0.0.0 255.255.255.255 eq 53 » qui sur l’interface B du routeur est de type out, tous le trafique partant de cette interface et allant vers les réseaux agrégés par cette adresse sur cette interface ne sera pas accepté.

Les ACL ne s’appliquent pas au trafic créé par le routeur mais à celui transitant par le routeur.

3 Configuration des interfaces Ethernets (Vlan).

interface FastEthernet0/0.1

description interface vlan developpeurs

ip address 192.168.0.1 255.255.255.128

ip access-group 12 in

ip verify unicast reverse-path

no ip directed-broadcast

no ip redirects

no ip unreachables

no ip source-route

no ip proxy-arp

encapsulation dot1q 2

no shutdown

no ip redirects : Cette commande empêche l’interface externe de rediriger les requêtes ICMP « ICMP redirect ».

ip verify unicast reverse-path : Très important / !\. Cette commande empêche le spoofing d’adresse IP. Le spoofing d’adresse IP est utilisé notamment dans la technique d’attaque : « Man in the Middle ». Un exemple de cette attaque :

A va envoyer une demande au serveur B (trame unicast) en étant intercepté par C. C lui vole son adresse ip, demande l’information à B et récupère l’information en tant que client authentifié. Un bon pirate renverra l’information à A, Et ainsi personne ne s’apercevra que l’information a été interceptée…On peut imaginer ce scénario où B est un serveur de mail… Avec notre protection, C ne pourra prendre l’adresse de A, et ainsi recevoir les informations de B.

Cette attaque (la plus classique) possède plusieurs subtilités :

- Les pirates peuvent changer 255 fois leur ttl. Le champ TTL (Time To Live) est codé sur 8 bits et indique la durée de vie maximale du paquet. Il représente la durée de vie en seconde du paquet. Si le TTL arrive à 0, alors l'équipement qui possède le paquet, le détruira. Il est important pour cela de sniffer le réseau, et en cas d’attaque de ce type, riposter en bloquant le réseau (flouder le routeur vulnérable) pour avoir le temps d’analyser le réseau.

- Les pirates ne feront pas de traceroute avant pour éviter le log de l’attaque (en effet, celle-ci est violente du fait qu’elle utilise une trame unicast. Donc pas perceptible par une IDS simple.

- Les pirates testeront toutes les interfaces (LAN et DMZ) même si ils sont sur le LAN car, IOS dans ces vieilles versions ne sécurise par des ACL que les interfaces WAN.

Remarque : Ip cef doit être activé pour mettre en place l’anti-spoofing.

no ip directed-broadcast :
Cette commande appliquée sur chaque interface du routeur a pour effet de ne pas propager les broadcasts dirigés. C'est la configuration par défaut à partir de la version IOS 12.0.

no ip unreachables :
cette commande évite de renvoyer les packet ICMP non corrects ou dont les hôtes sont inaccessibles. Techniquement, on évite de renvoyer les messages d’erreur ICMP "unreachables". On effectue ceci afin d’éviter tout parcours/découverte du réseau avec des packets ICMP.

No ip proxy-arp :
Désactivation du proxy arp.


Remarque : «
Normalement, ARP est confiné à un LAN, mais un routeur peut se comporter comme un proxy pour les demandes ARP, rendant ainsi ces dernières disponibles sur plusieurs segments du LAN. Dans la mesure où le proxy ARP franchit la barrière de sécurité du LAN, il est recommandé de ne l’utiliser qu’entre deux LAN » Guide de l’utilisateur de Cisco Router and Security Device Manager 2.1

no ip source-route:

Cette commande désactive le routage source qui permet à l’expéditeur d’un datagramme IP de contrôler le routage du datagramme vers sa destination finale, et généralement, l’itinéraire suivi par la réponse. Ces options sont rarement utilisées à des fins légitimes dans les réseaux. Source Cisco.

Une attaque existe à ce niveau :

- Les paquets routés peuvent bloquer des machines avec leur datagramme.

Encapsulation dot1q 2 :
type d’encapsulation pour le vlan numéro 2.

L’encapsulation dot1q2 contient (par rapport à l’ISL) un en-tête tag de 4 octets qui contient un identifiant du protocole de tag (TPID) et une information de contrôle du tag (TCI). Le TPID contient une constante qui indique que la frame porte des informations tagger à l’aide du protocole 802.1q. Le TCI contient des éléments fixant la priorité et le numéro d’identification du VLAN. Des informations complémentaires sont disponibles dans l’essentiel CCNA3 du laboratoire SUPINFO des technologies Cisco.

Explication d’une trame :

Préambule

SFD

@ Dest

@Src

TPID

TCI

TYPE

RIF

Données

FCS

TPID : Désigne le type de tag. Il permet par exemple au switch d’identifier la trame comme comportant un tag 802.1Q (norme de l’encapsulation dot1q).

TCI :

User Priority

Source Routing

VID : Vlan Identifier

User_priority permet de définir huit niveaux de priorité. Lorsqu’il est positionné à 1, le bit CFI indique que les adresses MAC sont bien au format standard. Le champ VID désigne le Vlan auquel appartient la trame.

Différentes attaques existent à ce niveau :

- les attaques par saturation de la tables d’adresses mac d’un switch par vlan que les catalyste gèrent très bien : ils ne se comportent pas en hub une fois la table saturée.

- L’envoie de trames forgées avec des tags 802.1q, les switchs CISCO ne les détaguent pas et vont considérer le port ciblé comme un trunk : cette attaque est possible avec de l’encapsulation ISL et permet d’accéder aux autres VLAN. On désactive le DTP (Dynamique port trunk) ou on utilise une encapsulation dot1q (l’efficacité de cette dernière mesure dépend du reste de l’environnement).

- Attaque sur le Spanning Tree de type deni (expliquée plus haut) ou l’injection de BPDU (Bridge Protocol Data Unit) forcant ainsi la mise à jour des topologies réseaux et le rendant inopérant.

On active sur les composants de niveau 3 de notre topologie BPDU Guard et ROOT guard. On peut désactiver le spanning tree au niveau des ports d’un routeur non connecté à des switchs.


Ce type d’encapsulation de dot1q apporte un peu plus de sécurité car la trame est modifiée par l’équipement en interne (externe pour l’ISL) et le vlan n’est pas tagué, seul son numéro ressort dans une analyse de trame, on ne peut donc pas le récupérer. Il est de plus supporté par les « acces point ».

4 Configuration du routage (EIGRP)

router eigrp 2032

network 192.168.0.0

no auto-summary

ip split-horizon 2032

neighbor 192.168.2.130 Serial0

passive-interface FastEthernet0

passive-interface FastEthernet0/0.1

passive-interface FastEthernet0/0.2

passive-interface FastEthernet0/0.3

ip authentication mode eigrp 2032 md5

ip authentication key-chain eigrp 2032 RouterA

!

router eigrp 2032 :

Cette Commande met en place le routage avec le protocole Eigrp et un numéro d’AS égale à 2032.

network 192.168.0.0 :

Cette commande permet de préciser l’adresse du réseau sur lequel se porte le routage.

ip split-horizon 2032 :

Cette commande permet de ne pas redonner à un routeur A de la part d’un routeur B une route apprise par lui-même.






Si ceci arrivait, la métrique serait modifiée (+2) : C’est surtout en cas de casse d’une liaison ; le routeur A pensera ainsi que le routeur B possède la meilleure route et ainsi le réseau deviendrait HS.

De plus les mises à jour de routeur se trouveraient de plus en plus lourdes, et pour peu que ces dernières soient forcées lors d’une attaque, les routeurs arriveraient à saturation.

neighbor 192.168.2.130 Serial0:

On précise ici manuellement les voisins pour le protocole eigrp.

no auto-summary :

On interdit la mise à jour automatique de la table de voisinage du protocole eigrp: le réseau n’allant pas évoluer: on empêche ainsi tout envoi d’informations erronées ! Pour la suite on fera comme si on avait la commande « auto-summary » qui permet ainsi d’envisager le cas plus fréquent de mise à jour automatique.

passive-interface FastEthernet0:
On empêche ainsi qu’une route soit diffusée par cette interface.

ip authentication mode eigrp 2032 md5

ip authentication key-chain eigrp 2032 RouterA:

Cette commande met en place l’authentification avec un cryptage md5 pour la mise à jour.

key chain RouterA

key 1

key-string c1sC0@e%7

Ces paramètres définissent le mot de passe utilisé par les mises à jour eigrp.

ip classless

On précise ici que le routage est de type classless (agrégation des routes).

ip route 0.0.0.0 serial0

On précise l’adresse de la route par défaut.

5 Configuration des services

5.1 Configuration du service DHCP

ip domain-name projet-is1.com

Cette commande précise le domaine par défaut utilisé par le routeur pour compléter les noms devant l’être. Référence Cisco.

ip dhcp excluded-address 192.168.0.129

Cette commande exclut l’adresse 192.168.0.129 des adresses allouées par le serveur DHCP ici présent.

ip dhcp pool developpeurs

network 192.168.0.0 255.255.255.128

default-router 192.168.0.1

domain-name projet-is1.com

dns-server 80.10.246.130 80.10.246.3

lease 30

!

ip dhcp ping packets 1

ip dhcp pool developpeurs :

Créer un nom pour le pool d’adresse DHCP et nous place en mode de configuration DHCP.

network 192.168.0.0 255.255.255.128:

Spécifie le sous-réseau et son masque de réseau pour le pool en configuration.

default-router 192.168.0.1 :

Spécifie l’adresse IP du routeur par défaut du client DHCP. Une adresse IP est obligatoire, 8 au maximum.

Netbios-name-server 192.168.X.X : (optionnel)

Spécifie le serveur Netbios Wins par défaut pour un réseau microsoft. Une adresse IP est obligatoire, 8 au maximum.

domain-name projet-is1.com:

Spécifie le nom de domaine pour le client.

dns-server 80.10.246.130 80.10.246.3:

Spécifie le serveur dns pour le client.

ip dhcp ping packets 1 :

Définit le nombre de paquets envoyés par le serveur à un pool d’adresse avant d’assigner une adresse à un client.

Rappel :









En réduisant le nombre de paquet, on ne réduit pas la connexion car si le paquet se perd, le client relancera une demande, mais on réduit le nombre de paquets ICMP. Monitorer le réseau devient plus facile. Une solution consiste à donner un nombre de paquets autre que 2 (valeur par défaut) afin de pouvoir rechercher facilement les tentatives d’émulation de serveur DHCP.

Remarque : Si vous appliquez une access-list (un filtre) en entrée sur votre interface LAN, veillez bien à ne pas interdire le port UDP 68. En effet, la requête DHCP provenant des PC, se fait sur ce port. Source Supinfo

lease 30 :

Déclaration d’un bail de 30 jours.

5.2 Configuration du service HTTP

ip http secure-server

ip http access-class 11

!

ip ssh time-out 30

ip ssh authentication-retries 2

ip ssh version 2

!

username sshadm password @dm1nSSH!v2A

ip http secure-server :

Activation du server web sécurisé.

ip http access-class 11:

Mise en place d’une ACL filtrant l’accès du serveur sécurisé. (access-list 11 permit 192.168.2.0 255.255.255.224).

Remarque: On peut ici effectuer des injections de code html au niveau de l’option « dump » du serveur http. Source Cisco.

La solution consiste à tout désactiver ; commandes :

# no ip http server
# no ip http secure-server
# no ip http active-session-modules WEB_EXEC
# no ip http secure-active-session-modules WEB_EXEC

On choisi dans notre cas de restreindre très fortement l’accès au serveur.

ip ssh time-out 30:

Définit un délai d’attente SSH de 30 secondes, le serveur coupera les connections SSH incomplètes au bout de 30 secondes. Référence Cisco.

ip ssh authentication-retries 2 :

Cette commande autorise jusqu’à 2 tentatives de connexion SSH avant de verrouiller cette accès au routeur. Référence Cisco.

ip ssh version 2:

Cette commande spécifie l’utilisation de la version 2 de SSH.

username sshadm password @dm1nSSH!v2A:

Création d’un utilisateur avec son mot de passé pour l’accès au site.

no snmp-server

Cette commande permet de désactiver le protocole SNMP v1 (Simple Network Management Protocol. SNMP v1 est utiliser pour monitorer les routeurs. Il n’y a plus de problème à partir de la version 3.

Cisco recommande de désactiver ce protocole. Référence Cisco.

Le type d’attaque est :

- Récupération des chaines d’authentification (chaines communautaires). Envoyées sur le réseau de manière non cryptées et en grands nombres, il est facile par recoupement de trame de retrouver les paramètres de connexion dans les datagrammes.

Remarque : on peut mettre une access-list sur l'accès aux informations propagées par le serveur SNMP. Commande :

snmp-server community snmp1pub RO 1
! où 1 est le numéro de l’ACL.

6 Les access-list

access-list 11 permit 192.168.2.0 255.255.255.224

access-list 11 remark ACL pour les accès administrateurs SSH, SNMP et HTTPS

access-list 12 permit 192.168.0.0 255.255.255.128

access-list 12 remark ACL pour le vlan developpeurs

access-list 13 permit 192.168.0.128 255.255.255.192

access-list 13 remark ACL pour le vlan graphistes

access-list 14 permit 192.168.0.0 255.255.255.0

access-list 14 remark ACL pour les serveurs et imprimantes communs

access-list 100 permit udp 192.168.0.0 0.0.0.255 0.0.0.0 255.255.255.255 eq 53

access-list 100 permit tcp 192.168.0.0 0.0.0.255 0.0.0.0 255.255.255.255 eq 53

access-list 100 permit tcp 192.168.0.0 0.0.0.255 0.0.0.0 255.255.255.255 eq 25

access-list 100 permit udp 192.168.0.0 0.0.0.255 0.0.0.0 255.255.255.255 eq 110

access-list 100 permit udp 192.168.0.0 0.0.0.255 0.0.0.0 255.255.255.255 eq 80

access-list 100 permit udp 192.168.0.0 0.0.0.255 0.0.0.0 255.255.255.255 eq 443

access-list 100 deny ip any any

access-list 100 remark Internet – only WEB, MAIL, DNS

access-list 101 permit ip 192.168.0.128 0.0.0.63 host 192.168.2.33

access-list 101 remark Connexion au serveur de tickets

Les acces-list ici définies sont celles utilisées pour configurer notre réseau.

Rappel :

Les ACL filtrent chaque datagramme IP à partir de l'adresse IP de la source, l'adresse IP de la destination, le protocole utilisé et le port de destination du paquet. Pour plus d’informations concernant ce pré requis, www.labo-cisco.com

Soit 2 exemples :


access-list 12 permit 192.168.0.0 255.255.255.128 :

Cette commande est une access-list simple (numéro d’access-list entre 1 et 99). Le routeur permet le transit de paquets en provenance de 192.168.0.0 avec un wildcard 255.255.255.128

access-list 100 deny udp 192.168.0.0 0.0.0.255 0.0.0.0 255.255.255.255 eq 80 :

Cette commande est une access-list étendue (numéro d’access-list entre 100 et 199). Le routeur refuse le transit de paquet en provenance de 192.168.0.0 avec un masque 0.0.0.255 (wild mask) à destination de tout sur le port 80. Ceci est un exemple illogique.

Remarque: Afin d’éviter le spoofing d’adresse ip, on peut mettre en place une ACL (sur les interfaces extérieures) comme suit: Source internet

access-list 100 deny ip 127.0.0.0 0.255.255.255 any
access-list 100 deny ip 10.0.0.0 0.255.255.255 any
access-list 100 deny ip 224.0.0.0 31.255.255.255 any
access-list 100 deny ip host 0.0.0.0 any
access-list 100 deny ip host 255.255.255.255 any
access-list 100 deny ip 192.168.0.0 0.0.255.255 any
access-list 100 deny ip 172.16.0.0 0.0.255.255 any
access-list 100 deny ip numéro-sous-réseau masque-sous-réseau any
access-list 100 permit ip any any

Il s’agit en fait de l’implémentation de la RFC 1918 sur les adresses privées.

7 Configuration des liaisons et de l’identification.

banner motd ^

Warning - Do not login on this equipment if you are not authorized. ^
banner login #

Warning - Do not login on this equipment if you are not authorized. ^

Cette commande spécifie le message qui intervient en cas d’erreur de login sur le routeur.

En réalité, il est très important de spécifier ce message, il s’agit ici de notre protection juridique, protection dont peu d’informaticiens se soucient.

On peut notamment faire référence aux articles 323-1 et 323-7 du code pénal concernant l’interdiction de pirater un système informatique et les sanctions prises en cas d’intrusions.

line console 0

login

password %c1sc0@L3sK1lL3rS%A

exec-timeout 70 0

Cette commande permet de protéger la ligne console par une authentification avec ici un mot de passe un peu compliqué, mais il ne faut pas hésiter à le faire : la plus part des attaques ne vienne pas de l’extérieur mais de l’intérieur.

Le chois de sécurité sera ici de ne pas limiter le nombre d’essais mais de pouvoir auditer une tentative qui sera par définition très longue et qui a peu de chance d’aboutir.

exec-timeout 70 0 : Cette commande empêche une session de bloquer une ligne.

line vty 0 4

access-class 11 in

login local

transport input ssh

Cette commande permet ici de protéger l’accès en TELNET. Au-delà d’une authentification en local inutile, une ACL limite l’accès, et seul le traffique ssh est autorisé. On rappel que le serveur https dispose d’une authentification poussée.

Conclusion

Peut-on parler de tuning ? NON, il ne s’agit que du minimum à effectuer en réalité. En effet, d’autres mesures peuvent être prises, ainsi, les possibilités exploitables sont :

-La mise en place d’un serveur FTP recueillant les logs des routeurs.

-La mise en place d’un audit sur ce serveur FTP.

-La mise en place d’une analyse en temps réel des trames du réseau (on peut cloner des interfaces en y ajoutant l’édition de log en plus)

-L’approfondissement du filtrage SSH que permet IOS.

-L’activation du pare-feu sur les interfaces externes : nous rappelons que dans notre cas, il n’y a pas d’interface externe

On rappel qu’IOS est le logiciel d’exploitation le plus utilisé après Windows sur internet. Il y a donc pleins d’autre réglages possibles, mais il faut bien s’arrêter un jour.