Oracle Data Safe e SQL Firewall: conectando um DB System para proteção contra SQL não autorizado


Neste artigo vou mostrar como conectar um DB System ao Oracle Data Safe e utilizar do mesmo para gerenciar o SQL Firewall.

O Oracle Data Safe é um serviço do OCI com foco em segurança de dados, que fornece um conjunto integrado de recursos para proteção de dados. Os recursos incluem Avaliação de Segurança, Avaliação do Usuário, Descoberta de Dados, Mascaramento de Dados, Auditoria de Atividades, Políticas de Segurança, Firewall de SQL e Alertas.

O SQL Firewall é um recurso de segurança de banco de dados incorporado ao kernel do Oracle Database 23ai, que inspeciona as conexões e instruções SQL recebidas, permitindo, registrando ou bloqueando atividades não autorizadas conforme as políticas específicas de cada usuário do banco de dados. 

O SQL Firewall garante que apenas instruções SQL explicitamente autorizadas sejam executadas, bloqueando tentativas de injeção de SQL. Saiba mais sobre o Oracle SQL Firewall.

Atenção: O gerenciamento do Firewall de SQL no Oracle Data Safe só está disponível para bancos de dados de destino do Oracle AI Database 26ai.

1 - Criação do usuário utilizado 

Para ambientes DB System é preciso criar uma conta para que o Oracle Data Safe possa se conectar ao banco de dados. É recomendada a criação de uma conta dedicada e com privilégios mínimos necessários. Você pode conectar tanto um PDB quanto o CDB$ROOT, mas são targets distintos.

Neste exemplo o usuário será criado no PDB onde será ativado o Oracle SQL Firewall. Como requisito a senha deve atender aos criterios abaixo.

  • Pelo menos 14 caracteres
  • Pelo menos uma letra maiúscula
  • Pelo menos uma letra minúscula
  • Pelo menos um número
  •  Pelo menos um caractere especial

Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0

SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORA26AI_PDB1                   READ WRITE NO
SQL> alter session set container=ORA26AI_PDB1;

Session altered.

SQL> CREATE USER DATASAFE_ADMIN
IDENTIFIED BY "SENHAFORTE"
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;   2    3    4

User created.

SQL> GRANT CONNECT, RESOURCE TO DATASAFE_ADMIN;

Grant succeeded.

SQL>
SQL>

2 - Concedendo somente os privilégios necessários ao SQL Firewall

Para ambientes que não sejam autonomous database, a Oracle fornece um script chamado datasafe_privileges.sql que pode ser baixada diretamente no wizard do data safe.



Na próxima tela, selecione o database type, compartment do database, escolha o database e pdb desejado.


Logo abaixo você tem a opção de download do privilege script. Baixe o mesmo e executa no banco de dados, passando o usuário criado anteriormente (DATASAFE_ADMIN).

    
Ao executar o script, será solicitado o usuário, se voce quer conceder ou revogar os privilegios e o tipos de privilégios. 

Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORA26AI_PDB1                   READ WRITE NO
SQL> alter session set container=ORA26AI_PDB1
  2  ;

Session altered.

SQL> @/tmp/datasafe_privileges.sql
Enter value for USERNAME (case sensitive matching the username from dba_users)
DATASAFE_ADMIN
Setting USERNAME to DATASAFE_ADMIN
Enter value for TYPE (grant/revoke)
grant
Setting TYPE to grant
Enter value for MODE (audit_collection/audit_setting/data_discovery/masking/assessment/sql_firewall/all)
all
Setting MODE to all

Granting AUDIT_COLLECTION privileges to "DATASAFE_ADMIN" ...
"ORA_DSCS_AUDIT_COLLECTION"
Created role "ORA_DSCS_AUDIT_COLLECTION"

Granting AUDIT_SETTING privileges to "DATASAFE_ADMIN" ...
"ORA_DSCS_AUDIT_SETTING"
Created role "ORA_DSCS_AUDIT_SETTING"
Granting SQL_FIREWALL privileges to "DATASAFE_ADMIN" ...
"ORA_DSCS_SQL_FIREWALL"
Created role "ORA_DSCS_SQL_FIREWALL"

Granting DATA_DISCOVERY role to "DATASAFE_ADMIN" ...
"ORA_DSCS_DATA_DISCOVERY"
Created role "ORA_DSCS_DATA_DISCOVERY"

Granting MASKING role to "DATASAFE_ADMIN" ...
"ORA_DSCS_MASKING"
Created role "ORA_DSCS_MASKING"

Granting ASSESSMENT role to "DATASAFE_ADMIN" ...
"ORA_DSCS_ASSESSMENT"
Created role "ORA_DSCS_ASSESSMENT"
Disconnected from Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0
[oracle@oracle26ai tmp]$

Na console do Data Safe, coloque o usuário e senha e clique em next.


Na tela seguinte aparecem os dados do private endpoint. Caso ele não exista será necessário que seja criado uma vez que normalmente um DB System possui apenas endereço privado. No meu exemplo o database está na subnet pública.


Caso exista um ambiente data guard, ele pode ser selecionado.

Na próxima etapa serão selecionadas as security list utilizadas.


E por ultimo será registrado o database.



Pata gerenciar e habilitar o SQL Firewall pelo Data Safe, basta acessar Oracle AI Database, Data Safe - Database Security.


Posteriormente, SQL Firewall.


Em target summary é possível validar o status do sql firewall, ativar e desativar o mesmo e fazer todo o gerenciamento que é feito diretamente via procedure DBMS_SQL_FIREWALL.


Em SQL collections é possível configurar a criação da captura dos comandos para um usuário específico na opção create and start SQL collection.

Neste exemplo, será ativada a coleta para o usuário FW_DEMO_APP.





Ativada a coleta, a mesma deve rodar pelo período ue captura um workload suficientemente representativo da aplicação, até que deixem de aparecer novos SQLs únicos e novos contextos legítimos de conexão.

A Oracle orienta monitorar a coleta até que o gráfico de Unique SQL Statements se estabilize, idealmente chegando a zero novos SQLs únicos. A documentação ressalta que isso pode levar de vários dias a várias semanas. Também é necessário observar a estabilização de Client IP, Client OS User e Client Program.

Em SQL collection insights é possível acompanhar algumas informações das coletas em gráficos que apresentam a quantidade de sql identificados, quantidade de Client IP, Client OS user e client program.


Supondo que a coleta tenha rodado pelo período necessário. O próximo passo é parar a coleta e gerar a policy.




A Oracle recomenda justamente revisar a coleta, gerar a policy e escolher entre Observe (Allow) and log violations ou Block and log violations. Também é possível habilitar Audit for violations. Depois, o Data Safe permite adicionar novos SQLs à política a partir de uma nova coleta ou diretamente do violation log.


Feita a validação, será feito o deploy e enforce. Onde deverá ser selecionado o tipo de validação, se vai ser apenas pelos comandos sql, apenas pelo contexto ou por ambos, qual a ação em caso de violação (bloqueia e registra a violação ou permite e registra a violação) e a ativação da auditoria para violações.


Neste exemplo vou ativar no modo bloqueio para simular o comportamento na aplicação, validando tanto o contexto quanto o comando sql executado.


Fazendo upload: 107068 de 107068 bytes.

Com a politica ativa, vou simular uma conexão com o usuário FW_DEMO_APP através do SQL Developer, no qual nem o program nem o IP estão na allow list.


Testando pelo sqlplus diretamente no servidor de banco de dados.


Na console do Oracle Data Safe é possível acompanhar também as violações.

A integração entre Oracle Data Safe e SQL Firewall fornece uma abordagem bastante interessante para reduzir o risco associado a SQL injection, abuso de credenciais e utilização anômala de contas de aplicação.

O SQL Firewall continua executando dentro do Oracle Database, mas o Data Safe fornece uma interface centralizada para praticamente todo o ciclo de vida: habilitação, coleta, análise do workload, geração da allowlist, deployment, enforcement e investigação das violações.

Fontes: 

  1. Data Safe
  2. Protegendo seu Banco de Dados com o SQL Firewall do Oracle 23ai/26ai
  3. Oracle SQL Firewall

Comentários