Bagaimana saya bisa mematikan sistem ketika saya tidak memiliki SeShutdownPrivilege

20

Pengguna di Windows dapat diberikan berbagai hak istimewa

Hak istimewa menentukan jenis operasi sistem yang dapat dilakukan oleh akun pengguna. Administrator menetapkan hak istimewa untuk akun pengguna dan grup. Setiap hak pengguna termasuk hak yang diberikan kepada pengguna dan grup yang menjadi milik pengguna.

Saat ini ada 35 hak istimewa. Beberapa yang lebih menarik adalah:

  • SeSystemtimePrivilege : Diperlukan untuk mengubah waktu sistem.
  • SeTimeZonePrivilege : Diperlukan untuk menyesuaikan zona waktu yang terkait dengan jam internal komputer
  • SeBackupPrivilege : Hak istimewa ini menyebabkan sistem memberikan semua kontrol akses baca ke file apa pun, apa pun daftar kontrol akses (ACL) yang ditentukan untuk file tersebut.
  • SeCreatePagefilePrivilege : Diperlukan untuk membuat file paging.
  • SeRemoteShutdownPrivilege : Diperlukan untuk mematikan sistem menggunakan permintaan jaringan.
  • SeDebugPrivilege : Diperlukan untuk melakukan debug dan menyesuaikan memori dari proses yang dimiliki oleh akun lain.

Tapi yang saya tertarik adalah:

  • SeShutdownPrivilege : Diperlukan untuk mematikan sistem lokal.

Saya perhatikan bahwa saya sebenarnya tidak memiliki hak istimewa ini. Dari prompt perintah yang ditinggikan:

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

Ini dikonfirmasi ketika menggunakan Process Explorer untuk memeriksa token keamanan dari proses tinggi yang berjalan seperti saya:

masukkan deskripsi gambar di sini

Namun saya dapat mematikan sistem. Mengapa?

Kebijakan Grup mengatakan saya harus memilikinya

Jika Anda menggunakan snapin editor Kebijakan Keamanan Lokal ( secpol.msc), Anda dapat melihat bahwa saya harus memiliki hak istimewa:

  • secpol.msc

    • Pengaturan keamanan
    • Kebijakan Lokal
    • Penugasan Hak Pengguna
    • Matikan sistem

      masukkan deskripsi gambar di sini

The Explaination dari hak istimewa:

Matikan sistem

Pengaturan keamanan ini menentukan pengguna mana yang masuk secara lokal ke komputer yang dapat mematikan sistem operasi menggunakan perintah Shut Down. Penyalahgunaan hak pengguna ini dapat mengakibatkan penolakan layanan.

Default pada Workstation: Administrator, Operator Cadangan, Pengguna.

Default pada Server: Administrator, Operator Cadangan.

Default pada pengontrol Domain: Administrator, Operator Cadangan, Operator Server, Operator Cetak.

Saya seorang pengguna . Terkadang saya seorang Administrator , dan di lain waktu saya seorang Notadministrator .

Mungkin pertanyaannya adalah mengapa saya tidak memiliki hak istimewa.

Tetapi kenyataannya adalah bahwa saya tidak memiliki hak istimewa; namun ketika secara lokal masuk saya dapat mematikan sistem lokal.

Mengapa?


@Mehrdad punya jawaban yang bagus, yang dia hapus, yang menurut saya layak mendapat perhatian dan menjawab pertanyaan dengan baik dan ringkas:

Anda memiliki hak istimewa. Ini hanya dinonaktifkan secara default. Jika Anda tidak memiliki hak istimewa maka itu tidak akan terdaftar sama sekali .
Perhatikan bahwa SE_PRIVILEGE_REMOVEDberbeda dengan kurang SE_PRIVILEGE_ENABLEDatau SE_PRIVILEGE_ENABLED_BY_DEFAULT.

Pembacaan Bonus

Ian Boyd
sumber
Kebijakan grup Anda yang ditangani oleh domain akan menimpa kebijakan grup lokal Anda. Sesuaikan izin domain, bukan izin lokal. Ketika Anda berlari, "whoami / priv :, grup pengguna apa yang Anda ikuti? Jika saya benar-benar tidak mengerti apa yang Anda tanyakan, edit pertanyaan Anda, karena saya hanya menebak-nebak apa yang Anda tanyakan.
Ramhound
Saya bertanya mengapa saya dapat mematikan sistem ketika token keamanan saya tidak memiliki hak istimewa. Apakah hak istimewa itu berasal dari mesin lokal atau pengontrol domain: baik cara saya tidak memilikinya.
Ian Boyd
Melepaskan steker listrik menyiasati semua masalah hak istimewa ... :) Tentu saja tergantung pada bagaimana restart ...
Solar Mike

Jawaban:

29

Anda memiliki izin, tetapi dinonaktifkan . Itulah yang diberitahukan PowerShell kepada Anda.

Untuk mematikan sistem Anda menggunakan fungsi Win32API yang disebut InitiateSystemShutdownatau ExitWindowsEx:

ExitWindowsEx(EWX_POWEROFF, 0);

Fungsi-fungsi ini mencatat:

Untuk mematikan komputer lokal, utas panggilan harus memiliki hak istimewa SE_SHUTDOWN_NAME. Secara default, pengguna dapat mengaktifkan hak istimewa SE_SHUTDOWN_NAME di komputer tempat mereka masuk, dan administrator dapat mengaktifkan hak istimewa SE_REMOTE_SHUTDOWN_NAME di komputer jarak jauh.

Seperti yang Anda lihat, Windows memeriksa hak utas (semua utas memiliki hak istimewa). Jika Anda menelepon ExitWindowsExtanpa hak SE_SHUTDOWN_NAME , fungsinya akan gagal dengan kesalahan:

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

Utas yang Anda buat secara bawaan mewarisi hak istimewa Anda; tetapi suatu program dapat mengaktifkan hak istimewa yang dinonaktifkan yang diberikan dengan menggunakan 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);

Mengubah Keistimewaan dalam Token mengatakan:

AdjustTokenPrivileges tidak dapat menambah atau menghapus hak istimewa dari token. Itu hanya dapat mengaktifkan hak yang ada yang saat ini dinonaktifkan atau menonaktifkan hak yang ada yang saat ini diaktifkan


Jadi, mengapa hak istimewa ini dinonaktifkan secara default? Untuk memastikan bahwa tidak ada program yang dapat mematikan Windows secara tidak sengaja. Aplikasi harus meminta ini secara eksplisit.

Ada buku kuno tetapi sangat bagus: https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/ tentang semua hal itu.

pengguna996142
sumber
Saya sebenarnya membeli buku itu beberapa tahun yang lalu; Saya harus membacanya kembali.
Ian Boyd
Jika Anda tahu C, Anda dapat mengunduh komunitas VS (yang gratis) dan mencoba mematikan PC secara terprogram tanpa privasi. Kemudian, aktifkan privat ini secara terprogram dan coba lagi). Ini adalah cara terbaik untuk mempelajari segala sesuatu tentang Windows :)
user996142
@ user996142 - apa, dengan mematikannya? Kira kamu benar. :)
Jules
5

Itu karena pengguna Anda milik grup yang mengaktifkan hak istimewa itu.

Untuk melihat sendiri grup mana:

  • Buka prompt PowerShell (atau Command) sebagai Admin.
  • Lari secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG.
  • Lihat konten OutFile.cfg di Notepad atau serupa, dan cari SeShutdownPrivilegeentri. Anda akan (harus) melihat beberapa / beberapa SID untuk pengguna dan / atau grup yang memiliki hak istimewa yang diaktifkan.

Jadi saya punya tiga SID pendek yang terdaftar. SID pendek biasanya adalah akun / grup tingkat komputer. Sebagai contoh, salah satunya adalah S-1-5-32-545.

Dengan menggunakan PowerShell kita dapat menentukan akun / grup mana yang diwakili oleh SID:

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

Ini kembali BUILTIN\Users.

Karena Anda adalah pengguna di komputer itu, Anda secara otomatis menjadi anggota grup itu, artinya Anda dapat mematikan komputer.

Dua lainnya yang saya miliki adalah S-1-5-32-544, dan S-1-5-32-551. Ini adalah BUILTIN\Administratorsgrup standar , dan BUILTIN\Backup Operatorsgrup. Yang sejajar dengan grup yang Anda lihat dalam secpol.mscdialog.

Ƭᴇcʜιᴇ007
sumber