สรุป
หลังจากใช้การปรับปรุงความปลอดภัยเดือน 2017 เมษายนที่อธิบายไว้ในคำแนะนำการปรับปรุงความปลอดภัย Microsoft CVE-2017-0160 คำสั่งคอมพิวเตอร์หยุดv3.0 + ของ PowerShell ล้มเหลว นอกจากนี้ ถ้าโปรแกรมประยุกต์ใช้วิธีการจัดการพลังงาน เช่นปิดเครื่องหรือเริ่มระบบใหม่ จากคลาสWin32_OperatingSystemและตั้งค่าแอตทริบิวต์EnablePrivilegesให้เป็นจริง พวกเขาอาจพบความล้มเหลวเดียวกัน ข้อความข้อผิดพลาด "ไม่ได้ถือสิทธิ์" จะถูกส่งกลับ
ข้อมูลเพิ่มเติม
อาการสำหรับปัญหา 1
ลูกค้าที่พยายามปิด หรือเริ่มการทำงานของระบบ ท้องถิ่น หรือระยะ ไกล โดยใช้คำสั่งคอมพิวเตอร์หยุดPowerShell v3.0 และรุ่นที่ใหม่ กว่า จะเห็นข้อผิดพลาดต่อไปนี้:
คอมพิวเตอร์หยุด: สิทธิ์การใช้งานที่เก็บไว้ไม่
เมื่ออักขระบรรทัด: 1:1
คอมพิวเตอร์หยุด +
+ ~~~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (< COMPUTERNAME >: สตริงที่) [หยุดคอมพิวเตอร์], ManagementE
+ FullyQualifiedErrorId: StopComputerException,Microsoft.PowerShell.Commands.StopComputerCommand
วิธีแก้ปัญหาสำหรับปัญหา 1
เมื่อต้องการหลีกเลี่ยงปัญหานี้ เรียกใช้คำสั่ง "shutdown.exe" ต่อไปนี้เพื่อดำเนินการเปิด/ปิดลง และเริ่มต้นการดำเนินการบนระบบระยะไกล หรือภายในเครื่อง:
shutdown.exe [-r] [-s] [-m \\computer]
สำหรับข้อมูลเพิ่มเติมและคำสั่งวิธีใช้ เรียกใช้:
shutdown.exe -?
อาการสำหรับปัญหา 2
ลูกค้า แอพลิเคชันโดยใช้วิธีการจัดการพลังงาน เช่นปิดเครื่องหรือเริ่มระบบใหม่ จากคลาสWin32_OperatingSystemและตั้งค่าแอตทริบิวต์EnablePrivilegesให้เป็นจริง อาจพบข้อผิดพลาดการ "สิทธิ์การใช้งานไม่ถือ" เดียวกัน
-
ตัวอย่างที่ 1 (PowerShell) ส่งกลับข้อผิดพลาด "ไม่ได้ถือสิทธิ์":
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername $win32OS.psbase.Scope.Options.EnablePrivileges = $true $win32OS.reboot()-
ตัวอย่างที่ 2 (โค้ด C#) ส่งกลับข้อผิดพลาด "ไม่ได้ถือสิทธิ์":
[STAThread] static void Main(string[] args) { ManagementClass mgmtObject = new ManagementClass("Win32_OperatingSystem"); foreach (ManagementObject iterMgmtObject in mgmtObject.GetInstances()) { iterMgmtObject.Scope.Options.EnablePrivileges = true; iterMgmtObject.InvokeMethod("Reboot", null, null); } }
-
วิธีแก้ปัญหาสำหรับปัญหา 2
-
ตัวอย่างที่ 1 (PowerShell):
$computername= "." $win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges $win32OS.reboot() -
สำหรับตัวอย่างที่ 2 (โค้ด C#):
using System; using System.Collections.Generic; using System.Linq; using System.Management; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { public class Program { static void Main(string[] args) { var mgmtScope = new ManagementScope( ManagementPath.DefaultPath, new ConnectionOptions() { EnablePrivileges = true }); var mgmtClass = new ManagementClass(mgmtScope, new ManagementPath("Win32_OperatingSystem"), null); foreach (ManagementObject mgmtInst in mgmtClass.GetInstances()) { var mgmtCallResult = mgmtInst.InvokeMethod("Reboot", null, null); Console.Out.WriteLine("Reboot() Return Value: {0}", mgmtCallResult["ReturnValue"]); } } } }
การแก้ปัญหา
วิธีแก้ไขปัญหาสำหรับปัญหา 1
เมื่อต้องการแก้ไขปัญหานี้ ติดตั้งการปรับปรุงในตารางข้างล่างตามระบบของคุณ
ระบบปฏิบัติการ |
การปรับปรุง |
Windows Server 2008 |
สำหรับตัว.NET Framework 2.0 การติดตั้งการปรับปรุง 4020511 สำหรับตัว.NET Framework 4.5.2 ติดตั้งการปรับปรุง 4020507 สำหรับตัว.NET Framework 4.6 ติดตั้งการปรับปรุง 4020503 |
Windows 7 และ Windows Server 2008 R2 |
สำหรับการติดตั้ง.NET Framework 3.5.1 อัพเด4020513 สำหรับการติดตั้ง.NET Framework 4.5.2 อัพเด4020507 สำหรับตัว.NET Framework 4.6 หรือ 4.6.1 การ การติดตั้งการปรับปรุง4020503 สำหรับการติดตั้ง.NET Framework 4.6.2 การ ปรับปรุง4020500 |
Windows Server 2012 |
สำหรับการ.NET Framework 3.5 ติดตั้งการปรับปรุง4020512 สำหรับการติดตั้ง.NET Framework 4.5.2 อัพเด4020506 สำหรับ 4.6 กรอบงาน.NET หรือ 4.6.1 การ ติดตั้งอัพเด4020501 สำหรับการติดตั้ง.NET Framework 4.6.2 การ ปรับปรุง4020498 |
Windows 8.1 และ Windows Server 2012 R2 |
สำหรับ 3.5 กรอบงาน.NET ติดตั้งอัพเด4020514 สำหรับการติดตั้ง.NET Framework 4.5.2 อัพเด4020505 สำหรับ 4.6 กรอบงาน.NET หรือ 4.6.1 การ ติดตั้งอัพเด4020502 สำหรับการติดตั้ง.NET Framework 4.6.2 การ ปรับปรุง4020499 |
Windows 10 rtm |
ติดตั้งอัพเด4019474 |
Windows 10 เวอร์ชัน 1511 |
ติดตั้งอัพเด4019473 |
10 Windows เวอร์ชัน 1607 และ Windows Server 2016 |
ติดตั้งอัพเด4019472 |
10 Windows เวอร์ชัน 1703 |
ติดตั้งอัพเด4016871 |
วิธีแก้ไขปัญหาสำหรับปัญหา 2
เมื่อต้องการแก้ไขปัญหานี้ ติดตั้งการปรับปรุงในตารางข้างล่างตามระบบของคุณ
รุ่นผลิตภัณฑ์ |
แสดงตัวอย่างของค่าสะสมคุณภาพกิโลไบต์ |
---|---|
การปรับปรุง Windows 10 1703 (RS2)
|
|
.NET framework 3.5 |
|
.NET framework 4.7 |
|
การปรับปรุง Windows 10 1607
|
|
.NET framework 3.5 |
Catalog
|
.NET framework 4.6.2 การและ 4.7 |
Catalog
|
Windows 8.1
|
|
.NET framework 3.5 |
|
.NET framework 4.5.2 |
|
.NET framework 4.6, 4.6.1 การ 4.6.2 การ 4.7 |
|
Windows Server 2012 |
|
.NET framework 3.5 |
|
.NET framework 4.5.2 |
|
.NET framework 4.6, 4.6.1 การ 4.6.2 การ 4.7 |
|
Windows 7
|
|
.NET framework 3.5.1 |
|
.NET framework 4.5.2 |
|
.NET framework 4.6, 4.6.1 การ 4.6.2 การ 4.7 |
|
Windows Server 2008 |
|
.NET framework 2.0 |
|
.NET framework 4.5.2 |
|
.NET framework 4.6 |
นำไปใช้กับ
บทความนี้ใช้กับผลิตภัณฑ์ต่อไปนี้ ตามที่อธิบายไว้ในส่วนของผลิตภัณฑ์ที่ได้รับผลกระทบของCVE-2017-0160:
Microsoft .NET Framework 2.0, 3.5, 4.5.2, 4.6, 4.6.1 การ 4.6.2 การ 4.7 บนเวอร์ชันที่สนับสนุนทั้งหมดของ Windows PowerShell 3.0 และรุ่นที่ใหม่กว่า