CNTLM, Havij et proxy d’entreprise

you shall not pass the proxy

Imaginons la scène : vous êtes au boulot, et vous avez un peu de temps à tuer, vous avez donc téléchargé Havij un logiciel permettant d’automatiser la recherche de vulnérabilité de type injection SQL avec l’idée d’éprouver la robustesse de votre site perso. Excellente initiative, en plus de vous former à ce type de vulnérabilité, vous avez de menues chances de renforcer la sécurité de votre espace web… Malheureusement, pas moyen de faire marcher ce con de logiciel… Je vous rassure, j’ai peut-être l’explication, voire la solution !

Il est possible que vous soyez sans le savoir, derrière un proxy HTTP(S)…

Mais avant de vous expliquer comment vous dépatouiller avec Havij quand vous êtes dans cette situation embarrassante, et pour conserver l’attention des tout jeunes débutants n’ayant pas encore parfaitement construit leur background technique, je vais d’abord répondre à cette question…

Mais qu’est ce qu’un proxy HTTP(S) ?

Et bien un proxy c’est un intermédiaire entre vous et le web. – …Quoi, c’est pas suffisant comme explication ?!… Très bien, j’explique un peu tout ça…

Proxy SquidLorsque vous surfez sur internet, vous accédez à des emplacements particuliers situés un peu partout dans le monde, et comme tous lieux, pour accéder à ces endroits il vous faut connaître l’adresse, ici on parle d’adresse IP. Hélas,  les adresses réseaux c’est un peu compliqué à retenir en masse, en plus c’est pas vraiment parlant pour nous humains sans mémoire… Les pionniers de l’internet, conscients de cette difficulté alors que ces emplacements virtuels se multipliaient, ont inventé un truc super pratique qui s’appelle le nom de domaine. Un nom de domaine est une sorte d’alias associé à une adresse IP, plus facile à mémoriser car généralement intelligible et construite en fonction du contenu accessible à l’adresse IP à laquelle il est associé. Par exemple, 0x0ff.info est le nom de domaine du blog que vous parcourez en ce moment. Cette béquille fournie à l’utilisateur n’est en revanche pas suffisante pour identifier un emplacement sur le réseau. Heureusement il existe un moyen de récupérer l’adresse IP à partir de ce nom de domaine, ce moyen s’appelle DNS.

Ce que l’on définit comme “navigation internet” est en quelque sorte une succession de clics sur des liens hypertextes permettant d’accéder depuis une page internet à une autre page. Sans proxy, lorsque vous cliquez sur l’un de ces liens, vous interrogez en fait un serveur DNS pour traduire le nom de domaine du site web que vous souhaitez atteindre en adresse réseau. Une fois l’adresse IP en votre possession, vous vous adressez directement au serveur pour établir une connexion TCP, puis vous dialoguez avec lui dans sa langue natale qu’est HTTP(s). Enfin vous… Votre navigateur le fait, vous vous n’êtes qu’une bande de flemmards, mais ça change pas ça, si ? ;)

Lorsque vous utilisez un serveur proxy, c’est un peu différent… Vous, ou plutôt votre navigateur décharge une partie du travail sur lui (notamment la recherche d’information DNS). Le serveur devient alors votre unique interlocuteur, lorsque vous lui demandez une ressource (par exemple la page www.0x0ff.info), le serveur proxy va réaliser cette translation DNS, récupérer la page que vous avez demandée, et enfin vous la transmettre.

Et quel est l’intérêt d’un proxy ?

  • Sécurité : l’accès à internet depuis un réseau local doit être restreint au maximum. Plus le trafic entrant et sortant est soumis à des règles strictes et plus votre réseau est sécurisé, logique. Cela dit, il est en général souhaitable de laisser aux utilisateurs la possibilité d’accéder à internet. Or, il est bien plus difficile de configurer correctement un pare-feu lorsque le trafic émane de sources multiples, qui (pour simplifier l’affaire) changent régulièrement d’adresse IP et, cerise sur le gâteau, qui se situent à différents endroits du réseau. Vous conviendrez que la définition même d’un réseau local d’entreprise et les problématiques sécuritaires qui en découlent, forment une vraie dichotomie… Et bien le proxy permet de simplifier la gestion de l’un des points les plus sensible d’un réseau d’entreprise, c’est à dire le ou les pare-feux permettant d’accéder à l’internet.
  • Contrôle : l’une des missions d’un proxy HTTP(S) est d’autoriser ou non l’accès à certaines parties du web. Par exemple il est possible d’interdire aux utilisateurs l’accès aux sites de cul ou de n’autoriser l’accès aux réseaux sociaux qu’entre midi et deux…
  • Proxy is watching youTraçabilité : les proxy peuvent également servir à réaliser des statistiques de toutes sortes, et à mémoriser certains événements liés aux utilisateurs authentifiés (comme par exemple, des tentatives répétées d’accéder à l’un de ces fameux sites de cul). Les applications sont nombreuses, mais ne nous leurrons pas, il s’agit en général de répression. Il est par exemple possible d’identifier les sites les plus visités, les heures ou le trafic est le plus important, et quels utilisateurs passent leurs journées à surfer sur le net…  Attention, une entreprise n’a aucun moyen légal d’utiliser ces informations contre vous si elle ne vous a pas au préalable informé qu’elle réalisait un traitement des données émanant de la navigation des utilisateurs présents sur le réseau, sauf enquête bien entendu. Ce qu’en dit la CNIL
  • Accélération : un autre atout majeur d’un serveur proxy est sa capacité à accélérer sensiblement la navigation. En effet, il est capable de stocker temporairement des pages ou des objets multimédias telles que des images directement sur ses disques dans ce que l’on nomme un “cache” (répertoire temporaire). Ainsi, il lui est possible, lorsqu’un autre utilisateur (ou le même hein !) demande une ressource qui a déjà été visitée, de ne pas devoir la retélécharger…
  • Anonymat : moins vrai pour les proxy d’entreprise que pour les proxy “publiques”, la technologie proxy permet de masquer votre identité. En effet, lorsque vous consultez une page, le serveur vous ayant remis ces données récupère (ou tout du moins, est en mesure de récupérer) un certain nombre d’informations sur vous ou plus précisément sur votre connexion. L’adresse IP est une donnée sensible. Certes pour un pirate, il n’est pas possible de faire grand chose sur la seule base d’une adresse IP comme l’explique Michel sur son blog, cependant cette donnée vous identifie ! Il est donc possible qu’un jour ou l’autre quelqu’un vienne sonner à votre porte pour vous demander des comptes. En France, seule une enquête judiciaire pourrait entraîner (normalement) ce genre de situation. Dans d’autres pays, où les libertés individuelles sont une notion plus vague, l’anonymisation est un prérequis essentiel à la navigation…

L’authentification tu dis ?

Oui en effet, l’accès à ce genre de service dans les entreprises est soumis à certaines limitations. Et l’accès au proxy web passe généralement par l’authentification plutôt que par d’autres moyens d’identifications que l’on peut imaginer (par exemple un filtrage par IP ou soyons con fou via des listes d’accès (par adresse MAC)). En plus d’interdire l’accès aux personnes non autorisées, cette authentification participe, dans le cas où chaque utilisateur dispose d’un accès personnel, à cette fameuse notion de non-répudiation.

En clair, si vous allez sur un site du cul en utilisant vos identifiants, et que vous vous faites virer, il sera plus difficile de prétendre à une machination et vous pourrez vous en prendre qu’à votre trogne.

Les types d’authentification les plus vus

  • Pas d’authentification : une seule chose est nécessaire sur le poste client (votre ordinateur), votre navigateur doit être configuré pour passer au travers le proxy et roule ma poule, pump-it-up party night !
  • Authentification basique : si vous utilisez un navigateur sans plugins (FoxyProxy pour ne citer que lui), à chaque fois que vous lancez votre web browser, il vous faudra saisir un couple login/mot de passe. Chaque application qui se connectera à internet devra permettre la configuration d’un proxy, sans quoi ça ne marchera pas. Généralement, ce type d’authentification est utilisé avec une poignée d’identifiants différents, il est même très souvent question d’un seul couple login/mot de passe utiliser par tous les utilisateurs du réseau.
  •  Authentification NTLM/NTLMv2 : là encore, le proxy ne vous permettra d’émettre des requêtes que si vous vous êtes identifiés. Vos identifiants sont normalement ceux de votre compte Active Directory (les identifiants de votre session Windows si vous préférez). Notez cependant qu’il n’est pas nécessaire d’être connecté à un compte AD pour utiliser ces identifiants, mais nous verrons ça un peu plus tard… De plus, extraordinaire, si vous êtes connectés à votre compte AD, il ne vous sera normalement jamais demandé de les saisir au moment où vous lancez votre navigateur. De plus, vos applications fonctionneront sans avoir à configurer les options du proxy, enfin si elles se basent sur la configuration internet de Windows ce qui n’est pas toujours le cas…

Yapa d’proxy et pourtant ça marche pas…

Et oui, rien n’est jamais simple… Sachez qu’il est possible de masquer à l’utilisateur certaines options de configuration comme par exemple la page de configuration du proxy, ou utiliser des moyens moins évidents pour configurer votre proxy tel que le protocole WPAD (Web Proxy Autodiscovery Protocol), ou les fichiers .PAC (Proxy Auto-Config)…

Plus sournois encore, il est tout simplement possible de faire passer le trafic web au travers d’un proxy en utilisant tout simplement les mécanismes classiques de routages (iptables, pat/nat)… L’utilisateur aura l’impression de communiquer directement avec internet et pourtant ce ne sera pas le cas… On parle de serveur proxy transparent.

Les applications casse noix

Avez-vous déjà utilisé une application qui nécessite d’accéder à internet et qui pourtant n’utilise pas les paramètres internet de votre ordinateur (sous Windows) ? Chez vous à priori aucun soucis mais au bureau… L’accès au web se fait généralement au travers d’un proxy, il faut donc renseigner les informations de proxy dans son panneau de configuration… Enfin, quand c’est possible, car toutes ne gèrent pas cette situation avec la même qualité :

  • L’application ne gère pas les proxy : vous êtes marron pour une solution simple.
  • L’application gère les proxy mais pas l’authentification: il demeure possible de passer à travers un proxy demandant une authentification basique. Pour cela vous devrez installer un proxy local sur votre machine cliente. Il en existe un grand nombre et tous ne se valent pas. Vous choisirez un proxy capable de gérer un proxy parent nécessitant une authentification basique.
  • L’application gère les proxy, l’authentification basique mais pas NTLM/NTLMv2 : comme précédemment, il vous faudra installer un proxy local sur votre machine. Il devra être en mesure de gérer l’authentification NTLM/NTLMv2. Il se trouve que CNTLM rempli cette tâche à merveille !

 

Télécharger et installer CNTLM

schema cntlmNous disions donc que CNTLM est un proxy capable de gérer les mécanismes d’authentification NTLM/NTLMv2.  Une fois installé sur votre ordinateur, il servira d’intermédiaire entre le proxy de votre entreprise et votre application… Bien entendu, vous devrez vous plier à une petite séance de configuration avant de profiter de votre nouveau jouet !

Déterminer l’authentification

Tout d’abord, nous allons tenter de déterminer le type d’authentification utilisé par le proxy de votre entreprise. Pour cela, lancez une interpréteur de commande (cmd), puis rendez vous dans le répertoire dans lequel vous avez installé CNTLM :

cd c:\Program Files\cntlm

Une fois au bon emplacement tapez la commande suivante, pour obtenir l’information recherchée :

cntlm -M http://google.com
Config profile  1/4... OK (HTTP code: 301)
----------------------------[ Profile  0]------
Auth       NTLMv2
PassNTLMv2    [2ECBF7B597B464FF74B175388731A515]
------------------------------------------------

Modifier cntlm.ini

 Il faut à présent modifier le fichier cntlm.ini en fonction de votre réseau local. Comme souvent, seules les lignes ne commençant pas par un dièse ou plutôt un croisillon  sont interprétées lors de l’initialisation du proxy CNTLM. Chez moi, voici les lignes qui ne sont pas “commentées” (sans # devant) :

Username        0x0ff
Domain          mycompany.com
Proxy           192.168.2.9:8080
NoProxy         localhost, 127.0.0.*, 10.*, 192.168.*
Listen          3128
Auth            NTLMv2
Header          User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0\r\n

Générer les clés

A présent il est possible de récupérer vos identifiants chiffrés. Pour se faire, l’exécutable CNTLM va utiliser un petit fichier .ini, une fois la commande envoyée, il vous sera demandé de saisir votre mot de passe :

C:\Program Files\Cntlm>cntlm -c cntlm.ini -H
Password:
PassLM          ACA745D52F2704DD552C4BCA4AEBFB11
PassNT          4BA35232DE79D3170D5F3C060679472E
PassNTLMv2      2ECBF7B597B464FF74B175388731A515    # Only for user '0x0ff', domain 'mycompany.com'

Si vous ne faites pas d’erreurs, vous voilà en possessions de trois identifiants que vous pouvez copier dans votre fichier cntlm.ini, et normalement l’étape relou de la configuration est derrière vous !

(re)démarrer le service

Pour lancer le gestionnaire de services, rendez vous dans Démarrer/exécuter pour taper “services.msc“.

Dans la fenêtre qui vient de s’ouvrir, faites un clic droit sur le service Cntlm Authentication Proxy puis redémarrer et veillez à ce qu’il soit configuré pour se lancer au démarrage.

Havij

 A présent, profitez de votre nouveau proxy personnel, relancez Havij et pensez juste à configurer votre proxy dans le menu Settings, onglet General comme ci-dessous.

 cntlm et havij

Malheureusement cet article ne traite pas de l’utilisation d’Havij, mais je ne doute pas que vous soyez largement assez compétent pour apprendre à vous en servir par vous même, héhé ! :)