loader
Foto

Scannelési technikák az nmap használatánál I.

Elkezdjük most részletesebben megismerni az nmap használatát. Az nmap nagyon fontos eszköz az IT biztonsággal, illetve az üzemeltetéssel foglalkozó szakembereknél. De hogyan működik? Hogyan lehet és érdemes a scannelési tulajdonságokat beállítani? Mi van a háttérben? Ezeket tekintjük át röviden ebben a cikkben, illetve kitérünk néhány kapcsoló (pl.: "-sS") alkalmazásának hátterére is.

Az nmap-ot saját hálózatunk (illetve a feltételek tudomásul vétele után a scanme.nmap.org) tesztelésére használhatjuk, ellenkező esetben akár bűncselekmény is megvalósítható az alkalmazásával.
Az nmap használatával különböző scannalési technikák alkalmazhatók. A cél felderítésének az eredménye attól függ, hogy a számítógép (vagy az előtte lévő tűzfal) milyen csomagokat küld vissza. Előfordulhat az is, hogy a tűzfal (számítógép) más csomagot küld vissza az nmap-nak, tehát félrevezetés történik.

A TCP protokoll egy ún. connection alapú protokoll, azaz, először felépül a kapcsolat, azután történik az adatküldés, ezt követően lebontjuk a kapcsolatot.

A kapcsolatfelépítésekor az ún. háromlépéses kézfogás történik, ezek a lépések a következők:

  1. a kliens csomagot küld a szervernek, beállítja a kliens a SYN flag-et. A kliens generál egy szekvencia számot is, ez véletlenszám. Ha hiba történik az átvitelben, akkor innen küldi újra a szerver az adatot. (SYN)
  2. a szerver válszolni fog a kliensnek. A szerver beállítja az ACK flag-et (visszaigazolás történik, hogy megkapta a szerver a szekvenciaszámot, a szerver visszaküldi a szekvenciaszám eggyel megnövelt értékét). A szerver is küld adatot, tehát itt is lehet hiba, ezért a szerver is generál egy véletlen számot, ez lesz a szerver szekvenciaszáma. Ezért a szerver beállítja a SYN flag-et is, amikor átadja a saját szekvenciaszámát. (SYN-ACK)
  3. A kliensnek vissza kell igazolni azt, hogy megkapta a szerver szekvenciaszámát. Ezért a kliens is küld egy ACK-ot, és a szerver szekvenciaszámának eggyel megnövelt értékét is visszaküldi a szerver felé. (ACK)

 

A fent említett háromlépéses kézfogás kell ahhoz, hogy a TCP kommunikáció kiépüljön a szerver és a kliens között. Ez a folyamat látható az első ábrán (SYN, SYN-ACK, SYN).

kep
1. ábra   A háromlépéses kézfogás a Wireshark-ban (kattints a képre)
 

Nézzük meg részletesebben például a szerver válaszát (SYN ACK), amely a kliens kérésére (SYN) született. Ehhez kattintani kellett a 288. sorra, majd a másik ablakban lévő "Transmission Control Protocol" feliratra (2. ábra).

kep
2. ábra   A szerver válasza a kliens felé (SYN-ACK kapcsolat)
 

Láthatjuk ezen a képen (2. ábra), hogy a szerver beállította a SYN és az ACK flageket, illetve a "seq" értékét, amelyet a kliens a 289. sorban vissza fog igazolni úgy, hogy az értékét eggyel megnöveli.

A háromlépéses kézfogás után történik a kommunikáció a kliens és a szerver között, majd a kommunikáció lezáráshoz a négylépéses kézfogás kell, amelyet bármelyik fél kezdeményezheti.

  1. FIN csomag küldése (bárki kezdeményezheti)
  2. a másik fél küld erre egy ACK-ot
  3. aki igazolta az ACK-ot, küld egy FIN-t
  4. aki megkapta a FIN-t, küld egy ACK-ot


Oké, de milyen flag-eket használunk a TCP protokoll során? 

  • ACK (Acknowledgement) : nyugtázás
  • FIN (Finish) : "rendben megtörtént a kommunikáció" jelzése
  • PSH (Push) : ennek a flag-nek a beállításától függ, hogy a szegmenst gyorsabbban kell-e továbbítani
  • RST (Reset Connection) : a küldő törli az összeköttetést
  • SYN : szinkronizáció
  • URG (Urgent) : sürgős

A rövid, néhány soros elmélet után nézzük meg a különböző scan-nelési eljárásokat! Nem törekszünk a részletes elmélet ismertetésére, inkább a gyakorlati oldalról közelítjük meg.

A scannelés során tapasztalni fogjuk, hogy a következő állapotok lehetnek egy portnál. Kaphatunk "open"-t, "filtered", "open|filtered" portokat, illetve "closed"-et is, igaz, ez nem (mindig) kerül megjelenítésre.

A portscannelés során SYN=1-eket küldünk a célgép portjaira. Ha erre SYN=1, ACK=1 érkezik, akkor az adott port nyitott. Ha a válasz SYN=1, RST=1, akkor az a port zárt állapotban van. Ha a válasz ICMP, akkor az "filtered" lesz. 

Először scanneljük a nmap tesztoldalát (scanme.nmap.org), de előtte olvassuk el a használati feltételeket! Ha nem állítunk be scanmódot, akkor az "-sS" kerül felhasználásra, azaz a Stealth módot alkalmazzuk (3. ábra).

kep
3. ábra   A default (-sS) scan alkalmazása
 

Végezzünk el az nmap tesztoldalán egy újabb kisérletet úgy, hogy megadjuk a "-sS" kapcsolót is az nmap-os lekérésünknél. Látjuk, hogy az előző scannelési eredményt kapjuk (4. ábra).

kep
4. ábra   Az nmap futtatásánal beállítottuk a Stealth módot
 

Ez a scannelési eljárás nagyon elterjedt (ez a default is, nem véletlenül), mert gyors, illetve rejtett, mert a teljes TCP kapcsolat soha nem épül fel.

Ebben a módban (stealth scan) a portscanner véletlenszerűen választja ki a lekérdezendő portokat, és egyéb jelzőflag-eket is állítanak, hogy a portscannelés detektálását megnehezítsék.

A tesztelő küld egy SYN-t (és persze egy portszámot is) a célgép felé, ha erre a SYN-re a tesztelendő gép egy SYNACK-kel válaszol, akkor kiépülhet(ne) a  TCP kapcsolat, mert a tesztelendő gépen az adott port nyitott. Ha a SYN kérésre a tesztelendő gép egy RST-t küld vissza, akkor az adott port "closed" állapotban van.

A teljes TCP kapcsolat soha nem épül fel. Elküldjük a SYN-t, és várakozunk, hogy a szerver SYNACK-et vagy RST küldjön. Ha nem jön válasz, akkor ez a SYN küldés (és várakozás) megismétlődik. Ha több ilyen kérésre sem érkezik SYNACK vagy RST válasz, akkor az adott port "filtered"-ként kerül majd megjelenítésre.

Nézzük meg a következő lehetőséget, a "TCP Connect Scan"-t, amelynek a használatához a "-sT" kapcsolót kell alkalmaznunk. Ez a háromlépcsős kézfogást alkalmazza. Ennél a megoldásnál az nmap nem a "saját" csomagjait alkalmazza, hanem az operációs rendszer meghívja a connect()-et, amely a kapcsolat  felépítését fogja elvégezni. Tehát nem az nmap fogja (közvetlenül) a scan-nelést elvégezni, hanem a connect(). Nagyon megbízható, ennek a megoldásnak az eredményét látjuk az 5. ábrán. Ennél a scannelésnél kiépül a teljes TCP kapcsolat, ellentétben az előző lehetőséggel, ahol a kapcsolat csak "félig" épül fel.

kep
5. ábra   Az "-sT" kapcsoló használatának eredménye
 

Nem csak a TCP protokoll alkalmazható a hálózat szkennelésére, hanem az UDP is, amely nem kapcsolatalapú. Ehhez a -sU kapcsolót kell alkalmaznunk a kérés elindításához (6. ábra).

kep
6. ábra   UDP használata az nmap alkalmazásánál
 

A portok scannelését általában TCP protokollal oldják meg, mert a nyitott portok könnyebben megtalálhatók, az UDP protokoll erre a feladatra kevésbé hatékony. Ezt a scannelési megoldást szokták ötvözni a TCP-s megoldással.

A "-sF" kapcsoló alkalmazásával egy FIN flag-gel rendelkező csomagot küldünk. A nyitott portok nem küldenek erre választ, a zárt portok pedig RST-t küldenek válaszul (7. ábra). Előfordulhat az, hogy noha a tűzfal megfogja a SYN-t, de a FIN-t átengedi.

kep
7. ábra   Az "-sF" alkalmazása
 

A következő ábrán találjuk az "-sN" kapcsoló alkalmazásának az eredményét. Ezzel a kapcsolónak a használatával  NULL scan-t végzünk el a tesztelendő hálózaton. "NULL"-t alkalmazva nem állítunk be flag-eket a scannelés során (8. ábra).

kep
8. ábra   NULL scan futtatásának eredménye
 

Ha azt szeretnénk, hogy a scannelés során az FIN, PSH, URG flag-ek kerüljenek felhasználásra, akkor az "-sX" kapcsolót kell alkalmaznunk. Ezt a megoldást "Xmas"-nak is nevezik (9. ábra).

kep
9. ábra   Xmas scan alkalmazása
 

Az "-sA" beállítás segítségével a vizsgált számítógép előtt lévő tűzfalat tudjuk tesztelni, hiszen ennél a beállításnál mindig RST-t kapunk vissza. Itt például a rossz portbeállításokat tudunk tesztelni (10. ábra). Az nmap ACK-et küld a scannelés során.

kep
10. ábra   Az ACK scan alkalmazása
 

 



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

Az nmap (grafikus megjelenítésnél a ZenMap) használata az IT biztonság, illetve az üzemeltetés területén dolgozó szakembereknél szinte elkerülhetetlen. Az ingyenes szoftver segítségével tesztelhetők a számítógépeink, a számítógéphálózatunk, vizsgálha. . . .

A Python programozási nyelv nagyon elterjedt a fejlesztők körében. Használják beágyazott rendszereknél, webes alkalmazásoknál, IT biztonság különböző területein, stb. Látható, hogy nagyon széles a felhasználási területe ennek a nyelvnek, ideje volt m. . . .

Bemutatjuk most a saját (!) Wifi-s hálózatunk tesztelésének az alapjait. Megnézzük, hogy hogyan lehet biztonságos jelszót választani. Feltörhetetlen rendszer nem létezik, de megismerve a tesztelés folyamatát, válaszokat kaphatunk arra vonatkozólag, h. . . .