automatizando com segurança um script que requer uma chave para executar sua tarefa

5

Eu tenho um script que baixa transações bancárias para armazenar em um banco de dados. Para obter essas transações, é necessária uma senha para cada conta. O banco de dados é criptografado e requer uma chave para acessá-lo. Todas essas chaves e senhas são criptografadas e exigem uma chave mestra para serem recuperadas. O script solicita a chave mestra, usa isso para recuperar todas as senhas e chaves necessárias e, em seguida, faz o seu trabalho.

Neste momento, este script está sendo chamado manualmente. Automatizá-lo para executar periodicamente é fácil, exceto para a parte de proteger a chave mestra. Simplesmente armazená-lo em um arquivo em texto simples não parece muito seguro, já que qualquer um que consiga obter acesso de leitura ao arquivo agora tem amplo acesso aberto a muitas informações confidenciais. Armazená-lo de uma maneira que o script o tenha feito (por exemplo, ofuscá-lo em um binário chamado pelo script) também não funcionará, porque então qualquer um que possa executar o script tem um vetor de ataque lá.

Eu li esta pergunta , a resposta parece haver "armazená-lo em um arquivo" com comentários adicionados sugerindo não em texto simples. Mas mesmo que a senha não seja texto puro, ainda parece que temos que comunicar ao script como ler o arquivo de alguma forma, como uma chave de descriptografia ou algo assim, e estamos de volta à estaca zero.

    
por Michael 22.12.2013 / 00:45

3 respostas

2

Veja como acabei resolvendo o problema.

Primeiro, criei um servidor de chaves separado que é iniciado ao mesmo tempo que o servidor principal. Seu único objetivo é distribuir chaves para processos autorizados. Ele faz isso executando um md5sum no binário de chamada, depois vendo quais chaves esse binário tem permissão para acessar. O binário de chamada (neste caso, o script, que foi compilado para um executável) solicita as chaves deste servidor e, em seguida, continua normalmente.

O servidor principal é executado o tempo todo e mantém uma senha de chaveiro em sua própria memória. Na inicialização, ele não tem a senha do conjunto de chaves e, portanto, não pode responder a solicitações de chaves. Portanto, antes de poder fazer isso, é necessário que a senha do conjunto de chaves seja definida. Isso pode ser feito através de uma interface web ou da linha de comando e requer interação do usuário. Isso protege o sistema exigindo que alguém digite fisicamente a senha correta. Isso geralmente só precisa ser feito uma vez por reinicialização, já que o servidor principal nunca termina.

    
por 29.09.2015 / 03:29
2

Coloque suas chaves no ambiente como variáveis de ambiente.

A maneira como sites como Amazon e Herodes recomendam que você armazene informações confidenciais, como chaves e senhas, em variáveis de ambiente.

Coloque a senha em um arquivo de texto legível somente por você

Assumindo que este é um sistema Mac ou Linux:

touch foo.sh

Coloque a exportação no arquivo

nano foo.sh

export SOMESECRET=42

Em seguida, altere as permissões

chmod 700 foo.sh

Em seguida, digite o arquivo

source foo.sh

O segredo só estará disponível nesse shell e nas subchaves

    
por 14.02.2015 / 02:52
0

Armazene no banco de dados. Se você estiver armazenando transações bancárias não criptografadas no banco de dados e alguém tiver acesso ao banco de dados, elas poderão ver as transações bancárias de qualquer maneira, de modo que não precisem da chave mestra.

A menos que a chave mestra faça outras coisas além de apenas acessar os dados ... mas isso seria uma prática de segurança ruim.

    
por 22.12.2013 / 15:38