Всеки ден хакери по целия свят откриват и използват нови уязвимости в уебсайтове, приложения и дори системна архитектура. Едно често срещано нещо във всички електронни устройства, стари или нови, е, че те се управляват от програми, които се съхраняват в паметта. Хакерите са използвали това и са открили уязвимости, известни като препълване на буфер.

Въпреки че не са нови, атаките и уязвимостите при препълване на буфери всяват хаос във киберпространството. Тук ще ви обясним какво представляват атаките за препълване на буфер и как можете да ги предотвратите.

Разбиране на буферите и системната памет

За да разберете какво представлява атаката за препълване на буфер и как работи, трябва да знаете какво е буфер и как работи паметта на компютъра.

Стек и памет памет са две основни характеристики на паметта на компютъра. Те са структури от данни, използвани за разпределяне на паметта. Въпреки че са подобни, стековата и хепа паметта се различават по множество начини.

Стекът, който използва концепцията Last-in, First-out (LIFO), се използва в RAM (памет с произволен достъп) за съхранява временно изпълненията на програмата, докато хийпът присвоява памет чрез динамично разпределение на глобално променливи. Но едно общо нещо между тях е буферът.

instagram viewer

Какво е буфер?

Буферът е област от памет, използвана за съхраняване на данни, най-вероятно в RAM на компютъра, докато се премества от едно място на друго. Тези данни обикновено са програми, които трябва да бъдат изпълнени. Буферите се съхраняват в стека или купчината. Те оптимизират изпълнението на данни.

Какво е препълване на буфер?

Препълване на буфера възниква, когато буферът получи повече данни от капацитета му за съхранение. Тъй като не е в състояние да обработи това количество данни, той прелива.

Сега, в паметта на компютъра, точно след буфер или буферно пространство е обратен адрес. Този адрес за връщане всъщност се нарича разширен указател на инструкции (EIP). Неговата функция е да насочва компютъра към определена програма, когато се попълни. Когато буферът има повече данни, отколкото може да побере и препълва, той прелива в адреса за връщане.

За да разберем това, нека предположим, че имате буферно пространство, което може да съдържа само пет букви. Така че, ако попълните думи като „захар“ или „мир“, буферният поток може да го съдържа. Но когато имате дума като „удостоверяване“, тя неизбежно ще се разлее. Това води до грешка или срив в системата. Но хакерите могат да използват тази уязвимост, за да започнат атака за препълване на буфер.

Какво е атака на препълване на буфер и как работи?

Атаките с препълване на буфер се случват, когато хакерът поеме контрола върху адреса за връщане или EIP. Когато нападателят знае размера на паметта на системата, той може умишлено да запише данни в тази система, само за да я препълни. След това те се уверяват, че EIP или адресът за връщане са написани, за да сочат към програма, която може да им даде достъп до системата или да разкрие чувствителна информация, съхранявана в системата.

Нападателят може дори да напише някои данни, които съдържат злонамерен код и да предизвикат препълване на буфера. След това EIP се записва, за да пренасочи системата обратно към злонамерения код и се кара да работи. След това хакерът получава контрол над системата.

Има пет основни стъпки в атаките за препълване на буфер:

  1. Шипване
  2. Размита
  3. Намиране на компенсацията
  4. Презаписване на EIP или адрес за връщане
  5. Експлоатиране на уязвимостта

Шипването е първата стъпка. Тук хакерите намират частта от паметта на програмата, която е уязвима за препълване на буфер. След това идва fuzzing, което е подобно на spiking, но тук хакерът изпраща символи към програмата, за да види дали може да бъде разбита. След като успее, нападателят продължава да намира изместването, което е мястото, където буферът прелива. Това се прави, за да се знае размерът на буфера и адресът за връщане. След това хакерът вмъква злонамерен шел код и контролира системата.

Какви са видовете атаки за препълване на буфер?

Има два основни типа атаки за препълване на буфер: базирани на стек и атаки, базирани на хеп.

1. Атаки за препълване на буфер, базирани на стека

Базираните на стека атаки за препълване на буфер са най-популярният тип атаки за препълване на буфер. Те се появяват, когато паметта на стека на системата е препълнена и експлоатирана. Известно е още като разбиване на стек.

2. Атаки за препълване на буфер, базирани на хеп

Този тип препълване на стека не е много често срещан, тъй като е труден за внедряване и използване. Това се случва, когато паметта, разпределена на програма, препълва. През януари 2021 г. Google откри препълване на буфер, базиран на heap уязвимост в компонента V8 на Chrome.

Как можете да предотвратите атаки на препълване на буфер?

Атаките с препълване на буфер могат да бъдат смекчени с помощта на защити по време на изпълнение на ОС, защитени езици за програмиране, рандомизиране на оформлението на адресното пространство и гарантиране на цялостни правилни мерки за сигурност.

1. Използване на защита по време на изпълнение на ОС

Защитата по време на изпълнение е известна още като проверка на границите на масива по време на изпълнение. Това гарантира, че всяка стартирана програма е в рамките на наличното буферно пространство или памет. И проверява всички данни, записани в паметта на системата. Това затруднява хакерите да презаписват данни в системата и да използват уязвимостта.

2. Използване на защитени езици за програмиране

Езиците за програмиране като C и C++ не прилагат проверка на границите на масива по време на изпълнение, защото е необходим допълнителен код за проверка на всяка програма, записана в системата, и я забавя. Следователно те са по-податливи на атаки за препълване на буфер. Използването на по-сигурни езици като C#, Java и Python е по-добре, тъй като те носят по-малък риск от атаки за препълване на буфер.

3. Използвайте рандомизиране на оформлението на адресното пространство (ASLR)

Тази мярка за сигурност присвоява произволно адресите на програмите и функциите в системната памет на различни региони с данни. Това затруднява нападателя да навигира през чувствителни функции в паметта.

4. Осигурете строги политики за сигурност

Това включва редовно актуализиране на системата, валидиране на всички данни, записани в системата, и присвояване на най-малко привилегии на потребителите. С правилните политики за сигурност не трябва да се притеснявате за атака с препълване на буфер.

Поддържането на сигурността ви е от съществено значение за борба с атаките на препълване на буфер

Според една популярна поговорка в областта на сигурността „докато дадена система се използва от хората, съществува уязвимост“, което е вярно и неизбежно. Въпреки това, човек винаги може да намали шансовете за атака, като се увери, че са налице подходящи мерки за сигурност и стриктно се спазват.

Не забравяйте, че хакерите постоянно намират нови начини да използват уязвимости като тази. Ето защо от вас зависи да останете пред тях, като следите за най-новите постижения в областта на киберсигурността.