Protege o script do PowerShell de ser aberto, editado ou modificado no Windows

0

Eu tenho o powershell myscript.ps1 abaixo que eu uso para pedir nome de usuário e senha e, dependendo dele, copia um arquivo para um determinado destino. Eu queria deixar esse myscript.ps1 protegido para que ninguém pudesse editá-lo e ver o nome de usuário e senha, e encontrei a solução encontrada aqui que converte o script powershell em um arquivo .exe . Quando executo originalmente o script usando o powershell, o formulário de credenciais abaixo aparece, permitindo que eu digite o nome de usuário e a senha. Mas depois que o .exe é gerado e quando eu executo o formulário de credenciais não aparece mais, em vez disso, o cosole aparece dizendo "Credencial:" Eu não sei por quê? Eu quero que o formulário de credenciais ainda apareça ao executar o exe. Anythoughts por favor?

$credentials = Get-Credential
if ($credentials.Username -eq "user1" -And $credentials.GetNetworkCredential().password -eq "pass1") 
{ Copy-Item "test1.pdf" "\test\test1.pdf"; } 
else 
{ Copy-Item "test2.pdf" "\test\test2.pdf"; }

Saída ao executar o script pelo powershell:

Saídaaoexecutaroarquivoexegerado:

    
por Tak 24.10.2016 / 02:42

2 respostas

1

Mantendo as senhas secretas no código-fonte

Primeiro, tentarei abordar sua pergunta direta:

I wanted to make this myscript.ps1 protected so no one can edit it and see the username and password

Suponho que você não se importa realmente com as pessoas que realmente editam / alteram o script, mas que desejam apenas manter a senha segura. Como Ben disse, transformá-lo em um exe realmente não faz muito para impedir a extração porque você ainda está incorporando a senha nele.

O que você realmente quer é um hash de senha , que é uma função unidirecional que transforma uma senha em um hash que você pode incorporar. Dado apenas o hash, um invasor não pode reverter o processo, mas você pode verificar uma tentativa de senha, codificando a senha inserida e comparando-a com o hash conhecido da senha correta.

Por exemplo, pseudocódigo:

$authorisedHash = 'thehashedpassword';
$password = (Get-Credential).Password;
if ((Get-Hash $password) -eq $authorisedHash)
{
    echo 'Password correct';
}

Em que $authorisedHash é o resultado pré-calculado de (pseudocódigo) Get-Hash que você armazena para comparação posterior.

O ideal seria usar um algoritmo como o Bcrypt ou o PBKDF2, com um alto fator de trabalho (ou seja, diminua a velocidade) para que ataques de força bruta (adivinhando tentando todas as senhas possíveis) demorem demais para serem viáveis.

Por esse método, a única string que você armazena em seu código é a saída original da função " Get-Hash " (pseudocódigo) que você usa, o que dificulta muito se não impossível obter a senha original do seu código-fonte.

Protegendo um arquivo com uma senha

No entanto, enquanto isso mantém a senha em segredo, ela realmente não oferece nenhuma vantagem de segurança. Como Ben disse, não há realmente nada que impeça o usuário de executar manualmente o Copy-Item ou copie o arquivo sozinho com o Windows Explorer.

Para esse tipo de segurança, você precisará usar as Listas de controle de acesso do Windows e uma conta de usuário separada autenticada em outro lugar (por exemplo, por meio de comandos de login / runas do sistema operacional Windows). Você precisa de um serviço ou conta externa para realizar a cópia, porque é necessário garantir que o usuário não tenha acesso direto para ignorar o script.

Se isso não for possível para você (por exemplo, porque você distribui os arquivos junto com o script, mas não é o administrador da máquina), o que você deve fazer é criptografar a Arquivo. Ao criptografar o arquivo com a senha, você garante que o arquivo seja inútil sem a senha (e, portanto, copiar o arquivo é inútil, porque permanece ilegível até ser descriptografado).

Agora, isso pode ser feito por meio do PowerShell, mas há outras maneiras mais fáceis. Um método genérico fácil é armazenar o arquivo em um arquivo criptografado, como ZIP 1 , RAR, 7z, etc., em que o usuário deve fornecer a senha a ser extraída. Como alternativa, os próprios PDFs incluem suporte para criptografia , exigindo uma senha antes de poderem ser lidos.

1 Observe que o suporte de criptografia interno do Windows para ZIP no XP para 7, possivelmente 8 e 10, não suporta AES. Suporta apenas a criptografia ZIP legada insegura. Então, você precisará de ferramentas de terceiros para extrair ou um arquivo de extração automática (exe).

    
por 24.10.2016 / 04:39
0

Se um usuário puder executar um script, ele poderá ler seu conteúdo. (Você só pode executar um script se souber o que é dito; caso contrário, você não saberia o que executar.) Portanto, não é possível ter um usuário simultaneamente capaz de usar seu script e não conseguir ler a senha dele . Você pode incluir a senha como hash criptográfico , mas se esse script for executado como um usuário normal, o usuário pode simplesmente ignorar o script e copiar test1.pdf para o destino sem executar o script.

Em vez disso, você deve aplicar controles de acesso a arquivos aos arquivos / pastas de destino para exigir que a operação privilegiada seja executada como um usuário autenticado. Em seguida, você pode fornecer a credencial fornecida pelo usuário como o parâmetro Start-Job -Credential .

    
por 24.10.2016 / 02:51

Tags