Descobrindo senha de banco de dados

Dicas

Você já passou por aquela situação de desconfiança, onde ao informar a senha de acesso ao banco de dados e pensou “poxa, tenho de informar a senha em texto limpo ?”, desejando que a senha estivesse cifrada.

Isso por padrão ocorre em alguns servidores de aplicativos, onde a senha de acesso ao banco de dados é informada em texto limpo, em outros servidores de aplicativos a senha ecoa em asteriscos, deixando o usuário confortável que a senha está segura. Bem, não acredite nisso, a senha não está segura.

O que quero mostrar é que a senha pode ser extraida de outras maneiras, como inspecionar os pacotes de mensagens IP. O que pode garantir a senha é uma combinação de práticas e configurações para deixar o ambiente mais seguro.

Passo aqui um exemplo de como obter a senha do oracle configurado em um servidor de aplicativos conhecido no mercado.

Vejam abaixo na configuração da conexão, que a senha esta protegida por asteriscos


Faça os seguintes passos, para ver a senha no log

  1. Usar a biblioteca JDBC de debug da oracle: ojdbc14_d.jar
  2. Usar o driver XA oracle.jdbc.xa.client.OracleXADataSource
  3. Incluir as seguintes propriedades de JVM

    -Doracle.jdbc.Trace=true
    -Doracle.jdbc.LogFile=/var/tmp/oracle-trace/trace1
    
  4. Reiniciar o servidor de aplicativos

Basta acompanhar o log de trace do oracle ou do servidor de aplicativos, que a senha será impressa desta maneira

INFO: OracleXADataSource.getXAConnection()
03/10/2007 15:33:16 oracle.jdbc.xa.client.OracleXADataSource getXAConnection
INFO: OracleXADataSource.getXAConnection(user = claudio, passwd = admin123)
03/10/2007 15:33:16 oracle.jdbc.driver.PhysicalConnection setAutoCommit

Bonito não é ?

Para o Oracle é usado uma funcionalidade documentada, que é o trace das chamadas. Mas infelizmente, a senha é impressa junto. E vejam que nem com SSL, a senha é protegida.

E é necessário ter privilégios de administração do servidor de aplicativos.

Quando que isso pode ser útil ?

Já trabalhei em lugares onde a senha do banco de dados, era digitada no console do appserver, pelo próprio pessoal da equipe de DBA, e em algumas situações era necessário realizar alguma pesquisa no BD, então essa dica vale a pena.

Em banco de dados de código livre fica mais fácil, basta usar o código fonte do driver JDBC, modificar o código fonte para imprimir a senha e pronto.

Em banco de dados que não são de código livre, basta criar sua classe que estende DataSource e sobrecarregar o método getConnection e fazer um proxy para o DataSource do driver JDBC.

Então, percebam que os asteriscos no textfield não significam segurança para a senha do banco de dados.

Tenho essa dica há uns 3 anos e percebi que não escrevi sobre ela ainda.

Se essa dica foi útil para você, deixe um comentário, informando como ela lhe ajudou ! 

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>