Slide 1

Slide 1 text

LAOUC Community Tour 2024 2 a 23 de Agosto 2024 Haga que su base de datos Oracle sea invisible para los atacantes

Slide 2

Slide 2 text

Database Reliability Engineering MAA ⁘ RAC ⁘ RMAN Data Guard ⁘ Sharding ⁘ Partitioning Information Lifecycle Management Exadata & Engineered Systems Database Modernization Upgrades ⁘ Patching ⁘ Migrations Cloud ⁘ Hybrid Automation DevOps ⁘ IaC ⁘ Containers ⁘ Terraform Vagrant ⁘ Ansible Observability AHF ⁘ TFA ⁘ CHA ⁘ CHM

Slide 3

Slide 3 text

www.viscosityna.com @ViscosityNA Oracle on Docker Running Oracle Databases in Linux Containers Free sample chapter: https://oraclesean.com

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

km mi Mexico 3,584 2,227 Guatemala 1,056 656 Costa Rica 854 531 Panama 1,813 1,127 Chile 4,985 3,098 Brazil 2,617 1,626 Uruguay 1,567 974 Argentina 221 137 Paraguay 1,037 644 Home 9,753 6,061 ------ ------ 27,487 17,081 ¡Me gustan los aviones! ¡Me gustas tú! ¡Me gusta viajar! ¡Me gustas tú! ~ Manu Chao

Slide 6

Slide 6 text

www.viscosityna.com @ViscosityNA Desafios de Multitenant

Slide 7

Slide 7 text

www.viscosityna.com @ViscosityNA Sin embargo, PDB aísla servicios/esquemas dentro de un CDB común: Los vecinos ruidosos y el aprovisionamiento excesivo de recursos afectan el rendimiento de PDB •No Exadata: es posible cierta mitigación a través del Administrador de recursos •Exadata: Resource Manager también puede moderar la E/S Desafios de Multitenant

Slide 8

Slide 8 text

www.viscosityna.com @ViscosityNA Las violaciones de seguridad en un PDB ponen a otros en riesgo •JVM, ExtProc, DBMS_SCHEDULER pueden ejecutar comandos/scripts del sistema operativo •Escape de Shell a través de SQL*Plus, proceso de Oracle comprometido •Los directorios de Oracle de libre escritura son vulnerables Desafios de Multitenant

Slide 9

Slide 9 text

www.viscosityna.com @ViscosityNA Manifestación: Oracle multiinquilino ataque y escalada

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

www.viscosityna.com @ViscosityNA ¿Qué pasaría si pudiéramos aislar aún más los PDB a nivel del sistema operativo? Limitar los recursos que son visibles y accesibles dentro de cada PDB •Evite que los PDB excedan los límites de recursos por PDB Limitar los comandos que se pueden ejecutar dentro de cada PDB •Evite el abuso de funciones privilegiadas o comprometidas •Prevenir escaladas en caso de fuga de proyectiles Desafios de Multitenant

Slide 13

Slide 13 text

www.viscosityna.com @ViscosityNA Controlar el acceso a directorios y archivos dentro de cada PDB •Evitar el acceso a directorios críticos/innecesarios •Evite que los usuarios cambien el sistema de archivos incluso si tienen permiso Desafios de Multitenant

Slide 14

Slide 14 text

www.viscosityna.com @ViscosityNA Contenedores

Slide 15

Slide 15 text

www.viscosityna.com @ViscosityNA Containers isolate processes via: Contenedores •Espacios de nombres (Namespaces) •Capacidades (Capabilities) •Grupos de control / cgroup (Control Groups) •SE Linux •Modo de computatión seguro / seccomp (Secure Computing Mode) •Montajes bind (Bind Mounts) •Pivotante root (Pivot Root) Las con fi guraciones/abstracciones del contenedor se guardan en un directorio protegido. En Docker: /var/lib/docker.

Slide 16

Slide 16 text

www.viscosityna.com @ViscosityNA Limitar los recursos del sistema que un proceso puede ver/usar Espacios de nombres •cgroup •IPC - Comunicación entre procesos (Inter-Process Communication) •montar (mount) •red (network) •pid - procesos (processes) •tiempo (time) •usario (user) •UTS - Sistema de tiempo compartido unix (Unix Timesharing System) Los espacios de nombres se pueden compartir y/o anidar dentro de otros espacios de nombres.

Slide 17

Slide 17 text

www.viscosityna.com @ViscosityNA Gestionar y limitar el uso de recursos entre grupos de procesos Grupos de control (cgroup) •CPU •Memoria (Memory) •Red (Network) •SecComp per fi l •Capacidades (Capabilities)

Slide 18

Slide 18 text

www.viscosityna.com @ViscosityNA Gestionar y limitar el uso de recursos entre grupos de procesos Grupos de control (cgroup) Espacios de nombres ≠ grupos de control •Los grupos de control gestionan el consumo de recursos para grupos de procesos •Los espacios de nombres aíslan procesos dentro de un entorno distinto •Los espacios de nombres pueden incluir grupos de control •El espacio de nombres cgroup gestiona la visibilidad/ acceso a los grupos de control

Slide 19

Slide 19 text

www.viscosityna.com @ViscosityNA Modo de computación segura (seccomp) seccomp permite/impide selectivamente la ejecución de comandos utilizando BPF (Berkeley Packet Filter) BPF funciona con llamadas al sistema realizadas por un proceso. • Comprueba las llamadas al sistema con listas negras/listas blancas. • Bloquea las llamadas en la lista negra (devuelve un error o fi naliza el proceso de llamada). • Previene actividades peligrosas que podrían estar permitidas por las capacidades. • Ejemplo: las capacidades pueden permitir dejar de compartir, pero seccomp puede bloquear su llamada al sistema.

Slide 20

Slide 20 text

www.viscosityna.com @ViscosityNA Vincular montajes/pivotar raíz La raíz dinámica crea un sistema de archivos raíz modi fi cado para un proceso. •Compartir directorios comunes. •Excluir directorios. •Redirigir y/o cambiar el nombre de directorios. •Controlar las propiedades de lectura/escritura. Raíz de pivote ≅ chroot. Vincular montaje ≅ ln.

Slide 21

Slide 21 text

www.viscosityna.com @ViscosityNA | ├── dev ├── etc ├── home ├── lib ├── lib64 ├── mnt ├── opt ├── proc | ├── sys ├── tmp ├── usr └── var ├── bin -> usr/bin ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── mnt ├── opt ├── proc ├── sbin -> usr/sbin ├── sys ├── tmp ├── usr └── var Vincular montajes/pivotar raíz Huésped Contenedor

Slide 22

Slide 22 text

www.viscosityna.com @ViscosityNA Cómo los contenedores frustran a los atacantes •Vincular montajes/pivotar raíz: reubicar archivos/sistemas de archivos, modi fi car permisos. •seccomp: reduce la super fi cie de ataque, evita llamadas al sistema prohibidas. •cgroup: controla el acceso a los recursos, mitiga DDoS, proporciona QoS. •Capacidades: Limite la disponibilidad de comandos a través de per fi les. •Espacios de nombres: cree entornos aislados para procesos.

Slide 23

Slide 23 text

www.viscosityna.com @ViscosityNA Capas defensivas de contenedores •Vincular montajes/pivotar raíz: reubicar archivos/sistemas de archivos, modi fi car permisos. •seccomp: reduce la super fi cie de ataque, evita llamadas al sistema prohibidas. •cgroup: controla el acceso a los recursos, mitiga DDoS, proporciona QoS. •Capacidades: Limite la disponibilidad de comandos a través de per fi les. •Espacios de nombres: cree entornos aislados para procesos. raíz pivote seccomp cgroup Capacidades Espacio de nombre Proceso

Slide 24

Slide 24 text

www.viscosityna.com @ViscosityNA DbNest - Teoría

Slide 25

Slide 25 text

www.viscosityna.com @ViscosityNA Contenedores de SO para bases de datos de contenedor (CDB) y conectables (PDB) DbNest - Teoría •El CDB existe dentro de un contenedor raíz de "solo recursos". •El contenedor raíz posee los procesos en segundo plano de la base de datos. •Cada PDB obtiene un contenedor anidado bajo la raíz de CDB que incluye: •Un sistema de archivos raíz (/) parcial y montado en un pivote. •ORACLE_BASE, ORACLE_HOME, etc. parciales y montados en pivotes. •Los archivos del PDB (datos, diagnóstico, etc.) •Los procesos en primer plano del PDB. •Acceso a recursos limitado a través de seccomp/capabilities.

Slide 26

Slide 26 text

www.viscosityna.com @ViscosityNA DbNest - Teoría Cada contenedor PDB se ejecuta bajo aislamiento de espacio de nombres. •mount: un sistema de archivos raíz compartido y estrictamente limitado. •mount: directorios exclusivos de PDB para datos, diagnósticos, etc. •pid: los procesos PDB se asignan bajo su propio espacio de nombres pid. cgroups controlan el consumo de recursos dentro de cada contenedor PDB. •Controle la CPU para cumplir con la calidad del servicio •Asignar CPU por recuento o por ID •Establecer umbrales de programación en tiempo real y de uso legítimo •Establezca memoria máxima, intercambio, etc., para mitigar QoS y [D]Dos.

Slide 27

Slide 27 text

www.viscosityna.com @ViscosityNA DbNest hace que los PDB sean "invisibles" entre sí DbNest - Teoría Los atacantes no pueden escapar del contenedor y llegar al sistema operativo. Si pudieran, todavía no hay: •...binarios para ejecutar, •...shell para ejecutar comandos, •...capacidades para matar o bifurcar procesos, •... privilegios para agregar o modi fi car sistemas de archivos montados en pivotes, •...red para ex fi ltración, •...evidencia del CDB o cualquier otro PDB. Opcionalmente, limite la CPU, la memoria, la red y la E/S para garantizar la QoS en toda la CDB y prevenir/limitar los ataques de estilo DoS.

Slide 28

Slide 28 text

www.viscosityna.com @ViscosityNA Invisibles > Invencibles >

Slide 29

Slide 29 text

www.viscosityna.com @ViscosityNA Práctica con DbNest

Slide 30

Slide 30 text

www.viscosityna.com @ViscosityNA Servicio de base de datos base Oracle 23ai Entorno de prueba de DbNest •OEL 8.10 •Conveniente, pero no hay opción para elegir el sistema operativo. •Nodo único •Almacenamiento: LVM y ASM

Slide 31

Slide 31 text

www.viscosityna.com @ViscosityNA $ORACLE_HOME/bin/dbnest Interfaz de línea de comando dbnest •Inicializar y destruir entornos de nidos •Crear, validar, abrir, cerrar, actualizar y eliminar nidos •Obtenga información sobre los nidos y el entorno de los nidos •Entrar en un nido •Enviar/ejecutar comandos en un nido •Gestionar subrecursos dentro de los nidos Algunos comandos no parecen funcionar.

Slide 32

Slide 32 text

www.viscosityna.com @ViscosityNA ¡La documentación de Oracle DbNest está incompleta! Documentación •No menciona los requisitos previos para nscd y sssd •Solo hay ayuda básica disponible para la CLI de dbnest •La sintaxis y las opciones del comando CLI no se enumeran

Slide 33

Slide 33 text

www.viscosityna.com @ViscosityNA sudo yum -y update # Evite el error ncsd "DB version too old": sudo rm -f /var/lib/sss/db/cache_implicit_files.ldb sudo yum -y install nscd sudo systemctl enable nscd.service sudo systemctl restart nscd sudo systemctl status nscd Actualiza yum, instala nscd

Slide 34

Slide 34 text

www.viscosityna.com @ViscosityNA ● sssd.service - System Security Services Daemon Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled) Active: failed (Result: exit-code) Main PID: 1533 (code=exited, status=4) Starting System Security Services Daemon... SSSD couldn't load the configuration database [1432158324]: File ownership and permissions check failed sssd.service: Main process exited, code=exited, status=4/NOPERMISSION sssd.service: Failed with result 'exit-code'. Failed to start System Security Services Daemon. Error del SSSD (Parte 1)

Slide 35

Slide 35 text

www.viscosityna.com @ViscosityNA # Permisos incorrectos en /etc/sssd/sssd.conf! -rw-r--r-- 1 root root 371 Jun 4 05:46 /etc/sssd/sssd.conf sudo chmod 600 /etc/sssd/sssd.conf sudo sss_cache -E sudo systemctl restart sssd # Nuevo error al iniciar sssd: Job for sssd.service failed because the control process exited with error code. Error del SSSD (Parte 2)

Slide 36

Slide 36 text

www.viscosityna.com @ViscosityNA # sudo systemctl status sssd ● sssd.service - System Security Services Daemon Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled) Active: failed (Result: exit-code) Process: ExecStart=/usr/sbin/sssd -i (code=exited, status=4) Main PID: (code=exited, status=4) Starting System Security Services Daemon... NSCD socket was detected and seems to be configured to cache some of the databases controlled by SSSD [passwd,group,netgroup,services]. SSSD couldn't load the configuration database: No domain is enabled Error del SSSD (Parte 2)

Slide 37

Slide 37 text

www.viscosityna.com @ViscosityNA # Reemplace la configuración sssd para usar un dominio local: sudo cat << EOF > /etc/sssd/sssd.conf [sssd] enable_files_domain = true [domain/local] id_provider = files EOF Error del SSSD (Parte 2)

Slide 38

Slide 38 text

www.viscosityna.com @ViscosityNA cat << EOF >> $ORACLE_HOME/network/admin/listener.ora DEDICATED_THROUGH_BROKER_LISTENER=ON # Added for DbNest EOF Agregar corredor dedicado al oyente

Slide 39

Slide 39 text

www.viscosityna.com @ViscosityNA -- Utilice un corredor dedicado: alter system set use_dedicated_broker=TRUE scope=both; -- ¡Cree un archivo pfile para solucionar problemas! create pfile='/home/oracle/init${ORACLE_SID}.ora' from spfile; -- Permitir dbnest: alter system set dbnest_enable=cdb_resource_pdb_all scope=spfile; -- Reanudar: shutdown immediate startup Configuración de base de datos

Slide 40

Slide 40 text

www.viscosityna.com @ViscosityNA Creating DB Nest instance statvfs /var/tmp/.oracle/dbnest_oracle/stage_ORCLCDB : flag = 3076 /var/tmp/.oracle/dbnest_oracle/stage_ORCLCDB not compatible for dev dir Failed to find compatible DB Nest stage devdir dbnest_detach_int : delete = 1 KJHA:2phase 010 opi_error:62258 Fallo de inicio (Parte 1)

Slide 41

Slide 41 text

www.viscosityna.com @ViscosityNA # ls -l /var/tmp/.oracle lrwxrwxrwx 1 root root 16 Jun 12 17:25 /var/tmp/.oracle -> /var/lib/oracle/ /var/lib/oracle/dbnest_oracle: drwx------ 2 oracle oinstall 4096 Jun 12 18:54 stage_ORCLCDB # Creó un nuevo NEST_HOME: mkdir -p $NEST_BASE/dbnest_oracle Fallo de inicio (Parte 1)

Slide 42

Slide 42 text

www.viscosityna.com @ViscosityNA # dbnest init --stage $NEST_HOME Nest instance initialized # dbnest list ----------------------------------------------------------------------- Id : Nest : Parent : : Tag : State ----------------------------------------------------------------------- Number of active nest namespaces = 0 ----------------------------------------------------------------------- Solución: inicialice DbNest manualmente

Slide 43

Slide 43 text

www.viscosityna.com @ViscosityNA ksns_proc_validate(): Invalid nest found for pdbid = 3 Incident 15095 created, dump file: .../ORCLCDB_ora_88770_i15095.trc ORA-00603: ORACLE server session terminated by irrecoverable error ORA-62270: connection outside PDB nest # Solución: Conéctese con contraseña. sqlplus sys/ as sysdba Fallo de inicio (Parte 2)

Slide 44

Slide 44 text

www.viscosityna.com @ViscosityNA # dbnest list ------------------------------------------------------------------------------ Id : Nest : Parent : : Tag : State ------------------------------------------------------------------------------ 1 : ORA_ORCLCDB : : ORA_ORCLCDB : OPEN Net State : Namespace State : (pid=0,cnid=402653,pnid=402653,no namespace,type=0x0) Resources : (cpu=0) Property enabled : resources Seccomp status : (level=none) FS Isolation : (disabled) ------------------------------------------------------------------------------ ... ¡DbNest creado!

Slide 45

Slide 45 text

www.viscosityna.com @ViscosityNA ... ------------------------------------------------------------------------------ Id : Nest : Parent : : Tag : State ------------------------------------------------------------------------------ 2 : PDB00002 : ORA_ORCLCDB : PDB$SEED (uid=882) : OPEN Net State : Namespace State : (pid=0,cnid=402653,pnid=402653,no namespace,type=0x0) Resources : (cpu=0) Property enabled : resources Seccomp status : (level=none) FS Isolation : (disabled) -------------------------------------------------------------------------------- ... ¡DbNest creado!

Slide 46

Slide 46 text

www.viscosityna.com @ViscosityNA ... -------------------------------------------------------------------------------- Id : Nest : Parent : : Tag : State -------------------------------------------------------------------------------- 3 : PDB00003 : ORA_ORCLCDB : PDB1 (uid=406) : OPEN Net State : Namespace State : (pid=3088,cnid=402653,pnid=402653,type=0x7) Resources : (cpu=0) Property enabled : namespaces,resources Seccomp status : (level=strict1) FS Isolation : (default-config) -------------------------------------------------------------------------------- Number of active nest namespaces = 3 -------------------------------------------------------------------------------- ¡DbNest creado!

Slide 47

Slide 47 text

www.viscosityna.com @ViscosityNA PARAMETER VALUE DEFAULT DESCRIPTION ---------------------- -------------------- ------- ------------------------------ _dbnest_enable CDB_RESOURCE_PDB_ALL NONE DbNest enable _instance_dbnest_name Instance DbNest Name _dbnest_pdb_scm_level STRICT1 STRICT1 PDB SCM Level _dbnest_pdb_fs_type DEFAULT DEFAULT PDB FS Type _dbnest_pdb_fs_conf PDB Filesystem configuration _dbnest_pdb_scm_conf PDB SCM configuration _dbnest_stage_dir Staging directory configuration _dbnest_resource_opts 0 0 DbNest - resource options _dbnest_skip_fed_root TRUE TRUE Fed root is skipped so CDB nest is root of all pdbs _dbnest_pdb_network_ip PDB network ip configuration Parámetros de DbNest

Slide 48

Slide 48 text

www.viscosityna.com @ViscosityNA # $NEST_HOME/stage_ORCLCDB/ORA_ORCLCDB/PDB00003 fs.conf ipc log root_nest Configuración del sistema de archivos PDB Nest

Slide 49

Slide 49 text

www.viscosityna.com @ViscosityNA /usr/lib /usr/lib64 /lib /lib64 /tmp /etc /sys /var/tmp /var/lib /var/lib optional /var/run/nscd /var/run/nscd optional /var/lib/sss /var/lib/sss optional /dev dbnest-dev /dev/shm /sys /dev/hugepages /dev/hugepages optional /mnt/hugepages /mnt/hugepages optional /u02/nfsad1/ext_data /u02/nfsad1/ext_data optional /dev/oracleasm /dev/oracleasm optional /dev/oracleafd /dev/oracleafd optional /opt/oracle /opt/oracle optional /u01/app/oracle /u01/app/oracle/product/23.0.0/dbhome_1 /u01/app/oracle/admin/ORCL/dpdump/16E9F /u01/app/oracle/admin/ ORCL/dpdump/16E9F optional /u01/app/oracle/dbnest_oracle/stage_ORCLCDB/ORA_ORCLCDB/PDB00003 /u01/app/oracle/dbnest_oracle/stage_ORCLCDB/dbnest_dev /u01/app/oracle/dbnest_oracle/stage_ORCLCDB/dbnest_dev_no_perms fs.conf: Configuración del sistema de archivos PDB Nest

Slide 50

Slide 50 text

www.viscosityna.com @ViscosityNA

Slide 51

Slide 51 text

www.viscosityna.com @ViscosityNA

Slide 52

Slide 52 text

www.viscosityna.com @ViscosityNA DbNest - El futuro

Slide 53

Slide 53 text

www.viscosityna.com @ViscosityNA Tecnología prometedora con muchas aplicaciones potenciales DbNest - El futoro Lo que falta o se necesita: •Documentación •Mejoras en la CLI •Ayuda contextual •Agiliza la interfaz •Integre conjuntos de comandos comunes/complejos •Ejemplos de implementación y prueba prácticos y fáciles de usar •Arquitecturas de referencia y mejores prácticas

Slide 54

Slide 54 text

www.viscosityna.com @ViscosityNA Es poco probable que los clientes utilicen DbNest de forma aislada DbNest - El futoro •Operaciones de PDB: agregar, quitar, conectar, desconectar •AHF, Orachk •Enterprise Manager •Data Guard, DGPDB •GoldenGate •Data Vault, Data Safe, TDE, cifrado, DB fi rewall •MAA: RAC, TAC, FAN, reequilibrio de conexiones, grupos de conexiones •Exadata, ODA •EBS, JDE, etc. •Herramientas y utilidades de terceros Oracle necesita ofrecer claridad sobre la integración de DbNest con otras tecnologías:

Slide 55

Slide 55 text

www.viscosityna.com @ViscosityNA Mejore la disponibilidad con soporte para actualizaciones dinámicas DbNest - El futoro •La modi fi cación de recursos (CPU, límites de memoria) requiere un rebote de la base de datos •El parámetro dbnest_pdb_fs_conf (lista blanca de acceso al sistema de archivos) es solo sp fi le •Guión: •Agregue un nuevo directorio para Data Pump, Tablas externas, SQL*Loader; •Los usuarios de la PDB no pueden acceder al nuevo directorio sin un rebote de la base de datos. •¡Implementar cambios simples en una PDB afecta la disponibilidad de todos!

Slide 56

Slide 56 text

www.viscosityna.com @ViscosityNA La acción comunitaria es necesaria para llevar el producto a la madurez DbNest - Llamado a la acción •Explora el producto. •Cree SR para errores. •Cree y comparta la automatización de la implementación. •Crear solicitudes de mejora para las de fi ciencias. •Comparta sus hallazgos a través de publicaciones de blogs y presentaciones.

Slide 57

Slide 57 text

www.viscosityna.com @ViscosityNA

Slide 58

Slide 58 text

www.viscosityna.com @ViscosityNA

Slide 59

Slide 59 text

www.viscosityna.com @ViscosityNA Preguntas y contactame [email protected] https://linktr.ee/oraclesean

Slide 60

Slide 60 text

No content