.NET - Segurança de
aplicações
![]() |
Hoje vou apresentar algumas dicas relacionadas a segurança de aplicações na plataforma .NET. |
Pensando nisso, vou apresentar a seguir cinco dicas básicas que você deve
conhecer e que vão te ajudar a tornar o seu código mais seguro.
1- Evite conexões diretas com bancos de dados
Muitas vezes nossas aplicações requerem usar um bancos de dados, e a maneira
mais fácil de usar esses bancos de dados é usar um conector em nossa aplicação.
A seguir temos um exemplo onde temos o uso de um conector MySqlConnection, e, para fazer uma conexão, usaríamos um código como este:
string
connectionString =
"datasource=host.com;port=3306;username=root;password=secret;database=teste;"; MySqlConnection databaseConnection = new MySqlConnection(connectionString); |
Usar esta abordagem pode ser fácil e simples de implementar mas não é prático para segurança.Desta forma, estamos expondo nosso servidor, porta, nome de usuário e senha para qualquer pessoa que tenha acesso ao aplicativo.
Mas então quais soluções podemos adotar ?
Aqui devemos levar em consideração vários aspectos, um deles como nosso aplicativo está estruturado e suas necessidades.
De uma forma simples poderíamos aplicar as seguintes medidas:
- Não usar arquivos Universal Data Link (UDL).
- Criptografar os arquivos de configuração.
- Usar a Autenticação do Windows.
- Usar o segredo do Azure Key Vault.
E, dependendo do tipo de aplicação, se precisarmos de segurança completa e avançada, talvez uma saída seja terceirizar as conexões.
2- Faça a criptografia de dados para aumentar a segurança
Sempre que trabalhamos com dados, sejam configurações de aplicativos ou informações sobre usuários, devemos manter os dados criptografados todo o tempo.
A criptografia é uma medida de segurança importante para proteger informações confidenciais, mas a decisão de criptografar ou não os dados depende de vários fatores, incluindo o tipo de dados, o contexto de uso e os requisitos de segurança.
A criptografia é recomendada quando você precisa proteger dados sensíveis que podem ser explorados se caírem em mãos erradas. Alguns exemplos de casos em que a criptografia é essencial são:
Assim, de forma simples, se você possui informações como texto puro em arquivos de configuração pode aplicar uma criptografia para dar um pouco mais de segurança:
ArquivoSeguro.WriteAllText("exemplo.txt",
"O usuário
Maria foi registro em https://macoratti.com",
"numsey#2023"); ArquivoSeguro.ReadAllText( "exemplo.txt", "numsey#2023"); |
Este é um pequeno exemplo para começar a integrar a segurança e a criptografia nos dados uma aplicação manipula, tanto arquivos quanto documentos e assim por diante.
Neste exemplo vimos que a senha “numsey#2023” está no código, e isso não deveria ocorrer, e uma opção opção seria externalizar esta senha e carregá-la com segurança.
Outras medidas a serem tomadas seriam:
3- Use a API de proteção de dados de segurança no ASP.NET Core
Na ASP .NET Core podemos usar IDataProtector para proteger as informações e documentos que manipulamos em nossas aplicações. A proteção de dados com o IDataProtector envolve criptografia e assinatura digital. A criptografia garante que os dados sejam mantidos em sigilo, enquanto a assinatura digital garante a integridade dos dados, evitando que sejam modificados por terceiros.
Aqui está um exemplo de como usar o IDataProtector no ASP.NET Core:
private readonly IDataProtector _dataProtector;
public MyClass(IDataProtectionProvider dataProtectionProvider)
{
_dataProtector = dataProtectionProvider.CreateProtector("protectionPurpose");
}
|
Para proteger dados sensíveis, você pode chamar o método Protect no IDataProtector, passando o valor que deseja proteger:
string originalData = "Dados confidenciais";
string protectedData = _dataProtector.Protect(originalData);
|
Para desproteger os dados posteriormente, utilize o método Unprotect no IDataProtector:
string unprotectedData = _dataProtector.Unprotect(protectedData);
|
O IDataProtectionProvider é responsável por fornecer uma implementação do IDataProtector adequada para o seu ambiente, garantindo que os dados estejam protegidos corretamente. Ele também permite a configuração de chaves de criptografia e outras opções de proteção de dados.
O IDataProtector é uma ferramenta útil para proteger informações sensíveis no ASP.NET Core, mas é importante lembrar que ele é apenas uma parte do que é necessário para garantir a segurança de um sistema
4- Atualize dependências e bibliotecas externas para melhorar a segurança
Esta recomendação pode ser óbvia, mas poucos a levam em consideração, quando programamos na plataforma .NET utilizamos muitas bibliotecas, normalmente muitas delas oferecidas pela Microsoft, outras desenvolvidas por usuários ou empresas, como a maioria dos pacotes NUGET.
É importante verificarmos quais bibliotecas nosso aplicativo está usando e nos informarmos sobre vulnerabilidades conhecidas ou possíveis riscos de segurança que elas possam causar.
Uma forma de obter uma lista de pacotes desatualizados e a seguir adicionar o pacote com a versão mais atual é usar os comandos :
dotnet list package --outdated
dotnet add package <nome-do-pacote> --version
<versão>
Também é importante levar em consideração as versões das ferramentas e pacotes que estamos usando para nosso aplicativo, pois eles podem estar obsoletos e sem manutenção e podem representar um risco de segurança para seus aplicativos.
A seguir temos as versões do .NET disponível para download : ( https://dotnet.microsoft.com/download/dotnet-core )
Para obter informações atualizadas sobre vulnerabilidades conhecidas nas bibliotecas .NET mais comuns podemos consultar :
5- Use a ofuscação de código
A ofuscação de código é uma técnica que visa tornar o código-fonte de um aplicativo mais difícil de entender e reverter, dificultando a engenharia reversa e protegendo informações sensíveis do software.
Na plataforma .NET, a ofuscação de código é comumente usada para proteger a propriedade intelectual, evitar a exploração de vulnerabilidades e dificultar a criação de versões não autorizadas ou piratas do software.
A ofuscação de código pode ser realizada por meio de ferramentas específicas que aplicam uma série de transformações no código-fonte para torná-lo menos legível, sem alterar sua funcionalidade. Essas transformações incluem:
É importante mencionar que a ofuscação de código não é uma solução de segurança completa e não impede ataques certos ou altamente sofisticados. No entanto, ela adiciona uma camada adicional de complexidade e dificuldade para tentativas de engenharia reversa.
Existem várias ferramentas de ofuscação disponíveis para a plataforma .NET, como o Dotfuscator, o ConfuserEx e o Obfuscator-LLVM. Essas ferramentas geralmente oferecem opções configuráveis para personalizar o processo de ofuscação de acordo com as necessidades do aplicativo.
No entanto, é importante considerar que a ofuscação de código pode dificultar a depuração e o diagnóstico de problemas em um ambiente de produção. Portanto, é recomendável fazer testes extensivos após a aplicação da ofuscação para garantir que o aplicativo ainda funcione corretamente.
Conclusão
Assim, a segurança de uma aplicação é um processo contínuo pois as ameaças estão sempre evoluindo. Portanto, é fundamental ficar atualizado com as melhores práticas de segurança e adaptar suas estratégias de acordo com as mudanças no cenário de segurança.
E
estamos conversados...
"E houve também entre eles contenda, sobre qual deles parecia
ser o maior.
E ele lhes disse: Os reis dos gentios dominam sobre eles, e os
que têm autoridade sobre eles são chamados benfeitores. Mas não sereis vós
assim; antes o maior entre vós seja como o menor; e quem governa como quem
serve."
Lucas 22:24-26
Referências: