¡Hola comunidad!
lunes, 14 de noviembre de 2022
Invitación comunidad de Hackers de Costa Rica: El DEFCON 11506 (DC11506) presenta PWNEDCR0x5
¡Hola comunidad!
domingo, 13 de noviembre de 2022
Oracle Database Enterprise Edition 19c: Restauración de un PDB a un Restore Point- Ejemplo borrado de esquema-
Es posible que no te guste ver videos y que requieras ver la parte escrita. Aquí te muestro, como hacer una restauración de un PDB, previo a la creación de puntos de restauración.
Connected.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB$SEED READ ONLY NO
3 PDBRMAN READ WRITE NO
4 SECURITY READ WRITE NO
6 RESTORE_POINT READ WRITE NO
SQL> exit
Como puedes ver tenemos 3 PDBs creadas en nuestro contenedor. Para este ejemplo, vamos a utlizar la instancia "RESTORE_POINT".
Veamos que tenemos dentro de nuestra PDB.
[oracle@instructor-laboratorio admin]$ sqlplus hr/hr@restore_point
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Nov 5 18:40:43 2022
Version 19.17.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Version 19.17.0.0.0
TABLE_NAME TABLE_TYPE
---------------------------------------- -----------
REGIONS TABLE
COUNTRIES TABLE
LOCATIONS TABLE
LOCATIONS_SEQ SEQUENCE
DEPARTMENTS TABLE
DEPARTMENTS_SEQ SEQUENCE
JOBS TABLE
EMPLOYEES TABLE
EMPLOYEES_SEQ SEQUENCE
JOB_HISTORY TABLE
EMP_DETAILS_VIEW VIEW
11 rows selected.
COUNT(*)
----------
11
SQL> select count(*) from employees;
COUNT(*)
----------
107
Como haz notado tenemos el esquema de ejemplos de HR. Este es el que vamos a tomar como referencia para el ejercicio.
Vamos a conectarnos con privilegios de SYSDBA a la instancia PDB.
Connected.
SQL> create restore point pdb1_restore_point_created guarantee flashback database;
create restore point pdb1_restore_point_created guarantee flashback database
ERROR at line 1:
ORA-38784: Cannot create restore point 'PDB1_RESTORE_POINT_CREATED'.
ORA-38785: Media recovery must be enabled for guaranteed restore point.
Connected.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /opt/app/product/19c/dbs/arch
Oldest online log sequence 160
Current log sequence 162
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
ORACLE instance started.
Total System Global Area 1610609888 bytes
Fixed Size 9135328 bytes
Variable Size 1056964608 bytes
Database Buffers 536870912 bytes
Redo Buffers 7639040 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL>
Listo. Con la base de datos en modo archivelog, vamos a forzar que toda transacción que se haga a nivel de base de datos, quede registrada.
SQL> ALTER DATABASE FORCE LOGGING;
Database altered.
FORCE_LOGGING
---------------------------------------
YES
SQL> select force_logging from dba_tablespaces;
FOR
---
YES
YES
NO
NO
NO
TABLESPACE_NAME FOR
------------------------------ ---
SYSTEM YES
SYSAUX YES
UNDOTBS1 NO
TEMP NO
USERS NO
Como logras observar, no todos los tablespaces, están trabajando en modo forzado de registro transaccional. En el caso del tablespace de UNDO, el modo de facto de trabajo es FORCE LOGGING. En el caso de los tablespace temporales, no trabajan con esta característica.
Cambios el modo de trabajo del tablespace USES forzando el registro transaccional para todas las operaciones.
SQL> alter tablespace users force logging;
Tablespace altered.
TABLESPACE_NAME FOR
------------------------------ ---
SYSTEM YES
SYSAUX YES
UNDOTBS1 NO
TEMP NO
USERS YES
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDBRMAN MOUNTED
4 SECURITY READ WRITE NO
6 RESTORE_POINT MOUNTED
SQL> alter pluggable database RESTORE_POINT open;
Pluggable database altered.
Con la siguiente instrucción, cada vez que reiniciemos el contenedor, la PDB RESTORE_POINT, pasara siempre a modo OPEN.
SQL> alter pluggable database RESTORE_POINT save state;
Pluggable database altered.
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDBRMAN MOUNTED
4 SECURITY READ WRITE NO
6 RESTORE_POINT READ WRITE NO
Verifiquemos el estado de los tablespace de la PDB.
SQL> alter session set container=RESTORE_POINT;
Session altered.
TABLESPACE_NAME FOR
------------------------------ ---
SYSTEM YES
SYSAUX YES
UNDOTBS1 NO
TEMP NO
USERS NO
TBS_DATOS NO
TBS_DATOS_NOSEGUROS NO
TBS_DATOS_SEGUROS NO
8 rows selected.
Cambiamos el modo a registro transaccional forzado en todos los tablespaces.
SQL> alter tablespace users force logging;
Tablespace altered.
SQL> alter tablespace TBS_DATOS force logging;
Tablespace altered.
SQL> alter tablespace TBS_DATOS_NOSEGUROS force logging;
Tablespace altered.
SQL> alter tablespace TBS_DATOS_SEGUROS force logging;
Tablespace altered.
TABLESPACE_NAME FOR
------------------------------ ---
SYSTEM YES
SYSAUX YES
UNDOTBS1 NO
TEMP NO
USERS YES
TBS_DATOS YES
TBS_DATOS_NOSEGUROS YES
TBS_DATOS_SEGUROS YES
8 rows selected.
Ahora si, vamos a crear nuestro punto de restauración.
CON_ID
------------------------------
6
SQL> create restore point restore_point_pdb_create_RESTORE_POINT_db guarantee flashback database;
create restore point restore_point_pdb_create_RESTORE_POINT_db guarantee flashback database
ERROR at line 1:
ORA-38784: Cannot create restore point
'RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB'.
ORA-38786: Recovery area is not enabled.
SQL> connect / as sysdba
Connected.
NAME TYPE VALUE
------------------------------------ ----------- --------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
recovery_parallelism integer 0
remote_recovery_file_dest string
SQL> alter system set db_recovery_file_dest_size=50G scope=both;
System altered.
SQL> host mkdir -p /opt/app/oracle/recovery_area
SQL> alter system set db_recovery_file_dest='/opt/app/oracle/recovery_area' scope=both;
System altered.
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 161
Next log sequence to archive 163
Current log sequence 163
SQL> alter system checkpoint;
System altered.
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDBRMAN MOUNTED
4 SECURITY READ WRITE NO
6 RESTORE_POINT READ WRITE NO
Ya tenemos todos los prerequisitos necesarios para crear nuestro punto de restauración.
Session altered.
SQL> create restore point restore_point_pdb_create_RESTORE_POINT_db guarantee flashback database;
Restore point created.
También podríamos crear un punto de restauración conectados en el CDB para la base de datos acoplada RESTORE_POINT
Connected.
SQL> create restore point restore_point_cdb_create_RESTORE_POINT_db for pluggable database RESTORE_POINT guarantee flashback database;
NAME TIME SCN PDB GUA CON_ID NAME_PDB
--------------------------------------------- ----------------------------------- ---------- --- --- ---------- ---------------
RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB 05-NOV-22 06.52.43.000000000 PM 5218861 YES YES 6 RESTORE_POINT
RESTORE_POINT_CDB_CREATE_RESTORE_POINT_DB 05-NOV-22 06.53.27.000000000 PM 5218891 YES YES 6 RESTORE_POINT
CON_ID
------------------------------
1
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDBRMAN MOUNTED
4 SECURITY READ WRITE NO
6 RESTORE_POINT READ WRITE NO
Vamos a generar el error. Vamos a borrar en el PDB el esquema de HR
Session altered.
SQL> drop user hr cascade;
User dropped.
SQL> connect / as sysdba
Connected.
SQL> alter pluggable database RESTORE_POINT close;
Pluggable database altered.
SQL> @ver_restore_point.sql
--------------------------------------------- ----------------------------------- ---------- --- --- ---------- ---------------
RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB 05-NOV-22 06.52.43.000000000 PM 5218861 YES YES 6 RESTORE_POINT
RESTORE_POINT_CDB_CREATE_RESTORE_POINT_DB 05-NOV-22 06.53.27.000000000 PM 5218891 YES YES 6 RESTORE_POINT
Vamos a utilizar el punto de restauración creado en el PDB, para hacer un FLASHBACK de la instancia acoplada.
SQL> flashback pluggable database RESTORE_POINT to restore point RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB;
Flashback complete.
Completado el Flashback, vamos a abrir en modo sólo lectura la PDB para verificar que el punto de restauración es el deseado y que el esquema HR, si se encuentra en el punto de restauración realizado.
SQL> alter pluggable database RESTORE_POINT open read only;
Pluggable database altered.
Connected.
TABLE_NAME TABLE_TYPE
---------------------------------------- -----------
REGIONS TABLE
COUNTRIES TABLE
LOCATIONS TABLE
LOCATIONS_SEQ SEQUENCE
DEPARTMENTS TABLE
DEPARTMENTS_SEQ SEQUENCE
JOBS TABLE
EMPLOYEES TABLE
EMPLOYEES_SEQ SEQUENCE
JOB_HISTORY TABLE
EMP_DETAILS_VIEW VIEW
11 rows selected.
Connected.
SQL> alter pluggable database RESTORE_POINT close;
Pluggable database altered.
SQL> alter pluggable database RESTORE_POINT open resetlogs;
Pluggable database altered.
Nos conectamos nuevamente a nuestra base de datos y la información esta nuevamente en su lugar.
SQL> connect hr/hr@RESTORE_POINT
Connected.
TABLE_NAME TABLE_TYPE
---------------------------------------- -----------
REGIONS TABLE
COUNTRIES TABLE
LOCATIONS TABLE
LOCATIONS_SEQ SEQUENCE
DEPARTMENTS TABLE
DEPARTMENTS_SEQ SEQUENCE
JOBS TABLE
EMPLOYEES TABLE
EMPLOYEES_SEQ SEQUENCE
JOB_HISTORY TABLE
EMP_DETAILS_VIEW VIEW
11 rows selected.
COUNT(*)
----------
107
SQL>
Si ya no necesitamos los puntos de restauración, nos conectamos al CDB y desde ahí vamos a borrar cada uno de los puntos de restauración creados.
Connected.
NAME TIME SCN PDB GUA CON_ID NAME_PDB
--------------------------------------------- ----------------------------------- ---------- --- --- ---------- ---------------
RESTORE_POINT_PDB_CREATE_RESTORE_POINT_DB 05-NOV-22 06.52.43.000000000 PM 5218861 YES YES 6 RESTORE_POINT
RESTORE_POINT_CDB_CREATE_RESTORE_POINT_DB 05-NOV-22 06.53.27.000000000 PM 5218891 YES YES 6 RESTORE_POINT
no rows selected
SQL>
sábado, 12 de noviembre de 2022
Oracle Linux Firewall: WARNING: AllowZoneDrifting is enabled.
Algunas versiones del software de firewalld tenían un comportamiento no documentado conocido como "zona a la deriva".
Esto permite que los paquetes ingresen en múltiples zonas; lo cuál es una violación de los firewalls basados en zonas.
Sin embargo, algunos usuarios confían en este comportamiento para tener una zona "catch-al- cajón del sastre", como zona determinada.
Para deshabilitar esto en la configuración de nuestro firewall en Oracle Linux 7.x deberemos hacer lo siguiente:
Primero que todo vamos a logearnos con el usuario root al sistema operativo y vamos a ir al directorio /etc/firewalld
[opc@laboratorio ~]$ sudo -s /bin/bash[root@laboratorio opc]# cd /etc/firewalld
total 32
drwxr-x---. 7 root root 4096 May 13 00:37 .
drwxr-xr-x. 95 root root 8192 Jun 10 17:22 ..
-rw-r--r--. 1 root root 5172 May 13 00:37 direct.xml
-rw-r--r--. 1 root root 2706 Apr 27 2021 firewalld.conf
drwxr-x---. 2 root root 6 Apr 27 2021 helpers
drwxr-x---. 2 root root 6 Apr 27 2021 icmptypes
drwxr-x---. 2 root root 6 Apr 27 2021 ipsets
-rw-r--r--. 1 root root 272 Apr 27 2021 lockdown-whitelist.xml
drwxr-x---. 2 root root 6 Apr 27 2021 services
drwxr-x---. 2 root root 46 May 13 00:29 zones
[root@laboratorio firewalld]# cd zones
En dicho directorio podrás ubicar el directorio "ZONES", pero esto no tiene nada que ver con el tema. No te confundas.
[root@laboratorio zones]# ls -la
total 12
drwxr-x---. 2 root root 46 May 13 00:29 .
drwxr-x---. 7 root root 4096 May 13 00:37 ..
-rw-r--r--. 1 root root 387 Jun 10 16:24 public.xml
-rw-r--r--. 1 root root 350 Jun 10 16:23 public.xml.old
[root@laboratorio zones]# more public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas.
You do not trust the other computers on networks to not harm your computer.
Only selected incoming connections are accepted.</de
scription>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<port protocol="tcp" port="22"/>
<port protocol="tcp" port="1521"/>
</zone>
Con el comando SYSTEMCTL podrás validar si la zona "Drifting" esta activada.
? firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-06-10 16:23:33 GMT; 5h 39min ago
Docs: man:firewalld(1)
Main PID: 31241 (firewalld)
Memory: 27.1M
CGroup: /system.slice/firewalld.service
+-31241 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
Jun 10 16:23:33 laboratorio systemd[1]: Starting firewalld - dynamic firewall daemon...
Jun 10 16:23:33 laboratorio systemd[1]: Started firewalld - dynamic firewall daemon.
Jun 10 16:23:33 laboratorio firewalld[31241]: WARNING: AllowZoneDrifting is enabled.
This is considered an insecure configuration option. It will...g it now.
Jun 10 16:24:05 laboratorio firewalld[31241]: WARNING: AllowZoneDrifting is enabled.
This is considered an insecure configuration option. It will...g it now.
Jun 10 16:28:32 laboratorio firewalld[31241]: WARNING: AllowZoneDrifting is enabled.
This is considered an insecure configuration option. It will...g it now.
En el directorio indicado, vamos a editar el archivo FIREWALLD.CONF.
total 32
drwxr-x---. 7 root root 4096 May 13 00:37 .
drwxr-xr-x. 95 root root 8192 Jun 10 17:22 ..
-rw-r--r--. 1 root root 5172 May 13 00:37 direct.xml
-rw-r--r--. 1 root root 2706 Apr 27 2021 firewalld.conf
drwxr-x---. 2 root root 6 Apr 27 2021 helpers
drwxr-x---. 2 root root 6 Apr 27 2021 icmptypes
drwxr-x---. 2 root root 6 Apr 27 2021 ipsets
-rw-r--r--. 1 root root 272 Apr 27 2021 lockdown-whitelist.xml
drwxr-x---. 2 root root 6 Apr 27 2021 services
drwxr-x---. 2 root root 46 May 13 00:29 zones
[root@laboratorio firewalld]# more firewalld.conf
# firewalld config file
# default zone
# The default zone used if an empty zone string is used.
# Default: public
DefaultZone=public
# Minimal mark
# Marks up to this minimum are free for use for example in the direct
# interface. If more free marks are needed, increase the minimum
...
# based zones to other interfaces based zones (including the default zone).
# Possible values; "yes", "no". Defaults to "yes".
AllowZoneDrifting=No
[root@laboratorio firewalld]# ls -la
total 32
drwxr-x---. 7 root root 4096 Jun 10 22:05 .
drwxr-xr-x. 95 root root 8192 Jun 10 17:22 ..
-rw-r--r--. 1 root root 5172 May 13 00:37 direct.xml
-rw-r--r--. 1 root root 2708 Jun 10 22:05 firewalld.conf
drwxr-x---. 2 root root 6 Apr 27 2021 helpers
drwxr-x---. 2 root root 6 Apr 27 2021 icmptypes
drwxr-x---. 2 root root 6 Apr 27 2021 ipsets
-rw-r--r--. 1 root root 272 Apr 27 2021 lockdown-whitelist.xml
drwxr-x---. 2 root root 6 Apr 27 2021 services
drwxr-x---. 2 root root 46 May 13 00:29 zones
[root@laboratorio firewalld]# vi firewalld.conf
Carga nuevamente la configuración del firewalld y reinicia.
[root@laboratorio firewalld]# systemctl reload firewalld
[root@laboratorio firewalld]# systemctl restart firewalld
Ahora puedes validar que la zona ha sido deshabilitada.
? firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service;
enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-06-10 22:07:33 GMT; 10s ago
Docs: man:firewalld(1)
Process: 17907 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 18042 (firewalld)
Memory: 22.6M
CGroup: /system.slice/firewalld.service
+-18042 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
Jun 10 22:07:33 laboratorio systemd[1]: Starting firewalld - dynamic firewall daemon...
Jun 10 22:07:33 laboratorio systemd[1]: Started firewalld - dynamic firewall daemon.
[root@laboratorio firewalld]#