פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings

למידה פוגשת כיף באתגר ה-SANS Holiday Hack Challenge לשנת 2022 - התחבר לרכיבת קרקרים בקוטב הצפוני כשאני מסכל את התוכנית הרעה של גרינכום ומשחזר את חמש טבעות הזהב

זו השנה הראשונה שלי שאני משתתף ב האתגר של SANS Holiday Hack וזה היה פיצוץ. דרך סדרה של 16 אתגרים החל מקלים לקשים, התאמנתי בניתוח תעבורת רשת חשודה ויומני PowerShell, כתיבה סוריקטה שולט, פריצה מתוך א מיכל עגינה, מציאת מפתחות שדלפו לניצול א צינור GitLab CI/CD ו משתמש AWS, מוליך התקפות של ישות חיצונית של XML, ופריצה לחוזה חכם לקנות א אסימון לא-פטרייתי.

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

אורינטציה

כל משתתף מקבל אווטאר כדי לנווט בסביבת משחקי וידאו בדפדפן המוגדרת בקוטב הצפוני:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

קדימה לטבעת הראשונה של המשחק.

1. טולקין רינג

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

מציאת טבעת הטולקין דרשה להגמיש את שרירי ניתוח היומנים שלי.

התחזות Wireshark

ראשית, השתמשתי ב-Wireshark כדי לנתח את המסופקים .pcap קובץ שחשף שרת ב adv.epostoday[.]uk הורדת הקובץ Ref_Sept24-2020.zip למחשב:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

בהצצה לתוך קובץ ה-ZIP, מצאתי קובץ הפעלה בשם Ref_Sept24-2020.scr שהפעילו שני זיהויים ב-ESET Endpoint Security: BAT/Runner.ES ו Generik.TAGTBG. תוכנה זדונית זו הובילה בסופו של דבר לקובץ הפעלה זדוני הפועל בזיכרון שנקרא config.dll ומזוהה על ידי ESET סורק זיכרון מתקדם as Win32/Dridex.DD.

יומני אירועים של Windows

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

מכיוון שהיומנים הכילו 10,434 אירועים, קיבצתי את האירועים לפי תאריך ולאחר מכן הפעלתי את פעולת Find כדי לחפש אירועים המכילים את $ אופי. ב-PowerShell, $ משמש ליצירה והתייחסות משתנים. מצאתי מתקפה שהתרחשה ב-24 בדצמבר 2022, כאשר התוקף הריץ את הסקריפט הבא:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

נראה שהתוקף מצא מתכון סודי, החליף את המרכיב הסודי של דבש ל שמן דגים, ולאחר מכן יצר קובץ מתכונים חדש. זה הפעיל אירוע עם מזהה 4104, המייצג ביצוע של פקודות PowerShell מרוחקות. אז סיננתי את האירועים לפי המזהה הזה, ועזרתי לי למצוא אירועים זדוניים נוספים מהר יותר.

רגאטה סוריקטה

התרגיל האחרון עבור טבעת טולקין היה כתיבת ארבעה חוקים של Suricata לניטור תעבורת רשת עבור נגיעות דרידקס:

alert dns $HOME_NET any -> any any (msg:"חיפוש DNS גרוע ידוע, זיהום אפשרי של Dridex"; dns.query; content:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

התראה http 192.185.57.242 any <> any any (msg:"חקר קשרים חשודים, זיהום אפשרי של Dridex"; sid:2; rev:1;)

alert tls any any -> any any (הודעה: "חקר אישורים גרועים, זיהום אפשרי של Dridex"; tls.cert_subject; content:"CN=heardbellith.Icanwepeh.nagoya"; sid:3; rev:1;)

התראה http any any -> any any (msg:"פונקציית JavaScript חשודה, זיהום אפשרי של Dridex"; file_data; content:"let byteCharacters = atob"; sid:4; rev:1;)

לפי הסדר, כללים אלה תופסים חיפושי DNS עבור adv.epostoday[.]uk, חיבורים לכתובת ה-IP 192.185.57[.]242, השימוש בשרת הזדוני heardbellith.Icanwepeh[.]nagoya מזוהה באמצעות השם הנפוץ (CN) באישור TLS, והשימוש ב-JavaScript מא לב() פונקציה לפענוח מחרוזת בינארית המכילה נתונים מקודדים base64 על הלקוח.

השלמת שלושת האתגרים האלה זיכתה אותי בטבעת טולקין:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

הלאה לטבעת השנייה.

2. טבעת אלפן

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

האתגרים הבולטים ביותר עבור טבעת האלפן היו בריחה מהכלא ו-Jolly CI/CD.

כלא בריחה

Prison Escape הייתה תזכורת חמורה לכך שהענקת הרשאות שורש למשתמש בקונטיינר של Docker טובה בדיוק כמו הענקת הרשאות שורש במערכת המארחת. האתגר היה לפרוץ מהמיכל. ובכן, נעשה בקלות כשאתה שורש:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

Jolly CI/CD

למרות שזה היה מהיר, ל-Jolly CI/CD לקח לי את הארוך ביותר מכל אתגר להבין. ראשית, קיבלנו מאגר Git לשכפול על HTTP:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

מהכתובת, יכולתי לראות ששם המאגר הוא wordpress.flag.net.internal, אז עברתי למאגר ומצאתי אתר וורדפרס. בדקתי אם האתר פעיל:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

מצוין, מצאתי א .ssh ספרייה עם מקשים. בואו נעתיק את המפתחות האלה ונקבע סוכן SSH ומשתמש Git כדי לראות אם אני יכול להתחזות לבעלים של המפתחות האלה:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

כעת נחזור לסניף הראשי ונבדוק אם נוכל לדחוף שינוי טריוויאלי בקוד המקור (באמצעות ננו, פשוט הוספתי רווח לאחד הקבצים):

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

אז, השגתי את החלק הראשון של האתגר על ידי התחזות לאחד ממפתחי וורדפרס, אבל האם האתר עדיין עבד לאחר הדחיפה שלי?

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

הדחיפה שלי שינתה משהו כי עכשיו האתר הופנה מחדש ליציאה 8080.

עד עכשיו, התעלמתי מחלק ה-CI/CD של האתגר, שאמור להיות המפתח להשלמתו. המאגר מכיל א .gitlab-ci.yml קובץ, המספק את התצורה עבור צינור GitLab CI/CD. בכל פעם שאתה דוחף למאגר, מערכת ה-CI/CD נכנסת לפעולה, וא GitLab Runner מבצע את הסקריפטים בקובץ YML זה. זה טוב כמו השגת ביצוע קוד מרחוק בשרת שבו מותקן GitLab Runner, חשבתי.

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

לאחר הרבה בדיקות השערות, בסופו של דבר קיבלתי את התובנה פורצת הדרך שלי: במקום לנסות "לתקן" את אתר וורדפרס או להריץ סקריפטים זדוניים דרך מערכת ה-build, הגישו אתר שמדליף מידע משרת האינטרנט. בְּתוֹך index.php (ממוקם ברמה העליונה של המאגר), אני יכול להעיר את הקוד הטוען את אתר וורדפרס ולהריץ פקודות PHP שבודקות את שרת האינטרנט.

ואכן, אני יכול אפילו להריץ פקודות מעטפת עם PHP. מצאתי את זה לעבור דרך() עבד בקלות.

In index.php, השתמשתי // להעיר שתי שורות והוספתי passthru('ls -la /'); בשורה האחרונה. זה יוצר אתר אינטרנט שמפרט את כל הקבצים בספריית השורש של שרת האינטרנט:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

ואז דחפתי את השינוי הזה למאגר Git ומערכת GitLab CI/CD דאגה לעדכן עבורי את האתר:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

אה, טבעת האלפן חייבת להיות בפנים flag.txt! חזרתי על השלבים הקודמים, אבל הפעם השתמשתי passthru('cat /flag.txt'); חושפת את טבעת האלפן בפעם הבאה שביקשתי את האתר:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

הלאה לטבעת השלישית.

3. טבעת אינטרנט

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

האתגר הכי כיפי עבורי היה Open Boria Mine Door, למרות שהמזרקה של גלמטרריאל הייתה מעניינת תוך הצגת חידות.

פתח את דלת מכרה בוריה

ב-Open Boria Mine Door, הוצגו בפנינו שישה סיכות או מיני אתגרים לעקוף אימות קלט או מדיניות אבטחת תוכן לחיבור צינורות הכניסה והיציאה בין הפינים, כולל התאמת צבעי הצינור. עבור רוב הסיכות, השתמשתי ב-HTML כדי לכתוב רשימה של האות 'o' המקשרת. הנה הפתרון הסופי שלי:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

סיכה 1

לא היה אימות עבור Pin 1, אז זה היה עניין פשוט של HTML ו-CSS מוטבע:

סיכה 2

לפין 2 הייתה מדיניות אבטחת תוכן שאסרה JavaScript אבל אפשרה CSS מוטבע, כך שלא הייתה בעיה עבור השיטה שלי:

סיכה 3

לפין 3 הייתה מדיניות אבטחת תוכן שאסרה CSS אך אפשרה JavaScript מוטבע, אז השתמשתי ב-JavaScript כדי לשנות את הסגנונות במקום זאת:

סיכה 4

לפין 4 לא הייתה מדיניות אבטחת תוכן, אבל הייתה לו פונקציית sanitizeInput בצד הלקוח שתסיר מרכאות כפולות, מרכאות בודדות, סוגריים של זווית שמאל וסוגריים ישרים. החוכמה כאן הייתה להבין שהפונקציה הזו לא הופעלה על ידי שליחת הטופס, אלא על ידי onblur מִקרֶה. במילים אחרות, הזזת העכבר הרחק משדה הקלט הפעילה את onblur אירוע, חיטוי כל קלט. הפתרון היה לשלוח את הטופס על ידי לחיצה על זן מקש, תוך הקפדה לא להזיז את סמן העכבר אל מחוץ לגבולות שדה הקלט:

סיכה 5

לפין 5 היה אותו הדבר חיטוי קלט פונקציה ועקוף יחד עם מדיניות אבטחת תוכן האוסרת CSS מוטבע, אך מאפשרת JavaScript מוטבע:

סיכה 6

לבסוף, Pin 6 לא חיטא את הקלט, אבל הוא השתמש במדיניות אבטחת תוכן מחמירה האוסרת גם CSS מוטבע וגם JavaScript. הפתרון שלי היה להשתמש ב-HTML שהוצא משימוש כדי לקבל את הסגנונות שהייתי צריך ולהשתמש בטבלה במקום ברשימה:

המזרקה של גלמטרריאל

המזרקה של גלמטרריאל הייתה הזדמנות להתאמן התקפות XML External Entity (XXE).. לא היה קשה להבין כיצד להגדיר ישות XML מותאמת אישית, להגדיר ישות המבקשת קובץ מהשרת, ולהוסיף את הישות הזו כמטען לבקשת HTTP. החלק הקשה ביותר היה לגלות את החידות במשחק כדי לנחש את הדרך לקבצים שהשרת ידלוף. הנה הבקשה פורצת הדרך החושפת את מיקומה של טבעת הזהב:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

הייתי מציע שני לקחים שנלמדו מהאתגר הזה. ראשית, השתמש ב- ממיר סוגי תוכן הרחבה ב לְגַהֵק כדי להמיר עומסי JSON ל-XML. שנית, נסה למקם את מטען ה-XXE בתגים שונים - לקח לי הרבה זמן להבין שכל מה שעלי לעשות זה למקם את &xxe; מטען ב reqType תג במקום ה- imgDrop תָג.

הלאה לטבעת הרביעית.

4. טבעת ענן

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

משחק עבור טבעת הענן היה גיחה למתחילים לתוך ממשק שורת הפקודה של אמזון (AWS) (CLI).

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

הלאה לטבעת החמישית.

5. טבעת אש בוערת

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

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

שימוש הכלי של פרופסור QPetabyte, יצרתי עץ מרקל משני עלים המורכבים מכתובת הארנק שלי והכתובת של BSRS_nft חוזה חכם, שמצאתי באמצעות Blockchain Explorer בתוך המשחק בבלוק שני של Ethereum blockchain של המשחק. הכלי יצר את ערך השורש של העץ הזה ואת ערך ההוכחה עבור כתובת הארנק שלי. לאחר מכן השתמשתי ב-Burp כדי ליירט את הבקשה לשרת ושיניתי את ערך השורש המוגדר כברירת מחדל כדי שאוכל להגיש עץ Merkle חוקי. הנה שלי NFT sporc נקנה במחיר קבוע של 100 KringleCoins:

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

אכן דגימה מכוערת.

סופי

פיצח את זה! הבהרה מ-KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

תודה גדולה למארגני אתגר ה-SANS Holiday Hack Challenge על שמתיחה את דעתי בדרכים חדשות ועזרה להעמיק את הידע שלי בתחום אבטחת הסייבר. לא רק שאני מצפה לאתגר של השנה הבאה, אלא אפילו אנסה את מהדורות 2020 ו-2021 של האתגר הזה. ואם לא השתתפת באתגר הזה בעבר, אני מקווה שהדגשים האלה עוררו את העניין שלך.

בול זמן:

עוד מ אנחנו חיים אבטחה