Prevención de hurto de Información en Oracle Database 12c, Advanced Security Option : TDE y Redaction.

#15 Octubre 2024

#OracleTIPSSV

#OracleACEPRO

Debemos configurar el Wallet de encriptación, este se configura mediante el sqlnet.ora en el $OH/network/admin.

Si es RAC, se sugiere usar ACFS para colocar el Wallet en un directorio compartido para todos los nodos.

NOTA: Para más explicaciones, puede consultar el articulo anterior: https://oracletipssv.com/2024/08/06/prevencion-del-urto-de-informacion-oracle-tde/

Configuring the sqlnet.ora File for a Software Keystore Location

Use the sqlnet.ora file to configure the keystore location for a regular file system, for multiple database access, and for use with Oracle Automatic Storage Management (ASM).

  • To create a software keystore on a regular file system, use the following format when you edit the sqlnet.ora file:


Procedemos a crear el wallet para usarlo como keystore con su respectivo password.el wallet puede crearse con autologin.
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/backup/wallet' IDENTIFIED BY password;

OR

ADMINISTER KEY MANAGEMENT CREATE   AUTO_LOGIN KEYSTORE FROM KEYSTORE '/backup/wallet/' IDENTIFIED BY password;

También debe crearse la clave maestra:

ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY password;

ADMINISTER KEY MANAGEMENT SET KEY   IDENTIFIED BY password  WITH BACKUP USING 'backup'  ;

Debe asegurarse tener el compatible en 12.1, recuerde que el compatible no tiene nada que ver con el performance de query, trata de la activación de características de la edición de la BD, un parámetro estático e irreversible.

compatible >=12.1

Para evitar olvidar abrir el wallet cada vez que la bd se reinicia, se puede configurar el autologin.

ADMINISTER KEY MANAGEMENT CREATE   AUTO_LOGIN KEYSTORE FROM KEYSTORE '/backup/wallet' IDENTIFIED BY password;

Vamos crear un tablespace y una tabla para la demostración, que permitirá examinar el contenido de un tablespace/datafile y comprobar el beneficio de la característica.

CREATE TABLESPACE encrypt_ts   DATAFILE '/backup/oradata/encrypt_df.dbf' SIZE 1M ENCRYPTION USING 'AES256'
  DEFAULT STORAGE (ENCRYPT);  2  

Tablespace no encriptado

CREATE TABLESPACE nonencrypt_ts   DATAFILE '/bkp/oradata/nonencrypt_df.dbf' SIZE 1M ;

Tablas en tablespace encriptado

create table dba_copia1 tablespace encrypt_ts as select * from dba_objects;
create table dba_copia1 tablespace encrypt_ts as select * from dba_objects

Le vamos a dar mas tamaño para que no de error por espacio:

SQL> alter database datafile '/bkp/oradata/nonencrypt_df.dbf' autoextend on next 10m;

Database altered.

SQL> alter database datafile '/bkp/oradata/encrypt_df.dbf' autoextend on next 10m;

Database altered.

SQL> 

  1* create table dba_copia2 tablespace encrypt_ts as select * from dba_objects

Tabla en tablespace no encriptado

  1* create table dba_copia2 tablespace nonencrypt_ts as select * from dba_objects

SQL> /

Table created.

^

Consultamos el contenido del datafile del tablespace encriptado:

emrep:oracle@emcc:/bkp/oradata> strings encrypt_df.dbf  | more

}|{z
;ORCL12C
ENCRYPT_TS
${yw7
#B8[
@1 q
yz.x
QjMa{
zORR
MqAa

emrep:oracle@emcc:/bkp/oradata> strings  nonencrypt_df.dbf  | more
SQL> create table dba_copia3 tablespace users as select * from dba_objects;

Table created.

SQL> 

SQL> set linesize 200
  1* select tablespace_name,segment_name from dba_segments where segment_name in ('DBA_COPIA1','DBA_COPIA2','DBA_COPIA3') group by tablespace_name,segment_name

SQL> 

alter table DBA_COPIA3 move tablespace ENCRYPT_TS;

Table altered.

SQL> 

SQL> select tablespace_name,segment_name from dba_segments where segment_name in ('DBA_COPIA1','DBA_COPIA2','DBA_COPIA3') group by tablespace_name,segment_name;

Podemos ver los archivos que componen el wallet, que son el propio wallet y el archivo del autologin, p12 y sso.

emrep:oracle@emcc:/bkp/wallet> ls -lrt

total 12

-rw-r–r–. 1 oracle oinstall 2400 Jun 27 16:20 ewallet_2024062716205812_bckupkey.p12

-rw-r–r–. 1 oracle oinstall 3848 Jun 27 16:20 ewallet.p12

-rw-r–r–. 1 oracle oinstall 3893 Jun 27 16:30 cwallet.sso

emrep:oracle@emcc:/bkp/wallet> mv cwallet.sso cwallet.sso.bkp

emrep:oracle@emcc:/bkp/wallet> 

emrep:oracle@emcc:/bkp/wallet> 

emrep:oracle@emcc:/bkp/wallet> exit

exit

Como todo wallet, puede cerrarse , abrise, etc.

SQL> administer key management set keystore close;

keystore altered.

SQL> SQL> 

 administer key management set keystore open identified by  password;

keystore altered.

SQL> 

cd /bkp/wallet/

Podemos eliminar el autologin

emrep:oracle@emcc:/bkp/wallet> mv cwallet.sso.bkp  cwallet.sso

emrep:oracle@emcc:/bkp/wallet> ls -lrt

total 12

-rw-r–r–. 1 oracle oinstall 2400 Jun 27 16:20 ewallet_2024062716205812_bckupkey.p12

-rw-r–r–. 1 oracle oinstall 3848 Jun 27 16:20 ewallet.p12

-rw-r–r–. 1 oracle oinstall 3893 Jun 27 16:30 cwallet.sso

emrep:oracle@emcc:/bkp/wallet> 

Vamos a simular un apagado y validar que auto abre el wallet y su contenido esta a disposición de la BD.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> SQL> startup

ORACLE instance started.

Total System Global Area 1.0033E+10 bytes

Fixed Size     2934696 bytes

Variable Size 1677723736 bytes

Database Buffers 8321499136 bytes

Redo Buffers   30617600 bytes

Database mounted.

Database opened.

SQL> l

SQL> 

cd ..

emrep:oracle@emcc:/bkp> cd wallet/

emrep:oracle@emcc:/bkp/wallet> ls -lrt

total 12

-rw-r–r–. 1 oracle oinstall 2400 Jun 27 16:20 ewallet_2024062716205812_bckupkey.p12

-rw-r–r–. 1 oracle oinstall 3848 Jun 27 16:20 ewallet.p12

-rw-r–r–. 1 oracle oinstall 3893 Jun 27 16:30 cwallet.sso

Ahora vamos a simular reiniciar sin el autologin.

emrep:oracle@emcc:/bkp/wallet> mv cwallet.sso cwallet.sso.bkp

emrep:oracle@emcc:/bkp/wallet> sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu Jun 27 16:58:41 2024

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 1.0033E+10 bytes

Fixed Size     2934696 bytes

Variable Size 1677723736 bytes

Database Buffers 8321499136 bytes

Redo Buffers   30617600 bytes

Database mounted.

Database opened.

SQL> 

Al querer consultar una tabla que esta almacenada en un tablespace encriptado, provoca un error

 select * from dba_copia1;

select * from dba_copia1

              *

ERROR at line 1:

ORA-28365: wallet is not open

SQL> 

 ls

cwallet.sso.bkp  ewallet_2024062716205812_bckupkey.p12  ewallet.p12

emrep:oracle@emcc:/bkp/wallet> mv cwallet.sso.bkp cwallet.sso

emrep:oracle@emcc:/bkp/wallet> 

 sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu Jun 27 17:07:29 2024

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to an idle instance.

SQL>st artup

ORACLE instance started.

Total System Global Area 1.0033E+10 bytes

Fixed Size     2934696 bytes

Variable Size 1677723736 bytes

Database Buffers 8321499136 bytes

Redo Buffers   30617600 bytes

Database mounted.

Database opened.

  2  

SQL> 

y el wallet funcionando:

Espero les sea de utilidad.

saludos.