Oracle Database Security Assessment Tool (DBSAT)

Por Anderson Graf Oracle Associate e Jhonata Lamim Oracle Associate
Publicado em Abril 2018

Revisado por Fidel Andres Vargas Londono


O Oracle Database Security Assessment Tool (DBSAT), atualmente na versão 2.0.1 (Dezembro 2017), é uma ferramenta de linha de comando focada na detecção de potenciais vulnerabilidades de segurança. Sua maior abrangência ocorre dentro do banco de dados mas também inspeciona componentes do sistema operacional e rede (listener) em busca de falhas.

A ferramenta fornece uma visão sobre o atual status de usuários, roles, permissões e políticas de controle de segurança com o objetivo de promover abordagens bem-sucedidas para mitigar potenciais riscos de segurança.

O DBSAT é composto por dois componentes:

DBSAT Collector: Responsável pela execução das SQL queries e comandos de sistema operacional que coletam os dados a serem avaliados. Os dados são armazenados em um arquivo que é usado posteriormente pelo DBSAT Reporter na fase de análise.

DBSAT Reporter: Responsável por analisar os dados coletados e gerar o reporte das descobertas e recomendações em arquivos de múltiplos formatos como HTML, Excel e Texto.




Os principais benefícios do uso do DBSAT são:

  • Identificação rápida dos erros de configuração de segurança do banco de dados;
  • Recomendações embasadas nas melhores práticas de segurança;
  • Redução da amplitude de um ataque e exposição ao risco.

O DBSTAT funciona sobre o Oracle database 10.2.0.5 e versões posteriores incluindo ambientes 12c multitenant e cloud. As plataformas suportadas são:

  • Solaris x64 and Solaris SPARC
  • Linux x86-64
  • Windows x64
  • HP-UX IA (64-bit)
  • IBM AIX & zSeries Based Linux

Na plataforma Windows, atualmente, algumas regras e verificações no sistema operacional são ignoradas e podem ser encontradas no final do relatório de texto e HTML.

Seu uso é muito simples e consiste em basicamente baixar o arquivo do MOS (My Oracle Support - Doc ID 2138254.1), descompactar e executar o script para coleta e reporte das vulnerabilidades de segurança. O DBSAT é um utilitário leve que não prejudica o desempenho do sistema durante sua execução.



Executando o DBSAT Collector:

Para que o DBSTAT colete todos os dados e realize uma validação completa ele deve ser executado a partir do servidor de banco de dados, pois são executados alguns comandos de sistema operacional para coleta de dados que não podem ser obtidos a partir do database. O DBSTAT também deve ser executado com um usuário de sistema operacional que tenha permissão de leitura em arquivos e diretórios do ORACLE_HOME para que os dados sejam coletados e processados adequadamente.

As coletas no banco de dados são realizadas principalmente sobre visões do dicionário de dados, desta forma o usuário que será fornecido na string de conexão com a base de dados deve conter as permissões suficientes para selecionar os dados a partir destas visões.

Podemos conceder ao usuário de conexão as permissões a seguir ou simplesmente atribuir a role DBA (mais a role DV_SECANALYST se necessário), ou ainda, podemos realizar uma conexão utilizando autenticação pelo sistema operacional estando conectado com um usuário membro do grupo especial, normalmente dba ou administrator (Windows) juntamente com o papel SYSDBA – “/ as sysdba”

Privilégios e roles requeridos:

  • CREATE SESSION
  • SELECT on SYS.REGISTRY$HISTORY
  • Role SELECT_CATALOG_ROLE
  • Role DV_SECANALYST (if Database Vault is enabled)
  • Role AUDIT_VIEWER (12c only)
  • Role CAPTURE_ADMIN (12c only)
  • SELECT on SYS.DBA_USERS_WITH_DEFPWD (11g and 12c)
  • SELECT on AUDSYS.AUD$UNIFIED (12c only)

Sintaxe para execução do DBSAT Colletor:

$ dbsat collect <connect_string> <destination>

connect_string: Credenciais de acesso ao banco de dados contendo as permissões necessárias, exemplos:
system/senha, “/ as sysdba” ou system/senha@pdb1

destination: Nome do arquivo de coleta que será gerado (.json)


[oracle@db3 dbsat]$ ./dbsat collect "/ as sysdba" /tmp/dbsat/collect

Database Security Assessment Tool version 2.0.1 (December 2017)

This tool is intended to assist in you in securing your Oracle database
system. You are solely responsible for your system and the effect and
results of the execution of this tool (including, without limitation,
any damage or data loss). Further, the output generated by this tool may
include potentially sensitive system configuration data and information
that could be used by a skilled attacker to penetrate your system. You
are solely responsible for ensuring that the output of this tool,
including any generated reports, is handled in accordance with your
company's policies.

Connecting to the target Oracle database...


SQL*Plus: Release 12.2.0.1.0 Production on Mon Jan 22 11:23:41 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

Setup complete.
SQL queries complete.
OS commands complete.
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
DBSAT Collector completed successfully.

Calling /orabin/app/oracle/product/12.2.0.1/dbhome_1/bin/zip to encrypt collect.json...

Enter password:
Verify password:
  adding: collect.json (deflated 85%)
zip completed successfully.

Por padrão o arquivo será gerado e compactado com senha, porem podemos omitir a necessidade de informar uma senha adicionando o parâmetro -n na chamada do dbsat collect, contudo pensando na segurança da informação isto não é recomendado.

Exemplo:

./dbsat collect -n "/ as sysdba" /tmp/dbsat/collect

Importante: Em um ambiente mutitenant rodando o DBSAT collector conectado no container root (CDB$ROOT) significa que as verificações serão realizadas unicamente no container root e não nos pluggable databases. Para verificar os PDBs é preciso rodar o DBSAT collector conectando em cada um dos PDBs separadamente (exemplo: system/senha@pdb1 – system/senha@pdb2).



Executando o DBSAT Reporter:

O DBSAT Reporter tem como pré-requisito que o programa Python 2.6 ou superior esteja instalado no servidor onde será gerado o report. Por padrão ele já vem instalado na maioria dos ambientes UNIX.

Para confirmar a existência e versão do Python execute:

[oracle@db3 dbsat]$ python -V
Python 2.7.5

Caso seja retornado alguma mensagem de comando não encontrado, proceda primeiramente com a instalação do Phyton.

Sintaxe para execução do DBSAT Report:

$ dbsat report [-a] [-n] [-x <section>]  <pathname>

pathname: Caminho e nome do arquivo de coleta gerado pelo DBSAT coletor


Parâmetros suportados pelo Report:

-a : Inclui todas as contas de usuários na análise (Por padrão as contas fornecidas pela Oracle que já estão bloqueadas serão excluídas do relatório pois as conexões com as mesmas já não são mais possível)

-n : Gera o arquivo sem senha, igual ao DBSAT Collect

-x : Exclui as sessões especificadas no parâmetro do relatório final, omitindo o parâmetro todas as sessões serão consideradas. As sessões válidas são:

  • USER : User Accounts
  • PRIV : Privileges and Roles
  • AUTH : Authorization Control
  • CRYPT : Data Encryption
  • ACCESS : Fine-Grained Access Control
  • AUDIT : Auditing
  • CONF : Database Configuration
  • NET : Network Configuration
  • OS : Operating System

Para incluir múltiplas sessões basta separá-las por vírgula ou incluir várias vezes o parâmetro –x sessão:

-x USER,PRIV

ou:

-x USER -x PRIV


Execução do DBSAT Report:

[oracle@db3 dbsat]$ ./dbsat report /tmp/dbsat/collect

Database Security Assessment Tool version 2.0.1 (December 2017)

This tool is intended to assist in you in securing your Oracle database
system. You are solely responsible for your system and the effect and
results of the execution of this tool (including, without limitation,
any damage or data loss). Further, the output generated by this tool may
include potentially sensitive system configuration data and information
that could be used by a skilled attacker to penetrate your system. You
are solely responsible for ensuring that the output of this tool,
including any generated reports, is handled in accordance with your
company's policies.

Archive:  collect.zip
[collect.zip] collect.json password:
  inflating: collect.json
DBSAT Reporter ran successfully.

Calling /usr/bin/zip to encrypt the generated reports...

Enter password:
Verify password:
        zip warning: collect_report.zip not found or empty
  adding: collect_report.txt (deflated 78%)
  adding: collect_report.html (deflated 84%)
  adding: collect_report.xlsx (deflated 3%)
  adding: collect_report.json (deflated 81%)
zip completed successfully.


Ao final da execução foi gerado o arquivo collect_report.zip protegido por senha pois não especifiquei o parâmetro –n, agora quando for necessário acessar os relatórios basta descompactar o arquivo passando a senha informada durante o DBSAT Report.

[oracle@db3 dbsat]$ unzip collect_report.zip
Archive:  collect_report.zip
[collect_report.zip] collect_report.txt password:
  inflating: collect_report.txt
  inflating: collect_report.html
  inflating: collect_report.xlsx
  inflating: collect_report.json
[oracle@db3 dbsat]$ ls -lrt collect_report*
-rw-------. 1 oracle oinstall  21701 Jan 22 11:27 collect_report.xlsx
-rw-------. 1 oracle oinstall 104032 Jan 22 11:27 collect_report.txt
-rw-------. 1 oracle oinstall 121576 Jan 22 11:27 collect_report.json
-rw-------. 1 oracle oinstall 158556 Jan 22 11:27 collect_report.html
-rw-------. 1 oracle oinstall  93596 Jan 22 11:27 collect_report.zip


Relatórios DBSAT:

O DBSAT produz a saída em vários formatos para vários públicos e propósitos. O relatório em HTML, por exemplo, proporciona resultados detalhados em um formato fácil de navegar utilizando-se de links enquanto um relatório em Planilha fornece um resumo de alto nível de cada descoberta, bem como permite a manipulação de colunas adicionando novas para seus objetivos e priorização.

Exemplo de um sumário DBSAT em HTML:




As descobertas são similares ao exemplo a seguir e são compostas pelos seguintes componentes:



Título e ID único da regra:

O ID possui duas partes: o prefixo identifica a seção do relatório e o sufixo identifica a regra específica.


Status:

O status pode ser utilizado para definir a priorização dos indicadores, onde uma descoberta de alto risco requer ações imediatas enquanto uma de baixo risco pode ser programada e ajustada com menos prioridade.

Pass: Nenhum erro ou risco identificado;

Evaluate: Necessário realizar uma análise manual para identificar o grau de risco;

Some Risk: Baixo risco;

Significant Risk: Rico médio;

Severe Risk: Alto risco de segurança;

Opportunity: Oportunidades adicionais de melhorar a segurança utilizando tecnologias adicionais.


Sumário:

Resumo da descoberta.


Detalhes:

Fornece informações detalhadas para explicar a descoberta


Observações:

Explica o padrão usado para avaliar os resultados encontrados. Também pode explicar as ações recomendadas para uma remediação se um risco for relatado.


Referencias:

Elenca a descoberta com base no CIS Oracle Database Benchmark (Center for Internet Security)

 

Referências:

https://docs.oracle.com/cd/E76178_01/#

Oracle Database Security Assessment Tool (DBSAT) (Doc ID 2138254.1)



Anderson Graf, Bacharel em Sistemas de Informação e MBA em Gestão de Banco de Dados Oracle. Trabalha com banco de dados Oracle desde 2009, é Oracle OCP 10g/11g/12c, OCS Linux, Database e Cloud Control. OCE Performance Tuning; OPNCS. É um entusiasta da tecnologia Oracle e autor dos blogs andersondba.com.br e oraclehome.com.br.

Jhonata Euclides Lamim, MBA em Gestão de Banco de Dados Oracle pelo Centro Universitário de Araraquara (UNIARA), Bacharel em Sistemas de Informação pelo Centro Universitário de Brusque (UNIFEBE). Atua como DBA Oracle desde 2010, pela Teiko Soluções em Tecnologia da Informação. É um entusiasta da tecnologia Oracle e autor do blog lamimdba.com.br.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.