Perusteet haltuun

Haavoittuvuudet

Helppo
20 min

Mikä on haavoittuvuus?

Termi "haavoittuvuus" tietoturvan kontekstissa viittaa heikkouteen tai aukkoon tietojärjestelmässä, ohjelmistossa tai laitteistossa, joka mahdollistaa hyökkääjän pääsyn järjestelmään tai sen manipulointiin tavalla, joka ei ole tarkoitus. Tämä voi johtaa tietojen vuotamiseen, järjestelmän käyttöoikeuksien laittomaan hankkimiseen tai muuhun ei-toivottuun toimintaan.

Haavoittuvuudet voivat johtua monista tekijöistä, kuten ohjelmointivirheistä, suunnitteluvirheistä, virheellisestä konfiguroinnista tai puutteellisista turvatoimista.

0-päivä, N-päivä ja tunnetut -haavoittuvuudet

Nollapäivähaavoittuvuus (0-day)

Nollapäivähaavoittuvuus viittaa haavoittuvuuteen, joka on tuntematon ohjelmiston valmistajille tai johon ei ole vielä olemassa korjausta. "Nolla päivää" viittaa siihen, että ohjelmiston kehittäjillä ei ole ollut päiviä aikaa reagoida haavoittuvuuteen sen paljastumisen jälkeen. Nollapäivähaavoittuvuudet ovat erityisen vaarallisia, koska niitä vastaan ei ole vielä saatavilla korjaustoimenpiteitä tai päivityksiä, ja ne voivat jäädä tuntemattomiksi pitkiksi ajoiksi. Hyökkääjät voivat käyttää näitä haavoittuvuuksia hyväkseen luodakseen haittaohjelmia tai suorittaakseen hyökkäyksiä, jotka ovat tehokkaita juuri siksi, että niitä vastaan ei ole vielä suojautumiskeinoja.

Sekä tietoturvatutkijat, eettiset hakkerit, valtiolliset tahot että rikollisetkin työskentelevät jatkuvasti löytääkseen tällaisia haavoittuvuuksia ohjelmistoista ja järjestelmistä.

Haavoittuvuus löytyessään voidaan raportoida monin eri tavoin. Ne voidaan ilmoittaa suoraan ohjelmiston kehittäjälle, myydä kolmansille osapuolille kuten Zero Day Initiative (ZDI) -ohjelmille tai, epäeettisemmin, myydä mustilla markkinoilla.

Jotkut valtiontahot käyttävät nollapäivähaavoittuvuuksia tiedustelutarkoituksiin tai kybersodankäyntiin. Ne voivat käyttää näitä haavoittuvuuksia hyväksi kerätäkseen tietoja tai suorittaakseen operaatioita.


N-päivän haavoittuvuus (n-day)

Tämä termi taas viittaa haavoittuvuuteen, joka on jo tunnettu ja johon on ehkä jo olemassa korjaus, mutta jota ei ole vielä korjattu kaikissa järjestelmissä. "N päivää" tarkoittaa, että on kulunut tietty määrä päiviä siitä, kun haavoittuvuus on tullut yleisesti tunnetuksi. N-päivän haavoittuvuudet ovat edelleen riski, erityisesti jos järjestelmiä ei ole päivitetty ajantasaisesti. Hyökkääjät voivat edelleen käyttää näitä haavoittuvuuksia hyväkseen, erityisesti niissä järjestelmissä, jotka eivät ole saaneet tarvittavia päivityksiä tai korjauksia.

Tunnetut haavoittuvuudet

Nämä ovat haavoittuvuuksia, jotka ovat yleisesti tiedossa tietoturva-alalla ja joille on jo olemassa julkiset korjauskeinot tai päivitykset. Ne ovat olleet tiedossa riittävän kauan, että valmistajat ovat ehtineet julkaista korjauksia, ja tieto niistä on levinnyt laajalti tietoturva-yhteisössä.

  • Esimerkiksi: Haavoittuvuudet, jotka ovat listattuina tietokannoissa kuten National Vulnerability Database (NVD) tai Common Vulnerabilities and Exposures (CVE), ovat tunnettuja haavoittuvuuksia.
  • Näiden haavoittuvuuksien riski riippuu siitä, kuinka nopeasti organisaatiot reagoivat ja soveltavat saatavilla olevia korjauksia. Vaikka korjaus on olemassa, järjestelmät voivat pysyä haavoittuvina, jos niitä ei päivitetä säännöllisesti.

Tyypillisiä esimerkkejä haavoittuvuuksista

Injektiohaavoittuvuudet

Injektiolla tarkoitetaan yleensä haavoittuvuutta, jonka avulla hyökkääjä lähettää sovellukseen syötettä, joka rikkoo tai muuttaa jonkin sovelluksen hallitseman kyselyn rakennetta. Näistä hyvinä esimerkkeinä ovat SQL-injektiohaavoittuvuus, jossa hyökkääjä manipuloi sovelluksen suorittamaa tietokantakyselyä, ja XSS-injektio, jossa hyökkääjä manipuloi verkkosovelluksen palauttamaa HTML-vastauksen rakennetta. Perusvaatimuksena injektiohaavoittuvuuksissa yleensä on, että sovellus ei validoi tai sanitoi käyttäjältä tulevaa syötettä oikein ja käyttää tätä jossain muodossa.

Pääsynhallintahaavoittuvuudet

Pääsynhallintaan liittyvät haavoittuvuudet viittaavat rikkinäiseen pääsynhallintaan. Kaikessa yksinkertaisuudessa, jos käyttäjä kykenee käyttämään toimintoja tai näkemään tietoa, jota kyseisen käyttäjän ei kuuluisi kyetä näkemään, kyse on puutteellisesta pääsynhallinnasta tai pääsynhallinnan haavoittuvuudesta.

Konkreettisia pääsynhallintaan liittyviä haavoittuvuuksia ovat mm. IDOR-haavoittuvuudet (Insecure Direct Object Reference), jossa käyttäjän hallinnassa olevia tunnisteita käytetään jonkin resurssin käsittelyssä suoraan. Kyse on IDOR-haavoittuvuudesta, jos käyttäjä kykenee kyseistä tunnistetta muuttamalla käsittelemään hänelle kuulumatonta resurssia suoraan.

Pääsynhallinnassa puhutaan myös yleensä horisontaalisista ja vertikaalisista rajoituksista, jossa horisontaalinen viittaa rajoituksesta, jolla estetään pääsy vaikkapa toisen saman kategorian käyttäjän tietoon, ja vertikaalinen viittaa tavallisen ja korkeamman auktoriteetin välisiin rajoituksiin (Tavallinen käyttäjä vs. Pääkäyttäjä).

Tunnistautumiseen liittyvät haavoittuvuudet

Tunnistautumiseen liittyvät haavoittuvuudet painottuvat kirjautumisprosessin puutteisiin. Tapahtuuko kirjautuminen selaimessa JavaScriptin avulla vai turvallisesti varmistamalla sovelluksen puolella käyttäjätunnusten oikeellisuus? Voiko hyökkääjä suorittaa automatisoituja kirjautumisyrityksiä ja täten arvata tuhansia salasanoja ohjelmallisesti? Myös kaksivaiheisen tunnistautumisen ohittaminen olisi tämän kategorian haavoittuvuus.

Istunnonhallintaan liittyvät haavoittuvuudet

Istunnonhallinnan puutteita tai haavoittuvuuksia voivat olla esimerkiksi session ylläpidossa käytettävän tunnisteen ennalta-arvattavuus. Jos kirjautumisen jälkeiset tunnisteet ovat arvattavissa, hyökkääjän on mahdollista kaapata istunto. Hyvänä esimerkkinä on tässä kurssissa käytetty "Murtaudu verkkosivulle" -tehtävä, jossa istuntoeväste ei ole turvallinen vaan helposti arvattavissa.

Protokollien väärinymmärtäminen

Protokollien väärinymmärtämisellä tarkoitetaan tilannetta, jossa kehittäjät käyttävät hyväksi teknologioita, ymmärtämättä näissä piileviä toiminnallisuuksia. Näistä hyvänä esimerkkinä ovat XXE-haavoittuvuudet, joissa käytetään XML-kielessä piileviä toimintoja, joiden avulla hyökkääjät voivat suorittaa erinäköisiä hyökkäyksiä. Toinen esimerkki on erilaisten PDF-generaattoreiden käyttäminen, joiden avulla voi joskus suorittaa HTML- tai JavaScript-koodia palvelimelta käsin ja täten varastaa esimerkiksi tiedostoja palvelimelta tai suorittaa muita hyökkäyksiä.

Race condition -haavoittuvuudet

Race condition -haavoittuvuudet ovat ohjelmointiongelmia, jotka syntyvät, kun useita prosesseja tai säikeitä yrittää käyttää samaa resurssia samanaikaisesti ja järjestelmän lopputulos riippuu siitä, missä järjestyksessä nämä pääsyt tapahtuvat. Tällainen tilanne voi johtaa arvaamattomiin ja ei-toivottuihin seurauksiin ohjelmistossa.

Otetaan esimerksi tilisiirto käyttäjältä jonka tilin saldo on 10 euroa toiselle vastaanottajalle. Koodi voisi toimia näin.

  • Tarkistetaan tietokannasta, onko käyttäjällä tarpeeksi saldoa (10 euroa tai yli).
  • Jos on, lisätään vastaanottajalle X määrä saldoa.
  • Vähennetään sitten käyttäjältä X määrä saldoa.

Mitä jos käyttäjä kirjoittaa koodinpätkän joka lähettää täysin samanaikaisesti kaksi tilisiirtoa? Tällöin pankin palvelimella käynnistyisi samaan aikaan kaksi koodin suoritusta:

  • Suoritus 1: Tarkistetaan tietokannasta, onko käyttäjällä tarpeeksi saldoa: OK
  • Suoritus 2: Tarkistetaan tietokannasta, onko käyttäjällä tarpeeksi saldoa: OK
  • Suoritus 1: Lisätään vastaanottajalle 10 euroa saldoa.
  • Suoritus 2: Lisätään vastaanottajalle 10 euroa saldoa. <- Hupsista, vastaanottajalle lähetettiin 20 euroa tililtä jolla oli vain 10 euroa rahaa.

Muistin korruptiohaavoittuvuudet

Muistin korruptiohaavoittuvuudet (memory corruption vulnerabilities) viittaavat ohjelmointivirheisiin, jotka aiheuttavat ohjelman muistin vääränlaista käyttöä. Tämä voi johtaa ohjelman epävakaaseen toimintaan, tietojen vääristymiseen, ohjelman kaatumiseen ja usein tietoturva-aukkojen syntymiseen. Tällaiset haavoittuvuudet ovat yleisiä erityisesti C- ja C++-ohjelmointikielillä kirjoitetuissa ohjelmissa, joissa muistinhallinta on ohjelmoijan vastuulla. Sen sijaan niitä ei esiinny juuri lainkaan moderneja ohjelmointikehyksiä käytettäessä joissa kehittäjän ei tarvitse itse hallita muistia.

Puutteelisesta konfiguroinnista aiheutuvat haavoittuvuudet

Haavoittuvuudet, jotka johtuvat väärinkonfiguroinnista (misconfiguration vulnerabilities), viittaavat tilanteisiin, joissa järjestelmän tai ohjelmiston asetukset eivät ole turvallisia, mikä voi altistaa ne tietoturvariskeille. Nämä haavoittuvuudet eivät johdu ohjelmakoodin virheistä, vaan virheellisistä tai puutteellisista konfiguraatioista. Tällaisia haavoittuvuuksia voi esiintyä monenlaisissa ympäristöissä, kuten verkkopalvelimissa, tietokannoissa, käyttöjärjestelmissä tai pilvipalveluissa.

hakatemia pro

Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.

Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.