מפת הדרכים הטכנית לגאמ"א סייבר: מה ללמוד, באיזה סדר ואיך לתרגל (C, לינוקס ורשתות)

מפת הדרכים הטכנית לגאמ"א סייבר: מה ללמוד, באיזה סדר ואיך לתרגל (C, לינוקס ורשתות)

📌 תמצית מפת הדרכים

  • הבעיה: יש אינספור נושאים טכנולוגיים, וקל לבזבז חודשים על שפות ותחומים שלא נותנים תשואה במיון.
  • הפתרון: התמקדות ב"שלישיית הזהב" (The Golden Trio): שפת C (ההבנה), לינוקס (הידיים), ורשתות (ההקשר).
  • תוכנית עבודה: בניית בסיס מעשי תוך 3 עד 6 חודשים של עבודה עקבית (כ-6 שעות שבועיות) וחיבור בין השלושה בפרויקטים.

למה דווקא C, לינוקס ורשתות?

מועמדים רבים שואלים: "האם כדאי לי ללמוד React, Rust, או אולי AI?" התשובה היא לא.

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

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

צעד 1: שפת C והבנת הזיכרון

לימוד שפת C לקראת גאמ"א אינו מתמקד רק בלולאות ובתחביר, אלא במודל הזיכרון:

  • מצביעים (Pointers): כתובת זיכרון מול ערך, מצביע כפול (**ptr), ומצביע לפונקציה.
  • אריתמטיקת מצביעים: מה קורה כשמבצעים ptr + 1 על מערך של int לעומת char?
  • מבנים (Structs) ויישור (Padding): איך המהדר מסדר שדות בזיכרון, ומה המשמעות של #pragma pack(1)?
  • Stack לעומת Heap: הקצאה סטטית מול malloc/free ואיך נמנעים מזליגות זיכרון.

סדר בתים (Endianness) וביטים

במעבדי x86/x64 המידע נשמר בפורמט Little-Endian (הבייט הנמוך בכתובת הנמוכה), בעוד שברשת המידע מועבר בפורמט Big-Endian (Network Byte Order). הבנה זו קריטית לפענוח פקטות.

דוגמת קוד: ניתוח זיכרון מעשי ב-C

#include <stdio.h>
#include <stdint.h>

typedef struct __attribute__((packed)) {
    uint16_t magic;      // 2 bytes: מזהה חבילה
    uint8_t  flags;      // 1 byte:  דגלי בקרה
    uint16_t length;     // 2 bytes: אורך המידע
} PacketHeader;

void inspect_packet(const uint8_t *raw_bytes) {
    PacketHeader *hdr = (PacketHeader *)raw_bytes;
    printf("Magic: 0x%04X
", hdr->magic);
    printf("Is Encrypted: %s
", (hdr->flags & 0x01) ? "YES" : "NO");
    printf("Payload Length: %u bytes
", hdr->length);
}

צעד 2: לינוקס כסביבת עבודה טבעית

עליכם להרגיש בבית בתוך ה-Terminal ללא תלות בממשק גרפי:

  • פקודות ניווט וחיפוש: find, grep, awk, sed, xargs, cut, sort, uniq.
  • צינורות והפניות (Pipes & Redirections): חיבור פלט של פקודה אחת לקלט של אחרת (|, >, 2>&1).
  • כתיבת סקריפטים ב-Bash: אוטומציה של בדיקות וחיפושים חוזרים.

ארגז כלי מחקר: strings, gdb, objdump, strace

כלי הניתוח המרכזיים

  • strings – מציאת מחרוזות ASCII/Unicode קריאות בתוך קובץ בינארי.
  • strace – הדפסת כל קריאות המערכת (פתיחת קבצים, חיבורי רשת) שהתוכנית מבצעת בזמן ריצה.
  • gdb – דיבאגר שורת פקודה להצבת Breakpoints, קריאת רגיסטרים וניתוח זיכרון בזמן אמת.
  • objdump -d – פירוק בינארי לקוד אסמבלי קריא (Disassembly).

צעד 3: רשתות ברמת הפקטה

הבנת מודל TCP/IP מעבר להגדרות תיאורטיות:

  • שכבת ה-IP: מבנה כתובות IPv4, שדה TTL, שדות אורך ו-Checksum.
  • שכבת ה-Transport (TCP vs UDP): תהליך לחיצת היד המשולשת (3-Way Handshake: SYN → SYN-ACK → ACK), מספרי רצף (Seq/Ack), ודגלי בקרה (FIN, RST, PSH).
  • שכבת האפליקציה: פרוטוקולי HTTP, DNS (מבנה שאילתה ותשובה), ו-SSH.

עבודה מעשית עם Wireshark ו-Scapy

התקינו את Wireshark והתחילו להקליט תעבורה אמיתית ברשת הביתית שלכם. למדו להשתמש ב-Display Filters מתקדמים (כגון: tcp.flags.syn == 1 && tcp.flags.ack == 0). בנוסף, תרגלו יצירת פקטות ידנית בפייתון באמצעות ספריית Scapy.

צעד 4: לחבר בין השלושה – פרויקטים מומלצים

הדרך הטובה ביותר לגבש את הידע לקראת המיונים היא לבנות 2-3 פרויקטים קטנים אך מעמיקים:

1 שרת Echo רב-תהליכי ב-C על גבי Linux

כתיבת שרת Socket ב-C המקבל חיבורי TCP, קורא פקטות בינאריות, ומטפל במספר לקוחות במקביל באמצעות fork() או poll().

2 מפענח פקטות מותאם אישית (Custom Packet Sniffer)

תוכנית הקוראת קובץ PCAP (הקלטת רשת) ומחלצת שדות Header בהתאם למפרט פרוטוקול מוגדר.

3 אמולטור פשוט לשפה מומצאת (Bytecode VM)

תוכנית ב-C שמקבלת קובץ בינארי של פקודות (OpCodes) ומדמה מעבד עם 4 אוגרים ומחסנית.

חוק 15 הדקות ואיך לא להיתקע

חוק 15 הדקות: כשאתם נתקלים בבאג או בעיה לא מובנת, נסו לחקור אותה לבד במשך 15 דקות (באמצעות דיבאגר, הדפסות ו-strace). אם עדיין אין התקדמות – עצרו, רשמו את כל מה שבדקתם, ונסחו שאלה מדויקת בחיפוש או בפורום מקצועי. שיטה זו מונעת תסכול ובונה יכולת מחקר מובנית.

תוכנית עבודה מומלצת (3-6 חודשים)

שלב משך מומלץ מיקוד מרכזי תוצר סופי
חודש 1-2 8 שבועות יסודות שפת C, פוינטרים ומבני זיכרון מימוש מבני נתונים (Linked List, Hash Map) ב-C
חודש 3 4 שבועות לינוקס, שורת הפקודה וכלי ניתוח בינאריים סקריפטים לאוטומציה וניתוח תהליכים ב-gdb
חודש 4 4 שבועות רשתות TCP/IP, Sockets ו-Wireshark שרת ולקוח TCP ב-C וניתוח תעבורה
חודש 5-6 8 שבועות תרגול אתגרי Blackbox, שפות מומצאות ו-CTF תיק עבודות ב-GitHub ומוכנות למיון

שאלות ותשובות נפוצות

האם חובה לדעת אסמבלי לפני המיונים?

לא חובה לשלוט באסמבלי שלם של x86_64, אך היכרות בסיסית עם מושגי אוגרים (Registers), מחסנית (Stack), פקודות Jump ו-Call תעניק לכם יתרון עצום בכנס המבחנים ובסדנה המעשית.

האם כדאי ללמוד פייתון במקביל?

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

כמה שעות בשבוע צריך להשקיע?

השקעה של כ-5 עד 7 שעות שבועיות בעבודה מעשית (קידוד ופתרון בעיות, לא רק קריאה פסיבית) מספיקה בהחלט כדי לבנות בסיס חזק בתוך מספר חודשים.

סיכום וקישורים

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

המשיכו את המסע:

קראו את המדריכים המשלימים כדי להכיר את כל שלבי המיון והמבחנים המעשיים:

מדריך כל שלבי המיון ותנאי הקבלה ←    מדריך המבחנים המעשיים והבלאקבוקס ←
תודה! בזכותכם נוכל להשתפר