Como posso desligar o sistema quando não tenho o SeShutdownPrivilege?

20

Os usuários do Windows podem receber várias privilégios

Privileges determine the type of system operations that a user account can perform. An administrator assigns privileges to user and group accounts. Each user's privileges include those granted to the user and to the groups to which the user belongs.

Existem atualmente 35 privilégios. Alguns dos mais interessantes são:

  • SeSystemtimePrivilege : necessário para modificar a hora do sistema.
  • SeTimeZonePrivilege : necessário para ajustar o fuso horário associado ao relógio interno do computador
  • SeBackupPrivilege : Esse privilégio faz com que o sistema conceda todo o controle de acesso de leitura a qualquer arquivo, independentemente da lista de controle de acesso (ACL) especificada para o arquivo.
  • SeCreatePagefilePrivilege : necessário para criar um arquivo de paginação.
  • SeRemoteShutdownPrivilege : necessário para desligar um sistema usando uma solicitação de rede.
  • SeDebugPrivilege : necessário para depurar e ajustar a memória de um processo que pertence a outra conta.

Mas o que me interessa é:

  • SeShutdownPrivilege : necessário para desligar um sistema local.

Percebi que não tenho esse privilégio. De um prompt de comando elevado:

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

Isso é confirmado ao usar o Process Explorer para examinar o token de segurança de um processo elevado em execução como eu:

Eaindaassimeupossodesligarosistema.Porquê?

ADiretivadeGrupodizqueeudeveriater

Sevocêusarosnap-indoeditordePolíticadeSegurançaLocal(secpol.msc),veráquedevoteroprivilégio:

  • secpol.msc

    • Configuraçõesdesegurança
    • Políticaslocais
    • Atribuiçãodedireitosdeusuário
    • Encerreosistema

AExplicaçãodoprivilégio:

Shutdownthesystem

ThissecuritysettingdetermineswhichuserswhoareloggedonlocallytothecomputercanshutdowntheoperatingsystemusingtheShutDowncommand.Misuseofthisuserrightcanresultinadenialofservice.

DefaultonWorkstations:Administrators,BackupOperators,Users.

DefaultonServers:Administrators,BackupOperators.

DefaultonDomaincontrollers:Administrators,BackupOperators,ServerOperators,PrintOperators.

Souumusuário.ÀsvezessouumAdministradoreoutrasvezessouumNotAdministrator.

Talvezaquestãosejaporquenãoeutenhooprivilégio.

Masarealidadeéqueeunãotenhooprivilégio;e,noentanto,quandoconectadolocalmente,possodesligarosistemalocal.

Porquê?

@Mehrdadteveumaboaresposta,queeleexcluiu,oqueeuachoquemereceatençãoerespondeaperguntadeformaagradávelesucinta:

Youhavetheprivilege.It'smerelydisabledbydefault.Ifyoudidn'thavetheprivilegethenitwouldn'tbelistedatall.
Notice that SE_PRIVILEGE_REMOVED is different from lacking SE_PRIVILEGE_ENABLED or SE_PRIVILEGE_ENABLED_BY_DEFAULT.

Leitura de bônus

por Ian Boyd 27.09.2017 / 22:14

2 respostas

29

Você tem a permissão, mas está desativado . Isso é o que o PowerShell está lhe dizendo.

Para o sistema de desligamento, use a função Win32API chamada InitiateSystemShutdown ou ExitWindowsEx :

ExitWindowsEx(EWX_POWEROFF, 0);

Estas funções apontam:

To shut down the local computer, the calling thread must have the SE_SHUTDOWN_NAME privilege. By default, users can enable the SE_SHUTDOWN_NAME privilege on the computer they are logged onto, and administrators can enable the SE_REMOTE_SHUTDOWN_NAME privilege on remote computers.

Como você pode ver, o Windows verifica os privilégios thread (qualquer thread tem um token com privilégios). Se você chamar ExitWindowsEx sem o privilégio SE_SHUTDOWN_NAME , a função falhará com o erro:

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

Os tópicos que você cria por padrão herdam seus privilégios; mas um programa pode ativar um privilégio desativado que foi concedido usando 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);

Alteração de privilégios em um token diz :

AdjustTokenPrivileges cannot add or remove privileges from the token. It can only enable existing privileges that are currently disabled or disable existing privileges that are currently enabled

Então, por que esse privilégio é desativado por padrão? Para se certificar de que nenhum programa pode desligar o Windows por acidente. As aplicações devem pedir isso explicitamente.

Existe um livro antigo, mas muito bom: link sobre todas essas coisas.

    
por 27.09.2017 / 23:05
5

É porque seu usuário pertence a um grupo que tem esse privilégio ativado.

Para ver por si que grupo (s):

  • Abra um prompt do PowerShell (ou Command) como Admin.
  • Executar secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG .
  • Visualize o conteúdo de OutFile.cfg no Bloco de Notas ou semelhante e procure a entrada SeShutdownPrivilege . Você (deverá) ver alguns / alguns SIDs para usuários e / ou grupos que tenham esse privilégio ativado.

Portanto, tenho três SIDs curtos listados. SIDs curtos são geralmente contas / grupos no nível do computador. Por exemplo, um deles é S-1-5-32-545 .

Usando o PowerShell, podemos determinar qual conta / grupo esse SID representa:

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

Isso retorna BUILTIN\Users .

Como você é um usuário nesse computador, você é automaticamente um membro desse grupo, o que significa que você pode desligar o computador.

As outras duas que tenho são S-1-5-32-544 e S-1-5-32-551 . Estes são o grupo BUILTIN\Administrators padrão e o grupo BUILTIN\Backup Operators . Que se alinham com os grupos que você está vendo na caixa de diálogo secpol.msc .

    
por 27.09.2017 / 23:16