Vaikutusten vähentäminen (syventävä)

Vaikka ohjelma olisi kuinka hyvin tehty, siihen voi silti jäädä virheitä. Siksi on tärkeää rakentaa lisäkerroksia puolustukseen. Tämä voi tapahtua mm. ympäröivän ohjelmiston, laitteiston, käyttöjärjestelmän, kääntäjän tai vaikka virtuaalikoneen avulla. On siis tärkeää miettiä ohjelmaa sen käyttöympäristössä ja rakentaa suojausta myös ohjelman ympärille.

Ajonaikainen tunnistus (syventävä)

Ajonaikainen tunnistus on ainakin periaatteessa tehokasta, koska virheet havaitaan ja voidaan jopa estää ennen kuin vahinkoa aiheutuu. Tämä tosin tapahtuu tyypillisesti keskeyttämällä ohjelman suoritus. Ajonaikainen tunnistus voi esimerkiksi tarkkailla muistialueita ja estää virheellisiä muistiviittauksia, tarkkailla käyttöjärjestelmän muistialueita tai tarkkailla tietovirtojen sääntöjenmukaista käyttöä. Testauksen aikana suorituskyky ei yleensä muodostu ongelmaksi, jolloin virheitä on tehokasta löytää. Suoritusaikainen tunnistus joudutaan tehokkuussyistä tekemään heikommaksi.

Automatisoitu hajauttaminen (syventävä)

Haavoittuvuuksien hyväksikäyttö edellyttää tapauskohtaisen toteutuksen tai suoritusympäristön tuntemista. Esimerkiksi muistinhallinnan haavoittuvuuksien hyväksikäyttö edellyttää käyttöympäristön tuntemista ja SQL-injektion hyväksikäyttö edellyttää tietokannan yksityiskohtien tuntemista. Yksi tapa suojautua onkin hajaannuttaa toteutuskohtaisia yksityiskohtia. Näin yksi hyökkäys ei toimi laajasti kaikkia järjestelmiä vastaan. Lisäksi hyökkääjän tekemä testaus myös vaikeutuu. Jos hajautus on toteutettu hyvin, toteutettu hyökkäys ei todennäköisesti toimikaan kohdejärjestelmässä. Esimerkkinä automaattisesta hajauttamisesta on muistiavaruuden satunnaistaminen (Address Space Layout Randomization, ASLR). Näin muistirakenteet eivät löydy kiinteistä osoitteista.

Oikeuksien rajoittaminen (syventävä)

Yksi tärkeä keino vähentää haavoittuvan ohjelman vaikutuksia on vähentää sen mahdollisuuksia aiheuttaa vahinkoa. Tämä tapahtuu käytännössä käyttöoikeuksien rajoittamisella tavalla tai toisella.

Yksi keino rajoittaa ohjelman suoritusta on laittaa se ns. hiekkalaatikkoon (sandbox). Hiekkalaatikossa ohjelman suoritus eristetään omaan tilaansa, jolloin mahdollinen haavoittuvuus tai virhetilanne ei aiheuta hiekkalaatikon ulkopuolelle ongelmia. Tästä poikkeuksena ovat haavoittuvuudet itse hiekkalaatikossa, kuten Javan virtuaalikoneessa olevat haavoittuvuudet. Hiekkalaatikon voi luoda monin eri tavoin, kuten virtuaalikoneella, ohjelmallisella erottamisella ja prosessien hallinnalla.

Myös osittamisella (compartmentalization, myös: osastointi) ohjelman oikeuksia voidaan rajoittaa. Tällöin ohjelma jaetaan osiin ja eri osien välisiä oikeuksia rajoitetaan. Tyypillisiä esimerkkejä ovat käyttöjärjestelmän ja tietokantaohjelman asettamat käyttöoikeudet.

Ohjelmiston eheystarkistukset (syventävä)

Ohjelman tai sen käyttämän datan eheys voidaan havaita tarkistussummilla tai tiivisteillä. Parhaassa tapauksessa tarkistukset tehdään niin, että hyökkääjä ei voi niihin vaikuttaa. Näin on tarkoitus esim. Trusted computing -toteutuksessa (katso tarkemmin käyttöjärjestelmien yhteydessä).

Yhteenveto haavoittuvuuksista (syventävä)

Oheiseen taulukkoon on koottu eri haavoittuvuuksien luokat sekä niille tyypillinen estäminen, tunnistaminen ja vaikutusten vähentäminen.

Yhteenveto

Haavoittuvuuksien luokitus

Estäminen

Tunnistus

Vaikutusten vähentäminen

Muistinhallinnan haavoittuvuudet

Ohjelmointikielen valinta, ohjelmointisäännöt

Staattinen ja dynaaminen tunnistus

Muistin suojaus esim. käyttöjärjestämätasolla, hiekkalaatikot

Syötteen muodostuksen haavoittuvuudet

Ohjelmointisäännöt

Tahra-analyysi

Ajonaikainen tunnistus

Kilpatilanteen haavoittuvuudet

Ohjelmointisäännöt, rinnakkaisuuden säännöt, oikeuksien asettaminen prosesseille

hiekkalaatikko

Ohjelmointirajapintojen haavoittuvuudet

Ohjelmointirajapintojen turvallisuuden tarkistaminen, ohjelmakirjastojen ajantasaisuus

Staattinen analyysi

Lokerointi

Sivukanavahaavoittuvuudet

Ohjelmointisäännöt

Staattinen analyysi

Eristäminen


Lisäksi on hyvä muistaa, että testaus on tärkeä osa haavoittuvuuksien tunnistamista.

Palautusta lähetetään...