Considerações sobre segurança de JEAJEA Security Considerations

Aplica-se a: Windows PowerShell 5.0Applies to: Windows PowerShell 5.0

O JEA ajuda a melhorar a sua situação de segurança, reduzindo o número de administradores permanentes em seus computadores.JEA helps you improve your security posture by reducing the number of permanent administrators on your machines. Ele faz isso criando um novo ponto de entrada para os usuários para gerenciar o sistema (uma configuração de sessão do PowerShell) que é rigidamente bloqueada por padrão para evitar o uso indevido.It does so by creating a new entry point for users to manage the system (a PowerShell session configuration) which is tightly locked down by default to prevent misuse. Usuários que precisam de algum acesso ao computador, mas não um acesso ilimitado, para realizar tarefas administrativas, podem ter acesso concedido ao ponto de extremidade JEA.Users who need some, but not unlimited, access to the machine to perform administrative tasks can be granted access to the JEA endpoint. Como o JEA permite a execução de comandos de administrador sem ter diretamente o acesso de administrador, você então pode remover esses usuários de grupos de segurança altamente privilegiados (torná-los usuários padrão).Because JEA allows them to run admin commands without directly having admin access, you can then remove those users from highly privileged security groups (make them standard users).

Este tópico descreve o modelo de segurança JEA e as práticas recomendadas mais detalhadamente.This topic describes the JEA security model and best practices in more detail.

Conta Executar comoRun As account

Cada ponto de extremidade JEA tem uma conta "Run As" designada, que é a conta na qual são executadas as ações do usuário que está se conectando.Each JEA endpoint has a designated "run as" account, which is the account under which the connecting user's actions are performed. Essa conta é configurável no arquivo de configuração de sessão e a conta que você escolher tem uma influência significativa sobre a segurança de seu ponto de extremidade.This account is configurable in the session configuration file, and the account you choose has a significant bearing on the security of your endpoint.

As contas virtuais são a maneira recomendada de se configurar a conta Run As.Virtual accounts are the recommended way of configuring the run as account. As contas virtuais são avulsas, temporárias e locais que são criadas para o usuário que está se conectando para ser usada durante a duração de sua sessão JEA.Virtual accounts are one-time, temporary local accounts that are created for the connecting user to use during the duration of their JEA session. Assim que a sessão é encerrada, a conta virtual será destruída e não poderá mais ser usada.As soon as their session is terminated, the virtual account will be destroyed and cannot be used anymore. O usuário que está se conectando não conhece as credenciais da conta virtual e não pode usar a conta virtual para acessar o sistema por outros meios, como Área de Trabalho Remota ou um ponto de extremidade irrestrito do PowerShell.The connecting user does not know the credentials for the virtual account and cannot use the virtual account to access the system via other means, such as Remote Desktop or an unconstrained PowerShell endpoint.

Por padrão, as contas virtuais pertencem ao grupo local de administradores no computador.By default, virtual accounts belong to the local administrators group on the machine. Isso dá a eles direitos totais para gerenciar qualquer coisa no sistema, mas não dá direito para gerenciar recursos na rede.This gives them full rights to manage anything on the system, but no rights to manage resources on the network. Durante a autenticação em outros computadores, o contexto do usuário será aquele da conta de computador local e não da conta virtual.When authenticating with other machines, the user context will be that of the local computer account, not the virtual account.

Os controladores de domínio são um caso especial, uma vez que não há um conceito de grupo de administradores locais.Domain controllers are a special case since there is no concept of a local administrators group. Em vez disso, as contas virtuais pertencem a Administradores de Domínio e podem gerenciar os serviços de diretório no controlador de domínio.Instead, virtual accounts belong to Domain Admins instead and can manage the directory services on the domain controller. A identidade do domínio ainda é restrita para uso no controlador de domínio onde a sessão da JEA foi instanciada e qualquer acesso à rede parecerá vir do objeto do computador controlador do domínio.The domain identity is still restricted to use on the domain controller where the JEA session was instantiated, and any network access will appear to come from the domain controller computer object instead.

Em ambos os casos, você pode definir explicitamente a quais grupos de segurança a conta virtual deve pertencer.In both cases, you can also explicitly define which security groups the virtual account should belong to. Essa é uma boa prática quando você executa uma tarefa que pode ser feita sem privilégios de administrador local ou de domínio.This is a good practice when the task you are performing can be done without local/domain admin privileges. Se você já tiver um grupo de segurança definido para seus administradores, você poderá simplesmente conceder a associação de conta virtual a esse grupo para dar a ele as permissões necessárias.If you already have a security group defined for your admins, you can simply grant the virtual account membership to that group to give it the permissions it needs. A associação de grupo de conta virtual é limitada a grupos de segurança local na estação de trabalho e servidores membro, mas em um controlador de domínio, eles só podem ser membros de grupos de segurança de domínio.Virtual account group membership is limited to local security groups on workstation and member servers, but on a domain controller they can only be members of domain security groups. Depois de especificar um ou mais grupos de segurança para a conta virtual pertencer, ela não pertencerá mais aos grupos padrão (administrador local ou administrador de domínio).Once you specify one or more security groups for the virtual account to belong to, it will no longer belong to the default groups (local admin or domain admin).

A tabela a seguir resume as opções de configuração possíveis e as permissões resultantes para as contas virtuaisThe table below summarizes the possible configuration options and resulting permissions for virtual accounts

Tipo de ComputadorComputer type Configuração do grupo de conta virtualVirtual account group configuration Contexto de usuário localLocal user context Contexto de usuário de redeNetwork user context
Controlador de domínioDomain controller PadrãoDefault Usuário do domínio, membro de 'DOMÍNIO\Administradores de Domínio'Domain user, member of 'DOMAIN\Domain Admins' Conta de ComputadorComputer account
Controlador de domínioDomain controller Grupos de domínio A e BDomain groups A and B Usuário do domínio, membro de 'DOMÍNIO\A', 'DOMÍNIO\B'Domain user, member of 'DOMAIN\A', 'DOMAIN\B' Conta de ComputadorComputer account
Estação de trabalho ou servidor membroMember server or workstation PadrãoDefault Usuário local, membro de 'BUILTIN\Administradores'Local user, member of 'BUILTIN\Administrators' Conta de ComputadorComputer account
Estação de trabalho ou servidor membroMember server or workstation Grupos locais C e DLocal groups C and D Usuário local, membro de 'COMPUTADOR\C' e 'COMPUTADOR\D'Local user, member of 'COMPUTER\C' and 'COMPUTER\D' Conta de ComputadorComputer account

Quando você examinar os eventos de auditoria de segurança e logs de eventos do aplicativo, verá que cada sessão de usuário JEA tem uma conta virtual exclusiva.When you look at security audit events and application event logs, you will see that each JEA user session has a unique virtual account. Isso ajuda você a rastrear ações de usuário em um ponto de extremidade JEA até o usuário original que executou o comando.This helps you track user actions in a JEA endpoint back to the original user who ran the command. Os nomes de conta virtual seguem o formato "WinRM Virtual Users\WinRM_VA_ACCOUNTNUMBER_DOMAIN_sAMAccountName", por exemplo, se o usuário "Alice" no domínio "Contoso" reinicia um serviço em um ponto de extremidade JEA, o nome de usuário associado a qualquer evento do Gerenciador de Controle de Serviço seria "WinRM Virtual Users\WinRM_VA_1_contoso_alice".Virtual account names follow the format "WinRM Virtual Users\WinRM_VA_ACCOUNTNUMBER_DOMAIN_sAMAccountName" For example, if user "Alice" in domain "Contoso" restarts a service in a JEA endpoint, the username associated with any service control manager events would be "WinRM Virtual Users\WinRM_VA_1_contoso_alice".

As gMSAs (contas de serviço gerenciado de grupo) são úteis quando um servidor membro necessita ter acesso aos recursos de rede na sessão JEA.Group managed service accounts (gMSAs) are useful when a member server needs to have access to network resources in the JEA session. Um exemplo de uso é um ponto de extremidade JEA que é usado para controlar o acesso a uma API REST hospedada em um computador diferente.An example use case for this is a JEA endpoint that is used to control access to a REST API hosted on a different machine. É fácil escrever funções para fazer as invocações desejadas na API REST, mas para autenticar na API, é necessário uma identidade de rede.It is easy to write functions to make the desired invocations on the REST API, but in order to authenticate with the API you need a network identity. A utilização de uma conta de serviço gerenciado de grupo possibilita o "segundo salto", sem perder o controle sobre quais computadores podem usar a conta.Using a group managed service account makes the "second hop" possible while still having control over which computers can use the account. As permissões efetivas da gMSA são definidas pelos grupos de segurança (local ou de domínio) ao qual a conta gMSA pertence.The effective permissions of the gMSA are defined by the security groups (local or domain) to which the gMSA account belongs.

Quando um ponto de extremidade JEA é configurado para usar uma conta gMSA, as ações de todos os usuários JEA parecerão vir da mesma conta de serviço gerenciado de grupo.When a JEA endpoint is configured to use a gMSA account, the actions of all JEA users will appear to come from the same group managed service account. A única maneira de rastrear ações até um usuário específico é identificar o conjunto de comandos executados em uma transcrição de sessão do PowerShell.The only way you can trace actions back to a specific user is to identify the set of commands run in a PowerShell session transcript.

As credenciais pass-thru são usadas quando você não especifica uma conta Run As e deseja que o PowerShell use a credencial dos usuários que estão se conectando para executar comandos no servidor remoto.Pass-thru credentials are used when you do not speicfy a run as account and want PowerShell to use the connecting user's credential to run commands on the remote server. Essa configuração não é recomendada para o JEA, pois exigiria conceder ao usuário que está se conectando o acesso direto aos grupos de gerenciamento privilegiado.This configuration is not recommended for JEA as it would require you to grant the connecting user direct access to privileged management groups. Se o usuário que estiver se conectando já tiver privilégios de administrador, poderá evitar totalmente o JEA e gerenciar o sistema por outros meios irrestritos.If the connecting user already has admin privileges, they can avoid JEA altogether and manage the system via other, unconstrained means. Consulte a seção abaixo sobre como o JEA não protege contra administradores para obter mais informações.See the section below on how JEA does not protect against admins for more information.

As contas Run As padrão permitem especificar qualquer conta de usuário que executará toda a sessão do PowerShell.Standard run as accounts allow you to specify any user account under which the entire PowerShell session will run. Essa é uma distinção importante, porque uma configuração de sessão definida para usar uma conta Run As fixa (com o parâmetro -RunAsCredential) não reconhece o JEA.This is an important distinction, because a session configuration set to use a fixed run as account (with the -RunAsCredential parameter) is not JEA-aware. Isso significa que as definições de função deixarão de funcionar conforme o esperado e todos os usuários autorizados a acessar o ponto de extremidade terão a mesma função atribuída.That means that role definitions no longer function as expected, and every user authorized to access the endpoint will be assigned the same role.

Você não deve usar um RunAsCredential em um ponto de extremidade JEA devido a dificuldade no rastreamento de ações até usuários específicos e devido à falta de suporte para mapeamento de usuários às funções.You should not use a RunAsCredential on a JEA endpoint because of the difficulty in tracing actions back to specific users and the lack of support for mapping users to roles.

ACL do Ponto de Extremidade do WinRMWinRM Endpoint ACL

Assim como acontece com pontos de extremidade regulares de comunicação remota do PowerShell, cada ponto de extremidade JEA tem uma ACL (lista de controle de acesso) separada definida na configuração do WinRM que controla quem pode autenticar no ponto de extremidade JEA.As with regular PowerShell remoting endpoints, each JEA endpoint has a separate access control list (ACL) set in the WinRM configuration that controls who can authenticate with the JEA endpoint. Se for configurada incorretamente, usuários confiáveis poderão não acessar o ponto de extremidade JEA e/ou usuários não confiáveis poderão acessar.If improperly configured, trusted users may not be able to access the JEA endpoint and/or untrusted users may gain access. No entanto, a ACL do WinRM não afeta o mapeamento de usuários às funções JEA.The WinRM ACL does not, however, affect the mapping of users to JEA roles. Este é controlado pelo campo RoleDefinitions no arquivo de configuração de sessão que foi registrado no sistema.That is controlled by the RoleDefinitions field in the session configuration file that was registered on the system.

Por padrão, quando você registra um ponto de extremidade JEA usando um arquivo de configuração de sessão e um ou mais recursos de função, a ACL do WinRM será configurada para permitir que todos os usuários com mapeamento para uma ou mais funções acessem o ponto de extremidade.By default, when you register a JEA endpoint using a session configuration file and one or more role capabilities, the WinRM ACL will be configured to allow all users mapping to one or more roles access to the endpoint. Por exemplo, uma sessão JEA configurada com o uso dos comandos a seguir, concede acesso total a CONTOSO\JEA_Lev1 e CONTOSO\JEA_Lev2.For example, a JEA session configured using the following commands will grant full access to CONTOSO\JEA_Lev1 and CONTOSO\JEA_Lev2.

$roles = @{ 'CONTOSO\JEA_Lev1' = 'Lev1Role'; 'CONTOSO\JEA_Lev2' = 'Lev2Role' }
New-PSSessionConfigurationFile -Path '.\jea.pssc' -SessionType RestrictedRemoteServer -RoleDefinitions $roles -RunAsVirtualAccount
Register-PSSessionConfiguration -Path '.\jea.pssc' -Name 'MyJEAEndpoint'

Você pode auditar as permissões de usuário com o cmdlet Get-PSSessionConfiguration.You can audit user permissions with the Get-PSSessionConfiguration cmdlet.

PS C:\> Get-PSSessionConfiguration -Name 'MyJEAEndpoint' | Select-Object Permission

Permission
----------
CONTOSO\JEA_Lev1 AccessAllowed
CONTOSO\JEA_Lev2 AccessAllowed

Para alterar quais usuários têm acesso, execute Set-PSSessionConfiguration -Name 'MyJEAEndpoint' -ShowSecurityDescriptorUI para um prompt interativo ou Set-PSSessionConfiguration -Name 'MyJEAEndpoint' -SecurityDescriptorSddl <SDDL string> para atualizar as permissões.To change which users have access, run either Set-PSSessionConfiguration -Name 'MyJEAEndpoint' -ShowSecurityDescriptorUI for an interactive prompt or Set-PSSessionConfiguration -Name 'MyJEAEndpoint' -SecurityDescriptorSddl <SDDL string> to update the permissions. Os usuários precisam, pelo menos, de direitos de Invocar para acessar o ponto de extremidade JEA.Users need at least Invoke rights to access the JEA endpoint.

Se usuários adicionais tiverem permissão para acessar o ponto de extremidade JEA, mas não se encaixarem em nenhuma das funções definidas no arquivo de configuração de sessão, eles poderão iniciar uma sessão JEA, mas terão acesso somente aos cmdlets padrão.If additional users are granted access to the JEA endpoint but do not fall into any of the roles defined in the session configuration file, they will be able to start a JEA session but only have access to the default cmdlets. Você pode auditar as permissões de usuário em um ponto de extremidade JEA executando o Get-PSSessionCapability.You can audit user permissions in a JEA endpoint by running Get-PSSessionCapability. Confira o artigo Auditoria e relatórios no JEA para obter mais informações sobre a auditoria de quais comandos um usuário tem acesso em um ponto de extremidade JEA.Check out the Auditing and Reporting on JEA article for more information about auditing which commands a user has access to in a JEA endpoint.

Funções de privilégio mínimoLeast privilege roles

Durante a criação de funções JEA, é importante lembrar que a conta virtual ou a conta de serviço gerenciado de grupo em execução em segundo plano geralmente tem acesso irrestrito para gerenciar o computador local.When designing JEA roles, it is important to remember that the virtual or group managed service account running behind the scenes often has unrestricted access to manage the local machine. Os recursos de função do JEA ajudam a restringir o uso que pode ser feito por essa conta, limitando os comandos e os aplicativos que podem ser executados usando o contexto privilegiado.JEA role capabilities help restrict what that account can be used for by limiting the commands and applications that can be run using that privileged context. Funções desenvolvidas de modo inadequado podem permitir a execução de comandos perigosos que podem permitir que um usuário ultrapasse os limites do JEA ou obtenha acesso a informações confidenciais.Improperly designed roles can allow dangerous commands to run that may allow a user to break out of the JEA boundaries or obtain access to sensitive information.

Por exemplo, considere a seguinte entrada de capacidade de função:For example, consider the following role capability entry:

@{
    VisibleCmdlets = 'Microsoft.PowerShell.Management\*-Process'
}

Essa capacidade de função permite que os usuários executem qualquer cmdlet do PowerShell com o substantivo "Processo" do módulo Microsoft.PowerShell.Management.This role capability allows users to run any PowerShell cmdlet with the noun "Process" from the Microsoft.PowerShell.Management module. Os usuários podem precisar acessar cmdlets como o Get-Process para entender quais aplicativos estão sendo executados no sistema e o Stop-Process para eliminar qualquer aplicativo pendente.Users may need to access cmdlets like Get-Process to understand what applications are running on the system and Stop-Process to kill any hung applications. No entanto, essa entrada também permite o Start-Process, que pode ser usado para iniciar um programa arbitrário com permissões de administrador completas.However, this entry also allows Start-Process, which can be used to start up an arbitrary program with full administrator permissions. O programa não precisa ser instalado localmente no sistema, portanto um adversário pode simplesmente iniciar um programa em um compartilhamento de arquivo que concede privilégios de administrador local ao usuário que está se conectando, pode executar um malware e muito mais.'The program doesn't need to be installed locally on the system, so an adversary could simply start a program on a file share that gives the connecting user local admin privileges, runs malware, and more.'

Uma versão muito mais segura desse mesma capacidade de função seria:A more secure version of this same role capability would look like:

@{
    VisibleCmdlets = 'Microsoft.PowerShell.Management\Get-Process', 'Microsoft.PowerShell.Management\Stop-Process'
}

Evite usar curingas em recursos de função e não se esqueça de auditar as permissões efetivas de usuário regularmente para entender a quais comandos um usuário tem acesso.Avoid using wildcards in role capabilities, and be sure to audit effective user permissions regularly to understand which commands a user has access to.

O JEA não protege contra administradoresJEA does not protect against admins

Um aos princípios básicos do JEA é que ele permite que não administradores executem algumas tarefas de administração.One of the core principles of JEA is that it allows non-admins to perform some admin tasks. O JEA não protege contra aqueles que já têm privilégios de administrador.JEA does not protect against those who already have administrator privileges. Os usuários que pertencem a "administradores do domínio", "administradores local" ou outros grupos altamente privilegiados no seu ambiente ainda poderão contornar as proteções do JEA, conectando-se ao computador por outras formas.Users who belong "domain admins," "local admins," or other highly privileged groups in your environment will still be able to get around JEA's protections by signing into the machine via another means. Eles poderiam, por exemplo, entrar com o RDP, usar os consoles remotos do MMC ou conectar-se aos pontos de extremidade irrestritos do PowerShell.They could, for example, sign in with RDP, use remote MMC consoles, or connect to unconstrained PowerShell endpoints. Os administradores locais no sistema também podem modificar as configurações de JEA para permitir que usuários adicionais gerenciem o sistema ou alterem uma capacidade de função para estender o escopo do que um usuário pode fazer em sua sessão JEA.Local admins on the system can also modify JEA configurations to allow additional users to manage the system or change a role capability to extend the scope of what a user can do in their JEA session. Portanto, é importante avaliar as permissões estendidas dos usuários de JEA para ver se existem outras maneiras pelas quais eles poderiam obter acesso privilegiado ao sistema.It is therefore important to evaluate your JEA users' extended permissions to see if there are other ways they could gain privileged access to the system.

Uma prática comum é usar o JEA para a manutenção de rotina e usar uma solução de gerenciamento de acesso privilegiado "just in time" que permita que os usuários sejam temporariamente administradores locais em situações de emergência.A common practice is to use JEA for regular day-to-day maintenance and have a "just in time" privileged access management solution allow users to temporarily become local admins in emergency situations. Isso ajuda a garantir que os usuários não sejam administradores permanentes no sistema, mas possam obter esses direitos se e somente quando concluírem um fluxo de trabalho que documente o uso dessas permissões.This helps ensure users are not permanent admins on the system, but can get those rights if, and only when, they complete a workflow that documents their use of those permissions.