17.01.2019
Projekt podpira MVZT

Angleška stran/English version

Iz o COKS - Center odprte kode Slovenije

Skoči na: navigacija, iskanje

Vsebina

Odprtokodni programi in varnost

Varnost v informatiki je proces usklajevanja varnostnih zahtev z ceno, uporabnostjo, učenjem uporabnikov in zanesljivostjo. Ko razmišljamo o programski opremi, se samo od sebe ponuja vprašanje, kakšen vpliv ima odprta koda na to ravnovesje.

Sami po sebi OKPO niso nič bolj ali manj varni od LPO. Poznamo tako zelo zanesljive OKPO in LPO, prav tako tudi nezanesljive primerke obeh vrst programja. Odprta koda vpliva na varnost na več načinov, vendar je varnost veliko bolj odvisna od vpletenih specifičnih okoliščin.

Izvorna koda je na voljo vsem

Dostopnost kode je značilna za odprto kodo in prinaša tako določene nevarnosti kot tudi prednosti:

  • Napadalci lahko preučijo odprto kodo za varnostne luknje in možne načine zlorabe teh lukenj. To je sicer tudi primer pri LPO, čigar izvorna koda se pojavi v javnosti. Tak primer je bila nelegalna objava izvorne kode Windows 2000. Zgodovina takih primerov nikakor ni kratka, tako se je že zgodilo tudi z COMP128 enkripcijo, ki se uporablja v telefonih GSM.
  • Branilci lahko pregledajo kodo za morebitne varnostne luknje in jih popravijo. To se pogosto zgodi v dveh scenarijih: **Iskanje specifične luknje, ki je bila izrabljena. To je dokaj enostavna naloga, v nevarni skripti lahko s postopkom reverse engineringa najdemo postopek zlorabe in nato varnostno luknjo zakrpamo.
  • Drugi primer – iskaje lukenj, ki niso aktivno zlorabljene, je mnogo težje opravilo z odprtim koncem. Tovrstni napori se ponavadi osredotočajo na specifične dele kode, ki je pisana specifično za zagotavljanje varnosti in je ponavadi varna. Vendar je pomanjkljivost lahko v kateremkoli delu programa, ki lahko povzroči varnostno luknjo in iskanje take napake zahteva pregled celotne kode, kar je lahko v nekaterih primerih tudi nekaj milijonov vrstic izvorne kode. Odkrivanje in popravljanje varnostnih lukenj je zelo efektiven način za člane odprtokodnih skupnosti, da pridobijo spoštovanje znotraj skupnosti. Mnogo članov odprtokodnih skupnosti je zato zelo motiviranih za pregled izsekov kode in iskanje pomanjkljivosti.

Vsak lahko prispeva k odprti kodi

Druga zelo značilna lastnost odprtokodnih programov je možnost vsakega, da prispeva izvorno kodo je dvorezen meč.

  • Napadalci lahko poskusijo sami dodati pomanjkljivosti v izvorno kodo. Da se to prepreči, večino odprtokodnih projektov sprejema prispevke kode le od zaupanja vrednih donatorjev kode. Vsi ostali prispevki kode morajo biti odobreni s strani zaupanja vrednih donatorjev. Proces, kako nekdo postane zaupanja vreden donator kode je različen od projekta do projekta, vendar pogosto zahteva dolgoročno predanost projektu in izmenjavo varnostnih ključev, katerih namen je varno komuniciranje zaupanja vrednih donatorjev kode. Uporaba sistemov za kontrolo verzij omogoča pregled sprememb, kdo je te spremembe napravil, kdaj so bile narejene in zakaj. Ko se najde donator kode, ki je odgovoren za varnostno luknjo, se lahko vsi njegovi popravki izolirajo, pregledajo in po potrebi odstranijo.
  • branilci lahko prispevajo popravke pomanjkljivosti. Proces iskanja in popravka varnostnih lukenj ni vezan na resurse in odmerjen čas enega podjetja, temveč na vire uporabnikov programja. Rezultat tega je, da so popravki znanih varnostnih lukenj izdani veliko prej pri OKPO kot pri LPO.

Primeri:

Avtorji nevarne kode ciljajo na slabo vzdrževane računalnike s standardnimi nastavitvami

Nevarna koda vključuje viruse, črve, trojanske konje, spyware, rootkite. ter ostalo programje, ki povzroča negativne učinke ali stranske učinke.

Trenutno so odprtokodni sistemi zelo različni (posledica tega, da je možno spreminjati odprto kodo, je da jo ljudje spreminjajo), ponavadi boljše vzdrževani (zaradi tehničnih ovir po njem po navadi ne posegajo čisti začetniki), po njih pa posega le manjšina uporabnikov; vsi ti faktorji vplivajo na to, da so slaba tarča za avtorje nevarne kode. Tehnične ovire za uporabo odprtokodnih programov se počasi odpravljajo zaradi boljše dokumentacije ter vedno boljših uporabniških vmesnikov, raznolikost se zmanjšuje zaradi želje po standardizaciji in počasi se vedno bolj uporablja; vse to počasi izpodriva razloge za neprivlačnost odprte kode za pisce nevarne kode. sprejemanje vložkov od neprofesionalnih avtorjev kode, osredotočanje na izkušnje razvijanja v odprtokodnih skupnostih bo verjetno vodilo k povečanju števila posameznikov, ki imajo znanje za pisanje nevarne kode, vendar ne poklicne odgovornosti, ki bi jim preprečevala pisanje in izdajanje take kode. to pa lahko vodi v dolgoročnejši trend povečevanja številčnosti odprte kode.

Patentirani in tajni algoritmi niso na voljo za uporabo v odprtokodnih projektih.

Patentirani in tajni algoritmi so uporabljeni v podjetjih z namenom zaščititi njihovo mesto na trgu. na njih se večinoma gleda kot neokusnost v očeh družbenega gibanja proste in odprte kode.

  • številni pomembni algoritmi, še posebej kriptografski, so patentirani ali pa ostanejo tajni in tako niso na voljo za odprto kodo, saj ne morejo zadostiti še tako liberalnim licenčnim zahtevam. Patentirani algoritmi prej ali slej pristanejo v javni domeni (kot na primer splošno uporabljen RSA algoritem), tajni algoritmi pa ostanejo trajno nedosegljivi.
  • Tajni kriptografski algoritmi imajo dolgo zgodovino tako šibkosti kot tudi da so pricurljali v javnost. Šibkost je rezultat tega, da je edini zanesljiv način preverjanja moči kriptografije ta, da jo testira veliko število strokovnjakov, kar pa ni mogoče, če se jih drži v tajnosti.


odprtokodni programi niso nujno testirani za varnostne luknje

Programi za uradno testiranje so na veliko uporabljeni v številnih podjetjih kot del programa kakovosti za zmanjšanje programskih pomanjkljivosti.

  • Odprtokodni projekti pogosto nimajo rigidne infrastrukture, ki je zahtevana za kakovost programja kot na primer implementacija ISO 9000, vendar je veliko število metod za uporabo ISO 9000 programa kakovosti namenjenih avtomatizaciji. to vključuje regresivno testiranje, testiranje posameznih modulov, analizo časa kompiliranja kode. Večina večjih odprtokodnih projektov in kar nekaj podpornih strani za odprto kodo (na primer SourceForge) ima avtomatizirane metode za tovrstno testiranje. Hkrati pa ima veliko število odprtokodnih projektov v okviru njihovih skupnosti ljudi, ki uporabljajo programje iz konteksta ISO 9000 in dela takšne preverbe znotraj njihovih zaposlitvenih organizacij namesto v okviru odprtokodnih projektov ter potem pošlje popravke nazaj na projekt.

Toliko je različnih verzij odprtokodnih programov, da je nemogoče preveriti v vseh ali so določeni hrošči odpravljeni.

Vsak lahko spreminja in si prilagodi odprtokodno programje, če je dosti takih, potem lahko to vodi v zmedo, kateri hrošči vplivajo na katero verzijo.

  • Število verzij v odprtokodnem svetu je lahko prav konfuzno, a v glavnem imajo distributerji (tisti ki sestavljajo odprto kodo v uporaben sistem) orodja, s katerim zasledujejo katera koda je nameščena in je izboljšanja različice avtomatsko ali polavtomatsko, ko se pojavi nova verzija.
  • Svoboda spreminjanja ponuja tudi specifične varnostne prilagoditve. Morda najboljši primer je Security Enchange Linux projekt, pod okriljem ameriške varnostne agencije, ki ponuja mnogo več varnostnih funkcionalnosti za ceno znatno večjega vzdrževanja in upravljanja.
  • Podobne težave imajo nekatera podjetja, ki ponujajo nekaj različnih proizvodov. Še posebej je to značilno za proizvajalce računalniške opreme, za katere sprotna nadgradnja na najvnovejšo verzijo niti ne pride v upoštev.
  • Sistemi varnostnih lukenj in nevarnosti, ki ponujajo slovar za ugotavljanje pomanjkljivosti nepristranskih avtorjev zelo dobro rešujejo to težavo za odprtokodne, lastniške in mešane sisteme.

Vse zgornje točke kažejo, da odprta koda ni čarobna palčka za varnost, temveč da vpliva na varnost na kompleksen način.