Execute scripts sem descriptografá-los [duplicados]

1

Eu tenho um conjunto de scripts (bash, ruby, python) e quero colocar tudo em um contêiner como arquivo para que eu possa implantar esse contêiner em muitos servidores. Esses scripts precisam proteger de acessar outros usuários (raiz incluída). Então, minha ideia era criar um contêiner criptografado com todos os scripts confidenciais e montá-lo na RAM no momento do boothime. Mas depois de montar este contêiner, os arquivos são acessíveis a partir do sistema para todos que têm permissão para isso.

Existe alguma técnica para implantar scripts interpretados (bash, ruby, ...) em um sistema e ninguém pode ver seu conteúdo a qualquer momento? Não quero executar alguns scripts "ofuscantes".

    
por Fu86 28.05.2014 / 15:51

2 respostas

1

Não é possível tornar um programa ilegível do usuário que o está executando. Em particular, o root pode ler todos os arquivos.

O que você está pedindo não faz sentido. Você pode colocar seu contêiner criptografado em uma máquina e seu administrador não poderá lê-lo. Mas se você quiser usar o conteúdo localizado nesse contêiner, precisará descriptografar esse conteúdo e, em seguida, o administrador poderá lê-lo.

Você pode usar permissões de arquivo para proteger arquivos de usuários não-root. A criptografia não é útil para isso: a criptografia é útil apenas para proteger dados quando alguém tem acesso à mídia que contém os dados (por exemplo, para proteger dados armazenados em um disco de alguém que obtém acesso ao disco ou para proteger dados em trânsito de alguém que pode escutar o canal de comunicação).

Se você não quiser que as pessoas copiem o software, não ofereça o software em primeiro lugar. Você pode conseguir que as partes sensíveis do seu software sejam executadas em seus próprios servidores e enviar apenas alguns clientes burros. Se você quiser limitar o número de cópias que seus clientes estão executando, faça isso por meio de um contrato legal.

    
por 29.05.2014 / 04:10
0

Depende do que você quer dizer com ofuscação. Aqui está uma abordagem que permite envolver scripts em programas compiláveis, permitindo que você os transforme em executáveis binários. Escreva um programa em C que se pareça com isto:

#include <stdio.h>
#include <stdlib.h>

    ︙

        FILE    *sh;

        sh = popen("/bin/sh", "w");            // Use "/bin/bash" if you need to,
                                               // or whatever interpreter you need.
        if (sh == (FILE *)NULL) {
                perror("popen");
                exit(1);
        }
        /* Embed your script here. */
        fprintf(sh, "for x in red blue green\n");
        fprintf(sh, "do\n");
        fprintf(sh, "        echo x = \"$x\"\n");
        fprintf(sh, "done\n");
        /* End of your script. */
        fclose(sh);

Se é mais do que apenas algumas linhas, pode ser mais fácil armazená-lo como uma matriz de strings. Então compile este programa.

  • Se você quiser que o programa / script seja executável por usuários não-root, Torne o binário apenas para execução (por exemplo, modo 710 ou 711).
  • Obviamente, o root poderá ler o arquivo independentemente do seu modo. Enquanto o executável binário aparecerá à primeira vista para ser apenas um executável binário, é trivial extrair o texto do script com o comando strings . Você pode atenuar isso um pouco adicionando alguns leve pseudo-criptografia do texto do script no programa C; por exemplo, algo trivial como XOR cada byte com uma constante (idealmente um com o conjunto de bits 0x80). Isso não pode fornecer segurança real; já que o programa deve conter a lógica para "descriptografar" o script, qualquer analista pode fazer a mesma coisa. Isso fornece apenas um pouco de "segurança através da obscuridade".

Nenhuma solução será infalível porque (pelo menos para um script de shell) os usuários poderão ver quais comandos estão sendo executados usando ps em outra janela; mas isso lhes daria apenas vislumbres fragmentados no roteiro.

Claro, se a lógica do seu script é realmente sensível, a resposta real é traduzi-lo em uma linguagem compilável.

(Adaptado de Evitando que os usuários corrompam e usem um script .)

    
por 27.05.2015 / 17:17