מה זה מחקר חולשות - Binary Exploitation, מוסבר בפשטות¶
אם שאלתם אנשי סייבר ותיקים מה הכי קשה וגם הכי מכובד בתחום, סביר להניח שתשמעו את התשובה הזאת: ניצול בינארי. או בשמו המקצועי, Binary Exploitation. זה לא במקרה נחשב לפסגה. זה גם התחום שהכי מפחיד מתחילים, כי הוא נשמע כמו קסם שחור.
אז בואו נוריד את זה מהפסטל. אני הולך להסביר מה זה בעצם, למה זה שונה מכל שאר עולם הסייבר, ולמה זה שווה את ההשקעה.
אז מה זה בעצם מחקר חולשות בינארי¶
כשאתם מריצים תוכנה - כל תוכנה, ממש כל אחת - היא בסוף מתורגמת לקוד מכונה שהמעבד שלכם מריץ ישירות. אין שם HTML, אין שם JavaScript, אין שום דבר "ידידותי". יש רק זיכרון, רגיסטרים, וכתובות. מחקר חולשות בינארי זה התחום שעוסק במציאת באגים בתוכנות ברמה הזאת, ובניצול שלהם כדי לגרום לתוכנה לעשות משהו שהיא בכלל לא אמורה לעשות.
לדוגמה - תוכנה שמצפה לקבל שם באורך 20 תווים, ומישהו שולח לה 2000 תווים. אם המתכנתים לא הגנו נכון על הזיכרון, אתם יכולים לגרום לתוכנה לקרוס, ובמקרים הגרועים ביותר (מבחינת המתכנת) - להריץ קוד משלכם על המחשב של מישהו אחר. זה בדיוק ההבדל בין "התוכנה קרסה" לבין "השתלטתי על המכונה".
למה זה שונה מפריצת אתרים¶
כשפורצים לאתר, בדרך כלל עובדים ברמה גבוהה יחסית - בקשות HTTP, מסדי נתונים, לוגיקה עסקית. זה מעניין, אבל זה עדיין רחוק מהמתכת עצמה.
בניצול בינארי אתם עובדים הכי קרוב שאפשר לחומרה. אתם צריכים להבין איך זיכרון בנוי, איך הסטאק עובד, איך המעבד קורא הוראות, ואיך מערכת ההפעלה מגנה (או לא מגנה) על התהליכים שרצים בה. זה תחום שדורש חשיבה של הנדסה, לא רק של האקינג.
וזה בדיוק מה שהופך אותו למבוקש כל כך. חברות שמפתחות מוצרים קריטיים - מערכות הפעלה, דפדפנים, רכיבי IoT, תוכנות תעופה - צריכות אנשים שמבינים את השכבה הזאת לעומק, כי שם נמצאות החולשות הכי מסוכנות.
אילו נושאים נכללים בתחום¶
כשאתם מתחילים לחקור את התחום, אתם תיתקלו במונחים האלה שוב ושוב:
- גלישת חוצץ - Buffer Overflow. הבאג הקלאסי שממנו הכל התחיל. כתיבת יותר מידע מהמקום שהוקצה לו בזיכרון.
- Shellcode. קוד מכונה זעיר שכותבים בעצמכם ומזריקים לתוכנה הפגיעה כדי להריץ פקודות.
- ROP - Return Oriented Programming. טכניקה לעקוף הגנות מודרניות בלי להריץ קוד חדש בכלל, אלא על ידי הרכבה חכמה של קטעי קוד קיימים.
- ניצול Heap. חולשות בניהול הזיכרון הדינמי, שדורשות הבנה עמוקה יותר של איך התוכנה מקצה ומשחררת זיכרון.
- מחרוזות פורמט - Format Strings. באג עדין שנובע משימוש שגוי בפונקציות כמו printf.
- הנדסה לאחורה - Reverse Engineering. היכולת לקחת קובץ בינארי בלי קוד מקור ולהבין מה הוא עושה.
כל אחד מהנושאים האלה הוא עולם בפני עצמו, אבל הם בונים אחד על השני בצורה הגיונית.
זה נשמע קשה מדי בשבילי?¶
זו השאלה שכל אחד שואל את עצמו, ואני אענה בכנות - כן, זה קשה. אבל לא בגלל שאתם "לא מספיק חכמים". זה קשה כי יש הרבה שכבות שצריך להבין - קצת שפת C, קצת אסמבלי, קצת איך מערכת הפעלה עובדת. זה לא תחום שקופצים אליו ביום הראשון של הלמידה.
הבשורה הטובה היא שאם עברתם דרך יסודות התכנות והבנתם איך מחשב עובד ברמת החומרה, הכניסה לתחום הזה הרבה יותר טבעית ממה שנראה מבחוץ. זה בסך הכל עוד תחום שנלמד שלב אחר שלב, בדיוק כמו כל דבר אחר.
איך מתחילים ללמוד את זה בפועל¶
הבניתי מסלול שלם שמתחיל מהבסיס - הבנת שפת C, זיכרון, אסמבלי - ומתקדם צעד אחר צעד עד לניצול חולשות אמיתיות, כולל תרגול על אתגרי CTF ואפילו הצצה לחקר CVE אמיתיים. את כל זה תמצאו בקורס מחקר חולשות, חינם ובעברית.
אל תלמדו את זה לבד. זה תחום שבו תקיעות היא חלק בלתי נפרד מהתהליך, וקהילה טובה יכולה לחסוך לכם ימים שלמים של תסכול. בדיסקורד שלנו יש אנשים שעוברים בדיוק את אותו מסע, ואנשים שכבר עברו אותו ושמחים לעזור.
לסיכום¶
מחקר חולשות בינארי הוא לא תחום למתי שיהיו לכם "מספיק ידע" - הוא התחום שדרכו אתם רוכשים את הידע העמוק ביותר על איך מחשבים באמת עובדים. זה דורש סבלנות, אבל התגמול הוא הבנה שרוב אנשי הסייבר בכלל לא מגיעים אליה. תתחילו מהיסודות, תהיו סבלניים עם עצמכם, ותראו לאן זה מוביל.