10/28/2006

Tunnel utilisant le Protocole HTTP

Le protocole HTTP (HyperText Transport Protocol) est utilisé pour transférer des informations sur Internet. C'est un protocole extrêmement répandu, ce qui en fait un medium de choix pour la création de canaux cachés. HTTP est basé sur un système à base de question-réponse. Bien que la RFC définissant le protocole contienne 6 différents types de requêtes, seules les requêtes GET et POST sont utilisées en pratique.

Comment le protocole est-il détourné?

Différents champs peuvent être détournés pour créer un canal caché, par exemple les champs HTTP request: {General, Request, Entity}-Header. Ces champs peuvent contenir différents entêtes, comme par exemple « User-Agent: », « Referer: », « Cookie: », on peut ajouter n'importe quel type d'entête pour faire circuler de l'information. Le champ HTTP request Entity-Body n'est normalement présent que dans la requête POST, cependant, la RFC 1945 n'exclue pas la présence de ce champ dans les autres requêtes. Ce champ peut donc servir à transmettre de l'information. Dans les champs de HTTP request, nous retrouverons les mêmes possibilités.


Considérons une requête GET (presque vraie) émise via un proxy HTTP :
Frame3

Pour plus de furtivité, il est possible d’utiliser une approche stéganographique. Les moyens de tromper un éventuel observateur sont donc:

  • La chaîne URI ressemble à une demande de service relative à un service web public : conversation en ligne, forum de discussion... Les données sont codées dans une chaîne additionnelle : "view=tu_peux_apporter_la_suite".

  • En utilisant une approche plus stéganographique, nous sommes capables de coder une information : "Accept-Language: en" = 0 et "Accept-Language: fr" = 1 ce qui correspond dans notre exemple à en,fr,en,fr,en,en,en,en soit 01010000 ou encore 0x50.

  • Les données sont codées dans une partie du champ "User-Agent" avec la valeur: "(121245321)".

  • Les données sont codées comme une fausse requête de type de caractères : "ISO-1212-1".

  • Les données sont codées dans un champ étendu de l'entête: "X-Microsoft-Plugin: unexpected error #123294681278"

La liste précédente n'est bien sûr pas exhaustive. Les méthodes présentées sont toutes valides du point de vue du protocole HTTP et peuvent être employées dans toutes les combinaisons possibles.

De telles méthodes ne sont pas utilisables pour véhiculer d'importantes quantités de données mais elles peuvent être employées comme la base d'un protocole de communication pour une backdoor. Les méthodes pour cacher des informations au niveau du programme serveur sont en tous points identiques à celles que nous venons de présenter.


Logiciels pouvant être utilisés:


Il existe de nombreuses implémentations de canaux cachés utilisant le protocole HTTP, par exemple HTTunel, Firepass, CCTT... Pour une application un peu plus ciblée, on peut citer aussi Webshell, qui offre un canal sur le protocole http pour la commande d’une station UNIX.


Aucun commentaire:

Enregistrer un commentaire