Poder visualizar los datos es una de las mejores formas para entender cómo funciona cualquier fenómeno, de ahí la importancia de contar con herramientas que nos permitan tener este tipo de visualizaciones de forma simple y con un alto grado de interacción con los datos para modificarlos y acomodarlos a nuestras necesidades.
Recientemente fue liberado OpenGraphiti, un framework de código abierto que puede ser utilizado en la visualización de datos 3D. Está pensado para el análisis de grafos a partir de datos científicos, para así visualizar e interactuar con redes semánticas y trabajar con ellos.
Lo interesante de este framework es que ofrece una API bastante fácil de usar y con varias bibliotecas asociadas que permiten obtener conjuntos de datos a medida, a partir de información recolectada en nuestras investigaciones. Además, OpenGraphiti aprovecha la potencia de la GPU para procesar y explorar los datos, generando gráficos con su propio motor 3D.
Ya que resulta ser una herramienta muy interesante para lograr visualizaciones increíbles y análisis sencillos, queremos hacer una serie de publicaciones en las cuales vamos a mostrarles cómo instalarlo y configurarlo, y los principales usos que le podemos dar. Como la documentación sobre la herramienta aún es bastante pobre, esto nos da la posibilidad de que utilicemos We Live Security en Español como una de las primeras comunidades en nuestro idioma que discute sobre este tema.
Así que sin más preámbulos, vamos a empezar con una pequeña introducción a los que son los grafos y los pasos que deberíamos seguir para la instalación de la herramienta. Si bien en la página oficial el proceso parece bastante simple, hay una serie de escollos que tuve que enfrentar durante la instalación y que resulta interesante compartirlos para hacerles más fácil el trabajo con la herramienta.
Grafos 101
La forma más sencilla de explicar lo que es un grafo, sin remitirnos a explicaciones etimológicas, es hablar de un conjunto de objetos que se denominan nodos (nodes) que están relacionados entre sí y estas relaciones se dibujan como aristas (edges). Por lo tanto, lo que vamos a obtener es un conjunto de nodos que van a estar conectados por líneas de acuerdo a las características relacionales entre ellos.
Este concepto, que en principio es tan sencillo, nos va a permitir analizar y visualizar las relaciones que se dan entre diferentes nodos para lograr entender más fácilmente su interacción. Vale la pena aclarar que todo el análisis de este tipo de elementos está soportado en fuertes bases matemáticas en lo que se conoce como Teoría de grafos, sobre la cual seguramente estaremos volviendo cuando empecemos a utilizar la herramienta.
En nuestro caso, este tipo de análisis nos va permitir analizar el tráfico en una red de computadoras o las interacciones entre diferentes direcciones IP que estén asociadas a una botnet. Si pensamos en cada computadora o cada víctima como un nodo de nuestro grafo, las conexiones o interacciones entre ellas van a estar representadas por las aristas. Para profundizar todo lo que tiene que ver con teoría de grafos, las notas de clase del profesor Tero Harju, de la Universidad de Turku en Finlandia son una buena alternativa.
Instalando OpenGraphiti
Si ingresamos a la página web de OpenGraphiti nos encontraremos con que solo es necesario instalar un par de paquetes como dependencias de la herramienta antes de compilarlo y empezar a trabajar con el framework. Pero realmente hay que tener instaladas unas librerías adicionales; lo bueno es que al clonar el repositorio completo de GitHub de OpenGraphiti podemos encontrarnos con estas librerías extras tal como lo vemos en la siguiente captura:
Una vez que tengamos todas estas dependencias instaladas, conviene revisar que tengamos correctamente instaladas todas las dependencias de OpenCL necesarias para que este framework pueda correr sin problemas. Dependiendo de la versión de Linux que estés utilizando, es necesario tener cuidado con los enlaces símbolicos que se generen, ya que la ruta donde se encuentre la librería puede cambiar. Particularmente en UBUNTU 14.04 LTS está en /opt/intel.
Hay un último problema que deberíamos atender: es un tema relacionado con la librería Leap Motion y que al parecer varios usuarios del framework han sufrido, incluyéndome. De hecho, en el foro oficial aconsejan comentar la línea que carga esta librería antes de la compilación de la herramienta para no tener inconvenientes. Abajo dejo una captura de la línea que hay que comentar en ../graphiti/Scripts/__init.py__:
Ahora sí deberíamos tener todo listo para compilar y ejecutar nuestro framework para empezar a disfrutar de estas hermosas visualizaciones. Si durante la compilación se genera un error con el archivo Window.hh recomiendo revisar que la carpeta llamada GUI en .../raindance/Core/ esté con el nombre indicado por el compilador.
Primeros pasos con OpenGraphiti
Una vez que lanzamos la herramienta nos vamos a poder encontrar con una sobria interfaz que nos ofrece las secciones necesarias para interactuar con nuestro grafo. Tal como vemos en la siguiente captura, en la parte izquierda de la ventana tenemos las opciones que nos van a permitir controlar el comporamiento del grafo y la forma en que lo vamos visualizando:
Por otra parte, en la parte derecha de la ventana tenemos el menú de configuración y opciones que nos permiten extraer la información valiosa de nuestro grafo.
En nuestro próximo post relacionado con este tema vamos a utilizar los datos de una captura de red del comportamiento de una botnet realizada por la Universidad CTU de República Checa, para explorar las posibilidades que nos ofrece esta herramienta. Mientras tanto, los invito a que compartan las opciones y casos de uso que consideren relevantes.