כלי הנדסה הפוכה למתחילים - מה באמת צריך להכיר¶
אחד הדברים הראשונים שמפחידים מתחילים בעולם מחקר החולשות הוא כמות הכלים. פותחים סרטון יוטיוב על הנדסה לאחור ופתאום רואים חלון עם עשרות פאנלים, טאבים, וקיצורי מקלדת שאף אחד לא מסביר. אז בואו נעשה סדר - מה הכלים החשובים באמת, ומה כל אחד מהם עושה.
למה בכלל צריך הנדסה לאחור¶
הנדסה לאחור (Reverse Engineering, או בקיצור RE) היא היכולת לקחת קובץ בינארי מוכן - תוכנה שכבר קומפלה - ולהבין מה הוא עושה, בלי שיש לכם את קוד המקור. בעולם מחקר החולשות זה קריטי, כי רוב הזמן אתם לא בודקים קוד פתוח שקל לקרוא, אלא תוכנות סגורות, קושחה, או קובץ בינארי שהורדתם מאתגר CTF.
הכלים מתחלקים בעיקר לשתי קטגוריות - כלים לניתוח סטטי (מסתכלים על הקובץ בלי להריץ אותו) וכלים לניתוח דינמי (בודקים מה קורה בזמן שהתוכנה באמת רצה).
כלים לניתוח סטטי¶
- Ghidra. כלי חינמי שפותח על ידי ה-NSA ושוחרר לציבור, והיום זה כלי ברירת המחדל של רוב הקהילה. הוא לוקח קוד מכונה גולמי והופך אותו בחזרה לקוד שמזכיר C, מה שנקרא decompilation, ומקל מאוד על הבנת התוכנית. בגלל שהוא חינמי לגמרי, זה הכלי שהכי הגיוני להתחיל איתו.
- IDA Pro. הכלי ה"מקצועי" ההיסטורי של התעשייה, בשימוש נרחב בחברות ובמחקר ברמה הגבוהה ביותר. יש לו גרסה חינמית מוגבלת, אבל הגרסה המלאה עולה כסף רציני. שווה להכיר את הממשק שלו כי תיתקלו בו בעולם המקצועי, אבל לא חובה להתחיל שם.
- Binary Ninja. אלטרנטיבה מודרנית עם ממשק נעים וממשק API חזק לאוטומציה. פחות נפוץ מ-Ghidra ו-IDA, אבל צובר פופולריות.
- objdump ו-readelf. כלי שורת פקודה שמגיעים כברירת מחדל בכל מערכת לינוקס. פחות נוחים לניתוח עמוק, אבל מעולים לבדיקות מהירות - איזה פונקציות יש בקובץ, אילו ספריות הוא טוען, ואיזה הגנות מופעלות עליו.
כלים לניתוח דינמי¶
- GDB. דיבאגר שורת הפקודה הסטנדרטי בלינוקס. הוא מאפשר להריץ תוכנית צעד אחר צעד, לעצור בנקודות מסוימות (breakpoints), ולבדוק בדיוק מה קורה בזיכרון וברגיסטרים בכל רגע נתון. זה הכלי שאיתו תבלו הכי הרבה זמן בפועל.
- pwndbg / GEF / peda. תוספים ל-GDB שהופכים אותו מממשק יבש ומינימלי לכלי הרבה יותר ידידותי, עם תצוגה ויזואלית של הסטאק, הרגיסטרים, ומצב הזיכרון בזמן אמת. כמעט כל חוקר חולשות בינארי משתמש באחד מהם.
- strace ו-ltrace. כלים שמראים אילו קריאות מערכת (system calls) או קריאות לפונקציות ספרייה תוכנית מבצעת בזמן ריצה. מעולים כדי להבין במהירות מה תוכנה "עושה" בלי לצלול לקוד המכונה שלה.
איך לבחור במה להתחיל¶
הטעות הכי נפוצה של מתחילים היא לנסות ללמוד את כל הכלים במקביל. אל תעשו את זה. הצעד הראשון הכי הגיוני הוא GDB (עם pwndbg או GEF כתוסף) לניתוח דינמי, ו-Ghidra לניתוח סטטי. השילוב הזה נותן לכם כיסוי מלא - אתם יכולים גם לקרוא את הקוד וגם לצפות בו רץ בזמן אמת. שני הכלים חינמיים לגמרי, מה שאומר שאין שום סיבה לחכות.
חשוב להבין - הכלי עצמו לא "עושה" את המחקר בשבילכם. הוא רק מציג לכם את המידע. ההבנה, החשיבה, וזיהוי הבאג - זה עדיין תלוי בכם. כלי מעולה בידיים של מישהו שלא מבין אסמבלי לא שווה הרבה.
איך זה משתלב במחקר חולשות¶
הנדסה לאחור היא לא תחום נפרד ממחקר חולשות - היא כלי עבודה בתוכו. כדי לנצל חולשה בתוכנה שאין לכם את קוד המקור שלה, אתם חייבים קודם להבין אותה, ובשביל זה בדיוק נועדו הכלים האלה. בקורס מחקר חולשות אנחנו משלבים הנדסה לאחור בכל שלב - לומדים לזהות פונקציות פגיעות, להבין את מבנה הזיכרון, ולעקוב אחרי זרימת התוכנית, כל זאת תוך שימוש בכלים האלה בפועל, לא רק בתיאוריה.
יש לכם שאלה על איזה כלי להתקין או איך להגדיר אותו? בדיסקורד שלנו תמיד יש מי שיכול לעזור.
לסיכום¶
אל תתנו לריבוי הכלים להלחיץ אתכם. תתחילו עם Ghidra ו-GDB (עם pwndbg), תתרגלו איתם על אתגרים פשוטים, ותרחיבו את ארגז הכלים רק כשאתם באמת מרגישים שמשהו חסר לכם. הכלים משרתים את ההבנה שלכם, לא להפך.