Kaip veikia buferio perpildymo atakos? Žengti į užkulisius kaip įsilaužėlis

Kaip veikia buferio perpildymo atakos? Žengti į užkulisius kaip įsilaužėlis
Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius. Skaityti daugiau.

Kaip įsilaužėliai atakuoja sistemas naudodami virusus ir kenkėjiškas programas? Kartais tai gali būti išpirkos reikalaujančios programos; kartais tai gali būti ataka, kuri sunaudoja sistemos reikalavimus. Buferio perpildymas yra vienas iš šių atakos būdų, bet kas tai iš tikrųjų? Kaip veikia šios atakos?





DIENOS VAIZDO ĮRAŠO PAGALBA SLĖKITE, KAD TĘSITE SU TURINIU

Kas yra buferio perpildymas?

Taigi, kas iš tikrųjų yra buferis ir kaminas? Buferis yra laukas, kuriame tam tikra įvesties informacija, kurią pateikiate savo kompiuteriui, laukia, kol ji pasieks atmintį. Duomenų iškvietimas iš atminties yra sistemą varginanti operacija. Taigi, kai buferio srityje yra pakankamai vietos, iškviečiate duomenis tiesiai iš čia. Tai reiškia jūsų įrenginio našumo padidėjimą. Žinoma, kai buferiui skirta vieta yra pilna, ją reikia įrašyti į atmintį.





Stack iš esmės yra duomenų struktūra, kurioje vyksta duomenų siuntimo (pridėjimo) ir pop (pašalinimo) operacijos. Buferio ir kamino sąvokos yra gana panašios; tačiau buferis veikia kaip kaminas, kuriame laikinai saugomi gaunami duomenys.





Buferio perpildymas gali būti sudėtinga tema, tačiau, kaip rodo pavadinimas, tai įvyksta, kai yra duomenų perteklius. Pavyzdžiui, norite prisijungti prie sistemos. Kūrėjai gali skirti 250 baitų vietos vartotojo vardui. Jei įvesite 300 baitų duomenų, buferis perpildys. Šis perpildymas gali paveikti kitus atminties duomenis ir sukelti žalą.

Tai puikiai tinka įsilaužėliams. Kibernetiniai nusikaltėliai gali sujungti šią netvarką su skirtingais atakų vektoriais, pavyzdžiui, norėdami įsilaužti į sistemą ir prisijungti kaip administratorius.



Norėdami suprasti buferio perpildymą, pagrindinės temos, kurias turite atpažinti, bus CPU vidinė architektūra , atminties registrai ir kaip atmintis apdoroja duomenis. Štai keletas terminų apie centrinį procesorių, apie kurį turite žinoti.





Surinkimo kodas





Žemo lygio programavimo kalba , t.y. artima mašinų kalbai.

Buferis

Fiksuotas dydis skirta atminties vieta .

Baito kodas

Kompiliuojama tarpinės kalbos kodo forma, parašyta aukšto lygio kalba.

Kompiliatorius

Programa, kuri konvertuoja programavimo kalbą į mašininį kodą.

Krūva

Dinaminė, kintama atminties vieta.

Atminties teorijos pagrindai

Nesuprantant atminties teorijos gali būti sunku praktiškai išspręsti buferio perpildymo problemas. Galite galvoti apie tai kaip apie bandymą statyti namą, nežinodami, kaip padaryti sieną.

Įsivaizduokite, kad norite paleisti buferio perpildymą įsilaužėlio požiūriu. Norėdami tai padaryti, turite manipuliuoti atmintimi ir leisti CPU vykdyti jūsų kodą. Jei būtumėte piktų kėslų, jūsų tikslas būtų perkrauti atmintį ir taip pat manipuliuoti gretimomis atminties sritimis.

  Diagrama, kurioje parodyta, kaip krūvelė auga žemyn, o krūva auga

Tačiau pirmiausia turite sutelkti dėmesį į krūvos, krūvos ir teksto segmento sąvokas.

Kol kuriamas krūvas, atmintis naudoja didelius atminties adresus. Didelės atminties adresai reiškia išplėstinę atminties sritį. Tada adreso reikšmės pradeda mažėti. Atminties krūva naudoja metodą, vadinamą LIFO (Last In, First Out), kai naudojama atmintis. Kintamieji dėklo atmintyje galioja tik toje srityje, kurioje jie yra apibrėžti. Jei jie nepatenka į šią sritį, įvyks klaida.

Kita vertus, dėklo atmintis veikia dinamiškai ir nereikia pradėti nuo aukštų adresų. Nėra nustatyto krūvos atminties limito; visas ribas nustato operacinė sistema. Galima keisti krūvos atmintį dinamiškai ir šios ribos gali keistis pagal vartotojo poreikius krūvos naudojimo metu. Krūvos atminties ribos priklauso nuo veiksnių, kuriuos nustato operacinė sistema ir aparatinė įranga. Kitaip tariant, šiose ribose jis siūlo dinamišką naudojimą.

Teksto segmente yra programos kodas, o duomenų segmentuose yra pasauliniai duomenys. Dalintis aukštais adresais dėklo ir krūvos atmintis tarpusavyje. Sistema paskiria abi atmintį vykdymo metu.

Norėdami geriau suprasti buferio perpildymą, turėtumėte išnagrinėti bendrosios paskirties duomenų registrus, kuriuos jūsų kompiuterio architektūra naudoja duomenims saugoti. Užuot analizuodami kiekvieną įrašą atskirai, sutelkite dėmesį į esminius dalykus.

kaip pakeisti regioną „Android“
  • ESP (Extended Stack Pointer): Šiame registre saugomas adresas krūvos viršuje.
  • EBP (išplėstinė bazinė rodyklė): Tai palaiko pagrindinį žymeklį.
  • EIP (išplėstinė instrukcijų rodyklė): Ir šiame registre yra kitos vykdytinos instrukcijos adresas.

Šie techniniai terminai gali atrodyti šiek tiek painiai, tačiau įsivaizduokite juos kaip mažus atminties skaidinius.

Kaip veikia buferio perpildymo atakos?

Kai į bet kurį krūvą įtrauksite naujų duomenų, šie duomenys bus išdėstyti viršuje. Tada visi nauji duomenys perkeliami žemyn. ESP yra krūvos viršuje. Taigi šiuo atveju ESP eina į žemesnį atminties adresą. Įsivaizduokite, kad aukščiau pateikti duomenys nustumia ESP žemyn.

  Diagrama, rodanti buferio erdvę tarp ESP ir EBP

Kai programa pradeda veikti, sistema sukuria dėklo rėmelį su vietiniais kintamaisiais. Pagrindinis buferio perpildymo atakos tikslas yra gauti prieigą prie EIP arba grąžinimo adreso. Įsilaužėlis, turintis prieigą prie šio adreso, gali nurodyti jam bet kurį norimą kenkėjišką kodą, kuris paveiks platesnę sistemą.

  Diagrama, kurioje rodomi ESP duomenys, skirti grąžinimo adresui

Su kiekvienu nauju duomenų kiekiu, krūva auga link EBP. Tikrasis klausimas yra toks: jei įvesime per daug duomenų, ar galime pastūmėti EBP link EIP? Tokiu būdu norimi duomenys arba kodas bus EIP ir galėsite matyti norimus rezultatus. Belieka jį paleisti. Kai paleidžiate programą, ji nurodo jūsų EIP kodą ir pradeda vykdyti. Dėl to, jei buvote įsilaužėlis, įvykdėte pirmąją buferio perpildymo ataką.

Norėdami paimti pavyzdį kitu kampu, galite apsvarstyti skirtingo tankio skysčius, vadinamus ESP, EBP ir EIP, talpoje. Įsivaizduokite, kad ESP yra konteinerio viršuje, nes jo tankis yra mažesnis. Kaip ir alyvuogių aliejus ir vanduo, jie neturėtų maišytis. Kenkėjiškas kodas yra kitas skystis – kai jį įdedate į talpyklą, jis sujaukia balansą, išstumia dalį skysčio ir susimaišo su EIP. Tai parodys buferio perpildymą.

Kaip apsisaugoti nuo buferio perpildymo atakų

Taigi, kaip tai sustabdyti?

Pirma, svarbu laikytis geros kodavimo praktikos viso programinės įrangos kūrimo proceso metu, kad būtų sumažintas saugos pažeidžiamumas. Kruopščiai parašytas kodas gali sumažinti buferio perpildymo tikimybę.

Kitas žingsnis yra naudoti gynybos mechanizmus, leidžiančius stebėti atminties sritis, tikrinti buferių ribas ir aptikti atakas. Galiausiai turite reguliariai atnaujinti sistemas ir taikyti pataisas. Atnaujinimai, ištaisantys spragas, apsunkina užpuolikų galimybę išnaudoti žinomas spragas. Be to, naudojant gynybos priemones, tokias kaip programinė įranga ir ugniasienė, suteikiamas papildomas saugumo sluoksnis.

Imkitės veiksmų, kad išvengtumėte buferio perpildymo

Buferio perpildymo atakos kelia didelę grėsmę jūsų kibernetiniam saugumui ir, žinoma, svarbu imtis atsargumo priemonių prieš jas. Laimei, galima blokuoti šias atakas ir sustiprinti gynybos mechanizmus. Daugelis gerų saugos praktikų, pvz., programinės įrangos atnaujinimas, kad pataisytų pataisas, padeda apsisaugoti nuo tokių atakų ir kitų pažeidžiamumų.