Dois-je bloquer ICMP ?

Dois-je bloquer ICMP pour des raisons de sécurité ou de performance ?

Beaucoup de personnes pensent, à tort, qu’ICMP présente un risque de sécurité pour le réseau. Dès lors, ICMP est bloqué sur les firewalls et parfois même sur les routeurs et autres équipements réseau. C’est peut-être vrai si on autorise tout ICMP, mais c’est certainement faux si on autorise uniquement les bonnes choses de manière restrictive.

Comme nous allons le voir, ICMP est essentiel au bon fonctionnement du réseau. De plus, il simplifie grandement le dépannage de problèmes réseau complexes.

1. Ping ou echo request et echo reply

Nous connaissons tous « ping » et nous l’utilisons beaucoup. À l’intérieur du réseau, il n’y aucune bonne raison de bloquer le ping et les réponses. Certaines personnes prétendent que d’autoriser le ping permet de rendre les équipements découvrables par le réseau. Si vous êtes vraiment soucieux du risque de découvrabilité de votre réseau, utilisez de la micro-segmentation et souvenez-vous que votre serveur écoute certainement déjà sur un port, par exemple le port 443 pour votre serveur web intranet.

Nous avons déjà tous entendu la phrase plutôt triste « de toute manière, la passerelle n’a jamais répondu » en essayant de dépanner un problème de réseau, sans savoir si nous faisons face à un problème de connectivité physique, d’isolation L2, ou de règles d’un firewall.

Pour cette raison, autorisez les messages suivants :

IPv4

Echo request (type 8, code 0)
Echo reply (type 0, code 0)

IPv6

Echo Request (Type 128, Code 0)
Echo Reply (Type 129, Code 0)

2. Fragmentation requise

Indispensable au bon fonctionnement du protocole TCP, Path MTU Discovery est une technique qui permet de déterminer la taille MTU du chemin entre la source et la destination. On admettra que l’équipement présentant le plus petit MTU définira la taille maximale du MTU à utiliser.

Si deux hôtes distants on un MTU plus faible que celui communiqué localement, il y a de fortes probabilités pour que la communication ne fonctionne pas correctement de bout en bout et que votre trafic finisse discrètement dans un trou noir.

En IPv4, on utilise un drapeau « DF » (don’t fragment) qui retournera « fragmentation required », alors qu’en IPv6, les paquets ne sont pas fragmentés par le routeur et retourne un « packet too big » comprenant la taille MTU à honorer. Sans cette réponse, la source effectuera une retransmission, qui continuera en boucle d’essayer de transmettre sur le lien, comme si celui-ci présentait une perte de paquets. Cette erreur est particulièrement pernicieuse à dépanner, car la communication TCP est bel et bien établie.

Dans les systèmes d’exploitation modernes, une solution a été imaginée autour de la RFC 4821 pour régler ce problème en se reposant sur la technique de PLPTUD, qui découvre le MTU du chemin en augmentant progressivement le MSS jusqu’à trouver la bonne valeure pour le chemin. Mais autoriser ICMP permet de s’affranchir de beaucoup de problèmes.

IPv4

Fragmentation required (Type 3, Code 4)

IPv6

Packet too big (Type 2, Code 0)

3. Traceroute

Traceroute est un outil permettant de faire du dépannage réseau avancé. Il permet de savoir beaucoup de choses et fonctionne de manière assez spéciale en envoyant un paquet avec un TTL de 1 au premier routeur qui répondra avec un message Time exceed et son adresse IP, puis la source incrémentera le TTL ainsi de suite afin de construire une vue d’ensemble du chemin.

Lorsque vous faites un traceroute et que chaque saut répond avec trois étoiles * * * cela signifie que les messages ICMP time exceeded sont bloqués.

Si vous désirez en savoir plus sur traceroute, voici une vidéo qui vous en dira plus que vous pouvez souhaiter en savoir sur le sujet (en anglais) :

Explication du fonctionnement de traceroute

Dès lors, autorisez les messages ICMP suivants :

IPv4

Time exceeded (Type 11, Code 0)

IPv6

Time exceeded (Type 3, Code 0) 

Photo d’illustration par Giuseppe Milo

Sécuriser un ordinateur

Introduction

Vous utilisez peut-être votre ordinateur pour une utilisation personnelle, ainsi que pour effectuer des tâches administratives techniques sur des environnements serveurs ou réseau sensible. Le meilleur conseil reste d’utiliser un ordinateur dédié, pleinement à jour et disposant au minimum d’un antivirus à jour, ainsi que d’une bonne gestion des privilèges et d’une micro-ségrégation réseau efficace.

Dans la réalité, il n’est pas toujours aussi simple de maintenir cet environnement et de le transporter avec soit en déplacement. C’est pourquoi, je souhaite dans cet article pour proposer quelques pistes et bonnes pratiques pour garantir un niveau de sécurité minimum, tout en gardant la flexibilité d’un environnement utilisable pour vos besoins personnels, ainsi que pour des tâches sporadiques d’administration lorsque vous êtes en déplacement ou que vous devez intervenir urgemment.

Le bon sens

Je vous conseille toutefois dans la mesure du possible, de différencier votre ordinateur personnel, de celui que vous utilisez professionnellement.

Les autres conseils « de bon sens », dont notamment : maintenir votre système d’exploitation à jour, éviter de vous connecter avec un compte à haut privilèges, ne pas télécharger de logiciels dont vous ne pouvez pas tracer l’origine fiablement, ainsi que de séparer vos réseaux personnels et professionnels, même à la maison, sont pour moi la base.

Ces conseils s’appliquent à tous les systèmes d’exploitation, les moyens peuvent légèrement varier en fonction du système d’exploitation.

Mes conseils

Pour chacune des mesures ci-dessus, je vais prochainement écrire un article afin de détailler comment j’ai effectué cela. Il n’y a rien de sorcier, mais cela pourrait vous donner des idées pour votre environnement sécurisé. J’utilise certaines de ces mesures depuis longtemps, j’en utilise quelques autres également que je ne vais pas documenter ici.

  1. Maintenir votre système et applications tierces à jour (chocolatey)
  2. Désactiver les services inutiles et inutilisés (services.msc)
  3. Configurer les applications autorisées (AppLocker)
  4. Installer un hyperviseur (Hyper-V, OracleVM, VMware)
  5. Installer une vm qui sert de firewall et proxy (OPNsense, pfSense)
  6. Configurer l’accès internet exclusivement via firewall / proxy
  7. Installer et configurer un firewall local
  8. Configurer un proxy avec authentification pour chaque application
  9. Installer un serveur proxy local
  10. Installer un logiciel de sandboxing (sandboxie)
  11. Utiliser un VPN lorsque vous êtes sur un réseau indigne de confiance
  12. Effectuer des sauvegardes de qualité et régulières

A bientôt pour la suite.

Photo d’illustration par Christiaan Colen