Metasploit – Leer Metasploit 1
Metasploit is een open-source framework voor het vinden van zwakheden in computersystemen en netwerken. Zoals met de meeste informatiebeveiligingstools kan Metasploit ten goede en ten kwade gebruikt worden. In essentie is Metasploit bedoeld om zwakheden te vinden. Vervolgens kunnen deze ook misbruikt worden door deze krachtige software. Wat Metasploit exact is en hoe je ermee kunt werken leer je in de volgende 3 “Leer Metasploit” posts.
Metasploit kent een aantal deelprojecten zoals het bekende “Metasploit Framework” maar ook de “Opcode database” en het “Shellcode archief”. Optcode is een afkorting voor “operation code” en is deel van een software instructie om een bewerking uit te voeren. Shellcode is code waardoor een zogenaamde shell verkregen kan worden waarmee de hacker (remote) toegang krijgt tot het geïnfecteerde systeem. Beide deelprojecten zijn van invloed op het Metasploit Framework waar we het in deze posts over gaan hebben.
Het Metasploit Framework is ontwikkeld in 2003 door HD Moore als een portable netwerk tool. Oorspronkelijk was het framework geschreven in Perl. Later, in 2007 is het herschreven in Ruby. In 2009 is Metasploit verkocht aan Rapid7 (beveiligingsbedrijf). Rapid7 stelt 4 versies ter beschikking, namelijk de Metasploit Community, Express, Ultimate en de Metasploit Pro versie. De community versie is de basis versie en elke opvolgende versie krijgt meer functionaliteiten. Denk hierbij aan web interfaces, wizards, web-app testing etc. Bekijk deze link voor meer informatie over de verschillen. Naast deze versies bestaat ook de “Framework” variant. Metasploit Framework is gratis en biedt een command line interface. De mogelijkheid om thirth-party tools te importeren. handmatige exploitatie en handmatige brute forcing. Ook bevat deze versie van Metasploit de Zenmap poort scanner en een Ruby compiler.
Er zijn meerdere soortgelijke “tools” als Metasploit zoals “Core Impact” en “Canvas”. Toch blijft Metasploit het meest succesvolle mede door zijn open-source opzet, grote community en groot archief.
Metasploit is verkrijgbaar op zowel Linux als in Windows. In onze posts gebruiken we Kali Linux waar het Metasploit Framework (verder refereren we hieraan gewoon als “Metasploit”) al op geïnstalleerd is. Deze posts gaan niet diep in op de grafische interfaces van Metasploit. Als je Metasploit wilt leren vanuit een grafische interface kun je de betaalde variant van Metasploit proberen. Ook kun je ervoor kiezen om b.v. Armitage te downloaden. Armitage is ook open-source en geeft een grafische beheertool voor Metasploit. Deze post zijn bedoeld om de opbouw en werking van Metasploit te leren. Ik ben van mening dat je hiervoor even door de zure appel heen moet bijten en Metasploit moet leren via de command-line (msfconsole). Als je deze onder de knie hebt dan is de rest een eitje.
Vulnerability / Exploit / Payload / Metasploit
De werking van Metasploit is modulair. Dat wil zeggen dat exploits en payloads separaat van elkaar gebruikt kunnen worden waardoor unieke mogelijkheden ontstaan om de beveiliging te testen. Ook werkt Metasploit samen met verschillende vulnerability scanners. Dat wil zeggen dat je eerst bepaalde informatie over je “target” moet verkrijgen alvorens je deze gericht kunt gaan testen. Dit doe je met vulnerability scans van o.a. Nmap en Nessus. Metasploit kan scandata van veelgebruikte scanners inlezen en gebruiken.
In essentie zijn de volgende stappen nodig om een systeem te infiltreren / exploiten:
1. Voer een aantal vulnerability scans uit (poort scans, OS fingerprinting scans, vulnerability scans etc.) en verzamel deze data.
2. Kies een exploit
3. Kies een payload
4. Kies encoding (zodat IPS systemen de payload niet ontdekken
5. Voer de exploit uit
Maar wat is nu een vulnerability, exploit of een payload?
Stel je voor dat een kwaadwillende postbode een pakketje wil bezorgen. Deze belt aan en krijgt geen gehoor. Deze loopt achterom en treft daar een deur met een kattenluikje.
Vulnerability
Een vulnerability is een zwakheid in het systeem. Elk systeem heeft bepaalde zwakheden. Denk bijvoorbeeld aan het kattenluikje in de achterdeur. Dit kan een “zwakheid” zijn van de deur.
Payload
De payload is de code welke op het systeem blijft draaien na infectie. Dit is de software die de hacker toegang geeft tot het systeem. Via de payload code kunnen bijvoorbeeld bestanden overgezet worden of kan het scherm van de computer door de hacker bekeken worden. De payload is in dit geval het pakketje welke naar binnen gebracht moet worden. We noemen een payload ook wel een “listener” of een “rootkit” (hoewel rootkit feitelijk een iets andere betekenis heeft).
Exploit
Een exploit is een stukje code waarmee de payload bezorgd wordt. De exploit zorgt er dus voor dat de het systeem geïnfiltreerd kan worden door gebruik te maken van een vulnerability in het systeem. Exploits zijn dus specifiek gemaakt voor bepaalde softwarepakketten en voornamelijk voor specifieke versies van deze softwarepakketten. In dit voorbeeld zou de exploit vergeleken kunnen worden met een setje schroevendraaiers om het kattenluikje los te schroeven en om zo toegang te krijgen. Of een lockpicking set om het slot te ontgrendelen, of een hamer om de deur te slopen. De gouden regel is: hoe stiller … hoe beter! Zorg ervoor dat er geen alarmbellen afgaan.
Metasploit Filesystem
Het Metasploit framework is opgebouwd uit een logische folderstructuur. Om Metasploit te leren is het zinvol om eerst het filesystem van Metasploit onder de knie te krijgen. De volgende folders vinden we terug in de “metasploit-framework” directory (usr/share/metasploit-framework):
- app – De Metasploit applicatie
- config – Configuratiebestanden van Metasploit
- data – Modificeerbare bestanden voor metasploit
- db – Ruby database schema
- documentation – Documentatiebestanden van het Metasploit Framework
- lib – Het “hart” van het Metasploit Framework
- modules – De Metasploit modules
- plugins – De Metasploit plugins
- scripts – Diverse scripts zoals het Meterpreter script
- tools – Verschillende handige (niet Metasploit) command line applicaties
- vendor – De Ruby module
Binnen de lib folder (library) bevinden zich de belangrijkste modules voor de werking van Metasploit. De libraries zorgen ervoor dat we exploits kunnen testen zonder extra code te moeten schrijven voor niet-payload taken, zoals HTTP-aanvragen of codering van payloads. De “REX” module zorgt bijvoorbeeld voor de task library en werkt met sockets, protocollen e.d. De “Msf::Core” module voorziet de gebruiker van de basis API en definieert het Metasploit Framework. “Msf::Base” voorziet de gebruiker van een “vriendelijke” basis API etc.
Hierboven lees je nog 2 verschillende begrippen die wat uitleg nodig hebben. We hebben modules en plugins.
Module
Een module wordt gebruikt om een bepaalde functie te gebruiken en te implementeren. Metasploit is volledig modulair opgebouwd en elk stukje functionaliteit word dus uit een module gehaald. Metasploit komt zelf met een grote verscheidenheid aan modules. Hier kun je zelf modules aan toevoegen of zelfs je eigen modules maken. Modules die door de gebruiker gemaakt zijn en/of alleen voor de gebruiker beschikbaar zijn worden bewaard in de folder “~/.msf4/modules/”.
Er zijn dus veel verschillende Metasploit modules welke alleen een beetje uitleg nodig hebben.
Auxiliary
In Auxiliary staan zogenaamde auxiliary modules. Dit zijn exploits zonder payload welke in geen enkele andere categorie passen. Deze modules helpen vaak bij het verzamelen van informatie. Denk hierbij aan scanning modules, sniffing modules, fuzzing modules maar ook denial of service attacks en nog veel meer.
Encoders
Encoders verpakken als het ware de payload op een unieke manier en zorgen ervoor dat de payload zonder detectie afgeleverd kan worden. Er zijn veel verschillende encoders om payloads op diverse manieren te kunnen samenstellen.
Exploits
Dit zijn alle beschikbare exploits. Exploits zorgen ervoor dat de payload overgebracht kan worden door misbruik te maken van een vulnerability in het systeem. In Metasploit wordt een exploit pas een exploit genoemd als deze gecombineerd wordt met een payload. Een exploit zonder payload heet in de terminologie een “auxiliary module”.
Nops
NOP staat voor “No OPeration”. Bij x86 processors wordt dit meestal aangegeven door de hexadecimale waarde: 0x90. Wanneer de processor een NOP ontvangt doet deze in de actieve cyclus eenvoudigweg helemaal niets en gaat dan door naar de volgende instructie. NOP’s zorgen ervoor dat de payload consistent en stabiel blijft. Het kan namelijk zo zijn dat payloads niet in 1 keer uitgevoerd mogen worden op de doelcomputer. Een nop wordt dan toegepast om een “pauze” in te lassen of om met opzet lege ruimte in een code op te vullen zodat de code nog prima uitvoerbaar is zonder vervelende nadelen.In de praktijk worden NOP’s voornamelijk gebruikt voor het creëren van buffer overflow aanvallen.
Payloads
De payload, zoals hiervoor uitgelegd is de code welke remote gestart wordt en welke dus op de geïnfiltreerde systemen blijft draaien. De payload geeft de hacker toegang tot het systeem.
Post
De post modules zijn de “post exploration” modules en dus feitelijk “information gathering” modules. Denk aan een ARP scanner, credential collector, enumeratie van ingelogde gebruikers etc.
Plugin
Een Metasploit plugin is een stukje software welke geladen wordt tijdens het opstarten van Metasploit. Een plugin heeft effect op het volledige framework. Plugins kunnen taken automatiseren die normaliter zeer tijdrovend zouden zijn of welke erg ingewikkeld zijn. Een Metasploit plugin is van toepassing op het hele framework en elk subsysteem van het framework. Vaak zullen plugins ervoor zorgen dat de gebruiker nieuwe commando’s ter beschikking krijgt.
Meterpreter
Meterpreter staat voor “Meta-Interpreter” en is een term die geregeld voorbij komt. Meterpreter is een van de aanwezige payloads in Metasploit en is al onderdeel van Metasploit sinds versie 2.3. De Meterpreter is een van de bekendere en meest universele payloads. De Meterpreter is ontworpen in Ruby en voornamelijk geschreven voor Windows. Het design maakt het echter ook prima mogelijk om Meterpreter te compileren voor andere OS systemen.
Meterpreter is een geavanceerde, dynamisch uitbreidbare payload die DLL injection stagers in het geheugen gebruikt en tijdens runtime over het netwerk wordt uitgebreid. Het communiceert via de stager socket en biedt een uitgebreide Ruby API aan de cliëntzijde.
Het voordeel aan de Meterpreter is dat deze volledig in het RAM geheugen werkt en geen files op de disk wegschrijft. Ook worden er geen nieuwe processen gestart omdat de Meterpreter zich injecteert binnen een bestaand (compromised) proces. Communicatie tussen de Meterpreter server en cliënt is versleuteld. Tenslotte is de Meterpreter erg ligt en vraagt deze bijna geen resources op de doelmachine.
De Meterpreter werkt als volgt:
- De cliënt uploadt de DLL over de socket.
- De doelmachine (server) voert de initiële stager uit. Dit is meestal een bind, reverse, findtag of passivex.
- De stager laadt de DLL voorafgegaan door Reflective. De Reflectieve stub zorgt voor het laden / injecteren van de DLL.
- De kern van de Metepreter initialiseert en maakt een TLS / 1.0-koppeling over de socket en verzendt een GET. Metasploit ontvangt deze GET en configureert de cliënt.
- Ten slotte laadt Meterpreter uitbreidingen. Het zal altijd stdapi laden en zal priv laden als de module beheerdersrechten geeft. Al deze uitbreidingen worden over TLS / 1.0 geladen met behulp van een TLV-protocol.
Einde “Leer Metasploit” deel 1
We zijn tot een einde gekomen van de eerste post. In deze post hoop ik een goed overzicht te hebben gegeven van Metasploit. Wat is Metasploit, hoe is het globaal opgebouwd en wat zijn veelgehoorde termen. In post 2 gaan we dan echt aan de slag met Metasploit. Tot dan!