מעבדות האקינג
למה להשתמש ב-NotHoly ל-CTF ולמעבדות
מודל שכותב את ה-exploit לאתגר שלכם ומסביר למה הוא עובד, triage סטטי לבינארי, ו-solve שרץ במעבדה שלכם, לא אצלנו.
מבנה של דוח פנטסט וכתיבת ממצא אחד שמישהו אחר יכול לשחזר, עם ראיות, השפעה, וקטור CVSS v4.0 ותיקון.
דוח פנטסט הוא התיעוד הכתוב של בדיקת אבטחה שנעשתה בהרשאת הבעלים. הוא אומר מה נבדק, מה נמצא, איך קורא יכול לאמת כל ממצא ומה צריך לשנות. הבדיקה נגמרת כשהבודק מפסיק לשלוח בקשות. הדוח הוא מה שנשאר אצל הבעלים, מה שעובר למפתחים ומה שמראה שהעבודה נשארה בתוך הסקופ שסוכם.
NIST SP 800-115, המדריך הטכני לבדיקה והערכה של אבטחת מידע, מכסה את התהליך כולו, כולל ניתוח ממצאים ופיתוח אסטרטגיות להפחתת סיכון. ב-OWASP Web Security Testing Guide יש פרק Reporting שמתחיל במבנה דיווח ובשיטת שמות לממצאים. כדאי לקרוא את שניהם כשמתאפשר. המאמר הזה מתמקד בחלק שכותבים ראשון: דוח ברור עם ממצא אחד שמישהו אחר יכול לשחזר.
באג אמיתי שאף אחד לא מצליח לשחזר כמעט אף פעם לא מתוקן. מפתחים צריכים שלבים שאפשר להריץ ממצב נקי. מנהלים צריכים לדעת מה המשמעות העסקית של הסיכון. מבקרים צריכים הוכחה שהעבודה תאמה את ההרשאה. מסמך אחד צריך לשרת את שלושת הקוראים.
הדוח גם מגן על הבודק. סקופ כתוב ותיעוד מתוארך של מה שנבדק מראים שכל פעולה הייתה בתוך הסקופ המוסכם. בלי התיעוד הזה, בודק שמצא חולשה אמיתית יכול למצוא את עצמו מתווכח על השאלה אם הבדיקה הייתה מותרת בכלל.
מבנה מעשי כולל שישה חלקים:
כל ממצא עונה על אותן שאלות, באותו סדר.
curl -i, בלי סודות. כדאי למספר כל ראיה כדי שהשלבים יוכלו להפנות אליה.ממצא שהקורא לא יכול לשחזר מהעמוד לבדו אינו גמור, גם אם הכותרת שלו נראית טוב.
ההשפעה נגזרת מהראיות. אם הוכח שסקריפט רץ בדפדפן של חשבון בדיקה במעבדה שלך, צריך לכתוב בדיוק את זה. משפט כמו "תוקף יכול להשתלט על כל חשבון" בלי הדגמה הוא הגזמה, ומפתח יזהה אותה. זה גם יעלה לך באמינות בממצא הבא. מה שלא אומת, צריך לציין שלא אומת, ולנקוב בבדיקה שתאשר אותו.
תוצאה של סורק אומרת איפה להסתכל. לפני שהיא נכנסת לדוח, צריך לשחזר אותה ידנית, לתעד את הבקשה והתשובה ולאמת את ההתנהגות בעצמך. אפשר לציין את הסורק כמקור הכיוון. אין להדביק את הפלט הגולמי שלו כהוכחה. הוא יכול לטעות, והקורא לא יכול לדעת אילו חלקים מישהו בדק.
מפרט CVSS v4.0 מגדיר קבוצת מדדי Base עם שני צדדים. מדדי הניצול הם attack vector (AV), attack complexity (AC), attack requirements (AT), privileges required (PR) ו-user interaction (UI). מדדי ההשפעה מכסים את המערכת הפגיעה (VC, VI, VA) ואת המערכות העוקבות (SC, SI, SA). מחרוזת וקטור מתחילה בערך CVSS:4.0 ומפרטת כל מדד בסיס.
טווחי החומרה האיכותיים הם None ב-0.0, Low מ-0.1 עד 3.9, Medium מ-4.0 עד 6.9, High מ-7.0 עד 8.9, ו-Critical מ-9.0 עד 10.0.
יש ארבעה סוגי ציונים, לפי קבוצות המדדים שבהן השתמשו: CVSS-B ל-Base בלבד, CVSS-BT ל-Base ו-Threat, CVSS-BE ל-Base ו-Environmental, CVSS-BTE לשלושתם. דוח ראשון נושא בדרך כלל ציון Base, ולכן צריך לסמן אותו CVSS-B ולא להציג אותו כדירוג סיכון מלא.
משתמשים במחשבון הרשמי בכתובת https://www.first.org/cvss/calculator/4.0 כדי לבנות את הווקטור ולקבל את הציון. בדוח צריך להופיע הווקטור ולא רק המספר, כדי שהקורא יראה אילו הנחות נעשו. המחרוזת למטה מדגימה רק את הפורמט. זה לא ציון של אף ממצא במעבדה שלך:
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:Nמדרגים את מה שאומת. אם התקיפה תלויה בתנאי שלא הצלחת לשחזר, המדד צריך לשקף את זה.
ראיות מכילות הרבה פעמים עוגיות session, טוקני bearer, סיסמאות ומידע אישי. צריך להסיר אותם לפני שהקובץ עוזב את המכונה שלך. את שם הכותרת ואת צורת הערך כדאי להשאיר, כדי שהקורא עדיין יוכל לעקוב אחרי הבקשה:
Cookie: session=<REDACTED>
Authorization: Bearer <REDACTED>אין להדביק טוקן חי בצ׳אט, בטיקט או במאגר ציבורי, ואין לעשות commit לקובץ שעדיין מכיל טוקן כזה. אם סוד נחשף במעבדה שלך, בכל זאת צריך להחליף אותו שם ולציין את ההחלפה בדוח.
צריך את קונטיינר OWASP Juice Shop מהמעבדה שלך, רץ על המכונה שלך. התרגיל נוגע רק במופע המקומי הזה בכתובת 127.0.0.1. אין להריץ אף אחד מהשלבים האלה נגד אתר שאינו בבעלותך או שאין לך הרשאה בכתב לבדוק.
להריץ:
docker psלהסתכל על עמודת הפורטים. תחילת המיפוי צריכה להיות 127.0.0.1, כלומר רק המכונה שלך יכולה להגיע לשירות. אם מופיע 0.0.0.0 או שאין כתובת בכלל, צריך לעצור את הקונטיינר ולהפעיל אותו שוב עם כתובת ה-loopback בדגל הפרסום.
docker run -d -p 127.0.0.1:3000:3000 bkimminich/juice-shopאחר כך לבדוק שהמעבדה עונה:
curl -i http://127.0.0.1:3000שורת הסטטוס צריכה להציג קוד תשובה מוצלח. כדאי לשמור את הפלט. מקומו בסעיף הסקופ, כהוכחה ליעד שנבדק.
לבחור התנהגות אחת שנבדקה בדפדפן או בבקשה בודדת, ושאפשר לתאר בכמה שלבים. כדאי לשמור על סקופ קטן. ממצא אחד מבוסס היטב שימושי יותר משמונה שלא אומתו.
להריץ מחדש את הבקשה עם curl -i כדי שהכותרות ייראו. להחליף את הנתיב בנתיב של הממצא שלך ולשמור את הפלט לקובץ:
curl -i "http://127.0.0.1:3000/<path-you-tested>" > evidence-01.txtהדגל -i מדפיס את כותרות התשובה לפני הגוף. לקרוא את שורת הסטטוס, את הכותרת Content-Type וכל כותרת שהממצא שלך תלוי בה. אחר כך להשחיר כל טוקן או עוגייה בקובץ לפני ה-commit.
ליצור את הקובץ report.md במאגר המעבדה שלך ולהשתמש בתבנית הזו. להחליף כל placeholder במה שנצפה בפועל:
## Scope
- Target: http://127.0.0.1:3000, my own OWASP Juice Shop container
- Permission: I run this lab on a machine I own
- Dates: <start date> to <end date>
- Out of scope: everything else
## Finding title
<Flaw> in <exact location>
## Steps to reproduce
1. <Start from a clean browser session at http://127.0.0.1:3000>
2. <Exact action or request>
3. <What you see>
## Evidence
<Screenshot file name, or the redacted curl -i output file, matched to the steps>
## Impact
<What you verified. What you did not verify, and the test that would check it.>
## CVSS vector
<CVSS:4.0 vector from the calculator, and its rating>
## Remediation
<The specific fix, and how to check that it works>לפני ה-commit כדאי לבדוק מה Git עומד לרשום, כדי שקובץ לא מושחר לא יחמוק פנימה:
git add report.md
git status
git commit -m 'First lab finding'לוודא את ה-commit עם git log --oneline -1. השורה צריכה להציג את ההודעה שלך. בסיום, לעצור את קונטיינר המעבדה עם docker stop <container-name>, ואז להריץ docker ps כדי לוודא שהוא כבר לא ברשימה.
מעבדות האקינג
מודל שכותב את ה-exploit לאתגר שלכם ומסביר למה הוא עובד, triage סטטי לבינארי, ו-solve שרץ במעבדה שלכם, לא אצלנו.
מעבדות האקינג
בניית רשת Docker בלי גישה לאינטרנט, הרצת OWASP Juice Shop עליה ופרסום עותק לדפדפן רק על 127.0.0.1, עם אימות של כל שלב.
מעבדות האקינג
בונים מעבדה ביתית שמותר לתקוף: קובץ סקופ, פורטים של Docker שקשורים ל-loopback, רשת מבודדת, יומן עבודה ופירוק נקי.