כיצד למנוע התקפות הצפת מאגר

התקפות הצפת סוללות גורמות למערכות לשפוך נתונים ולגרום לכאוס.

שלב 1

כתוב את קוד האבטחה כדי למנוע התקפות הצפת. ב- C, קיימות מספר פונקציות פגיעות שהאקרים יכולים לנצל כדי למלא את המאגרים. מזער את השימוש שלך strcpy (), strcat (), sprintf () ו vsprintf (), אשר אינו בודק גבולות. במידת האפשר, הימנעו משימוש בקבלת (), אשר אינו מציין כמה תווים יש לקרוא וכך להשאיר את הקוד פגיע. אם אתה משתמש ב- scanf (), הקפד לציין רוחב עבור הפורמט% s כדי למנוע גלישה.

שלב 2

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

שלב 3

ליישם כלי קומפילציה כדי לתת לך אזהרות כאשר אתה משתמש בקוד זה משאיר אותך פגיע להתקפות. חלק מהכלים הללו יפיק קוד שאוסר על אנשים מבחוץ לגשת לכתובות בלתי חוקיות ולבטל את הקוד המנסה לבצע ביצוע כזה. מוצרים כמו StackShield ו StackGuard הם לעזר רב. StackSheild תנתח את כתובת החזרה של פונקציה ולסיים אותה במקרה של חריגה. StackGuard מציב מילה קנארית בכתובת השולח ובודק אם המילה השתנתה, מסיים פונקציה כאשר יש לה את זה.

שלב 4

התקן כלים כמו libsafe כדי לבדוק את האבטחה בסביבה דינמית, בזמן ריצה. Libsafe רץ על לינוקס ובודק את כתובת החזרה הקרובה ביותר של מסגרת מחסנית, ואז מוודא שהכתובת לא מוחלפת. Libsafe גם להחליף פונקציות לא מאובטח, כגון מקבל (), strcpy () ו scanf ().