Pourquoi arrêter de bloquer ICMP (pour empêcher ping) ?

Publié le

ICMP (Internet Control Message Protocol) est un protocole qui permet de transporter des informations sur l'état du réseau. Il est surtout en place à des fins de diagnostique et de contrôle du réseau. C'est ce protocole qui est utilisé quand on utilise les outils ping ou traceroute.

NB: cet article traite d'ICMP sur IPv4, mais les même principes sont valables pour ICMPv6. Attention les deux normes ne sont pas identiques dans leur implémentation.

Mais pourquoi bloquer ICMP ?

De nombreux administrateurs bloquent le protocole ICMP, complètement, en estimant que les services qu'ils gèrent fonctionnent très bien sans. En effet, bloquer complètement ICMP ne rendra pas votre serveur HTTP inopérant à première vue. Ce choix peut être justifié par le fait qu'un certain nombre de failles de sécurité concernant ICMP existent, comme le ping flood (en gros valable dans les années 90, et encore) ou ping sweep.

Certaines failles peuvent encore à l'heure actuelle avoir leur petit effet :

  • ping redirect permet de mettre en œuvre des attaques de type MiM (Man in the Middle) ou DoS (Denial of Service) via l'utilisation astucieuse de datagrammes ICMP de type 5 (message de type redirect, voir la section suivante).
  • ICMP tunnel permet de transporter des données en by-passant le firewall si celui-ci autorise ICMP. Si un serveur est infecté par un malware, ce dernier peut exfiltrer des données en utilisant ICMP. Des implémentations possibles de cet exploit sont ICMPTX, ou icmpsh et il y en a sûrement d'autres.

ICMP c'est pas juste la commande « ping »

Voici comment est découpé un datagramme ICMP :

  • 1 octet pour définir le type de message,
  • 1 octet pour définir un code,
  • un CRC (Cyclic Redundancy Check), un code de contrôle d'erreur sur 2 octets,
  • suivi de données dont la longueur est calculée à partir du paquet IP contenant le datagramme ICMP.

Ce sont les champs type et code qui sont les plus importants car ils vont permettre de modifier le comportement de différents éléments d'un réseau, ou de faciliter la recherche d'une panne.

Voici la liste des types :

  • 0  Echo Reply
  • 3  Destination Unreachable
  • 4  Source Quench (déprécié depuis 2012, voir la RFC 6633)
  • 5  Redirect
  • 8  Echo
  • 11  Time Exceeded
  • 12  Parameter Problem
  • 13  Timestamp
  • 14  Timestamp Reply
  • 15  Information Request
  • 16  Information Reply

Les autres valeurs sont soit réservées, soit non définies par les RFCs.

Chaque type définit à son tour des codes pour différents messages.

Les soucis générés par un blocage d'ICMP

Certains types de paquets ICMP sont utilisés pour contrôler la gestion du réseau.

En particulier le type 3 permet de gérer** la fragmentation des paquets** et de régler automatiquement la taille des paquets (PMTUD: path MTU discovery) . Si on le bloque, on peut se retrouver avec des situations où des connexions sont dysfonctionnelles avec des coupures ou des lenteurs inexplicables. Ces soucis peuvent se produire sur certaines machines pendant que d'autres n'auront aucun problème. Ce genre de situation est difficile à régler parce qu'on va rarement suspecter la politique du pare-feu d'en être la cause. On aura plutôt tendance à s'acharner sur le poste qui rencontre le problème, évidement sans succès. Cloudflare a mis en place un outil pour tester si la fragmentation fonctionne correctement entre un de leurs serveurs et votre machine. Vous pouvez faire le test ici (en ipv4) ou encore là (en ipv6).

Le type 5 peut être utilisé par un routeur pour indiquer à une machine qu'elle peut atteindre une autre machine sans passer par lui. Cette information permet donc de réduire la latence dans les communications, donc d'améliorer les performances.

Le type 11 permet de notifier une machine qu'un de ses paquet n'a pas pu atteindre sa destination à cause d'un TTL (Time to Live) trop court. Un paquet contient un compteur TTL qui est réduit au fil de son transit à travers les réseaux. Quand ce TTL arrive à 0, le paquet n'est plus transmis, il est détruit. Le type 11 indique qu'il est nécessaire d'augmenter ce TTL.

Bloquer ICMP : la méthode soft

Vous voulez quand même bloquer ICMP ? Comme vous l'avez certainement compris, il serait préférable de filtrer le traffic non pas sur TOUT le protocole ICMP mais seulement sur certains types de messages.

Le choix de quels types à bloquer dépend grandement du rôle de votre machine sur le réseau mais aussi de quel réseau on parle. Par exemple, un serveur ne se comporte pas de la même façon qu'un routeur. Pour avoir une vraie vision, l'idéal serait de se renseigner sur ICMP, et de comprendre ce qu'on fait quand on bloque certaines parties du protocole.

Un exemple de configuration pour un serveur exposé à Internet peut être la suivante :

  • on autorise le type 3.
  • on peut bloquer les types 0 et 8, si on n'a pas besoin de la commande ping.
  • on peut bloquer le type 11, si on n'a pas besoin de la commande traceroute.
  • on peut bloquer les types 4 (obsolète), 5, 12 à 16.
  • on bloque tous les autres types.

Sur un routeur dans un LAN (Local Area Network), on pourra autoriser les types suivants :

  • on autorise le type 3 (toujours)
  • soit on autorise le type 5, soit on le bloque et on configure correctement ses tables de routage
  • on autorise le type 11
  • on peut bloquer les types 0 et 8, si on n'a pas besoin de la commande ping.
  • on peut bloquer les types 4 (obsolète), 12 à 16.
  • on bloque tous les autres types.

Conclusion

Il est toujours bon de se rappeler qu'ICMP n'est pas uniquement ce qui permet à la commande ping de fonctionner. Il est nécessaire de bien comprendre le fonctionnement de ce protocole avant de décider d'une politique de firewall le concernant. Bloquer ICMP peut avoir des conséquences inattendues en terme de performances ou de fiabilité de vos services.

PHILIPPE CHEPY

Administrateur Système et Développeur