Programy ohrozujici bezpecnost

v teto casti se budeme zabyvat pouze aplikacnimi programy

programy mohou poskodit ci zcela znicit data, zpusobit kompromitaci utajovanych skutecnosti, omezit a popripade vyloucit funkcnost celeho systemu.

Utoky proti integrite a utajeni dat

Trapdoors

pojmem oznacujeme nedokumentovany vstup do programoveho modulu, nejcasteji byva vytvoren v ramci tvorby tohoto modulu za ucelem snazsiho ladeni:

trapdoors jsou obvykle odstraneny pred dokoncenim modulu, ale mohou byt opomenuty, ponechany za ucelem ladeni dalsich modulu ci snazsi spravy dokonceneho programu, nebo pro ziskani neopravneneho pristupu k bezicimu programu

Trojske kone (trojan horses)

program, ktery krome svych "radnych" funkci vykonava jeste dalsi skryte akce

objevit Trojskeho kone v programu o stovkach tisic ci milionech radku je velmi obtizne, navic v tomto smyslu muze byt program upraven az nasledne po otestovani a zarazeni do provozu

Salamovy utok (salami attack)

jde o programy, ktere se snazi vyuzivat ve svuj prospech malych zaokrouhlovacich chyb na hranici presnosti pocitace

...ve velkem mnozstvi

program, prevadejici na programatorovo konto zaokrouhlovaci chyby pri vypoctu uroku

salamovy utok je opet velmi tezko detekovatelny, nebot byva provaden v rozsahlych SW systemech, navic nepusobi viditelne problemy

objeveni casto pouze nahodne

Skryte kanaly (covert channels)

v prostredich spravujicich klasifikovane informace zpravidla aplikacni programatori po ukonceni vyvoje nemaji pristup k bezicim programum

chteji-li ziskat pristup ke zpravovanym informacim, vytvori skryty kanal

implementace je naprosto obecna:

zvlaste vhodne pro unik maleho mnozstvi informace, opet prakticky nedetekovatelne

Utoky proti dosazitelnosti sluzeb systemu

Hladove programy (greedy programs)

Viry

(maly) program s autoreprodukcni schopnosti

Cervy (worms)

sitova obdoba viru, maji schopnost prostrednictvim komunikacnich linek se sirit z jednoho pocitace na druhy

Metody vyvoje bezpecneho programoveho vybaveni

programatori maji k dispozici mnoho prostredku jak prekonat obranne mechanismy systemu

pri vyvoji software je tedy nutne pouzivat metody eliminujici tyto snahy

Peer reviews

rozsahly ukol, ktery tym resi je rozdelen na mensi casti, moduly, jejichz reseni ma za ukol nektery clen tymu

dokonceny navrh reseni a dokonceny kod jsou podrobeny oponenture ostatnich clenu tymu na spolecnem sezeni

doporuceny rozsah modulu je 30 - 60 radek

Modularita, zapouzdreni, ukryti informaci

Nezavisle testovani

je obtizne prokazovat spravnost programu - to ze nebyly nalezeny chyby muze pouze znamenat, ze byla pouzita nevhodna metodika testovani

testovani by mel provadet nezavisly tym - snizuje se nebezpeci, ze vysledny program obsahuje nezadouci kod, ci ze nebyl dodrzen puvodni cil projektu.

Sprava konfiguraci (Configuration management)

hlavnim cilem je zajisteni dostupnosti a pouzivani spravnych verzi software

obcas je potreba vratit se k verzi pred provedenim jistych uprav, tento problem je zavaznejsi v prostredi, kde na projektu pracuje cely tym

Hlavni duvody pro zavedeni spravy konfiguraci
  1. Zabranuje nechtenym ztratam predchozich verzi software
  2. Odstranuje komplikace pri vyvoji nekolika podobnych verzi (napr. pro ruzne platformy) zaroven
  3. Poskytuje mechanismus pro kontrolovane sdileni modulu, z nichz je skladan vytvareny system

Za ucelem udrzeni prehledu je nutne vest dukladnou dokumentaci vsech kopii, spravou konfiguraci se zpravidla zabyva vycleneny pracovnik.

Programator pracuje na vlastnim exemplari modulu, ktery po ukonceni etapy jej preda sprave konfiguraci vcetne popisu provedenych uprav a celkove charakteristiky a dale jiz v nem nemuze cinit zmeny.

Je vhodne, aby spravce konfiguraci prijimal programy vyhradne ve zdrojove forme se soupisem a popisem provedenych zmen. Nutne vest detailni log co, kdo, kdy delal.

Dukazy spravnosti programu

Halting problem -> neexistuje obecna metoda jak overit, ze program dela jen to co ma a nic jineho

existuje metoda spocivajici v prevedeni programu v soustavu logickych formuli, pomoci kterych lze overit, zda jistym vstupum odpovidaji pozadovane vysledky

problemem je korektnost prevodu na logicke formule a velka casova slozitost vyhodnocovani

na vetsi systemy zatim prakticky nepouzitelne

Kontrolni mechanismy operacniho systemu

Ne vsechny programy jsou vyvijeny podle techto zasad, mnohe z nedostatku programu vsak muze pokryt vhodne navrzeny operacni system

Spolehlivy software

Program je funkcne korektni pokud vykonava spravne vsechny ocekavane funkce a nic vic.

Spolehlivym software (trusted software) rozumime programy o kterych verime, ze jsou funkcne korektni a ze tuto korektnost vynucuji i modulu, ktere samy spousteji.

operacni system je zpravidla spolehlivy sw.

Vlastnosti spolehlivych programu

Spolehlivy sw. zajistuje pristup k citlivym datum pro (obecne nespolehlive) uzivatele, kterym neni mozne dat primy pristup k prvotni reprezentaci dat. Dale zajistuje provadeni sensitivnich operaci.

Vzajemne podezrivani (Mutual suspicion)

ne vsechny programy jsou spolehlive, ani s pomoci OS neni vzdy mozne spolehlivost vynutit

programy vytvorene podle konceptu vzajemneho podezrivani pracuji jako kdyby ostatni moduly byly vadne

Omezeni (Confinement)

pouzivaji operacni systemy proti podezrelym programum

podezrely program ma prisne vymezeno, jake systemove zdroje smi pouzivat

Parcelizace informaci (Information compartement)

veskera data a programy v systemu jsou rozdelena do nekolika oblasti, kazda informace lezi prave v jedne oblasti, kazdy program muze pracovat s daty z nejvyse jedne oblasti, do ktere sam patri

Access Log

system musi zaznamenavat co, kdo, kdy, s cim a jak dlouho delal

podle stupne utajeni se voli mnozina zaznamenavanych aktivit, zejmena je nutne zaznamenavat chyby (nepovolene pristupy, spatna hesla, ...)

Administrativni nastroje ochrany

nekdy muze byt vhodne ovlivnovat primo lidsky faktor, a ne az vysledny produkt

Standardy vyvoje programu

neni vhodne povolovat programatorum, aby pracovali zcela dle sveho, je treba mit na pameti, ze vysledny kod musi byt verifikovatelny, udrzovatelny apod.

nejcatejsi administrativni kontroly vyvoje software

Standardni navrh - obsahuje popis povolenych vyvojovych prostredku, jazyku, metodologii

Standardy pro tvorbu dokumentace, stylu kodovani, jazyka - popis, jak ma vysledny kod vypadat, volby nazvu promennych, styl komentaru, ...

Standardy programovani - zavazne popisy, jakym zpusobem se provadi programatorska prace v globalnim meritku, rozpisy peer reviews, auditu programu apod.

Standardy testovani - soupis pouzivanych verifikacnich metod, archivovani vysledku testu ...

Standardy konfiguracniho managementu - zpusoby vymeny produktu, zpusob zaznamenavani zmen, ...

standardy jsou dulezite pri tymove praci, zabranuji vzniku modulu, kterym rozumi pouze autor

Dodrzovani standardu vyvoje programu

aby byly efektivni, musi byt standardy dusledne dodrzovany za vsech okolnosti

typickymi situacemi, kdy vznikaji tendence je porusovat jsou okamzky, kdy projekt nabira zpozdeni proti planu, po odchodu klicovych pracovniku apod.

dodrzovani standardu by meli podporovat pravidelne audity bezpecnosti (security audits) provadene nezavislym bezpecnostnim tymem

Rozdeleni ukolu

je vhodne praci rozdelit mezi vice lidi, kteri se znaji co mozna nejmene

omezuje se tak nebezpeci vzniku bezpecnost ohrozujicich programu, navic pokud programator ocekava, ze jeho kod bude podroben zkoumani nezavisleho testovaciho tymu, omezi sve nekale aktivity

Charakter prijimanych pracovniku

firmy bezne sestavuji profily svych potencialnich pracovniku a prijimane podrobuji vsestranemu zkoumani, zda nebodou predstavovat hrozbu pro bezpecnost - obvykle jsou reference z drivejsich pusobist, psychologicke testy apod.

po prijeti ma pracovnik povetsinou velmi omezeny pristup k senzitivnim informacim, az casem ziskava duveru a tim i rozsahlejsi bezpecnostni opravneni

Sledovani pracovniku

je vhodne vest co nejpodrobnejsi informace o pracovnicich, zejmena o:


© Tonda Benes, KSI MFF UK Praha, 1996
Toto je revision 1.1, 20.3.1996
Tuto stranku shledlo jiz <pocet navstevniku> zvedavcu ...