A priori :
- il est équipé d'un détecteur de mouvement
- visiblement c'est un code à 5 nombres (de 1 à 32)
- l'ouverture et la fermeture de la porte est automatique
- il y a des bonbons à l'intérieur ;-)
Those who would give up essential liberty to purchase a little temporary safety, deserve neither liberty nor safetyBenjamin Franklin
Ensuite, il suffit de lancer un navigateur Web en lui demandant de se connecter en local sur ce port.
Une méthode simple pour mettre cela en jeu est, lorsqu’on est sous linux d'utiliser la ligne de commande, ou bien sous Windows il suffira d'avoir Putty SSH ou autre.
MsnShell se connecte au NS à l'aide d'un proxy HTTP ou en utilisant le réseau interne. Le processus d'ouverture de session nécessite l'authentification du client interne (CI) (le MSN Shell), le client externe (CE) reçoit alors une notification de connexion du CI.
Une fois que MsnShell est sur le réseau MSN Messenger, il reçoit sans interruption les messages qui indiquent le statut des autres utilisateurs et les messages qui précisent les demandes de dialogue. Pour chaque client en ligne sur Messenger, MsnShell crée une structure appelée l'online_user_info
Lorsque MsnShell reçoit une demande de dialogue, il crée un canal caché permettant de contrôler à distance une station Linux située derrière le Firewall en encapsulant les commandes Shell au sein du protocole MSN. MsnShell n'est composé que d'une partie serveur : "MsnShell server". Les principales fonctionnalités de MsnShell :
Figure 9: Principe de MSN Shell
Obtention d'un shell depuis une station située sur un réseau interne à partir d'un serveur externe;
Encapsulation des commandes et des réponses Shell dans le protocole MSN ("Shell over MSN");
Gestion de proxy HTTP ("Shell over MSN over HTTP");
Le protocole DNS, Domain name System, est un protocole de la couche applicative, utilisé pour enregistrer et effectuer des requêtes dans une base de données distribuée des noms de domaine. DNS se base sur un système symétrique de question-réponse.
Une nouvelle fois, les champs de l'entête du protocole vont pouvoir être détournés de leur usage premier pour faire circuler de l'information. Par exemple dans les champs ID, QDCOUNT, ANCOUNT, NSCOUNT, ARCOUNT, QNAME, NAME.
De nombreux outils ont été développés pour détourner le protocole DNS de son usage premier, nous citerons par exemple Nstx et Ozyman DNS (programme en perl).
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 :
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.
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.
La confusion de port consiste à détourner un port de son usage premier. Ainsi on peut très bien monter un serveur Apache sur le port 22 de l’ordinateur pour y accéder.
Figure 7: Confusion de port
OpenVPN permet de créer un tunnel chiffré sur une liaison point-à-point entre deux serveurs. Il permet à des pairs de s’authentifier entre eux en utilisant une clef privée pré-partagée, des certificats, ou un couple login-password. Il est basé sur la librairie d'OpenSSL, et emploie les protocoles SSLv3/TLSv1. L'IANA a assigné à OpenVPN le port 1194 comme port officiel. Cependant, il est bien sûr tout à fait possible d'utiliser n'importe quel port ouvert du firewall. On dispose alors d'un tunnel sûr pour exfiltrer de l'information de l'entreprise. Une fois mis en place, les administrateurs réseaux ne pourront plus du tout contrôler ce qui circule sur cette liaison, tous les protocoles pouvant y être utilisés.
Le protocole de contrôle de Transmission ou TCP est un protocole de la couche de transport utilisé pour une transmission fiable des données. C'est évidemment un medium de choix pour les canaux cachés. L'en-tête d'un paquet TCP, comme indiqué dans la RFC 793, est décrit sur le schéma suivant:
Le numéro de séquence, codé sur 32 bits, est normalement employé comme numéro d'identification pour réorganiser les paquets au niveau du récepteur lorsque ces derniers arrivent dans le désordre. Il permet et facilite les demandes de retransmission de paquet. Le premier paquet d'une session de TCP (un paquet de type SYN) contient un nombre d'ordre initial aléatoire, ISN. Le destinataire répond typiquement avec un paquet de type SYN/ACK, et en utilisant ISN+1. L' ISN doit être pris de manière aléatoire, cependant, ce champ peut également contenir une valeur non-aléatoire sans perturber le mécanisme de TCP. Il devient donc possible de cacher jusqu'à 32 bits des données dans ce champ et de les envoyer à n'importe quel autre système sur le réseau.
Le champ des options peut lui aussi être employé pour la transmission de données entre l'émetteur et le récepteur.
Le logiciel covert_tcp pourra être utilisé avec l’option TCP.
Le protocole ICMP (Internet Control Message Protocol) est utilisé pour diffuser les informations, les erreurs et les messages de test liés à l’état du réseau. C'est un protocole essentiel pour diagnostiquer l'état du réseau, il n'est donc que très rarement filtré. L'entête d'un paquet ICMP est de la forme:
+ | Bits 0-7 | 8 – 15 | 16 - 31 |
0 | Type | Code | Checksum |
32 | Identifier | Sequence Number | |
64 | DATA |
Figure 5: Format d'un paquet ICMP
Le Ping Tunnel est une application qui permet d'établir une connexion TCP vers un serveur à distance en utilisant le protocole ICMP. Montrons la puissance de cet outil : considérons que vous essayez de vous connecter dans un Hotspot, le réseau vous donne une adresse IP, mais ne vous laisse pas envoyer des paquets TCP ou UDP vers l'extérieur. Cependant le réseau vous permet de pinguer n’importe quel ordinateur de l’Internet. Il est possible de faire circuler de l'information dans le bloc data, sans que celle-ci soit vérifiée.
Les logiciels comme ptunnel et icmptx sont basés sur des paquets ICMP de type 8 (echo-request) et 0 (echo-reply). Le logiciel skeeve change le champ protocole de l'entête IP et met à 1 pour les faire ressembler à un paquet ICMP bien que ce dernier soit un paquet TCP.
Figure 6: Principe de fonctionnement
Il existe d’autres outils plus spécifiques, tels ICMP Shell1 qui permet de gérer une station linux en utilisant le protocole ICMP.