Odprt in varen
Varno in zanesljivo delovanje računalnika danes marsikomu pomenita precej več kot pred desetletjem ali dvema, ko so številni temeljni računalniški programai nastajali brez prevelikega razmisleka o varnosti.
Poplava najrazličnejšega zlonamernega programja danes dokazuje, da je varnost nekaj, s čimer morajo programi nastajati in jo zelo težko dodamo na že uveljavljene izdelke, kot je npr. najbolj razširjen operacijski sistem. In vendar je na voljo tudi drugačna pot, ki jo že desetletje uveljavlja OpenBSD, eden najvarnejših operacijskih sistemov na svetu. Kako je nastal in v čem je skrivnost njegovega uspeha?
Kratka zgodovina Unixa
Unix je nastal kot nekakšen upor razvijalcev zoper preveliko zapletenost sistemov, ki so krmilili velike računalnike v 60. letih minulega stoletja. Ključna odločitev, ki je pripomogla k njegovi priljubljenosti, je bil prenos v strojno neodvisni programski jezik C leta 1973. Ker se je izvirna koda prosto izmenjevala med raziskovalnimi ustanovami, je Unix postajal vse bolj priljubljen in navzoč v številnih računalniških sistemih. Eden izvirnih tvorcev ga je sredi 70. let predstavil na kalifornijski univerzi v Berkeleyju in leta 1978 so tamkajšnji študenti že začeli izdajati lastne različice; te so sčasoma postale znane pod kratico BSD (Berkeley Software Distribution). BSD je odigral ključno vlogo pri uspehu interneta, saj so na Berkeleyju v 80. letih po naročilu ameriške vladne agencije DARPA v Unix vgradili programski sklad TCP/IP. BSDjeva koda ključnih protokolov interneta je postala sestavni del številnih sodobnih operacijskih sistemov, tudi Oken. BSD Unix se je zapletel v pravni spor z lastniki izvirnega Unixa, podjetjem AT&T, v čigar laboratorijih je nastal, vendar je po dveletnem procesu 1993 sodišče menilo, da je različica BSD toliko drugačna od izvirnika, da ni mogoče govoriti o kršenju izvirnega odgovora med AT&T in univerzo. To je pripeljalo do zunajsodne poravnave, posledica le-te pa je bila tudi "čista" različica Unixa BSD4.4-Lite, brez sporne kode. Ta je postala temelj sodobnih različic Unixov BSD.
Mimogrede omenimo, da je AT&T razvil še eno vejo Unixa, znano kot System V Release 4. Iz nje so nastale nekatere lastniške različice. In to, da je Linux nastal povsem drugače in si z izvirnim Unixom ne deli skupne kode jedra, res pa so danes številni Unixu podobni operacijski sistemi združljivi in v njih najdemo namenske programe iz najrazličnejših virov. To je pogrelo tudi pravdanja na sodišču, saj je SCO - sporni pravni naslednik pravic AT&T, o tem se namreč še prereka z Novellom - pred leti tožil IBM, češ da je v Linux vgradil izvirno kodo, ki ni njegova last. Ta spor še ni dobil epiloga.
Maskota projekta OpenBSD je riba napihovalka z imenom Puffy, navdih zanjo pa je bil šifrirni algoritem blowfish.
Sodobne različice BSD
Danes priljubljene različice BSD dolgujejo svoj nastanek projektu 386BSD, s katerim je želel William Jolitz v 90. letih prenesti BSD na priljubljene Intelove procesorje 80386, ki so na osebne računalnike prinesli 32-bitno naslavljanje in navidezni pomnilnik. Jolitz je svoj proces prenosa opisal v seriji člankov za revijo Dr. Dobbs, leta 1993 pa izgubil veselje in projekt ustavil. To je preostale razvijalce prisililo, da so ustvarili lastno različico, ki je še istega leta ugledala luč sveta pod imenom FreeBSD. Po popravkih, ki so bili posledica sodne poravnave in v kateri je jedro FreeBSD postal BSD4.4-Lite, je FreeBSD od leta 1994 vztrajno napredoval in postal ena najbolj priljubljenih različic prostih operacijskih sistemov. FreeBSD med drugim soustvarja zgodbo o uspehu, ki jo piše Yahoo.
Vendar je FreeBSD postal preveč navezan na procesorje x86 in to je povzročilo rojstvo novega projekta, NetBSD. Ta je prinesel Unix na sisteme Macintosh, Atari ST, Amigo in tudi PCje, danes pa pokriva najrazličnejše strojne arhitekture (na voljo je npr. tudi za Sega Dreamcast ali Sharpov ročni računalnik Zaurus).
BSDjevo akademsko poreklo se še danes kaže v vseh projektih, ki so vzniknili iz njega. Razvoj projektov poteka v široki skupini okrog sto temeljnih razvijalcev (commiters), ki imajo široka pooblastila, morebitne medsebojne spore pa razrešuje izvršni odbor (Core Team). Tak pristop naj bi zagotavljal višjo kakovost kode in onemogočal prevelik vpliv posameznika, kar je očitek linuxovskemu taboru, poleg seveda izvirnega dovoljenja za uporabo, ki je pri BSD praktično brez omejitev in dopušča tudi zapiranje izvirne kode v nove lastniške izdelke, medtem ko Linuxov GPL zahteva objavo vseh sprememb izvirne kode.
Kljub zgodovini najrazličnejših sporov projekti med seboj zgledno sodelujejo. To je predvsem posledica prostega dostopa do izvirne kode. Prenos FreeBSD na procesorje Alpha, PowerPC in SPARC je temeljil na delu NetBSD. Projekti si delijo sistem distribucije programja v obliki izvirne kode, Ports, ne nazadnje pa je eden najbolj široko rabljenih namenskih programov v vseh sodobnih različicah Unixov, OpenSSH, delo projekta OpenBSD. Še več, različice BSD poznajo posebne programske vmesnike (compatibility layer), ki sistemu dodajo binarno združljivost s programi, prevedenimi za druge sisteme, kot so npr. Linux, Solaris in HP-UX, ki tako lahko delujejo pri polni hitrosti.
Družinsko drevo različic sistema Unix, tako ali drugače temelječih na kodni osnovi BSD.
OpenBSD
Nastanek različice OpenBSD je pravzaprav zanimiva, osebna zgodba. Theo De Raadt izvira iz družine nizozemskih emigrantov. Rojen je bil 1968 v Južnoafriški republiki. Zaradi obveznega dveletnega služenja vojske se je družina odločila, da se preseli v Kanado. Thea so računalniki okužili že v rosnih letih, ko jih je spoznal predvsem skozi Commodorjeve izdelke: najprej VIC-20, potem Amigo. Kmalu se je kot sistemski upravitelj na univerzi v Calgaryju seznanil tudi z izvirno kodo Unixa, natančneje s SunOS, še eno izpeljanke iz kodne osnove BSD. Ob tem delu je spoznal pomen prostega razpolaganja z izvirno kodo in svoj talent za odkrivanje in odpravljanje hroščev v programski kodi.
V začetku 90. let je postal del skupine, ki je razvijala NetBSD. Po začetnem medsebojnem navdušenju se je kmalu ostro sporekel z drugim pomembnim programerjem, Charlesom Hannumom, ki je prihajal z MIT. De Raadtu so onemogočili dostop do obvestil razvijalcev in izvirne kode, sam pa je še naprej silovito razvijal kodo NetBDS za SPARC, v kateri je odkril in odpravil številne pomanjkljivosti. Po nekaj mesecih je bilo očitno, da ne bo prišlo do pomiritve, in rodil seje OpenBSD (odprt za skupnost, za razliko od NetBSD, ki je de Raadta "zaprla"). Kmalu so se mu pridružili številni drugi razvijalci. S časom se je jedro razvijalcev OpenBSD razširilo na okrog 80 programerjev po vsem svetu, neredki med njimi pa sodelujejo tudi pri drugih odprtokodnih projektih, predvsem pri NetBSD.
De Raadt je s pridom izkoristil svoje kanadsko bivališče, saj tako ni bil podvržen strogi zakonodaji o izvozu orožja, ki je ameriškim podjetjem onemogočala izvoz programja z močnim šifriranjem podatkov. "Svoj" Unix je tako hitro varnostno izboljšal z boljšim šifriranjem uporabniških gesel, ki uporablja napredno različico algoritma blowfish, s tem pa je na neki način izbral tudi maskoto projekta, ribo napihovalko z ljubkovalnim imenom Puffy.
Puffy v različnih vlogah krasi CDje distribucije, enega izmed virov financiranja projekta.
Privzeto varen
Temeljna filozofija OpenBSD je privzeta varnost (secure by default). Zaradi tega je po namestitvi operacijski sistem zelo omejen in tako tudi zelo varen. Številne storitve so zaustavljene in omrežna vrata zaprta. Kar nekaj let so se na domači strani projekta v spletu hvalili, da pri njih ni špranj v sistemu varnosti. OpenBSD je bil celo vrsto let prepovedan na hekerski konferenci DefCON, saj ni omogočal "poštenega" tekmovanja pri vdiranju v sisteme drugih udeležencev. A pred leti so le odkrili prvo možnost zlorabe privzete namestitve skozi špranjo v protokolu SSH. Danes lahko tako na spletni strani www.openbsd.org preberemo "le ena špranja v sistemu varnosti v privzeti nastavitvi v več kot osmih letih!"
Varnost OpenBSD temelji predvsem na naprednem preverjanju izvirne kode. Z letom 1996 so pri projektu začeli analizirati izvirno kodo vrstico za vrstico. Pisana zgodovina Unixa je v izvirno kodo prinesla številne pomanjkljivosti. Ko so v kodi odkrili varnostno pomanjkljivost, niso popravili zgolj spornih nekaj vrstic kode, temveč so takoj zatem prečesali celotno izvirno kodo in poizkusili iztrebiti vse podobne napake. Pri tem je De Raadt sodeloval s podjetjem Secure Networks, ki je razvijalo program za odkrivanje špranj v sistemu varnosti (Ballista, pozneje Cybercop Scanner). Obe strani sta dobro sodelovali, dokler ni po iztrebitvi najnevarnejših hroščev zaradi filozofije OpenBSD, da je čisto vsak hrošč potencialna špranja v varnosti in ni zaman žrtvovati niti časa niti zmogljivosti ali enostavnost sistema za njegovo iztrebljanje, podjetje izgubilo zanimanje za iskanje nadaljnjih pomanjkljivosti.
A skupina razvijalcev v OpenBSD ostaja zvesta svojim načelom. Vsako leto organizirajo nekajdnevni kodirni maraton (hackathlon) v Calgaryju, ko se zberejo, intenzivno kodirajo in razvijajo tudi družabno življenje, ob neizbežnem pivu seveda, ki ga je de Raadt z omejenim uspehom poizkusil variti tudi sam. Svojim načelom pa ostaja zvest tudi de Raadt, čeprav za ceno izgube finančne podpore. Zaradi svoje izjave kanadskemu časopisu v zvezi z vojno v Iraku je leta 2004 izgubil delež pri skoraj poltretjem milijonu dolarjev, ki jih je priskrbela DARPA, in tako ogrozil takratni kodirni maraton, a so ga s prostovoljnimi prispevki na koncu le uspešno izpeljali.
Projekti BSD svojo izvirno kodo ponujajo za rabo v vse namene, v zameno pa zahtevajo le ohranitev obvestila o njenem poreklu. Marsikdaj šele iskanje niza "Regents of the University of California" v prevedenem programu izda, da je bil izdelan tudi s pomočjo kode BSD (najdemo ga npr. v Okenskem "ftp.exe"). OpenBSD se je vrsto let financiral predvsem s prodajo CDjev in prostovoljnimi prispevki, rast rabe interneta pa je prvi vir precej zmanjšala. Čeprav so bila močna računalniška podjetja, ki kodo BSD uporabljajo v svojih ključnih izdelkih (Sun, IBM...), do OpenBSD precej mačehovska - vse različice OpenSSH, ki jih najdemo v najrazličnejših Unixih, so de Raadtu po večmesečnih prošnjah zagotovile zgolj en sam IBMov prenosnik - je danes stanje le nekoliko boljše, saj so projektu z donacijami pomagali tudi Mozilla Foundation, Vonage, HP in Google, seveda pa številni posamezniki tudi danes nakazujejo svoje prispevke. De Raadt je tudi tu samosvoj, saj ne želi urediti statusa projekta v obliko neprofitne organizacije, ki bi donatorjem omogočala davčne olajšave. Doniranje tudi zaradi olajšav se mu tako ali tako zdi neiskreno.
Projekt OpenBSD vzdržuje tudi varnostno preverjene pakete dodatne programske opreme, vendar na namizju ne moremo pričakovati kakšne bogate ponudbe. Vključen je strežnik X.org in okenski upravnik fwm.
Raba OpenBSD
OpenBSD je trenutno na voljo v različici 3.9. Pri projektu nastane nova različica vsakih šest mesecev, podprta pa je le eno leto. Tudi s tem se zagotavlja varnost in pravočasno nadgrajevanje. Čeprav omogoča rabo številnih programskih paketov drugih različic BSD ali Linuxa, jih moramo namestiti posebej. Kljub temu v OpenBSD vzdržujejo varnostno preverjene različice nekaterega namenskega programja. V 3.9 tako najdemo naslednje pakete:
Kot vidimo, je temeljni nabor paketov precej bogat, vendar moramo sistem pred uporabo še primerno prilagoditi z vklopom določenih storitev in odpiranjem želenih omrežnih vrat.
OpenBSD zagotavlja varnost s številnimi dodatnimi prijemi. Od uporabniških - noben uporabnik ni del privilegirane skupine "wheel" in tako sploh ne more izvesti ukaza su, dokler tega ne omogočimo - do sistemskih, ki jih počasi povzemajo tudi drugi operacijski sistemi, npr. Microsoft Vista, ki je iz OpenBSD privzela razporejanje naloženih knjižnic na naključne pomnilniške naslove.
Prav statistično neulovljivo generiranje psevdonaključnih števil je temelj številnih varnostnih prijemov v OpenBSD. Za seme naključnih števil se uporablja dinamično stanje sistemskih prekinitev (interrupts), ki se nenehno spreminja in je od sistema do sistema drugačno, naključna števila pa se uporabljajo za oznako procesa (da napadalec ne more vnaprej uganiti njegove številke), označevanje omrežnih paketov, dodeljevanje vrat ali npr. za šifriranje drobcev podatkov v izmenjevalni datoteki (swap). Sistemi z navideznim pomnilnikom namreč odlagajo dele pomnilnika na disk in če ti niso ustrezno zaščiteni, lahko napadalec dokaj zlahka pride do gesel ali drugih zaupnih podatkov. Za ceno zmogljivosti OpenBSD uveljavlja brezkompromisno zaščito pomnilnika: noben njegov del ne more biti hkrati shramba za podatke in izvršljiva koda. S tem so že v osnovi izkoreninjeni vsi napadi s prekoračitvijo medpomnilnika (buffer overflow). Prevajalnik gcc za OpenBSD je prilagojen tako, da uveljavlja zaščito sklada in tako znova zagotavlja dodatno varnost vse z njim prevedene kode. Seveda je zaščitena tudi vsa omrežna komunikacija, saj sistem izkorišča IPsec in, kjer je mogoče, ščiti že same omrežne pakete.
Zaradi sorodstva z NetBSD je OpenBSD na voljo za številne strojne podlage. Njegova slabost je slaba podpora večprocesorskim sistemom, zato se najbolje znajde na najbolj ranljivih in izpostavljenih delih omrežja, po možnosti na kakšnem bolj eksotičnem stroju, ki morebitnim napadalcem predstavlja dodatno oviro.
Za konec
Na svoji poti do najvarnejšega operacijskega sistema na svetu je OpenBSD prišel zelo daleč. S svojo nekompromisno filozofijo strogega preverjanja izvirne kode, močno zaščito pomnilnika in omrežnih protokolov ter pazljivo izbranimi nastavitvami ponuja zares odporen sistem, ki sicer ne omogoča največjega udobja ob namestitvi, vendar pozneje zagotavlja veliko bolj miren spanec.
Tudi če se nam zdi OpenBSD za vsakdanjo rabo preveč okrnjen in premalo zmogljiv, smo lahko hvaležni vsem programerjem pri projektu, ki so skupnosti odprte kode prispevali tako zmogljive in uporabne programe, kot je OpenSSH, in ponudili inovativne pristope k zaščiti sistemov, ki jih danes posnemajo tudi največji. Še na mnoga leta!