ASP.NET Core Web  - Regras para tornar sua aplicação mais Segura


 Neste artigo vou apresentar alguns procedimentos básicos para tornar sua aplicação ASP .NET Core MVC mais segura.

Diferentemente de uma aplicação para desktop ou para dispositivo móvel, uma aplicação Web é executada em um endereço disponível ao público, e, isso é um dos motivos pelos quais a segurança das aplicações Web deve ser olhada com mais cautela e com mais atenção.

Embora o framework Asp.Net Core seja desenvolvido com as melhores práticas de segurança, ainda existem algumas vulnerabilidades que precisamos vedar antes e depois do lançamento da nossa aplicação Asp.Net Core em produção.

Vejamos a seguir alguns procedimentos que podemos adotar para vedar essas vulnerabilidades:

1. Torne o seu login mais seguro

A página de login é como uma porta para qualquer aplicativo. Considere um aplicativo como o Painel de administração. Se uma pessoa não autorizada obtiver acesso ao seu aplicativo, ele poderá controlar todo o sistema. Portanto, seu primeiro passo sempre deve ser tornar seu login seguro.

A seguir algumas dicas para tornar o login mais protegido:

a - Utilize credenciais de login complexas

Nunca use nomes de usuário como admin e senhas como 12345, o no. do telefone, a sua data de nascimento ou mesmo o seu nome. Qualquer um pode inferir esses valores e e os robôs serão capazes de descobrir esses tipos de credenciais, em uma fração do tempo que um humano levaria.

b- Proteja o seu login do ataque de força bruta

Os ataques de força bruta são o tipo mais comum de ataques que usam algoritmos diferentes e tentam diferentes combinações de nome de usuário ou senha para adivinhar as credenciais de login. Além disso, muitas tentativas de login podem ocupar seu servidor, o que pode causar negação de serviço (DoS) e tempo de inatividade para os usuários do seu aplicativo.

Os ataques de força bruta levam menos tempo para adivinhar nomes de usuário e senhas simples, mas eles também podem adivinhar combinações complexas tentando todas as possibilidades.

Então, como proteger nosso aplicativo Asp.Net Core contra ataques de força bruta?

Aqui estão algumas dicas para evitar a força bruta:

Você deve estar pensando 'Falar é fácil, mas implementar tudo isso não é tão simples...'

Para .NET Core podemos usar a biblioteca HackerSprayCore para defender aplicações MVC e Web API contra força bruta e ataques de negação de serviço.

2. Sempre submeta os dados usando encriptação

Nunca envie seus dados confidenciais, como senha ou credenciais de cartão de crédito, na forma de texto aberto, ao servidor para validação. Os hackers podem roubar seus dados farejando-os antes de enviá-los ao servidor.

Sempre use um algoritmo de hash como md5 ou SHA256 para algoritmo de senha e criptografia como AES ou DES no lado do cliente se estiver usando usando jQuery.

3. Não se esqueça de limpar os cookies ao sair

Ao fazer login em um aplicativo Asp.Net Core, mantemos alguns dados necessários em Sessões para manter o login do usuário até que ele efetue o logout. Em alguns aplicativos, definimos o tempo limite da sessão e, às vezes, não definimos o tempo limite da sessão quando o usuário marca uma caixa de seleção na página de login em que ele deseja manter o login.

Ao mesmo tempo, o cookie AspNetCore.Session é adicionado ao navegador para manter o registro do usuário conectado.

Portanto, ao fazer o logout, também precisamos remover os cookies criados por nosso aplicativo no navegador do usuário, porque um hacker pode usar essas informações para login não autorizado. Isso também é chamado de Session fixation atack ou ataque de fixação de sessão.

4. Sempre use SSL

O acróstico SSL significa - Secure Socket Layer,e realiza a comunicação entre cliente e servidor criptografada usando uma chave muito forte.

Portanto, no arquivo Starup.cs do seu aplicativo Asp.Net Core, você pode configurar para sempre usar a Política segura para cookies.

5. Nunca mantenha dados confidenciais abertos no seu banco de dados

A grande maioria das aplicações web utilizam um banco de dados para armazenar dados dos usuários, e, na maioria das vezes os hackers atacam o servidor por roubar os dados dos usuários.

Suponha que você tenha armazenado as credenciais de seus usuários, como detalhes de Senhas e métodos de pagamento em seu banco de dados, de forma clara e aberta. Assim, qualquer pessoa que tenha acesso não autorizado ao seu banco de dados pode usar indevidamente os dados dos usuários.

Para evitar isso sempre mantenha seus dados confidenciais armazenados usando Hashing ou Criptografia no seu banco de dados.

6. Trilhas de auditoria ou criação de log também são importantes

As trilhas de auditoria ou registro de atividades é realmente importante para estar ciente do que está acontecendo no seu aplicativo. Se alguém estiver recebendo muitas tentativas de login com falha, o administrador deverá receber um email sobre essas tentativas de login com falha.

Vamos supor que um cliente crie um novo usuário ou altere as funções de um usuário existente, cada atividade deve ser registrada no registro de atividades da sua aplicação ASP .NET Core.

7. Nunca exiba erros técnicos para o usuário final

Algumas exceções podem divulgar informações importantes sobre nosso aplicativo ou, às vezes, até mostrar algumas linhas de código para o usuário final. Os invasores são espertos, eles podem usar as informações fornecidas por nossa exceção para violar a segurança da nossa própria aplicação.

Assim, antes de implantar seu aplicativo em produção, verifique se você definiu sua página de Erro personalizado para todos os tipos de exceções e se efetuou o log de erros adequado na sua aplicação.

8. Faça o tratamento para evitar o Script entre sites (XSS)

Nos ataques XSS, os hackers enviam scripts maliciosos via campos de entrada para roubar credenciais do usuário e outros dados importantes.

Então, como proteger nosso aplicativo principal do Asp.Net contra ataques de script entre sites ?

Você pode proteger seu aplicativo Web seguindo estas dicas:

Para mais detalhes leia este artigo da Microsoft sobre o assunto : Previnir o XSS na ASP .NET Core

9. Tente ocultar a versão do .NET Core usado

Em todas as respostas HTTP do servidor que recebemos em troca de nossa solicitação enviada de um navegador, sempre há as informações da versão no qual o aplicativo é desenvolvido. Essas informações facilitam o trabalho do atacante, economizando tempo e direcionando para a versão .Net específica.

Portanto, é necessário lançar mais obstáculos para os hackers e tornar mais difícil para eles ocultando as informações da versão do .Net Framework.

Veja como ocultar a versão do .Net Core:

Você pode remover o X-Powered-By usando este snippet simples no seu web.config :

  1. <httpProtocol>
  2. <customHeaders>
  3.     <remove name="X-Powered-By" />
  4. </customHeaders>
  5. </httpProtocol>

10. Se projeta do Cross-Site Request Forgery (Falsificação de solicitação entre sites)

Você conhece a finalidade do atributo [ValidateAntiForgeryToken] nas suas APIs da Web .Net Core e pode ser possível que você tenha visto este código asp-antiforgery = "true" no seu arquivo cshtml também.

Como proteger seu aplicativo do CSRF ?

A tag asp-antiforgery = "true" gera um anti-forgery token
 e o atributo [ValidateAntiForgeryToken] valida no lado do servidor  se o token é válido ou não, e nos protege da falsificação de solicitações entre sites.

Para saber mais veja este artigo da Microsoft: Previnir XSRF e CSRF

O .Net Core é considerado um dos frameworks mais seguros do mercado, mas mesmoa assim, ainda precisamos manter um olho nas atividades de nosso aplicativo e tomar medidas rápidas em caso de qualquer atividade maliciosa.

E estes são alguns dos procedimentos que se adotados tornarão a sua aplicação mais segura.

Embora nada seja 100% seguro temos a obrigação de usar todos os recursos conhecidos e disponíveis para proteger nossa aplicação.

"E Jesus clamou, e disse: Quem crê em mim, crê, não em mim, mas naquele que me enviou.
E quem me vê a mim, vê aquele que me enviou.
Eu sou a luz que vim ao mundo, para que todo aquele que crê em mim não permaneça nas trevas."
João 12:44-46

 

 Referências:


José Carlos Macoratti