מילון מושגים:
Active Directory - שירות מדריך של מיקרוסופט לניהול מרכזי של משתמשים, מחשבים והרשאות ברשת ארגונית מבוססת דומיין.
שיתוף - תיקייה או משאב שהועמדו לרשת כדי שמשתמשים אחרים יוכלו לגשת אליהם לפי הרשאות.
NTLM - פרוטוקול אימות ותיק של מיקרוסופט המבוסס על ערכי האש של סיסמאות, שקדם ל-Kerberos.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
הצפנה - המרת מידע לצורה בלתי קריאה בעזרת מפתח, כך שרק מי שמחזיק במפתח המתאים יכול לפענח ולקרוא אותו.
שם משתמש - מזהה ייחודי שמשתמש מזין כדי להזדהות במערכת, לרוב יחד עם סיסמה.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
פרוטוקול - מערכת כללים מוסכמת שקובעת כיצד מכשירים או תוכנות מתקשרים ומחליפים מידע, למשל HTTP או TCP.
הסבר על SPN התקפת Kerberoasting
בשיעור זה אנו מבינים איך עובדת התקפת הקרברוסטינג ומהו מזהה השירות SPN. אנו עוקבים אחר הופעת הכרטיסים בזיכרון, מגלים איך שירותים מעדכנים את Active Directory עם המשתמש שמריץ אותם, בודקים מי רשאי לקרוא ולכתוב מזהי שירותים, ומבינים מדוע דווקא שירותים שרצים תחת משתמש אנושי הם היעד המועדף לפיצוח.
נושאי הסיכום המוצגים בשיעור:
1. המטרה של ההרצאה: להבין איך עובדת התקפת הקרברוסטינג ומה זה SPN.
2. קבלת כרטיס לשירות: מתחילים מזה שרואים שאין לי כרגע אף כרטיס של קרברוס, כי הרצתי את הפקודה שמנקה את כל כרטיסי האימות שהיו לי. ברגע שרוצים להתחבר אל איזשהו שירות ברשת, נניח שיתוף רגיל של קבצים, עושים פקודת תיקייה על איזושהי תיקייה משותפת, ומקבלים כרטיס של קרברוס ליעד מסוים. כלומר הלכתי אל בקר הדומיין ואמרתי לו שאני רוצה להתחבר ליעד כזה וכזה, שיתוף קבצים בשרת הקבצים. בקר הדומיין שלי, השרת הראשי שלי, הביא לי כרטיס עבור השירות שביקשתי, ועם הכרטיס הזה הלכתי אל שרת הקבצים ואמרתי לו: הנה, תראה, תביא לי את הקבצים. למה, כי יש לי כרטיס מבקר הדומיין שאני משתמש לגיטימי.
3. איך השרת סומך על הכרטיס: איך שרת הקבצים יודע שלא זייפתי את הכרטיס הזה? כי הוא חתום עם הערבול של היעד, ואני הייתי יכול להשיג כרטיס כזה אך ורק מבקר הדומיין, ששנינו סומכים עליו.
4. התחברות אל שירות המסד: דרך אגב, מה יקרה אם אני עכשיו אקח ואתחבר, נניח, אל שירות המסד, אל שרת הקבצים? שימו לב, אני חייב להתחבר עם שם ולא עם כתובת IP, כי כתובת IP זה NTLM, וקרברוס חייב שמות בלבד. אם קרברוס לא מצליח לעבוד, למשל בגלל שזה כתובת IP, אז נופלים אל NTLM. מה שקורה עכשיו כשאני מתחבר אל המסד, לא משנה לי מה המשתמש הזה יכול או לא יכול לעשות במסד עצמו: בחיבור שלי אליו אני יכול לראות שהבאתי עוד כרטיסים. זוכרים שהיו לי רק שני כרטיסים, פתאום נהיו לי ארבעה כרטיסים, ואפשר לראות שהבאתי כרטיס עבור שירות המסד בשרת כזה וכזה.
5. בדיקת האימות בתוך המסד: יש פה שאילתא שאפשר להפעיל בתוך המסד לבדוק איך אני מחובר אליו: עושים שאילתה חדשה למעלה, מריצים אותה, והשרת אומר לי שאני מחובר אליו בקרברוס. אז הזיהוי שלי מול השרת היה על ידי הכרטיס הזה, שאותו הבאתי מבקר הדומיין, והשרת הראשי הצפין אותו עם הסיסמה של היעד, וכך המסד ידע מי אני, כי הבאתי לו כרטיס עם השם שלי, עם שם המשתמש שלי, שמוצפן עם הערבול שלו. ודרך אגב, בדיוק את הערבול הזה של היעד אנחנו רוצים לפרוץ.
6. מהו הערבול של היעד: מדובר על שירות של המסד עם שם וסיסמה שהמסד עצמו עובד איתם. אבל עם איזה שם וסיסמה המסד עצמו עובד? אפשר לראות כאן ששירות המסד שמותקן בשרת עובד עם איזשהו משתמש: אם עושים לחיצה כפולה אפשר לראות שזה איזשהו קובץ הפעלה של השרת, שמופעל אוטומטית עם השרת. אבל עם איזה משתמש הוא מופעל, עם אילו הרשאות? יש פה לשונית של התחברות, ובה אפשר לקבוע עם איזה משתמש הוא עובד.
7. הבחירה של מנהל הרשת: נניח שמנהל הרשת החליט שהמסד הזה יעבוד עם משתמש שנקרא מנהל. למה? כי הוא רוצה שהתוכנה תוכל לשלוח מיילים ולעשות כל מיני דברים, ולא דווקא המנהל של שרת הקבצים אלא המנהל של כל הרשת. יותר מזה, הוא יכול היה ליצור איזשהו משתמש חדש ב-Active Directory לטובת המסד הזה ולתת לו הרשאות. אומרים כאן לשירות: תעבוד עם המשתמש הזה.
8. הנוהג המסוכן: ברגע שעושים דבר כזה, וזה נהוג מאוד בעולם ניהול הרשת, אומרים לאיזושהי תוכנה לעבוד עם איזשהו משתמש מסוים, ולרוב לא מחליפים לו סיסמה, כי אין כוח ללכת להחליף סיסמה ידנית בכל המקומות שהמשתמש הזה עובד. הוא מופעל אוטומטית, אף אחד לא משתמש בו כי הוא רק לתוכנה, ואז שוכחים להחליף לו סיסמה כי זה לא נוח, והסיסמה שלו יחסית פשוטה כי אף אחד לא באמת משתמש בה. ואנחנו הולכים לתקוף את הסיסמה הזאת.
9. זו הסיסמה שמצפינה את הכרטיס: זו הסיסמה שאיתה מוצפן הכרטיס. זוכרים, הכרטיס שאני מביא אל המסד מוצפן עם הסיסמה הזאת של השירות. כלומר אני כמשתמש מקבל פה כרטיס אל המסד, והכרטיס הזה מוצפן עם הערבול של המשתמש הזה. ואם אני במקום לשלוח את הכרטיס הזה אל המסד ולעבור זיהוי כמו שאמור להיות ולעבוד עם המסד, אני אקח את הכרטיס הזה ואנסה לפרוץ את הערבול, כי הוא מוצפן עם הערבול של היעד, ואני אנסה לפרוץ את הערבול הזה, וזה בדיוק התקפת הקרברוסטינג.
10. הבעיה של בקר הדומיין: יש לנו רק בעיה קטנה: איך בקר הדומיין, השרת הראשי, ידע איזה שם משתמש רשום פה? איך הוא יודע שכרגע החלפתי פה סיסמה והכנסתי איזשהו משתמש אל איזשהו שירות מקומי אצלי באיזשהו שרת? התשובה היא שהוא לא יודע. אבל הוא חייב לדעת את זה, כי הוא צריך להנפיק כרטיסים לתחנות עבודה, לתת לתחנת עבודה כרטיס, נניח עבור המסד, והכרטיס הזה, כרטיס שירות המתנות, אמור להיות מוצפן עם הסיסמה של המשתמש הזה, אבל בקר הדומיין לא יודע.
11. הדגמה עם מנהל המשימות: לקחתי עכשיו, החלפתי שם משתמש בסיסמה, והפעלתי את קובץ ההפעלה של המסד עם איזשהו משתמש אחר. נכנסים אל מנהל המשימות ורואים שמאחורי הקלעים, בפירוטים, שרת המסד פתאום מופעל עם המשתמש מנהל, ואפשר לעשות זאת עם כל משתמש שבא לי. אז איך בקר הדומיין יודע שהקובץ הזה פה רץ עם איזשהו משתמש, כי הוא חייב לדעת זאת כדי להביא כרטיסים ללקוחות, לווינדוס 11, כרטיס שמוצפן עם הערבול של המשתמש הזה, והוא בכלל לא יודע איזה משתמש זה.
12. הפתרון - מיפוי חשבונות לשירותים: כדי לפתור את הבעיה הזאת עשו מיפוי של חשבונות Active Directory אל שירותים רצים. המיפוי הזה, הקישור הזה בין שירות רץ במחשב לחשבון ב-Active Directory שמפעיל את השירות הזה, כדי שבקר הדומיין ידע מי מפעיל מה, ויהיה לו מפה כזאת: שירות כזה מופעל עם משתמש כזה. עשו משהו מיוחד שקראו לו SPN. נכנסים אל משתמשים ומחשבים של Active Directory, עוברים בתצוגה אל התכונות המתקדמות כדי לראות יותר דברים, ונכנסים אל איזשהו משתמש, נניח במקרה שלי אל המשתמש שנקרא מנהל, שנמצא בתוך תיקיית המשתמשים בקונטיינר של המשתמשים. עושים לחיצה כפולה, ובגלל שאנחנו בתצוגה מתקדמת יש לנו פה עורך מאפיינים, ויש פה שם ראשי של שירות. כלומר בתוך המשתמש מנהל יש מאפיין שאומר שהערבול שלו משמש עבור שירות כזה וכזה.
13. השירות מעדכן את הרישום בעצמו: יותר מזה, אם אני אעצור עכשיו את המסד, עושים קליק ימני ועוצרים את שירות המסד, ופותחים את חלון המשתמש מחדש, במאפיינים שלו, בשם הראשי של השירות, כבר אין כלום. רואים שזה נמחק. כלומר כל פעם שהמסד מופעל, הוא מעדכן את Active Directory עם איזה משתמש הוא פועל, הוא מעדכן את המאפיין של שם ראשי של שירות של המשתמש שאיתו הפעילו אותו. שוב, מפעילים עכשיו את השרת, הוא מופעל עם המשתמש הזה, ורואים מה קורה בתוך Active Directory, בעורך המאפיינים: בשם הראשי של השירות התעדכן מידע שכרגע המסד בשרת כזה וכזה ובפורט כזה וכזה עובד עם הערבול, עם הסיסמה של המשתמש מנהל. זה אומר שאם אתה מנפיק למישהו כרטיס, תנפיק אותו מוצפן עם הערבול של המנהל, וזה נקרא SPN, הקישור בין שם של שירות מסוים לבין, למעשה, המשתמש שאת הערבול שלו אנחנו צריכים, את הסיסמה שלו.
14. שאילתות על מזהי השירותים: נראה את כל מזהי השירותים: אפשר לעשות שאילתה ולראות את כל המזהים ברשת, וזה לא מידע סודי, לדעת ששרת המסד בשרת כזה וכזה מופעל עם המשתמש של המנהל. אפשר גם לבקש מזהה ספציפי ולא את הכל: נניח יש לנו רשת גדולה, אני יכול להגיד לא, אני רוצה רק את המזהה של שירות המסד בשרת מסוים, והוא מראה לי רק את המשתמש שמפעיל את המזהה הזה. אז יש לנו רשימה של הכל ויש לנו רשימה ספציפית. אפשר לעשות גם הפוך, לשאול מי הם המזהים של משתמש מסוים, נניח מי המזהים של המנהל. ואני מתשאל את הכל בשמו של דייוויד, ודייוויד הוא משתמש פשוט במערכת, הוא לא מנהל, לא כלום. אם נבוא פה אל Active Directory נראה מי הדייוויד הזה שאני עובד איתו: הוא חבר בקבוצת משתמשי הדומיין פשוט, הוא משתמש פשוט במערכת ואין לו שום הרשאות מיוחדות של מנהל, אדם פשוט בווינדוס, שרשאי לקבל את המידע הזה כברירת מחדל, וזה גם הכרחי לשם העבודה שלו, כי גם הפקודה שמציגה את הכרטיסים עובדת בשמו של המשתמש.
15. הוספת מזהי שירותים: יותר מזה, אני יכול להוסיף מזהי שירותים. אני יכול לבוא פה ולהגיד: תקשיב, תוסיף מזהה שירות. הכלי לניהול המזהים מובנה בכל ווינדוס, ואפשר לראות אותו בתיקיית המערכת. הכלי הזה יודע לשלוף לי מידע מתוך Active Directory והוא גם יודע להוסיף. כלומר אני יכול לעשות פה איזשהו שירות משלי, פרוטוקול מסוים, ולהגיד שהוא נמצא באיזשהו שרת ושאחראי עליו המנהל של הדומיין. כלומר אם מישהו יבקש את השירות הזה בשרת כזה וכזה, תצפין את הכרטיס ליעד הזה עם הערבול של המנהל, כי הוא גם אחראי על הדבר הזה. רק שאני מקבל פה כשל בהקצאת המזהה, הוא אומר לי שאין לי הרשאות, אין מספיק זכויות גישה, אין לי מספיק הרשאות כתיבה. דייוויד הזה לא רשאי לכתוב על האובייקט של המנהל.
16. תיקון ההרשאות: אני רק אראה לכם איך אפשר לתקן את זה. אפשר לבוא אל האובייקט, נניח של המנהל, וכמובן שזה יכול להיות כל משתמש שאת השירותים שלו מפעילים, זה יכול להיות משתמש שבנו במיוחד להריץ שירות מסוים. עושים עליו קליק ימני ומאפיינים, ויש פה אבטחה על האובייקט הזה של Active Directory ועל המשתמש הזה, במקרה הזה המנהל. אפשר להוסיף פה את דייוויד, ואומרים לדייוויד הזה: בוא נעשה מתקדם, הרשאות מתקדמות. על דייוויד עושים עריכה ואומרים לו כתיבה של כל המאפיינים, כלומר שדייוויד רשאי לכתוב כל מאפיין שבא לו ב-Active Directory למשתמש מסוים. ברגע שעושים דבר כזה, פתאום דייוויד יכול להוסיף את ההרשאה הזאת, למרות שבהתחלה רואים שהוא לא הצליח. בודקים שנייה: הולכים למאפיינים, לאבטחה, מחפשים את דייוויד, ולמה הוא לא פה, לא נתפס. עושים שוב דייוויד, מיישמים, עושים מתקדם על דייוויד, מוצאים אותו, עושים עריכה, מוסיפים את הרשאת כתיבת כל המאפיינים, מותר לו לכתוב כל מאפיין שבא לו, ולדייוויד הזה מותר לכתוב את כל המאפיינים שבא לו להכניס לשם ערכים בתוך המשתמש מנהל. כמובן שזה יכול להיות משתמש אחר, נניח של שרת המסד, או כל משתמש שהייתי רוצה. ואז ברגע שעושים זאת, דייוויד יכול להוסיף מאפיינים אל המזהה של המנהל, או של כל משתמש שנתנו לו הרשאה, ורואים עכשיו שבמזהה של המנהל יש לנו מאפיינים חדשים, יש לנו מזהים חדשים, וזה אומר שהמשתמש הזה מריץ גם את המסד וגם איזשהו שירות סודי, כי בשירותים של השרת ככאורה כתוב המשתמש של המנהל עבור שירות מסוים. רואים את זה גם בבקר הדומיין: נכנסים אליו ובעורך המאפיינים רואים את שם הראשי של השירות, ופה בעריכה הנה הוא מופיע.
17. חופש עריכה מלא: אפשר גם להעיף אותו, אין שום בעיה, גם למחוק אותו מפה וגם להוסיף אותו מפה. מה שאתם רוצים אתם יכולים לעשות. עושים ארבע, בא לכם ארבע? בבקשה, נהיה ארבע, זה פשוט מידע טקסטואלי. מהרגע שעשינו ארבע, תראו שמי שישאל את Active Directory יקבל שרת ארבע, הנה כאן. ואם אקח את המזהה ב-Active Directory ואעיף אותו מכאן, נשארו רק המסדים, ותראו שבתחנה שמבקשת מידע הוא נעלם, אין שום בעיה עם זה. כמובן שהייתי יכול גם לרשום אותו עם פורט מסוים אם הייתי רוצה, גם אין שום בעיה.
18. ניקוי הניסוי: ראינו איך זה עובד, חוזרים שנייה לעניינים שלנו: מעיפים את המזהה שהוספנו, פה במזהים נמחק המזהה החדש, וגם רוצים להעיף את הרשאות דייוויד באבטחה, שדייוויד לא יהיה לי פה ברשימה, אין לו שום סיבה לקבל הרשאות על המשתמש מנהל ב-Active Directory. בודקים פה באבטחה שהוא לא נמצא.
19. שירותים תחת ערבול המחשב: דרך אגב, לא כל השירותים שעובדים במחשב עובדים תחת הערבול, תחת הסיסמה, של משתמש מסוים כמו שעשינו במסד. הם יכולים לעבוד גם עם הסיסמה של המחשב עצמו. למחשב עצמו, לבקר הדומיין או לשרת הקבצים, יש סיסמה בדיוק כמו שלמשתמש יש סיסמה. לחשבון של המחשב יש סיסמה שהיא מורכבת מ-128 תווים אקראיים, וכל 30 יום המחשב לבד מחליף את הסיסמה הזאת. כלומר כשאני מבקש איזשהו שירות משרת הקבצים, אני יכול לקבל אותו מוצפן עם הערבול של המחשב. הכרטיס עצמו יהיה מוצפן עם הערבול של המחשב, כי השירות רץ עם הערבול של המחשב.
20. מערכת מקומית ושירותי רשת: תראו פה, רואים מערכת מקומית ושירותי רשת. כל אלו אינם משתמש כמו ששמנו ידנית, זה למעשה שירות שמשתמש בערבול של המחשב עצמו ולא של משתמש מסוים. רואים את זה גם במנהל המשימות בפירוטים: יש דברים שרצים עם המנהל ויש דברים שרצים עם המערכת, והמערכת משתמשת בסיסמה של המחשב עצמו. אז אם נעשה רשימת כרטיסים, נראה פה לדוגמה שירות של שיתופי קבצים של שרת הקבצים, והוא מוצפן עם איזה ערבול? עם הערבול של המחשב, כי השירות הזה של השיתופים עובד עם הערבול של המחשב. דרך אגב זה נקרא שירות השרת, והוא זה שנותן לי את השיתופים של הקבצים, והוא בעצמו עובד עם המערכת המקומית. זה אומר שכדי להזדהות מולו צריך להביא לו כרטיס שמוצפן עם הערבול של המערכת המקומית. מי זה הערבול של המערכת המקומית? זה הערבול של המחשב, ואת הערבול של המחשב אי אפשר לפרוץ, כי הוא 128 תווים, שזה המון. תחשבו סיסמה עם 128 תווים, וכל 30 יום הוא מחליף אותה, וגם 128 תווים שזו סיסמה מאוד ארוכה עם תווים אקראיים. אז לך תנחש סיסמה של 128 תווים שכל תו בה אקראי.
21. לכן בוחרים שירותים תחת משתמש: בגלל זה אני לא אחפש שירותים שמוצפנים עם הערבול של המחשב, אלא כאלה שמוצפנים עם הערבול של משתמש. אז אני כהאקר יכול לעשות את הפקודה הזאת ולראות לכל מזהה שירות למי הוא משויך: האם זה בקר הדומיין, האם זה מחשב, או שזה משתמש. אם זה משתמש, אני אנסה לפרוץ את הכרטיס שאקבל עבור השירות הזה. אם זה מחשב, חבל לי על הזמן, אין לי סיכוי טוב. חברים, אני רואה שההרצאה הזאת נהיית מאוד מאוד ארוכה, אז אעצור אותה כאן. בהרצאה הבאה אנחנו ניקח את כרטיס השירות הזה גם בווינדוס וגם בקאלי ונפרוץ אותו.
בשיעור הבא נעסוק בנושא ביצוע התקפת Kerberoasting.
בסוף השיעור הבנו את מנגנון המזהה שמקשר בין שירות למשתמש שמריץ אותו, ראינו איך השירות מעדכן את הרישום בעצמו ומי רשאי לקרוא ולכתוב מזהים, והבנו מדוע שירותים שרצים תחת משתמש אנושי הם היעד המועדף לפיצוח הכרטיסים.
SR12914HE