Johdanto puskurin ylivuotoon

Puskurin ylivuoto tunnetaan myös nimellä Puskurin ylitys, on tietokoneen tila, jossa sovellus yrittää tallentaa enemmän tietoja puskurimuistiin kuin muistin koko. Tämä johtaa tietojen tallentamiseen viereiseen tallennustilaan, joka voi joskus korvata olemassa olevan datan, aiheuttaen mahdollisen tietojen menetyksen ja joskus myös järjestelmän kaatumisen. Se on yleinen ohjelmointivirhe, jonka useimmat kehittäjät sitoutuvat tietämättä. Hakkerit käyttävät tätä useimmiten saadakseen pääsyn ei-toivottuihin tietoihin.

Mikä puskurimuisti on?

Erinomainen kysymys. Puskurimuisti tai puskuri on yksinkertaisesti peräkkäinen osa RAM-muistia, joka on varattu pitämään dataa tilapäisesti, kun sitä siirretään paikasta toiseen - paikka, joka yleensä on syöttö- tai lähtölaite. Tämä tehdään kompensoimaan eroa nopeuksissa, joilla laitteet toimivat.

Esimerkiksi, kun annat joitain asiakirjoja tulostettavaksi, viimeisin i7-prosessori on riittävän nopea suorittamaan tulostuskomento nanosekunnissa, kun taas vanha huono tulostin ei ole varustettu nopealla suorittimella. Joten asiakirjat pidetään puskurimuistissa ja siirretään tulostimelle nopeudella, jonka tulostin hyväksyy. Tämä vapauttaa CPU: n RAM-muistin muihin tehtäviin.

Puskurin ylivuotohyökkäys

Nyt kun tietokoneille on havaittu haavoittuvuus, hakkerit ovat velvollisia hyödyntämään sitä ja yrittämään hyökätä eri järjestelmiin puskurin ylivuotohyökkäysten avulla. Nyt herää kysymys, kuinka hakkeri suorittaa tällaisen hyökkäyksen ja mitkä ovat sen seuraukset?

Puskurin ylivuotohyökkäyksessä lisätiedot sisältävät ohjeita, jotka on tarkoitettu käynnistämään vahingollisia toimia, kuten tiedostojen vioittaminen, tietojen muuttaminen, yksityisen tiedon lähettäminen Internetissä jne. Hyökkääjä hyödyntäisi yksinkertaisesti kaikkia ohjelmia, jotka odottavat tiettyä käyttäjää syötä ja injektoi ylijäämädata puskuriin.

Puskurin ylivuotohyökkäys voidaan luokitella ensisijaisesti kahteen tyyppiin

  • Pino-pohjainen: Kun hyökkäys kohdistuu pinoon perustuvaan muistin allokointiin. Tämän hyödyntäminen on yksinkertaisempaa ja siten alttiimpi hyökkäyksille.
  • Kasaan perustuva: Kun hyökkäys kohdistuu kasaan perustuvaan muistin allokointiin. Tätä ei ole niin helppo hyödyntää, ja se on näin ollen paljon harvempaa.

Puskurin ylivuotohyökkäyksille haavoittuvimmat kielet ovat C, C ++, Fortran ja Assembly, koska ne käyttävät pinopohjaista muistin allokointitekniikkaa.

Hoito

Kun tiedot ovat vioittuneet, alkuperäisiä tietoja ei voi yksinkertaisesti palauttaa. Lisäksi hyökkäyksen voimakkuus määrää suurelta osin parannuksen. Jos hyökkäys on vähäistä ja vaikuttaa vain osaan eristetyn koneen muistista, parannuskeino on yksinkertainen järjestelmämuoto. Jos hyökkäys on laajalle levinnyttä ja vaarantaa useiden koneiden tiedot, koko verkon muotoilu ei auttaisi, ellei haittakoodin injektoiva ohjelma ole korjattu.

Ennaltaehkäisy on parempi kuin parannus

Kehittäjinä on vastuumme tarkistaa puskuriylivuoto koodissamme. Jos puskurin ylivuotoja käsitellään itse koodissa, puskurin ylivuotohyökkäykset eivät haittaa järjestelmän turvallisuutta.

Seuraavassa on joitain yksinkertaisia ​​varotoimenpiteitä, jotka voivat auttaa estämään puskurin ylivuotoja.

  • Poikkeuskäsittely on hyödynnettävä puskurin ylivuotojen havaitsemiseksi ja koodin suorittamisen estämiseksi siinä tapauksessa.
  • Osoita riittävän suuri puskurointi, jotta tarkoituksettomia suuria tietomääriä käsitellään asianmukaisella tavalla.
  • Vältä kirjaston toimintojen tai muiden valmistajien menetelmien käyttämistä, joille ei ole määritetty puskurin ylivuotojen tarkistusta. Yleisiä esimerkkejä sellaisista vältettävistä toiminnoista ovat saatavat (), scanf (), strcpy () Nämä ovat pääasiassa C / C ++ -kielellä.
  • Kooditestauksessa tulisi ottaa huomioon tällaiset haavoittuvuudet ja testata tiukasti koodi ja korjata virheet, jotka voivat johtaa ylivuotoon.
  • Nykyaikaiset ohjelmointikielet, käyttöjärjestelmät ja koodikääntäjät ovat kehittyneet pysäyttämään komennon suorittamisen puskurin ylivuodon tapauksessa. Tästä on tullut luotettavin tapa tunnistaa puskurin ylivuodot automaattisesti.

Kokeile itse …

Oletko ymmärtänyt niin paljon puskurin ylivuodosta ja puskurin hyökkäyksistä, miksi et yritä itse koodata jotain haitallista?

Vastuuvapauslauseke - Seuraava ohjelma on tarkoitettu vain havainnollistamiseen, eikä sitä tule käyttää minkään tyyppisten haittojen aiheuttamiseen. Kaikki haittakoodien kaltaiset muistutukset ovat vain sattumaa. Lisäksi käyttöjärjestelmät ovat nykyään riittävän älykkäitä, jotta puskurin hyökkäyksiä ehkäisevät tarkastukset olisivat paikallaan.

Alla on C-ohjelma, joka voi aiheuttaa potentiaalisen puskurin ylityksen. Miksi valita kieli C? Tämä johtuu siitä, että edistyneemmät ohjelmointikielet on kehitetty käsittelemään puskurin ylityksiä vain kääntämisaikana. Vaikka nykyään C: n kääntäjillä on myös tiettyjä tarkistuksia, jotta vältetään puskurin ylivuodon havaitseminen. Joten, näet vain virhesanoman, joka osoittaa, että puskurin ylitys havaittiin.

#include
#include
#include
int main(int argc, char *argv())
(
char mybuffer(8);
// copy the user input to mybuffer, without any bound checking
printf("Storing user input to mybuffer…\n");
strcpy(mybuffer, argv(1));
printf("mybuffer content= %s\n", mybuffer);
return 0;
)

Mitä tapahtui, kun 123456789 annettiin ohjelman komentoriviargumentiksi? Ohjelma loi virheen, joka heitetään, kun kääntäjä havaitsee puskurin ylivuodon. Kääntäjillä ja käyttöjärjestelmillä on nykyään lisätty suojakerros. Tämä kerros ei ole mitään, mutta muuttujat, joita kutsutaan Kanariansaareiksi, jotka aloitetaan tiettyihin arvoihin käännöshetkellä. Nämä muuttujat tallennetaan sitten viereisiin muistiyksiköihin puskuriin. Joten aina, kun puskuri ylittyy, ylimääräinen data virtaa viereiseen muistiin ja vioittaa Kanariansaarten arvoa. Heti kun vioittunut kanarialue on havaittu, järjestelmä keskeyttää suorituksen.

Toinen esimerkki C ++ -kielellä:

#include
using namespace std;
int main()
(
char buf(8);
cin>>buf;
return 0;
)

Tulo - 123456789

Tulos -

Johtopäätös - Puskurin ylivuoto

Joten, olen nyt varma, että olisit ymmärtänyt puskurin käsittelyn merkityksen ohjelmassasi. Sisällytä tämä käytäntö puskurirajojen tarkistamiseen kirjoitettaessa sekä koodin testaamiseksi. Tämä auttaa sinua kirjoittamaan suojatun koodin.

Suositellut artikkelit

Tämä on opas Mikä on puskurin ylivuoto. Tässä keskustelimme puskurin ylivuodon määritelmästä, ennaltaehkäisystä, muistista ja hyökkäyksistä. Voit myös käydä läpi muiden ehdotettujen artikkeleidemme saadaksesi lisätietoja -

  1. Mikä on JavaScript?
  2. Mikä on Django?
  3. Mikä on SQL-kehittäjä?
  4. Mikä on Azure?