• Reverse Engineering ואבטחת מידע

    Reverse Engineering זהו מושג נרחב ביותר אותו תוקפים והאקרים מנצלים על בסיס יומי. במדריך זה- הסברנו על קצה המזלג כיצד התהליך Reversing עובד


    פורסם ב: 06 ספטמבר 2011
    הדפס כתבה
    כתוב לעורך
    X

    שלח לחבר

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

    כיצד כל זה מתחבר לאבטחת מידע?

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

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

    הרעיון המרכזי של עולם ה- Reversing (הנדסה לאחור), הוא לגרום לתוכנה לקרוס, ולנצל זאת על ידי חלופת המידע בזכרון. ברגע הרצת תוכנה במחשב שלנו, חלקיקי מידע עוברים במחסנית זיכרון ה- RAM שלנו שנקראת "Stack" ובזיכרונות המעבד שנקראים "Registers". זיכרונות אלו קיימים על מנת לאפשר לתוכנה לבצע חישובים מהירים הרבה יותר, דרך המעבד והזיכרון.

    Buffer Overflow

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

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

    לאחר דחיפה לזכרון
    בתמונה: לאחר ביצוע דחיפת מידע למחסנית (Stack).

    לאחר משיכה מהזכרון
    בתמונה: לאחר ביצוע משיכת מידע מהמחסנית (Stack).

    Heap Overflow

    כאשר החוצץ נמצא ב- Stack, הוא לרוב אינו נמצא בסמיכות לכתובות חזרה כל שהן, ולכן באופן כללי ניתן לומר כי קשה יותר לנצל גלישת חוצץ ב Stack לטובת הרצת קוד זדוני מאשר במחסנית. סוג זה של גלישת חוצץ נקרא גלישת ערימה (Heap Overflow).

    תוכנות ו- Reversing

    הנדסה לאחור, היא המקור לכל פריצות התוכנות. בכדי לפרוץ הגנה לתוכנה מסוימת, התוקף משתמש בכלים לביצוע "Live Debugging", על מנת להפעיל את התוכנה ובמקביל לראות כיצד היא מתקשרת עם המעבד והזיכרון. כאשר התוקף פותח את הליך רישום התוכנה, ה- "Debugger" מצביע על הנקודה בזיכרון בה מתנהלת השיחה אודות רישום התוכנה. בשלב זה, התוקף מוסיף לקוד ה- Assembly של התוכנה "קפיצה" מעל שלב הבדיקה של הרישום. כך בעצם התוקף, יכול לייצא את קובץ ה EXE של התוכנה, ללא מנגנון הרישום לתוכנה.

    ביצוע התקפה על הזכרון באמצעות OllyDbg
    בתמונה: Debugger בשם OllyDbg איתו התוקף משתמש להליך הפריצה

    תגיות: ,

    הוספת תגובה
2 תגובות לכתבה זו. הוסף תגובה
תגובה חדשה
בעת שליחת תגובתך הינך מסכים לתנאי השימוש באתר.