Làm cách nào tôi có thể tắt hệ thống khi tôi không có SeShutdownPriv đặc quyền


20

Người dùng trong Windows có thể được cấp nhiều đặc quyền khác nhau

Đặc quyền xác định loại hoạt động hệ thống mà tài khoản người dùng có thể thực hiện. Quản trị viên chỉ định đặc quyền cho tài khoản người dùng và nhóm. Mỗi đặc quyền của người dùng bao gồm những đặc quyền được cấp cho người dùng và cho các nhóm mà người dùng thuộc về.

Hiện tại có 35 đặc quyền. Một số trong những điều thú vị hơn là:

  • SeSystemtimePriv đặc quyền : Cần thiết để sửa đổi thời gian hệ thống.
  • SeTimeZonePriv đặc quyền : Cần thiết để điều chỉnh múi giờ liên quan đến đồng hồ bên trong của máy tính
  • SeBackupPriv đặc quyền: Đặc quyền này khiến hệ thống cấp tất cả quyền kiểm soát truy cập đọc cho bất kỳ tệp nào, bất kể danh sách kiểm soát truy cập (ACL) được chỉ định cho tệp.
  • SeCreatePagefilePriv đặc biệt : Cần thiết để tạo tệp hoán trang.
  • SeRemoteShutdownPriv đặc quyền : Bắt buộc phải tắt hệ thống bằng yêu cầu mạng.
  • SeDebugPriv đặc quyền : Cần thiết để gỡ lỗi và điều chỉnh bộ nhớ của một quá trình thuộc sở hữu của một tài khoản khác.

Nhưng điều tôi quan tâm là:

  • SeShutdownPriv đặc quyền : Cần thiết để tắt hệ thống cục bộ.

Tôi nhận thấy rằng tôi thực sự không đặc quyền này. Từ một dấu nhắc lệnh nâng cao:

>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
   ...

Điều này được xác nhận khi sử dụng Process Explorer để kiểm tra mã thông báo bảo mật của một quy trình nâng cao đang chạy như tôi:

nhập mô tả hình ảnh ở đây

Nhưng tôi có thể tắt hệ thống. Tại sao?

Chính sách nhóm nói rằng tôi nên có nó

Nếu bạn sử dụng trình soạn thảo Chính sách bảo mật cục bộ snapin ( secpol.msc), bạn có thể thấy rằng tôi nên có đặc quyền:

  • secpol.msc

    • Cài đặt hệ thống bảo vệ
    • Chính sách địa phương
    • Chuyển nhượng quyền người dùng
    • Tắt hệ thống

      nhập mô tả hình ảnh ở đây

Các Explaination của đặc ân:

Tắt hệ thống

Cài đặt bảo mật này xác định người dùng nào đã đăng nhập cục bộ vào máy tính có thể tắt hệ điều hành bằng lệnh Shut Down. Việc lạm dụng quyền của người dùng này có thể dẫn đến việc từ chối dịch vụ.

Mặc định trên các máy trạm: Quản trị viên, Toán tử dự phòng, Người dùng.

Mặc định trên Máy chủ: Quản trị viên, Toán tử dự phòng.

Mặc định trên bộ điều khiển miền: Quản trị viên, Toán tử dự phòng, Toán tử máy chủ, Toán tử in.

Tôi là người dùng . Đôi khi tôi là một quản trị viên , và những lúc khác tôi là một NotAdministrator .

Có lẽ câu hỏi là tại sao tôi không có đặc quyền.

Nhưng thực tế là tôi không có đặc quyền; và khi đăng nhập cục bộ tôi có thể tắt hệ thống cục bộ.

Tại sao?


@Mehrdad đã có một câu trả lời hay, rằng anh ấy đã xóa, điều mà tôi nghĩ xứng đáng được chú ý và trả lời câu hỏi độc đáo và ngắn gọn:

Bạn đặc quyền. Nó chỉ bị tắt theo mặc định. Nếu bạn không có đặc quyền thì nó sẽ không được liệt kê .
Lưu ý rằng SE_PRIVILEGE_REMOVEDkhác với thiếu SE_PRIVILEGE_ENABLEDhoặc SE_PRIVILEGE_ENABLED_BY_DEFAULT.

Đọc thưởng


Chính sách nhóm của bạn được xử lý bởi tên miền sẽ ghi đè chính sách nhóm địa phương của bạn. Điều chỉnh các quyền miền thay vì các quyền cục bộ. Khi bạn chạy, "whoami / private:, bạn thuộc nhóm người dùng nào? Nếu tôi hoàn toàn không hiểu bạn đang hỏi gì, hãy chỉnh sửa câu hỏi của bạn, bởi vì tôi chỉ đoán một cách hoang dã những gì bạn đang hỏi.
Ramhound

Tôi đang hỏi tại sao tôi có thể tắt hệ thống khi mã thông báo bảo mật của tôi không có đặc quyền. Cho dù đặc quyền đến từ máy cục bộ hay bộ điều khiển miền: dù bằng cách nào tôi cũng không có nó.
Ian Boyd

Việc rút phích cắm ra xung quanh tất cả các vấn đề đặc quyền ... :) Tất nhiên phụ thuộc vào cách khởi động lại ...
Solar Mike

Câu trả lời:


29

Bạn có quyền, nhưng nó bị vô hiệu hóa . Đó là những gì PowerShell đang nói với bạn.

Để tắt hệ thống bạn sử dụng chức năng Win32API gọi InitiateSystemShutdownhoặc ExitWindowsEx:

ExitWindowsEx(EWX_POWEROFF, 0);

Các chức năng này lưu ý:

Để tắt máy tính cục bộ, sự kêu gọi chủ đề phải có đặc quyền SE_SHUTDOWN_NAME. Theo mặc định, người dùng có thể kích hoạt đặc quyền SE_SHUTDOWN_NAME trên máy tính mà họ đã đăng nhập và quản trị viên có thể kích hoạt đặc quyền SE_REMOTE_SHUTDOWN_NAME trên máy tính từ xa.

Như bạn có thể thấy, Windows kiểm tra các đặc quyền của luồng (bất kỳ luồng nào cũng có mã thông báo với các đặc quyền). Nếu bạn gọi ExitWindowsExmà không có đặc quyền SE_SHUTDOWN_NAME , chức năng sẽ không thành công với lỗi:

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

Chủ đề mà bạn tạo theo mặc định kế thừa đặc quyền của bạn; nhưng một chương trình có thể cho phép một đặc quyền bị vô hiệu hóa mà nó đã được cấp bằng cách sử dụng 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);

Thay đổi đặc quyền trong mã thông báo cho biết:

AdjustTokenPrivileges không thể thêm hoặc xóa đặc quyền khỏi mã thông báo. Nó chỉ có thể kích hoạt các đặc quyền hiện có đang bị vô hiệu hóa hoặc vô hiệu hóa các đặc quyền hiện có đang được kích hoạt


Vậy, tại sao đặc quyền này bị tắt theo mặc định? Để chắc chắn rằng không có chương trình nào có thể tắt Windows một cách tình cờ. Các ứng dụng nên yêu cầu điều này một cách rõ ràng.

Có một cuốn sách cổ nhưng rất hay: https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/ về tất cả những thứ đó.


Tôi thực sự đã mua cuốn sách đó một vài năm trước đây; tôi sẽ phải đọc lại.
Ian Boyd

Nếu bạn biết C, bạn có thể tải xuống cộng đồng VS (miễn phí) và cố gắng tắt PC lập trình mà không có quyền riêng tư. Sau đó, kích hoạt tính năng này theo chương trình và thử lại). Đó là cách tốt nhất để nghiên cứu mọi thứ về Windows :)
user996142

@ user996142 - cái gì, bằng cách tắt nó đi? Đoán bạn đúng. :)
Jules

5

Đó là vì người dùng của bạn thuộc nhóm được bật đặc quyền đó.

Để xem cho chính mình nhóm nào:

  • Mở lời nhắc PowerShell (hoặc Lệnh) với tư cách Quản trị viên.
  • Chạy đi secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG.
  • Xem nội dung của OutFile.cfg trong Notepad hoặc tương tự, và tìm SeShutdownPrivilegemục. Bạn sẽ (nên) thấy một vài / vài SID cho người dùng và / hoặc nhóm đã bật đặc quyền đó.

Vì vậy, tôi có ba SID ngắn được liệt kê. SID ngắn thường là tài khoản / nhóm cấp máy tính. Ví dụ, một trong số đó là S-1-5-32-545.

Sử dụng PowerShell, chúng tôi có thể xác định tài khoản / nhóm mà SID đại diện:

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

Điều này trở lại BUILTIN\Users.

Vì bạn là người dùng trên máy tính đó, bạn sẽ tự động là thành viên của nhóm đó, nghĩa là bạn có thể tắt máy tính.

Hai cái khác tôi có S-1-5-32-544, và S-1-5-32-551. Đây là BUILTIN\Administratorsnhóm tiêu chuẩn , và BUILTIN\Backup Operatorsnhóm. Sắp xếp theo nhóm bạn đang thấy trong secpol.mschộp thoại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.