[Resumo do administrador] E se o programa quiser direitos de administrador e você não


(c) Vasya Lozhkin.


Infelizmente, no trabalho do administrador do sistema, não, não, e você precisa permitir que os usuários executem qualquer software com direitos de administrador. Na maioria das vezes, esses são alguns programas chineses estranhos para trabalhar com equipamentos. Mas existem outras situações como o notório bnk.exe.


Conceder ao administrador do usuário direitos para resolver o problema de maneira rápida e fácil é contrário aos padrões de segurança da informação. Você pode, é claro, dar a ele um computador separado e colocá-lo em uma rede isolada, mas - é caro e geralmente ...


Vamos tentar tomar decisões que permitirão a execução do programa e não incomodar o agente de segurança com o financiador.


Bem, por que você está certo?


Um programa pode solicitar direitos de administrador condicionalmente em dois casos:


  1. Quando ele quer ter acesso a lugares onde "meros mortais" não podem: por exemplo, criar arquivos nos diretórios do sistema.
  2. Quando o programa foi compilado com a bandeira especial "Exigir direitos de administrador".

Com o primeiro caso, tudo fica claro: pegamos em nossas mãos o maravilhoso programa do Mark Russinovich Process Monitor , olhamos o que está acontecendo e onde o programa está tentando entrar:



Para onde vai esse 7Zip?


E de acordo com os resultados do estudo, concedemos ao usuário direitos para o diretório ou ramo de registro desejado.


É mais difícil se o caso for clínico e não for fácil conceder direitos: por exemplo, um programa requer forte intervenção na operação do sistema, como a instalação de drivers. Então você precisa criar todas as fazendas coletivas, que serão discutidas na última seção do artigo. Por enquanto, abordarei o segundo caso com mais detalhes - quando a caixa de seleção estiver marcada.


Para simplificar bastante, em um manifesto especial do programa (a propósito, os instaladores também são programas), pode haver três opções de inicialização:


  • comoInvoker . O programa começa com os mesmos direitos que o processo que o gerou (como regra, este é o explorer.exe com direitos de usuário);
  • maximumAvailable . O programa solicitará as permissões máximas disponíveis para o usuário (o administrador verá uma janela pedindo para aumentar o UAC, o usuário não fará);
  • requireAdministrator . O programa exigirá direitos de administrador em qualquer caso.

Se o desenvolvedor decidiu firmemente exigir direitos de administrador, mesmo que não sejam necessários, você pode contornar isso com um pouco de sangue.


Não, você não estará certo


No Windows, começando com o Vista, apareceu o serviço UAC, que, entre outras coisas, é responsável por solicitar programas de elevação. Nem todos os programas "digeriram" o trabalho com este serviço. Portanto, o sistema foi aprimorado no mecanismo de compatibilidade de aplicativos, permitindo definir diretamente o comportamento do programa - para solicitar direitos ou não.


A maneira mais fácil de trabalhar com esse mecanismo é usar variáveis ​​de ambiente.


Considere o exemplo do editor de registro. De fato, executando o regedit.exe sob o administrador, recebemos uma solicitação de elevação de direitos:



Solicitar elevação.


Se iniciarmos o editor de registro no console, após alterar o valor da variável de ambiente __COMPAT_LAYER para:


set __COMPAT_LAYER=RUNASINVOKER 

Não haverá solicitação de UAC, nem direitos administrativos para o aplicativo:



Editor de registro privado de direitos.


Isso pode ser usado iniciando programas com arquivos em lotes ou adicionando um menu de contexto através do registro. Leia mais em Como executar o programa sem privilégios de administrador e ignorar o prompt do UAC?


Um exemplo concreto de um programa tão desagradável pode ser encontrado ao baixar classificadores bancários do 1C no site da RBC em http://cbrates.rbc.ru/bnk/bnk.exe . Se a atualização dos classificadores é deixada para os próprios usuários e não há como alterar o download para bnk.zip (e o 1C moderno suporta isso), é necessário criar muletas. Afinal, o bnk.exe é um arquivo de extração automática no qual, por algum motivo, diz "Requer direitos de administrador".


Como os atalhos não funcionam aqui, porque o próprio 1C baixa o arquivo e o lança, você precisará usar artilharia pesada - o Microsoft Application Compatibility Toolkit.


A documentação do software, como de costume, está disponível no site oficial , você pode baixá-lo como parte do Kit de Avaliação e Implantação do Windows . O processo de resolver o problema é simples.


Você precisa instalar o utilitário, executar o Administrador de Compatibilidade e criar Correção de Aplicativo em um banco de dados novo ou existente:



Crie uma correção de aplicativo.


O nome e o editor não importam. Somente a localização do arquivo é importante - aqui você precisa especificar o problema real bnk.exe (onde ele realmente estará - não importa).


Em seguida, selecione RunAsInvoker na lista de correções.



Selecione a correção desejada.


Deixamos o resto por padrão, salve o banco de dados. Deve ser algo como isto:



Correção criada para o bnk.exe.


Depois disso, será suficiente instalar o banco de dados clicando com o botão direito do mouse e selecionando Instalar. Agora, os usuários poderão carregar eles próprios os classificadores bancários.


Fica pior se o aplicativo realmente precisar de direitos de administrador. A adição de direitos aos objetos e correções do sistema não ajuda.


Ok, mantenha-o certo


Parece que a solução mais óbvia para lançar nosso software estranho é usar o utilitário Runas embutido. A documentação está disponível no site da Microsoft .


Bem, vamos ver o que acontece.


Equipa:


 runas /savecred /user: "C:\Program Files\7-Zip\7zFM.exe" 

De fato, o RunAs executará o 7zip com privilégios de administrador, pedirá uma senha e lembrará dela. Em seguida, um atalho com essa linha de inicialização iniciará o 7zip sob o Administrador, sem dúvida.


)


Digite a senha.


Há uma desvantagem significativa: a senha é lembrada no nível do sistema e, agora, usando o comando Runas, você pode iniciar absolutamente qualquer programa. Isso não é diferente da concessão direta de direitos de administrador aos funcionários, portanto você não deve usar esta solução.


Porém, as runas podem ser úteis quando um funcionário conhece a senha do administrador, mas trabalha com uma conta limitada (em princípio, todo administrador de sistema deve fazer isso).

Se começarmos com os comandos do console, passaremos para scripts de nível superior. Uma solução interessante foi proposta no artigo “ Windows de plâncton ”, onde o Runas mencionado acima era vinculado a um script js e passado por um ofuscador. A solução tem um óbvio menos - o script pode ser decodificado.


Um método um pouco mais interessante em 2k20 são os recursos do PowerShell e seu trabalho com senhas. Você pode ler mais no artigo “ Proteção e criptografia de senha nos scripts do PowerShell ”.


Em resumo: no PS, o trabalho com senhas é feito por meio de um tipo de dados SecureString especial e um objeto PSCredential. Por exemplo, você pode inserir a senha interativamente:


 $Cred = Get-Credential 

Em seguida, salve a senha no formato criptografado em um arquivo:


 $Cred.Password | ConvertFrom-SecureString | Set-Content c:\pass.txt 

E agora use este arquivo para trabalho não interativo:


 $username = "Domain\" $pass = Get-Content C:\pass.txt | ConvertTo-SecureString $creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $pass 

Infelizmente, esse arquivo pode ser usado apenas no PC em que foi criado. Para evitar isso, você pode criar uma chave de criptografia separada. Por exemplo, assim:


 $AESKey = New-Object Byte[] 32 [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey) $AESKey | out-file C:\password_aes.key 

Agora, usando esta chave, a senha pode ser criptografada:


 $Cred.Password| ConvertFrom-SecureString -Key (get-content C:\password_aes.key )| Set-Content C:\pass.txt 

E descriptografar:


 $pass = Get-Content C:\pass.txt | ConvertTo-SecureString -Key (get-content C:\password_aes.key) 

Infelizmente, as coisas são tão tristes com a segurança: não é difícil remover uma senha se você tiver acesso a um arquivo com uma chave de criptografia e uma senha criptografada. Sim, você pode adicionar ofuscação e compilar o script em .exe junto com os arquivos necessários. Mas você precisa entender que essas são meias medidas.


Ao mesmo tempo, usei meu AutoIt favorito para resolver esses problemas, onde compilei um script com a equipe RunAs e me alegrei ... Até descobrir que o AutoIt (especialmente versões mais antigas) se decompila uma ou duas vezes.

Outra opção interessante pode ser o uso de tarefas atribuídas - se você criar uma tarefa agendada a partir da conta de administrador, o usuário precisará iniciá-la. Infelizmente, esta solução não é adequada para trabalhos interativos com o aplicativo.


No mundo, existem várias soluções de terceiros projetadas para resolver o problema. Vou me debruçar sobre alguns deles.


Talvez uma das utilidades mais famosas seja o AdmiLink , desenvolvido por Alexei Kuryakin para as necessidades da física nuclear. O programa e os princípios de seu trabalho estão descritos no site oficial . Como sempre, permito-me uma breve descrição.


O programa consiste em três módulos. O AdmiLink é uma janela gráfica na qual você pode criar um atalho para o aplicativo desejado (em princípio, em alguns casos, apenas o suficiente).



A janela principal do programa.


Além de criar diretamente um atalho (e sim, a solicitação do UAC também pode ser suprimida), existem funções adicionais como calculadora, terminal e configurações convenientes para políticas de segurança. Com todos os recursos do programa, o leitor é convidado a descobrir por conta própria.


O segundo módulo é chamado AdmiRun e é um utilitário de console. Ela sabe como executar aplicativos em nome do administrador, recebendo como um dos parâmetros uma string criada por meio do AdmiLink. O nome de usuário e a senha são criptografados na linha e o caminho para o programa também está envolvido.


À primeira vista, tudo parece seguro, mas, infelizmente, o código do programa está fechado e quanto você pode confiar no desenvolvedor é uma pergunta.


O terceiro módulo - AdmiLaunch - é responsável pelo lançamento de janelas em modos diferentes e é usado para iniciar o AdmiRun se você criar um atalho através do AdmiLink.


Em geral, a solução foi testada ao longo dos anos e gerações de administradores de sistemas domésticos. Mas vou adicionar uma alternativa do exterior.


RunAsRob é um software bastante interessante, de autoria do desenvolvedor alemão Oliver Hessing. Ao contrário do AdmiLink, o software é instalado como um serviço executado em uma conta privilegiada (administrador ou sistema). Como resultado, o atalho preparado refere-se ao serviço, que já por sua vez inicia o software especificado.


Uma característica do programa é que é possível autorizar não apenas programas, mas também pastas (incluindo pastas de rede). O armazenamento das configurações no registro tornou possível adicionar modelos de diretiva de grupo, aproximadamente como escrevemos no artigo “ Mergulhando em modelos e domando o GPO do Windows ”. Graças a isso, se necessário, as configurações podem ser aplicadas diretamente no Active Directory.



A janela principal do programa.


O programa está amplamente documentado no site oficial .


Este autor também possui um programa RunAsSpc que permite executar arquivos executáveis ​​sob os direitos de outro usuário, transferindo credenciais por meio de um arquivo criptografado.


Só posso acrescentar que este software é gratuito apenas para uso pessoal.


Mas lembre-se de que em um programa executado sob direitos administrativos, você pode fazer mal. Por exemplo, inicie um console de comando privilegiado através da caixa de diálogo Arquivo - Abrir.



Execute o cmd.exe diretamente do editor de registro.


Políticas para proibir o menu de contexto e outros gerenciadores de tarefas, alguns dos quais podem configurar o AdmiLink, ajudarão a se proteger um pouco. Mas, em qualquer caso, você deve ter cuidado.


Você já fez muletas estranhas? Sugiro compartilhar histórias nos comentários.

Source: https://habr.com/ru/post/pt485958/


All Articles