{Securité} Utiliser un serveur Proxy Transparent pour faire du Reverse Engineering

 

Hello à tous,

 

C'est le premier article que j'écris en 2019, ceux-d'avant ont été écrit et programmé en 2018 afin que je puisse moi aussi profiter de quelques semaines de repos.
En tout cas je vous remercie pour vos nombreux commentaires et messages d'encouragement !!!
Au programme une petite année encore bien chargée ;)
J'ai décidé d'ouvrir un peu la porte à certaines entreprises si elles souhaitent ajouter des encarts sponsorisés dans mes articles ...

Attention je précise qu'il ne s'agira pas d'articles dédiés à des produits, mais seulement d'un petit encart dans certains articles qui sera bien indiqué comme "sponsors / partenaire".
Cela me permettra peut-être de profiter d'un peu d'argent pour acheter et tester des produits.

J'ai également commencé et vous l'avez surement remarqué, à introduire de plus en plus de contenu vidéo.
Pour l'instant je vais y aller tout doucement en ne produisant que quelques démos illustrant mes articles.
A terme, peut-être aurez-vous à nouveau l'occasion de me retrouver face caméra ^^
Bref d'autres petites nouveautés que je vous annoncerais au fur et à mesure pour ne pas surcharger cet article !

Aujourd'hui j'ai décidé de vous parler proxy !

Un proxy qu'est-ce que c'est ?

Bien que certaines personnes aient une idée assez vague de ce qu'est un proxy ...
Certains auront en tête une grande surface ?
D'autres un outil pour aller sur Youtube ou Facebook quand on est bloqué par son collège, son lycée, son entreprise  ...
Et enfiin ... d'autres penseront qu'il s'agit d'une passerelle permettant de filtrer des contenus et / ou des personnes !

Bref vous avez tous raison !

Un Proxy est une enseigne de magasins .... mais pas que ...

Contourner des restrictions
Un Proxy c'est également un outil qui permet dans certains cas de contourner des interdictions mises en place comme le blocage de Youtube ou de Facebook au boulot.

Filtrer des sites et des utilisateurs
Un Proxy permettra d'autoriser ou d'interdire certaines personnes de s'y connecter, et / ou certains contenus.

Se rendre anonyme
Un proxy se connecte à votre place, vous pouvez donc l'utiliser pour vous anonymiser (partiellement)
Lorsque je me connecte sur un site, celui-ci a des informations sur ma connexion (mon ip par exemple), il pourrait savoir d'où je me connecte par exemple, quel est mon FAI (Fournisseur d'Accès Internet), ...
Un Proxy camouflerait tout ça, par ses propres informations.

Permettre l'accès  à certains services
Un proxy va permettre de vous connecter sur certaines machines qui interdisent toutes connexions autres que provenant de celui-ci.
Ainsi vous pourrez dire, je ne veux que personne ne puisse se connecter sur ce serveur, sauf si les utilisateurs passent par le proxy (qui fera office de disjoncteur en cas de souci ;) ).

Comment fonctionne un proxy ?

 

Un proxy va être configuré pour permettre aux gens de transiter par lui afin d'atteindre certaines machines ou d'utiliser certains services (serveurs, sites internet, ....)

Dans un scénario très simple et familier, vous vous êtes tous retrouvé à un moment désireux d'accéder à une page internet ou à un site internet ... mais dont vous ne pouviez pas en raison de certaines restrictions imposées par votre entreprise ou dans votre établissement scolaire.

Ces restrictions par exemple peuvent être :
Je vous interdis d'accéder au site "YouPorn"
Donc vous ne pourrez pas y accéder directement.
Mais en configurant sur votre ordinateur un proxy ....
Votre ordinateur contournera ces restrictions en n'affichant que des connexions
vers le proxy ... qui servira de relais.
Ainsi l'outil employé pour vous empêcher l’accès à "YouPorn" ne verra rien d'autre que le "Proxy"

Le proxy est un passe plat, mais aussi un bon manager.
Avec un proxy vous avez la possibilité de créer des résolutions de nom de domaine pour l'ensemble de ses utilisateurs.
En configurant un proxy vous pouvez créer des noms de domaine fictifs en entreprise et donner accès à certaines machines qui sont accessibles uniquement depuis ce proxy.

 

 

 

Trouver des failles et produire des cracks dans des applications à l'aide d'un proxy !

 

Les cas d'école sont décrits plus haut, ici il s'agit de vous présenter un usage beaucoup moins répandu des proxys.
Il s'agit de trouver des failles dans une application.
Lorsque vous utiliser un proxy, celui-ci voit de manière transparente, tout ce que vous faites (excepté pour les sites en HTTPS ...) !
Un proxy voit donc toutes vos requêtes, et peut récupérer au passage vos cookies ... il est donc primordial de ne pas utiliser n'importe quel proxy que vous trouverez sur internet si vous souhaitez vous connecter sur des sites avec des informations confidentielles (votre messagerie, vos réseaux sociaux, le cloud ...)

Analyser les requêtes

Ayant eu chez moi un peu de Windows, j'ai eu recourt parfois à des antivirus payant.
A cette époque, comme beaucoup de personne, je récupérais des licences publiées à la sauvette sur des pages Facebook ou des sites internet un peu louche ...
J'ai fini par prendre le temps d'analyser un peu le fonctionnement de cet antivirus.
Faire ce que l'on appelle de l’ingénierie inversée ou "Reverse Engineering".
Notamment en analysant les requêtes que l'antivirus échangeait avec un serveur lors d'une première installation ! Car c'est à ce moment-là que l'antivirus générait une licence d'essai ...

Grâce au proxy j'ai pu visualiser ce que l'antivirus envoyait comme information au serveur ... pour générer la licence.
Cela m'a permis d'automatiser la génération de licences... une sorte de "KeyGen" (Générateur de clés)
Comme je le dis souvent n'installez pas de crack ... et encore moins pour un antivirus ...
C'est un peu comme enfiler un préservatif une fois qu'on a fait l'amour ...

 

Installer / Configurer un Proxy "Squid Proxy" pour faire de l'analyse de requête !

J'ai pas mal passé de temps à trouver un tutoriel simple et OneShot permettant de mettre en place un proxy squid "transparent" qui permettrait aussi bien de voir des requêtes en clair (http) que des requêtes chiffrées (https) ...
Je n'en ai pas trouvé un seule qui fonctionnait du premier coup, mais j'en ai profité pour vous faire vraiment un "pousse-bouton" en terme d'installation.

Si vous êtes prêt, allons-y pour l'installation :

Sur votre serveur en tant qu'utilisateur "root", je vous invite à copier ceci dans votre terminal :

echo "1" > /proc/sys/net/ipv4/ip_forward
apt-get install openssl gcc devscripts build-essential libssl-dev
wget https://github.com/saucelabs/squid3/archive/master.zip
unzip master.zip
cd squid3-master
./configure --prefix=/usr/local/squid --enable-icap-client --enable-ssl --enable-ssl-crtd --with-default-user=squid --with-openssl
make all
make install
useradd squid
chown -R squid:squid /usr/local/squid/var/logs/
cd /usr/local/squid
mkdir ssl_cert
cd ssl_cert
openssl genrsa -out example.com.private 2048
openssl req -new -key example.com.private -out example.com.csr

L'opération va prendre une bonne dizaine de minutes, donc allez vous faire un café, car ça ne va pas être rapide ....

Normalement à la fin vous devriez être invité à répondre à un petit formulaire, avec des questions basiques (votre pays, ville, entreprise, ...) vous n'êtes pas obligé de mettre de véritables informations ;)
Lorsque vous aurez terminé de remplir ce formulaire, poursuivez avec ces commandes :

openssl x509 -req -days 3652 -in example.com.csr -signkey example.com.private -out example.com.cert  
mkdir /usr/local/squid/var/lib
/usr/local/squid/libexec/ssl_crtd -c -s /usr/local/squid/var/lib/ssl_db -M 4MB
chown -R squid:squid /usr/local/squid/var/lib/ssl_db/
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -I INPUT -p tcp -m tcp --dport 3127 -j ACCEPT

À partir de là, vous avez un proxy Squid qui fonctionne.
Mais il n'est pas encore configuré !

Il vous suffit de remplacer le contenu du fichier /usr/local/squid/squid.conf par :

strip_query_terms off
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow all
#http_access deny all
http_port 3128 ssl-bump cert=/usr/local/squid/ssl_cert/example.com.cert key=/usr/local/squid/ssl_cert/example.com.private version=1 options=NO_SSLv2,NO_SSLv3,SINGLE_DH_USE generate-host-certificates=on
https_port 3127 cert=/usr/local/squid/ssl_cert/example.com.cert key=/usr/local/squid/ssl_cert/example.com.private ssl-bump intercept options=NO_SSLv2,NO_SSLv3,SINGLE_DH_USE generate-host-certificates=on
ssl_bump stare all
ssl_bump bump all
sslproxy_cert_error allow all

#logformat squid %tl %6tr %>a %Ss/%03>Hs %<st %[un %Sh/%<a %mt %rm %>h %>rs %>rd
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt %>h
coredump_dir /var/cache/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

Voilà !!!
Votre serveur proxy est installé et configuré !
Dernière petite chose à faire :
Vous devrez sur les machines où vous souhaitez utiliser le proxy, installer le certificat "example.com.private" qui se trouve dans /usr/local/squid/ssl_cert

La plupart du temps, ouvrez ce fichier avec votre téléphone et / ou votre smartphone, celui-ci se chargera automatiquement de faire le reste.

Pour démarrer le serveur proxy, exécutez la ligne de commande suivante :

/usr/local/squid/sbin/squid -NCd9

Et observez les logs dans un autre terminal avec celle-ci :

tail -f /usr/local/squid/var/logs/access.log

Petite démonstration, avec les explications si vous activez les sous-titre dans cette vidéo :

 

 

Conclusion

N'utilisez jamais un proxy gratuit dont vous ne connaissez pas la provenance !
Si vous avez la possibilité de mettre en place votre proxy, faites le ;)

J'utilisais à une époque des applications sur Android pour analyser les requêtes de mon smartphone ...
Cela m'était utile pour détecter lorsque celui-ci communiquait à mon insu  des informations  personnelles ...

L'utilisation de son propre proxy (ou de son propre VPN) est quand même le mieux à faire, car n'oubliez pas que vos informations personnelles peuvent être capturées par le proxy ... donc s'il s'agit d'un proxy appartenant à un vilain pirate ... ne vous étonnez pas de vous faire pirater !!!

C'est un gros article qui m'a pris pas mal de temps, j'espère qu'il vous plaira, n’hésitez surtout pas à partager en commentaire vos retours d’expérience (si vous en avez)  ^^

 

10 comments

  • Salut,

    Merci pour tes articles très intéressants. J’ai tout de même une question :

    Quel est l’avantage d’utiliser un proxy plutôt qu’un sniffer (genre Wireshark) pour faire du reverse ?

     

    • Hello dg,

      Alors il est parfaitement possible de faire du reverse engineering avec Wireshark, néanmoins, un proxy présente plusieurs avantages en +
      Je t’ai fait une petite compilation à chaud, n’hésite pas à me dire ce que tu en penses ;)

      1) Wireshark ne permet pas de contourner des blocages de sites (mais ça à la rigueur … c’est du bonus)
      2) Tu deviens dépendant d’un logiciel et d’une plateforme contrairement à un proxy que tu peux le configurer sur n’importe quel appareil que ça soit un ordinateur, un smartphone, de l’IOT … que ça soit du Windows, du Linux, de l’Android ou bien de l’IOS
      3) Selon certaines politiques de sécurité … sur un ordinateur de bureau (entreprise, association, école, …) tu n’auras peut être pas les droits pour installer un logiciel comme Wireshark, mais tu pourras configurer un proxy
      4) Un proxy pourra gérer très facilement le déchiffrement https, ce qui n’est pas le cas avec des outils comme tcpdump et Wireshark
      5) Depuis Windows 10 … l’utilisation de Wireshark n’est pas ouf …

      L’idée de faire cet article, c’est aussi de faire découvrir / re-découvrir ce qu’est un proxy.
      Beaucoup de personnes entendent ce mot, et peu savent ce que c’est et comment ça fonctionne (en dehors des personnes dont c’est le métier)
      Il est intéressant à mon sens de montrer qu’il est simple de capturer du trafic …
      Qu’avec cet outil on peut craquer des softs, mais pas seulement …
      Qu’en 2/3 minutes avec le pc ou le smartphone d’un copain on peut lui configurer notre proxy et l’espionner en cachette ;)

      Voilà, j’espère avoir fourni une réponse assez complète à ta question ;)
      Je te souhaite une excellente fin de weekend ;)

  • Salut,

    Merci pour cet article très complet et détaillé. J’ai eu la possibilité de tester tout cela avec des VMs, j’ai eu un petit souci lors de la compilation (make all) avec Ubuntu server 18.04. Par contre, j’ai effectué l’installation et la configuration entièrement sur Ubuntu 12.04 et tout est fonctionnel !

    Merci encore,

    Bünyamin

  • Quel est la différence avec Burp Suite du coup ?

    • Hello,

      Oui effectivement, tu peux faire la même chose avec Burp. … mais

      Pour moi, Burp est beaucoup plus adapter pour le reverse d’un poste en particulier, et surtout pour une approche « offensive ». En effet, tu peux modifier les requêtes et les réponses du serveurs, automatiser , scanner, effectuer de l’injection SQL …. et sur plein d’autres truc sympa ;-)

      La solution Squid à l’avantage d’être full CLI  (pas d’interface Java) ; et surtout, je pense, permet une monté en charge , ou un industrialisation de la solution. Sur le LAN complet par exemple.

  • Oui c’est important de mettre en place le proxy surtout pour prohiber l’accès à a certains sites comme charmdate, kokotcha ou youporn.

  • Bonjour !

     

    Je viens de découvrir ton blog et je te remerci pour cet article intéressant !

    Je vais voir si un flux RSS traine par là :P

     

    (Cool la musique pour la vidéo)

    A bientôt !

  • Bonjour

    A l’heure actuelle c’est Debian Buster et Squid 4, alors ma question vous la devinez je pense

    avez vous testé ?

    Merci d’avance

  • Bonjour,

    J’ai suivi ta procédure qui a l’air de fonctionner, mais comment mettre en place le cert avec l’extension .private sur une machine Windows ? Car Windows ne reconnait visiblement pas ce format de certificat.

    Et comment mettre en place ce même certificat sous Debian ?

    L’objectif étant de ne plus avoir d’avertissement lors de la navigation https.

    Merci de ta réponse.

     

    PS: J’ai du faire quelques adaptations avec Squid 4.14

Répondre à blop Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.