תאריך הפצה:25 בפברואר 2025

גירסה:.NET 8 ואילך.NET Framework, כל הגירסאות

סיכום

Microsoft פרסה שיפורי אבטחה לגירסאות אחרונות של Windows. שיפורי אבטחה אלה עשויים לשנות את הטיפול בנתיבים זמניים ועשויים .NET Framework ממשקי API מסוימים של .NETSystem.IO.Path.GetTempPath()להחזיר מיקום אחר לאחר החלת התיקון.

נדרשת פעולה

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

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

תוכנה ישימה

מאמר זה חל על התוכנה הבאה: 

רק כאשר אתה פועל בגירסאות הבאות של Windows Update: 

  • Windows 10, גירסה 22H2 KB5052077 מותקנת

  • Windows Server 2019, KB5053594 מותקן 

  • Windows Server 2016, KB5053594 מותקן 

מאמר זה אינו חל על .NET Framework או על .NET הפועלים ב- Windows 11, Windows Server 2022 ואילך. 

מאמר זה אינו חל על .NET בעת הפעלה בפלטפורמות שאינן של Windows. 

הצהרת תיאור והשפעה מפורטות

נכון ל- KBS של עדכון Windows שהוזכרו לעיל, Microsoft תעדכנה את ממשק ה- API של Win32 GetTempPath2 לגירסאות קודמות של Windows הפועלות בשוק כדי לפעול כתחליף מאובטח יותר עבור ה- API הקודם של GetTempPath של Win32. באופן פנימי, .NET Framework ו- .NET מסתפשרים על ממשקי API אלה של Win32 כדי לספק את היישום של שיטת System.IO.Path.GetTempPath() : ה- API של Win32 GetTempPath2 מועדף אם הוא קיים; וממשק ה- API של Win32 GetTempPath משמש כרקע אם GetTempPath2 אינו קיים. 

מאחר ש- KB אלה עשויים להפוך את ה- API החדש של Win32 GetTempPath2 לזמין בפלטפורמות הרלוונטיות, .NET Framework ו- .NET יתחילו להשתמש ב- GetTempPath2 לאחר התקנת KBs. 

השינוי אופן הפעולה הראשי הוא המתקשרים הפועלים בתור זהות המערכת יבחין ששיטה System.IO.Path.GetTempPath() מחזירה %WINDIR%\SystemTemp כברירת מחדל, בעוד המתקשרים הפועלים בתור כל דבר שאינו זהות המערכת יבחין בכך שהשיטה תמשיך להחזיר את הערך הקיים שלה. 

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

  • היישום שלך משתמש בפלטפורמה של זמן ריצה ומערכת הפעלה המופיעה תחת הכותרת הקודמת "תוכנה ישימה"; ו

  • היישום שלך פועל בתור זהות המערכת; ו

  • עליך להגדיר באופן ידני את משתנה %TMP% או %TEMP% כדי לנתב מחדש את מיקום הקובץ הזמני הרגיל. (עיין בסעיף 'הערות' בתיעוד ה- API של Win32 GetTempPath API של Win32).

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

שינוי התנהגותי זה עשוי להיות גלוי דרך כל .NET Framework או . API שסופק על-ידי NET אשר מסתמך בסופו של דבר על GetTempPath2. נקודות הכניסה הנפוצות ביותר הן: 

פעולה זו אינה נועדה להיות רשימה ממצה של שיטות שאת אופני הפעולה שלהם עשויים להשתנות לאחר התקנת KB. 

קביעה אם יישום פועל תחת זהות המערכת 

קיימים כמה מנגנונים שונים כדי לקבוע את זהותו של יישום .NET Framework או .NET

יישומי אינטרנט מבוססי IIS 

IIS מתייחס לזהות המערכת בתור "LOCALSYSTEM". ב- IIS Manager (inetmgr.exe), עבור אל הכרטיסיה מאגרי יישומים כדי לראות את כל מאגרי היישומים ואת הזהויות המשויכות שלהם. באפשרותך גם לבחור "זהות" מהרשימה הנפתחת קבץ לפי כדי להקל עליך לראות את בריכות היישומים הפועלות בתור הזהות של LOCALSYSTEM. 

צילום המסך שלהלן מציג דוגמה של מאגר יישומים ("MyAppPool") שתצורתו נקבעה לפעול כ- LOCALSYSTEM. כל היישומים הפועלים במאגר יישומים זה יפעלו בתור זהות המערכת. 

צילום המסך מציג דוגמה של מאגר יישומים ("MyAppPool") שתצורתו נקבעה לפעול כ- LOCALSYSTEM. כל היישומים הפועלים במאגר יישומים זה יפעלו בתור זהות המערכת.

באפשרותך גם לגשת למידע זה באופן תיכנותי מהפעלת PowerShell עם הרשאות מלאות באמצעות קובץ ה- Script שלהלן. 

Import-Module IISAdministration  Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"} 

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

Name                 Status       CLR Ver  Pipeline Mode  Start Mode  ----                 ------       -------  -------------  ---------- MyAppPool            Started      v4.0     Integrated     OnDemand 

שירותי Windows 

אם ה- .NET Framework או . יישום מבוסס-NET רשום כשירות Windows, באפשרותך להשתמש במנהל השירותים כדי להציג את הזהות המשויכת לו. 

משורת פקודה עם הרשאות מלאות, הפעל services.msc. פעולה זו מציגה את ממשק המשתמש של מנהל השירותים. 

משורת פקודה עם הרשאות מלאות, הפעל את services.msc. פעולה זו מציגה את ממשק המשתמש של מנהל השירותים.

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

באפשרותך גם לבצע שאילתה על נתונים אלה באמצעות PowerShell באמצעות Get-Service cmdlet. לדוגמה, כדי לבצע שאילתה במידע זה עבור שירות בשם MyService, השתמש בפקודה הבאה. 

(Get-Service MyService).UserName -ieq "LocalSystem" 

אם השירות רשום להפעלה תחת זהות המערכת, פעולה זו תדפיס True במסוף. 

מנגנונים אחרים 

כלים כגון מנהל המשימות (taskmgr.exe) או Sysinternals Process Explorer יכולים גם לומר לך אם יישום פועל תחת זהות המערכת. 

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

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

אם ערך שם המשתמש קורא "SYSTEM", התהליך פועל תחת זהות המערכת. 

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

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

אם ערך המשתמש קורא "NT AUTHORITY\SYSTEM", התהליך פועל תחת זהות המערכת. 

שינוי הנתיב הזמני עבור תהליכים ברמת המערכת 

קובץ ה- Script של PowerShell שלהלן מדגים כיצד ליצור מדריך כתובות C:\NewSystemTemp\ ולהגביל את הגישה של מדריך הכתובות לתהליכים הפועלים תחת זהות המערכת בלבד. אל שתנסה לשנות את כתובות ה- ACL של ספריה שכבר מאוכלסת בקבצים. 

יש להפעיל קובץ Script זה מהפעלת PowerShell עם הרשאות מלאות. 

mkdir C:\NewSystemTemp\  $acl = New-Object System.Security.AccessControl.DirectorySecurity  $acl.SetSecurityDescriptorSddlForm("O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)")  Set-Acl C:\NewSystemTemp\ -AclObject $acl 

באפשרותך לאשר שפעולה זו הצליחה על-ידי הפעלת הפקודה 

icacls C:\NewSystemTemp\ 

אשר תפיק את הפלט הבא המציג הצלחה: 

C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F)                    BUILTIN\Administrators:(OI)(CI)(F)   Successfully processed 1 files; Failed processing 0 files 

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

[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine) 

לאחר מכן אתחל מחדש את המחשב. 

שינוי %SYSTEMTEMP% הסביבה המוחזרת לא ישנה את ערך ההחזרה של System.IO.Path.GetTempPath() עבור .NET Framework ויישומי .NET הפועלים בתור זהות שאינה SYSTEM. יישומים אלה ימשיכו לפעול בהתאם לאותה לוגיקת פתרון שיש להם תמיד, כולל כיבי %TMP% או %TEMP% הסביבה אם הם קיימים. 

באופן דומה, הגדרת משתנה הסביבה %TMP% או %TEMP% לא תשנה את הערך המוחזר של System.IO.Path.GetTempPath() עבור .NET Framework ויישומי .NET הפועלים בתור זהות המערכת. 

לקבלת מידע נוסף

לקבלת מידע נוסף על .NET Framework הפעולה של .NET ו- .NET, עיין בתיעוד .NET ב- Path.GetTempPath

לקבלת מידע נוסף על אופן הפעולה של מערכת ההפעלה Windows המשמשת תחילה, עיין בתיעוד של Windows ב- API של Win32 GetTempPath2.

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

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