O Node.js está maduro para segurança corporativa?

6

Nossa equipe de desenvolvimento tem considerado o uso do Node.js para um novo aplicativo corporativo que requer segurança de alto nível. Os usuários incluem a polícia federal, então há uma grande chance de sermos auditados pela segurança.

  • Dado que o Node.js é relativamente novo, ele ainda tem problemas de segurança que precisam ser resolvidos?
  • Alguém tem alguma experiência de desenvolvimento com o Node.js e qualquer insight sobre possíveis ataques usando sua estrutura?

Agradeço a ajuda.

Editar: alguns usuários no StackOverflow sugeriram o uso de um proxy reverso, mas estou curioso para saber se alguém tem mais sugestões.

    
por crockpotveggies 29.06.2011 / 02:24

3 respostas

5

Embora eu não possa apontar para nenhum defeito específico relatado, eu ficaria nervoso com a arquitetura node.js - onde seu código é executado como parte do código do servidor web. Embora com algo como mod_php, ainda há apenas um único processo manipulando as camadas HTTP e lógica, há uma clara separação funcional entre o 2 e a interface entre o servidor da web e a camada lógica foi expressamente projetada e testada para acomodar falhas - Particular na camada lógica.

Além disso, existem muitas ferramentas disponíveis para servidores Web (o Apache em particular) que facilitam o gerenciamento e (usados corretamente) aumentam a segurança.

Outra consideração importante é a disponibilidade de habilidades / suporte / treinamento - independentemente de sua qualidade / utilidade, o node.js tem muito o que fazer em comparação com outras plataformas de desenvolvimento da web.

Our development team has been considering using Node.js

Que você está especificamente tentando entregar o que deve ser um aplicativo muito seguro em uma plataforma que (a julgar pela sua declaração acima) você não está totalmente familiarizado com parece ser muito imprudente. A maioria das vulnerabilidades de segurança em aplicativos da web surgem não por causa de falhas no ambiente de desenvolvimento, mas em falhas no código personalizado adicionado na parte superior.

Certamente, usar um proxy reverso facilitaria a obtenção de registros HTTP padrão, detecção de anomalias e reduzir o impacto de ataques em nível de protocolo.

Uma das melhores ferramentas para criar aplicativos da Web seguros é o mod_security - AFAIK, que só está disponível para execução no Apache - mas ofereceria a possibilidade (juntamente com mod_proxy ) de implantar um sistema front-end fornecendo o servidor web usual funcionalidade (criação de log, conteúdo estático) junto com, digamos, serviços de autenticação e uso de node.js como um back-end.

    
por 29.06.2011 / 15:48
3

Isso ajuda principalmente com a simultaneidade, se essa simultaneidade for vinculada a E / S, como você provavelmente sabe.

Uma opção muito mais rápida que o NodeJS é usar o mono + F # e seu suporte assíncrono. Então você pode usar um HttpListener para chegar o mais próximo possível do socket do NodeJS.

Alheio às escolhas acima; O SELinux e o chroot são provavelmente boas ferramentas para o resto.

A maioria das vulnerabilidades de segurança em código na minha experiência, que resultam na execução de código arbitrário, são de permissões de gravação incorretas para banco de dados / disco, permitindo que você solicite arquivos carregados ou de código não gerenciado que geram limites / limites de memória inválidos. verificação.

Um proxy reverso também é uma boa opção, porque eles são endurecidos pela batalha. HAPROXI, e. - Ele pode manipular WebSockets e HTTP normal em suas versões mais recentes.

Depois, você pode usar algumas ferramentas para testar a implementação. O Google usa uma ferramenta chamada skipfish: link

Você pode usar um fuzzer no nível do protocolo, bem como no nível do aplicativo, mas isso é menos e menos importante quanto mais seu compilador provar para você, como com o JS, onde não é possível alterar o tipo de uma instância de objeto ou F # onde você tem mais verificação estática com por exemplo sindicatos discriminados e unidades de medida.

Por fim, se você está procurando segurança de código realmente alta, eu recomendaria o Stact Framework com o Haskell, que você pode fazer muita segurança usando o compilador. Com Haskell você pode até escrever pequenas provas com Coq, um assistente de provas, ou Agda (veja Provedores de Teoremas de Haskell )

Para se comunicar com seus servidores, você provavelmente terá um DNS. Você precisará proteger isso também, com o DNSSec, ou você pode obter um envenenamento de DNS.

Se eles obtiverem acesso à LAN, você poderá obter o ARP Poisioned, o que significa que alguém pode roubar seus IPs; mas você pode tornar o servidor DNS a manutenção estática de quem quer que esteja na rede em uma tabela de pesquisa de IP para MAC que todos os hosts também verifiquem.

Finalmente, você pode adicionar um IDS como Snort à sua rede e gravar uma execução "normal" do seu programa, para que você também pode ser reativo a anomalias.

    
por 24.07.2012 / 14:56
1

Idealmente, o aplicativo inteiro deve ser restrito por uma intranet ou VPN, ou pelo endereço IP muito menor do cliente, especialmente se for usado por qualquer tipo de autoridade federal. oficial. Se o invasor não conseguir nem atingir o servidor da Web, certamente não será capaz de explorar o Node.js, certo?

    
por 29.06.2011 / 02:44