אני מניח שחלק גדול מאיתנו מכיר את ההתקפה בצורה כזו או אחרת מבחינת דרכים ליישום או סוגי התקפות שונים ודרכים להתגונן מפניהן. אך רובנו איננו מודעים לחלק החשוב שעומד מאחורי התקפות אלו , והוא מגבלות הI/O של מערכות מחשב , ומבני נתונים פגומים אשר מאפשרים להתקפות אלו להתבצע.
למעשה, המטרה בהתקפה זו , היא לגרום לקטע קוד זדוני, לעבוד תחת מערכת נתונים המוגדרת Priveledged מבחינת הרשאות הגישה שלה ( להתקפות שאינן מוטות Kernel אין צורך בגישה שכזו ) כשלמעשה המטרה שלנו כאן היא ליצור מגע עם זיכרון שכבר הוקצה למערכת ואושר על ידי מערכות הHIPS או הAV לפעולה, להשתיל קוד זדוני מבלי שיתגלה , ולהפעיל אותו.
התקפות Buffer Overflow מתבססות בחלקן ( במקרה זה לדוגמא ) על מבני הנתונים השונים המוקצים במערכת , למשל Heap או Stack שהם הנפוצים ביותר , ולגרום להם לפתוח לנו חלון להכנסת מידע.
זה קורה באופן הבא [ בפישוט ] :
כאשר תוכנה מדברת עם מערכת הזיכרון במחשב, היא מדווחת על הפעולה שאותה בכוונתה לבצע לפני כל ביצוע של פעולה שכזו . כלומר - אם המערכת מעוניינת כעת לקרוא 9 בתים מהזיכרון - היא מדווחת על כך שהיא עומדת לקרוא 9 בתים - מה שמאפשר למערכת בקרת הזיכרון לשלוף את אותם נתונים לקריאה. המערכת גם יודעת לדווח שהיא עומדת לכתוב , למשל לכתוב 4 בתים.
כאשר מערכת ניהול הזיכרון מתבקשת לאפשר כתיבת 4 בתים , היא מחזירה נקודת זיכרון במערכת אשר אליה ניתן לכתוב. מה הרעיון ... במצב שבו אנו רוצים לתקוף את תאי הזיכרון ולהכניס מידע משלנו לזיכרון , ניתן לדווח בדיוק כך שאנו רוצים לכתוב 4 בתים , אך בפועל לכתוב 20 בתים.
המערכת אינה מודעת כך , אך דרסנו מקטע זיכרון וכתבנו קטע משלנו אשר יכול להכיל תוכנית או הפניה לתוכנית. ומאחר והתוכנית שרצה כבר קיבלה הקצאת זיכרון , ומערכות האבטחה אישרו את ההקצאה - הן לא יגיבו לכך ולא יציפו התראה.
אגב, רוב מערכות אבטחת המידע מגיבות בדרך דומה כאשר הן מזהות התקפה זו ( למשל על ידי מיפוי הזיכרון והשוואה של כתיבה מול קריאה ) ומזהים קוד זדוני שנכנס לזיכרון - הן פשוט מבצעות למחשב RESET.
Labels: code, hacking, threats, vulnerability