Kiekvieną dieną įsilaužėliai visame pasaulyje atranda ir išnaudoja naujų svetainių, programų ir net sistemos architektūros spragų. Visuose senuose ar naujuose elektroniniuose įrenginiuose įprastas dalykas yra tai, kad juos paleidžia atmintyje saugomos programos. Piratai tuo pasinaudojo ir rado pažeidžiamumų, žinomų kaip buferio perpildymas.
Nors ir ne naujiena, buferio perpildymo atakos ir pažeidžiamumas pridarė sumaištį elektroninėje erdvėje. Čia paaiškinsime, kas yra buferio perpildymo atakos ir kaip galite jų išvengti.
Buferių ir sistemos atminties supratimas
Norėdami suprasti, kas yra buferio perpildymo ataka ir kaip ji veikia, turite žinoti, kas yra buferis ir kaip veikia kompiuterio atmintis.
Stack ir kaupo atmintis yra dvi pagrindinės kompiuterio atminties savybės. Tai duomenų struktūros, naudojamos atminties paskirstymui. Nors jie panašūs, dėklo ir krūvos atmintis skiriasi keliais būdais.
Stackas, kuriame naudojama paskutinio įėjimo, pirmojo išėjimo (LIFO) koncepcija, naudojama RAM (laisvosios kreipties atmintyje). laikinai išsaugo programos vykdymą, o krūva priskiria atmintį, naudodama dinaminį paskirstymą visuotinei kintamieji. Tačiau vienas dalykas, kurį jie turi, yra buferis.
Kas yra buferis?
Buferis yra atminties sritis, naudojama duomenims saugoti, greičiausiai kompiuterio RAM, kai jie perkeliami iš vienos vietos į kitą. Šie duomenys dažniausiai yra programos, kurias reikia vykdyti. Buferiai saugomi krūvoje arba krūvoje. Jie optimizuoja duomenų vykdymą.
Kas yra buferio perpildymas?
Buferio perpildymas įvyksta, kai buferis gauna daugiau duomenų nei jo talpa. Kadangi jis negali apdoroti tokio duomenų kiekio, jis perpildytas.
Dabar kompiuterio atmintyje iškart po buferio arba buferio vietos yra grąžinimo adresas. Šis grąžinimo adresas iš tikrųjų vadinamas išplėstiniu instrukcijų žymekliu (EIP). Jo funkcija yra nukreipti kompiuterį į nurodytą programą, kai ji užpildyta. Kai buferyje yra daugiau duomenų nei telpa ir jis perpildytas, jis persipildo į grąžinimo adresą.
Norėdami tai suprasti, tarkime, kad turite buferio erdvę, kurioje gali būti tik penkios raidės. Taigi, jei užpildysite tokius žodžius kaip „cukrus“ arba „taika“, buferio srautas gali juos turėti. Tačiau kai turite tokį žodį kaip „autentifikavimas“, jis neišvengiamai išsilieja. Dėl to sistemoje atsiranda klaida arba gedimas. Tačiau įsilaužėliai gali pasinaudoti šiuo pažeidžiamumu, kad pradėtų buferio perpildymo ataką.
Kas yra buferio perpildymo ataka ir kaip ji veikia?
Buferio perpildymo atakos įvyksta, kai įsilaužėlis perima grąžinimo adreso arba EIP valdymą. Kai užpuolikas žino sistemos atminties dydį, jis gali sąmoningai įrašyti duomenis į tą sistemą, kad ją perpildytų. Tada jie įsitikina, kad EIP arba grąžinimo adresas yra parašytas taip, kad būtų nurodyta programa, kuri gali suteikti jiems prieigą prie sistemos arba atskleisti sistemoje saugomą slaptą informaciją.
Užpuolikas netgi gali parašyti kai kuriuos duomenis, kuriuose yra kenkėjiško kodo, ir sukelti buferio perpildymą. Tada EIP įrašomas, kad nukreiptų sistemą atgal į kenkėjišką kodą, ir jis paleidžiamas. Tada įsilaužėlis valdo sistemą.
Yra penki pagrindiniai buferio perpildymo atakų žingsniai:
- Spygliavimas
- Neryškus
- Poslinkio radimas
- EIP arba grąžinimo adreso perrašymas
- Pažeidžiamumo išnaudojimas
Smailinimas yra pirmas žingsnis. Čia įsilaužėliai randa programos atminties dalį, kuri yra pažeidžiama buferio perpildymo. Tada ateina fuzzing, kuris panašus į spiking, bet čia įsilaužėlis siunčia simbolius į programą, kad pamatytų, ar ji gali būti sugadinta. Kai pasiseks, užpuolikas imasi poslinkio, kur buferis perpildytas. Tai daroma norint sužinoti buferio dydį ir grąžinimo adresą. Tada įsilaužėlis įterpia kenkėjišką apvalkalo kodą ir valdo sistemą.
Kokie yra buferio perpildymo atakų tipai?
Yra du pagrindiniai buferio perpildymo atakų tipai: krūvos ir krūvos atakos.
1. Stack-Based buferio perpildymo atakos
Stack-pagrįstos buferio perpildymo atakos yra populiariausias buferio perpildymo atakų tipas. Jie atsiranda, kai viršijama ir išnaudojama sistemos kamino atmintis. Jis taip pat žinomas kaip kaminų daužymas.
2. Krūvos buferio perpildymo atakos
Šio tipo krūvos perpildymas nėra labai paplitęs, nes jį sunku įgyvendinti ir išnaudoti. Tai atsitinka, kai programai skirta atmintis perpildo. 2021 m. sausio mėn. „Google“ aptiko krūvos buferio perpildymą „Chrome“ V8 komponento pažeidžiamumas.
Kaip galite išvengti buferio perpildymo atakų?
Buferio perpildymo atakas galima sušvelninti naudojant OS vykdymo laiką, saugias programavimo kalbas, atsitiktinių adresų erdvės išdėstymo parinktis ir užtikrinant bendras tinkamas saugumo priemones.
1. OS vykdymo apsaugos naudojimas
Vykdymo trukmės apsauga taip pat žinoma kaip vykdymo laiko masyvo ribų tikrinimas. Taip užtikrinama, kad kiekviena paleista programa būtų laisvoje buferinėje erdvėje arba atmintyje. Ir tikrina visus duomenis, įrašytus į sistemos atmintį. Dėl to įsilaužėliams sunku perrašyti duomenis į sistemą ir išnaudoti pažeidžiamumą.
2. Naudojant saugias programavimo kalbas
Programavimo kalbos, tokios kaip C ir C++, neįgyvendina vykdymo laiko masyvo ribų tikrinimo, nes norint patikrinti kiekvieną į sistemą įrašytą programą reikia papildomo kodo ir tai sulėtina. Todėl jie yra labiau jautrūs buferio perpildymo atakoms. Geriau naudoti saugesnes kalbas, tokias kaip C#, Java ir Python, nes jos turi mažesnę buferio perpildymo atakų riziką.
3. Naudokite adresų erdvės išdėstymo atsitiktinį režimą (ASLR)
Ši saugumo priemonė atsitiktinai priskiria programų ir funkcijų adresus sistemos atmintyje skirtingiems duomenų regionams. Dėl to užpuolikui sunku naršyti per jautrias atminties funkcijas.
4. Užtikrinti griežtą saugumo politiką
Tai apima nuolatinį sistemos atnaujinimą, visų į sistemą įrašytų duomenų patvirtinimą ir mažiausiai privilegijų priskyrimą vartotojams. Turėdami tinkamą saugos politiką, neturėtumėte jaudintis dėl buferio perpildymo atakos.
Norint kovoti su buferio perpildymo atakomis, būtina užtikrinti griežtą saugumą
Pagal populiarų posakį saugumo srityje: „kol žmonės naudojasi sistema, egzistuoja pažeidžiamumas“, o tai tiesa ir neišvengiama. Tačiau visada galima sumažinti atakos tikimybę užtikrinant, kad būtų taikomos tinkamos saugumo priemonės ir jų būtų griežtai laikomasi.
Atminkite, kad įsilaužėliai nuolat randa naujų būdų, kaip išnaudoti tokius pažeidžiamumus kaip šis. Todėl jūs turite būti jų priekyje ir stebėti naujausius pasiekimus kibernetinio saugumo srityje.