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

Как работят атаките при препълване на буфер? Да влезеш зад кулисите като хакер
Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Как хакерите атакуват системи с помощта на вируси и зловреден софтуер? Понякога това може да бъде ransomware; понякога това може да е атака, която поглъща вашите системни изисквания. Препълването на буфера е един от тези методи за атака, но какво всъщност е то? Как работят тези атаки?





MAKEUSEOF ВИДЕО НА ДЕНЯ ПРЕВЪРТЕТЕ, ЗА ДА ПРОДЪЛЖИТЕ СЪС СЪДЪРЖАНИЕТО

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

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





Стекът по същество е структура от данни, в която се извършват операции за избутване (добавяне) и изскачане (премахване). Понятията буфер и стек са доста сходни; буферът обаче работи като стек, който временно съхранява входящи данни.





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

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



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





как да намалите използването на паметта windows 10

Код за сглобяване





Език за програмиране на ниско ниво , т.е. близо до машинния език.

Буфер

Фиксиран размер разпределено пространство в паметта .

Байтов код

Компилируема междинна езикова форма на код, написана на език от високо ниво.

Компилатор

Програма, която преобразува езика за програмиране в машинен код.

Купчина

Динамично, променливо пространство на паметта.

Основите на теорията на паметта

Без разбиране на теорията на паметта може да е трудно да се решат проблемите с препълването на буфера на практика. Можете да мислите за това като да се опитвате да построите къща, без да знаете как да направите стена.

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

  Диаграма, показваща стек растящ надолу и куп растящ нагоре

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

Докато стекът се създава, паметта използва високи адреси на паметта. Високите адреси на паметта означават разширената област на паметта. Тогава стойностите на адреса започват да намаляват. Стекът с памет използва метод, наречен LIFO (последен вход, първи изход) по време на използване на паметта. Променливите в паметта на стека са валидни само в рамките на обхвата, в който са дефинирани. Ако са извън този обхват, ще възникне грешка.

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

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

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

  • ESP (указател на разширен стек): Този регистър съдържа адреса в горната част на стека.
  • EBP (разширен базов указател): Това държи основния показалец.
  • EIP (указател за разширена инструкция): И този регистър съдържа адреса на следващата инструкция, която трябва да бъде изпълнена.

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

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

Когато добавите нови данни към който и да е стек, тези данни ще бъдат поставени в горната част. След това всички нови данни се преместват надолу. ESP е в горната част на стека. Така че в този случай ESP отива на по-нисък адрес в паметта. Представете си, че данните, добавени по-горе, натискат ESP надолу.

  Диаграма, показваща, че буферното пространство е някъде между ESP и EBP

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

  Диаграма, показваща данните в ESP, насочени към адреса за връщане

С всеки нов бит данни стекът нараства към EBP. Истинският въпрос тук е, ако въведем твърде много данни, можем ли да придвижим EBP към EIP? По този начин данните или кодът, които искате, се намират в EIP и можете да видите резултатите, които искате. Остава само да го стартирате. Когато стартирате програмата, тя посочва вашия EIP код и започва изпълнението. В резултат на това, ако сте били хакер, ще сте извършили първата си атака с препълване на буфера.

За да вземете примера от различен ъгъл, можете да разгледате течности с различна плътност, наречени ESP, EBP и EIP, в контейнер. Представете си, че ESP е разположен в горната част на контейнера, тъй като плътността му е по-ниска. Също като зехтина и водата не трябва да се смесват. Следователно злонамереният код е друга течност - когато го добавите към контейнера, той обърква този баланс, измества малко течност и се смесва с EIP. Това ще покаже препълване на буфера.

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

И така, как да спрете това да се случи?

външният твърд диск на windows 10 не се показва

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

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

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

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