Shell, Buffer, Overflow, Exploit

מבוא קצר לנושאי התקפה והגנה מתקדמים

רגע לפני שמתחילים.
במדריך תגלו את יסודות ‪Reverse Shell‬ ו-‪Bind Shell‬.
תראו כיצד לעצור ‪Buffer Overflow‬ בעזרת ‪ASLR‬ ו-‪Stack Canary‬.
נכיר את טכניקת ‪ROP‬ שמצליחה לעקוף הגנות זיכרון.

נמשיך ל-‪Memory Forensics‬ כדי לאתר ‪Rootkit‬ים חמקניים.
נראה איך ‪Metasploit‬ מייעל שלבי ‪Post Exploitation‬.
לבסוף נטעם מעולם ‪Reverse Engineering‬ באמצעות ‪Ghidra‬ ונלמד על ‪DLL Hijacking‬.
התוכן מותאם גם למי שנמצא בהכנה למיוני גאמא סייבר ומשלב הבנה תיאורטית עם תרגול מעשי.

מדריך מקיף לאבטחת מידע ‒ ‎Reverse Shell‎ ‎Buffer Overflow‎ ו‎Reverse Engineering‎

ידע מעמיק בתחום אבטחת המידע מאפשר להתמודד עם פרצות מגוונות ולהבין טכניקות מתקדמות המשמשות תוקפים ומגנים כאחד.
בכל פעם שמגלים חולשה בתוכנה או במערכת, תהליך הלמידה כיצד לנצל אותה וגם כיצד להגן מפניה הוא קריטי.
בשורות הבאות נצלול אל עולמות כמו ‎Reverse Shell‎, ‎Bind Shell‎, ‎Buffer Overflow‎, ‎Reverse Engineering‎ ועוד.
נסקור גם את חשיבות הכלים והתהליכים כגון ‎Metasploit‎, ‎ROP‎ ונלמד על דרכי הסתרת קוד זדוני בעזרת ‎Rootkit‎.
כל אלה יספקו בסיס רחב לכל מי שעוסק בתחום אבטחת המידע או מעוניין להתקדם בו.

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

הקדמה לעולם ההתקפות וההגנות

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

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

מהו ‎Reverse Shell‎

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

מהו ‎Bind Shell‎

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

העקרונות של ‎Buffer Overflow‎

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

שלבי ניצול פגיעות ‎Exploit‎

בדרך כלל, תוקף שמבקש לנצל פגיעות עובר כמה שלבים ברורים.
תחילה הוא מגלה את החולשה בתוכנה או במערכת.
אחר כך הוא מפתח או מתאים ‎Exploit‎ שמנצל בדיוק את אותה פגיעות.
לאחר שהפעולה מצליחה, התוקף משגר ‎Payload‎ שמבצע פעולה מסוימת, למשל פתיחת ‎Reverse Shell‎.
לבסוף, מגיע שלב ה‎Post Exploitation‎ שבו התוקף או בודק האבטחה מנסה לבסס הרשאות גבוהות ולבצע פעולות נוספות כמו איסוף מידע.

חשיבות ‎Reverse Engineering‎ בעולמות האבטחה

‎Reverse Engineering‎ מאפשר לחוקרי אבטחה להבין איך תוכנה פועלת מאחורי הקלעים גם ללא קוד המקור הרשמי.
בניתוח בינארי או קבצי הרצה, אפשר לגלות פונקציות פנימיות, מנגנוני הגנה ואף חולשות אבטחה.
כלי דוגמת ‎IDA Pro‎, ‎Ghidra‎ ו‎Radare2‎ עוזרים לפרק את הקוד לרמה נמוכה ולהבין את הלוגיקה המעשית של התוכנה.
כך ניתן לאתר פרצות ולהתאים ‎Exploits‎ יעודיים או לחקור נוזקות כדי לפתח אמצעי הגנה יעילים.

מהו ‎Rootkit‎

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

היכרות עם ‎Metasploit‎

‎Metasploit‎ הוא כלי מרכזי לבדיקות חדירה ואבטחת מידע.
זוהי פלטפורמה שמכילה מאגר עצום של ‎Exploits‎, ‎Payloads‎ וכלים נוספים המאפשרים אוטומציה של תהליך התקיפה.
אפשר לטעון גרסאות שונות של ‎Shellcode‎, להריץ מודולים מותאמים, ולהשתמש בכלים רבים שמגיעים כחלק מהפלטפורמה.
כך ניתן לבצע באופן מסודר סריקה, זיהוי חולשות, שלבי ‎Post Exploitation‎ ועוד, והכול במקום מרכזי אחד.

כיצד לצמצם סיכוני ‎Buffer Overflow‎

כדי להתמודד עם הצפות זיכרון, מפעילים כמה טכניקות משלימות.
‎ASLR‎ Address Space Layout Randomization מערבבת את כתובות הטעינה של מודולים, כך שקשה יותר לחזות את המיקום המדויק של קוד קריטי.
שימוש בדגל ‎NX bit‎ מוודא שאזורים מסוימים בזיכרון לא יהיו ניתנים להרצה, ומונע הזרקת קוד למקומות שלא יועדו לכך.
כמו כן, כדאי לכתוב קוד מאובטח שבודק את אורך הקלט ומונע כתיבה החורגת מגודל המערך.
שילוב של שלושת המנגנונים האלה מוריד מאוד את הסיכון להצלחת מתקפת ‎Buffer Overflow‎.

שימוש ב‎Shell‎ מרוחק

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

מהי ‎Privilege Escalation‎

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

Stack Canary מול ‎ASLR‎

מעבר ל‎ASLR‎, ישנו מנגנון בשם Stack Canary שמוסיף ערך מיוחד במחסנית הזיכרון לפני כתובת החזרה.
בזמן החזרה מהפונקציה, המערכת בודקת אם הערך השתנה.
אם אכן זוהתה חריגה, זה סימן ל‎Buffer Overflow‎, והתוכנית תיסגר לפני שניתן יהיה לנצל את ההצפה.
כך מקבלים שכבת הגנה נוספת המונעת דריסה ישירה של כתובת החזרה.
לצד ‎ASLR‎, הדבר מקשה מאוד על ניצול הצפה לתוקף.

חשיבות ניתוח זיכרון Memory Forensics לזיהוי ‎Rootkits‎

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

Post Exploitation ב‎Metasploit‎

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

Egg Hunter

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

כיצד ‎Ghidra‎ מקל על ‎Reverse Engineering‎

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

עקיפת ‎NX bit‎ עם Return Oriented Programming ROP

כאשר ‎NX bit‎ מופעל, לא ניתן להריץ קוד מאזורי זיכרון שנחשבים "לא הרצים".
עם זאת, תוקפים פיתחו שיטה שנקראת Return Oriented Programming ROP.
בשיטה הזו לא מזריקים קוד חדש, אלא משתמשים בגזירי פקודות קיימות בזיכרון המכונה Gadgets כדי להרכיב זרימת ביצוע מלאה.
כך מצליחים לעקוף את המגבלה, כי המערכת חושבת שמריצים קוד קיים ולא קוד מוזרק.
ROP נחשב למסובך יותר ליישום, אך הוא מוכיח את עצמו כיעיל מאוד מול מנגנונים כמו ‎NX bit‎.

ניתוח דינמי לצד ‎Reverse Engineering‎ של נוזקות

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

גילוי והסרה של ‎Rootkit‎

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

Stack Pivoting

במתקפות ‎Buffer Overflow‎ מתקדמות או ב‎ROP‎, לפעמים נוצרת צורך להשתמש באזור זיכרון אחר לניהול ה‎Stack‎.
Stack Pivoting הוא הרעיון להזיז את מצביע ה‎Stack‎ לאזור חלופי, למשל ב‎Heap‎ או במקום שהשליטה עליו גמישה יותר.
באופן כזה, התוקף יכול להניח שם מבני נתונים או כתובות חשובות ולהריץ את ה‎ROP‎ ביעילות, תוך עקיפה של מנגנוני ההגנה שמניחים שה‎Stack‎ נשאר באזור הידוע.

DLL Hijacking

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

בסיכומו של דבר, הבנת הטכניקות העיקריות של ‎Reverse Shell‎, ‎Bind Shell‎, ‎Buffer Overflow‎, ‎Rootkit‎ ו‎Metasploit‎ מעניקה נקודת פתיחה מצוינת לעוסקים בכל תחומי אבטחת המידע.
הידע הזה חיוני לא רק לצורך התקפה, אלא גם להגנה אפקטיבית נגד תוקפים מתוחכמים.
בכל שלב שבו מזהים חולשה או תקלה, חשוב להבין את עקרונות העבודה של מערכת ההפעלה, שיטות ההסוואה והאופן שבו זיכרון מנוהל.
כך ניתן למנוע נזק גדול ולשמור על סביבה בטוחה יותר.

תודה! בזכותכם נוכל להשתפר