Skip to content

5 aspectos esenciales a tener en cuenta en la seguridad de base de datos

Publicado por Sergio Hernando el 29 septiembre 2010

Buenas,

Al hilo de una mesa redonda a la que he asistido esta mañana, quiero dejar aquí unos comentarios sobre seguridad en base de datos. Es uno de los temas que se han tratado, así que viendo que las personas que han dado la charla han atinado en el planteamiento, me he animado a compartir con vosotros lo que yo entiendo como una seguridad en base de datos adecuada.

Las bases de datos son una de las grandes desconocidas en el mundo de la auditoría de sistemas y en las revisiones de seguridad. No es fácil encontrarse con auditores experimentados en este campo, y eso quizás responde a la enorme complejidad, tecnológica y no tecnológica que tienen las bases de datos empresariales, por no hablar de que cada entorno es hijo de su padre y su madre, y la uniformidad de la tecnología es algo que brilla por su ausencia. Por desgracia, dada esta complejidad, el normal ver planteamientos de auditoría basados en verificar la configuración de seguridad de los motores, la presencia de cifrado, y con un poco de suerte, los hay que se aventuran a mirar las tripas de los procesos y dictaminar si existe una adecuada segregación de funciones. Todos son factores importantes, pero no son por sí mismos representativos del estado de seguridad de una base de datos. Es muy frecuente que los dictámenes se basen en auditar aspectos aislados de la base de datos y no en su conjunto, y lo que es peor: ni pararse a pensar en los datos, estudiando solamente si la plataforma que contiene los datos es o no acorde a una determinada guía de militarización.

La lista puede ser interminable ya que cada cual tiene su modo de proceder, pero voy a sintetizar en 5 los puntos que hay que mirar cuando se analiza una base de datos. Cubren lo que considero mínimo, y en su ausencia yo al menos, salvo casos muy aislados, consideraría que la seguridad de los datos es deficiente.

1. El modelo de protección de datos

Cuando se planifica la seguridad de una base de datos, la única manera de hacerlo bien es acorde a una definición previa de algo tan básico como qué es lo que queremos proteger, dónde y cómo. Este modelo, aunque lo podemos impulsar desde el departamento de seguridad, quien tiene que autorizarlo es el propietario de los datos, muchas veces con ayuda de especialistas, como el departamento legal para el caso de cumplimiento normativo. Es una tarea dura, ingrata y tediosa, pero es estrictamente necesario hacerlo, como veremos a continuación.

Si pedís el modelo y no obtenéis respuesta, mala señal. Las probabilidades de fallar protegiendo los datos sin un modelo consensuado de qué hay que proteger son casi de 1 a 1. Las medidas técnicas que describiremos después dependen de este modelo, con lo que si este no existe, repito, alerta roja. Yo sería muy escéptico a la hora de confiar en la veracidad de que los privilegios, segregación, cifrado y enmascaramiento en un clúster de 10 motores con 60.000 tablas sean correctos sin que nadie se haya sentado a escribir que hay que proteger y cómo. Os van a contar de todo, que casualmente están terminando el borrador del plan, que no pasa nada porque todo está cifrado, que no merece la pena documentar algo tan extenso, que no hay riesgo porque en esta casa todos somos amigos y tomamos cañas juntos, etc. Atentos a este factor, es siempre el humo que indica que hay fuego en las proximidades.

2. El cifrado de los datos

Este es uno de los puntos cruciales y que genera más confusión y controversia. Qué duda cabe que si queremos proteger datos, los razonable es acudir al cifrado. Lo razonable y lo único que sirve, siempre y cuando se acompañe al cifrado de otras medidas que describiremos. Pequeño corolario: los datos críticos que no están cifrados NO ESTÁN PROTEGIDOS. Y peor aún: el cifrado tiene que afectar a todos los elementos que protegen a los datos, da igual que sea un campo de la base de datos, una fila, una columna, una tabla o la base completa. Y señores, el sistema de ficheros del sistema operativo también tiene que estar cifrado. Y las comunicaciones de la base de datos con el resto de la infraestructura. Incluso la memoria de la máquina donde se ubica el gestor, idealmente. Cifrar es cifrar todo, si algo en la cadena no está cifrado el resultado es datos críticos no protegidos.

Contentar a un auditor con un SELECT de la tabla de recursos humanos que muestra únicamente un galimatías y no los datos reales es tremendamente fácil. Y el auditor se irá dando palmas con las orejas, y pondrá en su informe que la base de datos está cifrada. Luego, cuando el auditor se va, el DBA se queda pensando qué pasa con el clon de producción que envían todos los martes por FTP a un outsourcing de Murcia, y que lógicamente, no está cifrado. O que pasa con las copias de seguridad que van a cartucho, que ni están cifrados ni pasan por un canal cifrado. O qué pasa con una aplicación que comunica con el motor en un canal no cifrado. O qué pasa con él mismo, que como es DBA apaga y enciende el cifrado de la base de datos según le viene en gana sin que se entere nadie, o que descifra lo que quiere y cuando quiere porque las llaves maestras están en el propio sistema operativo -sin cifrar-, sistema al que casualmente también tiene acceso root. Incluso, aunque esperemos que no, podría preguntarse si debería haber hecho el SELECT en la base de datos real, y no en una vista enmascarada preparada a tal efecto para quitarse de encima a los auditores.

El cifrado es crucial para montar un esquema de seguridad, y aquí, si se trata de datos críticos, tolerancia cero. En el momento que exista un sólo punto en el que los datos circulen en claro sin una adecuada protección criptográfica, se resquebraja todo. Cifrar sólo una tabla, poner únicamente HTTPS en las aplicaciones que tiran del motor o aplicar el cifrado sólo cuando el dato pasa a cartucho es un cifrado de pandereta, y no es aceptable. Este es el campo donde la tradicional excusa de que el cifrado echa por tierra el rendimiento sale a relucir instantáneamente, argumento ante el cual hay que ser firme alegando que no hay por qué cifrar el motor completo y que hay soluciones hardware que aceleran la gestión criptográfica, empezando por los propios procesadores. El rendimiento, cuando se cifra selectivamente (acorde al plan, acordaos) y no a lo loco, no tiene por qué verse deteriorado significativamente.

3. Control de superusuarios y otros usuarios privilegiados

Muy atentos a este factor. Da igual lo que hagas respecto a cifrar, y da igual lo que exista o no un plan de protección. Si los superusuarios no están controlados, no existe seguridad. Esto aplica a cada uno de los usuarios que tienen relación con los datos, ya sea el DBA, el root del sistema donde corre la base de datos o el amiguete que controla las llaves maestras del HSM donde reside la criptografía. Un superusuario sin control puede hacer lo que quiera con la base de datos, y la única manera de controlar esto es declarar las medidas de control allí donde el superusuario no tiene privilegio alguno. ¿Que necesitan acceso a producción para resolver emergencias? Sin problema. Lo pueden tener. Pero supervisado y controlado por un tercero independiente. ¿Que se queja y patalea porque no puede hacer un SELECT * en la tabla de salarios? No necesita verlos. Es vital y necesario que existan reglas que definan qué pueden hacer, y qué eventos requieren autorización o monitorización especial. Tener superusuarios que pueden entrar cuando quieren y hacer lo que quieren sin que exista control alguno es equivalente a tener una base de datos insegura.

Y da igual que sean de la casa, de fuera, que tomen o dejen de tomar cañas con quien sea. No hay necesidad alguna, y en ausencia de reglas que delimiten el comportamiento de un superusuario y el control de sus acciones, no existe seguridad. Evidentemente, las medidas de control hay que implementarlas en el bajo nivel, en el propio núcleo, o con mecanismos que impidan que el superusuario tenga acceso a dichos controles, de lo contrario, no habremos solucionado nada.

Hay una manera muy rápida de ver si esto está o no controlado. Te sientas con el DBA, hola que tal, buenos días. Yo soy Sergio, encantado. Mira, por favor, haz un SELECT de la tabla de recursos humanos, y saca en pantalla los DNI y los sueldos brutos anuales. Acto seguido, te vas a los de seguridad y les dices, a ver, enseñadme las trazas del DBA en los últimos 30 minutos. Si hay trazas, o si no te da tiempo a ir a buscarlos porque ellos se presentan o llaman al DBA antes de que tú recojas los papeles, hay esperanza. De lo contrario, más humo, y más fuego.

4. Auditoría

Una instalación de seguridad que protege a datos críticos sin trazas de auditoría es inútil. Si no sabemos quien ha hecho qué, y en qué momento, no es posible armar un sistema de monitorización acorde y lógicamente, se pierde toda la traza en caso de ser necesaria una investigación. La auditoría ha de ser completa, no sólo para el motor de la base de datos, sino para el sistema operativo, y para los datos críticos, debe quedar claramente registrado quién ha leído, modificado o borrado un dato. Obviamente, para proteger adecuadamente la auditoría, es preciso moverla a una consola segura y monitorizada donde los superusuarios de la base de datos y sus componentes satelitales no tengan acceso de ningún tipo.

Y por favor, seamos congruentes. No se trata de grabar TODO lo que pasa en la base de datos, se trata de que la operativa con datos críticos quede registrada, así que tened esto en cuenta cuando os digan que no hay manera de poner en marcha la recomendación, que la auditoría se come tera y medio de espacio en disco en 24 horas, y que el almacenamiento está muy caro, y que mover los logs ralentiza la red, y que los operadores del SIEM no pueden mirar 50.000 alertas por hora, y bla bla bla. Auditoría inteligente, suficiente y protegida. Con eso basta.

5. Monitorización

Hemos definido un plan, hemos cifrado, hemos segregado funciones y tenemos el mejor registro de auditoría de la historia. Pongamos la guinda al pastel monitorizando los elementos críticos, por ejemplo, consultas inusuales, comandos privilegiados, procesos que no acaban a su hora, uso de credenciales privilegiadas, operativas de mantenimiento de la base de datos, etc. Pensemos qué cosas pueden hacer que todo lo que hayamos montado se rompa, que no será mucho después de habernos esforzado en todo lo anterior, y convirtamos estos eventos en alertas en el SIEM. Creemos un pequeño saco de eventos no convencionales e imprevistos que merecen ser investigados. Y hagámoslo porque no existe la seguridad al 100%, y es imposible contemplar a priori todo lo que puede pasar en un entorno complejo, con lo que por lo menos, pongámosle las cosas difíciles a los malos de la película. Y esto es factible seleccionando con criterio las alertas que queremos generar basadas en los eventos que creemos pueden hacernos pensar que nuestro planteamiento ha sido vulnerado.

Espero que estas reflexiones os sean de utilidad.

Un saludo,

Be Sociable, Share!

Categoría/s → Seguridad

8 comentarios
  1. 4 octubre 2010
    Fernando Prieto permalink

    Hola Sergio,

    Muy interesante tu artículo. Solo añadiría que en un gran número de ocasiones el control de usuarios privilegiados deficiente viene dado por un “legacy bad approach” incorrecto. Muchas veces las empresas no han definido durante décadas una correcta segregación de funciones y la inversión que esto supone es prohibitiva para management (lo cual no quiere decir que no sea imprescindible).
    Precisamente me han pedido que recomiende alguna solución comercial para implantar un sistema de gestion efectiva de logs y monitorización de usuarios privilegiados. El entorno es zSeries/DB2/Top Secret, crítico y con una alta demanda de peticiones. A bote pronto se me ocurre BCM Patrol para esta tarea pero me gustaría saber si alguien sabe de alguna otra opción viable para un entorno así.

    Gracias por tus posts, Sergio.

    Un saludo!

    Fer.

  2. 4 octubre 2010

    Fernando,

    Completamente de acuerdo. Me alegro de que lo veas así, porque hay muchas personas que por desgracia se creen que actualizar un clúster de DB es como subir de versión el Windows de su casa, y nada más lejos de la realidad.

    Para la gestión de logs, lo suyo es una consola SIEM centralizada. Y tal y como está el mercado, el líder es ArcSight. Para superusuarios hay una solución muy popular que se llama Cyber-Ark que es sin duda el referente hoy en día.

    Ninguna de las dos es barata, pero yo les daría una oportunidad. Montar una pequeña PoC puede ser muy revelador. Ambas están pensadas para entornos corporativos, es decir, tienen aplicación mucho más allá de zOS, DB2 o Top Secret.

    Sobre Patrol comentarte que no hará mucho que lo han renombrado a BMC ProactiveNet Performance Management. Aunque es una solución magnífica, yo la veo más orientada a la gestión de servicio que a tareas de seguridad.

    Un abrazo,

  3. 5 octubre 2010

    Hola, una duda
    un ejemplo de segregacion de funciones?

    Saludos

  4. 5 octubre 2010

    Hola Esteban,

    Segregar funciones es una práctica que implica que, siempre que dos o más tareas provoquen un conflicto de interés (normalmente, un riesgo reconocido), estas han de ser desempeñadas por personas distintas.

    Los ejemplos dependerán entonces de las funciones que haga el personal en cada empresa. Es decir, la condiciona la actividad de la empresa, y aunque pueden ser de índole no financiera, normalmente casi siempre giran en torno a operativa financiera.

    Dicho esto te puedo poner algún ejemplo: imagina un departamento de compras, de cualquier organización. Normalmente la función “realizar compras” no debería ser desempeñada por personas relacionadas con el control de inventario y la recepción de bienes. El motivo es obvio: si tú tienes capacidad para comprar, no sería prudente que tengas la habilidad de recibir los bienes y controlar el inventario, porque puedes fácilmente adulterar dicho inventario y eliminar la traza de la recepción, lo que al final implica un riesgo de fraude evidente.

    Un ejemplo de segregación no financiera es la clara necesidad de auditores independientes. Si un responsable de sistemas se audita a sí mismo, es obvio que tiene capacidad no sólo para adulterar el informe, sino de adaptarlo selectiva e intencionadamente, pudiendo incurrir en la ocultación de hallazgos relevantes que comprometan la calidad de su trabajo.

    Un saludo,

  5. 8 octubre 2010

    Completamente de acuerdo. Considero que los 5 aspectos escogidos recogen lo más importante a tener en cuenta para securizar las bAses de Datos.

    Por desgracia, y como viene ocurriendo con casi todos los temas de seguridad, no se suelen tener en cuenta hasta que ocurren determinados “desastres” debidos a la incorrecta implantación de aspectos de seguridad básicos.
    Saludos.audea.com

Trackbacks & Pingbacks

  1. de la red – 29/09/2010 « Tecnologías y su contexto
  2. 5 aspectos esenciales a tener en cuenta en la seguridad de base de datos | Shadow Security
  3. 5 aspectos esenciales a tener en cuenta en la seguridad de base de datos « DbRunas – Noticias y Recursos sobre Bases de Datos

Escribir un comentario

Note: XHTML permitido. Tu email nunca será publicado.

Suscribirse a los comentarios via RSS