Pergunta

Eu estou construindo um sistema que necessidade de recolher alguns dados confidenciais do usuário através da conexão web segura, armazená-lo com segurança no servidor para a descodificação depois automatizado e reutilização. Sistema também deve permitir ao utilizador visualizar uma parte dos dados protegido (por exemplo, *****ze) e / ou mudar completamente por meio de teia. Sistema deverá fornecer nível razoável de segurança.

Eu estava pensando da seguinte infra-estrutura:

App (Web) Server 1

  1. servidor Web com suporte TLS adequada para conexões de web garantidos.

  2. Use algoritmo de chave pública-(por exemplo, RSA) para criptografar dados confidenciais do usuário entrou e enviá-lo para App Server 2 via unidireccional outbound canal seguro (Por exemplo ssh-2) sem armazená-lo em qualquer lugar em qualquer App Servidor 1 ou DB Servidor 1 .

  3. Use user-dependente senha algoritmo de chave simétrica para criptografar uma parte dos dados introduzidos (e.g. últimos letras / dígitos) e loja -lo no DB Servidor 1 para mais tarde recuperação por App Servidor 1 durante sessão de usuário web.

  4. Re-utilização passo 2 para a modificação de dados pelo utilizador por meio da web.

Servidor DB 1

  1. loja unsecured usuário não-sensível dados.
  2. Guarde alguma parte do sensível dados do usuário criptografados no App Servidor 1 (Veja o passo 3 acima)

App Server 2

  1. não sempre enviar qualquer coisa para App Servidor 1 ou DB Servidor 1 .
  2. Receber usuário criptografada sensível dados de App Servidor 1 e armazená-lo em DB Server 2 .
  3. Obter criptografado user dados sensíveis de DB Server 2 de acordo com os horários locais, decifrá-lo usando a chave privada (Veja App Servidor 1 , passo 2) armazenados localmente no App Server 2 com chave de gestão adequada.

DB Server 2

  1. loja criptografados dados confidenciais do usuário (veja App Server 2 , passo 2)

Se um App (Web) Server 1 ou DB Servidor 1 ou ambos estão comprometidos em seguida atacante não será capaz de obter todos os dados sensíveis do usuário (seja criptografado não ou ). Todos atacante terá acesso a chave pública e criptografia algoritmos que são bem conhecidos de qualquer maneira. Atacante vai no entanto ser capaz de modificar web-servidor para obter logados senhas de usuários em texto simples e parte decrypt de dados sensíveis do usuário armazenado no DB Servidor 1 (ver App Servidor 1 , passo 3) que eu don' t considerar como um grande negócio. Atacante será capaz de (via modificação do código) os dados confidenciais do usuário também interceptar entrou pelos usuários via web durante o ataque potencial. Mais tarde eu considero como um risco mais elevado, mas desde que é difícil (é?) Para atacante para modificar o código sem que alguém percebesse que eu acho que não deve se preocupar muito sobre isso.

Se App Server 2 e uma chave privada estão comprometidos em seguida atacante terá acesso a tudo, mas App Server 2 ou DB Server 2 são não web enfrentando por isso não deve ser um problema.

Como seguro é essa arquitetura? É o meu entendimento de como algoritmos de criptografia e protocolos garantidos trabalhar correto?

Obrigado!

Foi útil?

Solução

Eu não acho que eu posso dar uma resposta adequada, porque eu não tenho certeza que o objetivo de seu sistema é clara. Enquanto eu aprecio você obter feedback sobre um projeto, é um pouco difícil sem um propósito.

Gostaria de sugerir-lhe isso, porém:

Fortemente documento e analisar o seu modelo de ameaça primeiro

Você precisa vir para cima com uma lista hard-alinhados fixo de todos os cenários de ataque possíveis. atacantes locais, etc, que você está tentando proteger contra? Você também dizem coisas como 'com chave de gestão adequada'; no entanto, esta é uma das coisas mais difíceis de fazer. Portanto, não apenas assumem você pode obter este direito; totalmente planejar como você vai fazer isso, com específica ligando para que ele irá impedir ataques.

A razão que você precisa fazer um modelo de ameaça, é que você terá que determinar em quais ângulos você estará vulnerável; porque este será o caso.

Além disso, vou sugerem que, embora a teoria é boa; em cripto aplicação também é muito crítico. Não basta assumir que você vai fazer as coisas corretamente, você realmente precisa tomar cuidado quanto ao local onde números aleatórios vêm, e outras coisas que tais.

Eu sei que isto é um pouco vago, mas eu acho que pelo menos chegando com modelo formal e forte ameaça, será muito útil para você.

Outras dicas

Até aí tudo bem. Você está bem em seu caminho para uma arquitetura muito seguro. Há outras preocupações, tais como firewalls, políticas de senha, registro, monitoramento e alerta a considerar, mas tudo o que você descrito até agora é muito sólida. Se os dados forem suficientemente sensíveis, considere uma auditoria de terceira parte de sua segurança.

Eu não recomendo o uso de qualquer forma de chave pública para comunicar a partir de seu servidor web para o seu servidor de aplicativos. Se você controla tanto o sistema apenas um sistema secreto regular de criptografia. Você sabe a identidade do seu servidor de aplicações, mantendo assim a chave seguro não é um problema. Se você precisar alterar ou atualizar a chave secreta apenas fazê-lo manualmente para evitar que vazem através de uma conexão.

O que seria mais cuidadoso sobre é a direção de transferência de dados do seu servidor em sua DMZ, que só deve ser seu servidor web, para aquelas caixas que residem internamente para sua rede. É cada vez mais comum para domínios legítimos de ser comprometida para distribuir malware a usuários que visitam. Isso é ruim, mas se o malware se voltasse no ala à sua rede, em vez de apenas para fora para seus usuários, em seguida, seu negócio seria completamente hosed.

Eu também não vi nada sobre prevenção de injeção de SQL ou endurecimento do sistema / patch para impedir a distribuição de malware. Esta deve ser sua primeira e mais importante consideração. Se a segurança eram importantes para você, então você seria sua arquitetura para ser flexível para personalizações menores de comunicação entre servidores e correções freqüentes. A maioria dos sites, até mesmo grandes empresas legítimas, não corrigir suas falhas de segurança, mesmo se eles estão comprometidos. Você deve ser fixar continuamente falhas de segurança e mudar as coisas para evitar buracos de surgir se você quiser evitar ser comprometida em primeiro lugar.

Para evitar se tornar um distribuidor de malware Eu sugeriria fazer regras duras e rápidas sobre como a mídia é servido que contém qualquer tipo de scripting do lado do cliente. scripting do lado do cliente pode ser encontrado em JavaScript, ActiveX, Flash, Acrobat, Silverlight e outros códigos ou plugin que executa no sistema do cliente. Politicas para servir esse conteúdo deve existir para que fragmentos de código anómala pode ser imediatamente identificado. Minha recomendação é NUNCA incluir código do lado do cliente diretamente em um navegador, mas sempre referenciar algum arquivo externo. Também gostaria de sugerir conslidating como media ocupados para lhe dar melhor controlo dos bens e poupar largura de banda, tais como servir um grande arquivo JavaScript em vez de 8 pequenos. Eu recomendaria também forçando todos esses meios de comunicação para um sistema de distribuição de conteúdo externo que as referências seu domínio em sua estrutura de diretório. Dessa forma, a mídia não é servido a partir de seus servidores diretamente e se servido diretamente de você pode rapidamente identificar como potencialmente maliciosos e necessittating uma revisão de segurança.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top