Un firewall récent pas si moderne
SR juillet 19th, 2007

Il est commun de croire que tous les firewall d’entreprise modernes effectuent une « Stateful Inspection ». Et pourtant … à l’occasion d’un test récent nous avons pu mettre en évidence la non activation de cette fonction.
Faisons tout d’abord un rappel : la fonctionnalité « Stateful Inspection » a été inventée par CheckPoint Software vers le milieu des années 90. Avant, chaque firewall possèdait un filtre par interface : un flux, étant en général bidirectionnel, nécessitait donc la mise à jour des filtres Inside et Outside.
Prenons le cas d’un serveur Web accessible depuis Internet, on a donc les filtres suivants :
Inside : SrvWeb:80 -> Any
Cette façon de faire posait plusieurs problèmes :
L’avancée qu’a representé le « Stateful Inspection » a été de ne plus réaliser des décisions sur un paquet seul mais sur un paquet comme appartenant à une session. Ansi en mode Stateful, on écrirait :
Le module filtrant écrira dynamiquement la règle « mirroir » en ne laissant :
Des améliorations successives ont permis d’ajouter à la structure interne l’état de la connexion (Half Open, Etablished, Half Closed, Closed) suivant l’avancement du déroulement du TCP Handshake (SYN, SYN ACK, ACK) ou de la fermeture (FIN, FINACK, FIN, FIN ACK)
Ces mécanismes ont même été transposés à UDP afin de réaliser des « pseudo » sessions.
Enfin les numéros de Sequence et d’Acknowledgment présent dans l’entête TCP sont également inspectés pour empêcher l’injection de paquet dans une session en spoofant l’adresse IP source et en dévinant le couplet (TCPsrc,TCPdst) à l’aide de différentes techniques.
Ces fonctionnalités apportent une protection renforcée , pour un cout en traitement de plus en plus faible au fur et à mesure de l’amélioration des performances des CPU et de la taille de la mémoire.
Revenons à nos tests. Nous testons systématiquement l’injection de paquet soit seuls soit en s’insérant dans une session TCP déjà établie mais en ne respectant pas les numéros de SEQ et d’ACK courants.
Pour cela nous utilisons l’excellent outil hping qui permet de forger des paquets en manipulant les champs IP et TCP à volonté.
Hors nous constatons que le paquet injecté hors de toute session est loggé comme « Out of State » mais accepté !!
Après une conversation avec l’éditeur, une commande magique (et non documentée) nous est fournie :
Cette-fois, les paquets « Out of State » sont bien logués et bloqués :
Nous passons alors à la deuxième phase : nous établissons une session TCP classique et injectons un paquet RESET en respectant les ports TCP Source et Destination mais pas les numéros de SEQ/ACK :
Cette fois-ci le « Out of State » n’est même plus détecté et le paquet passe, provoquant la coupure de la session au niveau du client (normal nous injectons un Reset) !!
Aprés avoir consulté la documentation, nous constatons que la fonctionnalité « SEQ Verifier » n’est pas supportée sur cette plateforme pourtant commercialisée en 2007 !!
De plus, le panneau de configuration global peut induire en erreur l’administrateur sécurité se croyant justement protégé de ce type d’attaque.
La conclusion de ces tests est assez triste : la sécurité périmètrique bien qu’en perte de vitesse (dans les discours marketing) n’est pas assuré correctement « out of the box » par des équipements haut de gamme destinés aux entreprises !!
On a l’impression de constater périodiquement des retours arrière telle la vunérabilité à la LAND attack qui est réapparue à l’occasion de la réecriture de la pile IP pour Windows Vista ?
Pour paraphraser un groupe bien connu, « Don’t believe the Hype »1 ! Vérifiez systématiquement le bon fonctionnement des mécanismes de sécurité prétendument activés.
- Ne croyez pas à la mode ! [back]