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

Use-After-Free (UAF) е примитивна уязвимост, повреждаща паметта, която продължава да представлява значителна заплаха за всички видове софтуер от операционни системи до приложен софтуер. Този критичен пропуск в сигурността се появява, когато компонент на приложение се опита да получи достъп до данни в адрес на паметта, който вече е бил освободен, откъдето идва и името— use-after-free.

Уязвимостите на UAF могат да доведат до потенциална експлоатация на софтуер или дори компрометиране на системата. Ето какво представлява UAF уязвимостта, защо се случва и как можете да защитите софтуера си от UAF уязвимост.

Какво представлява уязвимостта при използване след безплатно използване (UAF)?

Преди да се потопим в уязвимостта Use-After-Free, нека направим крачка назад и разберем някои основи на управлението на паметта. Когато една програма се изпълнява, нейните данни и код се зареждат в паметта.

Управлението на паметта е процес на управление на това как да се съхраняват (наречени разпределение на паметта) и премахване (наречени освобождаване на паметта) данни и код в паметта по оптимален начин. Двата основни сегмента на паметта, където се съхраняват програмни данни, са

instagram viewer
стека и купчината.

На програмите може да се разпределя място в паметта статично в стека и динамично в купчината. Използване след освобождаване на уязвимост възниква, когато програмистите не управляват правилно разпределението и освобождаването на динамична памет в своите програми. Това означава, че UAF класът уязвимости е вид експлоатация на купчина. За да разберете по-добре тази уязвимост, е полезно да имате силно разбиране за как работят указателите в програмирането.

Use-After-Free (UAF), както подсказва името, е вид уязвимост на примитивна корупция в паметта, която възниква, когато обект, който вече е бил освободена от паметта е достъпна отново, което води до сривове или непредвидени последствия като изтичане на памет, ескалация на привилегии (EOP) или произволен код екзекуция. Нека научим как възниква това състояние на първо място и как се използва.

Как се използва използването след освобождаване (UAF)?

Use-After-Free (UAF), както подсказва името, е примитивна уязвимост на повреда на паметта, която възниква, когато програма продължава да осъществява достъп до местата в паметта, които е освободила. Нека да разгледаме примерен код:

#включи <stdio.h>
#включи <stdlib.h>

вътросновен(){
вътр *MUO = malloc (sizeof(вътр));
*MUO = 69420;
printf(„Стойност: %d\n“, *MUO);
свободен (MUO);
printf(„Стойност?: %d\n“, *MUO);
връщане0;
}

Можете ли да забележите уязвимостта? Както можете да видите, в този код, MUO указателят се освобождава от паметта с помощта на Безплатно() функция, но тя се извиква отново в следващия ред с помощта на printf() функция. Това води до неочаквано поведение на програмата и в зависимост от това къде в софтуера е налице уязвимостта, тя може да бъде използвана за получаване на ескалация на привилегии и изтичане на памет.

Как да смекчим използването след освобождаване?

UAF възниква поради грешки в програмирането на приложение. Има няколко предпазни мерки, които можете да предприемете, за да избегнете уязвимостите на Use-After-Free във вашия софтуер.

Ето няколко най-добри практики, които можете да приемете, за да сведете до минимум уязвимостите на повреда на паметта във вашия софтуер:

  • Използване на безопасни за паметта езици за програмиране като Rust с вградени механизми за предотвратяване на примитивни уязвимости на повреда на паметта като UAF, препълване на буфер и др. Ако използвате езици за програмиране като C/C++, е по-вероятно да въведете грешки в паметта във вашия код. По същата причина дори операционни системи като Windows и Linux бавно мигрират към Rust. Трябва също да вземете предвид научаване за Rust ако създавате програми на ниско ниво.
  • Освен използването на безопасен за паметта език се препоръчва да следвате най-добрите практики като задаване на указател на NULL стойност, след като бъде освободен, за да избегнете всяко въвеждане на уязвимост Use-After-Free.
  • Можете също така да приложите техники като One Time Allocation (OTA), които не позволяват на нападателите да получат достъп до освободената памет обекти и стриктна политика за жизнения цикъл на обекта, която помага при проследяването на всеки обект от паметта, който е разпределен и освободени. Имайте предвид обаче, че тези реализации могат да увеличат паметта и производителността.

Примери от реалния свят за уязвимост при използване след освобождаване (UAF).

Уязвимостта Use-After-Free (UAF) е открита и използвана в различни сценарии от реалния свят от уеб браузъри до ядрото на Android до ежедневни приложения. Това показва необходимостта от проактивни мерки за сигурност. Някои реални примери за UAF включват:

  • Интернет браузъри: Уязвимостите на UAF в уеб браузърите са били използвани за изпълнение на произволен код, компрометиране на поверителността на потребителя и изпълнение на атаки за дистанционно изпълнение на код. Скорошен пример би бил CVE-2021-38008, който използва UAF уязвимост в Google Chrome, позволявайки на участниците в заплахата да изпълняват произволен код дистанционно на машината жертва.
  • Операционни системи: UAF уязвимостите, открити в ядрата на Windows/Linux/Android, са позволили на атакуващите да получат повишени привилегии, да заобиколят механизмите за сигурност и да получат постоянство. Има множество UAF уязвимости, които са открити и все още се намират в ядрата на операционната система до тази дата. По време на това писане, CVE-2023-3269, още една UAF уязвимост в ядрото на Linux, водеща до ескалация на привилегии, беше публично публикувана. CVE-2022-23270 е пример за UAF уязвимост в ядрото на Windows.
  • Софтуерни приложения: Уязвимостите на UAF в софтуерните приложения са били използвани за манипулиране на програмата поведение, водещо до разкриване на информация, изпълнение на произволен код, срив на програмата и в най-лошия случай привилегия ескалация. Множество софтуерни приложения са били и все още са податливи на UAF атаки. Този софтуер са предимно C/C++ програми, които са разработени с неефективни и опасни подходи за управление на паметта.

За да научите повече за уязвимостите на Use-After-Free в приложения от реалния свят, можете да проверите официален МИТР CVE страница със списък и сортиране по ключова дума Use-After-Free.

Ефективното разпределение на паметта помага да се направи софтуерът сигурен

Оптималното и добре обмислено разпределение на паметта извървява дълъг път за защита на вашите приложения от това да станат жертва на често срещани уязвимости при повреда на примитивната памет.

UAF заедно с Time Of Check Time of Use (TOCTOU), условията на състезание и Buffer Overflows (BOF) са едни от най-често използваните уязвимости в паметта. Всичко това може да се избегне, като научите как паметта на вашата програма се управлява от платформата, на която работи. Това ви дава яснота как операционната система разпределя вашата програма в паметта и ви предоставя инструментите за проектиране на софтуер за оптимална производителност и сигурност.

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