Sissejuhatus puhvri ülevoolu

Puhvri ületäitumist nimetatakse ka puhverületamiseks - arvuti olek, kus rakendus üritab puhvermällu salvestada rohkem andmeid kui mälu maht. See viib andmete salvestamiseni kõrvuti asuvasse salvestusse, mis võib mõnikord olemasolevad andmed üle kirjutada, põhjustades võimalikku andmete kadu ja mõnikord ka süsteemi krahhi. See on tavaline programmeerimisviga, mille enamik arendajaid toime paneb teadmatult. Kõige sagedamini kasutavad häkkerid seda soovimatutele andmetele juurdepääsu saamiseks.

Mis on puhvermälu?

Suurepärane küsimus. Puhvermälu või puhver on lihtsalt RAM-i järjestikune osa, mis on ette nähtud andmete ajutiseks hoidmiseks, samal ajal kui neid ühest kohast teise edastatakse - see koht on tavaliselt sisend- või väljundseade. Seda tehakse selleks, et kompenseerida erinevust seadme töökiiruses.

Näiteks kui annate mõne dokumendi printimiseks, on teie uusim i7 protsessor piisavalt kiire, et täita printimiskäsklus nanosekundites, samal ajal kui vaesel vanal printeril pole seda kiiret protsessorit. Seega hoitakse dokumente puhvermälus ja edastatakse printerile kiirusega, mille printer aktsepteerib. See vabastab teie protsessori RAM-i muudeks ülesanneteks.

Puhvri ülevoolu rünnak

Nüüd, kui arvutitega on tuvastatud haavatavus, on häkkerid kohustatud seda ära kasutama ja proovima puhverülevoolu rünnakute abil erinevaid süsteeme rünnata. Nüüd tekib küsimus, kuidas häkker sellist rünnakut täidab ja millised on selle tagajärjed?

Puhverülevoolu rünnaku korral sisaldavad lisaandmed juhiseid, mis on ette nähtud kahjulike toimingute käivitamiseks, näiteks failide rikkumine, andmete muutmine, privaatse teabe saatmine Internetis jne. Ründaja kasutab lihtsalt ära kõiki programme, mis teatud kasutajat ootavad sisestage ja sisestage puhvrisse üleliigsed andmed.

Puhvri ületäitumise rünnakut saab peamiselt jagada kahte tüüpi

  • Korstnapõhine: kui rünnak toimub korstnapõhise mälu eraldamise osas. Seda on lihtsam ära kasutada ja seetõttu on see kalduvam rünnakutele.
  • Hunnipõhine: kui rünnak toimub kuhjapõhise mälu jaotamise peale. Seda pole nii lihtne ära kasutada ja seetõttu on seda harvemini.

Puhvrite ületäitumise rünnakute jaoks kõige tundlikumad keeled on C, C ++, Fortran ja Assembly, kuna nad kasutavad korstnapõhist mälu eraldamise tehnikat.

Ravim

Kui andmed on rikutud, pole algsete andmete taastamiseks lihtsalt mingit ravi. Pealegi määrab rünnaku intensiivsus suuresti ravi. Kui rünnak on napp ja mõjutab ainult osa isoleeritud masina mälust, saab selle raviks kasutada lihtsat süsteemivormingut. Kui rünnak on laialt levinud ja see on seadnud ohtu arvuteid mitme masina korral, ei aitaks kogu võrgu vormindamine, kui pahatahtlikku koodi sisestav programm pole fikseeritud.

Ennetamine on parem kui ravimine

Arendajatena on meie kohustus kontrollida puhvrite ületäitumist meie koodis. Kui puhvri ületäitumisi käsitletakse koodis endas, ei kahjusta puhvri ületäitumise rünnakud süsteemi turvalisust.

Järgnevalt on toodud mõned lihtsad ettevaatusabinõud, mis aitavad puhvri ületäitumist vältida.

  • Erandkäsitlust tuleb kasutada puhvri ülevoolu tuvastamiseks ja selle korral koodi täitmise vältimiseks.
  • Jaotage puhverdamiseks piisavalt suur suurus, et mittesihipäraselt suures mahus andmeid käsitletaks õigesti.
  • Vältige raamatukogu funktsioonide või muude tootjate meetodite kasutamist, mille puhul pole puhvri ületäitumist kontrollitud. Levinumad näited selliste funktsioonide vältimiseks on gets (), scanf (), strcpy (). Need on peamiselt C / C ++ keeles.
  • Koodi testimine peaks arvestama selliste turvaaukudega ja kontrollima rangelt koodi ning parandama vead, mis võivad põhjustada ülevoolu.
  • Kaasaegsed programmeerimiskeeled, opsüsteemid ja koodikompilaatorid on puhverülevoolu korral käskude täitmise peatamiseks arenenud. See on muutunud kõige usaldusväärsemaks viisiks puhvri ületäitumist automaatselt tuvastada.

Proovige ise …

Kas olete puhvrite ületäitumisest ja puhverrünnakutest nii palju aru saanud, miks mitte proovida ise midagi pahatahtlikku kodeerida?

Kohustustest loobumine - järgmine programm on mõeldud ainult illustreerimiseks ja seda ei tohiks kasutada igasuguse kahju tekitamiseks. Igasugune sarnasus pahatahtliku koodiga on juhuslik. Pealegi on tänapäeval opsüsteemid piisavalt nutikad, et puhverrünnakuid ennetavaid kontrolle oleks olemas.

Allpool on C-programm, mis võib põhjustada võimaliku puhvri ületamise. Miks valida keel C? Põhjuseks on see, et keerukamad programmeerimiskeeled töötati välja puhverületamiste käsitlemiseks ainult kompileerimise ajal. Kuigi tänapäeval on C-kompilaatoritel olemas ka teatud kontrollid, et vältida puhvri ületäitumist. Nii näete ainult veateadet, mis näitab, et tuvastati puhvri ületus.

#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;
)

Mis juhtus, kui programmile anti käsurida argumendina 123456789? Programm genereeris tõrke, mis visati välja, kui kompilaator tuvastab puhvri ületäitumise. Kompilaatoritel ja opsüsteemidel on tänapäeval lisatud täiendav kaitsekiht. See kiht pole midagi, kuid muutujad, mida nimetatakse Kanaarideks ja mis käivitatakse kompileerimise ajal teatud väärtustele. Seejärel salvestatakse need muutujad puhvris külgnevatesse mäluüksustesse. Nii et kui puhver üle voolab, voolab lisaandmed külgnevasse mällu ja rikub Kanaari saarte väärtuse. Niipea kui rikutud kanaar on tuvastatud, katkestab süsteem täitmise.

Veel üks näide C ++ keeles:

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

Sisend - 123456789

Väljund -

Järeldus - puhvri ületäitumine

Niisiis, nüüdseks olen kindel, et oleksite puhvrite käsitsemise olulisusest oma programmis aru saanud. Kaasake see tava, et kontrollida nii kirjutamise ajal puhverpiiride olemasolu kui ka oma koodi testimist. See aitab teil turvalist koodi kirjutada.

Soovitatavad artiklid

See on olnud teemaks Mis on puhverülevool. Siin arutasime puhverülevoolu määratlust, ennetamist, mälu ja rünnakut. Lisateavet leiate ka meie muudest soovitatud artiklitest -

  1. Mis on JavaScript?
  2. Mis on Django?
  3. Mis on SQL arendaja?
  4. Mis on Azure?

Kategooria: