ASO y Oracle Wallet
En estos días, cualquier organización “seria”, la protección de los datos es una de las prioridades
principales, si no quieres tener problemas regulatorios con organismos públicos
(Ley de Protección de Datos Española) o privados (PCI DSS,
por ejemplo).
Si me pidieran proteger las bases de datos de una
organización de ataques externos me plantearía una serie de medidas a tomar de
manera inmediata.
- Implementar
un interfaz seguro de red.
- Restringir
el acceso a los servidores de base de datos, añadiendo restricciones por
dirección IP.
- Proteger
las bases de datos añadiendo unos cortafuegos, normalmente dos y de compañías
distintas.
- Cifrar
datos sensibles “at rest”, es
decir almacenados en disco.
Usualmente como parte de un plan de recuperación
de desastres de una organización, las copias de seguridad de la base de datos
son almacenados fuera del recinto de la organización. Esto quiere decir que las
cintas necesitan moverse de un sitio a otro, esta es la parte más vulnerable de
la seguridad de los datos.
Para proteger los datos en este escenario, podemos
proteger los datos mediante una clave, que reside fuera de la estructura de
base de datos. Sin esta clave, todos los datos confidenciales cifrados serán de
ninguna utilidad.
Este problema se aborda en Oracle 10g R2. Para
datos sensibles, podemos declarar que una columna como cifrada. Cuando se
insertan los datos, se almacenan como cifrados. Cuando se recuperan, se descifran
sobre la marcha. El usuario no sabe, lo que está ocurriendo en la capa de base
de datos. También podemos cifrar los datos existentes, con sólo modificar la
columna como cifrado. Esta función se denomina como "Cifrado de datos
transparente" o TDE (“Transparent Data Encryption”).
Oracle Database 10g cifra los datos usando una
clave maestra, la cual es almacenada en una localización segura llamada wallet, que no es más que un fichero
en el servidor de base de datos. La tabla de claves se almacena en el
diccionario de datos. Oracle Database 10g genera un única tabla de claves
cifrada para la tabla y la usa para cifrar las columnas.
Dado que los datos se almacenan encriptados, todos
los componentes dependientes, como copia de seguridad y los registros
archivados, etc. están también en formato cifrado.
Para usar TDE, necesitamos configurar el wallet de la base de datos. Podemos especificar la ubicación del wallet en $ORACLE_HOME/network/admin/sqlnet.ora
ENCRYPTION_WALLET_LOCATION
=
(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/DEVDB/wallet)))
|
Una vez definida la
ubicación, tenemos que crear el wallet.
SQL> ALTER SYSTEM SET ENCRYPTION
KEY AUTHENTICATED BY <”clave”>;
|
Nota: Las comillas dobles son obligatorias, la
clave tiene que contener al menos un número y un carácter especial, tal y como
nos lo pide el wizard de la consola GUI.
Este comando llevará a cabo las acciones siguientes
- Crea el fichero wallet en la localización definida en sqlnet.ora, por ejemplo. /u01/app/oracle/admin/DEVDB/wallet.
- Define la clave del wallet como “clave”.
- Abre el Wallet para su uso.
$ /u01/app/oracle/admin/DEVDB/wallet>
ls -al
-rw——- 1 oracle oinstall 1358
Ago 25 12:04 ewallet.p12
|
Si activa la función del wallet de auto-login,
usted verá otro archivo
$ /u01/app/oracle/admin/DEVDB/wallet>
ls -al
-rw——- 1 oracle oinstall 1358
Ago 25 12:44 ewallet.p12
-rw——- 1 oracle oinstall 1366
Ago 25 12:44 cwallet.sso
|
Esta es una copia de su fichero wallet, pero en un formato cifrado /
propietario. El archivo cwallet.sso no requiere una contraseña para abrir, y
puedes abrirlo con el proveedor de Oracle PKI (Infraestructura de clave pública) en java. También puede abrir el
archivo ewallet.p12 utilizando el proveedor de PKI, pero ese archivo sí
requiere una contraseña para abrir. El uso del archivo cwallet.sso significa
que usted no tendrá que guardar la contraseña en texto plano en cualquier lugar,
por lo que lo hace más portátil.
El wallet
debe de estar abierto explícitamente, después del inicio de la instancia de
base de datos.
SQL> ALTER SYSTEM SET
ENCRYPTION WALLET OPEN AUTHENTICATED BY “clave”;
|
De lo contrario si el wallet no está abierto, incluso el propietario de la tabla no es
capaz de seleccionar los datos y recuperarlos
ERROR at line 1:
ORA-28365: wallet is
not open
|
Podemos cerrar explícitamente el wallet mediante
SQL> ALTER SYSTEM SET
ENCRYPTION WALLET CLOSE;
|
Para el cifrado de los datos, podemos simplemente
utilizar
SQL> ALTER TABLE EMP
MODIFY (SAL ENCRYPT);
|
Los detalles de la columna cifrada son almacenados
en DBA_ENCRYPTED_COLUMNS
SQL> SELECT * FROM
DBA_ENCRYPTED_COLUMNS;
OWNER TABLE_NAME COLUMN_NAME
ENCRYPTION_ALG SAL
------------ --------------------- ------------------------- ----------------------------- --------------
SCOTT EMP SAL ES 192 bits key NO
|
Nosotros podemos también cambiar la clave
usando ALTER TABLE con la cláusula REKEY.
La consola visual de Oracle wallet se puede iniciar
en $ORACLE_HOME/bin/owm
Hay otros datos a tener en cuenta a la hora de implementar TDE en tu organización:
- Impacto de rendimiento de las sentencias SELECT & INSERT. En el momento de la inserción, se tiene que leer la clave de cifrado de la cartera, cifrar los datos y luego escribir. Enfrente, en caso de recuperación de datos. Se tiene que descifrar los datos mediante la lectura de la clave de cifrado desde el monedero. Estas operaciones tendrán alguna sobrecarga de rendimiento. Pero es mucho mejor que perder la confianza y los datos del cliente.
- Coste adicional en la licencia. TDE está considerado parte de Oracle Advanced Security, así que no hay coste de licenciamiento adicional.
No hay comentarios:
Publicar un comentario
Por favor deja tu comentario, es valioso.