5 perc
Pentest alapok 2.
Az előző cikkben bevezettük a céljainkat és a lehetőségeinket a pentest gyakorlására, illetve VPN használatával is megismerkedtünk.
A 2. részben megismerkedünk az alapfogalmakkal és az alapeszközökkel, amelyeket gyakran használni fogunk gyakorlásaink során. A cikk nem fog egészen Ádámig és Éváig visszamenni, alapvető hálózati és számítógépes ismereteket megkövetel az alapos megértése.
Shell
Egy operációs rendszer magas szinten szétbontható kettő jól elkülöníthető részre: kernel és shell. A kernel az, ami kezeli a hardvert (mint pl. virtuális memória, lapkezelés, feladat ütemezés, memória beolvasása, írása, adatvédelem, feladatok izolációja, tranzakciókezelés, fájlkezelés, perifériák illesztése stb.). Ilyen kernel a Linux Kernel is, amibe mai napig is rendszeresen jönnek ki frissítések. A shell az, amin keresztül a felhasználó adja a bemeneteket a számítógépnek, amely ezeket a kéréseket lefordítja a kernel nyelvére és átadja egy interfészen neki. Tehát egy híd, interfész, amivel felhasználóként beszélhetünk a számítógéppel, megfelelő jogosultsággal irányíthatjuk is azt. Ez régen az egyetlen módja volt egy számítógép használatának, de manapság már lehet használni grafikus felületeket (GUI) is.
Linuxon a shellnek a Bourne Again Shell-t, azaz bash-t használják shellnek ami az sh-nak egy fejlesztett változata. Előfordulhat, hogy mások egyéb, akár újabb, shell-eket használnak, mint például a zsh.
Támadóként sokszor a támadási vektorunk egy fontos része, hogy shell-t “szerezzünk” egy számítógéphez. Ez ahhoz szükséges, hogy áttörjünk a szolgáltatások és interfészek által megszabott, szabályszerű irányításon. Például van egy webszerver ami egy weboldalhoz tartozó kéréseket szolgál ki, és szabályszerű viselkedés az, hogy a felhasználó a weboldalon keresztül, megszabott kéréseket küldhet a szervernek (pl. GET index.html vagy ilyesmi). Ha viszont ezen a weboldalon van egy RCE (Remote Code Execution) hiba, azaz tetszőleges kódot futhathatunk az oldal mögött álló számítógépen, akkor könnyen levetkőztethejtük a számítógépet, leszedve weboldal absztrakcióját és közvetlen hozzáférést szerzünk, azaz shell-t.
Kapcsolat szempontjából megkülönböztetünk többféle shell-t:
- Reverse Shell
- Bind Shell
- Web Shell
A Bind Shell egy portot (lásd később) magához rendel, és azon a porton hallgatózva várja a csatlakozni kívánó gépeket. A Reverse Shell a leggyakoribb módja annak, hogy átvegyük az irányítást egy kompromitált gép felett. A “reverse” mivolta, onnan következik, hogy itt maga a támadó hallgatózik csatlakozásra várva, míg a célpont gép egy adott reverse shell-t indító kód következtében indítja el a kommunikációt a támadó géppel. Ez azért annyira hasznos, mivel legtöbb esetben az az alapmértelmezett beállítás tűzfalaknál, hogy bejövő forgalmat csak bizonyos portoknál fogad (pl. webszerver esetén 80 és 443), így nem lehet egy bind shell-t csinálni. Ugyanakkor a kimenő forgalmat nem szabályozza, és itt jön hasznunkra a reverse shell.
Hogy hogyan tudunk reverse shell-t csinálni arról majd később.
Portok
A reverse shell-nél szó esett a számítógépek kommunikációjánál a portokról. A portok lényegében olyanok, mint az ajtók, ablakok egy háznál, melyeken, ha nincsenek jól bezárva, illetéktelen is bejöhetnek. A portok szoftveres interfészek, melyek a hálózati kommunikáció kezdetei és végei. A portokhoz rendelhetőek folyamatok, melyek használják azokat. A portokat 0-65535 közötti egész számmal jelöljük. Egyes folyamatokat, protokollokat, úgynevezett well-known, azaz jól ismert, portokhoz kötünk, melyek a 0-1023-as tartományban vannak. Ilyen például a HTTP ami a 80-as port, vagy a HTTPS ami a 443. Továbbá az alábbi összerendeléseket érdemes tudni:
- 20/21 (TCP) - FTP
- 22 (TCP) - SSH
- 23 (TCP) - Telnet
- 25 (TCP) - SMTP
- 80 (TCP) - HTTP
- 161 (TCP/UDP) - SNMP
- 389 (TCP/UDP) - LDAP
- 443 (TCP) - SSL/TLS (HTTPS)
- 445 (TCP) - SMB
- 3389 (TCP) - RDP
Eszközök
Nehéz megnevezni az SSH, Vim, Netcat és talán a Tmux programoknál alapabb eszközöket boxok megoldásánál. Ezek használatát fogjuk tárgyalni most.
SSH
A Secure Shell (SSH) hálózati protokoll, ami a 22-es porton működik alapméretezetten. Ez a protokoll lehetővé teszi a számítógép adminisztrátoroknak, illetve mezei felhasználóknak, hogy kriptográfiailag biztonságosan érjék el egy számítógép shell-jét. Egy titkosított csatornát biztosít távoli eléréshez. Fel lehet konfigurálni, hogy jelszóval vagy asszimetrikus kulcspárokkal autentikáljon, de az általános megegyezés az, hogy a jelszóval való autentikációt érdemes kikapcsolni, és a kriptográfialiag atombomba biztos szabványra támaszkodni.
Az SSH a kliens-szerver modell alapján müködik, miszerint az SSH szerver kiszolgálja a klienseket. Az OpenSSH például egy népszerű SSH kliens Linuxon. Az asszimetrikus kulcsú autentikációhoz először generálnunk kell egy kulcspárt, amely áll egy publikus és privát kulcsból. A biztonságosság alapját nem részletezném, akit esetleg érdekel az elolvashatja a Nyilvános kulcsú titkosítás-ról szóló cikkünket. Generálni kulcsot az ssh-keygen utility-vel tudunk. Ezután a kulcsokat a /home/<felhasználód>/.ssh/ úton találod meg, ahol is .pub végződésű a publikus kulcsod, a másik meg a privát kulcsod. Az SSH szerveren, egy adott felhasználóhoz, úgy tudunk hozzáférést adni egy kulcs pár tulajdonosának, hogy a kulcs pár publikus kulcsát, az SSH szerveren a felhasználónak a ~/.ssh/authorized_keys fájl, ha már létezik, tartalma után kell másolni, ha nem akkor akkor létre kell hozni, egy ilyen fájlt benne a publikus kulccsal.
Hozzáférést SSH-n keresztül megfelelő belépési adatok nélkül szinte lehetetlen, de ha sikerül egy jelszót vagy egy privát kulcsot szereznünk a távoli gép felhasználójához, akkor perzisztensen ki-be tudunk járni a számítógépbe.
Vim
Linux környezetben több alternatíva is van szövegszerkesztésre, de talán egyik legjobb a Vim. Vimben jól lehet szöveget szerkeszteni vagy programot is írni. Egyik legnagyobb előnye, hogy csak a billentyűzetet kell használni vele, ami miután az irányításokat elsajátítottad, nagyban növelni fogja a hatékonyságodat. Továbbá azt is illik megemlíteni, hogy nagyon minimális igényei vannak, így bármilyen környezetben elfut. Ha meg akarod tanulni használni, érdemes elolvasni a vimtutor-t, ami már elérhető magyar nyelven is. Sok sikert a kilépéshez :DD.
Itt van egy puska a gyorsgombokhoz: https://vimsheet.com/
Netcat
A netcat, ncat vagy nc, egy nagyon hasznos eszköz a TCP/UDP portokkal való interaktáláshoz. Sok dologra lehet használni pentesting közben, de mi leginkább reverse shell-ekhez való kapcsolódásra fogjuk használni, amiről részletesebben később tudtok olvasni. Továbbá lehet használni arra, hogy bármilyen nyitott porthoz kapcsolódjunk és leolvassuk az ott futó szolgáltatást. Ezt a technikát “Banner Grabbing”-nak nevezik. Windowson elérhető a PowerShell-es netcat, a PowerCat. Ugyanakkor létezik a socat is, ami több funkcióval is rendelkezik, mint például port forwarding.
Kövesd a cikk sorozatot, hogy egyre mélyebben elmerüljél a tananyagban!