Jak skenovat porty
Začínající lameři (a možná i budoucí skvělí hackeři) se často ptají, jak skenovat. Jasný, proč si nestáhnout nějaký windowsáckej haktech nebo jiný skener, nenapsat do něho IP adresu a chvilku nepočkat - určitě něco málo zjistíme. Jenže bezpečnost neustále stoupá, a proto se i skenování začíná stávat vědou nejen pro programátory, ale i pro "obyčejné'' uživatele.
Podívejme se tedy na různé typy skenování a použijme na to jeden z nejlepších programů: nmap. Nmap ve verzi 3.49 (můžete sehnat na www.insecure.org/nmap ) je velmi mocný nástroj. Umožňuje skenování typu SYN scan, TCP connect() scan, metody Stealth, Xmas Tree, Null scan, Ping scan, UDP scan, IP scan, Idlescan, ACK scan, Window scan, RPC scan, List scan a FTP bounce attack. Jak tedy vidíte, opravdu velké množství. Většinu z nich však může provádět jen superuživatel, protože některé vážnější skeny využívají přístup k syrovým datům, takže obyčejný uživatel nemá šanci, i kdyby přepsal zdrojáky nmapu.
Co nám skenování ukáže? Zjistíme, které TCP nebo UDP porty jsou otevřené, takže je skrze ně možný útok. Otevřený port přesněji znamená, že vzdálený stroj přijme spojení na tomto portu (ovšem neznamená to, že vám bude povolen vstup do počítače). Dále může být port filtrovaný, což znamená ochranu firewallem, filtrem nebo další síťovou "překážkou'', který zabraňuje nmapu zjistit, zda je port otevřený. Také může být zavřený, což značí, že daná služba na vzdáleném počítači prostě není spuštěna. Nmap může dále zjistit, co za operační systém na stroji běží, který uživatel spustil tu kterou službu, jména DNS a další. Prostě program k pohledání. Podívejme se na jednotlivé typy skenování:
SYN scan:
Tato technika se nazývá někdy i
polootevřené skenování(half-open), protože se nenaváže plné spojení. Při zaslání SYN paketu (tj. žádost o spojení) vrátí počítač paket s příznakem SYN a ACK. Nmap už ale nazpět potvrzení nepošle (pošle RST - žádost o ukončení spojení) - stačí mu to k ujištění, že na daném portu služba naslouchá. K tomuto typu skenování potřebujete rootovská práva, jinak jádro systému nemůže vytvářet takové pakety.
TCP connect() scan:
Základní forma skenování, využívána skoro všemi jednoduchými skenery. Na každý port se pokouší připojit skrze funkci connect(). Jestliže se to podaří, pak port naslouchá, v opačném případě není port dostupný.
Tento typ skenování může využívat libovolný uživatel; je to defaultní typ skenu. Má však velkou nevýhodu - je velmi snadno vypátratelný; v log souborech se nacházejí údaje o spoustě služeb, které přijaly funkcí accept() spojení a ihned byly ukončeny.
FIN scan:
Při tomto skenování je poslán na daný port TCP paket s příznakem FIN, který říká, že náš počítač si přeje ukončit spojení. Protože je TCP přenos duplexní, čeká se ještě na odpověď z dotazovaného počítače. Ten pošle odpověď, pokud je daný port otevřený, jinak nedostaneme nic.
Xmas scan:
Xmas scan posílá pakety s nastavenými příznaky FIN, URG a PSH. Nezjistil jsem, co přesně tato kombinace dělá, ale myslím, že jde v podstatě o podobný typ scanu jako FIN scan, pouze je větší jistota (díky příznaku URG - urgent (naléhavý)), že bude potvrzeno uzavření spojení. PSH (Push) značí, že segment obsahuje nějaká data, proto je takovýto segment v kombinaci s příznaky FIN a URG podivný a vyžaduje další poslání zprávy klientovi. Ale je to pouze moje domněnka.
Null scan:
Paket null scanu nemá žádné nastavené příznaky. Protože při normálním spojení je nastaven minimálně příznak ACK, dotazovaný počítač pošle zpět oznámení o chybě (příznakem RST - odmítnutí spojení). Z toho můžeme opět usoudit, který port je otevřený a který zavřený.
Připomínka: při skenování FIN, Xmas a Null dotazovaný počítač posílá zpět pakety s příznakem RST. Je tu však problém s Windows 95/NT. Microsoft si opět zavedl svůj "standard'', takže tento typ skenování nelze na těchto systémech použít. Naopak je ulehčeno rozpoznání operačního systému - takže pokud vám tyto skeny řeknou, že všechny porty jsou uzavřené a SYN scan ukáže některé otevřené, pak štouráte do windowsáckého systému. Existuje něco málo systémů, které dělají to samé, je jich ale opravdu málo a z asi nejznámějších by bylo dobré jmenovat Cisco a HP/UX.
Ping scan:
Tento scan je jednoduchý a pouze zjišťuje, zda je daná uživatel sítě dostupný. Zkouší to zasíláním paketu ICMP echo request, což je úplně ten samý, co využívá program ping. Relativně dost serverů však tento typ skenování blokuje.
UDP scan:
Stejně jako existují neznámější aplikační protokol TCP, existuje i protokol UDP, neboli
User Datagram Protocol. Ten slouží spíše jen k servisním a kontrolním službám. Při skenování se zašle paket s nastavenou délkou dat na 0 bytů. Pokud dotazovaný počítač odpoví zprávou ICMP port unreachable (nedostupný port), pak je port zavřený. Jinak musí být logicky otevřený.
UDP je celkem dost pomalý (nekontroluje se, zda paket dorazil do cíle), proto se může skenování stát záležitostí na dlouhý večer. Linux pošle takových zpráv přibližně 20 za 1 sekundu, Solaris dokonce jen 2 zprávy za sekundu. A Windows? Tak tam se zase nedrželi standardů a žádné zbržďování nedělají. To umožňuje prozkoumat všech 65536 portů za velmi krátkou dobu!
IP protocol scan:
Při této technice je na vzdálený počítač zaslán syrový IP paket bez dalších dat. Pokud počítač pošle zprávu ICMP protocol unreachable (protokol nedostupný), pak je port zavřený. Otevřený port nic nezasílá.
Některé systémy (AIX, HP-UX) zprávy o nedostupnosti protokolu nezasílají. Pak se zdá, že všechny porty jsou otevřené.
Idlescan:
Toto je taková
scannerská lahůdka. Pořádně jsem ani nezjistil, co je zač. ;-) Na skenovaný počítač jsou zasílány pakety s jinou IP adresou, než kterou máme my. Počítač s danou IP adresou musí být v provozu. To je opravdu vše, co jsem se dozvěděl. :-)
ACK scan:
Také celkem pokročilý typ scanování. Slouží hlavně k testování firewallů, zda to nejsou jen jednoduché zídky na ochranu před "primitivními'' typy skenování. V podstatě zasílá pakety s příznakem ACK a náhodným pořadovým číslem odesílaného a přijatého bytu. To by mělo zaslat zpět odpověď RST (při prvním spojení musí být v prvním paketu nastaven příznak SYN). Pak je port pojmenován nmapem jako nefiltrovaný. Když nedojde nic, je zavřený. Otevřený se téměř nikdy neobjevuje. Jak jsem říkal, je to věc hlavně k testování.
Window scan:
'Window' zde
nesouvisís operačním systémem Microsoftu, ale s velikostí okna TCP. Zjednodušeně TCP okno znamená, do jaké velikosti může uživatel zasílat data danému stroji, než dostane potvrzení o tom, že data byla doručena. Window scan se podobá hodně ACK scanu, ale lépe nalézá otevřené porty. Tímto scanem lze zjistit otevřené porty u některých systémů, jako je Cray, OpenVMS, FreeBSD, OpenBSD, MacOS, NetBSD, IRIX a další.
RPC scan:
Tento scan otevírá porty a zaplavuje je příkazy NULL programu SunRPC. Může tak zjistit, zda dané porty jsou RPC portyl, popř. který program na nich běží.
FTP bounce attack:
Zde se využívá vlastnosti ftp protokolu (podle RFC 959), že se mohu na port připojit z určitého serveru a tvářit se, že jsem připojen odkudkoliv ("proxy server''). Toto bylo použitelné v roce 1985, kdy byl RFC 959 napsán. Dnes se proti tomuto servery brání, ale přesto může existovat takováto díra, tj. skenování přes "proxy'' ftp server.
Nmap nabízí ještě další pomůcky, z nichž bych jmenoval např. určení typu operačního systému, posílání fragmentovaných paketů (což může někdy ztížit firewallu detekci scanu), logování scanů, používání návnad (tj. skenovaný počítač si myslí, že je skenován z více strojů). Dobré je také použít skenování, při které si firewall myslí, že přichází z portu např. 53 (DNS) nebo 20 (FTP-data) - jsou to často povolené porty, protože bez DNS by síť pořádně nefungovala. Nmap dále umí např. vybírat náhodně ze seznamu počítačů a skenuje je napřeskáčku - tím klesá možnost odhalení skenování, protože jednotlivé pakety nechodí pravidelně. S tím souvisí i schopnost posílat pakety po určitých intervalech - od šíleného tempa, kdy se čeká 0,3 sekundy a odezvu ( tzn. jen pro rychlá připojení, modemisti si můžou nechat zajít chuť) až po paranoidní módy, kdy mezi posláním dvou paketů uběhne doba 5 minut. Také je možnost paralelního skenování, což je vlastně to samé, jako byste spustili několik nmapů za sebou. Nmap toho umí opravdu hodně; schopnosti skenovat celé sítě či domény už rozebírat nebudu.
Jak jsem říkal na začátku, skenování je věda a vymýšlet všelijaké kombinace typů skenování je pro hackera nutnost. Pokud chcete dobře pochopit základní principy skenování, nezbývá nic jiného než skenovat a skenovat.