Sunteți pe pagina 1din 8

Infocus

< http://www.securityfocus.com/infocus/1789 >

Metasploit Framework (Part One of Three)


The Prometheus Of Exploitation
by Pukhraj Singh and K.K. Mookhey
last updated July 12, 2004

Metasploit Framework (Partie 1 sur 3)


Traduction personnelle franaise :
Jrme ATHIAS
Dernire mise jour : 16/08/2004

sploit
(n.) Exploit. A defect in the game code (see bug) or design that can
be used to gain unfair advantages. (Source: Dictionary of MMORPG Terms)
Au moment prsent, la communaut de dveloppement dexploits (pirates (hackers) et
professionnels de la scurit informatique) est plus sensible que jamais. Le dlai entre la
publication dun bulletin dalerte et le dveloppement dun exploit a diminu
considrablement. Le dveloppement dexploits, qui fut considr comme un art, est
parvenu la porte dune large population. Ladministrateur de scurit rseau se doit
dtre plus vigilant que jamais face un ennemi qui a toujours une longueur davance avec
le tout dernier exploit entre ses mains.
Les utilitaires de dveloppement dexploits et les frameworks automatiss pour tester et
simuler les exploits constituent la ncessit actuelle. Le Metasploit Framework (MSF) rpond
cette tche. Ca dernire version possde une agilit et des muscles qui nont rien envier
aux trs coteux logiciels commerciaux quivalents et la facult de coder un exploit en un
minimum de temps, du fait dune interface de dveloppement parfaitement adapte. Avec
un environnement de dveloppement dexploits complet, des exploits fonctionnels, des
tailles efficaces et des enttes (handlers) ajouts, cela en fait Loutil que doivent utiliser les
testeurs dinfiltration.
Cet article fournit un aperu des bases des frameworks de dveloppement dexploits, avec
un intrt particulier sur le Metasploit Framework et comment il peut tre utiliser pour
gagner du temps et conomiser des ressources. Nous dcrirons son utilisation avec des
illustrations graphiques, dtaillerons les diffrentes commandes disponibles, dcrirons les
fonctionnalits proposes, donnerons des exemples pratiques, et plus important encore,
nous utiliserons ces possibilits pour dvelopper de nouveaux exploits et tester de nouvelles
techniques.

1. Prologue
Je souhaiterais dbuter mon article en faisant rfrence des vnements rcents. Le
bulletin Microsoft (MS04-011) dcrit et rsout un nombre important de vulnrabilits de

scurit dans diffrents systmes doprations Windows [ref 1]. Deux dentre elles qui mont
intresses sont le SSL PCT et les overflows de lAuthorit de Scurit Locale (Local Security
Authority) qui peuvent conduire la compromission distance. Comme dans la plupart des
cas, presque immdiatement, des exploits fonctionnels ont t mis publiquement
disposition, laissant les administrateurs et les professionnels de la scurit non-avertis et
non-prpars.
En vous mettant la place dun administrateur systme dune socit dinformatique banale,
les exploits sajoutent toujours de plus en plus au fardeau de la gestion de la scurit. Dj
dit et fait, cest une course sauvage o les attaquants malicieux sont au devant du jeu, mais
part une approche mthodique, le professionnel en scurit peut inverser la donne.
Les patchs de scurit, IDS, pare-feu (firewalls), etc ne constituent pas les seuls critres de
protection. Cdant face la pression de la situation, beaucoup de coins et recoins du rseau
peuvent tre rendus non-protgs et non-verrouills, ce qui est gnralement lorigine dune
compromission. Cest ce qui arrive lorsque lon entend parler dun grand rseau compromis
par des pirates utilisant des vulnrabilits connues. Et cest exactement la raison pour
laquelle le ver informatique Sasser a contamin 250 000 ordinateurs, mme deux semaines
aprs que Microsoft ait mis disposition le patch de scurit indiqu comme hautement
important.
De mon point de vue, la solution est lhabituelle approche, pensez comme un pirate. Le
testeur dinfiltration devrait se lancer dans une fte de pirate en testant son propre rseau,
dans ce que jappelle Threat Evasion Penetration Testing (Test de menaces et dintrusion).
Cest l que les frameworks dexploits entrent en jeu, en automatisant lart de lexploitation.

2. Travail sur le terrain


Les exploits sont encore rattachs la crainte. Les testeurs occups considrent sans intrt
lide du dveloppement dexploit comme passe-temps dun pirate. Cest vrai dune certaine
manire. Le dveloppement dexploits en lui-mme est un art. Il requiert des connaissances
primordiales, de la patience, beaucoup de temps et par dessus tout lesprit immortel
dapprendre par essai-et-erreur.
2.1 Organisation de la mmoire
Les techniques dexploitation basiques peuvent tre mthodiquement catgorises, comme
tout autre problme technique. Avant daller plus loin, dans tous les cas, le lecteur devra
connatre le processus basique de lorganisation de la mmoire [ref 2]. Un processus
tournant en mmoire a les sous-structures suivantes :
Code est le segment en lecture seule qui contient le code excutable compil du
programme.
Data et BSS sont les segments en criture contenant les segments de donnes et
les variables statiques, globales, initialiss et non-initialiss.
Stack est une structure de donnes base sur lordre Premier-Rentr-PremierSorti. Les lments sont poss (push) et retirs (pop) depuis le sommet de la pile.
Un pointeur de pile (Stack Pointeur : SP) est un registre qui pointe sur le sommet de
la pile (dans la majorit des cas). Lorsque une donne est pose sur la pile, le SP

pointe dessus (le sommet de la pile). La pile grossit vers des adresses mmoires
ngatives. Cela est utilis pour stocker le contexte dun processus. Un processus
pose toutes ses donnes locales et dynamiques sur la pile. Le pointeur dinstruction
(Instruction Pointer : IP) est un registre utilis pour pointer sur ladresse de la
prochaine instruction excuter. Le processeur examine lIP chaque fois pour
trouver la prochaine instruction excuter. Lorsquune redirection abrupte se met
en place (gnralement due un jmp ou un call), ladresse de la prochaine
instruction, aprs le retour de la redirection, peut tre perdue. Afin de prvenir de
ce problme, le programme stocke ladresse de la prochaine instruction qui doit tre
excute (aprs un retour de jmp ou call) sur la pile, et elle est appele ladresse de
retour (return address) (implmente travers linstruction assembleur RET). Cest
ainsi quun programme normal contenant beaucoup de fonctions dappels (calls) et
dinstructions goto conserve le chemin correct dexcution.
Le Heap est basiquement le reste de lespace mmoire allou au processus. Il
stocke les donnes qui ont une dure de vie comprise entre les variables globales et
les variables locales. Lallocateur et le dsallocateur travaillent respectivement pour
assigner de lespace aux donnes dynamiques et vider la mmoire heap [ref 3].
Voil pour un bref survol des bases de lorganisation dun processus. Maintenant, je dcris
quelques techniques utilises de manire rcurrente pour troubler lharmonie de
lorganisation dun processus.
2.2 Buffer overflows (Dpassements de capacit de tampon)
Ce terme donne des frissons toute personne qui a eu affaire eux, que ce soit un
programmeur, un testeur dapplication ou un administrateur de scurit. Certains disent
quil sagit du plus gros risque de scurit de la dcennie [ref 4]. La technique dexploitation
est franche et meurtrire. La pile du programme stocke les donnes dans lordre, ainsi les
paramtres passs la fonction sont enregistrs en premier, puis ladresse de retour, puis
le SP prcdent et plus tard, les variables locales. Si des variables (comme des tableaux)
sont passes sans vrifications des limites, elles peuvent tre amenes au dbordement en
poussant une grande quantit dinformations, ce qui corrompt la pile, conduisant la sur
criture de ladresse de retour et par consquent un problme de segmentation
(segmentation fault). Si le tour est astucieusement jou, nous pouvons modifis les buffers
pour pointer sur nimporte quel emplacement, entranant lexcution de code arbitraire [ref
5].
2.3 Heap overflows (Dpassements de capacit du Heap)
La mmoire alloue dans un heap est organise en une liste doublement lie. En provoquant
un dpassement de capacit, nous pouvons modifier les pointeurs de la liste lie pour
pointer sur la mmoire. Les heap overflows sont difficiles exploiter et sont plus courants
dans Windows du fait quils contiennent plus de donnes prominentes qui peuvent tre
exploites. Dans le cas dun systme dallocation de mmoire malloc, les informations
concernant la mmoire disponible et alloue sont stockes dans le heap. Un dpassement
peut tre dclench en exploitant cette information de gestion, nous permettant ensuite
dcrire dans des emplacements mmoires alatoires, ce qui peut entrainer lexcution de
code [ref 6].
Comment est donc dclench ce dpassement? Il existe beaucoup darmes dans larmurerie

comme les chanes (strings) et les fonctions de manipulation de chanes, les pointeurs nuls
(null pointers), dpassement dentiers (integer overflows), problmes de signatures (signed
issues) et certaines conditions qui peuvent tre utiles pour gnrer des conditions
dexceptions dans un processus [ref 7].
Jinsiste sur le fait que cet article ne se veut pas un guide exhaustif des diffrentes
techniques dexploitation. Nous fournissons juste un rapide aperu de ce qui est important,
afin de bien comprendre les points venir dans les articles suivants. Ce ne sont que des
indicateurs pour une rfrence future.

3. La naissance dun Exploit


Vient maintenant la partie la plus excitante, le codage dun exploit. Le corps ou structure
dun exploit peut tre divis en diffrents composants, comme dcrit en Figure 1 [ref 8].
Nous prsentons une petite collection dexploits qui nous aidera analyser la figure
suivante.

Figure 1

3.1 Shellcode
Il constitue le code utile qui sera excut aprs lexploitation. Dans la plupart des cas, nous
redirigeons le chemin dexcution, ainsi le code inject sera excut [ref 9]. A partir de l,
ladresse de retour est dtourne pour pointer sur ce shellcode. Il est constitu
dinstructions assembleurs encodes dans une chane au format binaire qui ralisent des
oprations comme crer un shell. Un bon shellcode se doit dtre un compromis entre la

fois, la taille et la complexit. Il y a normment de vrifications effectuer pendant la


cration dun payload comme conserver un test des caractres rservs. De nos jours, les
payloads ont t adapts pour tre extremement petits et ncessitent moins de place. Ils
peuvent excuter beaucoup doprations complexes de louverture dun socket en coute au
lancement dune compilation sur lordinateur distant.
3.2 Vecteur dInjection (Injection vector)
Le pointeur ou offset o le shellcode est plac dans un processus et sur lequel ladresse de
retour est modifie pour pointer dessus.
3.3 Le constructeur de requte (Request builder)
Cest le code qui dclenche lexploit. Si il est li des fonctions de chanes, alors les
langages de script sont gnralement prfrs.
3.4 Handler Routine
Cette partie occupe gnrallement la majorit du code. Cest un handler pour le shellcode
oprant des oprations comme se connecter un shell distant (bindshell), ou connecter la
console un socket.
3.5 Handler des options utilisateur (User options handler)
Cest basiquement une interface utilisateur lui proposant diffrentes oprations de contrle
comme la slection dune cible, dun offset, la verbosit, le dbuggage et dautres options.
Cela constitue la majorit du code de lexploit et le rend plus encombrant.
3.6 Handler de connection rseau (Network connection Handler)
Cela comprend les diffrentes routines qui conduisent les connections rseau comme la
rsolution de nom, la gestion de socket, le flux derreurs, etc.

Comme nous pouvons le voir, il existe beaucoup de code non ncessaire et rptitif qui
rendent lexploit volumineux et soumis des risques derreurs.

4. Quelques problmes courants


Dans la course au dveloppement, beaucoup de problmes sont rencontrs qui gnent le
processus de dveloppement de lexploit. La mauvaise course des gens qui tentent de sortir
lexploit en premier conduit beaucoup de code mauvais et compliqu.
Plusieurs exploits requirent une bonne comprhension de concepts profonds et de la
recherche, comme les exploits bass sur les protocoles rseau (RPC, SMB et SSL) et les
APIs obscures. Comme peut dinformations sont rvles dans les bulletins dalertes, il y a
toujours un besoin dexprience.
Trouver les valeurs cibles est galement un gros casse tte qui implique un grand nombre

de tests et derreurs.
Enfin, la plupart des payloads sont cods en dur et la plus petite modification rend lexploit
inutilisable.
Un grand nombre de pare feu et de systmes IPS dtectent et bloquent les shellcodes.
Le temps est le principal souci, et certains exploits consomment beaucoup de temps et de
concentration, ces deux aspects sont les atouts prcieux dun chercheur en scurit.
Ceci tant dit, coder un exploit est un enfer dans un travail confus!

5. Allons-y!
Entrons dans le Metasploit Framework (MSF)! Conformment au guide MSF User Crash
Course [ref 10];
Le framework Metasploit est un environnement complet pour crire, tester et
utiliser des exploits. Cet environnement fournit une plateforme solide pour les tests
dintrusion, le dveloppement de shellcodes, et la recherche de vulnrabilits.
De mon point de vue, le Framework Metasploit est une solution unique tous les problmes
discuts prcedemment. Le framework a volu en une extension dans sa version 2.0. Il est
plus stable, possde des fonctionnalits trs attractives et une interface utilisateur trs
instinctive pour le dveloppement dexploits.
Les fonctionnalits majeures qui avantagent encore plus le MSF travers les diffrentes
options sont :

Il est principalement crit en Perl (avec quelques parties en assembleur, Python et


en C), ce qui signifie un code propre et efficace et un dveloppement rapide de
plug-ins.
Un support printgr pour des extensions doutils, librairies et des fonctions de
debuggage, encoding, logging, timeouts et nops alatoires et SSL.
Une API dexploit et un environnement comprhensibles, intuitifs, modulaires et
extensibles.
Des payloads mutli-plateformes et multi-fonctions hautement optimiss qui sont
excutables dynamiquement.
Un support de handlers et callbacks avanc, qui rduit considrablement le code de
lexploit.
Le support doptions rseaux et de protocoles varis qui peuvent tre utiliss pour
dvelopper du code dpendant du protocole.
Des exploits supplmentaires inclus, qui aident tester des techniques
dexploitation et des exemples dexploits dvelopps.
Cest un produit Open Source possdant une communaut de dveloppeurs assurant
le support.
Support de fonctionnalits avances et doutils tiers comme InlineEgg, Impurity,
UploadExec et du chanage de proxies.

Il est clair que MSF est dfinitivement un outil que le testeur dinfiltration se doit de
connatre. Il donne lart de lexploitation un nouveau paradigme.

6. Installation
Actuellement, le Metasploit Framework fonctionne efficacement sur Linux et Windows. Il
existe quelques problmes de compatibilit, mais elles peuvent tre ignores. La dernire
version est tlchargeable pour Windows et Linux ladresse
http://www.metasploit.com/projects/Framework/downloads.html.
Linstallation est triviale et intuitive, et les paquetages dinstallations sont autoextractibles.
Linstallation simple est montre en Figure 2. Dans le cas de Linux, dcompresser larchive
(qui est au format framework-2.x.x.tar.gz), l o le rpertoire du framework contient les
binaires qui sont pour diffrents utilitaires. Lors du chargement sous Linux, il est indiqu
que les modules Term::ReadLine::Gnu (pour le support de la compltion par tab) et
Net::SSLeay (pour le support SSL) sont installs (ils sont trouvs dans le rpertoires
extras).

Figure 2

Lenvironnement Windows est bas sur un environnement Cygwin allg, ce qui est une
sage dcision car cela fournit une console trs portable lutilisateur. Nanmoins, il existe
des problmes avec le support d Active State Perl, car il ne supporte que le Cygwin Perl.
Linstallation est regroupe dans un exccutable, qui installe le Metasploit Framework dans
le rpertoire spcifi (voir Figure 2) et ajoute les raccourcis.

7. Conclusion de la Premire Partie


Dans la premire partie de cet article, nous avons fait un tour travers les diffrentes
technqiues dexploitation qui sont couramment utilises. Nous avons fouill dans les bases
du dveloppement dun exploit et vu comment le code dun exploit peut tre dcoup en
sous-structures logiques. Nous avons abord les problmes majeurs rencontrs dans le
dveloppement dexploits et vu comment le Metasploit Framework se prsente comme une

solution ces problmes. Nous avons galement parl de quelques unes de ses
fonctionnalits et de son installation.
Plus tard, dans la seconde partie, nous exposerons un aperu labor de son utilisation et
de ses options varies, du lancement et de lajout de nouveaux exploits, des rglages de
lenvironnement et des autres fonctionnalits avances du Metasploit Framework.

Rfrences
1. Microsoft Security Bulletin http://www.microsoft.com/technet/security/bulletin/ms04011.mspx
2. Stack, Pointers and Memory, Lally Singh http://www.biglal.net/Memory.html
3. A Memory Allocator, Doug Lea http://gee.cs.oswego.edu/dl/html/malloc.html
4. Buffer overflows likely to be around for another decade, Edward Hurley
http://searchsecurity.techtarget.com/originalContent/0,289142,sid14_gci860185,00.html
5. Buffer Overflows Demystified, Murat http://www.enderunix.org/docs/eng/bof-eng.txt
6. Badc0ded - How to exploit program vulnerabilities, http://community.coresdi.com/~juliano/bufo.html
7. Once upon a free(), Phrack 57 Article 9 by Anonymous
http://www.phrack.org/show.php?p=57
8. Presentation on Advanced Exploit Development at HITB, HD Moore (PDF)
http://conference.hackinthebox.org/materials/hd_moore/HDMOORE-SLIDES.pdf
9. Designing Shellcode Demystified, Murat http://www.enderunix.org/docs/en/sc-en.txt
10. Crash Course User Guide for Metasploit Framework, (PDF)
http://metasploit.com/projects/Framework/docs/CrashCourse-2.0.pdf
About the authors
Pukhraj Singh is a security researcher at Network Intelligence (I) Pvt. Ltd. His areas of
interest include working with exploits, monitoring honeypots, intrusion analysis and
penetration testing.
K. K. Mookhey is the CTO and Founder of Network Intelligence.
View more articles by K.K. Mookhey on SecurityFocus.
Comments or reprint requests can be sent to the editor.
Copyright 1999-2004 SecurityFocus
Traduction franaise : Jrme ATHIAS

S-ar putea să vă placă și