Locked History Actions

Buffer overflow

Žodis angliškai

Buffer overflow

Žodis lietuviškai

Buferio perpildymas, duomenų perpildymo klaida


ĮVADAS

Buferio perpildymas arba duomenų perpildymo klaida, kai buferis užpildytas duomenimis tiek, kad nebėra vietos į jį siunčiamiems naujiems duomenims įrašyti. Dažniausiai tai įvyksta, kai įtaisas nesuspėja apdoroti į jo buferį tiekiamų duomenų ir negali sustabdyti jų tiekimo.

BENDRA INFORMACIJA

Programavimos kalbos, kurioms yra būdingas buferio perpildymas: C ir C++. Jos neturi įdiegtu apsaugų nuo duomenų priėjimo ar perrašymo kurioje nors atminties ląstelėje, taip pat neautomatizuotas masyvų dydžio skaičiavimas, dėl ko masyvai gali būti perpildomi duomenimis. Pateiktame pavyzdyje, programoje nurodyti du duomenų elementai, kurie yra gretimi: 8 baitų ilgio kintamasis A ir 2 baitų ilgio – B. Pradžioje, kintamasis A yra tuščias (visi baitai nuliai), kintamasis B turi dešimtainę reikšmę 1978 (0x07BB):

1.png

Dabar programa bando į A buferį įrašyti ASCII koduotės žodį „excessive“, kuris yra 9 simbolių ilgio ir koduojasi į 10 baitų ilgio eilutę. Žinant, kad buferio A ilgis tik 8 baitai, žodis persidengia su gretimu B buferiu, dėl ko pakinta jo reikšmė iš 1979 į 25856, nes ASCII koduotes simbolis „e“ atitinka 0x65, o paskutinis 10 baitas užpidomas nuliais:

2.png

Nors programa neketino pakeisti B vertės, bet šiuo atveju, žodis netilpęs į A buferį pakeitė ir B buferį, dėl ko pasikeitė jo reikšmė. Jei žodžio reikšmė būtų buvusi dar ilgesnė ir netilptų į 10 baitų eilitę, tai iššauktų segmentacijos klaidą ir programa „nulūžtu“.

APSAUGA

Įvairios technikos buvo taikomos ieškant ir užkertant kelią buferio perpildymui, tačiau pati patikimiausia vis dėlto yra automatizuota apsauga programavimo lygmenyje. Buferio perpildymo apsauga yra naudojama ieškant dažniausiai pasitaikančius buferio perpildymus, tikrinant ar stekas nebuvo perrašytas kitais duomenimis. Jei perrašymas įvyko programa toliau egzistuoja su segmentacijos klaida. Pataisymus yra išleidusios „Libsafe“, „StackGuard“ ir „ProPolice“ sistemos. Stipresnė steko apsauga įmanoma dalijant patį steką į dvi dalis: vieną duomenims, kitą – funkcijos grįžimui. Tačiau tai vistiek neapsaugo sistemos nuo buferio perpildymo, nes duomenys, kurių adresai yra kiti nei grąžinimo, gali būti perrašyti.

Literatūra

http://en.wikipedia.org/wiki/Buffer_overflow_protection

https://www.owasp.org/index.php/Buffer_overflow