Problemas de segurança relacionados ao armazenamento de segredos em scripts

1

Digamos que você tenha um programa que deseja executar autônomo, como root, que requer um segredo (como uma frase secreta; algo que você não quer que outras pessoas descubram), que pode ser lido de uma variável de ambiente. Uma maneira de realizar isso seria criar um script como o seguinte e executá-lo a partir do crontab do root.

#!/bin/bash
export SECRET='my_secret'
/usr/bin/some_program
export SECRET=

Ok, posso pensar em dois problemas de segurança aqui.

Primeiro, alguém pode encontrar o valor de $SECRET lendo o script. Usar chmod 700 deve cuidar disso.

Segundo, alguém pode usar algo como ps ae enquanto some_program está em execução. No entanto, se o script estiver sendo executado como root, somente root (ou sudoers) poderá ver seu ambiente, certo?

Estou correto em acreditar que o valor de $SECRET só pode ser encontrado por root ou sudoers? Existem outros problemas de segurança?

E, para tornar tudo isso um pouco menos abstrato, isso é o que me fez pensar.

    
por sarnesjo 06.11.2009 / 21:44

2 respostas

0

Este é um script que só será executado em sua própria caixa?

O Linux moderno padroniza as variáveis de ambiente para ficar visível apenas para o usuário root ou para você, mas isso não é portátil. Vários outros sistemas operacionais não podem filtrá-los ou não filtrá-los por padrão.

    
por 10.12.2009 / 10:18
0

Meu primeiro pensamento seria evitar a exportação de frases secretas em todos os momentos.
duplicidade parece ter uma opção ' --use-agent ' que pode ajudar aqui.

If this option is specified, then '--use-agent' is passed to the GnuPG encryption process and it will turn off any passphrase interaction with the user with respect to '--encrypt-key' or '--sign-key'.

Update: Estas são minhas opiniões tendenciosas.

  • Um script não deve fazer com que informações de segurança sejam exportadas para o ambiente
  • Se você não estiver trabalhando com um aplicativo especial (como duplicity ),
    seria mais fácil evitar o problema do meu ponto anterior apenas mudando para o mecanismo baseado no agente do usuário ( ssh tem um por exemplo, e eu esperava duplicity ter um - o que ele fez)
  • as informações de secret são melhores (em um sentido relativo) protegidas com atributos de acesso unix nos dados privados do aplicativo (refiro-me a coisas como .ssh/id_dsa )
por 07.11.2009 / 11:28