Backup externo seguro, mesmo no caso de acesso root de hackers

24

Estou procurando uma maneira de implementar uma maneira mais segura de fazer um backup externo que também proteja meus dados contra a situação em que um hacker mal-intencionado obteve acesso root ao meu servidor. Embora a chance de que isso aconteça seja menor do que outros tipos de riscos, se a segurança do SSH e da senha estiver configurada corretamente e o sistema for mantido atualizado, a quantidade de dano que pode ser permanentemente causado é realmente alta e, portanto, eu gostaria de encontrar uma solução para limitar isso.

Eu já tentei duas maneiras de backups externos:

  • uma montagem webdav simples gravável em raiz (e configurada no fstab) na qual os dados de backup são copiados. Problema : não é realmente um backup externo porque a conexão - e além disso o acesso - ao local externo é constantemente deixada aberta como uma pasta no sistema de arquivos. Essa é uma proteção suficiente contra muitos tipos de ataques se a montagem tiver privilégios de acesso limitados (acesso somente leitura como root), mas não protege contra uma pessoa mal-intencionada com acesso root.

  • Backup Borg através do SSH com autenticação de chave. Problema : a conexão com esse servidor externo pode ser feita com a chave armazenada no host se o usuário mal-intencionado tiver acesso root ao host.

Como solução, estou pensando nessas possíveis maneiras, mas não sei como e com o que:

  • Os backups só podem ser gravados ou anexados ao destino, mas não excluídos.
  • O uso de software de backup que lida com os backups externos e não oferece suporte à exclusão em massa dos backups externos do primeiro host.

Soluções que não são realmente interessantes na minha situação:

  • Uma tarefa de backup extra no host externo que os transfere para um local que não é acessível pelo primeiro host (devido a limitações técnicas).

Alguém pode dar conselhos sobre como implementar um backup externo adequado para o meu caso?

EarthMind
fonte
7
Primeiro você faz um backup local dentro do servidor. Em seguida, em outro servidor, você fará o download do backup para si mesmo (sem montar diretórios).
TheDESTROS
2
Há 30 ou 40 anos, existiam servidores FTP com um diretório "de entrada" anônimo. Você pode fazer upload de arquivos, mas não substituí-los ou listá-los. Funcionou simplesmente configurando as permissões do diretório de acordo. Então ... raiz local ou não, não há diferença.
Damon
@TheDESTROS Responda em respostas, por favor, não em comentários.
wizzwizz4
Eu não acho que o FTP anônimo deva ser mais usado.
Lucas Ramage

Respostas:

54

Atualmente, todas as suas sugestões têm uma coisa em comum: a fonte de backup faz o backup e tem acesso ao destino do backup. Se você monta o local ou usa ferramentas como SSH ou rsync, o sistema de origem de alguma forma tem acesso ao backup. Portanto, um comprometimento no servidor também pode comprometer seus backups.

E se a solução de backup tiver acesso ao servidor? O sistema de backup pode fazer seu trabalho com acesso somente leitura, portanto, qualquer comprometimento no sistema de backup provavelmente não comprometeria o servidor. Além disso, o sistema de backup pode ser dedicado apenas para esse fim, tornando o conteúdo do backup o único vetor de ataque. Isso seria muito improvável e precisaria de um ataque realmente sofisticado.

Para evitar a substituição dos backups com conteúdo adulterado ou danificado, faça backups incrementais que permitam restaurar qualquer estado anterior dentro do período de restauração definido.

Esa Jokinen
fonte
Algum conselho sobre onde procurar um guia para configurar uma solução de acesso somente leitura?
EarthMind
5
É assim que eu faço o backup das coisas através do ssh: o servidor de backup fará o ssh no servidor para o qual será feito o backup.
Michael Hampton
4
O rsync over ssh também é uma boa opção e permite backups incrementais. O straight scp é mais adequado para backups completos
GoFundMonica - codidact.org
10
+1 - "puxar" em vez de "empurrar"
Criggie
1
É também assim que as soluções de backup como BackupPC ou IBM Tivoli Storage Manager (também conhecido como Spectrum Protect) funcionam.
Dubu 04/06
9

Armazenamento Imutável

Uma boa opção é tornar o armazenamento de backup imutável ou, pelo menos, fornecer versões confiáveis, o que oferece imutabilidade efetiva. Para ser claro: imutável significa incapaz de ser alterado ou permanente.

Existem vários serviços que podem fazer isso por você. AWS S3, BackBlaze B2 e eu suspeito que o Azure e o Google ofereçam um serviço semelhante. Você provavelmente poderia configurar um servidor para fazer isso, mas não sei como.

Quando você possui um repositório imutável / controlado por versão, pode restaurar seu backup para qualquer ponto; portanto, se seu host estiver comprometido, você ainda poderá restaurá-lo a qualquer momento.

* AWS S3 **

Estou mais familiarizado com o AWS S3. O S3 fornece armazenamento criptografado e com versão, com um alto nível de durabilidade.

O S3 suporta versão, o que oferece imutabilidade efetiva. Você pode optar por usar as regras do ciclo de vida para excluir a versão antiga dos arquivos após um período que você pode configurar. Você também pode arquivar versões no armazenamento a frio (arquivo a geleira), que custa cerca de US $ 1 / TB / mês.

Você pode usar a classe de armazenamento em camadas inteligente para reduzir custos. Eu escolhi usar uma regra de ciclo de vida para mover todos os dados estáticos para uma classe de acesso pouco frequente, que é durável e moderada (quente), mas não possui escalabilidade ou desempenho do padrão S3.

O S3 usa usuários e políticas do IAM (gerenciamento de acesso à identidade, ou seja, gerenciamento de usuários). Isso fornece um controle muito granular do que seu software de backup pode fazer com seu armazenamento. Você pode conceder ao usuário de backup permissão para uploads, mas negar a atualização e a exclusão. Você também pode exigir autenticação multifatorial para excluir arquivos ou até mesmo fornecer um bloqueio de objeto para que os arquivos não possam ser excluídos.

Software sugerido

Crio backups incrementais usando o Restic . O Restic carrega os novos arquivos no seu local de armazenamento. Acredito (mas posso estar incorreto) que ele cria novos arquivos, mas, em geral, não atualiza nem exclui nenhum arquivo.

Borg é outra opção. Eu costumava usar o Borg, mas descobri que, com meus backups de tamanho moderado de centenas de MB, ele efetivamente carregava todos os meus dados todos os dias do EC2 para o S3. Para mim, isso não é incremental, então parei de usá-lo. Encontrei documentação sobre isso, mas não tenho o link.

Existem dezenas de softwares que podem ser carregados no armazenamento em nuvem.

Armazenamento Protegido

Com algum software de backup, você pode tentar dar ao usuário do IAM permissão para gravar novos arquivos, mas não atualizar os arquivos existentes. É fácil fazer essa restrição com o AWS IAM, mas conforme o comentário abaixo, o Restic não funcionará com essas permissões. Você também pode ter a autenticação multifator necessária para excluir arquivos do S3.

Você pode ter outro usuário do IAM, executado a partir do seu PC, que faz a limpeza periódica do arquivo morto, descartando versões de acordo com a política que você definir.

Tim
fonte
1
Veja também S3 Object Lock . Ele pode ser configurado de forma que ninguém, nem mesmo o usuário root, possa excluir ou substituir um objeto pelo período definido.
user71659
Suspeito que o bloqueio de objetos possa ser um pouco demais para backups, pois às vezes você deseja excluir arquivos. Ele pode expirar para que você possa excluir os arquivos posteriormente.
Tim
1
O Restic gosta de criar e remover arquivos no diretório "bloqueios" para controlar o acesso exclusivo; portanto, se você tirar a permissão para remover arquivos no back-end, ele será interrompido. Uma solução proposta aqui é usar dois intervalos (um intervalo de leitura / gravação para bloqueios e um intervalo somente de acréscimo para todo o resto). Em seguida, ele usa uma instância tinyproxy local para enviar itens através de uma das duas instâncias do Rclone, dependendo do caminho da solicitação, e cada Rclone envia comandos para o bucket apropriado.
Scott Dudley
8

O Borg Backup suporta repositórios remotos somente anexados . Qualquer comprometimento do backup do servidor pode resultar apenas na criação de novos backups, não substituindo apenas os antigos.

Jacob
fonte
2
Uma coisa que eu não gosto no Borg é que, se o seu backup incremental tiver um tamanho específico, ele fará o upload de todos os backups. Mudei para o Restic porque era ineficiente com a largura de banda. Não sei qual é o limite, mas o suficiente para ser um pouco irritante.
Tim
Então, quem remove os backups antigos desse sistema? Eu tentei apenas adicionar e nunca remover coisas dos discos rígidos uma vez, pois eles ficam rapidamente sem armazenamento.
Mastro
7

Soluções que não são realmente interessantes na minha situação:

Uma tarefa de backup extra no host externo que os transfere para um local que não é acessível pelo primeiro host.

O problema fundamental é que, se você pode acessar remotamente seus backups , o hacker também pode .

(Devido a limitações técnicas)

Limitações técnicas são feitas para serem superadas.

Alguém pode dar conselhos sobre como implementar um backup externo adequado para o meu caso?

As unidades de fita fornecem proteção externa segura contra todos os tipos de desastres - incluindo hackers - há quase 70 anos.

RonJohn
fonte
1
Não entendo por que essa resposta não está acima. A melhor maneira de impedir ataques online é colocá-los offline. A fita é simples e comprovada.
Greg
@Greg Não é uma solução para todos, como no meu caso, devido às limitações do serviço que estou usando, que permite apenas conexões webdav, Borg, SMB e NFS. Além disso, é uma solução muito cara (em comparação com alternativas decentes) e não é interessante em todos os casos. Não estou me vendo fazer backup dos meus € 10 / m VPS com uma solução de backup offline cara. Se os dados desaparecerem, não é o fim do mundo para mim. É bom ver recomendações de diferentes faixas de preço aqui, mas essas soluções são as menos interessantes para o meu caso de uso.
EarthMind
Este. Faça backup na mídia física e gire a mídia física em um local externo seguro, idealmente com um perfil de risco diferente para desastres naturais.
arp
O @asp dois dos meus administradores de sistemas (eu sou um DBA) mantinha as fitas nos porta-malas dos carros ... Um deles estava atrasado para trabalhar no WTC em 11 de setembro (esses sistemas estavam em controladores de domínio diferentes), assim por diante 9 / 12 ou 9/13 (eu esqueço qual) ele dirigiu até o CD de backup com suas fitas de uma semana.
RonJohn
3

Você pode usar serviços de armazenamento como o AWS S3 (ou provavelmente o equivalente do Google ou do Azure), onde você pode conceder permissões PUT à sua conta raiz ao seu bucket, mas não as permissões DELETE. Dessa forma, você pode usar um modelo de envio e o invasor não poderá excluir o backup.

Existem outras medidas de segurança que você pode adotar com a AWS, como exigir que o MFA execute DELETEs no bucket, mas permita PUTs e GETs sem o MFA. Dessa forma, você pode fazer backup dos dados e recuperá-los para restaurar seus serviços sem usar o dispositivo MFA, o que pode ser útil em casos extremos (e provavelmente muito obscuros para mencionar) em que o acesso ao dispositivo MFA pode comprometer.

Além disso, um comentário fora do escopo que você pode achar interessante / útil, existem várias maneiras de configurar o S3 e serviços semelhantes para failover automático, caso a fonte de dados principal esteja offline.

Blueriver
fonte
1
Eu recomendo a criação de um cliente "push" dedicado com acesso de gravação e sem exclusão no IAM. Além disso, ative o controle de versão no bucket, para que versões anteriores ainda estejam disponíveis. Como uma economia de custos, "aposente" as versões antigas no Glacier.
Criggie
3

Backup Borg através do SSH com autenticação de chave. Problema: a conexão com esse servidor externo pode ser feita com a chave armazenada no host se o usuário mal-intencionado tiver acesso root ao host.

Você pode usar o comando option em suas teclas_estabelecidas. Você corrige o comando permitido no controle remoto.

como adicionar comandos no ssh allowed_keys

Mesmo se um invasor recuperar a raiz de login, ele não poderá fazer nada além do comando definido.

Snorky
fonte
1

Uma técnica que você pode configurar é usar a sincronização entre o servidor e um servidor de backup remoto e permitir que o servidor de backup remoto faça instantâneos ou qualquer outra coisa para que o apagamento do lado do servidor não resulte em apagamento externo.

John
fonte