Skip to content

Qu’est ce que le Banner Grabbing ?

Au sein d’un SI, chaque information a son importance, il est toujours crucial de savoir ce qui est vu par l’utilisateur lambda, par l’attaquant ou par les équipes techniques. Nous allons aujourd’hui étudier ce qu’est le banner grabbing et en quoi il est important pour la bonne gestion de la sécurité du SI.

Nous avons récemment vu différentes techniques de scan TCP et de scan UDP, il faut savoir qu’après avoir pris connaissance que tel ou tel port est ouvert sur une machine, un attaquant va vouloir savoir ce qui tourne sur ce port (quel type de service ? Quelle est la version de ce service ?). C’est ici que la méthode du banner grabbing intervient.

Le banner grabbing : kézako ?

Le banner grabbing, ou le fait de « récupérer la bannière » dans la langue de Molière, est tout simplement le fait de récupérer, après une première connexion à un port et un service visé, le nom du service qui tourne sur ce port ainsi qu’éventuellement sa version. En effet, par souci de clarté et parfois de simplification des échanges, la plupart des services annoncent sur le réseau aux clients après leur demande de connexion des informations sur ce qu’ils sont. Lorsqu’un attaquant fait du banner grabbing, il est toujours dans la phase « fingerprinting », c’est-à-dire qu’il va chercher à établir une cartographie du réseau et des systèmes et ainsi dresser une liste de ce qui est présent. Le banner grabbing est tout simplement le fait d’ouvrir une session TCP sur un port donné et d’échanger basiquement avec le service qui s’y trouve pour analyser ses réponses et déterminer plus ou moins facilement son type et sa version.

« Bonjour, je suis un serveur Apache tournant sur Debian et ma version est 2.2.22″, c’est exactement le type d’information que nous pouvons retrouver lorsque nous faisons du banner grabbing, c’est tout simplement la « signature » du service. Ces messages d’erreurs vous disent certainement quelque chose :

banner grabbing apache
Affichage de la bannière Apache.

Nous voyons ici un serveur web Apache qui, lors de l’affichage d’une erreur HTTP 404, va tout simplement fournir sa bannière quand il est configuré par défaut. Nous voyons ici la même chose pour un serveur nginx :

Nous allons voir que le banner grabbing peut être aussi bien utilisé par les sysadmins dans la gestion quotidienne du système d’information que par des attaquants ou des personnes un peu trop curieuses. Il faut tout d’abord savoir qu’il existe deux « méthodes » de banner grabbing.

banner grabbing passif

Cette méthode de banner grabbing est rarement utilisée, mais a l’avantage d’être la plus discrète. On ne va pas aller chercher l’information, mais plutôt attendre qu’elle passe par nos ports. On va par exemple effectuer du sniff réseau et ensuite étudier les paquets qui transitent pour retrouver une bannière sur un port et une IP donnée.

banner grabbing actif

C’est la méthode la plus utilisée, on va volontairement aller discuter et échanger avec un port que l’on sait actif afin d’étudier ses réponses et ainsi retrouver une signature (nom du service, version, etc.). Pour une personne malveillante, cette méthode peut avoir comme inconvénient qu’elle  force à établir une connexion avec la machine et ainsi à exposer des informations à son sujet (IP du poste effectuant le banner grabbing par exemple).

Si nous allons un peu plus loin dans l’exploration, voici la bannière d’un service FTP que nous voyons dans une analyse réseau avec Wireshark :

La plupart du temps, le banner grabbing se fait par le client dans la relation client – serveur. C’est une information qui peut être intéressante pour, par exemple, savoir comment communiquer. On retrouve communément cet échange de version dans la détermination du chiffrement SSL ou TLS à utiliser lors de l’initialisation d’une session en HTTPS, mais cela s’éloigne quelque peu du sujet.

Voici par exemple un banner grabbing effectué avec Telnet sur un service Apache sur le port 80 :

banner grabbing
Banner grabbing sur un service Apache

On voit ici clairement la bannière Apache « Server : Apache/2.2.22 (Debian)« . La même chose sur un service SSH tournant sur le port 2121 :

banner grabbing
Banner grabbing sur un service SSH

Ici, nous n’avons même pas besoin d’envoyer une première information de connexion hormis l’initialisation de la connexion TCP, le service SSH présent sur le port nous annonce directement la couleur en nous envoyant sa version de protocole SSH supporté (2), de service (6.0) et d’OS (Debian 7)

L’outil Metasploit, très connu dans le monde de la sécurité, contient également plusieurs outils permettant de faire du banner grabbing. On prendra comme exemple l’outil permettant de récupérer la version SSH d’un serveur, voici comment il s’utilise  :

banner grabbing ssh metasploit
Utilisation d’un scanner Metasploit pour le banner grabbing SSH

L’intérêt du banner grabbing pour les Sysadmins

Le banner grabbing peut très bien être utilisé par les administrateurs systèmes au sein d’un SI. On peut en effet vouloir savoir si nos services SSH sont à jour, on va alors effectuer un banner grabbing sur tous nos services SSH et ainsi avoir rapidement une liste des versions présentes sur nos serveurs. C’est donc un outil qui va aider l’administration système et réseau au sein d’un SI, car il permet d’obtenir l’information sans avoir à se connecter sur chaque machine.

banner grabbing administrateur systeme
Ici, un administrateur système utilise le banner grabbing sur ses serveurs web afin de savoir rapidement lesquels ont besoin d’une mise à jour.

Banner grabbing, quand les services en disent trop

Le banner grabbing est surtout utilisé dans le monde de la sécurité par les attaquants. En effet, après avoir essayé de trouver les IP actives sur un réseau et les ports ouverts sur celles-ci, on va chercher à savoir quels sont les services et leurs versions. Le banner grabbing est donc un élément à prendre en compte lorsque l’on se penche sur la sécurité d’un système d’information. On doit en effet contrôler toutes les informations qui sortent de nos serveurs et dans le cadre d’un test d’intrusion ou d’une attaque, le fait qu’un serveur annonce sa version est une information qui est de trop.

Un attaquant faisant du banner grabbing, qui est d’ailleurs bien souvent automatisé grâce à des outils comme nmap, va rapidement pouvoir détecter les services actifs, mais surtout les versions obsolètes et vulnérables de ceux-ci. C’est à ce moment que le banner grabbing apparaît comme un danger. C’est une information qui facilite grandement le travail des attaquants et qui mérite donc d’être contrôlée, la réponse du service à la version obsolète à un attaquant est aussi claire qu’un « Je suis un service vulnérable, je n’ai pas été mis à jour depuis trois ans ! ».

Certains outils comme le scanner de service web nikto, permettent même dans leurs vérifications   de récupérer la bannière du service web scanné et de prévenir l’auditeur si la version détectée n’est pas la dernière en date. Facilitant encore plus le travail de l’auditeur ou de l’attaquant par une automatisation du banner grabbing :

banner grabbing apache
Dans cette dernière ligne de l’analyse Nikto d’un serveur Apache 2.2.22, Nikto nous apprend que la version détectée apparaît comme obsolète.

Se protéger du banner grabing, pourquoi et comment ?

Nous avons vu que le banner grabbing pouvait faciliter le travail des attaquants en trahissant la présence de services aux versions obsolètes sur nos machines, il est donc intéressant de se pencher sur les manières de s’en protéger :

  • Mettre les services à jour : Le premier conseil est plutôt commun, mettre à jour les services sur une machine fait en effet parti des basiques en matière de sécurité des SI. Cela va rendre le banner grabbing beaucoup moins utile. L’attaquant aura certes la version de notre service FTP ou HTTP en main, mais il saura qu’il s’agit de la version la plus à jour et qu’il peut donc passer son chemin, car il n’y trouvera pas de vulnérabilité… en théorie ! C’est moins vrai pour les services HTTP par exemple dont les vulnérabilités sont plus dues aux applications/sites web qu’au service web lui-même.
  • Cacher les bannières : la sécurité par l’obscurité va ici nous être utile. En effet, un attaquant détectant un port 80, mais ne sachant pas s’il s’agit d’un IIS 8, d’un Apache 2 ou d’un Nginx sera ralenti dans sa démarche. Il existe pour chaque service des manières de cacher les bannières, à titre d’exemple, voici la procédure à suivre dans un tutoriel que j’ai rédigé pour Apache 2 : Cacher la version d’Apache 2
  • Mettre une fausse bannière : Plus que de cacher les bannières, on peut ralentir encore plus l’attaquant en le mettant sur une fausse piste ! Dans VsFTPD par exemple, un service FTP sous Linux, on peut très bien mettre dans le champ ftpd_banner (qui permet de personnaliser la bannière à la connexion) le fait que nous sommes un FTP sur une machine Windows. L’attaquant va alors chercher des vulnérabilités sur le service FTP de Windows inutilement. Il ne s’agit là que d’un exemple, la mise en place de fausse bannière peut être faite tant au niveau de la configuration de certains services qu’au niveau réseau, en changeant le contenu des paquets à leur sortie du réseau.

Nous avons vu dans ce billet ce qu’était le banner grabbing et quelle pouvait être son utilisation, tant pour les administrateurs système et réseau que pour les pirates malveillants ou les équipes effectuant des tests d’intrusion. Il s’agit là d’un point de détail dont la sécurité des systèmes d’information est faite, et chaque détail a son importance, car ils permettent bien souvent d’acquérir des informations supplémentaires sur une architecture ou un réseau. Gare à vos bannières donc !

Partager :
Published inArticles

One Comment

  1. […] – Des données « headers » concernant le serveur : On voit différentes données comme des informations relatives aux cookies fournis par le site, la version de PHP et d’Apache qui sont récupérées via ce que l’on appelle le banner grabbing (voir ce billet : Qu’est-ce que le banner grabbing ?). […]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *