Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Oracle Database Vault: Fallas de diseño
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
¿Qué es Database Vault?● Una forma de evitar que el DBA vea y/o
manipule datos financieros, fiscales, privados, etc...
● Obligatorio para cumplir ciertas leyes (como la L.O.P.D.)
● Una declaración de guerra para muchos profesionales...
● Un “se abre la veda” para los investigadores de seguridad
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas de Diseño
● Administrador y auditor de “Audit Vault”● Sistema Operativo● Sistema de archivos● Sistema gestor de base de datos● El protocol TNS
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Administrador y Auditor de Database Vault
● La falla más simple y obvia– ¿Quién controla a la policía?– ¿Quiénes son aquí asuntos internos?
● ¿Y quién controlaría a un hipotético departamento de control del departamento de control?
● ¿Otro departamento de control del departamento de control del departamento de control..., y así “n” veces?
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema Operativo
● El sistema de base de datos continúa ejecutándose como un único usuario real en el sistema operativo– Oracle (Unix/Linux)– Local System (Win32)
● El auditor, el administrador de database vault, el administrador de sistemas y los usuarios se encuentran en el mismo espacio de proceso
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema Operativo
● El administrador de la base de datos puede troyanizar el sistema operativo– Una versión troyanizada de la librería libclntsh.so (o
.dll)– Una versión troyanizada del TNS Listener o un
proxy justo delante del TNS Listener– Una versión troyanizada de la librería OCI– Una versión troyanizada de cualquier otro
componente Oracle
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema Operativo
● El administrador de sistemas tiene el usuario Oracle o Local System en el sistema operativo– Puede “attacharse” al proceso Oracle y grabar un
registro de sus operaciones– Puede poner breakpoints en funciones así como
modificar el comportamiento de la base de datos– Puede cambiar valores de variables globales y
locales, así como el UID de una sesión SQL, etc...– Puede hacer lo que le dé la gana...
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema de Archivos
● El DBA tiene acceso al sistema de archivos– Puede leer y modificar los datafiles “en crudo”– Existen múltiples herramientas y librerías
● Data Unloader– Herramienta de la propia Oracle
● DUDE (Database Unloading by Data Extraction)– http://www.ora600.nl/introduction.htm
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema de archivos
● Puede copiarse la base de datos al completo– RMAN– ALTER TABLESPACE XXX BEGIN BACKUP
● Puede reimportarse la base de datos– EXP/IMP ya no le valen siempre, pero...– Puede usar RMAN o fastidiar a posta un datafile y
poner su versión manipulada● Después un “RECOVER UNTIL CANCEL” y ya está :)
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema de archivos
● Problemas– La modificación de datos en crudo y posterior
recuperación (fundamental) llamaría la atención de cualquiera
– Los datos pueden ir encriptados directamente en los datafiles
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema de archivos
● Soluciones– Si el mecanismo de encriptado está en la base de
datos se troyaniza la base de datos o el sistema operativo
– Se espera a una falla del sistema real para no levantar sospechas
● Siempre las hay, por suerte y por desgracia● Siempre hay soluciones a este tipo de
problemas :)
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema gestor de base de datos
● Una vez instalada la opción Database Vault se hace un coñazo troyanizar PL/SQL
● Mejor poner el troyano antes de implantar Database Vault :)– Durante la fase de pruebas o test
● Donde se intenta poner Database Vault suelen tener entorno de pruebas y test, así que no es un problema ;)
● Pero... ¿Qué troyanizar?
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: (Sistema gestor de base de datos) ¿Qué troyanizar?
● DBMS_OBFUSCATION_TOOLKIT– Todo lo que se encripte con este paquete puede
ser grabado en otro sitio...● Vistas *_USERS, *_PRIVS
– Así los administradores y auditores de database vault no se darán cuenta de nada
– Solo verán lo que le dejemos nosotros● DBMS_STANDARD, por ejemplo...
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: (Sistema gestor de base de datos) Puertas Traseras
● Un paquete PL/SQL “wrapped” antes de la instalación de Database Vault– Que nos de los privilegios que querramos...– Que borre huellas de SYS.AUD$ o que cree huellas
falsas en función de nuestras necesidades...● En definitiva: Que nos devuelva el poder que
era nuestro ;)
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: Sistema gestor de base de datos
● Siempre podemos troyanizar la base de datos– Como ya se ha comentado antes
● libclntsh.(so|dll)● oracle[.exe]● libocci.[so|dll]● libnnz11.[so|dll]● extjob[.exe]● sqlplus[.exe]
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: (Sistema gestor de base de datos) Hooks
● El problema de parchear/troyanizar librerías, binarios y PL/SQL es que hay que hacerlo cada vez que se aplique un parche
● Mejor hacernos una herramienta que “hookee” ciertas llamadas– oci_prepare_stmt– Todas las funciones kk* de la base de datos
● No es broma, las funciones del kernel tienen ese prefijo
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: El protocol TNS
● Algunos “rule set” se basan en ciertos atributos de la conexión establecida para determinar si se tiene o no privilegio para realizar algo:– Dirección IP, nombre de usuario, usuario del
sistema operativo, nombre de la máquina cliente, programa cliente, etc...
● Los datos vienen de campos del protocolo TNS– Nunca han sido fiables y, cambiar esta falla de
diseño con decenas de años no es trivial
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fallas: El protocol TNS● Un paquete TNS de ejemplo:
– (CONNECT_DATA=(CID=(PROGRAM=)(HOST=192.168.1.5)(USER=oracle))(COMMAND=connect)(ARGUMENTS=64)(SERVICE=LISTENER)(PROGRAM=java)(VERSION=169869568))
● El usuario del sistema operativo lo marcamos como “oracle”, el programa como “java” y la dirección IP como 192.168.1.5– Son campos de un paquete TNS, fácilmente
manipulables
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Conclusiones
● Políticamente correctas– Aún es un tanto inmaduro– Recomiendo prudencia
● Políticamente incorrectas– Es una gilipollez– Siempre existirán mil un modos de que el DBA o el
administrador de la máquina se pasen los mecanismos por el arco del triunfo
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Soluciones a las fallas de diseño● Para que esto fuese así el root o el administrador no debería tener
privilegios para hacer lo que quisiera en el sistema operativo
● El kernel tendría que estar más cerca del usuario final para que él lo pudiera acomodar y parametrizar a sus requisitos de seguridad (espera, que me meo...)
● Sistemas operativos como Plan9 (donde sería más fácil hacer este tipo de cosas) no son muy conocidos y Oracle, que yo sepa, no tiene visos de portar su software a dicha plataforma nunca
● La solución menos drástica es un módulo del kernel, no un programa de “usuario”, y una separación de usuarios y privilegios por usuario real, como mínimo
● De todos modos, siempre existirán otros modos de saltarse todo esto
Joxean KoretOracle Database Vault: El mundo no es de color rosa y soy root!
Fin
Pues eso ;) Cualquier duda, sugerencia o comentario a mi cuenta de correo: