Port scan
A port szkenner egy egyszerű program a hálózati helyek nyitott portjainak keresésére.
Leírás
[szerkesztés]Ezt gyakran használják az adminisztrátorok, hogy ellenőrizzék a hálózatuk biztonságát, és crackerek is, hogy veszélyeztessék azt. Az, hogy portszkenneljünk egy hostot azt jelenti, hogy átvizsgáljuk az éppen hallgató portokat egyetlen cél hoston. A portsweepnél pedig több hostot vizsgálunk át egy bizonyos port iránt. Az utóbbit tipikusan egy megjelölt szolgáltatás keresésére használják, például egy SQL alapú számítógép féreg portsweepelhet (portsöprés), hogy olyan hostok után kutasson, amik a TCP/UDP 1433-as portján hallgatnak éppen. Minden nyitott port egy potenciálisan sérülékeny alkalmazás lehet. Néhány portszkenner csakis a legáltalánosabb, vagy legáltalánosabban sebezhető portokat szkenneli a megadott hoston. A port kommunikáció a háromutas kézfogással kezdődik (3way handshake).
Kategóriák
[szerkesztés]A szkennelés eredményét a porton általában 3 kategóriába sorolhatjuk:
- Nyitott vagy elfogadott: a host egy választ küldött, jelezve ezzel, hogy egy szolgáltatás hallgatja a portot.
- Zárt vagy nem engedélyezett vagy nem hallgató: a host küldött egy üzenetet, ezzel jelezve, hogy a kapcsolatokat elutasítja (nem engedélyezi) ezen a porton. /pl.: tűzfalból reject, azaz egy TCP RST-vel válaszol/
- Szűrt vagy blokkolt: nem volt válasz a hosttól. (filtered – a port egyáltalán nem válaszol /pl.: tűzfalból drop/) (wrapped – a port nyitva van, de a mögötte levő alkalmazás zárja be a portot /pl.: /etc/hosts.deny miatt/)
A nyitott portok két sebezhetőséget jelentenek, amikkel óvatosnak kell lenniük az adminisztrátoroknak:
- biztonsági és stabilitási aggodalmak a program megbízhatóságával kapcsolatban, hogy azokat a szolgáltatásokat nyújtsa.
- biztonsági és stabilitási aggodalmak az operációs rendszerrel kapcsolatban, ami a hoston fut.
A zárt portok csak a másodikként említettel hozhatók kapcsolatba a két nyitott portokra vonatkozó sebezhetőségek közül.
A blokkolt portok pedig semmilyen sebezhetőséget nem jelentenek. Habár megvan az esélye annak is, hogy nincs semmilyen ismert sebezhetőség sem a szoftverben, sem az operációs rendszerben abban a pillanatban.
A portszkennelést azok is tudják használni, akik a biztonságot szándékoznak veszélyeztetni. Sok lehetőség van a portszkenben arra, hogy nyitott portokat találjunk, amin nagy mennyiségű adatot küldve megpróbálhatjuk kiváltani azt az állapotot, amit úgy hívnak, hogy puffertúlcsordulás (angolul buffer overflow). Az ilyen magatartás veszélyeztetheti a hálózat biztonságát és a benne lévő számítógépekét is, ahhoz vezetve ezzel, hogy érzékeny információkat veszítsünk el, vagy fedjünk fel, valamint hogy dolgozhassunk.
Fontosabb port scan típusok
[szerkesztés]- TCP connect()
- TCP SYN scan
- TCP FIN scan
- Fragment scan
- TCP Idle scan
- UDP scan
- Window scan
- Maimon scan
TCP connect() scan
[szerkesztés]Ez a legegyszerűbb scan-módszer. A connect() rendszerhívást használja. Ha a rendszerhívás sikeres volt, a port nyitva van. Ez a módszer megbízható, mivel ez egy szabályszerű csatlakozás. Ha ez végbe tud menni, akkor a port biztosan nyitva áll. Ekkor a kapcsolat a close()-zal azonnal lezárásra kerül. Ha a kapcsolat nem épül fel, akkor a port zárva van.
Előnye: A nagyon egyszerű leprogramozhatóság. A connect() parancs szinte minden rendszerben rendelkezésre áll, ezért egy ilyenre épülő portscanner program könnyen átvihető másik gépre. Speciális jogosultságok többnyire nem szükségesek hozzá.
Hátránya: Mivel a kapcsolat teljesen kiépül, így többnyire megjelennek a naplófájlokban. Tehát könnyen detektálható és szűrhető. Mivel pontosan így néz ki egy csatlakozás, ezért a legtöbb tűzfal, alkalmazás, IDS/ips, stb. észreveszi a rengeteg csatlakozási próbálkozást. Ekkor ezek a funkciójuktól függően logolnak, blokkolnak, riasztanak, stb.
TCP SYN scan
[szerkesztés]A TCP SYN scan más néven stealth scan vagy half-open scan. Ez egy be nem fejezett TCP kapcsolódást hajt végre. A szkennelő egy TCP csomagot küld SYN flaggel a célhostnak. A host válasza felvilágosítást ad a portról: egy SYN|ACK csomagot küld a második lépéseként a TCP háromutas kézfogásban, elfogadja a portcsatlakozást és így nyitva van. A forráshost egy RST-csomaggal válaszol, hogy a kapcsolatot újra lezárja. A host egy RST-csomagot küld, hogy a port zárva van. Így a célhost egyáltalán nem küld csomagot.
Előnye: Mivel a kapcsolódást nem fejezzük be egy ACK-vel, ezért ezt a fajta scan-t számos rendszer nem veszi kapcsolódási kísérletnek. Így kisebb feltűnést kelthetünk az áldozat rendszerén, hálózatán. Nem is jelenik meg a kapcsolat a logfile-okban, és ezért nem is analizálható.
Hátránya: Ez egy régi scan-technika, így már egyre több biztonsági rendszert készítenek fel ellene. Ma már minden jobb tűzfal általában felismeri ezt a scan-típust. Ezen kívül a legtöbb forrásrendszernek root jogosultságok szükségesek.
TCP FIN/Xmas/Null Scan
[szerkesztés]Ez a módszer nem épít ki kapcsolatot, hanem megvizsgálja a FIN-csomagok viselkedését. Abban az esetben, ha egy port nyitva van, a FIN-csomagok figyelmen kívül lesznek hagyva, mivel azok nem egy fennálló kapcsolathoz tartoznak. Ha a port zárva van, RST-csomagot küld. Ez egy helyes TCP működés, de létezik olyan rendszer, ahol ez a technika nem működik, pl.: Microsoft operációs rendszerek, mert a portjaik semmilyen előzmény nélküli FIN csomagra nem válaszolnak.
Előnye: Ez a fajta scan csendesebb, mint a TCP SYN scan. Adott esetben ahhoz is segítséget nyújthat, hogy eldöntsük, hogy a szkennelt rendszer Microsoft termék-e.
Hátránya: az előbbiek alapján az, hogy nem minden rendszer esetében működik.
Fragmentation scan
[szerkesztés]Itt az ötlet az volt, hogy a csomagokat néhány tíz byte-os méretűre fragmentáljuk. Azonban ezt is néhány packet filter, IDS, ips, stb. figyelmen kívül hagyja, mert nincs egyben a fejléc.
Hátránya: sok alkalmazás nem bírja lekezelni, segfault-ot okozhat (mint az ip fragment DoS).
TCP Idle scan
[szerkesztés]Ezt nem közvetlen a portszkenner rendszere viszi véghez, hanem egy köztes szereplő, amit Zombie-ként jelölünk meg. Ez idő tájt ez az egyetlen teljesen láthatatlan szkennelési módszer. Abban az esetben, ha tűzfalat telepítenek a célhostra, úgy néz ki számára, hogy a scan a Zombie-hosttól jön.
Zombie-hoszt: Ahhoz, hogy egy Zombie-host egy Idle-scanre alkalmas legyen, több feltételt is teljesítenie kell:
- A Zombie-hostnak tudnia kell a célhosttal kapcsolatot felépíteni
- A Zombie-host IPID-jának a portszkenner előtt láthatónak kell lennie.
- A Zombie-hostnak lehetőleg kevés hálózati forgalma legyen.
A tulajdonképpeni szkenneléshez a portscannernek szüksége van a Zombie aktuális IPID-jára. Hogy ezt kitalálja, felépít félig egy TCP kapcsolatot (úgy ahogy a SYN scan-nél). A port állapota csak alárendelt szerepet játszik, mivel a Zombie válaszcsomagja tartalmazza az aktuális IPID-ját. A portscant végző gép küld egy SYN-csomagot a célgépnek hamis forrás IP-vel. Forrás IP-nek a Zombie-host IP-jét adja meg. Abban az esetben, ha a port nyitva van, a célgép egy SYN|ACK csomagot küld a Zombienak. Mivel azonban nem volt nyitott kapcsolat, a Zombie egy RST-csomagot küld a célgépnek. Ezt a Reset-et eggyel növelt IPID-val küldi a célgépnek. Ha a port zárva volt, a célgép küld RST-csomagot a Zombie-nak. Ezt a csomagot a Zombie egyszerűen figyelmen kívül hagyja. Aztán a portscant végző gép lekérdezi a Zombie aktuális ID-ját, ugyanúgy, ahogy az elején tette. Ha az IPID kettővel nőtt, akkor a célgép szkennelt portja nyitva van. Ha az IPID csak eggyel nőtt, akkor a port zárva van.
UDP scan
[szerkesztés]- 1. UDP ICMP scan:
Az UDP egy állapot nélküli protokoll. Egy zárt portra kezdett forgalmazásra általában egy ICMP PORT UNREACHABLE üzenet jön vissza. Hátránya, hogy nem minden rendszeren működik és root jog kell hozzá, különben nem értesül az ICMP üzenetről. //nmap -p <port> -sU <host>
- 2. UDP recvfrom(), write() scan:
A Linux indirekt módon informálja a felhasználót, ha adat érkezett úgy, egy második write() hívás hibával tér vissza zárt UDP port esetén. Ennek előnye, hogy nem kell hozzá root jog.
Window scan
[szerkesztés]Ritkán használják, mert már rég lejárt fajta. A window scanning elég megbízhatatlan a port nyitottságának vagy zártságának megállapításában. Ugyanolyan csomagokat készít mint egy ACK scan, de ellenőrzi, hogy a window (ablak) mezőt megváltoztatták-e. Amikor a csomag eléri a célhostot, egy szerkesztési hiba megpróbál létrehozni egy ablakméretet a csomagnak. Ha a port nyitva van, akkor 1-esekkel jelöli meg az ablak mezőt a csomagban, még mielőtt visszaküldené azt a feladónak.
Maimon scan
[szerkesztés]Neve a készítőjétől származik, Uriel Maimontól. Az 1996. novemberi Phrack Magazin 49-edik kiadásában jelent meg. A rendszernek egy RST csomagot kell visszaküldenie akár nyitva, akár zárva van a port. Uriel azt is észrevette, hogy nagyon sok BSD (Berkeley Software Distribution) orientált rendszer egyszerűen eldob csomagokat, amikor nyitva vannak a portok, ezzel pedig a BSD alapú rendszerek fölébe kerekedhetünk.
Ismertebb portszkennerek
[szerkesztés]- Nmap (Unix/Windows)
- Superscan (Windows)
- Scanmetender Standard (Windows und GNU/Linux)
- Unicornscan (Unix)
- nhs nohack scanner (Windows)