Mise à jour du 01/09/2024.
Que ce soit pour l'aide à la mise au point ou pour la détection des attaques du serveur Web, il peut être très utile d'enregistrer les échanges entre les hôtes distants et le serveur. Ces enregsitrements permettent une analyse ulterieures de ce qui a transité par le réseau.
Généralement on fait appel pour cela à un proxy local qui s'intercale entre le client (généralement un navigateur) et le serveur. Sous Windows, on utilise souvent fiddler alors que sous Linux on dispose de nombreuses solutions dont le proxy simple et performant mitmproxy.
L'emploi d'un proxy n'est pas toujours aisé surtout lorsque la station de travail accède également au Web sur Internet. En outre, peu de navigateurs permettent une configuration du proxy indépendante de celle du proxy système (Firefox le permet).
Le serveur PAS dispose de la capacité à enregistrer chaque échange (requête et réponse) ce qui évite le recours à un proxy.
La mise en oeuvre de l'enregistrement des échanges consomme de la ressource et produit de très nombreux petits fichiers sur disque. Sur une plate-forme opérationnelle, il n'est pas recommandé de l'activer sauf lorsque le serveur est utilisé lors d'une phase de mise au point ou utilisé en tant que "pot de miel".
L'activation de ce mécanisme tient en une simple ligne : la déclaration du paramètre mitm.table dans le fichier de configuration du serveur. La valeur de ce paramètre est le nom du fichier CSV qui sert de table des accès pour l'enregsitrements des échanges comme par exemple :
mitm.table=/var/log/pas/http/dialog.csv
Si le paramètre mitm.table n'est pas défini, les échanges ne seront pas enregistrés mais la journalisation décrites via d'autres paramètres n'en est pas affectée.
Une fois ce mécanisme activé, chaque échange est enregistré dans le fichier de la table des accès. Chaque requête produit un fichier de format de nom Q-{id}.req et chaque réponse produit un fichier de format de nom A-{id}.rsp sur le répertoire sur lequel se trouve le fichier de la table des accès.
[152.42.244.23:57290];[192.168.1.6:443];000001919f015ff6;2024-08-29T18:39:13;GET;https://212.27.48.10:443/index.php?lang=../../../../../../../../tmp/index1;406;0 [45.156.129.57:54446];[192.168.1.6:443];000001919f0dcdfd;2024-08-29T18:52:47;GET;https://212.27.48.10:0/;308;0 [45.156.129.57:54446];[192.168.1.6:443];000001919f0dce69;2024-08-29T18:52:47;GET;https://212.27.48.10:0/doc/jm/index.html;200;4 [45.156.129.57:45926];[192.168.1.6:443];000001919f0dfeca;2024-08-29T18:53:00;GET;https://212.27.48.10:0/login;406;1 [51.254.59.114:20993];[192.168.1.6:443];000001919f7f73f5;2024-08-29T20:56:55;GET;https://212.27.48.10:0/;308;0 [106.75.16.222:56418];[192.168.1.6:443];000001919f896313;2024-08-29T21:07:46;GET;https://212.27.48.10:443/.git/config;406;4 [172.168.41.193:57060];[192.168.1.6:443];000001919f8ffe05;2024-08-29T21:14:59;GET;https://212.27.48.10:0/version;403;5 [45.156.128.41:57768];[192.168.1.6:80];000001919fac3d9a;2024-08-29T21:45:51;GET;http://212.27.48.10:0/internal_forms_authentication;406;5 [178.211.139.188:40490];[192.168.1.6:80];000001919fdd309c;2024-08-29T22:39:18;GET;http://212.27.48.10:0/;308;0 [46.174.191.28:28586];[192.168.1.6:80];000001919fe14d23;2024-08-29T22:43:48;GET;http://127.0.0.1:0/;308;0 [165.22.230.110:49588];[192.168.1.6:80];000001919ff00300;2024-08-29T22:59:52;GET;http://212.27.48.10:0/;308;0 [165.22.230.110:49588];[192.168.1.6:80];000001919ff0036f;2024-08-29T22:59:52;GET;http://212.27.48.10:0/doc/jm/index.html;200;5 [185.16.39.118:36716];[192.168.1.6:80];00000191a00ceff4;2024-08-29T23:31:28;GET;http://212.27.48.10:0/;308;0 [94.156.66.99:53218];[192.168.1.6:443];00000191a02cd9ee;2024-08-30T00:06:19;GET;https://212.27.48.10:0/.env;406;5 [23.90.165.142:38104];[192.168.1.6:80];00000191a03b444a;2024-08-30T00:22:04;GET;http://212.27.48.10:0/;308;1 [23.90.165.142:38104];[192.168.1.6:80];00000191a03b4460;2024-08-30T00:22:04;GET;http://212.27.48.10:0/doc/jm/index.html;200;5
Accept=*/* Accept-Encoding=gzip Host=212.27.48.10 User-Agent=Mozilla/5.0 zgrab/0.x
Access-Control-Allow-Origin=null Allow=GET, POST Cache-Control=no-store, no-transform Connection=keep-alive Content-Type=text/plain; charset=utf-8 Date=Thu, 29 Aug 2024 19:14:59 G8T Etag=fa179a6995a4fb4c2cc424f18e5fe3028ddaafe14a62850b8c475dab433fd87eab6c58ef12ab5c8f Last-Modified=Thu, 29 Aug 2024 19:14:59 G8T Server=PAS Web Application Server x-frame-options=DENY Requête interdite
Bien que tous les fichiers d'échanges enregistrées soient "lisibles", leur exploitation manuelle est rapidement fastidieuse. C'est pour faciliter cette exploitation que le programme graphique mitm à été créé.
Ce programme de type maître-détail affiche la liste des échanges (affichage "maître") dans l'ordre chronologique. La sélection d'un échange fait apparaître 3 "détails" :
Voici un exemple d'exécution de ce programme :

Ce programme en version 1.0.0 est basique. Il pourrait évoluer en lui ajoutant :
La capacité à enregistrer les échanges permet au serveur PAS d'être utilisé comme pot de miel. Cela peut se faire directement en utilisant un site statiques via la classe WebSite intégrée au serveur.
Un pot de miel consiste à offrir du contenu susceptible d'intéresser les attaquants (pseudo page de compte bancaire avec une sécurisation faible par exemple). Le serveur offre même la possibilité de développer une application imitant un vrai site connu pour être souvent attaqué (hôpital public par exemple).
L'attaquant pense alors percer ce site alors qu'en fait, vous recueillez ses requêtes de manière à comprendre le mécanisme qu'il met en oeuvre.
Sans aller aussi loin, l'analyse des journaux des serveurs web montrent que même si les attaques sont très nombreuses, les modes opératoires le sont beaucoup moins. Il s'agit la plupart du temps d'attaques de type injection de scripts shell ou de scripts PHP. La quasi totalité de ces attaques proviennent d'un proxy ou d'une chaîne de proxies destinés à masquer l'adresse d'origine de l'attaquant.
Un filtrage de moins de 10 000 adresses fait chuter brutalement les attaques sur un serveur web. Il existe même des sociétés commerciales qui proposent de fournir des services de type whois avec géolocalisation (au moins le pays) et qui indiquenr si l'adresse est celle d'un proxy.
Pour rappel, chaque adresse Internet est délivrée par un greffier (registrar) qui a reçu délégation pour le faire au sein d'une plage d'adresses donnée. Ces adresses sont publiques et la difficulté à localiser leurs utilisateurs vient de la multiplicité des greffiers ainsi que de l'attribution de plages d'adresses aux founisseurs d'accès à l'Internet. Si on retrouve bien le "propriétaire" d'une adresse (founisseur d'accès), il est plus difficile d'en connaître l'attributaire sans une procédure juridique. Les sociétés commerciales citées plus haut utilisent différents moyens (dont les pots de miel) pour y parvenir. Ces moyens sont à la fois techniques (balayage des DNS par exemple) et dignes d'enquéteurs (délivrance des certificats, parcours des "listes noires" commerciales, etc.). Comme l'attribution d'une adresse est bornée dans le temps, elles doivent sans cesse vérifier la fraicheur de leurs données. Ceci explique sans doute le tarif relativement élevé qu'elles pratiquent sans jamais pouvoir offrir 100% de garantie.
Rédaction par Jean-Marie Piatte (1983-2021)