Blog

Accediendo a entornos BigData y Bases de Datos NoSQL – MongoDB

Buenas a todos! En el post de hoy vamos a ver como eso del BigData cada día esta creciendo mas, pero mucha gente lo instala y utiliza sin tomar ninguna medida de seguridad como se suele hacer con bases de datos tradicionales como las bases de datos relacionales que se suelen administrar desde MySQL, Postrgres, etc.

 

Pero… ¿Que es eso del BigData?

Pues básicamente consiste en el tratamiento de una enorme cantidad de información, que debido al rápido avance de las tecnologías cada vez se utiliza mas debido a que haciendo uso de bases de datos tradicionales muchas veces seria imposible tratar dichas cantidades de información debido a que se tardaría muchísimo mas en hacer las búsquedas.

 

Y… ¿Si no utiliza bases de datos relacionales… Que utiliza?

Pues normalmente hace uso de bases de datos NoSQL, que se diferencia de las bases de datos SQL en una serie de cosas como; No utiliza como lenguaje SQL, los datos almacenados no necesitan de estructuras fijas como tablas y en cambio almacenan todo en formato JSON y un largo etc que no voy a explicar aquí.

Al igual que para administrar bases de datos SQL utilizamos mysql, postgres, etc, en el caso de bases de datos NoSQL podemos hacer uso de otros como por ejemplo mongoDB que es el que veremos en este post.

Si queréis mas información aquí os dejo un par de enlaces para que le echéis un ojo:

NoSQL – Wikipedia

Understanding MongoDB Storage

Como hemos dicho, aquí vamos a ver el caso de mongoDB. Este servicio nos permite conectarnos a la base de datos NoSQL para poder administrarla por ejemplo vía web y ara ello debemos de conectarnos al puerto 28017. Si hacemos una búsqueda en Shodan podemos ver que una gran cantidad de host tienen corriendo el servicio de forma accesible al exterior.

mongoDB_01

 

 

Cuando accedemos a una aplicación a través de dicho puerto nos encontramos algo como lo siguiente…

mongoDB_02

 

 

En la pagina principal donde nos conectamos podemos obtener información acerca del host, pero ademas tenemos en la parte de arriba una serie de enlace a la derecha de “Commands”. Esto nos permite ejecutar comandos directamente en la base de datos, peeeero en la mayoría de casos cuando intentamos acceder vemos lo siguiente…

mongoDB_03

 

Esto indica que el servicio se ha levantado sin la opción “rest” por lo que ya nos podemos olvidar de ejecutar comando en la base de datos… o no? Por lo menos no a través de la web, pero al igual que he dicho que normalmente no es posible ejecutar comandos a traves de la web porque los administradores no suelen iniciar el servicio mongo con el parámetro “rest”, si que es posible hacerlo si nos conectamos directamente al puerto de mongo.

Hasta ahora nos hemos conectado al puerto 28017 que es de administración a través de la web (Como si fuera un phpmyadmin), pero ahora nos vamos a conectar directamente al puerto de mongo (El equivalente a mysql) que se encuentra en el puerto 27017 por defecto.

Para conectarnos podemos hacer uso de una gran cantidad de software, primeramente vamos a ver uno que se llama robomongo y es bastante sencillo y potente.

Para descargarlo debemos ir a su web

mongoDB_04

 

 

Una vez lo hemos descargado para el SO que queramos, lo instalamos, arrancamos y vemos algo como lo siguiente…

mongoDB_05

 

 

Aquí se nos esta pidiendo a donde queremos conectarnos, en nuestro caso tendríamos que darle arriba a la izquierda en “create” para crear una nueva conexión. Le damos y rellenamos los campos (IP y puerto) como vemos a continuación…

mongoDB_06

 

Una vez le damos a guardar ya tendríamos lista la conexión, solo tenemos que darle a conectar y…

mongoDB_07

 

En una inmensa cantidad de ocasiones veremos como nos permite conectarnos a la base de datos con completos permisos para hacer lo que queramos sin necesidad de introducir unos credenciales.

Una vez estamos ahí podríamos de forma trivial listar las “tablas” o “contenedores” de datos que tiene cada base de datos…

mongoDB_08

 

 

Y una vez echo esto podríamos lógicamente ver que hay ahí dentro, es decir los datos directamente como podemos ver en la siguiente imagen…

mongoDB_09

 

 

Una vez tenemos listados todos los “Objetos” solo tendríamos que elegir uno cualquiera y veríamos que tenemos dentro con posibilidad completa y sencilla para cambiar lo que quisiéramos directamente ahí…

mongoDB_10

 

 

Esto permitiría alterar la base de datos a nuestro antojo, pero lógicamente no tendríamos que ir mirando uno por uno lo que estamos buscando, de igual forma que en SQL podemos hacer búsquedas aquí también, pero no quiero meterme en ello para evitar que quede un post larguísimo.

Bueno, pero ademas de esto a la hora de modificar deberíamos tener una serie de cosas en cuenta, la primera seria comprobar que no hay mas puertos a la escucha en el host y en caso de haberlos comprobar si tienen o no las mismas bases de datos porque pueden ser dos entornos completamente distintos.

mongoDB_12

 

 

Y lo otro que tendríamos que tener en cuenta es si ese host al que hemos accedido esta dentro de una estructura de servidores tipo Maestro-Esclavo, muy común en entornos BigData, donde existen una serie de host Maestros (Principales y Secundarios) que transmiten la información y la replican en otros host Esclavos. En caso de existir una estructura de este estilo deberíamos cambiar los datos en los host Maestros (A ser preferible en los host Principales).

Esto normalmente es bastante fácil de ver haciendo uso del software de MongoDB. Para instalarlo únicamente tenemos que hacer lo siguiente (Aunque es pesado el programa)…

mongoDB_11

 

 

Una vez lo tenemos instalado podemos conectarnos al host en cuestion mediante linea de comandos de la siguiente forma…

mongoDB_13

 

 

Como veis me he conectado, he listado las bases de datos, he accedido a una y he mostrados las colecciones (tables en mysql) de dicha base de datos. Pero en lo que os tenéis que fijar es en el símbolo “>” que en muchas ocasiones nos permite conocer si existe o no alguna estructura Maestro-Esclavo. En este caso no, pero si la hubiera y nos hubiéramos conectado a un host Maestro saldría algo como “PRIMARY>”, si fuera un esclavo podría ser “mongo>”, pero bueno, esto es algo que ya se escapa un poco, y que si os toca hacer alguna auditoria a un entorno BigData os tocara buscar 😉

Hasta aquí llega el post de hoy donde hemos visto que los nuevos entornos BigData tan actuales muchas veces son fáciles de instalar como en el caso de MongoDB, pero una mayoría de veces se les olvida a los administradores que esas plataformas tan modernas también necesitan ser aseguradas y desde luego no dejarlas completamente abiertas como LA INMENSA MAYORÍA.

Por si queréis indagar un poco aquí os dejo algunos documentos muy interesantes sobre como atacar MongoDB, Server Side JavaScript Injection, NoSQL Injection y demás, de lo que hablaremos en proximos post!

Attacking MongoDB

Server Side JavaScript Injection

NoSQL Injection – OWASP

Espero que os haya gustado!

Un saludo,

Eduardo.

  1. Turo
    Turo05-19-2014

    Esto si que es interesante….Estupendo post orientado a los sistemas de producción modernos,me acabas de hipotecar la semana estudiando Eduardo xD….
    Gracias por compartir¡¡.

Leave a Reply

*

    No Twitter Messages