Segurança do script bash envolvendo criptografia simétrica gpg

4

Aviso : a mesma vulnerabilidade foi discutida na pergunta , mas a configuração diferente do problema (no meu caso eu não preciso armazenar a frase secreta) permite uma solução diferente ( ie usando descritores de arquivos em vez de salvar a senha em um arquivo, veja resposta da ilkkachu ).

Suponha que eu tenha um arquivo simetricamente criptografado my_file (com gpg 1.x), no qual eu armazeno alguns dados confidenciais, e quero editá-lo usando o seguinte script:

read -e -s -p "Enter passphrase: " my_passphrase
gpg --passphrase $my_passphrase --decrypt $my_file | stream_editing_command | gpg --yes --output $my_file --passphrase $my_passphrase --symmetric
unset my_passphrase

Em que stream_editing_command substitui / acrescenta algo ao fluxo.

Minha pergunta : isso é seguro? A variável $my_passphrase e / ou a saída descriptografada estará visível / acessível de alguma forma? Se não for seguro, como devo modificar o script?

    
por francescop21 17.09.2018 / 11:33

1 resposta

5
gpg --passphrase $my_passphrase 

My question: is this safe? Will the variable $my_passphrase and/or the decrypted output be visible/accessible in some way?

Não, isso não é considerado seguro. A senha será visível na saída de ps , assim como nas linhas de comando de todos os outros processos em execução. Os dados em si não serão visíveis, o canal não está acessível para outros usuários.

A página man de gpg tem isto a dizer sobre --passphrase :

--passphrase string    

Use string as the passphrase. This can only be used if only one passphrase is supplied. Obviously, this is of very questionable security on a multi-user system. Don't use this option if you can avoid it.

Claro, se você não tiver outros usuários no sistema e confiar que nenhum dos seus serviços foram comprometidos, não deverá haver ninguém olhando para a lista de processos.

Mas, em qualquer caso, você poderia usar --passphrase-fd e fazer com que o shell redirecionasse a frase secreta para o programa. Usando aqui-strings:

#!/bin/bash
gpg --passphrase-fd 3 3<<< "$my_passphrase" --decrypt "$my_file" |
    stream_editing_command |
    gpg --yes --output "$my_file" --passphrase-fd 3 3<<< "$my_passphrase" --symmetric

Observe que isso só funciona se o segundo gpg não truncar o arquivo de saída antes de obter a entrada completa. Caso contrário, o primeiro gpg talvez não consiga ler o arquivo antes de ser truncado.

Para evitar o uso da linha de comando, você também pode armazenar a frase secreta em um arquivo e, em seguida, usar --passphrase-file . Mas você precisa ter cuidado ao configurar as permissões de acesso do arquivo, removê-lo posteriormente e escolher um local adequado para que a senha não seja realmente armazenada no armazenamento persistente.

    
por 17.09.2018 / 22:20