A biztonságos kommunikációnak több egymástól függetleníthető és mégis egymással összefüggő összetevője van:
• Sértetlenség: Annak garantálása, hogy hibamentesen (változás nélkül) ér célba egy elküldött üzenet, illetve egy esetleges hiba detektálható, így újraadással javítható.
• Hitelesség: A sértetlenség önmagában még nem garantálja, hogy az üzenetet valóban az küldte, akit feltételezünk, pusztán azt, hogy a hálózati továbbítás során nem sérült. A hitelesség a sértetlenségen felül a vevő fél felé garantálja, hogy az adott üzenet a feltételezett küldőtől származik és annak tartalma nem módosult.
• Letagadhatatlanság: A letagadhatatlanság a hitelességnél annyival több, hogy ez esetben nem csak a vevő felé, hanem tetszőleges harmadik személy felé is igazolható, hogy egy adott üzenetet (megrendelést, nyilatkozatot) a valódi küldő küldte, tettét letagadni nem tudja. A letagadhatatlanság követelményét csak az úgynevezett aszimmetrikus vagy nyilvános kulcsú kriptográfia módszereivel lehet biztosítani, amikor már a harmadik fél számára is bizonyítható, hogy az aláírást ki készítette.
• Bizalmasság: A biztonságos kommunikáció kapcsán legtöbben a bizalmasság, avagy titkosság biztosítását értik. Kriptográfiai módszerekkel ugyanis elérhető, hogy olyan formában kódolva továbbítódjon egy üzenet, hogy azt egy támadó lehallgatva, a titkos kulcs ismerete nélkül ne értse meg, illetve szigorúbb esetben magának az üzenetnek a tartalmára még valószínűségi alapon se tudjon következtetni.
• Távoli azonosítás: A mennyiben két fél személyesen még nem találkozott, illetve kettejük között nincs biztonságos (manipulálhatatlan, lehallgathatatlan) csatorna (pl. személyes találkozó), akkor egyéb módszerekkel, tipikusan külső szereplő(k) bevonásával kell biztosítani, hogy őket egymásnak biztonságosan mutassák be és a későbbiekben hitelt érdemlően tudják egymást azonosítani. Gyakorlatban a távoli azonosítást az úgynevezett elektronikus igazolványok rendszerével, illetve ezen igazolványok hitelességét biztosító PKI (Public Key Infrastructure) infrastruktúrával oldják meg
2 Támadási módszerek
A támadásokat kiváltó okok többfélék lehetnek, általában a következők valamelyike:
• a támadó hasznot akar húzni a dologból, haszonszerzésre törekszik, előfordulhat, hogy el akarja adni más személyeknek a felhasználó adatait,
• a támadó a szolgáltató megítélését, hírnevét akarja gyengíteni, ezzel kárt okozva a szolgáltatónak, mivel kevesebben bíznak meg benne ezután
• a támadó bizonyos értelemben jó szándékú, csak a rendszer hibáira akarja felhívni a figyelmet
• a támadás lehet egyszerű erőfitogtatás, szórakozás
• ugródeszka keresése más gépek feltöréséhez
A támadások megkülönböztethetők a szerint is, hogy a támadó a hálózaton keresztül, a hálózati biztonsági beállítások kijátszásával (külső); vagy e nélkül (belső) jut információkhoz, vagy bénítja meg gépünket. A támadások ellen elég nehéz konkrét megoldást nyújtani, de általánosságban elmondható, hogy a legtöbb esetben elkerülhetőek, kivédhetőek, ha megfelelően vannak beállítva a felhasználók jogosultságai, az erőforrásokhoz való hozzáférés, hálózati paraméterek.
Nyilvánvaló, hogy a kliens és a szerver mind belső mind külső módon támadható, hiszen mindkettő kapcsolatban van a hálózattal. A köztük lévő hálózat esetén nem értelmezhető ez a megkülönböztetés.
Belső támadásnak nevezünk minden olyan támadási módszert, melyet olyan felhasználók valósítanak meg, akik már a rendszerrel szemben valamilyen bizalmi státuszban vannak (például van jelszavas hozzáférésük egy adott kiszolgálóhoz), így nem kell a hálózati biztonsági beállításait kijátszaniuk. A gyakorlatban a támadások nagy hányada belső támadás, ugyanakkor egy sikeresen megvalósított külső támadás célja sok esetben a rendszerhez való hozzáférés, és azon valamilyen belső támadás végrehajtása. A következőkben a belső támadások alapvető módszereit vesszük számba.
• Fork bomba (fork bomb): Olyan program, amely a fork() rendszerhívás segítségével, saját magát több példányban elindítja, s így feleslegesen emészti fel a processzoridőt és memóriát. Védekezni ellene erőforrás korlátozással lehetséges.
• Puffer túlcsordulás (buffer overflow): Programozási hiba folytán, ha egy puffer az adott méretén túlírható, akkor a függvény visszatérési címe átírható. Ennek az oka, hogy a C fordítók fordításkor nem figyelik a tömbhatár túllépést, illetve vannak olyan függvények, melyek nem ellenőrzik a puffer méretét írás előtt. Így az adott rendszeren a futó program jogaival tetszőleges más programok is futtathatók. Manapság egyre többféle megjelenése van ezen támadási formának. Nem csupán kiszolgáló programok, de akár ügyféloldali programok (pl. médialejátszó, webböngésző) ellen is készülnek hasonló támadást megvalósító kártékony programok
• Ismert tmp fájl támadás (known tmp filename attack): A lényege, hogy egyes programoknak a /tmp könyvtárba írt fájljainak neve kitalálható, így még a program indítása előtt, ezzel a névvel létre lehet hozni egy linket, mely egy másik fájlra mutat. Ezzel az eljárással olyan fájlokat módosíthatunk, amelyhez egyébként nincs jogunk.
• Exploit-ok: olyan előre gyártott programocskák, melyek minden különösebb szakértelem nélkül rendszergazdai jogköröket adhatnak az újdonsült támadóknak. Általában egy-egy program biztonsági hibái alapján készülnek, tudván, hogy nem minden rendszeren végzik el egy hiba bejelentése után az érintett programok biztonsági frissítését.
Ezekkel a módszerekkel lehetőség van a számítógépen tárolt adatok illetéktelen felhasználására. Régebben csak a szerveren tárolták a jelszavakat, ezért inkább a szervert kellett a támadások elleni védelemre felkészíteni. Az újabb böngészőkben megjelent azonban egy új kényelmi szolgáltatás, a felhasználó jelszavainak automatikus beírása. Ez felajánlja a felhasználónak, hogy adott felhasználói névhez tartozó jelszavát eltárolja, így a felhasználónak nem kell azt minden egyes alkalommal begépelnie. Így viszont egy újabb támadási pont keletkezik, ezúttal a kliens oldalon, hiszen ezek a jelszavak is egy fájlban tárolódnak valahol.
A támadók legkönnyebben a felhasználók nem megfelelő jelszóválasztását és gondatlanságát kihasználva szerezhetik meg a jelszót. Ilyen támadáshoz nem is feltétlenül szükséges számítástechnikai ismeret. Nagyon gyakori, hogy a felhasználókat ismerve könnyen kitalálható az általuk használt jelszó, mivel az valamilyen kedvencük (háziállat, sportoló, zenész) neve, saját adatuk (születési hely, lakóhely, születésnap), stb. Szintén sűrűn előfordul, hogy a számítógép monitorára ragasztanak egy cetlit, amire felírják az általuk használt jelszót, így azt bárki láthatja.Külső támadásnak nevezzük azokat a támadásokat, melyek a hálózati biztonsági beállítások kijátszásával próbálnak egy rendszerhez jogosulatlanul hozzáférni. A külső támadások irányulhatnak információ megszerzésére, törlésére, egy szolgáltatás megbénítására vagy speciális erőforrások jogosulatlan felhasználására (pl.: belső biztonsági rendszerhez hozzáférés, kiszolgáló erőforrásainak kihasználása• IP cím hamisítás (IP address spoofing): az IP datagram alapú protokoll, melyben a kommunikáló felek építik fel a teljes IP fejlécet. Emiatt elképzelhető, hogy egy hálózati eszköz olyan üzenetet küldjön, melyben az IP datagram feladóját meghamisítja, abba nem a valós IP címét helyezi. Ugyan a feladó ekkor az IP útválasztása miatt nem kapja meg a válaszüzenetet, de látni fogjuk, hogy egyes támadások esetén erre nincs is szükség. Az esetek kis részében az IP hamisítás kiszűrheti például úgy, hogy bizonyos helyekről egyértelműen meghatározható címeket fogadunk csak el (pl. egy privát hálózatban gyanús lehet egy, a hálózati maszkhoz nem illő IP cím megjelenése), de általánosságban csak speciális protokollok segítségével bizonyosodhatunk meg az IP datagramokban levő IP címek valódiságáról (pl. IPSec).
• Névszerver átejtés (DNS spoofing): a támadás lényege, hogy az áldozat egy névfeloldással hamis információt kapjon. Ez elérhető az áldozat DNS szerverének feltörésével, vagy hamis DNS válaszüzenet küldésével a DNS szerver nevében (a DNS lekérés UDP protokollon megy, egy megfelelő hálózati beékelődéssel pedig már nagyon könnyű meghamisítani a választ). A támadással elérhető, hogy az áldozat másik hálózati eszközzel lépjen kapcsolatba, mint amivel eredetileg szeretett volna. A DNS átejtéssel a támadó kikényszerítheti, hogy az áldozat kapcsolatot kezdeményezzen vele (pl. jelszóval elérhető szolgáltatás eltérítése esetén megszerezheti a jelszót, melyet a gyanútlan áldozat elküld neki).
• TCP/UDP átejtés (TCP/UDP spoofing): Hibásan implementált protokollverem, vagy protokollhiányosságok miatt a már felépült, illetve kezdeményezett kapcsolatokat egy harmadik személy „elrabolhatja” vagy idegen csomagokat csempészhet bele
Szolgáltatás lebénítására irányuló támadási módszerek (Denial of Service, DoS) célja egy szolgáltatás lelassítása, megakasztása. DDoS (Distributed Denial of Service, Elosztott DoS támadás) esetén sok “ártatlan” számítógépre támadóprogramot telepítenek a tulajdonos engedélye (és akár tudta) nélkül, melyekről később egy időpontban indul “elosztott” támadás a célgép ellen. A támadott erőforrás alapján néhány példa DoS támadásokra:
• A merevlemez kapacitás elleni támadás lehet olyan események előidézése egy adott hálózati kiszolgálón, melyek naplóbejegyzést okoznak. Rosszul tervezett kiszolgáló esetén a naplóbejegyzésekkel megtöltött merevlemez több szolgáltatás leállását is okozhatja (pl. levelezés, webszerver, stb.).
• A számítási kapacitás elleni támadások a kiszolgálón nagymértékű processzorterhelést okoznak. A támadást általában olyan, nem várt eseményekkel váltják ki, melyekre a támadott program hibásan van felkészítve. Ilyen esemény lehet például egy nem specifikált értéket tartalmazó üzenet egy adott protokoll felett. Sikeres támadás esetén a támadott program végtelen ciklusba esve emészti fel a kiszolgáló számítási kapacitását.
• A sávszélesség elleni támadásokat legtöbbször a már említett DDoS módszerrel valósítanak meg. Ilyenkor általában egy, az Interneten elérhető hálózati kiszolgáló hasznos forgalmát szeretnék kiszorítani nagymennyiségű haszontalan forgalom generálásával. A már több nagyvállalat Internetes portálja ellen bekövetkezett DDoS támadások tapasztalata, hogy ezen támadások kivédése általában nagyon sok pénzt és energiát emészt fel.
• Egyéb hálózati erőforrás elleni támadások is elképzelhetőek. Ilyen lehet például akár egy DHCP kiszolgáló címterének szándékos kimerítése vagy egy hálózati switch MAC címtáblájának túltöltése is.
Néhány ismertebb gyakorlati példa DoS alapú támadásokra:
• SYN elárasztás (SYN flooding): Ez a támadási típus olyan TCP csomagokkal árasztja el gépünket, melyekben a SYN flag értéke 1, azaz hatalmas mennyiségű kapcsolat kezdeményezését jelző csomagot kapunk, mely látszólag egy olyan géptől érkezik, ami nem érhető el. Mialatt gépünk a hamis SYN csomagok kiszolgálásával foglalkozik, nem marad elég erőforrása, hogy a valódi kapcsolatkezdeményezéseket kiszolgálja.
Előfordul olyan SYN elárasztás is, mikor a támadó az áldozat címét helyezi feladóként a SYN üzenetbe, majd ezt nagyon sok helyre elküldi. Ebben az esetben a címzettek a hamis feladó alapján nem a támadó, hanem az áldozat felé küldenek nagyon sok SYN/ACK üzenetet. Ebben az esetben a támadónak nem is kell közvetlen kapcsolatban lennie az áldozattal.
• Land attack: lényege, hogy valaki olyan csomagot küld, aminek a feladóját úgy hamisítja meg, hogy a címzettel essen egybe, ami egy végtelen ciklusba kergeti a fogadót, és bizonyos operációs rendszerek esetén a számítógép lefagyását eredményezi. Ezzel a módszerrel nem csak számítógépek, hanem routerek, hálózati nyomtatók is támadhatók.
• Smurf attack: Egy adott hálózatban olyan ping csomagokat küldenek el broadcast üzenetként, melyben feladóként a megtámadni kívánt gép van feltüntetve. Ezért visszafelé hatalmas mennyiségű válaszüzenetet fog kapni a megtámadott számítógép, melyek fogadása teljesen felemészti a rendszer erőforrásait. Ilyen volt például néhány éve az Amazon elleni támadás is.
• A halál pingje (Ping of Dead): A hálózati operációs rendszerek (UNIX, Windows, stb.) azon hibáját használta ki régen, miszerint olyan ICMP csomagot küldtek a támadott gép felé, mely 64 kB-nál nagyobb volt, s ettől a rendszer azonnal lefagyott. Az újabb verziókban már javították ezt a hibát.
• Könnycseppek (Teardrop): Az ilyen jellegű támadások lényege az, hogy olyan TCP és UDP csomagokat küldünk a célgépnek, melyek fejléce valótlan adatokat tartalmaz. Számítógépünk ezen hamis adatok alapján próbálja meg összerakni a teljes csomagot, melynek eredménye az lesz, hogy gépünk iszonyatosan lelassul
• Szaglászás (Sniffing): Hálózati forgalmat figyelhetünk vele, mely segítségével értékes információhoz juthatunk. Segítségükkel védekezni is lehet a támadások ellen, ezért bővebben a védekezésről szóló részben lesz róluk szó.
• Portpásztázás (Portscan): Egy hálózati eszköz nyitott portjait ellenőrizhetjük e módszerrel. Szintén használható védekezésre is, így bővebben a védekezésről szóló részben lesz róla szó
A jelszavakat általában egyirányú titkosítással kódolt formában tárolják (pl.: hash). Ez azt jelenti, hogy tipikusan a jelszótárolási technikáknál, nem magára a rejtjelezett adatra vagyunk kíváncsiak, hanem inkább a kódolt adatot hasonlítjuk össze, a rejtjelezve tárolt adattal. Ez csak akkor lehet azonos, ha ugyanazt a jelszót, adatot adtuk be a titkosító programnak. A probléma az, hogy ha ismerjük a titkosító eljárást, akkor próbálgatással kideríthető az eredeti jelszó. A próbálgatásra is többféle eljárás alkalmazható.
Szótár alapú (Dictionary Based) támadás arra a feltételezésre épít, hogy a felhasználók többsége a saját anyanyelvének valamely szavát használja jelszóként. A program egy listából sorba veszi a szavakat, az ismert titkosító eljárással kódolja, s ha ez megegyezik a tárolt alakkal, akkor megvan a jelszó. A „Nyers erő” (Brute force) támadáskor a program az összes alfanumerikus karaktersorozatból tetszőleges sorrendben összerak szavakat, majd ezt kódolva hasonlítják a tárolthoz. Ezzel a módszerrel ugyan mindig megtalálhatjuk a jelszót, de nem mindegy, hogy mennyi időt fektetünk be. A jelszavak tipikusan ne legyenek túl rövidek, ne legyen értelmes szó, és tartalmazzon kis és nagybetűket, számokat is. A biztonságos használat érdekében célszerű a jelszót bizonyos időközönként lecserélni.
A kliens oldalon leginkább a felhasználókat szabályozva védekezhetünk. Tudatosítani kell a felhasználóban, hogy mennyire fontos a jelszó titokban tartása. Nem engedhető meg neki, hogy azt leírva tárolja a számítógép közelében. Fel kell hívni a figyelmét arra, hogy ne engedje másoknak figyelni a billentyűzetet, miközben a jelszavát megadja. Az sem engedhető meg, hogy bárkivel telefonon közölje a jelszavát, még akkor sem, ha az a valaki esetleg az informatikai osztály alkalmazottjának mondja magát. A böngésző automatikus jelszóbeírásának használatát is érdemes tiltani. Ismertetni kell a felhasználókkal a jelszóválasztás fenti kritériumait. Amennyiben ezeket nem tartja be, akár büntető szankciókat is kilátásba helyezhetünk. Ilyen és ehhez hasonló szabályok alkalmazásával a kliens oldalt is biztonságosabbá tehetjük a belső támadásokkal szemben.
A felhasználók csak kódolt formában levelezzenek, továbbá a szerver is képes legyen kódolt levéltovábbításra. Ehhez szükséges programok pl. a gpg, vagy pgp, illetve szerveroldalon pl. postfix-tls (levéltovábbító).
A szolgáltatás megbénítására irányuló támadások ellen a leghatékonyabb védekezés a hálózati eszközök paramétereinek figyelmes beállítása, s maga a számítógép erőforrásaihoz való hozzáférés megfelelő beállítása. Például TCP SYN elárasztás ellen Linux alatt az alábbi beállítás szükséges a /etc/network/options fájlban: syncookies=yes, és spoofprotect=yes.
A külső támadások ellen hálózatfigyelő, integritást ellenőrző programcsomagok használatával védekezhetünk. Ezen programok segítségével megoldódnak a szaglászásból származó problémáink, nyomon követhetjük adatforgalmunkat, titkosíthatjuk hálózati kapcsolatainkat, ellenőrizhetjük nyitott portjainkat. Óvatosan kell használni őket, mivel ugyanúgy használhatók védekezési és támadási célokra is. Két fő csoportjuk van, a sniffer-ek és a portscan-ek.
A „sniffing”, szaglászás igazából egy szinonimája annak, hogy egy a számítógépen futó program segítségével betekintést nyerhetünk az adott hálózat adatforgalmába. Ennek általában két célja lehet:
• Hibaelhárítás, hálózati adatforgalom elemzés, analízis.
• Felhasználói nevek és jelszavak jogosulatlan megszerzése.
Ezen programok működési alapja, hogy az adott számítógép a hálózatban nem csak a neki címzett csomagokra figyel, hanem az összes csomagra, mely a helyi hálózaton áthalad. Ezt a hálózati kártya ún. „promiscuous” üzemmódba történő átkapcsolásával lehet elérni. A snifferek futásának detektálása is a hálózati kártya promiscuous módjának beállításával függ össze. A detektorok működési elve a következő:
A program végig pingeli a lokális hálózatot, így megkapja az összes hálózati interfész IP illetve fizikai (MAC) címét. Ezután az ARP cache-ben, ahol az IP címek össze vannak rendelve a hálózati kártya fizikai címével, véletlenszerűen összekeveri a megfeleltetéseket, majd újra végig pingeli a hálózatot. Amelyik számítógép erre is válaszol, annak a hálózati interfésze biztosan promiscuous módba van állítva, persze ez még nem biztos, hogy azt jelenti, hogy ő sniffert futtat, mert akad másfajta program is, mely átállítja a hálózati interfészt.
A snifferek támadási célú felhasználása ellen az egyik leghatásosabb védekezési módszer az, ha az információkat kódolt formában küldjük át a hálózaton, így azokat a szaglászó programok nem tudják értelmezni, visszafejteni. A hálózati kommunikáció védelmével később, a 4. fejezetben foglalkozunk.
A portpásztázás egy eljárás, mellyel megállapítható, hogy egy távoli számítógépen mely portok vannak nyitva, zárva, vagy tűzfallal védve. A portscan szabályos vagy szabálytalan kapcsolatot kezdeményezés az összes vagy csak a privilegizált portokra. Ezáltal feltérképeződnek a számítógép támadható portjai, vagy egyszerűen futó szolgáltatásokat lehet meghatározni vele.. Mivel az 1–1024 portok előre meghatározott portok (well-known-ports), azaz a portszámhoz szolgáltatást rendeltek, mint (pl.: 21 ftp, 22 ssh, 23 telnet stb.), így a portszámból következtethetünk a vizsgált számítógép szolgáltatásaira.
Működésük általában igen egyszerű, ha ismerjük a TCP/IP modellben a kapcsolatkialakítás menetét. A program küld a célszámítógép vizsgálandó portjának egy kapcsolat kezdetét, vagy kapcsolat lezárását biztosító csomagot, majd vár a válaszra, melyből ki tudja deríteni azt, hogy az adott portszámhoz tartozó szolgáltatás fut-e a figyelt számítógépen vagy nem. A nyitott portok számának kiderítése fontos a gép védelme szempontjából, ugyanakkor egy nagyon jó támpont a célszámítógép feltörési stratégiájának kidolgozásához is. A számítógépek ellen irányuló támadások ezen részének felderítése eléggé egyszerű, hiszen a legtöbb portscan program sorban és egymás után nagyon gyorsan teszteli a PC portjait, így ha egy adott gépről sok kapcsolat indul a célgép különböző portjaira, akkor ezen számítógépeket érdemes kitiltani a számítógépes hálózatunkból.
Sok rendszergazda rossz néven veszi, ha portscan alá veszik az általa felügyelt kiszolgálót. Általánosságban elmondható viszont, hogy a manapság elterjedt operációs rendszerek által implementált TCP és UDP protokollvermek ezen kapcsolódási kísérletektől nem omlanak össze, azok szoftverében kárt nem okoz.
A portscan egyes típusai [5]:
• TCP connect() scan: a legalapvetőbb fajtája a pásztázásnak, amikor az operációs rendszer által nyújtott connect() rendszerhívást használjuk egy kapcsolat megnyitásához a minket érdeklő portokon. Ha a távoli gép vizsgált portján szolgáltatás elérhető, akkor a connect() hívás sikeresen lefut. Legnagyobb előnye, hogy nagyon egyszerű megvalósítani és használatához nincs szükség az adott operációs rendszeren adminisztrátori jogosultságra. Másik előnye a gyorsaság. Míg egy portonkénti portscan a TCP időtúllépési mechanizmusa miatt sokáig is eltarthat, addig sok kapcsolatot párhuzamosan használva felgyorsíthatjuk a vizsgálatot.
• TCP SYN scan: ezt a módszert gyakran nevezik „half open” ellenőrzésnek, mivel nem nyitunk meg egy teljes TCP kapcsolatot. Elküldünk egy SYN csomagot, majd választ várunk. Egy SYN/ACK esetén az adott porton egy szolgáltatás figyel, míg RST választ esetén a porton nem figyel szolgáltatás. Amennyiben SYN/ACK választ kapunk, feljegyezzük a port nyitott voltát, majd eltérően a szabványos TCP hívásfelépítéssel egy RST csomaggal zárjuk a félig felépült kapcsolatot. Ennek a módszernek előnye, hogy sokkal kevesebb helyen naplózzák az ilyen kísérletezéseket, ugyanakkor hátránya, hogy az adott rendszeren az alacsonyszintű csomagkezelés miatt rendszergazdai jogokkal kell futtatnunk a portscant.
• TCP FIN scan: vannak helyzetek, amikor a SYN scan használata sem elég. Néhány tűzfal és csomagszűrő ugyanis figyeli az ilyen pásztázásokat is. A FIN csomagok viszont keresztüljuthatnak háborítatlanul. A módszer ötlete a következő: a zárt portoknak válaszolniuk kell a FIN csomagunkra egy megfelelő RST-vel. A nyitott portoknak azonban figyelmen kívül kell hagyniuk a kérdéses csomagokat. Ez elvárt TCP viselkedés. Ennek ellenére bizonyos gépek (például a Microsoft rendszerei) nem megfelelőek ebben a tekintetben. Ezen rendszerek RST-t küldenek, figyelmen kívül hagyva a port állapotát, más rendszerekkel viszont ez a vizsgálat jól működik. Valójában néha hasznos is lehet ez a tulajdonsága a különböző rendszereknek, erre a következő alfejezetben még visszatérünk.
• UDP ICMP port nem elérhető - scan: az UDP datagram alapú protokol, semmilyen nyugtát, vagy hibaüzenetet nem kell válaszul küldenie egy kérésre. Szerencsére a legtöbb hálózati eszköz küld egy ICMP Port Unreachable (port elérhetetlen) hibát, amennyiben egy üzenetet küldünk egy lezárt UDP portra. Ezzel megtudhatjuk, hogy mely portok nincsenek nyitva, így kizárásos alapon, hogy melyek igen. Ebben az ellenőrzésbe be kell építenünk egy mechanizmust arra az esetre is, ha elvesznének csomagok, ebben az esetben ugyanis több fals pozitív találatunk lenne a nyitott portokra.
Egy hálózati eszköz operációs rendszerének felismerését ezen okok miatt tehát más módszerrel végzik. Az OS fingerprinting lényege, hogy a hálózati kommunikáció során olyan egyedi jellegzetességeket, „ujjlenyomatokat” keresnek az adatfolyamban, ami egyes rendszerekre jellemző, míg másokra nem. Ezen különbségek abból adódnak, hogy az egyes rendszerek fejlesztői az IETF de facto szabványainak, az RFC-knek [7] bizonyos ajánlásait másképpen értelmezik, vagy valamilyen indok alapján figyelmen kívül hagyják. Így egy hálózati kommunikáció alatt tucatnyi olyan árulkodó jelet találhatunk, mely csak bizonyos típusú rendszerekre jellemző. Ilyen jel volt az előző fejezetben említett TCP FIN scan esetén visszaküldött RST válasz. A továbbiakban ezen jelekből vesszünk sorra néhányat.
• TCP FIN próba: ebben az esetben küldünk egy FIN csomagot (vagy bármilyen másikat ACK vagy SYN flag nélkül) és várjuk a reakciót. A helyes RFC793 viselkedés nem reagálni. A szabványtól eltérő rendszerek (mint például: MS Windows, a BSDI, a CISCO, a HP/UX, a MVS és az IRIX) egy RST-t küldenek vissza. A legtöbb távoli operáció rendszer detektáló eljárás alkalmazza ezt a próbát.
• Hibás TCP flag próba: ez egy ötletes teszt melynek lényege egy definiálatlan TCP flag (64 vagy 128 értékű bitek) beállítása egy SYN csomag TCP fejlécében. A Linux rendszermagban megvalósított TCP verem egy adott verzióig (2.0.35-ig) ezt a flag-et megtartja beállítva a válaszban. Nem tudunk másik rendszerről, mely rendelkezik ezzel a hibával. Néhány rendszer azonban megszakítja a kommunikációt, ha ilyen csomagot kapnak.
• TCP ISN mintavétel: ennek a tesztnek az ötlete, hogy találjunk szabályosságokat a TCP protokollverem által választott ISN (Initial Sequence Number, kezdeti azonosítószám) választásában, amikor kapcsolatkérésre kapunk választ (emlékeztető: ez az a véletlenről induló szám, melyet minden egyes üzenetváltáskor a TCP növel eggyel. Feladata megakadályozni, hogy egy TCP kapcsolatba illetéktelenül beékelődjenek csomagok, így helyes megválasztása kényes pontja lehet a rendszernek). Ezek a tapasztalatok csoportokba oszthatók mint például a tradicionális 64K (régi UNIX rendszerek), véletlen növekményű (újabb Solaris, IRIX, FreeBSD, Digital UNIX, Cray és sok másik rendszerek), valódi véletlen alapú (Linux 2.0.*, OpenVMS, újabb AIX, stb). Windows rendszerek egy időfüggő megoldást alkalmaznak, ahol az ISN minden időegység alatt meghatározott mértékben növekszik.
• TCP kezdő ablakméret: az IP csomag fejlécében ez a szám mondja meg, hogy az adott gép mennyi fogadott csomag után küld vissza nyugtázást (ACK). Mivel ez egy, az operációs rendszerre jellemző konstans, sok rendszert be lehet azonosítani csupán ennek a számnak az ismerete alapján. Például az AIX az egyetlen operációs rendszer, ami 0x3F25 (16165) értéket alkalmazza. Az NT5-ben teljesen újraírt TCP veremben a Microsoft a 0x402E (16430). Érdekes módon ez ugyanaz az érték, amit az OpenBSD és FreeBSD rendszerek is alkalmaznak.
További próbák [8] az Nmap portscan program honlapján érhetőek el, mely ezen próbák alapján képes távoli operációs rendszer detektálásra is. Természetesen nem csak TCP alapú próbákat lehet végezni, például az ICMP protokollra is léteznek hasonló próbák.
Kérdéses, hogy van-e értelme védekezni a távoli operációs rendszer detektálás ellen, annak fényében, amit az 1.4. fejezetben a titkolózásra alapozott biztonság estén olvastunk.
Amennyiben mégis szükségét látjuk, hogy a kéretlen kíváncsiskodókat megtévesszük, Linux operációs rendszer estében lehetőségünk van különböző rendszermag foltokat telepítenünk [9]. Ezek a rendszermagban található TCP vagy egyéb protokollvermet úgy változtatják meg, hogy a távoli operációs rendszer detektálás során a rendszerre nem jellemző értékeket adjon vissza a kiszolgáló, megtévesztve ezzel a támadót.
Nincsenek megjegyzések:
Megjegyzés küldése