E-mail suporte@gwbminformatica.com.br

Mascarando informações importantes nos nossos executáveis

Publicado em 04/11/2019

Não é raro termos acesso a executáveis onde informações importantes, como senhas e nomes de usuários de bancos de dados, são facilmente acessíveis. Mas como evitar isto?

Qualquer desenvolvedor de software deve sempre ter um mínimo de preocupação com relação à segurança dos sistemas que desenvolve. Seja um sistema WEB, seja um sistema DESKTOP, esta preocupação sempre deve existir. Com relação a sistemas WEB, obviamente, esta preocupação deve ser maior, pelo simples fato de que neste caso o sistema, a princípio, esta exporto a todo o mundo. Por sua vez, sistemas desktop geralmente estão expostos a um certo grupo de usuários específicos.

No que diz respeito ao acesso à bancos de dados em nossos sistemas sempre devemos focar em um conjunto de situações onde haveria a possibilidade da quebra de segurança e, por consequência, a invasão deste sistema. Mas o foco da dica de hoje não esta neste conjunto mais robusto, mas sim nos pequenos detalhes que eventualmente dixamos passar despercebidos.

Quando criamos um novo projeto, independente da linguagem utilizada, e precisamos acessar uma base de dados fazemos uso de informações que nos dariam acesso a esta base. Utilizamos geralmente componentes ou classes específicas para este acesso e passamos parâmetros para isto. Neste ponto é que podemos cometer uma falha que pode facilitar muito o acesso às nossas bases ou servidores. Por princípio, aplicações ou executáveis são compilados de forma onde algumas informações ficam armazenadas em forma de recursos. Ocorre que nestes casos informações textuais ficam legíveis. Basta utilizar um editor de recursos, um editor de hexa ou até mesmo um editor de textos simples para podermos visualizar estas informações textuais. E neste caso podemos expor endereços de servidores, nomes de usuário para login, senhas e tudo mais que utilizamos para acessar nossos bancos de dados. Mas o que pode ser feito neste caso?

Uma medida simples que podemos tomar de forma a dificultar o acesso à estas informações sereia criptografar estes dados. O ideal seria utilizar uma criptografia reversível, algo que possa ser recuperado, diferente de criptografias de hash como MD5, SHA1, etc. Se possível deveríamos utilizar criptografias próprias, ou com senhas que possam ser variadas. Assim, ao invés de passarmos a informação legível, passaríamos esta informação já criptografada. Obviamente deveríamos passar este conteúdo por uma funcão que a reverta antes de informá-la ao componente ou classe de acesso ao banco de dados. Mas neste caso o executável traria esta função já compilada, sem expor de forma detalhada o conteúdo que esta sendo revertido.

No vídeo abaixo iremos ilustrar o que foi exposto em uma pequena aplicação compilada em Object Pascal através do Lázarus. Observe que foi utilizado uma função que codifica a senha de acesso através de Base64. Este não seria o formato de codificação mais adequado, sendo que Base64 é de conhecimento geral e de fácil reversão. Mas ao menos a senha deixa de ser um texto absolutamente legível passando a um texto menos legível.

 

 

Estas medidas poderiam inclusive ser extendidas a outros textos importantes, como consultas SQL utilziadas para, por exemplo, mudar uma senha de usuário padrão.

Espero que esta dica tenha sido útil.


Artigos relacionados

  • Dificultando o acesso não autorizado à bancos de dados Firebird
  • Dificultando a engenharia reversa de nossas bases de dados
  • Gerador de relatórios para Lazarus e Delphi
  • Utilizando Framework para criação de aplicações Lazarus e Delphi
  • © 2022 GWBM Informática - todos os direitos reservados
    suporte@gwbminformatica.com.br
    Informação