domingo, 22 de junio de 2014

Creación de un clúster de Hadoop con Cloudera

Apache Hadoop es un framework para soluciones Big Data creado por Doug Cutting y utilizado por organizaciones como Yahoo, Amazon, Microsoft o Google.

Hadoop incluye un sistema de ficheros distribuido llamado HDFS (Hadoop Distributed File System) y un motor de trabajos en batch MapReduce. El framework está escrito en Java y los trabajos MapReduce pueden ser lanzados vía Streaming a través de cualquier lenguaje. La principal ventaja es que es un sistema escalable que utiliza hardware básico, commodity hardware, con alta disponibilidad y redundancia de datos, por defecto replica 3 bloques de datos.

Está orientado grandes volúmenes de datos, donde cada fichero es dividido en bloques de 64 o 128 Megas. Cada nodo de datos almacena bloques distintos y permite ejecutar trabajos en forma de batch, ya sean Map o Reduce, sobre esos datos. Al dividir el fichero en bloques, la lectura y trabajo sobre los datos se realizan mucho más rápido y con una programación bastante sencilla aplicando el concepto MapReduce.

Hadoop además incluye multitud de aplicaciones que facilitan mucho diferentes tareas: Flume, Sqoop, Hive, Pig, Mahout o HBase, etc. HBase es una base de datos NoSQL que permite almacenar en HDFS datos más pequeños en tablas.

Cloudera es una organización que facilita soporte y servicios sobre Apache Hadoop además de ofrecer cursos y certificaciones. El producto de software libre CDH, Cloudera Distribution Hadoop, incluye los paquetes de Hadoop compilados para varias versiones de GNU/Linux como Red Hat o Debian. A principios de año 2014 la consultora de IT Gartner ha incluido a Cloudera en su cuadrante mágico dentro del nicho de mercado.

Aquí os dejo un trabajo sobre Hadoop y todos sus elementos y aplicaciones donde además se explican los pasos para la instalación en modo nodo pseudo-distribuido y creación de un clúster de Hadoop con 4 nodos y alta disponibilidad para la versión CDH 4.5.



Para la configuración del clúster se han utilizado máquinas virtuales a partir de la imagen que Cloudera ofrece en su sitio web.
Además, incluyo la memoria adicional para realizar pruebas con las herramientas de Hadoop y para lanzar trabajos MapReduce. En el caso práctico planteado se trata de un trabajo para obtener traducciones más similares en textos en dos idiomas distintos por el número de palabras coincidentes. En github está disponible el ejemplo del proyecto para Eclipse y Maven. Sqoop facilita la importación de tablas de una base de datos en MySQL hacia HDFS. Por último, herramientas como Hive, Pig e Impala permiten lanzar consultas contra el clúster, como trabajos MapReduce, de forma rápida y sencilla.


Seguridad en Android

Cada vez surgen más problemas de seguridad en los dispositivos móviles. En los sistemas Android no iba a ser menos y hay muchos motivos de interés en encontrar y explotar los problemas de seguridad:
  • El aumento de usuarios con un smarthphone Android.
  • Almacenamiento de todo tipo de información personal, desde fotografías hasta datos bancarios.
  • La capacidad de los dispositivos es equivalente a la de un ordenador de hace unos cuantos años.
  • La mayoría de estos dispositivos está conectado a internet la mayor parte del tiempo desde redes 3G, 4G o Wifi.
  • La facilidad de localizar geográficamente un dispositivo gracias a los servicios de posicionamiento de Google Play Services.
  • Permisos de acceso a los que, a veces, el usuario no presta atención.
La nueva actualización de Android 4.4.3  permite que las aplicaciones instaladas con actualizaciones automáticas habilitadas cambien sus permisos sin notificar al usuario. Por otra parte, se ha descubierto el primer móvil, de marca china, que incluía malware de fábrica para espiar al usuario.

Hace poco hice un trabajo en el que se abordan varios de los problemas de seguridad que fueron apareciendo en versiones Android, principales vulnerabilidades como Master Key, las aplicaciones malware más conocidas y hacia donde están evolucionando, como aplicaciones que incluyen software de minado de criptomonedas oculto.

También incluyo algunos trabajos de varios expertos en seguridad como el estudio para la creación de un Rootkit, aprovechando el LKM habilitado, de Sebastián Guerrero o los trabajos de Jaime Sánchez sobre los problemas de seguridad en mensajería instantánea. Artículos de Alejandro Ramos del blog de SecurityByDefault para recuperar mensajes de WhatsApp y el artículo sobre el fraude de la Linterna Molona por Chema Alonso. Por último incluye una introducción breve sobre los problemas de espionaje actuales en móviles y una la solución, o no, propuesta por José Luis Verdeguer y Víctor Seva con SecureCall.


Herramientas y Técnicas de Inyección SQL

Hace poco realicé un trabajo optativo sobre las diferentes herramientas y técnicas de inyección SQL.

Un ataque de inyección SQL consiste en la inyección de una sentencia SQL no autorizada y ligeramente adaptada a través de un canal de entrada de datos desde el cliente para obtener un resultado distinto al original de la aplicación, por ejemplo desde el parámetro de url donde se indica el identificador de un producto.

Es un problema de seguridad muy grave cuyo origen está en la implementación del modelo con acceso a la base de datos y la ausencia de validación en los parámetros de entrada enviados desde el cliente. Existen distintas técnicas de inyección en función del canal del ataque, de si podemos ver los resultados o si la consulta enviada nos devuelve un mensaje que indique si ha tenido éxito o no.

Los ataques de inyección están clasificados en primera posición en el Top 10 de OWASP, documento centrado en las principales vulnerabilidades de aplicaciones web. La fundación OWASP, acrónimo en inglés de "Proyecto Abierto de Seguridad en Aplicaciones Web", es un organismo que apoya, gestiona y divulga documentación y metodologías para la seguridad de la información.

El motivo de que los ataques de inyección estén en el Top 10 de OWASP es que suelen ser la causa de fuga de información importante. Permiten realizar OS fingerprinting para conocer el sistema operativo o la versión del gestor de bases de datos, obtener esquemas de la base de datos, conocer el usuario utilizado en la conexión e incluso acceder a las tablas de una base de datos y obtener sus registros, por ejemplo la tabla de usuarios de la aplicación con todas sus contraseñas (normalmente hasheadas y con salt). Un ataque de inyección SQL podría incluso realizar un ataque de denegación de servicio.

Existen herramientas que automatizan todo el proceso de inyección SQL, detectando y probando diferentes técnicas de ataque. La mayoría están escritos en algún lenguaje de scripting como Pyton o Perl y son fáciles de instalar, algunas herramientas de inyección SQL interesantes son SQLMap, TheMole o SQLNinja, este último para ataques contra SQL Server.

Por último, no se debe olvidar que las bases de datos NoSQL también pueden ser susceptibles de ataques de inyección SQL, aunque no de la misma forma.

A continuación os dejo la memoria del trabajo práctico explicando las diferentes técnicas de inyección SQL y la instalación y uso de varias de las herramientas para automatizar el proceso del ataque. Para realizar las pruebas he utilizado la aplicación de OWASP Bricks en un sistema GNU/Linux Debian con Apache Web Server, PHP y MySQL.

Espero que os guste el trabajo y sirva para entender el funcionamiento básico de un ataque de inyección SQL.