Acabei de ler na net sobre uma vulnerabilidade de segurança recém-descoberta no ASP.NET. Você pode ler os detalhes aqui.
O problema está na maneira como o ASP.NET implementa o algoritmo de criptografia AES para proteger a integridade dos cookies que esses aplicativos geram para armazenar informações durante as sessões do usuário.
Isso é um pouco vago, mas aqui está uma parte mais assustadora:
O primeiro estágio do ataque leva alguns milhares de solicitações, mas, uma vez bem-sucedido e o invasor obtém as chaves secretas, é totalmente furtivo. O conhecimento criptográfico necessário é muito básico.
Em suma, não estou familiarizado o suficiente com o assunto de segurança / criptografia para saber se isso é realmente sério.
Portanto, todos os desenvolvedores do ASP.NET devem temer esta técnica que pode ser proprietária de qualquer site do ASP.NET em segundos ou o quê?
Como esse problema afeta o desenvolvedor ASP.NET médio? Isso nos afeta? Na vida real, quais são as conseqüências dessa vulnerabilidade? E, finalmente: existe alguma solução alternativa que evita essa vulnerabilidade?
Obrigado por suas respostas!
EDIT: Deixe-me resumir as respostas que recebi
Portanto, este é basicamente um tipo de ataque "padding oracle". O @Sri forneceu uma ótima explicação sobre o que esse tipo de ataque significa. Aqui está um vídeo chocante sobre o assunto!
Sobre a seriedade dessa vulnerabilidade: Sim, é realmente grave. Permite ao invasor conhecer a chave da máquina de um aplicativo. Assim, ele pode fazer coisas muito indesejadas.
- Em posse da chave da máquina do aplicativo, o invasor pode descriptografar os cookies de autenticação.
- Pior ainda, ele pode gerar cookies de autenticação com o nome de qualquer usuário. Assim, ele pode aparecer como qualquer pessoa no site. O aplicativo não consegue diferenciar entre você ou o hacker que gerou um cookie de autenticação com seu nome.
- Ele também permite descriptografar (e também gerar) cookies de sessão , embora isso não seja tão perigoso quanto o anterior.
- Não é tão sério: ele pode descriptografar o ViewState criptografado de páginas. (Se você usa o ViewState para armazenar dados confidenciais, não deve fazer isso de qualquer maneira!)
- Bastante inesperado : com o conhecimento da chave da máquina, o invasor pode baixar qualquer arquivo arbitrário do seu aplicativo da web, mesmo aqueles que normalmente não podem ser baixados! (Incluindo Web.Config , etc.)
Aqui estão algumas práticas recomendadas que não resolvem o problema, mas ajudam a melhorar a segurança geral de um aplicativo Web.
- Você pode criptografar dados confidenciais com o Protected Configuration
- Usar cookies somente HTTP
- Impedir ataques de DoS
Agora, vamos nos concentrar nessa questão.
- Scott Guthrie publicou uma entrada sobre isso em seu blog
- Postagem no blog de ScottGu sobre a vulnerabilidade
- Atualização de ScottGu sobre a vulnerabilidade
- A Microsoft tem um aviso de segurança sobre isso
- Entendendo a vulnerabilidade
- Informações adicionais sobre a vulnerabilidade
A solução
- Ative customErrors e crie uma única página de erro para a qual todos os erros são redirecionados. Sim, até 404s . (ScottGu disse que a diferenciação entre 404 e 500 é essencial para esse ataque.) Além disso, coloque no seu código
Application_Error
ouError.aspx
coloque algum código que produza um atraso aleatório. (Gere um número aleatório e use Thread.Sleep para dormir por tanto tempo.) Isso tornará impossível ao invasor decidir o que exatamente aconteceu no seu servidor. - Algumas pessoas recomendaram voltar ao 3DES. Em teoria, se você não usa o AES, não encontra a fraqueza de segurança na implementação do AES. Como se vê, isso não é recomendado .
Alguns outros pensamentos
- Parece que nem todo mundo pensa que a solução alternativa é boa o suficiente.
Obrigado a todos que responderam à minha pergunta. Aprendi muito não apenas sobre esse problema, mas sobre a segurança da web em geral. Marquei a resposta de @ Mikael como aceita, mas as outras respostas também são muito úteis.