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:
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).
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).
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.
Oké, de milyen flag-eket használunk a TCP protokoll során?
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).
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).
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.
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).
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.
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).
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).
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.
10. ábra Az ACK scan alkalmazása
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. . . .