Mida tähendab “turvaline disaini järgi”?

Disainiliselt turvaline on arvutirakenduste või -süsteemide loomise metoodika, mille puhul tarkvara kõik aspektid on oma olemuselt arendatud viisil, mis muudab pahatahtliku kasutaja jaoks süsteemi kahjustamise, ründamise või kompromiteerimise raskeks või võimatuks. Paljudel juhtudel on konstruktsioonilt turvaline tarkvara kavandatud kontseptsioonist alates, et sulgeda isegi väikseimad turvaaugud elementaarsetes funktsioonides ja kasutada kodeerimisetapis usaldusväärseid klassikalisi tehnikaid, et tagada, et valmistootesse ei tekiks vigu. Mõned peamised valdkonnad, millele turvaline projekteerimine keskendub, on kasutaja või kliendi sisend, turvaline side ja põhiline valideerimine, et tagada teatud tüüpi rünnakute võimatuks muutmine. Kuigi ükski arvutirakendus pole kaitstud kõigi pahatahtlike rünnete eest, on kavandatud turvalisel süsteemil selge eelis nende süsteemide ees, mis kasutavad väliseid turbeteeke või tuginevad ümbritseva keskkonna, näiteks operatsioonisüsteemi, turvalisusele, kuna tarkvara on loodud ärakasutavate rünnakute ärahoidmiseks ja ohjeldamiseks.

Üks arvutirakenduste kõige haavatavamaid valdkondi on selle ettearvamatuse tõttu kasutaja sisestus. Valideerimata, vigade kontrollimiseta kasutatav või mis tahes allikast pimesi vastuvõetud sisend võib kasutada süsteemi sisemisi toiminguid enda vastu, et paljastada tundlikke andmeid või põhjustada süsteemi krahhi. Kui rakendus on oma ülesehituselt turvaline, kontrollitakse kasutaja sisend tavaliselt mingil viisil, kontrollitakse pahatahtlike järjestuste suhtes või teisendatakse see isegi turvalisesse vormingusse, nii et seda saab töödelda, muretsemata ettearvamatu käitumise pärast, mis võib tuleneda mõne märgikombinatsiooni vaiketöötlusest.

Kasutaja sisendi probleem muutub turvalises disainisüsteemis keerukamaks, kui tarkvara on server, mis võtab vastu võrgu kaudu kliendi sisendit. Mõned ründajad võivad kinni püüda kliendilt serverisse suunduvaid kehtivaid sõnumeid või võltsida kliendi üldse, seega kasutatakse tavaliselt muid meetodeid peale omandiõigusega krüptimise, kuna sõnumeid pealtkuulav ründaja võib krüptimise kergesti murda. Tõhusamad turvameetodid programmi väljatöötamisel hõlmavad kliendi saadetava teabe piiramist ja serveri või mooduli võime piiramist selles, mida ta saab või ei saa ise teha.

Kombineerides tarkvara modulaarsuse vähimate privileegide põhimõttega, võib konstruktsioonilt turvaline süsteem takistada ründajatel süsteemi täielikku ohtu seadmast, delegeerides moodulite vahel ülesandeid, millel ei ole ilmtingimata võimet iseseisvalt üht hävitavat toimingut sooritada. Sel viisil saab kasutusele võtta kaitse- ja tõrkekaitsmed, mis võimaldavad süsteemil sissetungi korral turvaliselt taastuda. Seda kontseptsiooni on raske lisada rakendusse, mis ei kasuta põhimõtteliselt turvaliseid põhimõtteid, kuna see nõuab, et kogu programmi arhitektuur oleks suunatud turvalisuse eesmärgile.