Hakkerit ympäri maailmaa löytävät joka päivä uusia haavoittuvuuksia verkkosivustoissa, sovelluksissa ja jopa järjestelmäarkkitehtuurissa ja käyttävät niitä hyväkseen. Yksi yleinen asia kaikissa elektronisissa laitteissa, niin vanhoissa kuin uusissakin, on, että niitä ajavat muistiin tallennetut ohjelmat. Hakkerit ovat käyttäneet tätä hyväkseen ja löytäneet haavoittuvuuksia, joita kutsutaan puskurin ylivuodoksi.
Vaikka ne eivät ole uusia, puskurin ylivuotohyökkäykset ja haavoittuvuudet ovat aiheuttaneet tuhoa kyberavaruudessa. Tässä selitämme sinulle, mitä puskurin ylivuotohyökkäykset ovat ja kuinka voit estää ne.
Puskureiden ja järjestelmämuistin ymmärtäminen
Ymmärtääksesi, mitä puskurin ylivuotohyökkäys on ja miten se toimii, sinun on tiedettävä, mikä puskuri on ja kuinka tietokoneen muisti toimii.
Pinoa ja kasa muistia ovat tietokoneen muistin kaksi pääominaisuutta. Ne ovat tietorakenteita, joita käytetään muistin varaamiseen. Vaikka ne ovat samanlaisia, pino- ja pinomuisti eroavat toisistaan monella tapaa.
Pinoa, joka käyttää Last-in, First-out (LIFO) -konseptia, käytetään RAM-muistissa (random access memory) tallentaa ohjelman suoritukset väliaikaisesti, kun taas kasa määrittää muistin dynaamisen allokoinnin avulla globaalille muuttujia. Mutta yksi yhteinen asia niille on puskuri.
Mikä on puskuri?
Puskuri on muistialue, jota käytetään tietojen tallentamiseen, todennäköisimmin tietokoneen RAM-muistiin, kun sitä siirretään paikasta toiseen. Nämä tiedot ovat yleensä ohjelmia, jotka on suoritettava. Puskurit tallennetaan pinoon tai pinoon. Ne optimoivat tietojen suorittamisen.
Mikä on puskurin ylivuoto?
Puskurin ylivuoto tapahtuu, kun puskuri vastaanottaa enemmän dataa kuin sen tallennuskapasiteetti. Koska se ei pysty käsittelemään tätä datamäärää, se vuotaa yli.
Nyt tietokoneen muistissa heti puskurin tai puskuritilan jälkeen on paluuosoite. Tätä palautusosoitetta kutsutaan itse asiassa Extended Instruction Pointeriksi (EIP). Sen tehtävänä on osoittaa tietokone tiettyyn ohjelmaan, kun se on täytetty. Kun puskurissa on enemmän dataa kuin siihen mahtuu ja se ylivuodon, se vuotaa yli paluuosoitteeseen.
Tämän ymmärtämiseksi oletetaan, että sinulla on puskuritila, johon mahtuu vain viisi kirjainta. Joten jos täytät sanat, kuten "sokeri" tai "rauha", puskurivirta voi sisältää sen. Mutta kun sinulla on sana, kuten "todennus", se väistämättä leviää. Tämä johtaa virheeseen tai kaatumiseen järjestelmässä. Mutta hakkerit voivat käyttää tätä haavoittuvuutta puskurin ylivuotohyökkäyksen käynnistämiseen.
Mikä on puskurin ylivuotohyökkäys ja miten se toimii?
Puskurin ylivuotohyökkäykset tapahtuvat, kun hakkeri ottaa palautusosoitteen tai EIP: n hallintaansa. Kun hyökkääjä tietää järjestelmän muistin koon, hän voi tarkoituksella kirjoittaa tietoja kyseiseen järjestelmään vain täyttääkseen sen. Sitten he varmistavat, että EIP- tai paluuosoite on kirjoitettu osoittamaan ohjelmaan, joka voi antaa heille pääsyn järjestelmään tai paljastaa järjestelmään tallennettuja arkaluonteisia tietoja.
Hyökkääjä voi jopa kirjoittaa tietoja, jotka sisältävät haitallista koodia ja aiheuttaa puskurin ylivuodon. EIP kirjoitetaan sitten ohjaamaan järjestelmä takaisin haitalliseen koodiin, ja se saatetaan toimimaan. Sitten hakkeri saa järjestelmän hallintaansa.
Puskurin ylivuotohyökkäyksissä on viisi päävaihetta:
- Spiking
- Hämmentävää
- Offsetin löytäminen
- EIP- tai palautusosoitteen korvaaminen
- Haavoittuvuuden hyödyntäminen
Spiking on ensimmäinen askel. Täällä hakkerit löytävät ohjelman muistin osan, joka on alttiina puskurin ylivuodolle. Sitten tulee fuzzing, joka on samanlainen kuin piikki, mutta tässä hakkeri lähettää merkkejä ohjelmaan nähdäkseen, voidaanko se rikkoa. Onnistuessaan hyökkääjä etsii siirtymän, jossa puskuri ylittyi. Tämä tehdään puskurin koon ja palautusosoitteen selvittämiseksi. Sitten hakkeri lisää haitallisen shell-koodin ja hallitsee järjestelmää.
Millaisia puskurin ylivuotohyökkäykset ovat?
Puskurin ylivuotohyökkäyksiä on kahta päätyyppiä: pinopohjaiset ja pinopohjaiset hyökkäykset.
1. Pinopohjaiset puskurin ylivuotohyökkäykset
Pinopohjaiset puskurin ylivuotohyökkäykset ovat suosituin puskurin ylivuotohyökkäystyyppi. Ne tapahtuvat, kun järjestelmän pinomuisti ylittyy ja sitä käytetään hyväksi. Se tunnetaan myös pinon murskaamisena.
2. Kasaan perustuva puskurin ylivuotohyökkäys
Tämän tyyppinen pinon ylivuoto ei ole kovin yleinen, koska sitä on vaikea toteuttaa ja hyödyntää. Se tapahtuu, kun ohjelmalle varattu muisti ylittyy. Tammikuussa 2021 Google havaitsi kasaan perustuvan puskurin ylivuodon Chromen V8-komponentin haavoittuvuus.
Kuinka voit estää puskurin ylivuotohyökkäykset?
Puskurin ylivuotohyökkäyksiä voidaan vähentää käyttämällä käyttöjärjestelmän ajonaikaisia suojauksia, suojattuja ohjelmointikieliä, osoiteavaruuden satunnaistamista ja varmistamalla yleiset asianmukaiset suojatoimenpiteet.
1. OS Runtime Protectionin käyttö
Ajonaikaista suojausta kutsutaan myös runtime array bounds -tarkistukseksi. Tämä varmistaa, että jokainen suoritettava ohjelma on käytettävissä olevan puskuritilan tai muistin sisällä. Ja se tarkistaa kaikki järjestelmän muistiin kirjoitetut tiedot. Tämä tekee hakkereille vaikeaksi kirjoittaa tietoja järjestelmään ja hyödyntää haavoittuvuutta.
2. Turvallisten ohjelmointikielten käyttäminen
Ohjelmointikielet, kuten C ja C++, eivät ota käyttöön ajonaikaista taulukkorajojen tarkistusta, koska jokaisen järjestelmään kirjoitetun ohjelman tarkistaminen vaatii ylimääräistä koodia ja hidastaa sitä. Siksi ne ovat herkempiä puskurin ylivuotohyökkäyksille. Turvallisempien kielten, kuten C#, Java ja Python, käyttö on parempi, koska niillä on pienempi puskurin ylivuotohyökkäysten riski.
3. Käytä osoitetilan asettelun satunnaistamista (ASLR)
Tämä turvatoimenpide määrittää satunnaisesti järjestelmän muistissa olevien ohjelmien ja toimintojen osoitteet eri tietoalueille. Se tekee hyökkääjän vaikeaksi navigoida muistissa olevien arkaluonteisten toimintojen välillä.
4. Varmista tiukat turvallisuuskäytännöt
Tämä edellyttää järjestelmän päivittämistä säännöllisesti, kaikkien järjestelmään kirjoitettujen tietojen validointia ja vähiten oikeuksien myöntämistä käyttäjille. Kun oikeat suojauskäytännöt ovat käytössä, sinun ei tarvitse huolehtia puskurin ylivuotohyökkäyksestä.
Turvallisuus tiukasti on välttämätöntä puskurin ylivuotohyökkäysten torjumiseksi
Suositun turvallisuussanonnan mukaan "niin kauan kuin ihmiset käyttävät järjestelmää, haavoittuvuus on olemassa", mikä on totta ja väistämätöntä. Hyökkäysmahdollisuuksia voidaan kuitenkin aina vähentää varmistamalla, että asianmukaiset turvatoimenpiteet ovat käytössä ja niitä noudatetaan tarkasti.
Muista, että hakkerit löytävät jatkuvasti uusia tapoja hyödyntää tämän kaltaisia haavoittuvuuksia. Siksi sinun on pysyttävä heidän edellään pitämällä silmällä viimeisimmät kyberturvallisuuden alan edistykset.