Nenhum banco de dados central

31

Eu tenho um cliente que deseja obter um site / aplicativos móveis / aplicativos de desktop criados para lidar com dados muito sensíveis (mais sensíveis que os detalhes do banco / cartão). Devido à natureza sensível dos dados, eles não desejam salvá-los em um banco de dados central, mas ainda desejam que seus aplicativos sejam sincronizados (digamos que eu adicione alguns dados ao meu aplicativo móvel, desejo poder ir ao meu aplicativo de desktop e veja os mesmos dados).

Não consigo pensar em uma maneira agradável e confiável de fazer isso e não tenho certeza de que exista alguma. É por isso que estou aqui. Alguém sabe como eu poderia lidar com esses dados?

Uma solução em que eu estava pensando era ter um banco de dados do lado do cliente em cada aplicativo que, de alguma forma, fosse sincronizado entre os aplicativos; posso ver isso sendo pouco confiável e ficando confuso.

user2424495
fonte
2
Se você deseja que os dados sejam sincronizados, eles ainda precisam estar acessíveis em algum lugar, para que os dados possam ser inseridos no seu aplicativo. Você pode dividir os dados entre mais bancos de dados; assim, se um deles for violado de alguma forma, você não vazará todos os seus dados. Se isso satisfizer o cliente, basta adicionar mais conexões de banco de dados ao seu aplicativo e extrair seus dados deles.
20915 Andy
2
Esse é um problema ponto a ponto? ou apenas 1 desktop falando com 1 smartphone (para cada espaço de dados)?
Ebyrob
7
Você pode garantir a confidencialidade no banco de dados, criptografando os dados no servidor com uma chave conhecida apenas pelo usuário.
Philipp
26
Isso soa como um esquema que alguém que não entende de segurança pensou. Quem criou esse requisito deve formular uma pergunta sobre a segurança de dados no Security.SE .
jpmc26
4
@ user2424495: se os dados precisarem estar disponíveis em um site, eles deverão estar disponíveis de onde o site é veiculado - o que normalmente é um servidor central. Ou você precisará escrever um plug-in do navegador que forneça os dados no lado do cliente.
Bergi

Respostas:

60

Muitas informações confidenciais são armazenadas nos bancos de dados. De fato, um banco de dados central é provavelmente a maneira mais segura de armazenar esses dados. Os bancos de dados corporativos grandes têm toneladas de funcionalidade para realizar tarefas como criptografar informações confidenciais, auditar quem as acessa, limitar ou impedir que pessoas, incluindo DBAs, visualizem os dados, etc. Você pode ter especialistas em segurança profissionais monitorando o ambiente e DBAs profissionais supervisionando backups para que você não perde dados. Certamente seria muito mais fácil comprometer os dados armazenados no dispositivo móvel ou laptop de um usuário aleatório do que penetrar em uma infraestrutura de segurança bem projetada e comprometer um banco de dados central adequado.

Você pode projetar o sistema com um banco de dados central que armazena apenas dados criptografados e armazena a chave privada do usuário no dispositivo do usuário. Dessa forma, mesmo se o banco de dados central estiver completamente comprometido, os dados serão utilizáveis ​​apenas pelo usuário. Obviamente, isso significa que você não poderá restaurar os dados do usuário se eles perderem a chave (digamos que a única cópia estava no telefone e o telefone estava danificado). E se alguém comprometer a chave e, presumivelmente, suas credenciais de logon, poderá ver os dados.

Justin Cave
fonte
24
@ user2424495 - Se o objetivo é a segurança real, os dados armazenados centralmente quase certamente vencem. Do ponto de vista de marketing, pode não ser sua culpa se o telefone de alguém for hackeado. Mas certamente refletirá mal no aplicativo se for divulgado que é relativamente fácil de invadir (já que a maioria dos sistemas das pessoas está muito mal protegida). Prefiro explicar às pessoas que seus dados são armazenados criptografados usando segurança de nível militar do que esperar que eles não me culpem quando o telefone mal protegido é invadido.
Justin Caverna
27
Até agora, esta é a única resposta que realmente aborda a questão e fornece o melhor resultado de segurança possível. Os requisitos que o OP recebeu foram ridículos. Se os dados forem tão sensíveis que a ideia de que os dados estejam disponíveis em uma rede pública seja ofensiva para os usuários, a ideia do aplicativo não será realista. Ponto final. Os dispositivos clientes não são seguros e não podem ser confiáveis.
maple_shaft
2
@mharr Se o banco de dados armazena apenas dados criptografados (criptografados antes de deixar o dispositivo), não importa o que uma ordem judicial diz, ele não pode ser descriptografado fisicamente sem as chaves de criptografia, que somente o usuário possui.
Richard Tingle
9
@RichardTingle <tinfoil> A menos que a agência governamental já tenha quebrado a criptografia. </tinfoil>
Bob
3
Eu nunca disse que o problema não era "interessante", acho as perguntas e respostas até agora muito intrigantes e instigantes. Esse é EXATAMENTE o tipo de pergunta que torna este site ótimo. Estou realmente questionando os requisitos e algumas das suposições que possivelmente estão sendo feitas sobre os dados. Meu senso spidey só grita para mim que esses requisitos e suposições sobre a importância dos dados são as reflexões de uma empresa bloviated e auto adoração que se imagina informados e perspicazes, mas na realidade cont ...
maple_shaft
38

Você precisa fazer backup de algumas etapas e, em consulta com seu cliente, elaborar um modelo de ameaça . (Sim, é um link para um livro de 600 páginas; sim, recomendo seriamente que você leia a coisa toda.)

Um modelo de ameaça começa com perguntas como

  • Por que o aplicativo precisa armazenar esses dados confidenciais em primeiro lugar?
    • Você pode evitar armazená-lo?
    • Pode ser jogado fora depois de um curto período de tempo?
    • Ele realmente precisa estar acessível a mais de um dispositivo?
    • Se ele deve estar acessível em mais de um dispositivo, ele precisa ser armazenado em mais de um dispositivo?
  • Quem são as pessoas que têm permissão para ver os dados confidenciais de cada usuário?
    • Esta lista pode ser reduzida?
  • Quem são as pessoas que podem entrar em contato com os dados confidenciais de cada usuário enquanto tentam fazer seu trabalho, mas não precisam saber disso?
    • Esta lista pode ser reduzida?
    • Os dados podem ficar inacessíveis para eles sem prejudicar sua capacidade de realizar seu trabalho?
    • Se não puder ser inacessível, pode pelo menos tornar-se incompreensível? (É isso que a criptografia faz, em resumo: torna os dados incompreensíveis.)
  • Quem são as pessoas que desejam ver os dados confidenciais, mas não são permitidos?
    • Que oportunidades eles têm para obter os dados?
    • O que eles querem fazer com os dados depois de os terem?
    • Quão bravos eles ficarão se não conseguirem o que querem?
    • Quanto dinheiro, tempo, ciclos de CPU e esforço humano estão dispostos a gastar?
    • Eles se importam se alguém souber que viram os dados?
    • Eles querem acessar dados confidenciais de usuários específicos ou alguém o fará?
    • O que eles já sabem?
    • O que eles já têm acesso?

Depois de saber as respostas para essas perguntas, você estará em um lugar muito melhor para descobrir o que fazer.

Lembre-se de que pode haver mais de uma resposta para cada conjunto de perguntas, especialmente as que lidam com os invasores (as pessoas que desejam os dados confidenciais, mas não têm permissão para obtê-los). Se você não consegue pensar em pelo menos meia dúzia de atacantes arquetípicos diferentes , com diferentes motivações, objetivos e recursos, provavelmente perdeu alguma coisa.

Lembre-se também de que os atacantes que causam mais problemas a você (e / ou ao cliente) têm maior probabilidade de causar um impacto gigantesco na mídia se o ataque for bem-sucedido ou que causam a maior quantidade de dano agregado , provavelmente são não os atacantes que podem causar o maior dano a usuários individuais se o ataque for bem-sucedido. A empresa do seu cliente se preocupa mais com danos agregados, mas os usuários se preocupam mais com danos a si mesmos.

zwol
fonte
4
Isso realmente não tenta responder à pergunta ou refutá-la, mas é realmente uma resposta impressionante para uma pergunta que não foi feita.
maple_shaft
11
@ maple_shaft: Bem, ele responde à pergunta que o OP pretendia fazer. Como a questão pode ser vista como sofrendo do problema XY , essa parece uma boa resposta.
sleske
8

Uma opção para fazer a sincronização seria fazê-lo ponto a ponto. Isso ainda exigirá um servidor central, mas esse servidor não manipulará nenhum dado.

Quando um dispositivo fica on-line, um servidor central recebe uma notificação com o ID do usuário. Quando um segundo dispositivo do mesmo usuário fica on-line, o servidor envia aos dois dispositivos os endereços IP do outro. Os dispositivos podem trocar dados diretamente. Advertência: um dispositivo precisa atuar como servidor, portanto, pelo menos um não pode estar atrás de um roteador NAT.

Não esqueça que você precisará de autenticação e criptografia fortes para o mecanismo de notificação e para a troca ponto a ponto.

Philipp
fonte
1
Soa como um esquema de versionamento também seria necessária para evitar o envio de toda a parte de trás de dados e para cá o tempo todo entre os dois dispositivos ...
ebyrob
A troca de p2p seria uma ótima solução, se não fosse pela necessidade de configuração desnecessária forçando o usuário final, o que, na minha opinião, tornaria o uso do aplicativo menos amigável. Depois, há a questão de saber se o cliente deseja escolher entre a vulnerabilidade de dados e um pouco de confusão ao configurar o aplicativo, o que depende muito de quão exatamente os dados são sensíveis e o quanto os usuários se importam.
20915 Andy
1
@DavidPacker Supondo que você configure e mantenha o primeiro servidor, quais são as etapas adicionais de configuração?
Ebyrob
@ebyrob Posso ser mal interpretado, mas entendo que o servidor fornecido pelo criador do aplicativo não contém nada além do procedimento de sincronização p2p. Mas os dados precisam ser extraídos desse servidor a partir de um dos dispositivos dos clientes - e o cliente precisa tornar a si mesmo, ou seus dados, acessíveis - essa é a configuração da qual estou falando.
21415 Andy
1
@ David, Philipp está sugerindo a troca ponto a ponto dos dados confidenciais, portanto, nenhum envio desses para o servidor central ou mesmo pelo servidor central. O servidor central está lá apenas para facilitar um ponto encontrar outro ponto; então sai do caminho.
quer
5

Faça disso o problema de outra pessoa.

Armazene os dados localmente em cada aplicativo e, em seguida, dê aos usuários a opção de ativar a sincronização usando sua própria conta com um serviço de terceiros (Dropbox, Google Drive, etc.). Além disso, pense em criptografar os dados enviados para o serviço de terceiros (há prós e contras em fazer isso).

Isso dá a aparência de que os usuários possuem seus próprios dados, pois precisam aceitar a sincronização de dados. Torna os aplicativos úteis para pessoas que não desejam que nenhum compartilhamento ocorra. E torna outra pessoa responsável (técnica e potencialmente, legalmente) pelas dores de cabeça contínuas de manter seguros os dados compartilhados.

James Mason
fonte
1

A preocupação do seu cliente parece ser sobre a visibilidade desses dados. a primeira pergunta a fazer ao seu cliente é se os dados foram criptografados, onde podem ser armazenados? Em seguida, pergunte ao seu cliente que tipos de controles de acesso eles desejam antes que os dados possam ser descriptografados e processados ​​- onde a chave de descriptografia pode ser armazenada? é uma chave separada por usuário? etc ...

Se o seu cliente não deseja que os dados sejam armazenados em qualquer lugar, eles desejam que o usuário digite minha mão toda vez?

Michael Shaw
fonte