Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Haga que su base de datos Oracle sea invisible ...

Haga que su base de datos Oracle sea invisible para los atacantes

Una de las principales preocupaciones para las cargas de trabajo de bases de datos que se ejecutan en nubes públicas es la amenaza de compromiso. Las vulnerabilidades en la infraestructura de los proveedores, los recursos mal configurados y los sistemas desprotegidos plantean amenazas existenciales. Los datos empresariales son el premio mayor, lo que convierte a las bases de datos en el objetivo final de los atacantes. Una estrategia integral para la protección de datos debe incluir múltiples capas y técnicas que se combinen para brindar una defensa en profundidad.

Oracle DbNest aborda esta necesidad salvaguardando los recursos de la base de datos, incluso si un atacante compromete el sistema y obtiene acceso local al host, haciendo que las bases de datos y sus recursos desaparezcan. Esta sesión realiza un recorrido por la tecnología detrás de Oracle DbNest y demuestra cómo aprovecha el poder de los grupos de control, los espacios de nombres y las capacidades de Linux para hacer que las bases de datos sean invisibles para los atacantes y, al mismo tiempo, protege contra acciones accidentales o maliciosas realizadas por usuarios autorizados.

Sean Scott

August 05, 2024
Tweet

More Decks by Sean Scott

Other Decks in Technology

Transcript

  1. LAOUC Community Tour 2024 2 a 23 de Agosto 2024

    Haga que su base de datos Oracle sea invisible para los atacantes
  2. 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
  3. www.viscosityna.com @ViscosityNA Oracle on Docker Running Oracle Databases in Linux

    Containers Free sample chapter: https://oraclesean.com
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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.
  10. 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.
  11. 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)
  12. 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
  13. 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.
  14. 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.
  15. 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
  16. 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.
  17. 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
  18. 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.
  19. 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.
  20. 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.
  21. 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
  22. 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.
  23. 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
  24. 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
  25. 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)
  26. 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)
  27. 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)
  28. 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)
  29. 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
  30. 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)
  31. 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)
  32. 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
  33. 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/<sys password> as sysdba Fallo de inicio (Parte 2)
  34. 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!
  35. 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!
  36. 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!
  37. 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
  38. 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
  39. 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
  40. 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:
  41. 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!
  42. 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.