Aplicando um pouco de segurança ao LISTENER - PASSWORD LISTENER

 

Neste artigo vamos abordar mais um aspecto de segurança em infra-estrutura em bancos Oracle, mais especificamente sobre o LISTENER.

 

Um outro tema abordado no documento do Sr. Arup Nanda é referente ao LISTENER.

 

 

Ameaças

 

Uma das mais populares estratégias de ataque à infra-estrutura Oracle é a inserção de uma grande quantidade de texto no arquivo de parâmetros do LISTENER.

Este tipo de ataque faz com que o LISTENER tenha problemas e aborte sua execução.

 

O banco poderia estar aberto normalmente, mas com o LISTENER 'fora', não seriam permitas novas conexões ao banco.

 

Para fazer isso, o invasor poderia tentar alterar os atributos e parâmetros do LISTENER.

 

Uma tática conhecida é listar os vários serviços atendidos pelo LISTENER, com o uso do comando SERVICES.

 

Você pode verificar a quantidade de informações relevantes que podem ser obtidas com este comando, usando as instruções abaixo:

 

LSNRCTL> set displaymode verbose

LSNRCTL> services

 

Outra tática que o invasor poderia adotar seria 'parar' o LISTENER, o que também faria com que novas conexões fossem rejeitadas pelo banco.

 

E, finalmente, como o LISTENER pode ser administrado remotamente, o invasor poderia usar esta técnica para 'derrubar' o LISTENER e então explorar outras vulnerabilidades.

 

 

Como proteger o LISTNER destas ameaças?

 

A melhor opção para assegurar o LISTENER contra estas ameaças é retirar todas as permissões dos arquivos executáveis tnslsnr e lsnrctl, exceto dos seus owners. Assim, somente o owner do software Oracle poderia iniciar e parar o LISTENER.

 

Mas, em alguns casos, é necessário conceder privilégios para iniciar e parar o LISTENER para determinados usuários, tornando necessário conceder permissões de acesso a estes arquivos novamente.

 

No entanto, o acesso não-autorizado ao LISTENER poderia ser prevenido com o uso de uma senha para o LISTENER (que pode ser em conjunto com a retirada das permissões dos demais usuários).

 

Quando é definida uma senha para o LISTENER, a maioria dos comandos é desabilitada (comandos como o HELP, por exemplo, continuam funcionando).

 

 

Configurando uma senha para o LISTENER

 

A configuração de uma senha para o LISTENER funciona da mesma forma para todas as versões de banco, mas o processo de aplicação de senha varia, conforme abaixo:

 

         - Oracle 9iR2 e anteriores - todos os usuários precisam da senha;

         - Oracle 10g - os usuários do sistema operacional, que são owners do software do banco, não precisam de senha. Todos os outros precisam.

 

A senha para o LISTENER pode ser definida da seguinte forma:

 

LSNRCTL> change_password

Old password: <senha_antiga>

New password: <senha_nova>

Reenter new password: <senha_nova>

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)(IP=ip)))

Password changed for LISTENER

 

Obs.:

         1 - Os caracteres informados para atender às solicitações de senha_antiga e senha_nova não são mostradas na tela enquanto são digitados.

         2 - Se a senha está sendo configurada pela primeira vez, pode ser pressionada a tecla ENTER quando solicitado Old password.

 

Após efetuar as alterações, estas informações devem ser salvas no arquivo de parâmetros do LISTENER, conforme abaixo:

 

LSNRCTL> save_config

 

Este comando criptografa a senha e adiciona uma linha no arquivo de parâmetros com esta informação.

 

Após estes passos, o arquivo de parâmetros do LISTENER (LISTENER.ORA) conterá algumas linhas adicionais, parecidas com:

 

#----ADDED BY TNSLSNR 01-JUL-2007 15:25:14---

PASSWORDS_LISTENER = 75CD180DE6C75466

#--------------------------------------------

 

A partir deste momento, será solicitada a senha para a execução dos comandos do LISTENER (com exceção dos owners do 10g).

 

 

Exemplo:

 

LSNRCTL> services

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

TNS-01169: The listener has not recognized the password

 

Para informar a senha correta, e poder usar os comandos normalmente, deve ser usada a seguinte sintaxe:

 

LSNRCTL> set password <senha>

The command completed successfully

 

Se for informada uma senha errada, será retornada a seguinte mensagem:

 

TNS-01169: The listener has not recognized the password.

 

Para confirmar que a senha está em efeito, pode ser usado o comando STATUS.

 

Na versão 9i, ficaria assim:

 

LSNRCTL> status

 

STATUS of the LISTENER

------------------------

Alias             LISTENER

Version         TNSLSNR for Solaris: Version 9.2.0.6.0 - Production

Start Date     16-JUL-2007 15:26:47

Uptime          1 days 03 hr. 8 min. 36 sec

Trace Level    off

Security        ON

 

A última linha (Security ON) indica que a senha está habilitada.

 

Na versão 10g, estas informações são exibidas de forma um pouco diferente, pelo fato de que os owners do software não necessitarem de senha (todos os outros precisam), conforme abaixo:

 

STATUS of the LISTENER

------------------------

Alias             LISTENER_ODSPDB02

Version         TNSLSNR for HPUX: Version 10.2.0.3.0 - Production

Start Date     16-JUL-2007 15:58:35

Uptime          2 days 03 hr. 44 min. 41 sec

Trace Level    off

Security        ON: Local OS Authentication

 

A última linha (Security       ON: Local OS Authentication) informa que a senha ainda não está sendo utilizada.

Quando a senha é utilizada, seguindo os passos anteriormente mencionados, a última linha passa a ter a seguinte informação:

 

Security        ON: Password or Local OS Authentication

 

Com isso, na versão 9i, caso haja algum script que use comandos do LISTENER, estes precisarão ser ajustados para fornecer a senha.

No 10g não será necessária nenhuma alteração em scripts executados pelos owners do software do banco.

 

Essa medida simples, de forçar o uso de senha para o LISTENER, pode prevenir o acesso indevido aos seus parâmetros bem como o uso dos seus comandos por invasores ou usuários indesejados.

 

Anderson Rodrigo Farias

DBA Oracle

Betha Sistemas LTDA

http://www.betha.com.br