זהו סוג מאוד ספציפי של ניצול שמציק לכל מיני תוכנות.

Use-After-Free (UAF) היא פגיעות של שחיתות זיכרון פרימיטיבית שממשיכה להוות איום משמעותי על כל סוגי התוכנות ממערכות הפעלה ועד תוכנות אפליקציות. פגם אבטחה קריטי זה מתרחש כאשר רכיב יישום מנסה לגשת לנתונים בכתובת זיכרון שכבר שוחררה, ומכאן השם - use-after-free.

פגיעויות של UAF יכולות להוביל לניצול פוטנציאלי של תוכנה או אפילו לפגיעה במערכת. הנה מהי פגיעות UAF, מדוע היא מתרחשת וכיצד אתה יכול לאבטח את התוכנה שלך מפני פגיעות UAF.

מהי הפגיעות של שימוש לאחר חינם (UAF)?

לפני שנצלול לתוך הפגיעות של Use-After-Free, בואו ניקח צעד אחורה ונבין כמה יסודות של ניהול זיכרון. כאשר תוכנית מבוצעת, הנתונים והקוד שלה נטענים לזיכרון.

ניהול זיכרון הוא תהליך של ניהול כיצד לאחסן (הנקראת הקצאת זיכרון) ולהסיר (הנקראת הקצאת זיכרון) נתונים וקוד בזיכרון בצורה מיטבית. שני מקטעי הזיכרון העיקריים שבהם מאוחסנים נתוני התוכנית הם הערימה והערימה.

ניתן להקצות לתוכניות שטח זיכרון באופן סטטי בערימה ובאופן דינמי בערימה. פגיעות ללא שימוש לאחר שימוש מתרחשת כאשר מתכנתים אינם מנהלים הקצאת זיכרון דינמית וביטול הקצאה כראוי בתוכנות שלהם. המשמעות היא שמחלקת הפגיעות של UAF היא סוג של ניצול ערימה. כדי להבין את הפגיעות הזו טוב יותר, זה עוזר להבין היטב

instagram viewer
כיצד פועלים מצביעים בתכנות.

Use-After-Free (UAF) כפי שהשם מרמז, הוא סוג של פגיעות של שחיתות זיכרון פרימיטיבית המתרחשת כאשר אובייקט שכבר היה שהוקצתה מהזיכרון שוב ניגשת מה שמוביל לקריסות, או לתוצאות לא מכוונות כגון דליפות זיכרון, הסלמה של הרשאות (EOP) או קוד שרירותי ביצוע. בואו ללמוד כיצד מצב זה מתרחש מלכתחילה וכיצד הוא מנוצל.

כיצד מנוצל שימוש-לאחר-חופשי (UAF)?

Use-After-Free (UAF), כפי שהשם מרמז, היא פגיעות של שחיתות זיכרון פרימיטיבית המתרחשת כאשר תוכנית ממשיכה לגשת למיקומי זיכרון שהיא שחררה. בואו נסתכל על קוד לדוגמה:

#לִכלוֹל <stdio.h>
#לִכלוֹל <stdlib.h>

intרָאשִׁי(){
int *MUO = malloc (גודל של(int));
*MUO = 69420;
printf("ערך: %d\n", *MUO);
חינם (MUO);
printf("ערך?: %d\n", *MUO);
לַחֲזוֹר0;
}

האם ניתן לזהות את הפגיעות? כפי שאתה יכול לראות, בקוד זה, ה MUO המצביע מוקצה מהזיכרון באמצעות ה- חינם() הפונקציה, אך היא נקראת שוב בשורה הבאה באמצעות ה- printf() פוּנקצִיָה. זה גורם להתנהגות בלתי צפויה של התוכנית ובהתאם למקום שבו הפגיעות קיימת בתוכנה, היא עשויה להיות ממונפת כדי להשיג הסלמה של הרשאות ודליפות זיכרון.

כיצד לצמצם שימוש-לאחר-חינם?

UAF מתרחש עקב טעויות בתכנות של אפליקציה. ישנם כמה אמצעי זהירות שאתה יכול לנקוט כדי למנוע פגיעויות של שימוש לאחר חינם בתוכנה שלך.

להלן מספר שיטות עבודה מומלצות שתוכל לאמץ כדי למזער פגיעויות של שחיתות זיכרון בתוכנה שלך:

  • שימוש בשפות תכנות בטוחות לזיכרון כמו Rust עם מנגנונים מובנים למניעת פגיעויות של שחיתות זיכרון פרימיטיביות כמו UAF, Buffer Overflows וכו'. אם אתה משתמש בשפות תכנות כמו C/C++, סביר יותר שתציג באגי זיכרון בקוד שלך. מאותה סיבה, אפילו מערכות הפעלה כמו Windows ולינוקס עוברות לאט לאט ל-Rust. כדאי גם לשקול ללמוד על חלודה אם אתה יוצר תוכניות ברמה נמוכה.
  • מלבד שימוש בשפה בטוחה לזיכרון, מומלץ לפעול לפי שיטות עבודה מומלצות כמו הגדרת מצביע לערך NULL לאחר שחרורו, כדי למנוע כל הצגת פגיעות של שימוש לאחר חינם.
  • אתה יכול גם ליישם טכניקות כמו One Time Allocation (OTA) שמונעות מתוקפים לגשת לזיכרון משוחרר אובייקטים ומדיניות מחזור חיים קפדנית של אובייקטים, המסייעת במעקב אחר כל אובייקט זיכרון שמוקצה ו מוקצה. זכור כי יישומים אלה עשויים להגדיל את התקורה של הזיכרון והביצועים.

דוגמאות בעולם האמיתי לפגיעות של שימוש לאחר חינם (UAF).

הפגיעות של Use-After-Free (UAF) התגלתה ונוצלה בתרחישים שונים בעולם האמיתי, מדפדפני אינטרנט ועד ליבת אנדרואיד ועד ליישומים יומיומיים. זה מוכיח את הצורך באמצעי אבטחה פרואקטיביים. כמה דוגמאות מהעולם האמיתי של UAF כוללות:

  • דפדפני אינטרנט: פגיעויות UAF בדפדפני אינטרנט נוצלו לביצוע קוד שרירותי, פגיעה בפרטיות המשתמש וביצוע התקפות של ביצוע קוד מרחוק. דוגמה עדכנית תהיה CVE-2021-38008, שניצל פגיעות UAF ב-Google Chrome, המאפשר לשחקני איומים להפעיל קוד שרירותי מרחוק במחשב הקורבן.
  • מערכות הפעלה: פגיעויות UAF שנמצאו בליבת Windows/Linux/Android אפשרו לתוקפים להשיג הרשאות גבוהות, לעקוף מנגנוני אבטחה ולהשיג התמדה. יש שפע של פגיעויות UAF שנמצאו ועדיין נמצאות בליבת מערכת ההפעלה עד היום. בזמן כתיבת שורות אלה, CVE-2023-3269, פורסמה לציבור עוד פגיעות UAF בליבת לינוקס המובילה להסלמה של הרשאות. CVE-2022-23270 הוא דוגמה לפגיעות UAF בליבת Windows.
  • יישומי תוכנה: פגיעויות UAF ביישומי תוכנה נוצלו כדי לתפעל תוכניות התנהגות, המובילה לחשיפת מידע, ביצוע קוד שרירותי, קריסת תוכנית, ובמקרה הגרוע, הרשאות הַסלָמָה. יישומי תוכנה מרובים היו ועדיין רגישים להתקפות UAF. תוכנות אלו הן לרוב תוכניות C/C++ אשר פותחו עם גישות לא יעילות ולא בטוחות לניהול זיכרון.

כדי ללמוד עוד על נקודות תורפה לשימוש לאחר חינם ביישומים בעולם האמיתי, תוכל לבדוק את ה MITER CVE הרשמי עמוד רשימה ומיון לפי מילת מפתח שימוש לאחר חינם.

הקצאת זיכרון יעילה עוזרת להפוך את התוכנה לאבטחה

הקצאת זיכרון אופטימלית ומחושבת היטב עושה דרך ארוכה כדי להגן על היישומים שלך מליפול טרף לפגיעויות נפוצות של שחיתות זיכרון פרימיטיבית.

UAF יחד עם Time Of Check Time of Use (TOCTOU), תנאי מירוץ ו-Buffer Overflows (BOF) הם חלק מפגיעות הזיכרון המנוצלות ביותר. ניתן להימנע מכל אלה על ידי לימוד כיצד הזיכרון של התוכנית שלך מנוהל על ידי הפלטפורמה שהיא פועלת עליה. זה נותן לך בהירות כיצד מערכת ההפעלה מקצה את התוכנית שלך בזיכרון ומצייד אותך בכלים לעיצוב תוכנה לביצועים ואבטחה מיטביים.

אם עדיין לא עשית זאת, תוכל להתחיל בהבנת אופן ניהול הזיכרון ב-Linux, מערכת ההפעלה הנפוצה ביותר של השרתים בעולם.