Skenování portů: jaká služba nám to běží?

V dnešním článku se pokusíme vysvětlit některé vaše dotazy a uvést některé názory na pravou míru. V druhé části se již podíváme na to, jak zjistit, která služba běží na určitém portu a který program a v jaké verzi tuto službu obsluhuje. Budeme pracovat s programy nmap a amap, ukážeme si jejich schopnosti a řekneme si, jaké mají nevýhody.

V dnešním článku navážeme na problematiku skenování portů. Původně jsem již žádný článek na toto téma nechtěl psát, jelikož mi přišlo, že je vše jasné a napsáno. Ovšem dotazy některých z vás mě přesvědčily o opaku. V dnešním díle se pokusím odpovědět na některé z nich, popíši fáze, v jakých probíhá skenování portů, a pak se podíváme na určité fáze, které nebyly v tomto miniseriálu rozebrány.

Ještě než se pustíme do vysvětlování, chtěl bych vám připomenout, že zkoušení těchto technik proti cizím počítačům nebo uživatelům může být trestné a přinejmenším je neetické. Pokud nemáte dostatek vlastních počítačů, pak vám doporučuji použit nějaké virtualizační nástroje (například Vmware).

Požadavky pro pochopení článku

Pokud přesně nevíte, co to je skenování portů nebo co to jsou porty, pak doporučuji první díl tohoto miniseriálu Skenování portů: teorie, kde je vše pěkně vysvětleno, také doporučuji druhý díl Skenování portů: techniky; ten již ovšem není pro pochopení článku potřeba.

Kdo potřebuje skenovat porty?

Proč skenujeme porty, je vysvětleno v prvním díle miniseriálu, ovšem zapomněl jsem v něm rozebrat, kdo potřebuje porty skenovat, takže to napravím zde.

Pokud nejste útočník (hacker, cracker) a jste pouze uživatelem, tak skenování portů nepotřebujete, jelikož otevřené porty si můžete zjistit pomocí příkazu netstat -a (Windows i Linux). Nebo můžete použít program s grafickým rozhraním, například Active ports. Jediná výjimka, kdy můžete potřebovat skenování portů, je tehdy, když váš počítač bude infikován nějakým vyspělejším virem nebo trojským koněm, který by dokázal poupravit systém tak, aby jeho přítomnost zatajoval (otevřený port by na výpisu programu netstat nebyl vidět). Ovšem jak moc je takováto technika rozšířena, nevím.

Pokud jste správce nějaké sítě s více počítači a servery, je pro vás skenování portů poměrně lákavé, a to z toho důvodu, že mít přehled nad porty všech stanic vyžaduje nějaké softwarové vybavení na každém počítači, kdežto skenování portů žádný software na každém počítači nepotřebuje. Stačí nám pouze program pro skenování portů, například nmap (pro Linux i Windows), který bude umístěn například na počítač, jenž se stará o dohled nad sítí. Nmap bude pouštěn pomocí nějakého skriptu jednou či vícekrát denně, výsledky skenování bude porovnávat s předchozími výsledky a při zjištění nějaké změny bude informovat správce. Ovšem ani tato varianta není stoprocentní, jelikož některé viry nebo trojské koně můžou porty otevírat pouze pro spojení z určité IP adresy a pro ostatní spojení můžou port filtrovat (tzn. bude se nám jevit jako zavřený).

Poslední velkou skupinou, která skenování portů využívá, jsou útočníci. Ti pomocí skenování portů mapují síť oběti a jednotlivé počítače, aby našli slabinu nebo získali další informace o síti, které mohou dále použít, například při sociálním inženýrství.

Skenování portů není všemocné

Skenování portů může objevit viry a trojské koně, jelikož velká část z nich si otevírá nějaký port a čeká, až se k tomuto portu připojí útočník a řekne jim například, co mají dělat. Pokud toto vir nebo trojský kůň udělá, pak ho můžeme skenováním portů odhalit. Ovšem nemusíme takto odhalit všechny, jelikož některé viry a trojské koně, jak jsem již psal výše, čekají na spojení pouze z určité IP adresy a pro ostatní spojení se může port jevit jako zavřený.

Ještě existují také viry a trojské koně, které otevírají síťový port, ale pro odchozí spojení. To znamená, že nečekají, až se k nim někdo připojí, ale samy se připojují k nějakému jinému počítači, většinou s tím důvodem, aby mu sdělily informace, které sesbíraly ve vašem počítači. Takovéto porty nemůžeme skenováním objevit. Je to úplně stejná situace, jako když si prohlížíte nějaké webové stránky a pro jejich stažení se otevřel port na vašem počítači, pomocí kterého probíhala komunikace. Tento port také nemůžeme skenováním portů objevit.

Porty pro odchozí spojení můžeme objevit právě programem netstat, který nám tyto informace vypíše, nebo nějakým jiným programem spuštěným na lokálním počítači. Možností objevení těchto portů bez přístupu k lokálnímu počítači je například pasivní analýza síťových dat.

V jakých fázích probíhá skenování portů?

  1. Nejdříve skenujeme cílový počítač (oběť) pomocí nějaké techniky probrané v článku Skenování portů: techniky nebo v článku K čemu lze zneužít FTP bounce-scanning: tím zjistíme, které porty jsou otevřené, které zavřené a které filtrované. Tato fáze může proběhnout, aniž by se oběť dozvěděla o útočníkovi.

    Vstupem do této fáze jsou porty, jejichž stav potřebujeme zjistit. Výstupem je stav každého portu (otevřený, zavřený, filtrovaný).

  2. V této fázi již víme, které porty jsou otevřené, a potřebujeme zjistit, o jakou službu se jedná. Jak jsem se již v dřívějších článcích zmiňoval, můžeme předpovědět, o jakou službu se jedná, pomocí čísla portu, jelikož existují nějaké standardy nebo doporučení, jaká služba patří k určitému portu, seznam naleznete na stránkách organizace IANA. Ovšem někteří správci používají nestandardní porty pro své služby například z důvodu jejich maskování. Takovéto chování bývá označováno jako security through obscurity (nehezky přeloženo „bezpečnost pomocí skrývání“). Při provádění této fáze již je potřeba komunikovat s obětí, tudíž se s největší pravděpodobností o vašem snažení objeví zmínka v log záznamech.

    Vstupem do této fáze jsou otevřené porty, u kterých chceme zjistit, jakou službu poskytují. Výstupem jsou služby, které běží na jednotlivých portech.

  3. Poslední fází skenování je zjistit, o jaký program se na určitém portu jedná. Toho je opět docíleno připojováním k oběti a výměnou dat. Tato fáze již také není neviditelná a oběť se o nás pravděpodobně dozví.

    Vstupem jsou otevřené porty služby běžící na těchto portech. Výstupem jsou programy a jejich verze běžící na jednotlivých portech.

Je zřejmé, že ne vždy je potřeba procházet všechny fáze, například správce sítě potřebuje vědět pouze, jaké porty jsou otevřené a zda se neobjevila nějaká změna. Kdežto útočník potřebuje znát i programy a jejich verze, aby se mohl na Internetu podívat, zda nebyly v těchto programech objeveny nějaké chyby, které by mu umožnily ovládnout počítač.

Fáze 2 a 3 často splývají v jednu, nebo je také fáze 2 přeskočena a služba se odvodí od běžícího programu. O těchto fázích se ovšem budeme bavit dále v tomto článku.

Fáze č. 2: rozpoznáváme službu (aplikační protokol) a program amap

Důležitá je otázka, jak rozpoznáme, jaká služba (jaký aplikační protokol se používá) nám běží na určitém portu. Musíme brát v úvahu, že některé služby komunikují v textovém režimu (ftp, smtp, www), jiné zase binárně (DNS, VNC). Každá služba slouží k jinému účelu, takže je komunikace jiná. Dále existuje mnoho služeb (aplikačních protokolů), některé jsou obecně známé, některé většina z nás nikdy neviděla, některé služby mají dokonce i schválně tajenou a nedokumentovanou komunikaci.

Nejlepších výsledků bychom nejspíše dosáhli, kdyby náš program uměl všechny „jazyky“, jakými služby hovoří, a znal jejich specifikace. Ovšem takový program by bylo velmi zdlouhavé vytvořit a testování každého portu by bylo velice neefektivní. My se v dnešním článku seznámíme s programem amap, který je původně určen pro Linux, ale díky knihovně cygwin funguje i pod systémem Windows (na stránce je vše v jenom balíku).

Program amap funguje na bázi tvz. spouštěčů (v originále triggers, snad vám tento překlad nevadí) a odpovědí (responses). Program naváže s daným portem komunikaci a zašle na něj spouštěč (určitá přesně definovaná data) a zaznamená si veškerá data přijatá z onoho portu a komunikaci ukončí. Následně vezme databázi (soubor) s předem definovanými odpověďmi a hledá určitou shodu s přijatými daty. Podle toho, jaké nalezne shody, nám oznámí, jaká služba na daném portu běží.

Tento program má k sobě přiloženy soubory se jmény appdefs.resp a appdefs.trig. Soubor appdefs.trig obsahuje všechny spouštěče, které program amap zná. Při skenování se zašlou na daný port všechny spouštěče, které amap zná, každý spouštěč je poslán v novém spojení. V souboru appdefs.resp jsou naopak odpovědi, které amap vyhledává. Oba soubory jsou pěkně a detailně popsány, takže doporučuji do nich alespoň nakouknout. Dále tu máme ještě soubor appdefs.rpc, který je používán také jako seznam spouštěčů, ovšem jak to tady přesně funguje, jsem nezjistil. Pokud někdo z vás ví, tak to prosím napište do názorů pod článek, děkuji.

Program většinou vypíše více variant ke každému portu, což není sice nejlepší, ale aspoň máme představu, co by tam tak mohlo být. Někdy to může být i výhodou, jelikož programy jako nmap vypíší pouze to, co je dle nich nejpravděpodob­nější, a vždy to nemusí být správně. Amap vypíše třeba více možností, ale co jsem zatím zkoušel, tak vždy ta správná varianta mezi odhadovanými byla.

Další nevýhodou – alespoň podle mě – je, že do odpovědí se zahrnuje i uvítací banner, čehož se znalostí databáze odpovědí mohu zneužít a uvítací banner připravit tak, abych zmátl skener.

Dost již bylo slov, teď k malé ukázce: provozuji FTP server na portu 23, jenž je původně určen pro telnet. Na obrázku je vidět, že v prvním případě si amap myslí, že na portu běží smtp a ftp, v závorce je ještě uvedeno, jakým spouštěčem byla vyvolána odpověď, která vyústila v detekci služby. V druhém případě jsem speciálně upravil uvítací banner na: GET: command DuFFxP ^220.*SSH lpsched khost ' ^HTTP/, abych zamezil efektivní detekci služby.

amap

Fáze č.3: rozpoznáváme program poskytující službu na portu a jeho verzi

Tato fáze je podobná jako předchozí, k detekci programu a jeho verzi se využívá odlišností v implementaci služby. Toto se dá používat jako nejspolehlivější metoda. Dále můžeme detekovat program a jeho verzi pomocí uvítacího banneru, což je asi nejjednodušší, ale nejméně spolehlivé, jelikož změna uvítacího banneru je velice jednoduchá a stále více správců tak činí.

Pokud chceme rozpoznat program a jeho verzi pomocí rozdílů v implementaci, tak na to budeme potřebovat specializované programy. Vytvořit program, který by uměl rozpoznat všechny programy obsluhující různé služby, je nesmysl, program by nebyl dostatečně efektivní. Z toho důvodu nejdříve zjišťujeme, jaká služba se na daném portu nachází, abychom pak sáhli po specializovaném nástroji právě pro tento protokol. Bohužel takovýchto specializovaných nástrojů příliš není. Nejvíce jich je pro protokol HTTP (např. hmap, httprint). Pokud budete hledat nějaký takovýto nástroj, použijte Google a hledejte řetězec „JMENO_PROTOKO­LU(SLUŽBY) fingerprinting“. Pokud jsou tyto nástroje aktualizované, pak s nimi dosáhnete nejspolehlivějších a nejpřesnějších výsledků.

Pokud se nám nepodaří najít žádný specializovaný program, pak nám nezbývá nic jiného než se spolehnout na uvítací bannery a obyčejný pattern-matching. Pod pojmem pattern-matching se ukrývá porovnávání odpovědí od oběti oproti databázi našeho programu a vyhledávání shody, jak to dělá amap. V takovémto případě nám nejspíše zase nejlépe poslouží náš nmap s přepínačem -sV.

Nmap naštěstí nespoléhá pouze na uvítací bannery, ale aspoň trošku se snaží o komunikaci s danou službou. Podle zkušeností mohu říci, že nmap je spolehlivý a přesný, pokud protistrana nemá upravený uvítací banner. To je totiž jeho největší slabina – pokud nmap narazí na uvítací banner, který se shoduje s nějakým v jeho databázi, tak již dále nepokračuje a má hotovo. Vše si opět ukážeme na obrázku a příkladě.

Samozřejmostí je, že nmap umí rozpoznávat i služby komunikující binárně. Jedná se o velice komplexní program, který je dále vyvíjen a udržován. Jeho databáze ve verzi nmap 4.21ALPHA2 obsahuje 3877 otisků (řetězců pro rozpoznání programu) a dokáže rozeznat 426 služeb.

nmap

V prvním případě proběhlo pouze skenování portů, ve sloupci služba (Service) jsou uvedeny služby pouze podle čísla portů, tzn. jaká služba se tam očekává. V druhém případě již proběhl sken se zjištěním služeb a programů běžících na portech. V tomto případě byl správně detekován náš FTP server běžící mimo svůj standardní port. V posledním případě jsem změnil uvítací banner u FTP serveru na „CheckPoint FireWall-1 secure ESMTP server“. Tento banner jsem si našel v souboru nmap-service-probes, pokud bych zadal banner, který zde není uveden, tak by nmap pokračoval v detekci dále a neoklamal bych ho. Sami vidíte, že nyní byly služba i program detekovány špatně. Dokonce se toto projevilo i v celkovém názoru na oběť, kterou nmap označil jako firewall.

Rady a postřehy

Pro fázi zjišťování stavu portů (fáze 1) doporučuji program nmap, který je velice rychlý a má mnoho možností. Nmap také doporučuji k zjišťování programů a jejich verzí (fáze 3), nmap tím automaticky zjišťuje služby. Ovšem to, zda nmap detekoval služby správně, bych ověřoval pomocí programu amap; pokud byla služba nmapem špatně detekována, pak byl i program špatně detekován.

Amap umí kromě rozpoznávání služeb také skenovat porty, ovšem tuto jeho vlastnost bych nepoužíval, je velice pomalá a nemůžete si vybrat, jakou techniku chcete ke skenování použít.

EBF16

Pokud budete chtít zjistit, jaký program a v jaké verzi se stará o zprostředkování služby, doporučuji použít specializované programy, pokud pro onu službu (aplikační protokol) existují. Získáte tím spolehlivější a přesnější výsledky.

Závěrem

Doufám, že se vám dnešní článek opět líbil a dozvěděli jste se něco nového. Bohužel k tomuto tématu na Internetu není tolik informací jako k ostatním, ale přece jsem pro vás alespoň něco málo našel. Doporučuji například dokumentaci k programu nmap nebo článek Introduction to HTTP fingerprinting, dále vyšly v časopise Hakin9 6/2006 dva články, které pojednávají o této tématice celkem podrobně.

Anketa

Kolik máte v domácnosti počítačů?

2 názory Vstoupit do diskuse
poslední názor přidán 10. 2. 2007 21:08

Školení web copywritingu

  •  
    Jak strukturovat text na webové stránce.
  • Tajemství atraktivního a úderného titulku.
  • Optimalizace webového textu pro vyhledávače.

Detailní informace o školení psaní pro web »