Ово је веома специфична врста експлоатације која мучи све врсте софтвера.

Усе-Афтер-Фрее (УАФ) је примитивна рањивост на оштећење меморије која наставља да представља значајну претњу свим типовима софтвера, од оперативних система до апликативног софтвера. Ова критична безбедносна грешка настаје када компонента апликације покуша да приступи подацима на меморијској адреси која је већ ослобођена, отуда и назив — усе-афтер-фрее.

Рањивости УАФ-а могу довести до потенцијалне експлоатације софтвера или чак до компромитације система. Ево шта је УАФ рањивост, зашто се то дешава и како можете да заштитите свој софтвер од УАФ рањивости.

Шта је рањивост без употребе (УАФ)?

Пре него што уђемо у рањивост Усе-Афтер-Фрее, хајде да направимо корак уназад и разумемо неке основе управљања меморијом. Када се програм изврши, његови подаци и код се учитавају у меморију.

Управљање меморијом је процес управљања начином чувања (која се зове додела меморије) и уклањања (која се назива делокација меморије) података и кода у меморији на оптималан начин. Два примарна меморијска сегмента у којима се чувају програмски подаци су

instagram viewer
стек и хрпа.

Програмима се може доделити меморијски простор статички на стеку и динамички на хрпи. Рањивост без употребе настаје када програмери не управљају правилно динамичком алокацијом меморије у својим програмима. То значи да је УАФ класа рањивости врста експлоатације гомиле. Да бисте боље разумели ову рањивост, добро је разумети како функционишу показивачи у програмирању.

Усе-Афтер-Фрее (УАФ), као што име сугерише, је врста рањивости примитивног оштећења меморије која се јавља када објекат који је већ био одузетој меморији се поново приступа што доводи до пада или нежељених последица као што су цурење меморије, ескалација привилегија (ЕОП) или произвољни код извршење. Хајде да научимо како се ово стање уопште јавља и како се користи.

Како се експлоатише без употребе (УАФ)?

Усе-Афтер-Фрее (УАФ), као што име наговештава, је примитивна рањивост на оштећење меморије која се јавља када програм настави да приступа меморијским локацијама које је ослободио. Хајде да погледамо пример кода:

#инцлуде <стдио>
#инцлуде <стдлиб>

интглавни(){
инт *МУО = маллоц (величина(инт));
*МУО = 69420;
принтф(„Вредност: %д\н“, *МУО);
бесплатно (МУО);
принтф(„Вредност?: %д\н“, *МУО);
повратак0;
}

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

Како ублажити коришћење након бесплатног коришћења?

УАФ се јавља због грешака у програмирању апликације. Постоји неколико мера предострожности које можете предузети да бисте избегли рањивости „Бесплатне употребе“ у свом софтверу.

Ево неколико најбољих пракси које можете усвојити да бисте минимизирали рањивости оштећења меморије у свом софтверу:

  • Коришћење програмских језика безбедних за меморију као што је Руст са уграђеним механизмима за спречавање рањивости примитивних оштећења меморије као што су УАФ, Буффер Оверфловс, итд. Ако користите програмске језике као што је Ц/Ц++, већа је вероватноћа да ћете увести грешке у меморији у свом коду. Из истог разлога, чак и оперативни системи као што су Виндовс и Линук полако прелазе на Руст. Такође би требало да размислите учење о Русту ако креирате програме ниског нивоа.
  • Поред коришћења језика безбедног за меморију, препоручује се да следите најбоље праксе као што је постављање показивача на вредност НУЛЛ након што се ослободи да бисте избегли било какво увођење рањивости Усе-Афтер-Фрее.
  • Такође можете применити технике као што је једнократна додела (ОТА) које спречавају нападаче да приступе ослобођеној меморији објекте и строгу политику животног циклуса објекта, која помаже у праћењу сваког меморијског објекта који је додељен и делоцирано. Имајте на уму да ове имплементације могу повећати трошкове меморије и перформанси.

Примери рањивости без употребе (УАФ) из стварног света

Рањивост Усе-Афтер-Фрее (УАФ) је откривена и искоришћена у различитим сценаријима из стварног света, од веб прегледача преко Андроид кернела до свакодневних апликација. Ово показује потребу за проактивним безбедносним мерама. Неки примери УАФ-а из стварног света укључују:

  • Интернет претраживачи: УАФ рањивости у веб претраживачима су искоришћене за извршавање произвољног кода, угрожавање приватности корисника и извршавање напада на даљинско извршавање кода. Недавни пример би био ЦВЕ-2021-38008, који је искористио рањивост УАФ-а у Гоогле Цхроме-у, омогућавајући актерима претњи да даљински извршавају произвољни код на машини жртве.
  • Оперативни системи: УАФ рањивости пронађене у језгрима Виндовс/Линук/Андроид омогућиле су нападачима да стекну повишене привилегије, заобиђу сигурносне механизме и стекну упорност. Постоји мноштво рањивости УАФ-а које су пронађене и које се до данас налазе у језгрима оперативног система. У време писања овог текста, ЦВЕ-2023-3269, још једна УАФ рањивост у Линук кернелу која је довела до ескалације привилегија, јавно је објављена. ЦВЕ-2022-23270 је пример рањивости УАФ-а у Виндовс кернелу.
  • Софтверске апликације: УАФ рањивости у софтверским апликацијама су искоришћене за манипулисање програмом понашање, које доводи до откривања информација, произвољног извршавања кода, пада програма, и у најгорем случају, привилегија ескалација. Више софтверских апликација је било и још увек је подложно нападима УАФ-а. Ови софтвери су углавном Ц/Ц++ програми који су развијени са неефикасним и несигурним приступима управљања меморијом.

Да бисте сазнали више о рањивости Усе-Афтер-Фрее у апликацијама из стварног света, можете проверити службени МИТЕР ЦВЕ страницу листе и сортирајте по кључној речи Усе-Афтер-Фрее.

Ефикасна алокација меморије помаже да софтвер буде сигуран

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

УАФ заједно са временом провере времена употребе (ТОЦТОУ), условима трке и преливом бафера (БОФ) су неке од најчешће искоришћених рањивости меморије. Све ово се може избећи учењем како се меморијом вашег програма управља помоћу платформе на којој ради. Ово вам даје јасноћу о томе како оперативни систем додељује ваш програм у меморију и пружа вам алате за дизајнирање софтвера за оптималне перформансе и безбедност.

Ако већ нисте, можете почети тако што ћете разумети како се управљање меморијом обавља на Линук-у, најчешће коришћеном серверском оперативном систему на свету.