Un firewall récent pas si moderne

juillet 19, 2007  |   Blog   |     |   Commentaires fermés sur Un firewall récent pas si moderne


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 :

Outside : Any -> SrvWeb:80
Inside : SrvWeb:80 -> Any

Cette façon de faire posait plusieurs problèmes :

  • le serveur Web, une fois compromis, peut créer des connexions sortantes tant que le port source était 80. Ce genre d’outil existe évidemment…
  • tout type de paquet peut être injecté de l’extérieur du moment que le port TCP destination est 80. Sans analyse protocolaire, les paquets les plus farfelus (cf LAND attack ou XMAS scan) traversent le firewall sans difficulté..
  • les filtres étant longs à écrire, le administrateurs utilisaient souvent des raccourçis : par exemple le filtre Inside devenait généralement « Any -> Any »

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 :

Outside : Any -> SrvWeb:80

Le module filtrant écrira dynamiquement la règle « mirroir » en ne laissant :

  • entrer que les paquets dont le port destination est 80. A cette occasion le module filtrant remplit une structure interne en mémoire : un quadruplet (IPsrc, TCPsrc, IPdest, TCP dest)
  • sortir que les paquets dont le port IP source est 80 et le port TCP destination est égal à TCPsrc et l’IP de destination à IPsrc

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 coût 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 paquets soit seuls soit en les 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é.

hping -a @IP_Spoofée @IP_victime -p 21 -R

Hors nous constatons que le paquet injecté hors de toute session est loggé comme « Out of State » mais accepté !!

out of state logged but accepted

Après une conversation avec l’éditeur, une commande magique (et non documentée) nous est fournie :

set fw ai stricttcp block

Cette-fois, les paquets « Out of State » sont bien logués et bloqués.

logged and blocked

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 .

hping -a @IP_Spoofée @IP_victime -p 21 -R -s 1982

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 !!

SEQ verifier

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.

Global Properties

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ée 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 en arrière telle la vulnérabilité à la LAND attack qui est réapparue à l’occasion de la réécriture de la pile IP pour Windows Vista.

Pour paraphraser un groupe bien connu, « Don’t believe the Hype » (( Ne croyez pas à la mode ! )) ! Vérifiez systématiquement le bon fonctionnement des mécanismes de sécurité prétendument activés.

Les commentaires sont fermés.