- PCMagazine - http://www.pcmagazine.co.il -
Reverse Engineering ואבטחת מידע
נכתב ע''י אדיר רצון בתאריך 6 בספטמבר 2011 @ 17:35 בקטגוריה אבטחת מידע | 2 Comments
הנדסה לאחור, זהו אחד התחומים המגוונים והמעניינים ביותר בתחום אבטחת המידע. "Reversing", זהו ביטוי בשפת ההאקרים שמתאר את תחום "ההנדסה לאחור". תחום ההנדסה לאחור, הוא תחום ענף מאוד ועוסק תיאורתית במניפולציות על מעבד המחשב והזיכרון.
תחילה אסביר בקצרה כיצד תוכנה נכתבת ומהודרת. כידוע, ישנן עשרות שפות פיתוח כיום, לכל שפה היתרונות והמטרות אליה היא מכוונת. כאשר מתכנת כותב קוד מסוים, בשפת C לדוגמא, התוכנה צריכה לעבור תהליך שנקרא "הידור" בכדי שתוכל לפעול ולדבר עם המעבד. תהליך ההידור, זהו תהליך ההופך את שפת הקוד, לשפת מכונה (אסמבלי). לכל שפת תכנות, מהדר משלה אשר מכיר את ארכיטקטורת השפה ויודע כיצד להפוך את הבקשות הברורות של השפה, לבקשות ברורות בשפת המעבד. שפת המעבד, נקראת Assembly. אסמבלי, בעצם היא שפת הסף. מתכנתים משתמשים בשפת תכנות ולא ישירות ב- Assembly, מכוון שלכתוב בשפת הסף זו משימה קשה הרבה יותר, היא משתנה ממעבד למעבד וקוד שפת הסף ארוך משמעותית מקוד המקור של תוכנה רגילה.
שפת הסף או "אסמבלי" , משרתת האקרים על בסיס יומי. היא עוזרת להאקרים להבין את קוד המקור שנכתב על ידי המתכנת ובמקביל למצוא בו פרצות אבטחה.
הרעיון המרכזי של עולם ה- Reversing (הנדסה לאחור), הוא לגרום לתוכנה לקרוס, ולנצל זאת על ידי חלופת המידע בזכרון. ברגע הרצת תוכנה במחשב שלנו, חלקיקי מידע עוברים במחסנית זיכרון ה- RAM שלנו שנקראת "Stack" ובזיכרונות המעבד שנקראים "Registers". זיכרונות אלו קיימים על מנת לאפשר לתוכנה לבצע חישובים מהירים הרבה יותר, דרך המעבד והזיכרון.
בכדי לנצל את העובדה הזאת, התוקף מייצר לעצמו תוכנה קטנה, או אף משנה את קוד הסף של תוכנה קיימת, על מנת לגרום למחסנית הזיכרון (ה- Stack) להתמלא, על מנת שהתוקף יוכל לכתוב בזיכרון המחסנית קוד זדוני אשר יעזור לו להשיג גישה למערכת.
מחסנית הזיכרון, עובדת בשיטה כזו שהחומר החדש שנכנס לתוכה בעצם דורס את החומר הקיים. לכן, במידה והתוקף מצליח לדרוס את מחסנית הזיכרון של תוכנה קיימת, בדרך כלל התוכנה תקרוס ואז ישארו לתוקף מספר מכובד, אך לא גדול של בייטים אותם הוא מנצל, על מנת להחדיר קוד זדוני או במילים אחרות "Shellcode [1]", שיעזור לו לקבל גישה אל המחשב המרוחק.
בתמונה: לאחר ביצוע דחיפת מידע למחסנית (Stack).
בתמונה: לאחר ביצוע משיכת מידע מהמחסנית (Stack).
כאשר החוצץ נמצא ב- Stack, הוא לרוב אינו נמצא בסמיכות לכתובות חזרה כל שהן, ולכן באופן כללי ניתן לומר כי קשה יותר לנצל גלישת חוצץ ב Stack לטובת הרצת קוד זדוני מאשר במחסנית. סוג זה של גלישת חוצץ נקרא גלישת ערימה (Heap Overflow).
הנדסה לאחור, היא המקור לכל פריצות התוכנות. בכדי לפרוץ הגנה לתוכנה מסוימת, התוקף משתמש בכלים לביצוע "Live Debugging", על מנת להפעיל את התוכנה ובמקביל לראות כיצד היא מתקשרת עם המעבד והזיכרון. כאשר התוקף פותח את הליך רישום התוכנה, ה- "Debugger" מצביע על הנקודה בזיכרון בה מתנהלת השיחה אודות רישום התוכנה. בשלב זה, התוקף מוסיף לקוד ה- Assembly של התוכנה "קפיצה" מעל שלב הבדיקה של הרישום. כך בעצם התוקף, יכול לייצא את קובץ ה EXE של התוכנה, ללא מנגנון הרישום לתוכנה.
בתמונה: Debugger בשם OllyDbg איתו התוקף משתמש להליך הפריצה
הכתבה הודפסה מאתר PCMagazine: http://www.pcmagazine.co.il
קישור לכתבה: http://www.pcmagazine.co.il/security/pid=6608&name=reverse-engineering
קישורים לכתבה:
[1] Shellcode: http://www.pcmagazine.co.il/security/pid=76&name=%d7%90%d7%99%d7%9a-%d7%9e%d7%95%d7%a6%d7%90%d7%99%d7%9d-exploit
לחץ כאן להדפסה.
Copyright © PCMagazine. All rights reserved