Segurança no Oracle 10G – Top 5 Basic Security

AGRADEÇA AO AUTOR COMPARTILHE!

Pessoal,

Neste artigo irei apresentar as minhas 5 principais recomendações de segurança básica para o Oracle Database 10G, aplicando o princípio de privilégio mínimo. Este princípio determina que os usuários devem possuir somente os privilégios necessários para executar as suas atividades no Banco de Dados, minimizando deste modo, os riscos de acesso à dados indevidos e perdas de dados acidentais.

——————————————————————————
Para iniciar o passo-a-passo de qualquer um dos itens abaixo, é necessário conectar-se previamente no Banco de Dados desejado, através do SQL Plus, com um usuário com privilégios administrativos (usuário contendo a role DBA ou o privilégio de sistema SYSDBA);
——————————————————————————

1- Protegendo o dicionário de dados:

Configurar o valor do parâmetro de sistema O7_DICTIONARY_ACCESSIBILITY para FALSE.  Isso impede que usuários com privilégios ANY TABLE acessem tabelas do dicionário de dados, além de forçar o usuário SYS a se conectar como SYSOPER ou SYSDBA.

Passo-a-passo:

a) Executar o comando abaixo para verificar o valor do parâmetro O7_DICTIONARY_ACCESSIBILITY:

b) Se o valor de O7_DICTIONARY_ACCESSIBILITY for diferente de FALSE, execute os comandos abaixo para efetuar a alteração e reiniciar o Banco de Dados, para que a alteração tenha efeito:

2- Revogando privilégios públicos em packages que oferecem riscos de segurança:

Este item requer um pouco mais de trabalho e cuidados que o item anterior. Nele iremos revogar os privilégios de execução pública nas packages UTL_SMTP, UTL_TCP, UTL_HTTP, UTL_FILE e DBMS_OBFUSCATION_TOOLKIT. Isso impede que usuários maliciosos executem essas packages de forma indevida, reduzindo deste modo, os riscos de segurança.

Passo-a-passo:

a) Executar a query abaixo para gerar um script contendo comandos necessários para revogar privilégios públicos nas packages mencionadas neste item:

Obs.: Salve o resultado em um arquivo.

b) Executar o bloco PL/SQL abaixo para gerar um script com atribuições de privilégios necessários para que todos os usuários (schemas) que possuem objetos que utilizam as packages deste item, possam executá-las após revogarmos os privilégios públicos:

Obs. 1: Salvar o resultado em um arquivo.

Obs. 2: O bloco PL/SQL acima não gera os privilégios necessários para objetos compilados em código nativo ou objetos wrapped. O procedimento necessário para estes casos não é abordado neste artigo, portanto, tenha muito cuidado ao executar este item, pois se o Banco de Dados tiver objetos wrapped ou compilados em código nativo, estes objetos ficarão inválidos e poderão impedir o funcionamento de sistemas que dependem deles. Para mais informações consulte os links: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/wrap.htmhttp://www.oracle-base.com/articles/11g/PlsqlNewFeaturesAndEnhancements_11gR1.php#native_compilation.

c) Executar os comandos do script gerado no passo “a” e em seguida executar o script gerado no passo “b”.

3- Restringindo diretórios do Sistema Operacional:

Verificar o valor do parâmetro de sistema UTL_FILE_DIR. Se este parâmetro tiver um valor apontando para um ou mais diretório(s) do sistema de arquivos, configure no Sistema Operacional, privilégios de gravação reduzidos (valor de cota máxima de gravação em disco) neste(s) diretório(s) para o usuário do SO que executa os processos do Oracle (normalmente usuário “oracle”). Se isso não for possível, pode-se configurar no parâmetro UTL_FILE_DIR um diretório em um volume lógico separado do volume lógico em que estão os arquivos e software Oracle. Isso reduz o risco de um script malicioso ser executado no BD para gravar arquivos nesta pasta até  estourar o limite de tamanho do volume lógico e “parar” o Banco de Dados quando o volume lógico “estourar”.

Verificando o valor do parâmetro UTL_FILE_DIR:

O parâmetro UTL_FILE_DIR pode ser configurado para apontar para mais de um diretório ou para o diretório raiz do sistema de arquivos. Por questões de segurança evite fazer isso. Configure no máximo um diretório.

Se for desejado “limpar” (apontar para nenhum diretório) o parâmetro UTL_FILE_DIR, para aumentar o nível de segurança, execute os comandos abaixo para alterá-lo e reiniciar o Banco de Dados:

4- Restringindo privilégios administrativos aos usuários do Banco de Dados:

Se um ou mais usuário(s) possuir(em) a role DBA e/ou o privilégio de sistema SYSDBA, sem necessidade ou indevidamente, execute os procedimentos abaixo para revogar os privilégios administrativos:

Passo-a-passo:

a) Verificando usuários com a role DBA:

Para revogar a role DBA para um determinado usuário execute o comando abaixo substituindo XXX pelo nome dele:

b) Verificando usuários com o privilégio de sistema SYSDBA:

Para revogar o privilégio de sistema SYSDBA para um determinado usuário execute o comando abaixo substituindo XXX pelo nome dele:

Mais informações sobre a role DBA e o privilégio de sistema SYSDBA, consulte http://momendba.blogspot.com/2007/07/closer-look-at-sysdba-and-dba.html.

5- Desativando autenticação remota do Sistema Operacional:

Na configuração padrão do Oracle 10G, o Banco de Dados permite que usuários autenticados no sistema operacional façam conexão local sem fornecer usuário e senha do Banco de Dados.

Para permitir esse modo de conexão somente para usuários locais do Sistema Operacional, deve-se configurar o valor do parâmetro REMOTE_OS_AUTHENT para FALSE. Essa configuração evita que usuários remotos (usuários de qualquer computador em uma rede) se conectem no Banco de Dados sem fornecer usuário e senha.

Passo-a-passo:

a) Verificando o valor do parâmetro REMOTE_OS_AUTHENT:

b) Se o valor do parâmetro REMOTE_OS_AUTHENT for diferente de FALSE, execute o comando abaixo para configurá-lo para FALSE e para reiniciar o Banco de Dados, aplicando as alterações efetuadas:

Referências:
– Material do curso oficial da Oracle: Oracle Database 10G Administration Workshop I.

Autor: Fábio Prado (http://www.fabioprado.net)

AGRADEÇA AO AUTOR COMPARTILHE!

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

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