Ihan oikeat ohjelmat

Miten voi tietää, ettei kirjoitteilla oleva ohjelma aiheuta tietoturvaongelmia? Seuraavassa mainitaan kolmenlaisia keinoja. Lähtökohtana oletetaan, että ohjelman määritykset ovat kunnossa eli niiden mukainen toiminta on turvallista. Tämä ei käytännössä ole suinkaan itsestään selvää, vaan puutteelliset määritykset voivat antaa ohjelmoijalle tilaisuuden tehdä niiden mukaista "täydellistä" koodia, joka silti sisältää tietoturva-aukkoja.

Tekeillä olevan ohjelman oikean toiminnan varmistamiseksi kannattaa ensinnäkin noudattaa hyviksi havaittuja ohjelmoinnin periaatteita. Niillä voidaan edistää määritysten ja ohjelman todellisen toiminnan välistä vastaavuutta paitsi yleisesti myös turvallisuuden kannalta.

Toiseksi, ohjelma kannattaa testata huolellisesti. Testausta pitää tehdä ohjelmistotyön eri vaiheissa ja usealla tasolla. Tietoturvan testaukseen voidaan käyttää samoja menetelmiä kuin muuhunkin ohjelmiston testaukseen, mutta voi olla tarpeen ottaa huomioon useita ohjelmistotasoja samalla kerralla. Esimerkiksi moduulien kokonaisuutta testattaessa voi olla tarpeen tutkia vielä autentikointia suorittavan moduulin sisäistäkin toimintaa. Tunkeutumisen havaitsemismenetelmiin liittyvä tietojärjestelmän "hyökkäystestaus" on melko viimeisen vaiheen, jo valmiin asennuksen, testausta.

Hyökkäystestauksen tapaiseen, mutta pinnallisempaan testaukseen viitataan GNU-projektin dokumentissa (mainoksessa): Unix-järjestelmien varusohjelmille annettiin satunnaisia syötteitä ja katsottiin, kuinka usein ohjelmat kaatuivat tai jäivät ikisilmukkaan. Kaupallisilla Unix-järjestelmillä tämä keskimäärä oli 15:n ja 43:n prosentin välillä, GNU:lla se oli 7%. (Vastaavan Fuzz-testin voi tehdä itsekin.)

Testauksen ongelmana on se, että kokeiltavia vaihtoehtoja on yleensä paljon enemmän kuin voidaan (ehditään, on varaa ...) tarkistaa, eikä ole edes helppoa tietää, mitä kaikkia mahdollisuuksia on. Testaus ei siis takaa turvallisuutta vaan pelkästään edistää sitä.

Kolmanneksi, joskin jo osana itse määrittely- ja ohjelmointivaihetta, ohjelmien oikeellisuutta voidaan yrittää verifioida formaalein menetelmin, jotka perustuvat yleensä (temporaali)logiikkaan ja mallin tarkistukseen (model checking). Vastaavat menetelmät ovat jo osoittaneet voimansa laitteistojen (ja laitelmistojen) suunnittelussa, mutta eivät ole vielä lyöneet itseään läpi ohjelmistojen tapauksessa.

Oikeaksi todistaminen on teoriassa mahdotonta, mutta riittävän rajatuissa yhteyksissä voidaan tuloksia saada. Ohjelman tietoturvallisuus on yksi tällainen ala, vaikka toisaalta hyökkäysten periaatteellinen arvaamattomuus tekee tämänkin hyvin haastavaksi. Tietoturvaprotokollien verifioinnin periaatteita ja menetelmiä käsitellään Kryptoprotokollien kurssilla (vuoden 2008 aineiston sivuja: -1- ja -2-)

Mikään edellä mainittu ei siis yksin riitä takaamaan ohjelmien tietoturvallisuutta, vaikka kaikki edistävätkin sitä. Varmaa taetta ei liene edes mahdollista antaa paitsi mitättömän yksinkertaisille ohjelmille. Varminta on soveltaa parhaita käytäntöjä sopivassa suhteessa ja panostaa ohjelmistotyöhön riittävästi myös turvallisuuden kannalta -- toisin kuin tavallisesti tehdään, kun tuotteilla on kiire markkinoille.

-- JukkaKoskinen?

SivuTiedotLaajennettu edit

Vaativuus Perus
Valmius Valmis
Tyyppi Ydin
Luokitus Käytännöt
Mitä Useita
Miltä Muu
Missä Järjestelmä
Kuka Tite-ammattilainen
Milloin Ennakolta
Miksi Hyvä tapa

This topic: Tietoturva > Sisällysluettelo? > IhanOikeatOhjelmat
Topic revision: r3 - 22 Apr 2010 - 11:21:04 - MaijuLehtonen?
 
Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TUTWiki? Send feedback