Usando um serviço VPS, posso evitar que meus dados sejam acessados pelo host VPS?

3

Usando um provedor como a Digital Ocean, se eu armazenar informações privadas / confidenciais no VPS, existe uma maneira de proteger essas informações (impedindo o host VPS de obter acesso) mantendo o acesso SFTP e SSH?

    
por David Alsh 10.09.2017 / 16:14

1 resposta

6

Infelizmente, isso não é possível. Aqui estão algumas breves explicações sobre isso:

  •   

    Mesmo com a criptografia, o provedor pode capturar instantaneamente o estado atual da memória e do disco e clonar uma nova instância para obter o máximo de acesso que você fez. ( fonte )

  •   

    Mesmo se você estiver executando um VPS com sistemas de arquivos criptografados, todos os dados em RAM serão descriptografados, aos quais os administradores de sistema VPS teriam acesso, incluindo a frase secreta de descriptografia. Se você realmente tiver esses rigorosos requisitos de segurança, parece que você precisa executar seus próprios sistemas fisicamente protegidos ou encontrar uma empresa de hospedagem de servidor dedicada especializada nesse tipo de coisa. ( fonte )

  •   

    ... tenha em mente que qualquer pessoa com acesso à imagem VPS pode potencialmente adicionar um bug no seu código para detectar a frase secreta que você usa. ( fonte )

  •   

    [Criptografia] faz algum sentido se você tiver controle sobre o hardware; quando alguém controla o hardware, há pouco sentido, a menos que você confie que o host realmente não quer olhar para ele ... ( fonte )

  •   

    O acesso físico é o acesso root, portanto, se alguém tiver acesso físico ao servidor, independentemente de estar em uma VM ou bare-metal, eles terão acesso root. No caso do KVM, o proprietário do host bare metal pode acessar o convidado. Você pode sempre criptografar os dados, mas isso pode ser de benefício limitado, pois os dados serão descriptografados quando você acessá-los.

         

    O mesmo com a rede. O proprietário da VM pode ver seu tráfego de rede. Novamente, você pode criptografar parte do tráfego (https, ssh, etc). ( fonte )

Aqui está uma solução específica caso você queira apenas armazenar alguns dados confidenciais no seu VPS:

Como criar e usar o diretório criptografado via eCryptfs e montá-lo remotamente

Pré-requisitos

Instale os pacotes ecryptfs-utils e sshfs e reinicie o sistema:

sudo apt update && sudo apt -y install ecryptfs-utils sshfs
sudo apt update && sudo systemctl reboot

Configuração e uso padrão

Abra uma janela de terminal e execute este comando:

ecryptfs-setup-private

Então você será solicitado a:

  • Enter your login passphrase [<user>]: esta senha deve coincidir com a senha do usuário atual e será usada para desbloquear (descriptografar) suas informações criptografadas.

  • Enter your mount passphrase [leave blank ...]: esta frase secreta será usada automaticamente quando seus dados criptografados estiverem sendo montados, mas você precisará deles em caso de uma situação de emergência e deverá recuperar seus dados, portanto, anote-os em um local seguro. / p>

O comando acima irá criar dois diretórios:

  • ~/.Private onde seus dados criptografados serão armazenados.
  • ~/Private em que o diretório ~/.Private será montado como decriptografado.

Embora ~/.Private não esteja montado no diretório ~/Private tenha dois arquivos com instruções.

Quando você fizer login no sistema por meio da senha do usuário ( login passphrase ), o diretório ~/.Private será montado automaticamente em ~/Private e você poderá trabalhar lá. Quando você logout ou exit , o diretório ~/.Private será desmontado. Para conseguir isso manualmente, você pode usar os comandos: ecryptfs-mount-private e ecryptfs-umount-private . Mais sobre essas opções podem ser encontradas no artigo eCryptfs do ArchLinux Wiki . Veja também: como usar o ecryptfs com um diretório aleatório .

Se você autenticar sua conexão SSH / SFTP por senha, o procedimento acima funcionará. Mas se você se autenticar via par de chaves SSH, precisará usar ecryptfs-mount-private para montar ~/.Private . Neste caso, primeiro você precisa do SSH para o sistema e executar ecryptfs-mount-private , então você poderá usar o SFTP para o diretório ~/Private . Você pode adicionar o comando ecryptfs-mount-private à parte inferior de ~/.bashrc para automatizar esse processo:

echo -e "\n# Mount my Private directory\necryptfs-mount-private\n" | tee -a ~/.bashrc

Monte um diretório criptografado remoto e desbloqueie (decifre) localmente

Na máquina remota (VPS) e na máquina local, execute o seguinte comando e insira dados idênticos para login passphrase e mount passphrase em ambas as máquinas:

ecryptfs-setup-private --nopwcheck --noautomount

A opção --nopwcheck permite que você escolha uma senha diferente da senha de login do usuário e a opção --noautomount é autoexplicativa.

Na máquina remota:

  • Execute o comando:

    ecryptfs-mount-private
    

    Observação: Enquanto eu testava essa abordagem, tive que executar o comando acima duas vezes!

  • Crie um conteúdo simples:

    echo "Hello Word!" > ~/Private/hello.txt
    
  • Desmontar ~/.Private :

    ecryptfs-umount-private
    
  • Além disso, você pode remover o diretório ~/.ecryptfs (do VPS), onde seus dados de descriptografia são armazenados.

Na máquina local:

  • Monte a pasta criptografada remota ~/.Private na pasta local ~/.Private via sshfs e masque a propriedade para os arquivos (substitua <user>@<host_name_or_ip> ):

    sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<host_name_or_ip>:.Private ~/.Private
    

    Para desmontar, use o comando: fusermount -u ~/.Private ou sudo umount -l ~/.Private .

  • Em seguida, monte (e descriptografe) o diretório local ~/.Private to ~/Private

    ecryptfs-mount-private
    
  • Verifique se o arquivo hello.txt está lá:

    $ cat ~/Private/hello.txt
    Hello Word!
    
  • Se você tiver um problema com o comando ecryptfs-umount-private ( umount.ecryptfs_private ), poderá desmontar o diretório local ~/Private pelo comando sudo umount -l ~/Private .

  • O eCryptfs tem bugs e, às vezes, ecryptfs-mount-private e ecryptfs-umount-private não funciona corretamente.

  • De acordo com o acima, você pode criar duas funções em ~/.bashrc que automatizarão todo o processo (montar / desmontar) (substituir <user>@<host_name_or_ip> ):

    function ecryptfs-remote-mount {
            sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<host_name_or_ip>:.Private ~/.Private > /dev/null 2>&1
            sudo keyctl clear @u
            sudo ecryptfs-insert-wrapped-passphrase-into-keyring $HOME/.ecryptfs/wrapped-passphrase
            # Attempt to mount, and loop the function unless it is true - due to  CLI usage bug
            ecryptfs-mount-private && echo "Done!" || ecryptfs-remote-mount            
    }
    
    function ecryptfs-remote-umount {
            ecryptfs-umount-private > /dev/null 2>&1 || sudo umount -l $HOME/Private
            fusermount -u $HOME/.Private > /dev/null 2>&1 || sudo umount -l $HOME/.Private
            echo "Done!"
    }
    
    export -f ecryptfs-remote-mount ecryptfs-remote-umount
    

    Então, source ~/.bashrc e você poderá usar ecryptfs-remote-mount e ecryptfs-remote-umount como comandos.

Referências e leitura adicional

por pa4080 11.09.2017 / 11:35