Actus
06
Marek Bettman, Tomasz Nowak Secrétaire de rédaction : Tomasz Nidecki
Catastrophe par défaut
Je me demande, si des investigations n'ont jamais été entreprise pour savoir combien d'infractions de sécurité sont dues à l'utilisation de paramètres par défaut aussi bien au niveau matériel que logiciel. En tout cas, mes propres observations m'ont étonné. Jetons un coup d'œil à quelques exemples pratiques. Disons que vous avez un switch Cisco, bien relié à votre réseau. Il fait tout ce qu'il devrait, le réseau fonctionne bien. Bien sûr qu'il le fait – les paramètres par défaut le garantissent. Mais ils le garantissent si bien, qu'un intrus à l'intérieur de votre réseau peut le fait ruiner plus rapidement, que vous pouvez cligner. Si les mots STP ou CDP ne vous disent pas grand chose, jetez un coup d'œil à la page 24 – un article sur les attaques au niveau de la couche liaison de données vous expliquera tout. Un autre exemple. Disons que vous venez juste d'acheter un logiciel pour réaliser un VPN. Il est compréhensible que vous ne vouliez pas que, chacun sache que des données valant des millions de dollars transitent chaque seconde sur Internet et quel logiciel vous utilisez pour acheminer ce flux. Donc, plus vous êtes près des paramètres par défaut, plus vous avez de chance que, non seulement votre logiciel soit détecté mais également qu'il fasse l'objet du fingerprinting (voir page 46). Pas s'éloignant de paramètres par défaut a toujours été une chose qui rend la vie de cracker plus facile. Si un cracker voulait écrire un virus qui affecterait la plupart des utilisateurs, ce cracker utiliserait les trous de sécurité dans les logiciels installés par défaut – Windows avec Outlook Express ou Internet Explorer. Plus vous êtes loin des paramètres par défaut, plus l'utilisateur est en sécurité. Les utilisateurs de Macs ont toujours été considéré comme plus en sécurité que les PCs à base de Windows et je crois que la cause principale à ceci était le fait qu'il y avait moins d'utilisateur Mac que d'utilisateur de PC. *NIX était également considérés comme sûr, jusqu'à ce que Linux arrive et qu'un certain nombre de personnes ont commencé à l'utiliser, par conséquent, plus de crackers se sont intéressés à lui. Les paramètres par défauts sont à mon avis la plus grosse menace de sécurité. Heureusement, certains programmeurs sont avertis et essaient de forcer les utilisateurs de leur logiciels, à lire le manuel et installer le logiciel correctement. La plupart des utilisateurs d'ordinateur lisent la presse adressé au grand public par défaut. Soyez sûrs. Lisez-nous à la place. Tomasz Nidecki
[email protected] 4
hakin9 Nº 6/2005
Vous trouverez ici les nouvelles du monde de la sécurité des systèmes informatiques.
CD-ROM – hakin9.live
08
Robert Główczyński, Tomasz Nidecki
On vous présente le contenu et le mode de fonctionnent de la version récente de notre principale distribution hakin9.live.
Dossier Port knocking depuis l'interieur
10
Martin Krzywinski
Cet article a pour but d'expliquer en quoi consiste la technique du port knocking. Vous apprendrez à mettre en place cette technique le plus simplement possible et utiliser un mécanisme plus complexe basé sur le programme Doorman. Les avantages et les défauts du port knocking sont décrits ici.
Focus Attaques de la couche deux du modèle OSI
24
Alfredo Andrés, David Barroso
Grâce à cet article, vous connaîtrez les attaques sur les protocoles fonctionnant à l’intérieur de la couche de liaisons de données. On vous décrit en quoi elles consistent, quelles sont leurs conséquences, comment en réaliser et comment s'en défendre.
Pratique La guerre des robots, ou comment fonctionnent les réseaux 36 d'ordinateurs zombies Massimiliano Romano, Simone Rosignoli, Ennio Giannini
Cet article a pour but d'expliquer le fonctionnement de robots/botnets. On vous présente les dangers liés à leur utilisation ainsi que leurs applications pratiques. On vous montre comment créer facilement un botnet personnel.
ArpAlert 0.4.10 Thierry Fournier
44
Cet article explique comment implémenter une détection de connexions illégales dans un réseau local à l'aide de l'outil ArpAlert.
www.hakin9.org
Le périodique est publié par Software-Wydawnictwo Sp. z o.o. Piaskowa 3, 01-067 Varsovie, Pologne Tél. +48 22 887 10 10, Fax. +48 22 887 10 11 www.hakin9.org
Fiche technique Détection et relevé d'empreintes de VPN IPsec
Directeur de la publication : Jarosław Szumski
46
Roy Hills
Les méthodes de détection de l'existence des réseaux VPN et de relevé d'empreintes digitales (en anglais fingerprinting) sont présentés. L'article explique comment fonctionne IPsec et pourquoi les protocoles utilisés dans les réseaux VPN permettent une identification facile des périphériques ou programmes réalisant ce service.
Programmation Plein contrôle ou accès de bas niveau au réseau
58
Konrad Malewski
L'article vous enseigne comment utiliser les bibliothèques WinPcap et libnet pour avoir un accès de bas niveau au réseau. Vous apprendrez comment écrire une application à l'aide de ces outils.
Créer un shellcode polymorphique
68
Imprimerie, photogravure : 101 Studio, Firma Tęgi Ekonomiczna 30/36, 93-426 Łódź Imprimé en Pologne/Printed in Poland Abonnement (France métropolitaine) : 1 an (soit 6 numéros) 38 € DOM/TOM, étranger : nous consulter Dépôt légal : à parution ISSN : 1731-7037 Distribution : 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 Chef de produit : Magdalena Grzmiączka
[email protected] Secrétaire de rédaction : Tomasz Nidecki
[email protected] Préparation du CD : Robert Główczyński, Tomasz Nidecki Maquette : Anna Osiecka
[email protected] Couverture : Agnieszka Marchocka Traduction : Grażyna Wełna, Iwona Czarnota, Marie-Laure Perrotey, Aneta Lasota Correction : Jean-François K@sparov, Gilles Gaffet, Pierre-Emmanuel Leriche, Gilles Fournil, Pierre Mennechet, Jeremy Canale, Patrick Fernandez, Franck Ebel Les personnes intéressées par la coopération sont priées de nous contacter :
[email protected] Abonnement :
[email protected] Fabrication : Marta Kurpiewska
[email protected] Diffusion : Monika Godlewska
[email protected] Publicité :
[email protected] Michał Piotrowski
Si vous êtes intéressé par l’achat de licence de publication de revues merci de contacter : Monika Godlewska e-mail :
[email protected] tél : +48 (22) 887 12 66 fax : +48 (22) 887 10 11
Éditorial
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 suite sur l’écriture du shellcode. Cette fois-ci, les shellcodes polymorphiques sont décrits. Leur détection est plus difficile que les simples shellcodes décrits dans le premier article de la série.
Faites attention à votre argent
80
Tomasz Nidecki
Qu'est-ce qui est le plus sûr : placer de l'argent dans des banques virtuelles ou au-dessous de votre oreiller ?
Dans le prochain numéro
82
Magdalena Grzmiączka
Les articles qui seront publiés dans le numéro de hakin9 à venir.
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.
La revue hakin9 est publiée en 7 versions : FR
PL
CZ
IT
DE
ES
EN
AVERTISSEMENT
Les 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'utilisation incorrecte des techniques présentées. L'utilisation des techniques présentées peut provoquer la perte des données !
www.hakin9.org
hakin9 Nº 6/2005
5
Actus
Les créateurs de Zotob arrêtés
La police au Maroc et en Turquie a arrêté deux personnes responsables de la création et de la diffusion des vers Internet Zotob et Mytob dont l'activité a paralysé le travail de plusieurs sociétés et agences gouvernementales américaines. Les détenus sont Farid Essebar (marocain âgé de 18 ans) et Atilla Ekici (turc âgé de 21 ans). Selon les paroles de Louis M. Rigel de la section de lutte contre la criminalité électronique au FBI, Essebar a écrit le code du vers à la demande d'Ekici. Le vers attaquait les machines tournant sous la surveillance du système Microsoft Windows. Pour l'instant, le montant de la rémunération et le montant des pertes dues à l'attaque de Zatob et de ses mutations ne sont pas connus. Zotob et Mytob permettent les attaques suivantes contre les ordinateurs infectés. En plus, Zotob est capable de redémarrer Windows 2000. Il est possible d'accéder à distance à un ordinateur infecté grâce à une erreur dans le mécanisme système de détection du matériel Plug and Play. Pour attaquer un ordinateur, Zotob ne doit y démarrer aucunes applications. L'utilisateur risque donc de ne pas se rendre compte du danger auquel il est exposé. Le virus a apparu presque une semaine après que Microsoft ait publié l'avertissement concernant un trou dans les mécanises de sécurisation ainsi que le patch permettant d'éliminer le danger.
Le dernier numéro de PHRACK ?
Le 9 juillet, l'agence d'information BBC a publié sur sa page Internet une information sur la fermeture de l'un des plus populaires magazines Internet – PHRACK. PHRACK était durant les 20 dernières années le magazine le plus apprécié et le plus professionnel publiant les matériaux concernant aussi bien les mécanismes de sécurisation des réseaux informatiques que les méthodes d'attaque. Le 63ième numéro a été publié après un an de pause. Dans l'introduction, on peut lire que PHRACK n° 63 est vraiment la dernière édition ... élaborée par la rédaction actuelle et que le nouveau PHRACK 64 paraîtra probablement au tournant de 2006 et 2007.
6
hakin9 Nº 6/2005
De plus en plus de spyware
S
elon le rapport le plus récent établi par la société Webroot, la plupart des logiciels spyware viennent des États-Unis. La deuxième et la troisième place dans ce classement appartiennent respectivement à la Pologne et à la Hollande. Assurant une surveillance constante du danger provoqué par les logiciels espions, Webroot publie son rapport tous les trois mois. Le plus récent, paru le 23 août, examine pour la première fois la provenance géographique des spyware. Le classement de Webroot prenant en compte la division par pays de provenance concerne les pages utilisant les exploits. Selon les statistiques les plus récentes, le plus grand nombre de pages (adresses URL) installant des logiciels spyware en utilisant les exploits ont été retrouvé aux États-Unis (plus de 25 mille). La Pologne occupe la deuxième place en ce qui concerne le nombre des pièges qui attendent les internautes – le rapport de la société Webroot présente plus de 8 mille pages dangereuses venant de Pologne. En Hollande, il y a plus de 4 mille pages contenant des pièges. Les données concernant la provenance des logiciels spyware sont
ramassées par le scanner Phileas étant le premier système automatisé de détection de spyware sur Internet. Phileas est une sorte de robot réseau fouillant sans cesse les ressources Web à la recherche de nouveaux logiciels spyware cachés sur les pages Internet. À la base des données analysées, les laboratoires de Webroot font des mises à jour des bases de signatures pour le logiciel Webroot Spy Sweeper. Le nombre total des pages Internet (adresses URL) contenant des logiciels espions a quadruplé depuis le début 2005 en atteignant déjà le nombre de 300 mille d'adresses. En même temps, le nombre des signatures spyware uniques dans la base de Webroot a doublé dépassant récemment le nombre de 100 mille. Le rapport le plus récent de Webroot montre également la croissance du nombre des logiciels espions dans les ordinateurs de société – au dernier trimestre, le nombre des ordinateurs infectés dans les sociétés a augmenté de 19%. La version complète du rapport est disponible en téléchargement après s'être enregistré sur la page de l'éditeur – http ://www.webroot.com/.
200 mille d'euros volés par un directeur
E
n Finlande, un homme de 26 ans suspecté d'avoir pénétré dans un compte bancaire électronique et d'avoir volé 200 mille d'euros a été arrêté. Les données personnelles précises du détenu n'ont pas été rendues publiques. On suppose cependant que c'était un directeur du service de sécurité des données dans une filiale de GE Money (prêtant les services financiers) à Helsinki. Le suspect a volé la société où il travaillait. Selon le magazine finlandais Helsingin Sanomat, il est l'un des quatre détenus arrêtés à cause du vol commis en juin. Avec l'aide de deux complices, le suspect a copié un logiciel bancaire et les mots de passe vers un ordinateur portable de la société. Il a obtenu l'accès au compte bancaire
www.hakin9.org
en utilisant – pour éviter les soupçons – un réseau sans fil non sécurisé de son voisin. L'argent volé a été versé sur un autre compte de la société. Les premiers soupçons tombaient sur le propriétaire du réseau sans fil. La police a pu constater que celui-ci n'avait pas participé au vol. L'analyse des journaux réseau a permis de révéler une adresse MAC de l'ordinateur portable étant la propriété de GE Money. L'auteur du vol a été arrêté après que l'on ait réussi à trouver un lien avec l'ordinateur portable de la société utilisé pour le vol grâce à la compatibilité des adresses MAC. Le quatrième membre du groupe a été arrêté alors qu'il essayait de retirer 5000 euros du compte observé. L'argent volé a été récupéré.
Actus
Trous de sécurité dans Windows Vista
U
n pirate informatique venant d'Autriche portant le pseudonyme Second Part To Hell a écrit quelques logiciels pouvant être considérés comme les premiers virus pour un nouveau produit de Microsoft. Les vers utilisent les trous de sécurité dans la nouvelle ligne de commandes du système Windows Vista nommée Monad. Le code des nouveaux vers a été publié dans un guide de créateurs de virus supporté par le groupe clandestin Ready Ranger Liberation Front. Second Part To Hell – appelé également Mario – a créé les nouveaux virus le 21 juillet, à savoir un jour après que Microsoft a présenté officiellement la ligne de commandes utilisée dans la version la plus récente de Windows. La société finlandaise F-Secure, expert dans le domaine de la sécurité informatique, a nommé la famille des nouveaux virus Danom, ce qui est l'anagramme du mot Monad. Mikko Hyppönen, chef du bureau d'études de F-Secure, en examinant le code de nouveaux virus a constaté qu'ils avaient un caractère destructif
mais qu'ils n'étaient pas capables de porter des préjudices importants à l'utilisateur de Vista. L'expert finlandais a été surpris non par la création d'un virus pour Vista mais par la rapidité de sa naissance. Huit jours se sont à peine écoulés depuis la date de mise à disposition de la version de test du nouveau système d'exploitation – a souligné Hyppönen. Un peu de temps après, Microsoft a annoncé que Monad ne ferait pas partie du système Windows Vista qui paraîtra bientôt. Selon le représentant de Microsoft, la ligne de commandes sera pourtant intégrée avec le système suivant dédié aux postes serveur. Ce système nommé pour l'instant Longhorn Server doit sortir en 2007. Monad devait faire partie de Vista. Vu cela, les codes malveillants ont été vite considérés comme premiers virus pour Windows Vista. La déclaration de Microsoft dit clairement que les virus portant atteinte à Monad ne seront pas dangereux pour la version finale du nouveau système d'exploitation.
Le FBI recrute les pirates informatiques
D
efcon, conférence internationale des pirates informatiques à Las Vegas, n'attire pas seulement les passionnés de l'informatique. Les cours sont également fréquentés par les hommes en noir. Ils ne participent pas aux séminaires, aux démonstrations ou à d'autres attractions par plaisir ou pour s'éduquer en matière de sécurité informatique. Ils sont là pour recruter les jeunes hackers doués, pour le FBI, afin qu'ils travaillent pour le compte du gouvernement des États-Unis. Combien de pirates y consentent ? Plusieurs. Richard Thieme, expert en sécurité, raconte que lors d'un cours organisé au Pentagon pour les hommes du gouvernement et portant sur les technologies de pointe, il a reconnu quelques de visages parmi le public présent. D'où il connaissait tant de spécialistes travaillant pour le gouvernement ? Tous étaient des participants à la conférence Defcon.
La coopération avec les jeunes geeks informatiques doués commence souvent au lycée. Si le futur hacker décide de travailler pour le gouvernement, le FBI s'oblige à payer ses études et une formation supplémentaire en matière de sécurité réseau. Le fait que Defcon est fréquenté par les agents fédéraux est connu depuis longtemps. Il existe même un jeu de terrain dont l'objectif est de démasquer les agents. Il suffit de rencontrer lors de la conférence un homme correspondant à un agent FBI typique ; le costume sombre, les lunettes foncées et les chaussures cirées et de crier agent ! Il n'y a pas de perdants dans le jeu. Aussi bien celui qui a réussi à identifier un agent fédéral que l'agent lui-même reçoivent les t-shirts de Defcon ; pour l'agent, c'est un t-shirt avec une inscription je suis agent fédéral.
www.hakin9.org
Internet Explorer dangereux pour Windows Depuis un certain temps, un exploit pour un nouveau trou de sécurité toujours non patché dans le navigateur Internet Explorer est disponible sur le réseau. Tout un chacun préparant une page Web appropriée et y invite l'internaute surfant à l'aide du navigateur de Microsoft peut exécuter avec succès n'importe quelle commande dans le système de la victime inconsciente. Comme disent les communiqués, même le système Windows XP avec SP2 installé est vulnérable à l'attaque – la condition en est la présence de la bibliothèque msdds.dll qui n'est pas installée comme un élément standard du système Windows mais qui constitue un élément des logiciels utilisés communément tels que Microsoft Office ou Visual Studio. L'erreur a été définie comme critique. Jusqu'à ce que les patchs adéquats ne soient mis à disposition par Microsoft, les experts conseillent de ne pas utiliser Internet Explorer, de désactiver le support d'ActiveX ou de supprimer msdds.dll du système, ce qui peut entraîner pourtant le mauvais fonctionnement de certaines applications.
Claviers d'écran – une illusion de sécurité
Les analystes d’Anti-Phishing Working Group (APWG) avertissent que la technique appelée screenscraper permettant d'intercepter les données de la victime bien que celle-ci utilise un clavier d'écran est mise en œuvre de plus en plus souvent. Les keyloggers n'étaient pas capables d'intercepter les données confidentielles car en utilisant un clavier d'écran, les données sont entrées à l'aide de la souris. Cependant, les logiciels espions utilisant la screenscraper permettant de créer des captures d'écran – lorsqu'une victime entre les données à l'aide de la souris, le logiciel fait une capture d'écran et l'envoie à l'agresseur. Les experts d'APWG ont aussi informé que le nombre des rapports concernant les attaques des phishers a diminué dernièrement – en juin 2005, 15050 déclarations ont été signalées tandis qu'en juillet, il y en avait 14135.
hakin9 Nº 6/2005
7
CD-ROM
hakin9.live
L
e CD joint au magazine contient hakin9.live (h9l) version 2.7-ng – une version bootable de Linux contenant des outils, de la documentation, des tutoriaux et des matériaux complémentaires aux articles. Pour commencer le travail avec hakin9.live, il suffit de démarrer l'ordinateur à partir du CD. Après le démarrage du système, vous pouvez ouvrir la session en tant qu'utilisateur hakin9 sans mot de passe. Dans la présente version, la structure des répertoires a été modifiée :
seaux et quelques applications ont été complétés sur ce CD. Kismet a été compilé avec la gestion de GPS. Dans cette version de h9l, nous avons ajouté les programmes suivants : • • • •
• •
• • • •
8
doc – la documentation au format HTML, hit – les hits de ce numéro : 90 jours d’essai de l'excellent outil de surveillance réseaux : Anasil 3.1 et la version d'essai de 60 jours du programme anti-virus ArcaVir, art – matériaux complémentaires aux articles : listings, scripts, programmes indispensables, tut – tutoriaux, add – livres et autres documents au format PDF, rfc – documents contenant les RFC actuels (archive .zip).
• •
Wavemon – le moniteur de réseaux sans fils (ncurses), Wellenreiter – l'outil pour la détection de réseaux sans fils (avec interface graphique), Paros – le proxy pour les tests des applications HTTP/HTTPS, Les navigateurs de réseaux SMB : LinNeighborhood et Xsmbrowser, Raccess – un excellent outil de tests de pénétrations à distance, Yersinia – l'outil pour les attaques des protocoles de couche de liaison de données.
Actuellement, l'environnement graphique par défaut est Fluxbox avec le gestionnaire de fichiers ROX. Il est possible de lancer l'environnement graphique très convivial Xfce 4 en version 4.2.2 (Session->Xfce session dans le menu d'ouverture de session).
Les anciens matériaux se trouvent dans les sous-répertoires _arch, par contre les nouveaux – dans les répertoires principaux suivant la structure ci-dessus. Si vous parcourez le CD, cette structure est disponible dans le sous-répertoire /mnt/cdrom. La version 2.7-ng h9l est basée sur la distribution Gentoo Linux et les scripts livecd-tools. Les outils non disponibles dans le répositoire Gentoo sont installés à partir des paquets du répertoire /usr/local/portage ou chargés dans le répertoire /usr/local/bin. Le système travaille sous la surveillance du noyau 2.6.12-r9. Le paquet ISAPNPTOOLS et les pilotes IPW2100 ont été ajoutés. Certains outils non liés à la sécurité (Aspell, CUPS, jeux) ont été supprimés, par contre les outils pour les tests ré-
Tutoriaux et documentation
Figure 1. Nouveaux outils indispensables
Figure 2. Environnement graphique alternatif – Xfce 4
hakin9 Nº 6/2005
La documentation contient, entre autres, les tutoriaux préparés par la rédaction avec les exercices pratiques. Les tutoriaux sont conçus pour être utilisés sur hakin9.live. Grâce à cette solution, vous évitez tous problèmes relatifs aux différentes versions de compilateurs, à la localisation de fichiers de configuration ou autres options nécessaires pour démarrer les programmes dans un environnement donné. Dans la présente version de hakin9.live, outre les tutoriaux des numéros précédents mis à jour, un nouveau tutoriel a été ajouté. Il décrit la plus simple réalisation possible du port knocking à l'aide des outils SendIP et tcpdump. Le tutoriel complète l'article de Martin Krzywinski (cf. la page 10). l
www.hakin9.org
S’il vous est impossible de lire le CD, et ce dernier n’est pas endommagé mécaniquement, essayez de le lire au moins dans 2 lecteurs.
En cas de problème avec votre CD, envoyez-nous un message à l’adresse suivante :
[email protected] Port knocking depuis l'intérieur Dossier Martin Krzywinski
Degré de difficulté
Laisser un port ouvert au public, c'est comme inviter un intrus. Hélas, la plupart des services comme HTTP ou SMTP doivent rester ouverts à tout le monde. Certains services, les plus cruciaux, peuvent être toutefois accessibles uniquement à la demande. C'est ici que le mécanisme de port knocking intervient.
S
i vous lancez des services de réseau d'authentification forte (p. ex. SSH) sur votre serveur, il est probable que vous employez les processus d'authentification et d'encodage de services pour faire une distinction entre les utilisateurs légitimes et illégitimes. L'utilisateur légitime a un mot de passe et l'utilisateur illégitime ne l'a pas. Pour que le service identifie ce fait, l'utilisateur illégitime a une possibilité d'interagir avec le service. Si vous en tenez compte, les méthodes de password guessing (deviner les mots de passe) ne permettent pas d'entrer facilement dans un système bien maintenu ; l'intrus essayera alors de contourner l'élément d'authentification du service et d'augmenter ses privilèges, en explorant des bogues connus, comme le débordement de mémoire tampon. Puisque le zero-day exploit (vulnérabilité non publique) peut survenir à tout moment, maintenir un service de réseau n'est pas une activité passive. Il est nécessaire de suivre les conseils concernant les vulnérabilités et de suivre les correctifs pour boucher les failles de sécurité. Mais il faut l'admettre : lire des conseils est tellement ennuyeux, ingrat et complètement inutile en 99.99 % de cas. Un ou deux ans peuvent s'écouler avant que la vulnérabilité de
10
hakin9 Nº 6/2005
votre version de service soit trouvée et décrite ; ou aussi bien, cela peut ne jamais arriver. Que peut-on donc faire ? Premièrement, il faut prendre en compte le fait que les services avec une base d'utilisateurs finis n'ont pas besoin de laisser ses ports ouverts tout le temps. Contrairement aux services publics, comme SMTP ou HTTP, qui doivent recevoir des connexions de tout le
Cet article explique... • • • •
ce qu'est le port knocking, comment il fonctionne et à quoi il sert, comment écrire la plus simple implémentation du port knocking, comment configurer le programme Doorman pour un port knocking avancé, comment le port knocking peut être détecté et compromis.
Ce qu'il faut savoir... • •
www.hakin9.org
vous devriez avoir des bases des réseaux TCP/IP, vous devriez avoir des compétences élémentaires d'administration de Linux.
Port knocking
Port knock – information à travers des ports fermés
Contrairement aux idées répandues, vous n'avez pas besoin d'ouvrir les ports pour transmettre des données. Même si les connexions sont rejetées par un filtre IP, ces tentatives sont loguées et par conséquent, il est possible d'y chercher des informations. Dans le cas le plus simple, prenez les ports A et B, tous les deux fermés et dépourvus d'application d'écoute. Si le filtre IP est configuré pour contrôler les paquets entrants à ces ports, il est simple d'analyser les journaux de filtres et d'identifier la séquence de port (p. ex. ABAABBBAA) associée au client IP. Cette séquence de port peut être utilisée pour encoder des informations. L'encodage peut servir d'une carte entre une séquence de port spécifique et une information (p. ex. ABA = ouvrir le port 22 pour 15 minutes, ABB = fermer le port 22, BAA = fermer le port 22 et empêcher des connexions complémentaires). L'encodage peut également avoir une forme binaire où A/B représente 0/1.
monde partout et ne nécessitent pas en général une authentification, SSH est un service qui permet d'entrer uniquement aux utilisateurs dotés de mots de passe. Imaginez que vous êtes capables de garder le port SSH (tcp/22) fermé et par conséquent, de rendre le service inaccessible et protégé contre les vulnérabilités jusqu'à ce que le service soit demandé par l'un de vos utilisateurs légitimes. Comment alors le service peut-il être demandé alors que les ports sont fermés et aucune connexion n'est possible ? C'est le moment où le mécanisme de port knocking intervient. Le port knocking permet à l'utilisateur de demander d'ouvrir le port devant un service réseau. Cette demande a une forme d'une séquence passive des paquets d'authentification qui traversent les ports fermés du serveur (voir l'Encadré Port knock – information à travers des ports fer-
més). Il est possible d'envoyer des informations à travers des ports fermés, même si ces ports sont fermés et aucun service de réseau n'écoute. Ceci est possible car votre pare-feu ou un autre programme utilitaire, comme cpdump, peut être configuré pour contrôler tous les paquets entrants, même s'ils n'arrivent jamais à des applications comme SSH.
Limites de filtrages IP
Une manière de limiter une section croisée de votre service de réseau consiste à utiliser un filtre IP (voir l'Encadré Filtres IP), comme netfilter/ iptables. Le filtre serait configuré pour ne permettre que les connexions provenant des adresses IP d'où votre base d'utilisateurs se connecte. Cette liste comprend des bureaux et des domiciles distants. Cette approche se prête très bien pour limiter le nombre des sources
Filtres IP
Le rôle d'un filtre IP consiste à contrôler le passage des paquets à travers la pile TCP/IP, en se basant sur le contenu de leurs en-têtes. Par conséquent, un filtre IP peut empêcher les paquets originaires des adresses MAC ou IP spécifiques d'aller plus loin dans la pile, en défendant la livraison du paquet à une application. Un filtre IP (p. ex. netfilter/iptables) opère sur la couche 3 de OSI de la pile TCP/IP (pour plus d'informations sur les couches OSI, reportez-vous à l'Encadré Sept couches du modéle OSI dans l'Article Attaques de la couche deux du modèle OSI dans le numéro actuel de hakin9) et contrôle le flux de paquets, basés sur le contenu de leurs en-têtes IP. Ces en-tête comprennent les adresses IP source et cible, le protocole (TCP, UDP, etc.) et TTL. Actuellement, la plupart des filtres IP, y compris iptables, sont capables d'aller plus bas (couche 2) et plus haut (couche 4) et de filtrer les paquets via des informations de bas niveau (MAC adresse) ainsi que des informations de haut niveau, trouvées dans les en-têtes de protocole (TCP ou UDP). Tout cela inclut les ports source et cible et, pour TCP, des informations supplémentaires, comme le numéro de la séquence et les drapeaux (SYN, ACK, FIN et d'autres).
www.hakin9.org
d'où les connexions sont autorisées mais elle est restreinte en ce qui concerne la capacité de gérer les utilisateurs mobiles ou les bureaux/ domiciles pour lesquels les adresses IP externes sont attribuées de manière dynamique. Si vos utilisateurs changent souvent leurs ordinateurs ou réseaux, il n'est pas pratique de maintenir une liste changeant des adresses IP d'où les connexions sont autorisées. C'est particulièrement important lorsque les utilisateurs essayent de se connecter à partir des emplacements douteux, comme cybercafés ou universités. L'utilisation d'un filtre IP crée une hypothèse selon laquelle une adresse IP ou une adresse réseau de confiance n'est utilisée que par les utilisateurs de confiance. Ce n'est pas toujours vrai, en particulier, lorsque l'adresse IP de confiance est une passerelle d'un grand réseau interne. Il est alors facile d'imaginer un cas où les attaques et les connexions légitimes peuvent provenir d'une même adresse IP. Le port knocking fournit un mécanisme permettant de traiter tous ces points. Le port knocking permet d'éviter l'emploi de correspondance entre une adresse IP et un utilisateur individuel. Les utilisateurs peuvent s'identifier au moyen de leurs jetons d'authentification, sans demander l'ouverture de ports sur le serveur. Par conséquent, le port knocking permet à un utilisateur spécifique de se connecter de n'importe quelle adresse IP au lieu de permettre à n'importe quel utilisateur de se connecter d'une adresse IP spécifique. Cette distinction est importante car le nombre de périphériques individuels, d'où des utilisateurs peuvent se connecter, augmente sans cesse (ordinateurs de bureau, ordinateurs à domicile, ordinateurs portables, PDA, téléphones mobiles, etc.).
Besoins
Si vous êtes en train de lire cet article, il est très probable que vous disposez de tout ce qu'il faut pour protéger vos systèmes au moyen de port knocking. Premièrement, vous avez besoin
hakin9 Nº 6/2005
11
Dossier
Paquets et datagrammes
Un paquet est un bloc de données, contenant toutes les informations, nécessaires pour les délivrer (voir la Figure 1). Pensez à une lettre postale. Lorsque des paquets traversent Internet, des périphériques réseau divers analysent et manipulent les paquets sur leur chemin de la destination à la source. Un datagramme est un format spécifique de paquet, défini par le protocole IP (voir la Figure 2). Le datagramme contient l'en-tête IP, l'en-tête spécifique au protocole (TCP, UDP, etc.) et la charge de données. Dans un paquet Ethernet, le datagramme est une charge de données à la couche réseau (couche 3 de OSI).
Figure 1. Paquet envoyé à l'aide des protocoles TCP ou UDP contient trois en-têtes : Ethernet (22 octets), IP (20 octets) et TCP ou UDP (20 ou 8 octets), une section de charge de données à longueur variable et une somme de contrôle de trame finale, ajoutée à la couche accès du réseau
d'un pare-feu d'adressage, comme iptables. Ensuite, vous avez besoin d'un nombre suffisant de ports nonutilisés pour le contrôle de frappes. Si l'authentification s'effectue via une séquence de frappes au port, vous aurez besoin en théorie de deux ports. Toutefois, plus vous avez de ports (p. ex. 1024, voire 16355), plus de données d'authentification complexes, et donc plus souples, peuvent être encodées
Figure 2. Les en-têtes Ethernet, IP, TCP et UDP contiennent des informations nécessaires à un transport réussi de données de leurs couches respectives
12
hakin9 Nº 6/2005
www.hakin9.org
UDP ou TCP pour le port knocking
Il appartient au programmeur de décider s'il utilise TCP ou UDP. Les deux ont des qualités et aucun n'a d'inconvénients importants. Les implémentations du port knocking, qui utilisent TCP, se servent du paquet SYN pour authentifier le client, bien que le drapeau SYN ne soit pas rigoureusement requis. Puisque le client décide lui-même d'envoyer les séquences de paquet, SYN ou autre chose, à n'importe quel socket distant, la combinaison de ports, auxquels sont envoyés ces paquets, peut être utilisée pour encoder les données. Puisque le serveur ne confirme pas l'arrivée des paquets par un accusé de réception (port knocking est passif), certaines implémentations choisissent d'utiliser UDP comme protocole, ce qui est un choix plus naturel dans ce cas-là. En ce qui concerne les avantages de TCP, on peut dire que l'en-tête TCP est plus grand et capable de contenir davantage d'informations d'authentification. Si un grand nombre de paquets TCP est envoyé, il est important que le serveur soit capable de refaire leur ordre initial ; cet ordre peut être recréé au moyen du numéro d'identification de séquence dans chaque paquet. UDP, de l'autre côté, a un en-tête moins important (8 octets versus 20 octets) et demande de placer les données dans la charge du paquet. On peut se demander par conséquent si UDP est une manière plus pratique et plus élégante d'envoyer des informations dans un seul paquet sans accusé de réception. Un seul paquet UDP est toujours plus furtif qu'une séquence caractéristique des paquets TCP de ports divers.
Port knocking
TCP et three-way-handshake
TCP est un protocole orienté connexion, fiable et doté de flots d'octets. Tous ces termes ont des définitions spécifiques dans le contexte de transfert de données. Les aspects de la communication TCP peuvent être renversés dans un système de port knocking pour permettre d'effectuer une authentification à travers un port fermé. Premièrement, la connexion TCP ouvre un socket et écoute passivement les connexions entrantes. Un socket est une combinaison d'adresses IP, de protocoles et de ports. Un client distant, qui souhaite se connecter au socket du serveur, associé en général à un service spécifique (p. ex. SSH), enverra un paquet TCP avec l'ensemble de drapeaux SYN (synchronize sequence numbers – numéros de séquence synchronisés) pour indiquer une requête de connexion. L'objectif du paquet SYN consiste à demander la valeur initiale d'un index intégré dans l'en-tête TCP (numéro de séquence) pour permettre au client de récréer l'ordre initial de paquets. Si le filtre IP permet de tenter la connexion, l'application adaptée à TCP répondra en renvoyant un paquet SYN/ACK (ACK : accusé de réception) contenant le numéro initial de séquence. Le client confirmera l'accusé de réception en envoyant un paquet ACK et en terminant ainsi la connexion. Le préambule d'établissement de connexion fait en sorte que TCP soit un protocole orienté connexion. TCP est aussi un protocole de flot d'octets car il envoie des données de manière ordonnée ; cette démarche est possible grâce aux numéros de séquence. Par conséquent, le client peut recevoir des paquets dans n'importe quel ordre et se servir de numéros de séquence pour rétablir l'ordre initial. TCP est un protocole fiable car pendant la connexion TCP, le client confirme régulièrement qu'il avait bien reçu des données. Si l'expéditeur ne reçoit aucun accusé de réception après une durée déterminée, il enverra les données de nouveau.
États de ports
Un port est un composant d'un socket réseau, les autres sont l'adresse IP et le protocole. L'adresse IP est spécifique au périphérique réseau alors que le port est spécifique à l'application désignée pour recevoir le paquet. Les ports sont numérotés et ils varient entre 0 et 65535 pour TCP et UDP. Un périphérique réseau donné est doté d'un grand nombre de sockets ouverts aux ports différents. À titre d'exemple, SSH est assigné conventionnellement au port 22 TCP. Le sort du paquet destiné à un port spécifique dépend du filtre IP sur le serveur qui reçoit le paquet. En ce qui concerne iptables, le port peut se trouver dans l'un des trois états suivants : •
•
•
le statut de port est OPEN lorsque le filtre IP permet aux paquets de monter la pile TCP/IP et d'atteindre l'application. Le filtre IP ne se préoccupe pas du fait si l'application est en train de s'exécuter ou pas ; il permet tout simplement au paquet d'atteindre la couche application. Si le statut de port est REJECT, le serveur retourne alors un paquet d'erreur ICMP au client connecté en l'informant que la connexion a été refusée. Ce mode permet au client de recevoir la confirmation de l'existence du serveur. Les paquets refusés n'atteignent pas la couche application. Enfin, lorsqu'un port est configuré aux connexions DROP (ou DENY dans ipchains), le serveur ignore les tentatives de connexion et ne retourne aucun paquet d'erreur. Dans ce mode, le client ne reçoit aucune confirmation de l'existence du serveur.
dans le même nombre de ports. Si l'authentification s'effectue via un paquet supportant une charge utile, vous n'aurez besoin que d'un seul port. Il existe un grand nombre d'implémentations du port knocking et, dans cet article, vous apprendrez à vous servir de Doorman. Premièrement, quelques bases de TCP/IP seront rap-
pelées pour mieux comprendre ce qui va se passer.
Comment cela marche ?
Lorsque les données sont envoyées entre deux ordinateurs, elles traversent plusieurs couches de logiciels et de matériels pour garantir la livraison
www.hakin9.org
spécifique à l'application appropriée. Il existe plusieurs manières pour envoyer des données via Internet. Dans cet article, vous vous concentrez brièvement sur TCP et UDP : deux protocoles communs. Dans un premier temps, vous analysez la structure d'un paquet Ethernet et ensuite, vous observez comment se déroule la communication TCP. La connaissance de la structure du paquet vous aidera à comprendre comment fonctionne le port knocking. À titre d'exemple, certaines implémentations incorporent les jetons d'authentification à l'intérieur du paquet de manière non-standard. Lors de la transmission IP, les données sont encapsulées dans les paquets (voir l'Encadré Paquets et datagrammes) avec plusieurs niveaux d'en-têtes (voir la Figure 1). Un autre en-tête est ajouté aux trois des quatre couches de la pile TCP/IP. L'entête Ethernet est ajouté à la couche de liaison aux données (couche 2), l'en-tête IP – à la couche de réseau (couche 3) et l'en-tête spécifique au protocole (p. ex. TCP ou UDP) – à la couche transport (couche 4). Dans tous ces cas, l'en-tête de la couche de la pile fait partie de la charge de données de la couche précédente. Le standard Ethernet (IEEE 802.3) permet aux données dans la couche accès du réseau d'augmenter jusqu'à 1500 octets (Maximum Transfer Unit, MTU : unité de transfert d'information maximale). Grâce aux progrès récents en ce qui concerne la vitesse de transfert de données, on pense souvent que la MTU est trop petite, provoquant trop de temps système associé au protocole et on fait actuellement des efforts (voir http://www.psc.edu/~mathis/MTU/ ) pour inclure le support pour des MTU plus grandes (par exemple, 12 Ko pour un lien 100 Mbit). Chaque en-tête de la couche réseau stocke un grand nombre d'informations (voir la Figure 2) afin de fournir les matériels et les logiciels qui opèrent sur cette couche pour délivrer correctement les données à la pile TCP/IP. Plus tard, vous examinerez un paquet en détails, puis l'emplacement sera indiqué
hakin9 Nº 6/2005
13
Dossier
et plusieurs champs importants de ces en-têtes seront formés. Il existe deux types de systèmes du port knocking : ceux qui se servent de UDP et ceux qui se servent de TCP (voir l'Encadré UDP ou TCP pour le port knocking). Certaines implémentations se servent de ICMP ou des combinaisons de protocoles. Les systèmes TCP utilisent une partie de l'établissement de connexion en trois étapes de TCP (voir l'Encadré TCP et three-way-handhake), un préambule d'échange TCP entre deux ordinateurs ; pendant cet échange, une connexion s'établit et la valeur initiale est configurée pour le compteur d'ordre de paquets. Les systèmes de port knocking TCP peuvent crypter les informations en valeurs de port de destination dans une séquence de paquets, dans l'en-tête ou dans la charge de données d'un paquet. Vous verrez un exemple d'ajout de données à un en-tête de paquet. Les systèmes UDP envoient en général un seul paquet, contenant les données d'authentification, placées dans la charge dans le paquet. Indépendamment de l'utilisation UDP ou de TCP, un serveur de port knocking alloue un ensemble de ports fermés (voir l'Encadré États de ports) et les surveille pour des paquets formatés spécialement pour former la frappe au port. La frappe a un rôle d'un déclencheur personnalisé : chaque utilisateur peut disposer de sa propre frappe, créée à partir de ses jetons d'authentification ou d'autres informations personnelles. Le port knocking est un système d'authentification unique car le client envoie ses jetons d'authentification à travers les ports fermés sans accusé de réception. Par conséquent, le client est authentifié inconditionnellement et n'est pas conscient si une authentification a lieu ou si elle réussit. Le port knocking est plus difficile à détecter et à détourner par un intrus. La frappe formatée correctement déclenche l'activité du serveur conformément aux instructions qu'elle contient. Le serveur peut ouvrir ou fermer un port à l'adresse IP du client ou réaliser toute autre action, par exemple, envoyer un
14
hakin9 Nº 6/2005
Figure 3. Étapes dans un port knocking traditionnel effectuée à l'aide d'une séquence de ports, envoyés par les paquets SYN afin de coder les informations d'authentification
Efforts de pionniers
Parmi les deux efforts antérieurs qui ont implémenté une variante de port knocking, avant d'inventer le terme actuel, citons cd00r et SAdoor. cd00r par FX de Phenoelit a été créé afin de fournir un accès à un ordinateur distant qui n'informaient pas des ports ouverts. C'est une implémentation C minimale qui initie un démon inetd quand les paquets TCP SYN sont détectés dans une séquence fixe de ports spécifiques. SAdoor par CMN de Darklabs a été influencé par cd00r. Il se repose sur une authentification via une séquence de paquets clés, formatés de manière spécifique, suivis par un paquet final de commandes. Ce dernier stocke une commande codée, à exécuter sur le serveur à l'intérieur de sa charge utile.
www.hakin9.org
Port knocking
courriel, effectuer une sauvegarde, voire s'arrêter.
Implémentation traditionnelle
Le mécanisme de port knocking a été officiellement décrit pour la première fois dans un magazine SysAdmin, bien que plusieurs projets pilotes aient déjà existé (voir l'Encadré Efforts de pionniers). La spécification initiale du port knocking décrivait une authentification effectuée via une série de paquets SYN. La séquence de port servait à crypter les jetons d'authentification, par exemple, une frappe de 8 ports contenaient les octets suivants : adresse IP, port, durée et somme de contrôle. Au lieu d'utiliser l'adresse IP, stockée dans l'en-tête du paquet (qui peut être faux), le client a inséré son adresse IP dans la frappe. Les champs de port et de durée stockent le port auquel le client veut accéder et la durée pendant laquelle le port reste ouvert. La somme de contrôle d'un octet a été présentée afin de permettre au client de confirmer l'ensemble de la frappe. Cette frappe a été ensuite chiffré et codée dans un ensemble de ports fermés du serveur. Le serveur, à la réception des paquets SYN de la frappe, récupère le port de destination depuis chaque paquet, décode et déchiffre cette séquence de ports et ensuite, il procède conformément aux instructions codées dans la frappe. La Figure 3 présente ce processus traditionnel de port knocking. Il est important de chiffrer la séquence de port afin d'empêcher les attaques de mystification (spoofing) et Man-In-The-Middle bien que le chiffrage ne concerne pas le problème d'attaques par rejeu (replay attack) ce que sera décrit dans la suite de cet article. Il est alors très facile d'implémenter le port knocking. Le client peut réaliser des paquets à l'aide d'un générateur de paquets dédiés, comme SendIP. Il n'a plus besoin d'un knocker. Les paquets SYN entrants peuvent être logués dans un fichier de traces iptables. Par conséquent, ils peuvent
Listing 1. Ensemble initial de règles pour le pare-feu # Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -s 0/0 -d 0/0 -p udp -j DROP -A INPUT -s 0/0 -d 0/0 -p tcp --syn -j DROP COMMIT
Listing 2. Ensemble initial de règles pour le pare-feu – une liste de tables # iptables -L Chain FORWARD (policy DROP) target prot opt source
destination
Chain INPUT (policy target prot opt ACCEPT all -ACCEPT all -DROP udp -DROP tcp --
destination anywhere anywhere state RELATED,ESTABLISHED anywhere anywhere tcp flags:SYN,RST,ACK/SYN
DROP) source anywhere anywhere anywhere anywhere
Chain OUTPUT (policy ACCEPT) target prot opt source
destination
Listing 3. tcpdump détecte les paquets envoyés aux ports, désignés au port knocking 21:24:48.931043 IP (tos 0x0, ttl 255, id 23105, offset 0, flags [none], proto 6, length: 40) 10.1.17.1.1000 > 10.1.17.90.1005: S [tcp sum ok] 17:17(0) win 65535 21:24:54.033659 IP (tos 0x0, ttl 255, id 2483, offset 0, flags [none], proto 6, length: 40) 10.1.17.1.1000 > 10.1.17.90.1022: S [tcp sum ok] 17:17(0) win 65535
être surveillés même par le plus primitif outil de gestion de fichiers, comme grep. Sinon, les paquets entrants peuvent être surveillés directement à l'aide de tcpdump.
Port knocking avec SendIP et tcpdump
C'est la simplicité conceptuelle et une facilité relative d'implémentation qui rendent le port knocking un système attrayant. Bien que les systèmes de port knocking solides, conçus pour des environnements de trafic dense, nécessitent des capacités importantes, il est possible d'introduire une solution DYI à l'aide des outils utilisés
www.hakin9.org
couramment. Regardons une de telles implémentations simples. L'objectif consiste à concevoir un système, vous permettant d'établir une connexion SSH à un système, qui n'a aucun port fermé. Vous vous servez de SendIP pour réaliser et envoyer des paquets-déclencheurs au serveur. Le serveur surveillera ces paquets à l'aide de tcpdump. Lorsqu'un paquet-déclencheur bien formaté arrive, le serveur ouvre le port demandé à l'adresse IP entrant pour la durée de 10 secondes, afin de permettre d'initier une connexion. Les règles du pare-feu sont ensuite redémarrées et aucune nouvelle connexion n'est acceptée. On utilisera
hakin9 Nº 6/2005
15
Dossier
Listing 4. guard.sh – un script bash pour déclencher les règles du parefeu afin d'établir des connexions #!/bin/bash # guard.sh # allow incoming packets /sbin/iptables -I INPUT -j ACCEPT -i eth0 -p tcp -s $1 --dport $2 sleep 10 # deny incoming packets /sbin/iptables -D INPUT -j ACCEPT -i eth0 -p tcp -s $1 --dport $2
Listing 5. Un port est ouvert dans le pare-feu # iptables -L (...) Chain INPUT (policy target prot opt ACCEPT tcp -ACCEPT all -ACCEPT all -DROP udp -DROP tcp -(...)
DROP) source 10.1.17.1 anywhere anywhere anywhere anywhere
destination anywhere anywhere anywhere anywhere anywhere
Red Hat Fedora 4 doté d'une pile 2.6.11-1.1369_FC4 kernel, iptables 1.3.0, tcpdump 3.8, libpcap 0.8.3 et SendIP 2.5-1 pour réaliser ces exemples. L'adresse IP du serveur du port knocking est IP 10.1.17.90 et celle du client : IP 10.1.17.1. Commencez avec un ensemble classique de règles pour le pare-feu sur le serveur (voir les Listings 1 et 2). Cet ensemble de règles n'autorise pas les nouvelles connexions TCP et ne permet pas aux paquets UDP d'accéder à des ports ; il permet toutefois de continuer les connexions établies auparavant. Vous allez déclencher une ouverture d'un port choisi au moyen d'un seul paquet TCP SYN. Ce paquet sera envoyé à un port entre 1000–10999 et le numéro de la séquence dans l'en-tête sera configuré à 17. Ces deux conditions sont simplistes et arbitraires. L'objectif consiste à rendre les paquets relativement inhabituels pour pouvoir bien les distinguer du reste du trafic. Vous envoyez donc un paquet à l'aide de SendIP au port 1022 sur le serveur et on vous en explique les raisons dans un instant. Le drapeau SYN est configuré à l'aide de -tfs 1 et le numéro de séquence – à l'aide de -tn 17 :
16
hakin9 Nº 6/2005
tcp dpt:ssh state RELATED,ESTABLISHED tcp flags:SYN,RST,ACK/SYN
# sendip -p ipv4 -p tcp \ -is 10.1.17.1 -ts 1000 \ -td 1022 -tfs 1 \ -tn 17 10.1.17.90
Sur le serveur, vous avez une instance de tcpdump qui écoute les paquets-déclencheurs. Vous voulez limiter les paquets aux paquets SYN TCP, envoyés au port entre 1000–10999 et dont le numéro de séquence est 17. La commande tcpdump qui s'en charge se présente de la manière suivante : # tcpdump -vv \ -O "tcp[2:2] >= 1000 \ and tcp[2:2] = 1000 \ and tcp[2:2] 0) ecode_len++; ecode = (char *) malloc(ecode_len); for (i = 0; i < scode_len; i += 2) { if (i + 1 == scode_len) ecode[i] = 0x90; else ecode[i] = scode[i + 1]; ecode[i + 1] = scode[i]; } return ecode; }
www.hakin9.org
Shellcode polymorphique
www.hakin9.org
hakin9 Nº 6/2005
75
Programmation
Listing 10. L'une des fonctions liant le décodeur au code encodé
À propos de l'auteur
Michał Piotrowski est maître en informatique et administrateur expérimenté des réseaux et systèmes. Durant plus de trois ans, il a travaillé en tant qu'inspecteur de sécurité dans un établissement responsable du bureau de certification supérieur dans l'infrastructure polonaise PKI. Actuellement, il est un expert en sécurité téléinformatique dans l'une des plus grandes institutions financières en Pologne. Il passe son temps libre à programmer. Il s'occupe également de la cryptographie.
char *add_sub_decoder(char *ecode, int offset) { char *pcode = NULL; int ecode_len = strlen(ecode); int decode_sub_len; decode_sub[6] = ecode_len; decode_sub[11] = offset; decode_sub_len = strlen(decode_sub); pcode = (char *) malloc(decode_sub_len + ecode_len); memcpy(pcode, decode_sub, decode_sub_len); memcpy(pcode + decode_sub_len, ecode, ecode_len); return pcode; }
Mettez ensemble tous les éléments du programme en utilisant la fonction main (voir le fichier encodee.c dans hakin9.live). Celle-ci est très simple – tout d'abord, elle vérifie les paramètres avec lesquels le programme a été démarré, puis elle charge le shellcode depuis un fichier indiqué, elle encode à l'aide de la fonction choisie, ajoute le décodeur et imprime le tout sur la sortie standard.
Tester le programme
Figure 9. Compiler le programme encodee et créer un shellcode exemplaire
Vérifiez maintenant si votre programme fonctionne correctement. Pour cela, créez un shellcode à base du code write4 encodé via l'instruction add et le déplacement égal à 15 (Figure 9). Insérez-le ensuite dans le programme test et vérifiez son fonctionnement (Figure 10).
Conclusion
Vous connaissez maintenant les méthodes permettant de générer des shellcodes polymorphiques et vous avez réussi à écrire un programme automatisant tout le processus. Bien sûr, cela reste un programme très simple qui n'utilise que quatre décodeurs les plus communs mais il peut être un point de référence pour vos propres études et expérimentations. l
Figure 10. Tester le shellcode généré
thode de démarrage du programme et la seconde tire un nombre utilisé en tant que déplacement (si l'utilisateur ne le définit pas). Le code de ces fonctions est présenté dans le fichier encodee.c disponible dans hakin9.live.
76
hakin9 Nº 6/2005
Sur Internet • • •
http://www.orkspace.net/software/libShellCode/index.php – page d'accueil du projet libShellCode, http://www.ktwo.ca/security.html – page d'accueil de l'auteur d'ADMmutate, http://www.phiral.com/ – page d'accueil de l'auteur du programme dissembler.
www.hakin9.org
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 !
bulletin d’abonnement Merci de remplir ce bon de commande et de nous le retourner par fax : 0048 22 887 10 11 ou par courrier : Software-Wydawnictwo Sp. z o.o., Piaskowa 3, 01-067 Varsovie, Pologne ; Tél. 0048 22 887 13 44 ; 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
Titre
Nombre de numéros annuels
Nombre d’abonnements
À partir du numéro
Prix
hakin9 – comment se défendre ? (1 CD) Bimestriel destiné aux personnes qui s’intéressent la sécurité des systmes informatiques
6
38 €
Software Developer’s Journal Extra (1 CD ou DVD) – anciennement Software 2.0 Extra Bimestriel sur la programmation
6
38 €
12
86 €
Collection Linux+ Distributions (4-7 CDs ou 2 DVDs) Distributions Linux les plus populaires
6
50 €
PHP Solutions (1 CD) Le plus grand magazine sur PHP au monde
6
38 €
Programmation sous Linux (1 CD) Bimestriel dédié à la programmation sous Linux
6
38 €
.PSD (2 CDs) Bimestriel pour les utilisateurs d’Adobe Photoshop
6
39 €
Linux+DVD (2 DVDs) Mensuel unique avec 2 DVDs consacré à Linux et à ses utilisateurs
Total
Je règle par : ¨
Carte bancaire n° CB type de carte ..........................................................................
Virement bancaire : Nom banque : Société Générale Chasse/Rhône banque guichet numéro de compte clé Rib 30003 01353 00028010183 90 IBAN : FR76 30003 01353 00028010183 90 Adresse Swift (Code BIC) : SOGEFRPP ¨
expire le code CVC/CVV
date et signature obligatoires
Faites attention à votre argent Éditorial Tomasz Nidecki
A
h, le confort des e-banques. Il y a quelques jours, mon bailleur m'a apporté quelques factures à payer. Oh, non, j'ai pensé, pas encore un déplacement à ma banque, pas encore une heure passée dans la file d'attente pour payer cette satanée facture. Mais ensuite, je me suis souvenu que ma banque (je ne précise pas le nom pour des raisons de sécurité !) vient d'ouvrir un accès aux comptes traditionnels via Internet. Et je me suis rappelé m'y être inscrit. Hourra ! Il a suffit quelques minutes pour payer mes factures. Mais ensuite, je me suis rappelé une autre chose : le phishing, le pharming. Et je me suis tout de suite senti mal à l'aise. L'article sur l'empoisonnement du DNS paru dans le dernier numéro de hakin9 m'a vraiment inspiré. Le lendemain, caché en toute sécurité derrière l'adresse IP de la société (si jamais quelque chose va mal, je peux toujours dire que je testais un tutoriel ou un truc dans ce genre), j'ai déployé mon navigateur, j'ai chargé Google et commencé à me balader ici et là, à la recherche d'un outil de récupération de données sur DNS. J'ai réellement voulu m'assurer que les plus grands serveurs cache DNS sont sécurisés et j'espérais que leurs administrateurs savaient que BIND n'était pas bien et que je trouverais de nombreuses installations de djbdns. Ils doivent être au moins aussi prudents que moi, me suis-je dit. J'ai remplacé BIND par djbdns il y a deux ans déjà ; ils ont certainement dû le faire aussi. Enfin, je suis tombé sur fpdns.pl, un petit script perl qui semble reconnaître assez bien le logiciel DNS utilisé, en se basant sur son empreinte. Dans un premier temps, j'ai donc visé les plus grands fournisseurs polonais de caches DNS (je peux donc affirmer que plus de la moitié des utilisateurs d'Internet en Pologne se servent de ces deux caches). Boum ! BIND9. Ce n'est pas mal mais ce n'est pas très bien non plus. Ensuite, j'ai ciblé les caches DNS d'autres grands fournisseurs. J'ai mis cinq minutes pour trouver une installation BIND8 sur le plus grand réseau câblé de Varsovie. Ouh ! J'espère que leurs utilisateurs ne se servent pas de ce cache DNS. Qui le risquerait en sachant que le cache peut être empoisonné en environ trois cents paquets envoyés ?
80
hakin9 Nº 6/2005
Au bout d'une demi heure, j'ai commencé à m'ennuyer mais les résultats étaient intéressants. Les plus grands caches DNS se servent de BIND9 mais seulement certains d'entre eux disposaient des versions les plus récentes. J'ai trouvé deux installations BIND8 utilisées en caches DNS de fournisseurs Internet très connus. Un seul fournisseur employait PowerDNS et une seconde tentative pour récupérer l'empreinte a été manifestement bloquée par un IDS (très bon boulot, les administrateurs !). Je n'ai trouvé aucune installation djbdns. Enfin, si on ne prend pas en compte mes propres serveurs, bien évidemment. Mais... C'est comme si on disait coucou, les pharmers ! Nous sommes ici ! Prenez-nous avec vous ! Chers lecteurs, pourquoi ne pas essayer vous-mêmes et partager des résultats intéressants avec nous ? Ensuite, on m'a raconté une autre histoire qui a fait bouillir mes neurones. Un de mes collègues, dont le passe-temps favori consiste à prendre le bus avec son ancien ordinateur portable (équipé, bien évidemment d'une carte WiFi) m'a fait partager certains de ses trouvailles concernant wardriving (ou plutôt warbusing vu qu'il prend le bus ?). Il est passé par hasard (oui, par hasard) près d'une agence de la deuxième plus grande banque polonaise et – surprise, surprise – Kismet a détecté un réseau sans fil. Crypté ? Vous rigolez ! Et devinez quel était le type de SSID ? linksys, bien évidemment. Ouh. Pourquoi alors se préoccuper de multiples niveaux de protections dans les e-banques si un administrateur d'une agence locale, qui n'a même pas changé le SSID par défaut, laisse le réseau interne d'une banque largement ouvert à tout passant ? Le point d'ébullition de mes neurones a été atteint. J'ai donc réussi à arriver à certaines conclusions. La conclusion la plus logique est de récupérer le plus rapidement possible tout mon argent de la banque et le cacher sous un coussin. Il semble qu'il y sera plus en sécurité que dans n'importe quelle autre institution ayant des liens avec des ordinateurs. Et je me sentais tellement bien le jour précédent... l
www.hakin9.org
> > > s é d n a m m Sites reco
Abc de la sécurité informatique : Portail dédié a la protection utilisateurs, la prévention et l’anonymat sur micro et réseaux. http://abcdelasecurite.free.fr
Corporate Hackers fournit services et solutions dans le domaine de la sécurité des nouvelles technologies. http://corporatehackers.com
Le Portail Québécois de la Sécurité Des Systemes. Site de nouvelles, forums, téléchargements, liens sécurité, et conseils. http://www.cccure.net
Wulab spécialise dans la sécurité des applications web par l’etude des techniques d’attaques et en créant des moyens de défense. http://www.wulab.com
HackIsKnowledge est un site d’entreaide à la sécurité informatique. Le webmaster vous propose audits gratuits, forum, download. http://www.hackisknowledge.org
Actualités, astuces, optimisation, personnalisation windows, sécurité, visuels et téléchargement de logiciels, jeux et captures. http://www.smtechnologie.com
SecuriteInfo.com, un des sites web leaders de la sécurité informatique francophone, propose ses services aux professionnels depuis 2004. http://www.securiteinfo.com
Toute l’actualité informatique, les dernieres adresses, et beaucoup d’autres fonctionnalités, tout ceci géré par une équipe dynamique. http://www.puissance-pc.net
Construit sur des serveurs FreeBSD et Linux Informations sur UNIX, Linux, Windows, les réseaux – Hébergement libre sur serveurs libres. http://www.virtuelnet.net
VirusTraQ.com est un observatoire francophone sur les virus informatiques, le spam et les applications indésirables (spyware/adware). http://www.virustraq.com
Vulnerabilite.com est le portail francophone dédié a la sécurité des systemes d’information pour les DSI, RSSI et décideurs informatique. http://www.vulnerabilite.com
Crée par Terence DEWAELE, Ze-Linux a pour but d’aider la communauté française a utiliser GNU/Linux: Forums, Liste, News. http://www.ze-linux.org
.org ctez-nous : fr@hakin9 nder votre site ? Conta Voulez-vous recomma
dés Sites recomman
hakin9 1/2006
Dans le numéro suivant, vous trouverez, entre autres : Prochainement
Sécurité des WPA/WPA2 Dossier
Les réseaux sans fil sont plus faciles à sniffer et à pénétrer que les réseaux classiques. C’est pourquoi, des moyens spécifiques sont nécessaires pour tenir les intrus à l’écart. Guillaume Lehembre parle des standards WPA et WPA2 pour la protection des réseaux Wi-Fi, des attaques et faiblesses potentielles, en décrivant, comment celles-ci peuvent être effectuées.
Rootkits dans Oracle Focus
Bien que cela puisse paraître étonnant, les rootkits sont capables de fonctionner non seulement dans les systèmes d’exploitation, mais aussi dans les systèmes de base de données. Ils dissimulent les utilisateurs, les processus ou les procédures. L’article d’Alexander Kornbrust montre comment fonctionnent les rootkits dans le système de base de données Oracle, comment les détecter et comment écrire les applications de base de données pour empêcher l’installation des rootkits par un intrus.
Implanter la norme ISO/CEI 17799:2005 en entreprise Pratique
Une révision majeure de la norme internationale ISO/CEI 17799:2005 a vu le jour en juin 2005. Ce code de bonne pratique pour la gestion de la sécurité de l’information donne de grandes orientations réparties sur onze chapitres. C’est a vous de définir comment l’implanter. Christophe Reverd en décode les aspects essentiels pour vous aider à la mettre en pratique en entreprise.
Sécurité du serveur Windows 2003 Fiche technique
Avec l’apparition de Windows 2003, beaucoup de réseaux d’entreprises sont passés à une nouvelle génération de serveur Microsoft. Mais Windows 2003 est-il vraiment sûr ou bien traîne-il les mêmes faiblesses que ses prédécesseurs ? Rudra Kamal Sinha Roy présente quels sont les principaux problèmes avec Windows 2003 et que peuvent faire les administrateurs pour rendre leurs serveurs plus sûrs.
Détourner un firewall Fiche technique
Le pare-feu est la première ligne de défense protégeant tout le réseau contre les attaques malicieuses. Pourtant, un pare-feu a aussi ses points faibles et peut être détourné. Oliver Karow enseigne comment les pare-feux peuvent être détectés et montre quels problèmes dans leur configuration facilitent ce détournement.
Pour voir les informations actuelles sur le prochain numéro, visitez la page http://www.hakin9.org/fr Ce numéro sera disponible en vente début janvier 2006. La rédaction se réserve le droit de modifier le contenu de la revue.