08 décembre 2020
publié par 

Un premier billet en 2010 présentait les bases de l'utilisation de Wireshark : Le b.b.-ba de l'analyse de trames...


Cet utilitaire est très pratique pour analyser les échanges HTTP entre une application ou un site, et un serveur qui héberge un webservice ou un autre site. Mais sa portée se limite aux échanges HTTP. Comme depuis HTTPS doit être systématisé afin de chiffrer les échanges, Wireshark est souvent inadapté.


Une solution est disponible pour étudier les requêtes échangés en HTTPS : c'est le proxy MITMPROXY. Il ne permet pas une analyse de trame "bas niveau" à l'octet prêt comme Wireshark. Par contre pour tous les appels de webservices REST ou SOAP importés, avec les types restRequete ou httpRequete, il permet de voir les entêtes et le contenu des requêtes :

  • c'est justement ce qui est déterminant pour finaliser la mise au point d'une requête (il est vraiment exceptionnel de vouloir descendre à un si bas niveau que celui atteint par Wireshark),
  • ça aide pour comparer une même requête envoyée par des outils différents si des résultats diffèrent sans explication au premier abord.

En plus de donner l'information pertinance dont on a besoin, le proxy MITMPROXY dans sa version web s'installe en quelques clics sur un poste, il est donc à classer dans les outils à avoir à porter de mains en phase de mise au point !


Le site du projet MITMPROXY détaille le principe complet de son fonctionnement, et de son installation. Comme tout proxy, il vient s'insérer entre l'expéditeur de la requête, votre application ou site, et son destinataire. De cette manière il peut afficher le contenu des requêtes avant de chiffrer la requête pour son échange réel avec son destinataire. Cela explique pourquoi il faut installer son certificat. En fin de billet un exemple d'installation sous Windows est donné.


Voici le principe d'utilisation pour tracer une requête en HTTPS envoyée avec la fonction HTTPEnvoie en WLangage :

  • s'assurer que les éventuels applications pouvant utiliser le port 8080 ou 8081 sont arrêtées,
  • lancer "C:\Program Files\mitmproxy\bin\mitmweb.exe" :
    • le proxy écoute sur le port 8080 les appels de vos applications : l'invité de commande est ouvert montrant le proxy en cours d'exécution;
    • il répond au port HTTP local 8081 sous la forme d'une interface web permettant de voir toutes les requêtes HTTPS : le navigateur par défaut est ouvert sur l'interface web du proxy qui montre toutes les requêtes redirigées (http://127.0.0.1:8081/#/flows)
  • ajouter l'appel de la fonction WLangage Proxy avant le code qui lance la requête HTTP à étudier :
    Proxy("127.0.0.0.1", 8080)
  • lancer en mode test, ou avec l'exécutable compilé le code qui exécute la requête,
  • le navigateur qui a été ouvert au lancement du proxy et montrant l'interface de mitmweb affiche instantanément le contenu de la requête.

Exemple avec une requête qui demande la page d'accueil du site PC SOFT, on a donc toutes les entêtes de la demande (invisible avec un Wireshark la connexion étant chiffrée), et de la réponse :

Proxy("127.0.0.1", 8080)
MaRequête est un httpRequête
MaRequête..URL = "https://pcsoft.fr"
MaRequête..Entête["mon-entete"] = "mon token perso"
MaRequête..UserAgent = "Test "+VersionWINDEV(versionFramework)
RESTEnvoie(MaRequête)

 

Les entêtes de la demande sont montrées par l'interface http://127.0.0.1:8081/#/flows :

Ainsi que la réponse détaillée :

La version de TLS utilisée, ainsi que le nom du CIPHER sont également visibles dans le volet "details" de la requête.

 

Avec ce principe il devient donc facile de voir le contenu complet d'un échange en HTTPS avec un serveur. C'est complémentaire à l'utilisation de la propriété ..ProcédureTrace des types httpRequête et restRequete.

 

Gain de temps très appréciable pour la mise au point !

 

 

Un exemple d'installation sous Windows :
(pour tout chagement de port ou adaptation aux spécifités d'une configuration utliser le site dédié)

  • télécharger l'installateur sur le site mitmproxy : https://mitmproxy.org/
  • exécuter l'installation,
  • lancer en fin d'installation le proxy en veillant bien :
    • avec de stopper les applications pouvant utiliser le port 8080 ou 8081,
    • d'autoriser l'application dans le pare-feu Windows lorsque Windows le demande,
  • accéder aux réglages proxy de Windows (sera à faire une fois pour toutes),


  • configurer l'utilisation du proxy :
    • positionner le sélecteur sur "Activé",
    • donner l'adresse local 127.0.0.1 et le port 8080 :


    • clic sur "Enregistrer,
  • dans EDGE ou Internet Explorer, accéder à la page dédiée à la récupération du certificat : http://mitm.it/
  • utiliser le bouton "Get mitmproxy-ca-cert.p12 (si la page ne propose pas le téléchargement c'est que le réglage du proxy n'est pas enregistré, ou qu'un autre programme répond sur le port 8080...) :


  • télécharger puis ouvrir le fichier afin que l'assistant d'importation d'un certificat de Windows démarre,
  • importer le certificat avec :
    • ordinateur local (valider l'autorisation d'élévation des privilèges),
    • aucun mot de passe n'est à préciser,
    • sélectionner "Placer tous les certificats dans le magasin suivant" à l'étape de choix du magasin,
    • avec "Parcourir" sélectionner le magasin "Autorité de certification racines de confiances" :
    • terminer l'assistant,
    • valider "L'importation a réussi"
  • supprimer dans les paramètres de Windows l'utilisation systématique du proxy (à moins de vouloir écouter tout le trafic).


Ce mode opératoire est bien plus long à écrire qu'à appliquer ;-)

Une fois le certificat en place, lorsque l'on veut tracer une requête, il suffit donc de relancer "mitmweb.exe", et d'appeler la fonction Proxy pour que les requêtes le traversent. Le principe s'applique également à l'utilisation de websockets.

 

 

 

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée