Увод у пуњење пуфера

Преплав пуфера познат је и под називом Буффер оверрун, стање рачунара у којем апликација покушава да похрани више података у међуспремник у меморију него у величини меморије. То доводи до тога да се подаци похрањују у суседни простор за похрану који понекад може пребрисати постојеће податке, узрокујући потенцијални губитак података, а понекад и пад сустава. То је уобичајена грешка у програмирању коју већина програмера чини несвесно. То најчешће користе хакери да би добили приступ нежељеним подацима.

Шта је заштитна меморија?

Одлично питање. Меморија пуфера или међуспремник је једноставно секвенцијални део РАМ-а издвојеног за привремено задржавање података док се они преносе с једног места на друго - место које обично представља уређај за унос или излаз. То се ради како би се надокнадила разлика у брзинама којом уређаји раде.

На пример, када дате неке документе за штампу, ваш најновији и7 процесор је довољно брз да изврши наредбу за испис у наносекундама, док лош стари штампач није опремљен тим брзим процесором. Дакле, документи се чувају у меморијском међуспремнику и шаљу се на штампач брзином коју штампач прихвата. Ово ослобађа РАМ меморију вашег ЦПУ-а за друге задатке.

Буффер Оверфлов Аттацк

Сада када је рањивост идентификована са рачунарима, хакери ће је искористити и покушати да нападну различите системе путем напада препуњеног међуспремника. Сада се поставља питање, како хакер извршава такав напад и какве су последице?

У нападу препуњености међуспремника додатни подаци укључују упутства која су намијењена покретању штетних активности као што су оштећење датотека, промјена података, слање приватних података путем интернета итд. Нападач би једноставно искористио сваки програм који чека одређеног корисника унос и убризгавање вишка података у међуспремник.

Напад преливања пуфера може се примарно класификовати у две врсте

  • Заснован на стаку: Када је напад додељен на меморији на бази слагања. То је једноставније искористити и на тај начин је склоније нападима.
  • На бази хеап-а: Када је напад додељен на хеап додељивању меморије. То није тако лако искористити и зато је далеко ређе.

Језици који су најрањивији за нападе препуњења међуспремника су Ц, Ц ++, Фортран и Ассембли јер користе технике расподјеле меморије засноване на стацку.

Лек

Једном када су подаци оштећени, једноставно нема лека за враћање оригиналних података. Штавише, интензитет напада у великој мери одређује лек. Ако је напад мали и погађа само део меморије изоловане машине, једноставан системски облик може бити лек. Док је напад широко распрострањен и компромитовао податке на неколико машина, форматирање читаве мреже неће помоћи ако се не утврди програм који убризгава злонамерни код.

Боље спречити него лечити

Као програмери, наша је одговорност да проверимо да ли је пуфер пуњење у нашем коду. Ако се пуњењем пуфера обрађује у самом коду, сигурност система није ометана нападима препуњења међуспремника.

Следе неки једноставни кораци предострожности који могу помоћи у спречавању преливања међуспремника.

  • Руковање изузецима мора бити искоришћено за откривање прелива пуфера и спречавање извршавања кода у случају њега.
  • Додијелите довољно велику величину за међуспремник тако да се ненамјенским великим количинама података поступа на прописан начин.
  • Избегавајте коришћење библиотечких функција или метода трећих страна које нису везане за проверу због пуњења међуспремника. Уобичајени примери таквих функција које треба избегавати су гет (), сцанф (), стрцпи () Ово су превасходно на језику Ц / Ц ++.
  • Тестирање кода требало би узети у обзир такве рањивости и строго тестирати код и поправити грешке које могу довести до препуњености.
  • Савремени програмски језици, оперативни системи и преводиоци кода су се развили да зауставе извршење наредби у случају препуњености међуспремника. Ово је постао најпоузданији начин за аутоматско откривање прекривања пуфера.

Испробајте сами …

Толико сте разумели о Буффер Оверфлову и Буффер Аттацкс-у, зашто не бисте покушали да сами кодирате нешто злонамерно?

Изјава о одрицању одговорности - Следећи програм је само за илустрацију и не би га требало користити за било какву штету. Свака сличност злонамерног кода је само случајна. Штавише, оперативни системи су данас довољно паметни да могу вршити превентивне-заштитне провјере.

Испод је Ц програм који може изазвати потенцијално прекорачење међуспремника. Зашто избор језика Ц? То је зато што су напреднији програмски језици развијени за обраду прекорачења пуфера током времена компилације. Иако, у данашње време преводиоци Ц такође имају одређене провере како би избегли откривање прекривања међуспремника. Дакле, видели бисте само поруку о грешци која указује да је откривено прекорачење међуспремника.

#include
#include
#include
int main(int argc, char *argv())
(
char mybuffer(8);
// copy the user input to mybuffer, without any bound checking
printf("Storing user input to mybuffer…\n");
strcpy(mybuffer, argv(1));
printf("mybuffer content= %s\n", mybuffer);
return 0;
)

Шта се догодило када је 123456789 програму дат као аргумент наредбеног ретка? Програм је створио грешку која се баца када компајлер открива препуњење бафера. Компајлери и оперативни системи данас имају додатни заштитни слој. Овај слој није ништа, већ променљиве које се зову Канари, а које се иницирају на одређене вредности у време компилације. Те променљиве се затим чувају у суседним меморијским јединицама у међуспремнику. Дакле, кад год се тампон препуни, додатни подаци се уливају у суседну меморију и корумпирају вредност Канара. Чим се открије било који оштећени канаринац, систем прекида извршење.

Још један пример на језику Ц ++:

#include
using namespace std;
int main()
(
char buf(8);
cin>>buf;
return 0;
)

Унос - 123456789

Излаз -

Закључак - Буффер Оверфлов

Дакле, до сада сам сигуран да бисте схватили важност руковања баферима у вашем програму. Укључите ову праксу да бисте проверили да ли постоји тампон граница током писања, као и тестирање вашег кода. Ово ће вам помоћи да напишете сигурни код.

Препоручени чланци

Ово је водич за оно што је пуњење пуфера. Овде смо разговарали о дефиницији, превенцији, памћењу, нападу у Буффер Оверфлов-у. Можете и да прођете кроз друге наше предложене чланке да бисте сазнали више -

  1. Шта је ЈаваСцрипт?
  2. Шта је Дјанго?
  3. Шта је СКЛ Девелопер?
  4. Шта је Азуре?

Категорија: