miércoles, octubre 07, 2015

Controlar con Sinfonier un bot de Telegram integrado con Latch y Virus Total

El pasado 24-25 de Septiembre, en ElevenPaths se propuso dentro de las actividades del hackaton Equinox un concurso para desarolladores de forma individual o por equipos con una modalidad non-stop durante 24 horas con el objeto de programar una idea con la única condición de que funcionase "Put your code where your mouth is". Este no es un concurso de presentaciones sino de hacks de programadores, por lo tanto no se permitían presentaciones ni dejar cosas sobre el papel. Era obligatoria la demostración en la presentación del hack.

Figura 1: Controlar con Sinfonier un bot de Telegram integrado con Latch y Virus Total

Lo principal de este Equinox era disfrutar y salirse un poco de la rutina del día a día y sacar algo de tiempo para poner a funcionar la típica idea que surge hablando con los amigos tomando un café o charlando sobre cualquier tema pero que por culpa del día a día en el trabajo nunca llegas a implementar. Los compañeros de Sinfonier, Pedro (@pejema44) y Alberto (@ajsanchezsanz) llevaban tiempo con ganas de utilizar la API-Bot de Telegram así que el momento era inmejorable para intentar integrarlo en Sinfonier y de paso usar Latch, cuya integración con Sinfonier para controlar el flujo de las topologías también tenían en mente.


Figura 2: Resumen en fotos de Equinox Autumn 2015

Una vez que sabían qué tecnologías querían utilizar, necesitaban crear un hack con un caso de uso aplicado a la vida real. La idea de comienzo fue bastante simple: usar Latch para avisar, vía Telegram, a todos los contactos de un usuario de que esa persona iba a estar ausente debido a que iba a estar conduciendo (utilidad digna de la campaña “ponle freno”). Para ello únicamente necesitaban que su bot de Telegram estuviera dentro de los grupos donde el usuario quisiera realizar ese aviso automático. Se pusieron manos a la obra y éste es el resultado de su trabajo

Creación del bot para Telegram

La integración con Telegram dentro de Sinfonier es de entrada y salida. Es decir, se utiliza un Spout para leer las conversaciones y un Drain para enviar mensajes a las mismas. En el blog de Sinfonier hemos hecho un artículo, titulado "How to use Telegram Modules in Sinfonier" donde explicamos en detalle el funcionamiento de ambos módulos. En este par de artículos tienes un par de ejemplos más de cómo se pueden utilizar los Spouts, Bolts y Drains en el mundo del procesamiento de datos para sacar inteligencia. Además, tienes un libro de generación de ciberinteligencia con Sinfonier que explica todo su funcionamiento.
- Investigar Cibercrimen en Android con Sinfonier y Path 5 (Tacyt)
- Procesado y Generación de CyberINT con Sinfonier
El uso de este bot de Telegram integrado en Sinfonier puede ser de mucha ayuda en sistemas de inteligencia artificial o monitorización masiva de mensajes. Es una forma de conectar los flujos de mensajes, los flujos de estados o la información de los contactos que se producen en Telegram con una topología de procesamiento continuo en Sinfonier que permita generar alertas ante determinadas situaciones, algo que puede ser muy útil en servicios de Ciberinteligencia.

Figura 3: Comandos del bot de Telegram usado en el concurso Equinox

Los comandos que configuramos para nuestro bot de Telegram son muy sencillos:
/start : Muestra información del bot y una pequeña ayuda sobre los comandos disponibles
/ping : El bot contesta “pong”, para comprobar que está vivo.
/drivingmodelatch {pair_code} : Recibe como parámetro un código de emparejamiento de Latch y realiza el emparejamiento usando el Bolt LatchPair
Integración de Latch en topologías Sinfonier

Una vez creado el bot de Telegram, es necesario conseguir leer las conversaciones del chat dónde está nuestro bot. Para ello se ha creado un Spout en Sinfonier, que haciendo uso de la API recupera los mensajes. Además también es necesario un Drain que permita al bot de Telegram escribir en una conversación los resultados que salgan de las topologías Sinfonier que procesen el flujo de datos.

Figura 4: Spout y Drain en Sinfonier para Telegram

Una vez hecho esta parte decidimos las funcionalidades de nuestro bot de Telegram. Se nos ocurrió que podríamos implementar un modo coche (DriveMode) y que podíamos aprovechar para integrar Latch como forma de control del modo. Cuando bloqueásemos el Latch, se enviaría un mensaje a todas las conversaciones donde estuviera el usuario avisando que estaba viajando y no iba a poder contestar, y cuando desbloqueara Latch mandaría un mensaje diciendo que volvía a estar disponible.

Esta integración de permite cambiar el funcionamiento de una topología Sinfonier con la app de Latch y permitiría hacer muchos hacks, que ya hemos visto que con Latch se puede hasta controlar el estado del timbre de una casa, como explica nuestro compañero Jorge Rivera en su artículo de "Latch y el Internet de las cosas", y que puedes ver en este vídeo.


Figura 5: Controlando el sonido del timbre de casa con Latch y un Arduino

Nos pusimos manos a la obra y desarrollamos los módulos necesarios para parearnos con Latch desde Telegram (mejor así que utilizar un script externo) y controlar el estado del pestillo para saber si el usuario lo había puesto en estado abierto o cerrado.

Figura 6: Activando el Drive Mode en Telegram con Latch y Sinfonier

Para controlar el estado de Latch (On/Off) de los usuarios, guardamos el estado de cada usuario, junto con su accountId de Latch y su ID de Telegram, en una base de datos MongoDB y vamos comprobando los cambios de estado para informar vía Telegram que un determinado usuario se ha latcheado y “no está disponible” o ha desbloqueado el pestillo de Latch y “vuelve a estar disponible”.

Analizando URLs maliciosas con Virus Total

Además de esta funcionalidad, se decidió aplicar al bot de Telegram algo relacionado con la seguridad. Algo interesante como analizar todas las URLs que lleguen a una conversación donde esté presente el bot y poder detectar ataques de phishing, estafas o distribución de malware que se estén distribuyendo vía Telegram. Para ello hicimos uso de un Bolt de Sinfonier que analiza las URLs contra la API de VirusTotal. Si detecta que la URL es maliciosa, el bot de Telegram envía un mensaje a la conversación informando que se ha enviado una URL peligrosa y no se debe abrir. En el siguiente vídeo se ve su funcionamiento.


Figura 7: Bot de Telegram integrado con Latch y Virus Total controlado por Sinfonier

Esto es lo que las 24 horas del reto dieron de sí, pero se podrían seguir añadiendo comandos al bot de Telegram para implementar cualquier otra cosa que se nos ocurra: integrarse con servicios externos, lanzar comandos para el Internet de las cosas, creación de alertas, juegos multijugador, construir servicios sociales, creación de encuestas y todo lo que se nos ocurra.  Y así de sencillo es integrar un servicio de mensajería como Telegram con Latch usando como plataforma Sinfonier, en este caso Sinfonier Community.

Figura 8: Topología de Sinfonier para controlar el Bot de Telegram integrado con Latch y Sinfonier

Todo esto que os he contado, está resumido en la siguiente topología Sinfonier y tienes disponibles todos los Bolts y Spouts en la plataforma Sinfonier Community para que desarrolles lo que tú desees. Para el que quiera saber un poco más sobre las posibilidades de Sinfonier, aquí tienes la presentación que se hizo de Sinfonier en RootedCON y en este enlace un vídeo a la presentación que se hizo de Sinfonier en Big Data Spain [inglés] con diferentes demostraciones prácticas.


Figura 9: Presentación de Sinfonier en RootedCON

¿Crees que puedas hacer algo diferente o mejorar esta aproximación? Estate atent@ al Blog de Eleven Paths y al Blog de Sinfonier - ¿estás suscrito ya a ellos? - estos días porque llegan buenos tiempos para los valientes que aceptan nuevos retos!

Autor: Equipo de Sinfonier
Sinfonier Project (@e_sinfonier)

2 comentarios:

  1. no me gusta la palabra sinfonieeeeeeeeeeeeeeeeeeeerrrrrr

    ResponderEliminar
  2. Me gusta lo del bot que analiza las urls y archivos para enviarlos a Virus Total.

    ResponderEliminar