קורס מחקר חולשות¶
קורס שלוקח אתכם מהבנה של איך תוכנה נשברת ועד ליכולת למצוא ולנצל חולשות אבטחה אמיתיות בעצמכם. נתחיל מהבאגים הפשוטים ביותר, נעבור דרך גלישות חוצץ, shellcode, עקיפת מנגנוני הגנה, ROP, ניצול ה-heap והנדסה הפוכה, נגיע עד לניצול קרנל, ונסגור עם מציאת חולשות אמיתיות בעזרת fuzzing וסקירת קוד. לאורך כל הדרך נפתור עשרות אתגרים מ-pwnable.kr, כך שבסוף הקורס תוכלו לסיים את כל האתר ולתקוף מטרות אמיתיות.
הקורס הזה הוא המשך ישיר של קורס ליבת המחשב. אנחנו מניחים שאתם כבר מכירים אסמבלי, שפת C, המחסנית, זיכרון של תהליך, פורמט ELF, ו-GDB. אם המושגים האלה לא מוכרים לכם, כדאי לחזור לקורס הליבה קודם.
חשוב לפני שמתחילים¶
הידע בקורס הזה הוא כוח, ואיתו מגיעה אחריות. כל מה שנלמד כאן נועד למטרות הגנתיות ולימודיות: כדי להגן על מערכת צריך להבין איך תוקף חושב. הריצו קוד וכלים רק על מערכות שבבעלותכם או שקיבלתם אישור מפורש לתקוף. אתר pwnable.kr הוא זירת אימונים חוקית שנבנתה בדיוק בשביל זה. תקיפה של מערכת ללא רשות היא עבירה פלילית. בפרק הראשון נדבר על החוק ועל גילוי אחראי לעומק.
תוכן הקורס¶
פרק 0 - הקדמה ותשתית¶
מה זה בכלל מחקר חולשות ואיך נראית קריירה בתחום, הקמת סביבת עבודה עם כל הכלים (pwntools, pwndbg, checksec, Ghidra ועוד), חזרה ממוקדת על זיכרון התהליך והמחסנית, מבוא מעשי ל-pwntools, והיכרות עם pwnable.kr.
פרק 1 - חולשות פשוטות ובאגים לוגיים¶
הצעד הראשון: אתגרים שנפתרים בלי גלישות זיכרון בכלל. תיאורי קבצים וארגומנטים, באגים לוגיים בהשוואות, אקראיות שאפשר לחזות, התנגשות גיבוב, סקריפטינג של אתגרים, והזרקת פקודות. כאן נפתור את fd, input, mistake, lotto, blackjack, random, collision, coin1, cmd1, cmd2 ו-shellshock.
פרק 2 - גלישת חוצץ על המחסנית¶
החולשה הקלאסית. אנטומיה של גלישה, שליטה מלאה ב-RIP, מציאת ה-offset עם cyclic ו-core dumps, וניתוב ההרצה לכתובת שאנחנו בוחרים (ret2win). נפתור את bof ונסגור עם פרויקט ניצול שרת פגיע.
פרק 3 - Shellcode¶
כתיבת קוד מכונה שמריץ shell, ידנית, ל-32 ו-64 ביט. הזרקה והרצה כשה-NX כבוי, כתיבת shellcode מוגבל (alphanumeric ו-ascii בלבד), וטכניקות מתקדמות כמו staging ו-egghunter. נפתור את asm ו-ascii_easy.
פרק 4 - עקיפת NX ו-ROP בסיסי¶
כשאי אפשר להריץ קוד על המחסנית. מנגנון ה-GOT וה-PLT לעומק, ret2libc קלאסי, בניית שרשראות ROP, דליפת כתובת libc כדי לעקוף ASLR, ושימוש ב-one_gadget. פרויקט: exploit מלא מול בינארי עם ASLR ו-NX.
פרק 5 - חולשות מחרוזת פורמט¶
כשהמשתמש שולט במחרוזת הפורמט. קריאה שרירותית מהזיכרון, כתיבה שרירותית עם %n, ודריסת ה-GOT כדי לחטוף את זרימת התוכנית. נפתור את passcode ו-fsb.
פרק 6 - ROP מתקדם¶
הטכניקות שמפרידות בין חובבן למקצוען: stack pivoting, ret2csu, SROP (sigreturn oriented programming) ו-ret2dlresolve. פרויקט: שרשרת ROP מורכבת מול בינארי מוקשח.
פרק 7 - ניצול ה-Heap¶
הזירה שבה מתרחשות רוב החולשות האמיתיות. פנימיות המקצה של glibc (chunks, bins, tcache, fastbins), שימוש לאחר שחרור (UAF), שחרור כפול ו-tcache poisoning, תקיפת unlink, טכניקות House of, ותקיפות מודרניות מול גרסאות glibc עדכניות. נפתור את uaf ו-unlink.
פרק 8 - הנדסה הפוכה לניצול¶
כל האתגרים שדורשים לפצח את הבינארי לפני שתוקפים: קבצים ארוזים ב-UPX, ארכיטקטורות ARM ו-MIPS, בינארי זעיר, יישור זיכרון ו-SSE, מפרשים ומכונות וירטואליות, אתגרי לוגיקה, קריפטו ו-RSA, ושירותי echo עם חולשות heap. נפתור את flag, leg, tiny_easy, memcpy, brainfuck, simple login, otp, md5 calculator, blukat, crypto1, rsa calculator, echo1, echo2, loveletter, dragon ו-horcruxes.
פרק 9 - ניצול קרנל ואתגרים מתקדמים¶
מבוא לניצול קרנל לינוקס, ניצול syscall מותאם וטכניקת ret2usr, מנגנוני ההגנה של הקרנל (KASLR, SMEP, SMAP) ואיך עוקפים אותם, ומפת גישה לאתגרים הקשים ביותר ב-pwnable.kr (הקטגוריות Grotesque ו-Hacker's Secret).
פרק 10 - מציאת חולשות אמיתיות¶
כאן הופכים מפותר אתגרים לחוקר חולשות. סקירת קוד מקור לזיהוי באגים, fuzzing עם AFL++ ו-libFuzzer יחד עם sanitizers, ניתוח CVE ו-n-day עם patch diffing, כתיבת exploit לחולשה אמיתית, וגילוי אחראי מול bug bounty. פרויקט סיום: מציאת באג מאפס וניצולו עד לקבלת shell.