Mensagens

A mostrar mensagens de outubro, 2023

DBMS_SQL_FIREWALL - Firewall dentro da Base de Dados (Parte IV)

Este será o ultimo texto sobre o SQL firewall. Irei ver como impedir um possível ataque de SQL injection através do uso da SQL Firewall Criei uma stored procedure que será usada nos diferentes testes, quer de execução quer de tentativa de SQL Injection e usarei ainda a opção de top_level_only a false para verificar o que é capturado com essa opção. Vou começar por criar um procedimento simples, no schema HR, que executa alguns selects depois de receber um parâmetro de entrada, devolvendo um valor relacionado. O execute immediate do final do procedimento está apenas como exemplo para ser usado com o top_level_only a false e fazer alguns testes.  create or replace procedure empname(lst_name in varchar2) is comando varchar2(2000); type c_ref is ref cursor; c c_ref; ult_nome employees.last_name%type; Begin comando :='select first_name from hr.employees '|| 'where last_nam...

DBMS_SQL_FIREWALL - Firewall dentro da Base de Dados (Parte III)

 No post anterior , vimos a possibilidade de restringir/autorizar a execução de SQL a um utilizador através de listas criadas numa captura de actividade. Durante a captura não são apenas registados os comandos de SQL, mas também outros dados, o endereço de IP a partir do qual o SQL foi executado, o programa a partir do qual foi executado o SQL e ainda o utilizador de sistema operativo que lançou esse programa. Este 3 dados adicionais são parte dos contextos que podem ser usados pela SQL Firewall. Além de restringir a execução de comandos de SQL, é possível limitar a execução através destes contextos, limitar o acesso a partir de um IP ou de um utiliazdor de SO ou até de uma aplicação especifica. Quando analisamos a lista criada durante a captura vemos que já existe essa informação armazenada. Podemos ver isso na view dba_sql_firewall_capture_logs . SQL> select username, command_type, client_program, os_user, ip_address from dba_sql_firewall_capture_logs; US...

DBMS_SQL_FIREWALL - Firewall dentro da Base de Dados (Parte II)

Depois de no primeiro post ter configurado a Firewall e iniciado a captura, vou neste texto criar actividade para que seja capturada e usada para restringir a execução de SQL com o firewall. Para gerar actividade vou usar uns quantos comandos de sql simples a serem executados numa ou mais sessões do utilizador HR. select * from hr.employees; select employee_id, first_name, salary from hr.employees; select * from hr.departments; select department_name, manager_id from hr.departments; select count(*) from sh.sales;   Estes comandos incidem em tabelas do utilizador HR, mas também numa do utilizador SH sobre a qual o HR tem privilégios de leitura. Depois de executar este comandos numa sessão do utilizador HR, abrimos uma sessão do utilizador FWALLADMIN, que é o administrador do SQL_Firewall e vamos validar o que foi capturado através da view dba_sql_firewall_capture_logs . SQL> select * from dba_sql_firewall_capture_logs; USERNAME ...

DBMS_SQL_FIREWALL - Firewall dentro da Base de Dados (Parte I)

  O SQL firewall é uma opção que nos permite detectar, bloquear e criar log sobre actividades anormais de SQL e de alguns contextos das sessões. No fundo permite que consigamos detectar e bloquear com mais facilidade actividades suspeitas na nossa base de dados. Esta opção é introduzida na versão 23c da base de dados Oracle em forma de package ( DBMS_SQL_FIREWALL ). Nesta primeira parte de diferentes textos, vou falar sobre como fazer o setup/configuração da SQL Firewall. Vou começar por criar um novo user que será o administrador do SQL Firewall. Para isso existe um role chamado SQL_FIREWALL_ADMIN que contém todas as permissões necessárias a essa tarefa. Existe um outro role, SQL_FIREWALL_VIEWER, que permite ter utilizadores mais orientados à auditoria e que terão acesso aos dados gerados pelo firewall para poderem analisar. SQL> create user fwalladmin identified by oracle; SQL> grant create session, sql_firewall_admin to fwalladmin; ...