ฉันจะปิดระบบได้อย่างไรเมื่อฉันไม่มี SeShutdownPrivilege


20

ผู้ใช้ใน Windows สามารถได้รับสิทธิพิเศษมากมาย

สิทธิพิเศษกำหนดประเภทของการทำงานของระบบที่บัญชีผู้ใช้สามารถดำเนินการได้ ผู้ดูแลระบบกำหนดสิทธิ์ให้กับบัญชีผู้ใช้และกลุ่ม สิทธิ์ของผู้ใช้แต่ละคนรวมถึงสิทธิ์ที่มอบให้แก่ผู้ใช้และกลุ่มที่เป็นของผู้ใช้

ขณะนี้มี 35 สิทธิ์ สิ่งที่น่าสนใจมากกว่านี้คือ:

  • SeSystemtimePrivilege : จำเป็นต้องแก้ไขเวลาของระบบ
  • SeTimeZonePrivilege : จำเป็นเพื่อปรับเขตเวลาที่เกี่ยวข้องกับนาฬิกาภายในของคอมพิวเตอร์
  • SeBackupPrivilege : สิทธิ์นี้ทำให้ระบบให้สิทธิ์การควบคุมการอ่านทั้งหมดสำหรับไฟล์ใด ๆ โดยไม่คำนึงถึงรายการควบคุมการเข้าถึง (ACL) ที่ระบุสำหรับไฟล์
  • SeCreatePagefilePrivilege : จำเป็นในการสร้างไฟล์การเพจ
  • SeRemoteShutdownPrivilege : จำเป็นเพื่อปิดระบบโดยใช้คำขอเครือข่าย
  • SeDebugPrivilege : จำเป็นในการดีบักและปรับหน่วยความจำของกระบวนการที่เป็นเจ้าของบัญชีอื่น

แต่สิ่งที่ฉันสนใจคือ:

  • SeShutdownPrivilege : จำเป็นเพื่อปิดระบบภายในเครื่อง

ผมสังเกตเห็นว่าผมไม่ได้จริงมีสิทธิพิเศษนี้ จากพรอมต์คำสั่งที่ยกระดับ:

>whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                  Description                               State
=============================== ========================================= ========
SeIncreaseQuotaPrivilege        Adjust memory quotas for a process        Disabled
SeSecurityPrivilege             Manage auditing and security log          Disabled
SeTakeOwnershipPrivilege        Take ownership of files or other objects  Disabled
   ...
SeShutdownPrivilege             Shut down the system                      Disabled
   ...

สิ่งนี้ได้รับการยืนยันเมื่อใช้Process Explorerเพื่อตรวจสอบโทเค็นความปลอดภัยของกระบวนการยกระดับที่ทำงานเป็นฉัน:

ป้อนคำอธิบายรูปภาพที่นี่

และยังฉัน สามารถปิดระบบ ทำไม?

นโยบายกลุ่มบอกว่าฉันควรมี

หากคุณใช้สแน็ปอินเครื่องมือแก้ไขนโยบายความปลอดภัยในพื้นที่ ( secpol.msc) คุณจะเห็นว่าฉันควรมีสิทธิ์:

  • secpol.msc

    • ตั้งค่าความปลอดภัย
    • นโยบายท้องถิ่น
    • การมอบหมายสิทธิ์ของผู้ใช้
    • ปิดระบบ

      ป้อนคำอธิบายรูปภาพที่นี่

ชี้แจงสิทธิพิเศษ:

ปิดระบบ

การตั้งค่าความปลอดภัยนี้กำหนดว่าผู้ใช้ที่เข้าสู่ระบบในเครื่องคอมพิวเตอร์ใดสามารถปิดระบบปฏิบัติการโดยใช้คำสั่งปิดเครื่อง การใช้งานในทางที่ผิดของผู้ใช้นี้อาจส่งผลให้เกิดการปฏิเสธการบริการ

ค่าเริ่มต้นในเวิร์กสเตชัน: ผู้ดูแลระบบตัวดำเนินการสำรองข้อมูลผู้ใช้

ค่าเริ่มต้นบนเซิร์ฟเวอร์: ผู้ดูแลระบบตัวดำเนินการสำรองข้อมูล

ค่าเริ่มต้นในตัวควบคุมโดเมน: ผู้ดูแลระบบตัวดำเนินการสำรองข้อมูลผู้ดำเนินการเซิร์ฟเวอร์ตัวดำเนินการพิมพ์

ฉันผู้ใช้ บางครั้งผมเป็นผู้ดูแลและครั้งอื่น ๆ ฉันNotAdministrator NotAdministrator

บางทีอาจจะเป็นคำถามที่ควรจะเป็นเหตุผลที่ไม่ฉันมีสิทธิ์

แต่ความจริงคือฉันไม่มีสิทธิ์; และเมื่อล็อกอินในเครื่องฉันสามารถปิดระบบภายในเครื่องได้

ทำไม?


@ Mehrdad มีคำตอบที่ดีว่าเขาลบซึ่งฉันคิดว่าสมควรได้รับความสนใจและตอบคำถามอย่างชัดเจนและรัดกุม:

คุณมีสิทธิ์ มันเป็นเพียงการปิดการใช้งานโดยค่าเริ่มต้น หากคุณไม่มีสิทธิ์ก็จะไม่มีการระบุไว้เลย
แจ้งให้ทราบ ว่าSE_PRIVILEGE_REMOVEDจะแตกต่างจากที่ขาด หรือSE_PRIVILEGE_ENABLEDSE_PRIVILEGE_ENABLED_BY_DEFAULT

การอ่านโบนัส


นโยบายกลุ่มของคุณจัดการโดยโดเมนจะแทนที่นโยบายกลุ่มท้องถิ่นของคุณ ปรับเปลี่ยนการอนุญาตโดเมนแทนการอนุญาตภายใน เมื่อคุณวิ่ง "whoami / priv:, คุณเป็นกลุ่มผู้ใช้ใดถ้าฉันไม่เข้าใจสิ่งที่คุณถามอย่างสมบูรณ์แก้ไขคำถามของคุณเพราะฉันแค่เดาว่าคุณกำลังถามอะไรอยู่
Ramhound

ฉันถามว่าเหตุใดฉันจึงสามารถปิดระบบเมื่อโทเค็นความปลอดภัยของฉันไม่มีสิทธิ์ ไม่ว่าจะเป็นสิทธิ์มาจากเครื่องท้องถิ่นหรือตัวควบคุมโดเมน: อย่างใดอย่างหนึ่งฉันไม่ได้
Ian Boyd

การถอดปลั๊กไฟได้รับการแก้ไขปัญหาสิทธิพิเศษทั้งหมด ... :) แน่นอนขึ้นอยู่กับวิธีการรีสตาร์ท ...
Solar Mike Mike

คำตอบ:


29

คุณได้รับอนุญาต แต่ก็เป็นคนพิการ นั่นคือสิ่งที่ PowerShell บอกคุณ

ในการปิดระบบคุณใช้ฟังก์ชัน Win32API ที่เรียกว่าInitiateSystemShutdownหรือExitWindowsEx:

ExitWindowsEx(EWX_POWEROFF, 0);

ฟังก์ชั่นเหล่านี้ทราบ:

หากต้องการปิดเครื่องคอมพิวเตอร์เธรดการโทรต้องมีสิทธิ์ SE_SHUTDOWN_NAME โดยค่าเริ่มต้นผู้ใช้สามารถเปิดใช้งานสิทธิ์SE_SHUTDOWN_NAMEบนคอมพิวเตอร์ที่พวกเขาเข้าสู่ระบบและผู้ดูแลระบบสามารถเปิดใช้งานสิทธิ์ SE_REMOTE_SHUTDOWN_NAME บนคอมพิวเตอร์ระยะไกล

อย่างที่คุณเห็น Windows จะตรวจสอบสิทธิ์ของเธรด (เธรดใด ๆ ที่มีโทเค็นพร้อมสิทธิพิเศษ) หากคุณโทรExitWindowsExโดยไม่มีสิทธิ์SE_SHUTDOWN_NAMEฟังก์ชันจะล้มเหลวโดยมีข้อผิดพลาด:

Error code: 1314
A required privilege is not held by the client

เธรดที่คุณสร้างโดยค่าเริ่มต้นจะได้รับสิทธิพิเศษของคุณ แต่โปรแกรมสามารถเปิดใช้งานสิทธิ์ที่ปิดใช้งานที่ได้รับอนุญาตโดยใช้AdjustTokenPrivileges:

TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = LookupPrivilegeValue(NULL, "SeShutdownPrivilege");
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

HANDLE processToken = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES);
AdjustTokenPrivileges(processToken, false, tp, 0, NULL, NULL);
CloseHandle(processToken);

การเปลี่ยนสิทธิ์ในโทเค็นพูดว่า:

AdjustTokenPrivileges ไม่สามารถเพิ่มหรือลบสิทธิ์จากโทเค็น มันสามารถเปิดใช้งานสิทธิ์ที่มีอยู่ที่ถูกปิดใช้งานในปัจจุบันหรือปิดการใช้งานสิทธิ์ที่มีอยู่ที่เปิดใช้งานในปัจจุบัน


ดังนั้นทำไมสิทธิ์พิเศษนี้จึงถูกปิดใช้งานโดยค่าเริ่มต้น? เพื่อให้แน่ใจว่าไม่มีโปรแกรมใดสามารถปิด Windows โดยไม่ได้ตั้งใจ แอพพลิเคชั่นนี้ควรสอบถามอย่างชัดเจน

มีหนังสือโบราณ แต่ดีมาก: https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/เกี่ยวกับทุกสิ่งนั้น


ฉันซื้อหนังสือเล่มนั้นเมื่อสองสามปีก่อน ฉันจะต้องอ่านใหม่อีกครั้ง
Ian Boyd

หากคุณรู้จัก C คุณสามารถดาวน์โหลดชุมชน VS (ซึ่งให้บริการฟรี) และลองปิดเครื่องคอมพิวเตอร์โดยไม่ใช้โปรแกรมแบบเป็นส่วนตัว จากนั้นเปิดใช้งาน Priv แบบเป็นทางการแล้วลองใหม่อีกครั้ง) เป็นวิธีที่ดีที่สุดในการศึกษาทุกอย่างเกี่ยวกับ Windows :)
user996142

@ user996142 - อะไรโดยปิดเครื่อง? เดาว่าคุณพูดถูก :)
Jules

5

เป็นเพราะผู้ใช้ของคุณอยู่ในกลุ่มที่เปิดใช้งานสิทธิ์นั้น

ในการดูตัวคุณเองว่ากลุ่มใด:

  • เปิดพรอมต์ PowerShell (หรือ Command) ในฐานะผู้ดูแลระบบ
  • secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFGวิ่ง
  • ดูเนื้อหาของ OutFile.cfg ใน Notepad หรือเหมือนกันและค้นหาSeShutdownPrivilegeรายการ คุณจะ (ควร) เห็น SID สองสามตัวสำหรับผู้ใช้และ / หรือกลุ่มที่เปิดใช้งานสิทธิ์นั้น

ดังนั้นฉันมี SID สั้นสามรายการ SID แบบย่อมักเป็นบัญชี / กลุ่มระดับคอมพิวเตอร์ S-1-5-32-545ตัวอย่างหนึ่งของพวกเขาคือ

การใช้ PowerShell เราสามารถกำหนดบัญชี / กลุ่มที่ SID แสดง:

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-32-545")
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$objUser.Value

ผลตอบแทนBUILTIN\Usersนี้

เนื่องจากคุณเป็นผู้ใช้ในคอมพิวเตอร์เครื่องนั้นคุณจึงเป็นสมาชิกของกลุ่มนั้นโดยอัตโนมัติหมายความว่าคุณสามารถปิดคอมพิวเตอร์ได้

อีกสองฉันมีS-1-5-32-544และS-1-5-32-551. เหล่านี้คือBUILTIN\Administratorsกลุ่มมาตรฐานและBUILTIN\Backup Operatorsกลุ่ม สิ่งที่สอดคล้องกับกลุ่มที่คุณเห็นในsecpol.mscกล่องโต้ตอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.