PracticU

הסבר על Kerberos - TGS

בלי כתוביותעם כתוביות
PracticU › קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP › הסבר על Kerberos - TGS
מילון מושגים:
Kerberos - פרוטוקול אימות המבוסס על כרטיסים (tickets), המשמש ברשתות Active Directory לאימות מאובטח של משתמשים ושירותים.
פרוטוקול - מערכת כללים מוסכמת שקובעת כיצד מכשירים או תוכנות מתקשרים ומחליפים מידע, למשל HTTP או TCP.
TGT - כרטיס שמנפיק שרת האימות ב-Kerberos, שבעזרתו המשתמש מבקש גישה לשירותים בלי להזדהות שוב בכל פעם.
הצפנה - המרת מידע לצורה בלתי קריאה בעזרת מפתח, כך שרק מי שמחזיק במפתח המתאים יכול לפענח ולקרוא אותו.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
סשן - פרק זמן של פעילות רציפה בין משתמש למערכת, שבו נשמר מידע על מצבו, למשל לאחר התחברות לאתר.
האש - פונקציה שממירה מידע לערך קצר באורך קבוע. שינוי קטן בקלט משנה את התוצאה, והיא חד-כיוונית.
Active Directory - שירות מדריך של מיקרוסופט לניהול מרכזי של משתמשים, מחשבים והרשאות ברשת ארגונית מבוססת דומיין.

הסבר על Kerberos - TGS

בשיעור זה אנו ממשיכים את לימוד פרוטוקול Kerberos ומפרקים את שלב ה-TGS, טיקט הענקת השירות, מהבקשה אל השרת המאמת ועד להתחברות בפועל אל השירות היעד, ובדרך גם מסבירים את ההתקפה המפורסמת של Kerberoasting.
נושאי הסיכום המוצגים בשיעור:
1. מהו TGS: אחרי שיש לנו בזיכרון את ה-TGT, אנו רוצים לקבל שירות מיעד מסוים, ולפני שאנחנו מתחברים אליו בכלל אנחנו פונים לבקר הדומיין ומבקשים ממנו טיקט שמוצפן בעזרת הסיסמה של אותו היעד, שאיתו היעד יאמין לנו שאנחנו אכן מי שאנו מצהירים שאנחנו ולא מתחזים.
2. מה שולחים בבקשת ה-TGS: שולחים את שם המשתמש, את חותמת הזמן של השעה הנוכחית, את ה-TGT שקיבלנו קודם, ואת ה-SPN, שם השירות הראשי שמציין לאיזה שירות אנחנו רוצים לקבל טיקט, למשל שירות קבצים או מסד נתונים.
3. הצפנת הבקשה במפתח הסשן: חותמת הזמן שוב מונעת שידור חוזר, מכיוון שהשרת מתעלם מפאקט שני שהגיע מאותו משתמש באותה אלפית השנייה, וכדי שתוקף שמאזין על הקו לא יוכל לשנות את החותמת בעצמו, הכל מוצפן בעזרת מפתח הסשן, וקרברוס דווקא מעדיף להשתמש במפתח הסשן ולא בהאש של המשתמש כדי לחשוף את ההאש כמה שפחות.
4. איך השרת מוודא את הבקשה בלי לשמור מצב: השרת אינו שומר את מפתחות הסשן של מאות אלפי המשתמשים אצלו, הוא פותח את ה-TGT שהועבר אליו בעזרת הסיסמה הסודית שרק הוא מכיר, מוציא מתוכו את מפתח הסשן, ובעזרתו פותח את שאר הבקשה ובודק ששם המשתמש וחותמת הזמן נכונים, ובכך שוב אינו מבזבז זיכרון על שמירת מצב.
5. מהו SPN: שם שירות ראשי שנכתב בצורה של שם שירות, סלאש, שם שרת, ואפשר גם לציין פורט ולסיים בשם הדומיין, והוא כתוב על הטיקט לציין עבור איזה שירות הוא, וכאשר עושים פעולה על משאב ברשת ניתן לראות בפקודת הצגת הטיקטים שהתקבל טיקט חדש עבור אותו שירות בשרת הקבצים.
6. התשובה של שרת האימות: השרת מחזיר את ה-TGS שהתבקשנו, טיקט שמוצפן בעזרת ההאש של היעד שאליו אנחנו הולכים, וכשנגיע אליו עם הטיקט הזה הוא ידע מיד שרק שרת האימות יכול היה לייצר אותו, כיוון שגם הוא וגם אנחנו סומכים על אותו שרת אימות, והוא אפילו לא צריך ללכת לשרת האימות לבדוק דבר.
7. מיהו היוזר שההאש שלו מצפין את הטיקט: זה היוזר שמריץ את השירות בשרת היעד, והוא יכול להיות חשבון המערכת המקומית שהסיסמה שלו היא סיסמת המחשב עצמו שמתחלפת באופן אוטומטי כל תקופה, או יוזר רגיל של וינדוס שאיתו הפעיל מנהל הרשת את השירות, ושירות הוא בסופו של דבר תוכנה רגילה שמופעלת באופן אוטומטי עם יוזר כלשהו.
8. ההתקפה המפורסמת של Kerberoasting: מכיוון שכל משתמש ב-Active Directory רשאי לבקש משרת האימות את ה-TGS עבור יעד מסוים, והטיקט מוצפן בהאש של היוזר שמריץ את השירות, תוקף יכול לבקש את הטיקט, להעתיק אותו הצידה, ואחר כך באופן אופליין לנסות לעבור על מילון סיסמאות ולראות איזו סיסמה פותחת את ההצפנה, מה שעלול לחשוף את סיסמת היוזר שמריץ את השירות, ובתקווה שהוא גם מנהל דומיין להגיע להעלאת הרשאות.
9. היתרונות של ההתקפה הזאת: ההתקפה מתבצעת אופליין ולכן השרתים אינם יודעים שמנסים לפרוץ, והיא אינה דורשת שום הרשאות, שכן שרת האימות אינו בודק האם למשתמש מותר בכלל להיכנס אל אותו שירות ומספק את הטיקט בכל מקרה, ומכיוון שאין אפשרות מעשית לעבור על כל הסיסמאות שקיימות, משתמשים במילון מצומצם והגיוני של סיסמאות סבירות.
10. שני חלקים בתשובה: התשובה מכילה שני חלקים, חלק שאנחנו יכולים לפתוח בעזרת מפתח הסשן שלנו, וחלק שרק היעד שלנו יודע לפתוח, שהוא מוצפן בהאש של היוזר שמריץ את השירות, ובשני החלקים יחד משולב מפתח הסשן שביני לבין היעד.
11. הבחנה בין שני מפתחי סשן: מפתח הסשן הראשון שקיבלנו בשלב ה-TGT הוא המפתח ביני לבין שרת האימות, ומפתח הסשן השני שמגיע בתשובת ה-TGS הוא המפתח ביני לבין השרת היעד, ואלה שני סשנים נפרדים לגמרי, ובשרת היעד גם כתוב שם המשתמש שלי, עד מתי הטיקט בתוקף ומה ההרשאות שלי ב-Active Directory.
12. השלב הסופי, הפניית הבקשה אל היעד: כשהאפליקציה בשרת היעד מבקשת אימות, אנחנו שולחים אליה את ה-TGS, היא מוציאה מתוכו את שם המשתמש שלי ואת מפתח הסשן ביני לבינה, בעזרת מפתח הסשן פותחת את החלק השני שבו כתוב שם המשתמש וחותמת הזמן שלי, בודקת שמדובר בבקשה ראשונה ולא בשידור חוזר, ומנקודה זו מתנהלת התקשורת בינינו בהצפנה של מפתח הסשן הזה.
לסיכום, בשיעור זה למדנו את שלב ה-TGS בקרברוס מקצה לקצה, בקשת טיקט משרת האימות לפי שם שירות ראשי, ההצפנה במפתח הסשן ובהאש של היעד, ההבחנה בין שני מפתחי הסשן, וגם את התקפת ה-Kerberoasting שנובעת מכך שכל משתמש יכול לבקש טיקט מוצפן בהאש של יוזר השירות ולפצח אותו אופליין במילון, והשיעור הבא יעסוק באימות עם חשבון מחשב בלבד בקרברוס עבור חשבון מערכת מקומי.
בשיעור הבא נעסוק בנושא אימות עם חשבון מחשב בלבד ב-Kerberos עבור Local System Account.
SR12933HE

פרקי ההרצאה: הסבר על Kerberos - TGS

  1. 00:00

    בקשת כרטיס לשירות נוסף

  2. 00:39

    פנייה ל-DC עם SPN

  3. 01:15

    תוכן בקשת ה-TGS

  4. 02:09

    איתור ה-Session Key מה-TGT

  5. 03:00

    מבנה ה-SPN

  6. 03:52

    קבלת ה-TGS מוצפן בהאש היעד

  7. 04:48

    ההאש שמריץ את השירות

  8. 05:44

    מושג התקפת Kerberoasting

תמלול ההרצאה: הסבר על Kerberos - TGS

הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על Kerberos - TGS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:27

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

  3. 00:51

    אני מבקש ממנו טיקט לשירות שאני רוצה לקבל ואת השם של השירות אני מציין פה ב-spn אני אומר לדיסי, דיסי חמוד, אני רוצה ללכת לשרת הקבצים, תביא לי טיקט לשרת הקבצים.

  4. 01:05

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

  5. 01:22

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

  6. 01:43

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

  7. 02:05

    אז ככה השרת בודק שה-user name נכון, שאין reply attack, שה-session key שלי פותח את הפאקט, זה אומר שאני באמת הצפנתי אותו. דרך אגב, איך השרת זוכר את ה-session key?

  8. 02:15

    מה, הוא זוכר סשן קי של כל מאות אלפי אנשים שעוברים עימות אצלו? התשובה היא לא. אני גם שולח לו את ה-TGT, ובתוך ה-TGT הזה יש גם את ה-Session Key הזה. זוכרים בתוך ה-TGT פה שהשרט הביא לי פעם היה גם Session Key.

  9. 02:30

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

  10. 02:47

    ואז השרת רואה כאן SPN. SPN זה איזה שירות אני רוצה לקבל ממנו. למי אני רוצה ללכת עם הטיקט שהוא ייתן לי? בואו נראה את ה-spn-ים האלו. ככה הוא נראה, שם של סרוויס, סלאש, שם של שרת, אפילו אפשר לכתוב פורט, שטרודל, איזה דומיין.

  11. 03:05

    זאת הצורה שבה כותבים spn, Service Principle Name, וככה כתוב על הטיקט עבור איזה שירות הוא. לדוגמה, אני אעשה דיר על איזשהו שיתוף, אני אעשה k-list, קיבלתי עוד טיקט אחד עבור סיפס, עבור שיתופים ב-file server.

  12. 03:22

    יש לי טיקט עבור ההזדהות הזאת יש לי טיקט עבור השירות הזה אז ככה נראה TGS הפנייה שלי לדומיין קונטרולר ל-DC כדי לקבל טיקט עבור שרת קבצים או SQL או עבור מישהו אחר אני מעביר לו את ה-TGT שלו אני מעביר לו את הטיימסטמפ והיוזרניים שלי מוצפנים עם ה-Session Key ובסוף אני אומר לו תקשיב זה מה שאני רוצה את ה-SPN

  13. 03:44

    הזה אז מה יש לנו בקרברוס TGS ריפליי בתשובה שה-DC שולח לי בחזרה הוא שולח לי את ה-TGS שלי טיקט גרנטינג סרוויס ה-TGS הזה הכרטיס הזה שימו לב הוא מוצפן עם ההאש של היעד שלי ואז כשאני אבוא ליעד הזה עם הטיקט הזה הוא יגיד אה הבאת לי טיקט שמוצפן עם ההאש שלי כנראה שבאמת הבאת את זה מדיסי שגם אני וגם אתה סומכים עליו שרת היעד אפילו לא

  14. 04:11

    צריך ללכת לדיסי לבדוק שום דבר הוא כבר יודע שרק דיסי היה יכול לייצר אותו דרך אגב מי זה סרוויס אונר האש מי זה הסרוויס אונר הזה זה ההאש שמריץ את הסרוויס, ההאש הזה שאיתו מוצפן הכרטיס הוא יכול להיות Local System שזה אומר הסיסמה של המחשב עצמו הרי באקטיב דירקטורי לכל מחשב יש גם סיסמה עם 128 תווים שכל 30 יום מתחלפת אז עם הסיסמה של המחשב

  15. 04:40

    אפשר לעשות אפשר להריץ את הסרוויס ואפשר גם עם יוזר רגיל להריץ את הסרוויס מה זה סרוויס זה למעשה תוכנה רגילה בסוף זה אקזר רגיל ופשוט שמופעל אוטומט עם יוזר כלשהו. זה יכול להיות יוזר של המחשב וזה יכול להיות יוזר רגיל של Windows.

  16. 04:57

    לא משנה איך הוא מופעל, אתה צריך להביא לי כרטיס שמוצפן עם ההאש של היוזר הזה שהפעיל אותו. הרי ב-Task Manager אנחנו רואים פה SQL SRV Server שהוא מופעל כרגע עם האדמיניסטרטור.

  17. 05:11

    אם האקזר הזה היה עובד תחת יוזר אחר, צריך להביא כרטיס שמוצפן עם מה"ש של היוזר הזה שהפעיל את הסרוויס הזה. אז בסופו של יום אני מביא לו TGS את הכרטיס מה-DC שמוצפן עם מה"ש של מי שהריץ את הסרוויס, את האקזה שאני מנסה להתחבר אליו.

  18. 05:31

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

  19. 05:55

    care ברוסטינג כי כל יוזר ב-Active Directory רשאי לבקש מ-DC שלו את ה-TGS את הכרטיס עבור יעד מסוים והכרטיס הזה יהיה מוצפן בהאש של היוזר שמריץ את הסרוויס הזה אז התקפת care ברוסטינג המפורסמת זה בעצם

לקורס המלא: מבדקי חדירה ל‑Active Directory

ההרצאה הקודמת: הסבר על Kerberos - TGT

ההרצאה הבאה: אימות עם חשבון מחשב בלבד ב-Kerberos - עבור Local System Account

הרצאות קשורות מקורסים אחרים

  • הסבר על Kerberos ועל NTLM
  • הגדרת לוגין ל-vCenter - עם AD Kerberos - חלק 1

קורסים נוספים במסלול

  • קורס SOC - מיישם הגנת סייבר
  • קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting