Požarni zidovi
Stalna, širokopasovna povezava v internet danes ni več nič nenavadnega. Ne le podjetja, tudi vse več posameznikov je s svojimi računalniki bolj ali manj stalno povezanih v internet. Žal so s tem tudi hudo izpostavljeni nevarnostim v njem.
Internetni varnostnik
Požarni zidovi (firewalls) so bili za običajnega uporabnika računalnika, ki se je tu in tam z modemom povezal v širše omrežje, še nekaj let nazaj le zanimivost. Tudi v podjetjih in organizacijah, ki obdelujejo zaupne podatke, so bili požarni zidovi pravzaprav nepotrebni, saj so med seboj komunicirali po lastniških, zaprtih omrežjih, ki so imela posebne varnostne mehanizme. A internet je spremenil vse. Nenadoma je postalo za delovanje teh sistemov ključno, da so odprti v internet. Tudi doma so se stvari začele naglo spreminjati, ko so postale dostopne hitre, širokopasovne povezave. Danes je požarni zid pomembnejši del računalniške opreme od protivirusnega programa. Če smo v internet povezani s stalno povezavo, je požarni zid nujnost. Pomembna je tudi za občasne obiskovalce interneta, ki uporabljajo klicni dostop. Organizacije z razprostranjenim krajevnim omrežjem, ki ga želijo delno ali v celoti povezati v internet, prav tako ne morejo shajati brez učinkovitega požarnega zidu. Kaj pravzaprav je požarni zid?
Kaj so požarni zidovi?
Večje stavbe poznajo požarne pregrade, ki ob ognjeni stihiji nepredušno ločijo posamezne prostore in s tem zmanjšajo nevarnost, da bi ogenj uničil celotno poslopje in ogrozil vse, ki so v stavbi. Ta gradbena prvina je postala navdih za računalniški sistem, ki podobno kakor požarna pregrada stavbo ločuje dva dela omrežja. Zapisali smo sistem, ker so požarni zidovi lahko izdelani kot strojna ali programska oprema, najpogosteje pa kot kombinacija obojega. Požarni zid praviloma ločuje notranje, krajevno omrežje računalnikov in zunanje, prostrano omrežje, navadno internet. So tudi drugačni načini rabe požarnih zidov, npr. ločevanje več podomrežij znotraj posamezne organizacije. Zadnje čase je priljubljena še ena vrsta: osebni požarni zidovi (personal firewall), ki varujejo posamezen računalnik proti zunanjemu omrežju, ki je lahko krajevno ali prostrano.
Požarni zid je prehod, skozi katerega poteka promet med dvema deloma omrežja. Ponavadi je en del krajevno (LAN), drugi del pa prostrano omrežje (WAN, navadno internet), vendar lahko požarni zid ločuje tudi dva dela krajevnega omrežja.
Pri požarnem zidu ne smemo pozabiti, da lahko deluje dvosmerno. Ne le, da varuje notranje omrežje pred vdori od zunaj, omogoča tudi omejevanje omrežnega prometa navzven, iz notranjega omrežja v zunanje. Takim požarnim zidovom pravimo dvosmerni. Nekateri preprostejši, predvsem osebni zidovi so zgolj enosmerni, preprečujejo vdore od zunaj. Tak je npr. osebni požarni zid, ki je vgrajen v Okna XP.
Protokoli
Preden si ogledamo, kako požarni zidovi delujejo, se moramo v grobem seznaniti z naravo delovanja omrežja. Računalniki, povezani v omrežje, si med seboj izmenjujejo podatke. Da je ta izmenjava mogoča, se morajo med seboj poznati. Način prepoznavanja naprav v omrežju, ugotavljanja njihovih naslovov in samo izmenjavo podatkov določajo protokoli, skupki pravil, ki v celoti določajo način izmenjave podatkov med napravami v omrežju. Skupine protokolov določajo vrsto omrežja. Danes je v računalniških omrežjih daleč najpogostejši sklad protokolov TCP/IP, ki omogoča delovanje interneta. Čeprav so bila omrežja TCP/IP zasnovana za vojaške potrebe, so presenetljivo malo varna. V veliki večini temeljnih protokolov, ki se uporabljajo v omrežju, je varnost zelo površna. Ta površnost je posledica dolge zgodovine, saj je bil internet, kot ga poznamo in uporabljamo, zasnovan že pred desetletji, njegovi tvorci pa so se ukvarjali predvsem s trdoživostjo, saj naj bi deloval tudi v vojni, ko bi bili lahko številni deli omrežja trajno poškodovani. Taka zasnova je tudi omogočila neverjetno širitev in današnjo prevlado interneta, saj so protokoli brez posebnih težav prenesli tisočkrat in tisočkrat večje obremenitve. S širitvijo interneta pa so seveda nastale tudi potrebe po večji varnosti. Razvitih je bilo kar nekaj protokolov, ki omogočajo večjo stopnjo varnosti, žal pa to niso bili temeljni protokoli interneta, temveč protokoli na višjih slojih.
Resnici na ljubo, že kar nekaj let čaka na uveljavitev tudi varna različica temeljnega internetnega protokola, imenovana IPSec. Žal pa je trenutna razprostranjenost starega ne varnega temeljnega protokola še tolikšna, da bomo na dokončno uveljavitev IPSec čakali še kar nekaj časa. Vmes nas bodo reševali požarni zidovi.
Naprave, ki so del omrežja TCP/IP, imajo svoj naslov, enolično številko IP (IP number). Navadno jo zapišemo z dobro znanim kvartetom osembitnih števil, ločenih s piko (npr. 193.95.196.249). Ljudje sicer pogosteje uporabljamo simbolična oz. domenska imena, kot je npr. www.monitor.si, vendar je to le prijazno pročelje za nas, ki ga računalniki brž prevedejo nazaj v številko IP s pomočjo posebnega protokola DNS. Kot vemo, lahko v omrežje povezan računalnik počne več stvari. Medtem ko brskamo po spletu, lahko prejemamo in pošiljamo e-sporočila, v ozadju pa najverjetneje ves čas izmenjujemo datoteke. Številka IP tako ne zadošča, da bi v celoti določili povezavo med dvema napravama v omrežju. Pomemben del naslova je še številka vrat (port number). Ta se lahko giblje v meji od 1 do 65.535. Povezavo med dvema napravama tako v celoti določa kombinacija dveh številk IP in dveh številk vrat na vsaki strani. Številka IP je tako podobna hišni številki bloka stanovanj, številka vrat pa označuje posamezno stanovanje v njem. Simbolično lahko povezavo zapišemo takole: s številkama IP, ki jima za dvopičjem sledi še številka vrat:
255.16.35.12:1572 - 193.95.196.249:80
Številke vrat ponavadi delimo na dobro znana vrata (well-known port numbers), ki so praviloma na območju 1-1023 in začasna vrata, ki obsegajo preostalo območje. Dobro znana vrata olajšajo vzpostavitev povezave, saj pripadajo posameznemu protokolu. Za spletne strani, ki jih prenaša protokol HTTP, so tako predpostavljena dobro znana vrata, oštevilčena s številom 80. Za prenos datotek s protokolom FTP se uporabljajo dobro znana vrata 21, e-pošto pošiljamo prek vrat 25 (SMTP) in prejemamo prek vrat 110 (POP3) itn. Seveda pa dobro znana vrata s protokolom niso dokončno predpisana. Spletni strežnik npr. lahko posluša nove povezave na katerihkoli prostih vratih. Kot smo videli iz zgornjega zgleda, oznaka vrat na obeh straneh povezave na nujno ista. Velja, da na dobro znanih vratih poslušajo le strežniki, medtem ko se odjemalci povezujejo z njimi prek začasnih vrat. To nam omogoča, da se npr. povežemo z več spletnimi strežniki hkrati. Še več, strežniki na dobro znanih vratih le poslušajo nove povezave. Ko odjemalca sprejmejo, se dogovorita za začasna vrata, na katera preklopi strežnik, tako da lahko na dobro znanih vratih posluša še naprej. Ta postopek nam omogoča tudi, da se z istim strežnikom povežemo večkrat (to tehniko med drugim uporabljajo spletni brskalniki, da nam ob prenosu besedila z istega strežnika hkrati prenašajo še slike).
Oznaka vrat tako ne pove dosti o samem protokolu, ki poteka na posamezni povezavi. Da bi posamezno povezavo lahko spoznali in razumeli, kaj se na njej pravzaprav dogaja, moramo poznati še vrsto protokola, ki se na povezavi uporablja.
Računalniki, povezani v omrežja TCP/IP, poznajo ukaz netstat, ki izpiše stanje vseh vzpostavljenih povezav. Spodaj je zgled izpisa, ki ga lahko vrne ukaz netstat -an (stikalo -an določa izpis vseh povezav, tudi tistih, ki še nimajo odjemalca, in to v številčni obliki; če izpustimo -n, bomo dobili izpis z domenskimi naslovi):
Active Connections
Proto Local Address Foreign Address State
TCP 192.168.0.2:1025 0.0.0.0:0 LISTENING
TCP 192.168.0.2:1045 237.18.143.138:620 ESTABLISHED
TCP 192.168.0.2:137 0.0.0.0:0 LISTENING
TCP 192.168.0.2:138 0.0.0.0:0 LISTENING
TCP 192.168.0.2:139 0.0.0.0:0 LISTENING
UDP 192.168.0.2:1025 *:*
UDP 192.168.0.2:137 *:*
UDP 192.168.0.2:138 *:*
Na voljo so tudi uporabniku prijaznejša orodja za spremljanje prometa, kot je npr. brezplačni TCPView s spletišča System Internals (http://www.sysinternals.com/).
Protokole, ki se uporabljajo v omrežju, razvrščamo v sloje (protocol layers). Sloj podrobneje opredeli vlogo protokola in sega od fizične (samega nosilca za prenos bitov, kot je npr. žica ali radijski valovi) do aplikativne ravni (storitve omrežja, kot je npr. e-pošta).
Vrste požarnih zidov
Glede na sloj protokola, kjer požarni zid opravlja svoje delo, jih delimo na naslednje tri vrste:
1. paketni filtri (packet filter),
2. nadomestni strežnik (proxy server),
3. analiza stanja (stateful inspection).
Velja poudariti, da sodobnega požarnega zidu ni mogoče preprosto uvrstiti v eno izmed naštetih kategorij, saj pogosto uporablja kombinacijo pristopov.
Paketni filtri
Paketni filtri so učinkovita zaščita, ki deluje na sloju povezave. Ker so podatki, ki se izmenjujejo v omrežju, različnih dolžin, protokoli uporabljajo pakete, obvladljivo velike koščke podatkov, ki jih drugega za drugim izmenjujejo, dokler vsebina ni prenesena v celoti. Paket ne vsebuje le koščka podatka, temveč tudi podatke o svojem izvoru in cilju. Paket je nekakšna ovojnica, ki podatek obda z oznako protokola, parom številk IP in vrat pošiljatelja ter parom številk IP in vrat prejemnika. Paketni filtri izkoriščajo podatke v ovojnici paketa in se na njihovi podlagi odločajo, ali bodo določen paket prepustili, zavrnili ali zavrgli. Delovanje paketnega filtra je v marsičem podobno delovanju usmerjevalnika (router).
Učinkovitost paketnega filtra je odvisna od pravil (rules), ki mu jih moramo predpisati, preden lahko opravlja svoje delo. Pravila so seznam preizkusov, ki jih mora prestati vsak posamezen paket, preden se odloči o njegovi usodi. Dobro je, če najprej postavimo temeljno pravilo (default rule), ki zavrača vse pakete, potem pa pravila nadgrajujemo z natančnimi dovoljenji. S stališča varnosti je veliko bolje predpisati posamezne dovoljene načine izmenjave podatkov, kakor pa razmišljati o vseh prepovedanih. Temeljno pravilo navadno nadgradimo s posameznimi pravili, ki promet prek določenih vrat dopuščajo le v enega izmed računalnikov v krajevnem omrežju. Tako lahko določimo en strežnik za e-pošto, FTP ali splet. Podobno taktiko lahko uberemo tudi v nasprotno smer. Uporabnikom krajevnega omrežja lahko prepovemo uporabo vseh vrat, razen 80, prek katerih se bodo lahko povezovali s spletnimi strežniki v zunanjem omrežju.
Zgled pravil dvosmernega paketnega filtra:
Za zunanji svet dovolimo dostop le do spletnega strežnika (številka IP 192.168.0.5) in strežnika FTP (192.168.0.2), za notranje uporabnike pa omogočimo dostop do zunanjega strežnika e-pošte (215.16.33.15) in vseh spletnih strežnikov. Na seznamu pravil je na koncu vedno temeljno pravilo, ki zavrača vse druge kombinacije:
Zunanje omrežje -> Notranje omrežje
Zunanje omrežje Notranje omrežje Politika
Številka IP Vrata Številka IP Vrata
*.*.*.* * 192.168.0.5 80 DOVOLI
*.*.*.* * 192.168.0.2 21 DOVOLI
*.*.*.* * *.*.*.* * ZAVRNI
Notranje omrežje -> Zunanje omrežje
Notranje omrežje Zunanje omrežje Politika
Številka IP Vrata Številka IP Vrata
*.*.*.* * 215.16.33.15 25 DOVOLI
*.*.*.* * 215.16.33.15 110 DOVOLI
*.*.*.* * *.*.*.* 80 DOVOLI
*.*.*.* * *.*.*.* * ZAVRNI
Paketni filter bo po vrsti, od zgoraj navzdol, preverjal seznam pravil, dokler za posamezni paket ni popolnoma prepričan, kam sodi. Če mu ne ustreza nobeno od pravil, pristane pri temeljnem pravilu, ki zavrača vse.
Pravila lahko določajo, da se posamezen razred paketov prepusti, v nasprotnem primeru pa ga požarni zid lahko tiho zavrže ali glasno zavrne. V slednjem primeru pošlje obvestilo o izvoru zavrnjenega paketa.
Vidimo, da so paketni filtri popolnoma odvisni od pravil, ki določajo varnostno politiko. Taki požarni zidovi delujejo hitro in so za uporabnike, katerih paketi so skladni s pravili, neopazni. Paketni filtri so pogost del temeljne programske opreme. Tak filter je, denimo, sestavni del sodobnega jedra operacijskega sistema Linux.
Žal imajo paketni filtri veliko pomanjkljivost. Vsebino paketa je namreč mogoče popačiti. Napadalec lahko prikrije svoj izvor tako, da spremeni svojo številko IP z drugo, za katero je ugotovil, da je v tabeli pravil dovoljena. Tak napad, imenovan tudi IP spoofing, je razlog, da se paketni filtri v učinkovitem požarnem zidu nadgradijo z dodatnimi omejitvami.
Nadomestni strežnik
Da bi lahko presegli omejitve paketnega filtra, se moramo pomakniti više po slojih omrežnih protokolov. Nadomestni strežnik ne preučuje prometa le na sloju posameznih paketov, temveč sledi njihovemu zaporedju. Deluje na sloju uporabe, saj se zaveda podrobnosti protokola, torej upošteva tudi zaporedje paketov.
Vsaka povezava ima fazo vzpostavitve. V tej fazi se izmenjujejo paketi, ki so še posebej označeni. Požarni zid, kot vedno, stoji med obema deloma povezave. V trenutku, ko prispe zahteva za vzpostavitev povezave, prevzame vlogo druge strani in "odigra" vlogo nadomestnega poslušalca (proxy). Če ugotovi, da je bilo z zaporedjem paketov vse v redu, sklene povezavo med obema stranema. Požarni zid vodi tabelo pravilno vzpostavljenih povezav ves čas njihovega trajanja.
Zaradi učinkovitosti lahko požarni zid po uspešni vzpostavitvi povezave opusti preverjanje protokola in slepo posreduje pakete med obema stranema. Delovanje je sicer hitrejše, a tak pristop spet ogroža varnost, saj lahko napadalec izkoristi tako vzpostavljeno povezavo in vanjo naknadno vriva zlonamerne pakete, ki lahko izkoriščajo razpoke v sistemu varnosti. Pogostejši pristop, ki omogoča večjo varnost, je stalno spremljanje paketov. Ker požarni zid pozna tudi protokol, ki se uporablja na posamezni povezavi, lahko brez težav zazna naknadno vrinjene nepravilne pakete.
Nadomestni strežnik opravlja še eno storitev, ki znatno izboljša varnost krajevnega omrežja. Ker tak požarni zid vzpostavlja povezave v imenu drugih naprav, so vsi računalniki v notranjem omrežju navzven nevidni. Zunaj jih namreč predstavlja požarni zid s svojim zunanjim naslovom IP. Požarni zid seveda vodi seznam vzpostavljenih povezav in lahko na podlagi številke vrat ugotovi, kateremu računalniku na notranji strani je paket v resnici namenjen. Tej storitvi pravimo tudi prevajanje naslovov (NAT, Network Address Translation).
Pravila, ki jih uveljavlja prehod uporabe, so lahko precej podrobnejša kakor pri paketnem filtru. Ker ima vsak protokol na višjem sloju specifične ukaze, lahko prehod uporabe prilagodimo tako, da določene zavrača. Za zgled si lahko ogledamo protokol FTP, ki pozna ukaz PUT za shranjevanje vsebine v strežnik. Čeprav je strežnik - morda po malomarnosti - nastavljen tako, da take ukaze sprejme, lahko pakete s takim ukazom zavrne že ustrezno prilagojen prehod oz. požarni zid. Shranjevanje vsebine v strežnik tako ne bo mogoče. Seveda je pri naprednejših požarnih zidovih mogoče taka pravila uveljavljati izbirno, le za določene skupine uporabnikov.
Glede na namen je zato pri nekaterih prehodih uporabe potrebna prijava uporabnika. Požarni zid s tem ni več neviden za uporabnika, ki se mora najprej ustrezno predstaviti z uporabniškim imenom in geslom.
Nadomestni strežniki morajo poznati podrobnosti protokola in opravljati vse delo v imenu zaščitene naprave. To lahko podaljša čas obdelave in omeji uporabnost omrežja, če nadomestni strežnik katerega od zanimivih protokolov ne pozna. Po drugi strani pa ima nadomestni strežnik možnost medpomnjenja (caching), saj lahko za določen čas shrani posamezne vsebine in jih naknadnim odjemalcem posreduje brez povezovanja z zunanjim virom.
Analiza stanja
Nadomestni strežniki ponujajo učinkovito zaščito, a jih je lahko nekoliko nerodno uporabljati. Njihove slabosti odpravlja požarni zid, ki opravlja analizo stanja prometa (stateful inspection).
Čeprav nekateri strokovnjaki menijo, da pravo varnost lahko zagotavlja le vmesni strežnik, ki dejansko posreduje pakete med dvema paroma povezav, so drugi prepričani, da to v omrežni promet vnaša nepotrebno zapletenost, poleg tega je proces morda preveč opazen uporabniku.
Požarni zidovi z analizo stanja prometa opravljajo vse vloge zaščite, ki smo jih spoznali, a ohranjajo neposredno povezavo med zunanjim in notranjim omrežjem. Podobno kakor nadomestni strežniki opravljajo preverjanje pravilne vzpostavitve povezave in prevajanje naslovov omogočajo tudi zavračanje specifičnih ukazov posameznih protokolov. Od nadomestnih strežnikov pa jih ločuje analiza podrobnosti posameznega protokola. Namesto na dejanske protokole se analiza stanja zanaša na posebne algoritme, ki spremljajo vzorce bitov v paketih. Teoretično so lahko požarni zidovi z analizo stanja veliko bolj učinkoviti pri odkrivanju zlonamernih paketov, poleg tega jih ni treba prilagajati vsakemu posameznemu protokolu in so uporabnikom nevidni.
Strojni in programski
Postopki preverjanj, ki jih izvajajo požarni zidovi, se lahko izvajajo v strojni opremi ali programski kodi. Strojna oprema ponuja večje udobje, saj je po prilagoditvi pravil tak požarni zid popolnoma avtonomen in vedno na voljo. Ker je zgrajena z namenskimi vezji, svoje delo opravlja zelo učinkovito. Nekoliko težje je nadgrajevati njene zmogljivosti, saj smo vezani na enega ponudnika in njegovo dobro voljo.
Na drugi strani imamo sodobno programsko opremo, ki opravlja enakovredne naloge, omogoča pa še večjo stopnjo zaščite, saj lahko postopke preverjanja dopolnimo še s protivirusnimi in protismetnimi programi. Paziti moramo le na zmogljivosti računalnika, v katerem je nameščeno tako programje. Večji omrežni promet in zahtevna preverjanja lahko upočasnijo še tako zmogljiv računalnik.
Posebna vrsta so osebni požarni zidovi, ki jih pogosto uporabljamo za zaščito enega samega računalnika. Pri teh je treba paziti, da so dvosmerni, da nas torej ne varujejo le pred vdori iz zunanjega omrežja, temveč preprečujejo tudi delovanje vohunske programske opreme in črvov, ki lahko zlorabijo naš računalnik za posredovanje zasebnih podatkov ali razpošiljanje nezaželene e-pošte navzven. Paziti je treba tudi na zahtevnost filtrov, saj nekateri osebni zidovi omogočajo podrobno analizo stanja, ki lahko uporabnika upočasni celo pod mejo uporabnosti.
Kako varni smo pred zunanjim svetom, lahko hitro preverimo s spletnim pripomočkom ShieldsUp, delom znanega Gibson Research (http://grc.com/).
Danes so cene osebnih usmerjevalnikov za širokopasovna omrežja, ki obsegajo strojni požarni zid, že tako nizke, da se jih splača omisliti si, čeprav smo (zaenkrat) v omrežje povezani le z enim računalnikom. Visoka stopnja varnosti je praviloma zagotovljena že brez posebnega prilagajanja. Po potrebi pa jih lahko podrobno prilagodimo. Večina v ta namen ponuja lasten spletni strežnik, skozi katerega preprosto spreminjamo pravila zaščite. Če imamo v domačem omrežju več računalnikov, pa je nakup tega strojnega dodatka še bolj upravičen. Navadno v isti napravi dobimo poleg usmerjevalnika in požarnega zidu še strežnik DHCP za preprosto dodajanje novih naprav, možnost samodejne prijave spremenljivega naslova IP v dinamične strežnike DNS in prehod za vzpostavitev navideznih zasebnih omrežij (VPN, Virtual Private Networks).
Tisti, ki ga požarni zidovi zanimajo podrobneje, pa se gotovo ne bodo mogli upreti skušnjavi, ki jo ponujajo odprtokodni operacijski sistemi, kot so Linux in različice BSD. Programski požarni zidovi so največkrat že del standardne distribucije operacijskega sistema, zaradi odprte kode in številne skupnosti programerjev, pripravljenih pomagati z nasveti, pa je mogoče sestaviti poljubno zmogljiv zid, prikrojen prav našim potrebam. Če nam je varnost najpomembnejša in nam ni žal porabiti za to nekoliko več časa, potem je verjetno optimalna rešitev eden najbolj varnih operacijskih sistemov sploh, OpenBSD.
Priljubljeni osebni požarni zidovi
ZoneAlarm (http://www.zonelabs.com/)
BlackICE Defender (http://www.networkice.com/)
Kerio (http://www.kerio.org/)
Agnitum Outpost (http://www.agnitum.com/products/outpost)
Deerfield Personal Firewall (http://dpf.deerfield.com)
Norton Personal Firewall (http://www.symantec.com/sabu/nis/npf/)
Kaj požarni zidovi niso
Ne glede na strojno ali programsko različico je pomembno, da požarne zidove razumemo. Požarni zidovi so bistveni del varnosti omrežij, vendar ne morejo biti odgovor na vse varnostne izzive. Zidovi so le zmogljiv del celotne varnostne politike.
Primerjamo jih lahko z vhodnimi vrati. Dobro jih je imeti, a če jih ne zaklenemo, nam ne koristijo kaj dosti. Prav tako nam debela vrata prav nič ne koristijo na hiši s trhlimi zidovi. Če želimo s požarnim zidom zavarovati lastne zaupne podatke, moramo poskrbeti, da ni na voljo drugih načinov njihove odtujitve.
Požarni zid nas tudi ne more obvarovati pred zlonamerno programsko kodo. Ne glede na napredek analize stanja, ki zmore v sodobnih zidovih zavračati določene neprimerne vsebine, bo vedno mogoče napisati zlonameren program, ki bo požarni zid zaobšel. Na podoben, le delno uspešen boj so obsojeni tudi avtorji protivirusnih programov. Dokler so programi zasnovani na prepoznavanju vzorcev, jih ne moremo posodobiti dovolj hitro, da bi lahko bili varni pred vsakim, tudi najbolj svežim virusom (po drugi strani jim to zagotavlja stalno delo).
Učinkovita varnost je torej proces, ki zahteva veliko odgovornosti in discipline. Navsezadnje se lahko še tako učinkovita zaščita sesede iz banalnega vzroka, kot je preveč enostavno geslo.