בחירת חשבון שירות Windows — LocalSystem, חשבונות וירטואליים ו-gMSA

· · Windows, שירותי Windows, חשבונות שירות, gMSA, LocalSystem, חשבונות וירטואליים, אבטחה, Active Directory, הרשאה מינימלית

«שירות פנימי שהרצנו בינתיים כ-LocalSystem סומן בביקורת אבטחה כ״הרשאה מופרזת״. למה לשנות אותו?» «השירות לא הצליח לגשת לתיקייה משותפת, אז אנחנו מריצים אותו כמשתמש דומיין. כשהסיסמה פגה השירות נעצר, אז הפכנו אותה ללא תפוגה וכתבנו אותה בגלוי בספר ההפעלה.» — בין ייעוצים סביב שירותי Windows של לקוחות, שתי אלה הן קלאסיקה.

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

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

איור 1: בחירת חשבון ההתחברות היא החלטת עיצוב שקובעת יחד הרשאות מקומיות, זהות רשת וניהול סיסמה.

יש למעשה שישה בחירות — LocalSystem, LocalService, NetworkService, חשבון וירטואלי (NT SERVICE\<שם-השירות>), משתמש דומיין ו-gMSA (חשבון שירות מנוהל קבוצתי). מיועד לאנשי IT בעסקים קטנים ובינוניים ולמפתחי יישומי Windows, המאמר מסדר את ההרשאות, זהות הרשת וניהול הסיסמאות של השישה בטבלה אחת ומסכם זרימת החלטה, על בסיס מקורות ראשוניים של Microsoft Learn נכון לאוגוסט 2026.

איך בונים את השירות עצמו (בחירה בין מתזמן המשימות לשירות, מימוש ב-.NET Worker Service) מכוסה ב«How to Build and Operate Windows Services». המאמר הזה מתרכז ב«חשבון ההתחברות», שם קורות רוב התאונות.

1. קודם המסקנה

  • בספק, חשבון וירטואלי הוא המועמד הראשון לשירות שמסתיים בתוך מכונה אחת, ו-gMSA הוא המועמד הראשון לשירות שניגש למשאב בתוך הדומיין בזהות ייחודית לשירות. גם Microsoft נותנת הנחיה להשתמש בחשבון מנוהל (MSA / חשבון וירטואלי) בכל מקום אפשרי.12
  • אל תבחרו LocalSystem כי «זה עובד». האסימון כולל SYSTEM ו-BUILTIN\Administrators ומחזיק הרשאות חזקות כמו SeDebugPrivilege, ולכן השתלטות מאבדת כמעט הכול במכונה הזו. שברירת המחדל של sc.exe create היא LocalSystem הוא כר הגידול של התאונה הזו.34
  • ההבדל בין LocalService ל-NetworkService הוא זהות הרשת. ההרשאות המקומיות מינימליות לשניהם, אבל לצד הרחוק LocalService נראה אנונימי ו-NetworkService נראה כחשבון המחשב.5
  • **חשבון וירטואלי (NT SERVICE\<שם-השירות>) הוא ברירת המחדל המודרנית שיכולה להפריד זהות לכל שירות בלי צורך בניהול סיסמה.** אפשר לציין «NT SERVICE\\שם-השירות» ישירות ב-ACL, וחשבון השירות המוגדר כברירת מחדל של SQL Server הוא זה גם כן.[^understand-service-accounts][^sql-service-accounts]
  • כש-LocalSystem, NetworkService או חשבון וירטואלי יוצאים לרשת הם הופכים לחשבון המחשב (DOMAIN\שם-המחשב$). מתן PC$ ב-ACL של תיקייה משותפת או SQL Server לעיתים קרובות מאפשר לוותר על משתמש דומיין.36
  • תצורה שמשתמשת במשתמש דומיין לשירות הופכת לחוב גם בתפעול סיסמאות וגם מול Kerberoasting. SCM מתחבר עם הסיסמה המאוחסנת, ולכן תפוגה הופכת לכישלון הפעלה, ו«לעולם לא יפוג + פתק גלוי» שמונע זאת הופمع למתנה לתוקף.78
  • gMSA גורם ל-Active Directory לייצר ולסובב את הסיסמה אוטומטית. הדרישות הן דומיין ומפתח שורש KDS, ומגדירים את השירות ל-«DOMAIN\שם-החשבון$» עם שדה הסיסמה ריק. חלק מהיישומים אינם תומכים בכך, ולכן צריך לאמת מראש.910
  • שינוי החשבון משנה את הנחות הפרופיל, %TEMP% ו-DPAPI. נתונים שהוגנו ב-DPAPI של החשבון הישן אינם ניתנים לפענוח בחשבון החדש.
  • מלאי המצב הנוכחי ניתן לאישור מחשבונות ההתחברות של רשימת השירותים וממזהה אירוע 4624 (סוג התחברות 5).11

במשפט אחד, מסקנת המאמר: הפכו תצורה ש«אינה נותנת לשירות סיסמה אנושית» (חשבונות מובנים, חשבון וירטואלי, gMSA) לברירת המחדל, וטפלו במשתמש דומיין כמוצא אחרון.

2. התמונה הגדולה של הבחירות — שישה חשבונות התחברות בטבלה אחת

שלב חזרה קודם. בהפעלת השירות מנהל בקרת השירותים (SCM) מתחבר כחשבון שהוגדר, ובהצלחה יוצר אסימון גישה ומקצה אותו לתהליך השירות. לאחר מכן כל גישה למשאב — קבצים, צינורות וכדומה — מוכרעת בהתאמת האסימון ל-ACL.7 לכן בחירת חשבון ההתחברות היא עיצוב שמחליט את תוכן האסימון שמועבר לתהליך השירות. הנה ששת הבחירות.

מה SCM עושה בהפעלת שירותSCM מתחבר כחשבון שהוגדר, בהצלחה יוצר אסימון גישה ומקצה אותו לתהליך השירות, ולאחר מכן גישה למשאבים מוכרעת בהתאמת האסימון ל-ACLכןלאSCMהתחברות כחשבון שהוגדריצירת אסימון גישההקצאתו לתהליך השירותגישה לקובץ או לצינורהאם ה-ACL מתירה?הגישה מצליחההגישה נדחית

איור 2: כל גישת משאב של השירות מוכרעת בהתאמת האסימון ש-SCM יצר בהפעלה ל-ACL.

חשבון הרשאות מקומיות זהות רשת ניהול סיסמה שימוש טיפוסי
LocalSystem כמעט ללא הגבלה (SYSTEM+Administrators) חשבון מחשב (PC$) לא נדרש (אין סיסמה) שירותים חריגים שרצים כאחד עם מערכת ההפעלה
LocalService מינימלית (מחלקת Users) אנונימי לא נדרש עיבוד מקומי שאינו זקוק לזהות רשת
NetworkService מינימלית (מחלקת Users) חשבון מחשב (PC$) לא נדרש עיבוד בהרשאה נמוכה שבו זהות מכונה מספיקה
חשבון וירטואלי NT SERVICE\<שם> מינימלית + מתן בנפרד ב-ACL חשבון מחשב (PC$) לא נדרש (מנוהל אוטומטית) ברירת המחדל לשירות עסקי שרץ בשרת יחיד
משתמש דומיין רק מה שנתתם המשתמש עצמו ידני (תפוגה, דליפה וסיבוב נשארים אצל אנשים) מוצא אחרון ליישום שאינו תומך ב-gMSA
gMSA רק מה שנתתם ה-gMSA עצמו AD מייצר ומסובב אוטומטית כשסביבת דומיין זקוקה לזהות ייחודית לשירות

ל-LocalSystem, LocalService, NetworkService ולחשבון וירטואלי אין כלל מושג של סיסמה. היחידים שמתחברים עם סיסמה מאוחסנת ב-SCM (= תפוגה ודליפה אפשריות) הם משתמש דומיין ומשתמש מקומי.73

להלן נחפור בטבלה שורה אחר שורה.

3. מה לא בסדר ב-LocalSystem

3.1. חזק עוד יותר מ«הפעלה כמנהל»

LocalSystem (שם תצוגה Local System, NT AUTHORITY\SYSTEM) הוא חשבון מוגדר מראש ש-SCM משתמש בו, והוא מחזיק הרשאות נרחבות במחשב המקומי. האסימון כולל את ה-SID של NT AUTHORITY\SYSTEM ושל BUILTIN\Administrators, והוא יכול לגשת לרוב האובייקטים במערכת. יתרה מזו, SeDebugPrivilege, שיכול לנפות באגים בתהליכים אחרים, ו-SeTcbPrivilege, שפועל כחלק ממערכת ההפעלה, מופעלים כברירת מחדל.3

הכוח הזה שם נרדף לגודל הנזק בהשתלטות. אם לשירות שרץ כ-LocalSystem יש פגיעות אחת להרצת קוד שרירותית, תוקף מגיע בנשימה אחת לקריאה ולשיבוש קבצי כל משתמש במכונה (ל-SYSTEM יש שליטה מלאה כברירת מחדל ב-NTFS5), לקריאת זיכרון תהליכים אחרים דרך SeDebugPrivilege, ולגניבת אישורים ותנועה רוחבית משם (נקודת מוצא ל-Pass-the-Hash וכדומה). שרשרת גניבת האישורים והתנועה הרוחבית מכוסה ב«NTLM and Kerberos Explained with Diagrams» וב«A Practical Guide to Windows LAPS».

הנזק כשמשתלטים על שירות LocalSystemאם לשירות שרץ כ-LocalSystem יש פגיעות אחת להרצת קוד שרירותית, תוקף מגיע לקריאה ולשיבוש קבצי כל משתמש, לקריאת זיכרון תהליכים אחרים ולגניבת אישורים ותנועה רוחביתפגיעות אחת להרצת קוד שרירותיתהתוקף מקבל הרשאות SYSTEMקריאה ושיבוש קבציםקריאת זיכרון תהליכים אחריםגניבת אישוריםתנועה רוחבית למכונה אחרת

איור 3: פגיעות אחת בשירות LocalSystem מאפשרת לתוקף להגיע בנשימה אחת להשתלטות על המכונה כולה ולנקודת מוצא לתנועה רוחבית.

3.2. למה עדיין בוחרים בו

הסיבה פשוטה: זו ברירת המחדל, ודחיית גישה לעולם לא מופיעה. ברירת המחדל כשמשמיטים obj= ב-sc.exe create היא LocalSystem,4 ורבים מדוגמאות הקוד הישנות ותבניות המתקינים עדיין מניחים LocalSystem. כי אפשר להישאר חופשיים משגיאות הרשאה בפיתוח, קיימת המבנה שמייצר בהמוניו «עבד, אז השאירו». גם התיעוד של Microsoft עצמה קובע שרוב השירותים אינם זקוקים לרמת הרשאה גבוהה כזו, ושאם אינכם זקוקים לה כדאי לשקול LocalService או NetworkService.3

המבנה שמשאיר את LocalSystem נבחרברירת המחדל של sc.exe create היא LocalSystem, ודוגמאות ותבניות ישנות גם הן מניחות LocalSystem, ולכן אין דחיית גישה בפיתוח ותצורה של עבד אז השאירו מיוצרת בהמוניםברירת המחדל של sc.exe createנוצר כ-LocalSystemדוגמאות ותבניות ישנותאין דחיית גישה בפיתוחעבד, אז השאירושירותים בהרשאה מופרזת מיוצרים בהמונים

איור 4: ברירת המחדל וחוויית פיתוח «בלי דחיית גישה» מייצרים בהמוניו שירותים קפואים כ-LocalSystem.

3.3. ההבדל מ-TrustedInstaller — גם LocalSystem אינו בלתי מוגבל

לקרוא ל-LocalSystem «החשבון החזק ביותר של Windows» אינו מדויק. הגנת משאבי Windows (WRP) מאז Windows Vista מתירה שינויים בקבצי מערכת, תיקיות ומפתחות רישום חשובים רק ל-TrustedInstaller (שירות מתקין המודולים של Windows), ואפילו SYSTEM או מנהל מקבלים דחיית גישה בשכתוב.12 «אתם זקוקים להרשאה מ-TrustedInstaller» של Explorer הוא המנגנון הזה. להפך, LocalSystem יכול להגיע כמעט לכל דבר מחוץ לאזור המוגן ב-WRP, ובדרך כלל אין סיבה לתת זאת לשירות עסקי.

הקשר בין האזור המוגן ב-WRP ל-TrustedInstallerשינויים בקבצי מערכת ובמפתחות רישום חשובים ש-WRP מגן עליהם מותרים רק ל-TrustedInstaller, ואפילו SYSTEM או מנהל מקבלים דחיית גישהיכול לשנותדחיית גישהכמעט הכול מותרTrustedInstallerקבצי מערכת מוגנים ב-WRP וכדומהSYSTEM ומנהליםמחוץ לאזור המוגן ב-WRP

איור 5: גם LocalSystem אינו בלתי מוגבל; שינויים באזור המוגן ב-WRP מותרים רק ל-TrustedInstaller.

3.4. מקרים שבהם LocalSystem סביר

מה שסביר באופן חריג הוא שירות שההרשאות הנדרשות שלו חורגות מראש ממחלקת מנהל — עבודה צמודה עם מנהל התקן, הפעלת יסוד האבטחה של מערכת ההפעלה, ניהול שירותים או הפעלות אחרים וכדומה. תוכנה כמו סוכן גיבוי או EDR חלה. גם אז כדאי לאשר שיש נתיב קוד שמשתמש בהרשאה הזו באמת, ולשקול אם אפשר להפריד את העבודה שזקוקה להרשאה (איך להבחין, ראו «When Do You Actually Need Administrator Privileges on Windows?»).

4. LocalService ו-NetworkService — חשבונות מובנים בהרשאה מינימלית

LocalService (NT AUTHORITY\LOCAL SERVICE, SID: S-1-5-19) ו-NetworkService (NT AUTHORITY\NETWORK SERVICE, SID: S-1-5-20) הם חשבונות מובנים שהוכנו לשירותים בהרשאה נמוכה. שניהם מחזיקים רק הרשאות מינימליות מקומית, ויכולים מעט יותר מחבר בקבוצת Users.51

ההבדל בין השניים הוא נקודה אחת: כמי הם נראים מהצד הרחוק של הרשת.5

  • LocalService: מתחבר לצד הרחוק באישורים אנונימיים. אינו יכול לגשת למשאב שדורש אימות.
  • NetworkService: מציג לצד הרחוק את אישורי המחשב (בסביבת דומיין, DOMAIN\שם-המחשב$).

הפיצול הוא LocalService אם «אינו יוצא לרשת, או אם יוצא אינו זקוק לזהות», ו-NetworkService אם «אתם רוצים לגשת למשאב בתוך הדומיין בזהות המכונה».

ההבדל בין LocalService ל-NetworkServiceההרשאות המקומיות מינימליות לשניהם, אבל לצד הרחוק LocalService מתחבר באישורים אנונימיים ו-NetworkService מציג את אישורי המחשבLocalServiceמתחבר באישורים אנונימייםמשאב שדורש אימות אינו אפשריNetworkServiceמציג את אישורי המחשבבסביבת דומיין נראה כ-PC$

איור 6: ההרשאות המקומיות הן אותו מינימום, אבל הזהות הנראית מהצד הרחוק של הרשת מתפצלת לאנונימי או חשבון מחשב.

אך לשניים האלה יש חולשה מנקודת מבט מודרנית. אותו חשבון משותף לשירותים רבים. אם חמישה שירותים רצים כ-LocalService, כל עוד ה-ACL הוא לפי חשבון, החמישה יכולים לגשת למשאבים זה של זה. SQL Server אינו תומך בחשבון Local Service מאותה סיבה: זה חשבון משותף ואי אפשר להפריד אותו משירותים אחרים.1

חשבון משותף אי אפשר להפרידאם כמה שירותים חולקים את אותו LocalService, כל עוד ה-ACL לפי חשבון הם יכולים לגשת למשאבים זה של זהשירות אאותו LocalServiceשירות בשירות גיכולים לגשת למשאבים זה של זהכי ה-ACL לפי חשבון

איור 7: שירותים שחולקים את אותו חשבון אי אפשר להפריד ממשאבים זה של זה באמצעות ACL.

לפתור את «להישאר בהרשאה נמוכה אבל להפריד לכל שירות» הוא הנושא הבא, החשבון הווירטואלי.

5. חשבונות וירטואליים (NT SERVICE\<שם-השירות>) — ברירת המחדל המודרנית

5.1. אפשר לקבל זהות לכל שירות בלי סיסמה

חשבון וירטואלי הוא «חשבון מקומי מנוהל» הזמין מ-Windows Server 2008 R2 / Windows 7 ואילך. יש לו שלוש תכונות.6

  • החשבון מנוהל אוטומטית; אין צורך ביצירה ולא בהגדרת סיסמה
  • השם הוא NT SERVICE\<שם-השירות>, והוא הופך לזהות ייחודית לכל שירות
  • בסביבת דומיין הוא יכול לגשת לרשת עם אישורי חשבון המחשב (DOMAIN\שם-המחשב$)

כלומר, הוא שומר את היתרון «אין ניהול סיסמה» של LocalService/NetworkService ומסיר את החיסרון «אי אפשר להפריד כי החשבון משותף». לכן גם התקנת SQL Server מגדירה כברירת מחדל חשבון וירטואלי כמו NT SERVICE\MSSQLSERVER.1

מה חשבון וירטואלי הופך לתואםחשבון וירטואלי שומר את יתרון היעדר ניהול הסיסמה של LocalService ו-NetworkService, מסיר את חיסרון אי אפשר להפריד כי משותף, ויש לו זהות ייחודית לכל שירותשמירההסרהיתרון (אין ניהול סיסמה)חשבון וירטואליחיסרון (אי אפשר להפריד כי משותף)זהות ייחודית לכל שירותאין צורך ביצירה ולא בסיסמה

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

5.2. אפשר לכתוב «NT SERVICE\שם-השירות» ישירות ב-ACL

הנוחות המעשית היא שאפשר להוסיף רק את השירות הזה ל-ACL לפי שם. «רק השירות הזה יכול לכתוב לתיקיית הנתונים הזו» מתממש בלי ליצור קבוצה ובלי לנהל סיסמה.

# Change the service's logon account to a virtual account
# The value of obj= is "NT SERVICE\service-name". Do not specify a password
sc.exe config MyAppService obj= "NT SERVICE\MyAppService"

# Confirm the configuration (check SERVICE_START_NAME)
sc.exe qc MyAppService

# Grant modify rights on the data folder to this service only
icacls "C:\ProgramData\MyApp" /grant "NT SERVICE\MyAppService:(OI)(CI)M"

בממשק הגרפי, ב-services.msc פתחו את מאפייני השירות → לשונית «התחברות» → הזינו NT SERVICE\שם-השירות ב«חשבון זה», והשאירו את שדות הסיסמה ריקים (לחשבון וירטואלי או MSA, אי-ציון סיסמה הוא המפרט של SCM). אחרי השינוי הפעלה מחדש של השירות מיישמת אותו.

5.3. האילוץ — מחוץ למכונה זה לא «השירות הזה»

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

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

איור 9: גם עם זהות ייחודית בתוך המכונה, מהצד הרחוק של הרשת כל שירות נראה כמו אותו PC$.

הרגע שבו האילוץ הזה — צורך בזהות ייחודית לשירות מהצד הרחוק של הרשת, צורך באותה זהות בכמה שרתים — הופך לבעיה הוא כשקוראים ל-gMSA (פרק 8).

6. זהות ביציאה לרשת — הפרקטיקה של חשבון המחשב (PC$)

6.1. «שירות לא יכול לגשת לתיקייה משותפת» הוא אי-הבנה

במכונה שצורפה לדומיין, כששירות שרץ כ-LocalSystem, NetworkService או חשבון וירטואלי ניגש למשאב מרוחק, הוא מאומת כחשבון המחשב (DOMAIN\שם-המחשב$).36 רבים מייעוצי הפתיחה «לא הצליח לגשת לתיקייה משותפת אז הפכנו אותו למשתמש דומיין» נפתרים למעשה בזה. ה-ACL של היעד פשוט לא התיר PC$.

גישה מרוחקת כחשבון מחשבשירות LocalSystem, NetworkService או חשבון וירטואלי במכונה שצורפה לדומיין מאומת מול הצד הרחוק כחשבון המחשב, ואם ה-ACL של היעד מתיר PC$ הוא יכול לגשתכןלאשירות (LocalSystem, חשבון וירטואלי וכדומה)אימות כ-PC$האם ה-ACL של היעד מתיר PC$?הגישה לתיקייה משותפת או למסד נתונים מצליחההגישה נדחית

איור 10: בסביבת דומיין, מתן PC$ ב-ACL של היעד לבדו מקים גישה מרוחקת בלי משתמש דומיין.

המתן בצד שרת הקבצים זהה לפעולת ACL רגילה; ציינו שם-המחשב$ כשם החשבון (בתיבת בחירת האובייקטים של הממשק כללו «מחשבים» בסוגי האובייקטים).

# On the file-server side: grant a service on APPSV01 modify rights on the shared folder
# You need to grant both share permissions and NTFS permissions
Grant-SmbShareAccess -Name "AppData" -AccountName "CORP\APPSV01$" -AccessRight Change -Force
icacls "D:\Shares\AppData" /grant "CORP\APPSV01$:(OI)(CI)M"

SQL Server זהה: צרו את חשבון המחשב ככניסה ומחרוזת החיבור עוברת עם Integrated Security=true ובלי סיסמה.

-- On the DB-server side: permit Windows integrated authentication from a service on APPSV01
CREATE LOGIN [CORP\APPSV01$] FROM WINDOWS;

6.2. הכירו את גבולות גישת PC$

לגישה הזו שני גבולות.

  1. הגרעיניות היא לכל מכונה. LocalSystem, NetworkService וכל שירות חשבון וירטואלי שרצים באותה מכונה נראים כולם כמו אותו PC$ מהצד הרחוק. אי אפשר «להתיר רק לשירות הזה» ביעד, וגם אי אפשר לבקר איזה שירות השתמש בחשבון הזה.2
  2. אי אפשר להשתמש בה בסביבת קבוצת עבודה. חשבון מחשב הוא אובייקט Active Directory, ולכן למכונה שלא צורפה לדומיין אין אחד. צריך עיצוב שמטפל במפורש באישורי חשבון היעד.

כשרוצים לעבור את גבול 1, תשובת 2026 אינה משתמש הדומיין של הפרק הבא… אלא לדלג על הבעיה הזו ולהמשיך ל-gMSA.

שני גבולות של גישת PC$אימות כ-PC$ הוא בגרעיניות רמת מכונה ולכן אין היתר ולא ביקורת לכל שירות, ובקבוצת עבודה חשבון המחשב עצמו אינו קיים ולכן אי אפשר להשתמשגישת PC$גבול 1: לכל מכונהגבול 2: אין קבוצת עבודהאין היתר ולא ביקורת לכל שירותהשתמשו באישורים מפורשיםמעבר לזה: gMSA

איור 11: כשרוצים לעבור את שני גבולות הגרעיניות ברמת מכונה ותנאי הדומיין, דלגו על משתמש הדומיין והמשיכו ל-gMSA.

7. בעיית השימוש במשתמש דומיין לשירות

7.1. הבעיה המבנית של הסיסמה

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

משם מתחילה הספירלה השלילית שרואים לעיתים קרובות בשטח.

  1. מתרחשת תאונת עצירת השירות בגלל תפוגה
  2. כמניעת הישנות נקבע «הסיסמה לעולם לא תפוג»
  3. הליך שינוי לעולם אינו מבוסס, ואותה סיסמה נכתבת בגלוי בספרי הפעלה, בתסריטים ובמתזמן המשימות של כמה שרתים
  4. גם כשמישהו עוזב הסיסמה אינה משתנה (אם תשנו, לא תדעו מה ייעצר)
הספירלה השלילית של הפעלה עם משתמש דומייןהסיסמה פגה והשירות נעצר, «לעולם לא יפוג» נקבע כמניעת הישנות, סיסמה גלויה מתפשטת בספרי הפעלה ובתסריטים, וגם כשמישהו עוזב אי אפשר לשנות אותה1. תפוגה עוצרת את השירות2. «לעולם לא יפוג» נקבע כמניעה3. סיסמה גלויה מתפשטתספרי הפעלה, תסריטים, משימות4. גם כשמישהו עוזב אי אפשר לשנות

איור 12: החל מתאונת תפוגה, «לעולם לא יפוג» והתפשטות סיסמה גלויה מתקבעים.

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

7.2. Kerberoasting — חשבון שירות הופך למטרה

התקפה נוספת הספציפית לחשבון שירות של משתמש דומיין היא Kerberoasting. שירות שמקבל אימות Kerberos רושם SPN (שם ראשי שירות) בחשבון ההתחברות. כל משתמש מאומת בדומיין יכול לבקש כרטיס שירות לחשבון שיש לו SPN רשום, ולכן תוקף משיג את הכרטיס ומנסה כוח גס לא מקוון של הסיסמה. סיסמה של 10 עד 16 תווים שאדם החליט לא תעמוד בהתקפה הזו.

זרימת Kerberoastingכרטיס שירות לחשבון שירות שיש לו SPN רשום יכול להתבקש על ידי כל משתמש מאומת, ולכן תוקף משיג את הכרטיס ומנסה כוח גס לא מקוון של הסיסמהמשתמש מאומת בדומייןבקשת כרטיס ל-SPNהשגת כרטיס שירותכוח גס לא מקווןכ-10 עד 16 תווים יישברו

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

המענה היעיל הוא להפוך את הסיסמה לחוזק שאדם אינו יכול לנחש או לשבור. Microsoft גם מונה כפיית סיסמה ארוכה, ושימוש ב-gMSA שסיסמתו הופכת לערך אקראי ארוך שנוצר במכונה.8 אותו מסמך מזכיר גם שריון Kerberos (FAST), אך FAST מגן על נתוני אימות מוקדם ועל עמידות לזיוף KDC; הוא אינו מונע ממשתמש מאומת לבקש כרטיס שירות ל-SPN, ולכן אינו תחליף לחוזק הסיסמה של חשבון שירות. הקשר בין SPN ל-Kerberos והתנאים שבהם אימות נופל ל-NTLM מצוירים ב«NTLM and Kerberos Explained with Diagrams».

7.3. אם בכל זאת משתמשים במשתמש דומיין

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

  • הפכו את הסיסמה ל-25 תווים או יותר שנוצרו באקראי, ואל תכתבו אותה בשום מקום מלבד כלי ניהול סיסמאות (ספרי הפעלה, תסריטים, Excel משותף)
  • הפכו אותו לחשבון ייעודי לשירות ופצלו לכל שירות (אל תשתפו עם חשבון אנושי2)
  • סרבו להתחברות אינטראקטיבית ולשולחן עבודה מרוחק, והתירו רק «התחברות כשירות»
  • צמצמו את הקבוצות שהוא שייך אליהן (הוספה ל-Domain Admins אינה באה בחשבון)
  • קבעו הליך סיבוב תקופתי ושימו את המקומות ששינוי ישפיע עליהם בפנקס

לעשות את כל זה פחות בטוח ופחות קל מהגירה ל-gMSA — זה הפרק הבא.

8. gMSA — להשאיר את ניהול הסיסמה ל-Active Directory

8.1. המנגנון וההשפעה

gMSA (חשבון שירות מנוהל קבוצתי) הוא חשבון דומיין שמשאיר את ניהול הסיסמה לבקר הדומיין. הסיסמה מחושבת על ידי בקר הדומיין ממפתח השורש של KDS (Key Distribution Service), ורק מארחים מותרים משיגים אותה.13

איך gMSA מנהל את הסיסמהבקר הדומיין מחשב את הסיסמה ממפתח השורש של KDS, רק מארחים מותרים משיגים אותה ומשתמשים בה להרצת השירות, והסיסמה מסתובבת אוטומטית כל 30 יום כברירת מחדלמפתח שורש KDSה-DC מחשב את הסיסמהמארח מותר משיג אותהמשמש להרצת השירותסיבוב אוטומטי כל 30 יום כברירת מחדל

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

ההשפעות ברורות.9

  • סיסמה של 240 בתים שנוצרה באקראי: כוח גס והתקפות מילון הופכים ללא מציאותיים, ועמידות Kerberoasting עולה מהותית
  • סיבוב אוטומטי כל 30 יום כברירת מחדל: אדם אינו צריך לתכנן שינוי, והשירות אינו צריך להיעצר
  • אפשר לשתף את אותה זהות בכמה שרתים: חוות שרתים תחת איזון עומסים יכולה לאמת זה את זה כאותו ראשי
  • ניהול SPN פשוט יותר: רישום וניהול SPN יכולים גם להיות מואצלים ומפושטים

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

8.2. דרישות

ל-gMSA יש תנאים מוקדמים.10

  • סביבת דומיין Active Directory (אי אפשר בקבוצת עבודה)
  • רמות פונקציונליות של דומיין ויער Windows Server 2012 ומעלה
  • מפתח שורש KDS כבר נוצר
  • שם ה-gMSA ייחודי ביער, לא רק בדומיין
  • מרווח שינוי הסיסמה ניתן להגדרה רק ביצירה

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

מיצירת מפתח השורש של KDS ליצירת gMSAאחרי יצירת מפתח השורש של KDS ממתינים לשכפול לכל בקר דומיין, ולכן עד 10 שעות אי אפשר ליצור gMSA; אחרי שהשכפול הושלם אפשר ליצור אחדיצירת מפתח השורש של KDSעד 10 שעות המתנה לשכפולהתקן בטיחות למנוע תאונת כשל בשליפההשכפול לכל DC הושלםאפשר ליצור gMSA

איור 15: ההמתנה עד 10 שעות אחרי יצירת מפתח השורש היא זמן המתנה למנוע כשל בשליפה כל עוד השכפול לא הסתיים.

# Run as a domain administrator, on a domain controller (or an administrative
# workstation with the AD PowerShell module)

# Confirm whether a KDS root key exists, and create one if not (once per forest)
Get-KdsRootKey
Add-KdsRootKey -EffectiveImmediately   # Actually usable after up to 10 hours

8.3. ההליך מיצירה לתצורה

ההליך בארבעה שלבים: «① יצירת קבוצה שמותרת לשליפה → ② יצירת ה-gMSA → ③ התקנתו בשרתים → ④ הגדרתו בשירות».10

ארבעת שלבי הכנסת gMSAהכניסו בארבעה שלבים: יצירת קבוצה שמותרת לשליפת הסיסמה, יצירת ה-gMSA, התקנה בכל שרת, והגדרה כחשבון ההתחברות של השירות① יצירת קבוצה שמותרת לשליפה② יצירת ה-gMSAהוסיפו את ה-PC$ של השרתים③ התקנה בכל שרתאמתו שליפה בפקודת Test④ הגדרה בשירות

איור 16: מיצירת הקבוצה להגדרת השירות, הכנסת gMSA מתקדמת בארבעה שלבים.

# ① Create a security group permitted to retrieve the password,
#    and add the computer accounts of the servers that will run the service
New-ADGroup -Name "GG-SvcBatchHosts" -GroupScope Global
Add-ADGroupMember -Identity "GG-SvcBatchHosts" -Members "APPSV01$", "APPSV02$"
# Group membership is evaluated at computer logon, so
# restarting the target servers after adding is the reliable approach

# ② Create the gMSA
New-ADServiceAccount -Name "svc-batch" `
    -DNSHostName "svc-batch.corp.example.com" `
    -PrincipalsAllowedToRetrieveManagedPassword "GG-SvcBatchHosts"

# ③ On each server that will run the service, install the gMSA and validate
Install-ADServiceAccount -Identity "svc-batch"
Test-ADServiceAccount -Identity "svc-batch"   # True means retrieval is working

# ④ Set it as the service's logon account. Append $ to the name, and do not specify a password
sc.exe config MyBatchService obj= "CORP\svc-batch$"
Restart-Service MyBatchService

גם בהגדרה מ-services.msc שם החשבון כמו CORP\svc-batch$צרפו $ בסוף והשאירו את שדות הסיסמה ריקים. אי אפשר להשתמש בחשבון ממשפחת MSA להתחברות אינטראקטיבית.1 לאחר מכן תנו CORP\svc-batch$ ב-ACL של תיקייה משותפת או SQL Server במקום PC$, וגישת רשת בזהות ייחודית לשירות הושלמה, בלי סיסמה.

8.4. חלק מהיישומים אינם תומכים

כהסתייגות, לא כל תוכנה תרוץ כ-gMSA. דברים שמגדירים את זהות ההתחברות במנגנון סטנדרטי — שירות Windows, מאגר יישומים של IIS, משימת מתזמן המשימות — נתמכים בהרחבה, אך יש אילוצים כמו שאשכול כשל עצמו אינו תומך ב-gMSA, ויישום שפנימיותיו דורשות סיסמה אינו יכול להשתמש בו.10 Microsoft גם קובעת במפורש שיש לאשר התנהגות כ-gMSA בסביבת בדיקה לפני ייצור.9

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

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

יש גם אחים: sMSA (חשבון שירות מנוהל עצמאי) לשרת יחיד, ו-dMSA (חשבון שירות מנוהל מואצל, שהוצג ב-Windows Server 2025, שקושר לזהות מכשיר כדי להתמודד עם גניבת אישורים). לבנייה חדשה קחו gMSA כקו בסיס ושקלו לפי הדרישות.6

9. עיצוב נלווה — זכויות התחברות, פרופיל, DPAPI וביקורת

עוד ארבעה דברים שמשתנים עם החשבון, לשמור.

9.1. הזכות «התחברות כשירות» (SeServiceLogonRight)

כדי להתחיל כשירות החשבון זקוק לזכות המשתמש «התחברות כשירות». ל-LocalSystem, LocalService ו-NetworkService היא מובנית, אך כל חשבון אחר (משתמש דומיין, gMSA וכדומה) זקוק להקצאה מפורשת.15

אם מגדירים מלשונית «התחברות» של ממשק services.msc, התוסף מעניק את הזכות אוטומטית. לעומת זאת CreateService / ChangeServiceConfig (ממשקי ה-API ש-sc.exe config קורא) אינם מאמתים שלחשבון שצוין יש את הזכות. הסיבה הטיפוסית לשירות שהוגדר בתסריט שנעצר בהפעלה עם «השירות לא הופעל בגלל כשל התחברות» היא זו. אל תסמכו על תופעת לוואי של כלי; כללו בהליך הפריסה, במפורש, הוספה ל«התחברות כשירות» במדיניות האבטחה המקומית (secpol.msc), או תצורה דרך GPO/Intune (בסביבה שמגדירה את הזכות במדיניות קבוצה, מתן מקומי נדרס כשהמדיניות חלה, ולכן גם זה דורש תשומת לב). להפך, המהלך הסטנדרטי לחשבון ייעודי לשירות הוא להגדיר יחד «דחה התחברות מקומית».

ההבדל לפי נתיב התצורה של הזכות התחברות כשירותממשק services.msc מעניק את הזכות אוטומטית, אך ה-API ש-sc.exe config קורא אינו מאמת את הזכות, ולכן חשבון בלי הזכות עוצר את השירות בכשל התחברות בהפעלהכןלאהגדרה ב-services.mscהזכות ניתנת אוטומטיתהשירות יכול להתחילהגדרה ב-sc.exe configהזכות אינה מאומתתיש את הזכות?השירות יכול להתחילנעצר בכשל התחברותתנו במפורש ב-secpol.msc או ב-GPO

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

9.2. הפרופיל, %TEMP% ו-HKEY_CURRENT_USER משתנים

SCM טוען את פרופיל המשתמש של החשבון בהפעלת השירות.7 לכן %TEMP%, %APPDATA% ו-HKEY_CURRENT_USER האמיתיים הם דבר אחר לכל חשבון התחברות, וכשמחליפים חשבון הגדרות ומטמון שנשמרו בפרופיל הישן נראים כאילו «נעלמו».

תשובת העיצוב פשוטה: שימו את נתוני השירות לא תחת הפרופיל אלא בנתיב מפורש כמו C:\ProgramData\<שם-היישום>, ותנו את ה-ACL לחשבון ההתחברות. כך שינוי חשבון אינו מגיע עם העברת נתונים.

תלות בפרופיל ותשובת מיקום הנתוניםהפרופיל האמיתי הוא דבר אחר לכל חשבון התחברות, ולכן החלפת חשבון גורמת לנתוני הפרופיל הישן להיראות כאילו נעלמו, אך מיקום בנתיב מפורש ומתן ACL הופכים העברה למיותרתתשובההחלפת חשבון ההתחברותנטען פרופיל אחרהנתונים הישנים נראים כאילו נעלמושימו תחת ProgramDataתנו את ה-ACL לחשבון ההתחברותאין העברה גם כשהחשבון משתנה

איור 19: הימנעו מהפרופיל ושימו את הנתונים בנתיב מפורש, ושינוי חשבון כבר אינו מגיע עם העברת נתונים.

9.3. נתונים שהוגנו ב-DPAPI קשורים לחשבון

קל עוד יותר להחמיץ הוא DPAPI. נתונים שהוצפנו ב-DPAPI בהיקף משתמש (CryptProtectData או ProtectedData של .NET) ניתנים, בעיקרון, לפענוח רק באותו חשבון שהגן עליהם. ברגע שמחליפים חשבון אי אפשר לקרוא מחרוזת חיבור או מפתח API מאוחסנים — זה DPAPI שעושה את עבודתו נכון, אבל אם זה לא בהליך ההגירה זה הופך לאירוע.

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

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

המענה הוא לכלול בתוכנית ההגירה את ההליך «הזינו סודות מחדש אחרי החלפת החשבון» (לעיצוב איפה לאחסן אותם ראו «שמירת מידע רגיש ביישומי Windows»). גם תצורה שיכולה להסתיים באימות משולב של Windows כ-gMSA או PC$ יכולה לבטל את אחסון הסוד עצמו. הסדר הנכון הוא לשקול «האם אפשר בלי לאחסן» לפני «איפה מאחסנים».

ואם השירות רוצה לעבד «בהרשאות המשתמש הקורא», משתמשים בהתחזות במקום לחזק את החשבון. לכך ראו «Handling Windows Impersonation Tokens Correctly».

9.4. ביקורת — הסתכלו על 4624 סוג התחברות 5

הפעלת שירות נרשמת ביומן אירועי האבטחה כמזהה אירוע 4624 (חשבון התחבר בהצלחה) עם סוג התחברות 5 (שירות: SCM הפעיל שירות). השדה «Virtual Account» באירוע מציין אם ההתחברות הייתה על ידי MSA / חשבון וירטואלי, ולכן אפשר להשתמש בו גם למעקב אחר שימוש בחשבונות מנוהלים.11

זרימת ביקורת הפעלת שירותהפעלת שירות על ידי SCM נרשמת כמזהה אירוע 4624 סוג התחברות 5, ושדה Virtual Account יכול לזהות אם ההתחברות הייתה בחשבון מנוהלSCM מפעיל שירותרישום מזהה אירוע 4624סוג התחברות 5 (שירות)שדה Virtual Accountמעקב אחר חשבונות מנוהלים

איור 21: הפעלת שירות נרשמת כ-4624 מסוג התחברות 5, ואפשר אפילו לעקוב אחר שימוש בחשבונות מנוהלים.

למלאי המצב הנוכחי, צבירת חשבונות ההתחברות של רשימת השירותים היא השיטה המהירה.

# Aggregate which services are running as which account
Get-CimInstance Win32_Service |
    Group-Object StartName |
    Sort-Object Count -Descending |
    Select-Object Count, Name

# Inventory non-standard services running as LocalSystem (tell in-house / third-party by the path)
Get-CimInstance Win32_Service |
    Where-Object { $_.StartName -eq 'LocalSystem' -and $_.PathName -notlike '*\Windows\*' } |
    Select-Object Name, DisplayName, PathName

אם הפלט הזה מסדר «שירות עסקי שרץ כ-LocalSystem» ו«שירות שרץ כמשתמש דומיין», זרימת ההחלטה של הפרק הבא נקראת.

10. זרימת החלטה — החליטו בארבע שאלות

הנה התוכן עד כה כהליך בחירה. ענו על ארבע שאלות לפי הסדר.

זרימת ההחלטה לחשבון ההתחברותהחליטו את חשבון ההתחברות בענות לפי הסדר על ארבע השאלות של גישת רשת, צירוף לדומיין, האם זהות רמת מכונה מספיקה, ותמיכה ב-gMSAלאכןלאכןכןלאכןלאאימות Win לעמית?חשבון וירטואליLocalSystem אם נדרשצורף לדומיין?הגנו על אישורים מאוחסניםרמת מכונה מספיקה?חשבון וירטואלי + PC$היישום תומך ב-gMSA?gMSAמשתמש + הקלות

איור 22: ענו על ארבע השאלות לפי הסדר ואיזו מששת הבחירות להשתמש בה מוכרעת.

שאלה 1: האם השירות ניגש למכונה אחרת ברשת (תיקייה משותפת, מסד נתונים, ממשק API וכדומה) באימות Windows?

אם לא, חשבון וירטואלי הוא ברירת המחדל. רק אם נדרשת הרשאה מקומית מיוחדת, אשרו את הצורך ואז שקלו LocalSystem.

שאלה 2: (אם ניגש) האם המכונה צורפה לדומיין?

בקבוצת עבודה אי אפשר להשתמש לא ב-PC$ ולא ב-gMSA. השתמשו בעיצוב שמטפל במפורש באישורי חשבון היעד (הגנו על האחסון ב-DPAPI או דומה), או שקלו צירוף לדומיין.

שאלה 3: (בדומיין) האם זהות רמת מכונה (PC$) מספיקה?

אם כן, חשבון וירטואלי (או NetworkService) + מתן PC$ ב-ACL של היעד הושלם. אם צריך זהות ייחודית לשירות, או זהות משותפת בכמה שרתים, עברו לשאלה 4.

שאלה 4: האם היישום תומך ב-gMSA?

אם כן (דברים שמגדירים התחברות במנגנון סטנדרטי — SCM, מאגר יישומים של IIS, מתזמן המשימות — בדרך כלל כן), gMSA. אל תשכחו בדיקת התנהגות בסביבת אימות. אם אינו נתמך בכל מקרה, השתמשו במשתמש דומיין ייעודי אחרי יישום כל הקלה בסעיף 7.3.

בטבלה זה כך.

מצב המלצה הערות
מקומי בלבד, הרשאות רגילות חשבון וירטואלי תנו את ה-ACL ל-NT SERVICE\<שם>
מקומי בלבד, נדרשת הרשאה מעבר למנהל LocalSystem אמתו קודם את הצורך בהרשאה
עיבוד מקומי שאינו זקוק לזהות רשת LocalService מקובל להשאיר שירות קיים כפי שהוא
גישה למשאב בתוך הדומיין בזהות המכונה חשבון וירטואלי (או NetworkService) תנו PC$ ב-ACL של היעד
גישה למשאב בתוך הדומיין בזהות ייחודית לשירות gMSA מפתח שורש KDS + אשרו תמיכה
אותה זהות בכמה שרתים (איזון עומסים וכדומה) gMSA לא אפשרי בחשבון וירטואלי
יישום שאינו תומך ב-gMSA + נדרשת זהות ספציפית משתמש דומיין ייעודי נדרשות ההקלות בסעיף 7.3
קבוצת עבודה + נדרשת גישה מרוחקת הגנו ואחסנו אישורים מפורשים שקלו גם עיון מחדש בעיצוב

11. סיכום

  • חשבון ההתחברות של שירות הוא החלטת עיצוב שמחליטה יחד הרשאות מקומיות, זהות רשת וניהול סיסמה. אל תשאירו בברירת המחדל (LocalSystem).
  • LocalSystem מחזיק אסימון SYSTEM+Administrators והרשאות חזקות, והנזק בהשתלטות ממוזער. רוב השירותים העסקיים אינם זקוקים להרשאה הזו.
  • LocalService ו-NetworkService שניהם בהרשאה נמוכה; ההבדל הוא זהות הרשת (אנונימי, או חשבון המחשב). כי החשבון משותף לכמה שירותים, עם זאת, אי אפשר להפריד אותם.
  • חשבון וירטואלי (NT SERVICE\<שם-השירות>) הוא ברירת המחדל המודרנית שיכולה להפריד לכל שירות בלי צורך בניהול סיסמה. אפשר לציין ישירות ב-ACL, והתצורה היא רק שינוי שם חשבון ההתחברות.
  • LocalSystem, NetworkService וחשבון וירטואלי יוצאים לרשת כ-DOMAIN\PC$ בסביבת דומיין. מתן PC$ ב-ACL של תיקייה משותפת או SQL Server לעיתים קרובות מאפשר לוותר על משתמש דומיין.
  • שימוש במשתמש דומיין לשירות יש בעיות מבניות של עצירה מתפוגה, התפשטות סיסמה גלויה ו-Kerberoasting. אם משתמשים, נדרשים חשבון ייעודי + סיסמה אקראית ארוכה + הגבלות התחברות.
  • gMSA הוא מנגנון שבו AD מייצר ומסובב את הסיסמה אוטומטית; הדרישות הן דומיין, רמה פונקציונלית 2012 ומעלה ומפתח שורש KDS. הגדירו את השירות ל-«DOMAIN\שם$» עם שדה הסיסמה ריק.
  • כשמשנים חשבון, כללו את הזכות «התחברות כשירות», העברת הפרופיל ו-%TEMP%, והזנה מחדש של נתונים מוגנים ב-DPAPI בהליך ההגירה. ביקורת ניתן לאשר במזהה אירוע 4624 סוג התחברות 5.

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

מאמרים קשורים

תחומי ייעוץ קשורים

KomuraSoft LLC מטפלת בעיצוב חשבון התחברות ובהקשחת הרשאה מינימלית לשירותי Windows וליישומים תושבים, בהגירת שירותים קיימים שנבנו בהנחת LocalSystem לחשבון וירטואלי או ל-gMSA, ובחקירת כשלים שנגרמו מדחיית גישה, DPAPI והפרופיל אחרי שינוי חשבון. להתחיל משלב «סומנו בביקורת, אבל איננו יודעים מאיפה להתחיל» זה בסדר.

קישורי עיון

  1. Microsoft Learn, Configure Windows service accounts and permissions. שחשבון השירות המוגדר כברירת מחדל של SQL Server הוא חשבון וירטואלי (NT SERVICE\MSSQLSERVER וכדומה), שבציון חשבון וירטואלי או MSA משאירים את שדה הסיסמה ריק, ש-MSA הוא שם עם $ סופי ואי אפשר להשתמש בו להתחברות אינטראקטיבית, ש-Local Service הוא חשבון משותף ולכן אי אפשר להפריד ו-SQL Server אינו תומך, ששימוש בחשבון דומיין עולה במאמץ בניהול ידני של סיסמה ו-SPN ותחזוקה עלולה להוביל לעצירת שירות, ושצריך תמיד להריץ שירות כחשבון בהרשאה מינימלית.  2 3 4 5 6

  2. Microsoft Learn, Securing on-premises service accounts. סדר העדיפות קודם gMSA לשירות מקומי, אחר כך sMSA אם אי אפשר, אחר כך חשבון מחשב ולבסוף חשבון משתמש; שבשימוש בחשבון מחשב אי אפשר לדעת איזה שירות משתמש בחשבון ואי אפשר לבקר שינוי; ותפקידי חשבון שירות (זיהוי, אימות והפעלת השירות).  2 3

  3. Microsoft Learn, LocalSystem Account. ש-LocalSystem מחזיק הרשאות נרחבות במחשב המקומי והאסימון כולל את ה-SID של NT AUTHORITY\SYSTEM ו-BUILTIN\Administrators, שאין לו סיסמה, שהוא מציג אישורי מחשב לשרת מרוחק, רשימת הרשאות כולל SE_DEBUG_NAME ו-SE_TCB_NAME, ושרוב השירותים אינם זקוקים לרמת הרשאה זו וכדאי לשקול LocalService/NetworkService.  2 3 4 5 6

  4. Microsoft Learn, sc.exe config. שמציינים את חשבון ההתחברות של השירות בפרמטר obj=, שברירת המחדל היא LocalSystem, ופרמטר password= בשימוש בחשבון משתמש שאינו LocalSystem.  2

  5. Microsoft Learn, Local accounts. של-SYSTEM (S-1-5-18) יש שליטה מלאה כברירת מחדל בכרך NTFS, ש-NETWORK SERVICE (S-1-5-20) מציג אישורי מחשב לשרת מרוחק, וש-LOCAL SERVICE (S-1-5-19) מחזיק הרשאות מינימליות מקומית ומציג אישורים אנונימיים לרשת.  2 3 4

  6. Microsoft Learn, Service accounts. שחשבון וירטואלי הוא חשבון מקומי מנוהל אוטומטית שאינו זקוק לניהול סיסמה, שהשם בצורת NT SERVICE<SERVICENAME>, שבסביבת דומיין הוא ניגש לרשת באישורי חשבון המחשב (\$), וקריטריוני הבחירה בין sMSA, gMSA, dMSA וחשבון וירטואלי.  2 3 4

  7. Microsoft Learn, Service User Accounts. ששירות רץ בהקשר האבטחה של חשבון משתמש, ש-SCM מתחבר לחשבון בהפעלה ומשייך אסימון גישה לתהליך השירות, ש-SCM טוען את פרופיל המשתמש, וש-SCM אינו מנהל תפוגת סיסמה ולכן תפוגה גורמת לכישלון התחברות והשירות לא יופעל.  2 3 4 5

  8. Microsoft Learn, Protect SMB traffic from interception. המלצות כולל gMSA כהגנה על חשבון שירות (סיסמה אקראית ארוכה שנוצרה במכונה שהופכת שבירת סיסמה בכוח גס או במילון ללא מציאותית), כפיית סיסמה ארוכה, ואזכור שריון Kerberos (FAST).  2

  9. Microsoft Learn, Secure group managed service accounts. שסיסמת gMSA היא ייצור אקראי של 240 בתים שקשה לתקוף בכוח גס או במילון, שמערכת ההפעלה Windows משנה את הסיסמה כל 30 יום כך שמנהל אינו צריך לתכנן שינוי או לעצור את השירות, פריסה לחוות שרתים וניהול SPN פשוט יותר, שאם שירות אינו תומך ב-gMSA משתמשים ב-sMSA ואם גם זה אינו אפשרי בחשבון משתמש רגיל עם ניהול סיסמאות חזק, ושצריך לאשר התנהגות כ-gMSA בסביבת בדיקה לפני ייצור.  2 3

  10. Microsoft Learn, Manage group Managed Service Accounts. התנאים המוקדמים של gMSA (רמה פונקציונלית של דומיין/יער 2012 ומעלה, יצירת מפתח שורש KDS), ששם ה-gMSA חייב להיות ייחודי ביער, שמרווח שינוי הסיסמה ניתן להגדרה רק ביצירה, ציון הקבוצה שמותרת לשליפת הסיסמה ב–PrincipalsAllowedToRetrieveManagedPassword של New-ADServiceAccount, הליך Install-ADServiceAccount/Test-ADServiceAccount, שזהות חשבון וירטואלי מקומית למכונה ואינה מוכרת מהדומיין, שאשכול כשל אינו תומך ב-gMSA, וש-SCM, מאגר יישומים של IIS ומתזמן המשימות תומכים בהגדרת התחברות כ-gMSA.  2 3 4 5

  11. Microsoft Learn, 4624(S): An account was successfully logged on. שאירוע 4624 נרשם במחשב שאליו ניגשו כשנוצרת הפעלת התחברות, שסוג התחברות 5 פירושו שירות (SCM מפעיל שירות), וששדה «Virtual Account» יכול לזהות התחברות על ידי MSA או חשבון וירטואלי וניתן להשתמש בו למעקב אחר חשבונות שירות מנוהלים.  2

  12. Microsoft Learn, About Windows Resource Protection. שהגנת משאבי Windows (WRP) מונעת החלפת קבצי מערכת, תיקיות ומפתחות רישום חשובים, שגישה מלאה למשאב מוגן ב-WRP מוגבלת ל-TrustedInstaller ושינוי יכול להיעשות רק במנגנון ההחלפה הנתמך דרך שירות מתקין המודולים של Windows, ויישום שמנסה לשנות משאב מוגן מקבל דחיית גישה. 

  13. Microsoft Learn, Group Managed Service Accounts overview. ש-gMSA הוא חשבון דומיין שמשאיר ניהול סיסמה ל-Windows, שבקר הדומיין מחשב את הסיסמה מהסוד המשותף של Key Distribution Service (kdssvc.dll) ומארח חבר שואל את בקר הדומיין על הסיסמאות הנוכחית והקודמת, ושהוא מאפשר אימות הדדי כאותו ראשי בחוות שרתים. 

  14. Microsoft Learn, Create a Key Distribution Service (KDS) root key. שמפתח שורש נדרש כדי שבקר הדומיין יתחיל לייצר סיסמאות gMSA, הליך היצירה ב-Add-KdsRootKey -EffectiveImmediately, שעד 10 שעות אחרי היצירה אי אפשר ליצור gMSA כי ממתינים להתכנסות שכפול AD, וששכפול לא שלם עלול לגרום לכשל בשליפת הסיסמה. 

  15. Microsoft Learn, Policy CSP - UserRights: LogOnAsService. שהזכות «התחברות כשירות» מאפשרת לראשי אבטחה להתחבר כשירות, של-Local System, Local Service ו-Network Service הזכות מובנית, ששירות שרץ ככל חשבון אחר זקוק להקצאת הזכות, ונתיב התצורה במדיניות קבוצה. 

מאמרים עדכניים עם אותן תגיות, להעמקה בנושאים קרובים.

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

המאמר קשור ישירות לשירותים הבאים.

שאלות נפוצות

שאלות נפוצות בפניות בנושא המאמר.

האם לשנות מיד שירות שהרצתי בינתיים כ-LocalSystem?
שינוי מיידי אינו תמיד התשובה הנכונה לכל מקרה. קודם ודאו אם השירות באמת זקוק להרשאות מקומיות ברמת LocalSystem (הרשאות חזקות מעבר למנהל). אם מדובר רק בקריאה וכתיבה של קבצים ובתקשורת רשת, המועמד הראשון הוא מעבר לחשבון וירטואלי (NT SERVICE\שם-השירות). במעבר ודאו מתן גישה לתיקיות ולמפתחות רישום נדרשים, איך מטפלים בנתונים שתלויים בפרופיל או ב-DPAPI, והאם קיימת הזכות "התחברות כשירות". ודאו הפעלה ופונקציות עיקריות בסביבת אימות, ואז החליפו ייצור.
לבחור חשבון וירטואלי או NetworkService?
לבחירה חדשה אנו ממליצים על חשבון וירטואלי. ברשת שניהם נראים כחשבון המחשב (DOMAIN\שם-המחשב$), ולשניהם הרשאות מקומיות קטנות. אך NetworkService משותף לכמה שירותים, ולכן אי אפשר להפריד ב-ACL ש"מתירה רק לשירות הזה". לחשבון וירטואלי זהות ייחודית לכל שירות, ואפשר לציין NT SERVICE\שם-השירות ישירות ב-ACL. מוצרי Microsoft עדכניים כמו SQL Server גם הם ברירת מחדל לחשבון וירטואלי.
אפשר להשתמש ב-gMSA בסביבת קבוצת עבודה (בלי דומיין)?
לא. gMSA הוא מנגנון שבו בקר דומיין של Active Directory מייצר ומנהל את הסיסמה, ודומיין ויצירת מפתח שורש KDS הם תנאים מוקדמים. בקבוצת עבודה הבסיס הוא לסיים עיבוד מקומי בחשבון וירטואלי או LocalService/NetworkService. אם צריך גישה למכונה אחרת, נדרש עיצוב אחר כמו שימוש מפורש באישורי חשבון שהוכן ביעד. גישת רשת כחשבון מחשב (PC$) גם היא תקפה רק בסביבת דומיין.
אחרי שהחלפתי את חשבון ההתחברות של השירות, אי אפשר לקרוא הגדרות ואישורים ששמרתי. למה?
כי כל חשבון התחברות קשור לפרופיל המשתמש שלו, ל-%TEMP%, ל-HKEY_CURRENT_USER ולמפתח DPAPI. במיוחד נתונים שהוגנו ב-DPAPI בהיקף משתמש (CryptProtectData וכדומה) ניתנים, בעיקרון, לפענוח רק באותו חשבון שהגן עליהם. קבצים שנשמרו תחת הפרופיל (AppData וכדומה) הם גם נתיב אחר מהחשבון החדש. לפני החלפת חשבון תכננו את הליך יצירת הנתונים המוגנים ב-DPAPI מחדש (הזנת מפתחות API מחדש וכדומה) והעברת קבצים תחת הפרופיל.
אם אני רוצה רק שהשירות יגש לתיקייה משותפת, האם צריך משתמש דומיין?
במקרים רבים לא. בסביבת דומיין שירות שרץ כ-LocalSystem, NetworkService או חשבון וירטואלי מאומת מול הצד הרחוק כחשבון המחשב (DOMAIN\שם-המחשב$). הוסיפו את ה-PC$ להרשאות השיתוף ולהרשאות NTFS של התיקייה המשותפת והוא יוכל לקרוא ולכתוב. אם אתם רוצים בקרת גישה בזהות ייחודית לשירות, או אותה זהות בכמה שרתים, שקלו gMSA במקום משתמש דומיין.

פרופיל הכותב

עמוד היכרות עם כותב המאמר.

Go Komura

מנהל KomuraSoft LLC

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

קישורים ציבוריים

חזרה לבלוג