Modulado 3.0

if (bored) try { while ( ! ( this.succeed() )) } catch ( IhaveSoMuchTimeException e) {};

Prestando atención a la seguridad de tu base de datos (MySQL)


sakila-security
Uno de los factores más importantes y al mismo tiempo uno de los factores que menos atención le prestamos es al tema de la seguridad. Normalmente, bien por desconocimiento,  por falta de tiempo, o incluso, por confiarnos demasiado, obviamos los factores de riesgo a los que nos enfrentamos por no hacer una pequeña parada y estudiar este punto.

En una sociedad como la de hoy en la que la información es poder, que menos que preocuparnos por el corazón que mueve toda la información sensible, nuestra base de datos.

MySQL a su vez se ha convertido en uno de los Sistemas Gestores de Bases de datos más usados actualmente, gracias a la buena cohesión con los CMS como WordPress o Drupal, con lo cual y al mismo tiempo, también ha crecido la oferta y la demanda de vulnerabilidades.

Hay administradores de sistemas que se preocupan poco de la seguridad -aunque por suerte estos son los menos-, normalmente están tan ocupados con que las cosas funcionen bien -o al menos conformarse con no recibir quejas y que simplemente funcione- que pasan un poco por encima esta parte del diseño. Al igual que cuando diseñamos una red, es un factor crucial hacer un estudio de las diferentes capas que pueden generar amenazas. Esto es, las posibles amenazas plausibles que pueden comprometer tanto el buen funcionamiento como la perdida parcial o total de los datos. Esto incluye obviamente, no solo ataques externos, si no además perdidas de datos a causa de una mala política en copias de seguridad. Por lo tanto, cuando hablamos de seguridad no sólo hay que tener en cuenta ataques externos causados por alguna vulnerabilidad en el software que usamos, también tenemos que ser capaces de prever fallos en el hardware, desastres como una inundación, un incendio, un robo, o un misil que navega con Windows Route y se ha desviado hacia tu servidor, etc. ¿Imagináis que los Datacenter donde albergáis vuestras webs, blogs y similares no tuvieran estas cosas en cuenta? Menudo caos.

Centrándonos un poco, hablando de seguridad, existen una serie de pautas a tener en cuenta que no podemos pasar por alto. Voy a enumerar las que a mi parecer me parecen más triviales, sacadas del manual de referencia de MySQL:

  • NUNCA hay que dar acceso a un usuario normal a la tabla mysql (excepto al usuario root de MySQL).
  • Estudiar el sistema de control de acceso, las declaraciones GRANT y REVOKE se usan para controlar dicho acceso a tu base de datos.
  • Comprueba que no puedes conectar a tu base de datos como root sin que te pida una contraseña. Por defecto, ninguna de las cuentas creadas por la instalación tienen contraseña, así que si no prestas atención tu sistema se verá comprometido.
  • La declaración SHOW GRANTS te ayuda a saber que tipo de acceso tiene cada cuenta y sobre qué lo tienen. Úsala para luego quitar accesos innecesarios con REVOKE.
  • Nunca almacenes contraseñas en texto plano.
  • Usa contraseñas difíciles de romper y educa a tus usuarios a no usar números, nombres o palabras fáciles de averiguar con ataques por fuerza bruta, diccionarios o tablas rainbow. Existen multitud de aplicaciones tanto para generarlas como para almacenarlas, así que no hay excusa.

Una ayuda importante en el planteamiento, es sin duda alguna el diseño de las vistas y sus correspondientes privilegios. Normalmente, cuando establecemos los privilegios sobre las tablas, sólo nos preocupamos precisamente de éstas y damos de lado a una gran herramienta para limitar el acceso a los datos, o al menos para controlar que tipo de datos almacenados en las tablas pueden ver los usuarios y cuales no. Una forma de hacer esto, es establecer que tipo de datos son públicos, cuales críticos y cuales privados. Con el uso de vistas, a través de selects, proyecciones y joins podemos crear vistas con las que filtraremos la información accesible para nuestros usuarios.

Crear una estructura jerárquica de usuarios con sus respectivos roles. Los más típicos son el administrador, los programadores, los operadores de datos y los usuarios. Lo mismo que un usuario no tiene por qué tener acceso a los procedimientos almacenados, un programador no tiene por qué tener acceso a los nombres y números de cuenta de los clientes. Ni los usuarios de la sección de Marketing por que tener acceso a las tablas de contabilidad. Limitar el acceso mediante una aplicación muchas veces no es la forma más correcta, en cambio, si además de una aplicación usamos una estructura bien definida de quién puede hacer qué con su cuenta y sobre qué tiene acceso, nos ahorraremos muchos problemas en un futuro.

Hacer un buen diseño lleva mucho tiempo y además requiere cierta experiencia y ciertos conocimientos. Existen muchas más cosas a tener en cuenta, como la instalación de firewalls, o situar la base de datos en una zona desmilitarizada, o el uso de filtros y/o aplicaciones para evitar ataques por inyección SQL, etc, etc, pero yo, no soy un experto y no puedo abarcar todos esos temas -no, sin antes documentarme-.

Como siempre me gusta repetir, existe una cantidad exquisita de documentación suelta por la red, ansiosa de ser leída. Como todo en la vida, la experiencia se adquiere con el tiempo y los conocimientos sólo tenemos que ir a buscarlos; pues no podemos pretender levantarnos de la cama un día diciendo “Tanque cárgame un curso de seguridad intensivo para MySQL, PostgreSQL y Oracle“, por que os puedo asegurar que ese día significará que estáis atiborrados de pastillas – y no precisamente rojas o azules-.

Anuncios

Una respuesta a “Prestando atención a la seguridad de tu base de datos (MySQL)

  1. Pingback:Bitacoras.com

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: