Oracle SQL Firewall: ¿El fin de las inyecciones SQL?

Las aplicaciones pueden incorporar mecanismos de protección frente a ataques, pero una consulta SQL maliciosa que consigue llegar hasta la base de datos sigue representando un riesgo. Oracle SQL Firewall introduce una capa adicional de seguridad directamente en el motor de Oracle Database, permitiendo únicamente las sentencias que forman parte del comportamiento esperado de cada aplicación.

Para entender mejor cómo funciona, vamos a poner un ejemplo.

Imaginemos una aplicación desarrollada hace diez años. El código sigue funcionando, pero nunca fue diseñado pensando en las amenazas actuales. Un atacante consigue introducir una sentencia SQL manipulada a través de un formulario web. El servidor web no detecta nada anómalo y la consulta llega a Oracle Database.

En versiones tradicionales, la base de datos ejecutaría esa sentencia si el usuario tiene permisos suficientes. Con Oracle SQL Firewall, la situación cambia: antes de ejecutar la consulta, Oracle verifica si esa sentencia forma parte del comportamiento esperado de la aplicación. Si no coincide con el perfil aprendido, puede registrarla, generar una alerta o bloquearla.

¿Qué es Oracle SQL Firewall?

Oracle SQL Firewall es un mecanismo de protección integrado en el motor de Oracle Database que analiza las sentencias SQL antes de su ejecución. Su objetivo es permitir únicamente el tráfico SQL que coincide con el comportamiento previamente autorizado de una aplicación o usuario, reduciendo el riesgo de ataques como SQL Injection, abuso de privilegios o ejecución de consultas no previstas.

Es importante remarcar que no sustituye a un WAF, sino que añade una última línea de defensa dentro de la propia base de datos.

Esquema de funcionamiento de Oracle SQL Firewall en Oracle Database 23ai

Paso 1. Verificar los prerrequisitos

Antes de comenzar, comprueba:

  • Oracle Database 23ai Enterprise Edition.
  • Usuario con el rol SQL_FIREWALL_ADMIN.
  • Una aplicación o usuario de prueba.
  • Un entorno no productivo para realizar el aprendizaje inicial.

Paso 2. Verificar el estado del SQL Firewall

Consultar si ya está habilitado:

SELECT *
FROM DBA_SQL_FIREWALL_STATUS;
Si aparece deshabilitado:
BEGIN
   DBMS_SQL_FIREWALL.ENABLE;
END;
/

Oracle permite habilitar SQL Firewall tanto en el CDB como en PDBs individuales.

Paso 3. Crear el usuario de pruebas

CREATE USER APP_TEST IDENTIFIED BY Oracle123;
GRANT CREATE SESSION TO APP_TEST;
GRANT CREATE TABLE,
      CREATE VIEW,
      CREATE PROCEDURE
TO APP_TEST;

Crear una tabla sencilla:

CREATE TABLE clientes
(
 id NUMBER PRIMARY KEY,
 nombre VARCHAR2(100)
);

INSERT INTO clientes VALUES (1,'Juan');
COMMIT;

Paso 4. Iniciar el modo Learning

Aquí comienza el entrenamiento del Firewall.

BEGIN
DBMS_SQL_FIREWALL.START_CAPTURE(
username => 'APP_TEST'
);
END;
/

A partir de este momento Oracle empieza a registrar todas las sentencias SQL ejecutadas por ese usuario para construir el perfil de comportamiento.

Paso 5. Ejecutar la aplicación

Ahora es cuando debemos utilizar la aplicación normalmente.

Por ejemplo:

SELECT *
FROM clientes
WHERE id=:id;

Después:

UPDATE clientes
SET nombre=:nombre
WHERE id=:id;

Luego:

INSERT INTO clientes
VALUES(:id,:nombre);

Durante varios días (o un periodo representativo) Oracle irá aprendiendo el patrón normal de consultas.

Recomendación: Ejecuta también procesos batch, cierres diarios y tareas programadas para que formen parte del comportamiento permitido.

Paso 6. Finalizar la captura

BEGIN
DBMS_SQL_FIREWALL.STOP_CAPTURE(
username=>'APP_TEST'
);
END;
/

Paso 7. Generar la Allow List

Aquí Oracle transforma las capturas en una política autorizada.

BEGIN
DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST(
username=>'APP_TEST'
);
END;
/

La Allow List contendrá:

  • SQL permitido.
  • Contextos autorizados (si se configuran).
  • Información utilizada durante el aprendizaje.

Paso 8. Revisar la política

Consultar las listas creadas:

SELECT *
FROM DBA_SQL_FIREWALL_ALLOW_LISTS;

También es recomendable revisar las vistas DBA_SQL_FIREWALL_% para inspeccionar capturas, registros de violaciones y estado de las políticas.

Paso 9. Activar Enforcement

Ahora llega el momento importante.

BEGIN
DBMS_SQL_FIREWALL.ENABLE_ALLOW_LIST(
username=>'APP_TEST',
enforce=>DBMS_SQL_FIREWALL.ENFORCE_ALL,
block=>TRUE
);
END;
/

Con esta configuración Oracle:

  • verifica SQL,
  • verifica contexto,
  • bloquea cualquier violación.

Paso 10. Simular un SQL Injection

Consulta normal:

SELECT *
FROM clientes
WHERE id=1;

Consulta manipulada:

SELECT *
FROM clientes
WHERE id=1
OR 1=1;

Como esa sentencia nunca fue aprendida, SQL Firewall la considerará una violación de la política. Si block=>TRUE, la ejecución será rechazada; si block=>FALSE, se permitirá pero quedará registrada como violación.

Paso 11. Revisar los eventos

Consultar los registros generados:

SELECT *

FROM DBA_SQL_FIREWALL_VIOLATIONS;

Aquí podremos identificar:

  • Usuario.
  • Fecha.
  • SQL ejecutado.
  • Tipo de violación.
  • Acción tomada.

Paso 12. Exportar la configuración

Muy útil para mover la política entre DEV, PRE y PRO.

DECLARE
   l_clob CLOB;
BEGIN
   DBMS_LOB.CREATETEMPORARY(l_clob, TRUE);
   DBMS_SQL_FIREWALL.EXPORT_ALLOW_LIST(
      username=>'APP_TEST',
      allow_list=>l_clob);

END;
/

La API permite exportar la Allow List en formato JSON para reutilizarla o migrarla entre entornos.

Buenas prácticas para entornos empresariales

No recomendaría activar SQL Firewall directamente en producción. Un despliegue más seguro sería:

  1. Activar SQL Firewall en modo aprendizaje.
  2. Ejecutar el ciclo completo del negocio (procesos diarios, mensuales y cierres).
  3. Revisar manualmente la Allow List generada.
  4. Habilitar primero block => FALSE para registrar violaciones sin interrumpir el servicio.
  5. Analizar los eventos durante varios días.
  6. Cambiar finalmente a block => TRUE cuando la política esté validada.

Conclusión

La seguridad de una base de datos no depende de una única funcionalidad, sino de la combinación de buenas prácticas, una configuración adecuada y un mantenimiento continuo. Oracle SQL Firewall supone un importante avance en la protección de Oracle Database 23ai, pero su eficacia dependerá de una implantación correcta y de una revisión periódica de las políticas definidas.

En GPS Open Source ayudamos a las organizaciones a implantar nuevas funcionalidades de Oracle Database, realizar auditorías de seguridad y optimizar la configuración de sus entornos para sacar el máximo partido a cada versión de Oracle.

👉 Conoce nuestros servicios de Consultoría Oracle

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *