Recibí una invitación para asistir a un evento de
ciberseguridad ofrecido por un proveedor de
networking, impartiéndose unos días antes del inicio de verano. Este fue su primer evento en el ámbito de la seguridad informática acogiendo a fabricantes conocidos del sector. Entre ellos destacaba una persona experta en este mundo, un
hacker, mencionado numerosas veces en este maligno blog y que además es coautor de un libro que si, mi navegador no me engaña, todavía puede localizarse fácilmente en el córner izquierdo superior de esta página:
Hacking Web Technologies. Él es
Amador Aparicio (
@amadapa).
|
Figura 1: Shodan es de cine: Hacking Tautulli, un GUI para Plex Media Server (Parte 1 de 2) |
Cuando me percaté que se pronunciaba en la agenda dando no una, sino dos charlas:
Hacking Web Technologies Old School y
From hacking IT to Hacking OT: Jungla 4.0 no dudé en enviar mi
OK de asistencia al evento.
El día del evento
Se celebró en
Barcelona en el
Café de la Pedrera. Antes del comienzo fue fácil localizarle, su camiseta de
Rammstein fue lo primero que me llamó la atención - ya somos dos fans : ) -. Me acerqué para saludar, y me recibió estupendamente. No tengáis miedo de acercaros a un
hacker, no muerden, son buenos y muy humanos, cómo todo… si se va con buena conducta y respeto ¿Qué razón habría de obtener un desprecio? A todo esto salió un recuerdo fotográfico que os dejo por aquí para que pongáis cara a
Amador - con su camiseta de
Rammstein -.
|
Figura 2: Amador y yo en el evento |
Pero no quería hablar de la parte social de este evento, sino del contenido y de lo que inspiraron en mi posteriormente, que me animé a hacer un poco de
Hacking con Buscadores usando
Shodan.
Las charlas y Shodan
Asistir a un evento de manera presencial, es como asistir a un concierto de un grupo en directo, tanto los errores como las improvisaciones ganan un valor especial, por más que sea repetida “
la función” en cada lugar, siempre es distinto.
Nos cautivó a todos con sus habilidades de
Hacking Web Technologies, a mí en particular la facilidad de “
orquestrar”
Shodan a su estilo “
old school” ¿Cómo puedo hacerlo con un portátil de gama baja-media y una conexión a Internet? Ese es uno de los objetivos, usando herramientas al alcance de todos a precios rentables.
Las demos que nos brindó eran “
live”, es decir, búsqueda de dispositivos de red públicos (y reportados) que aun sabiéndose de ello, parecía no importarles a los propietarios, “
muchos prefirieron dejar la puerta abierta o no arreglarla”…
Yo también quiero hacer Hacking Web Technologies
Se me grabaron en la memoria no volátil de mi cabeza esas búsquedas de escasos caracteres que hizo en
Shodan, y el impulso motivador para adentrarme en este tipo de buscador fue un “
flash” sobre l
a vulnerabilidad que descubrí en la cámara 360Fly, una vez alcanzado su web server.
|
Figura 3: Web Server de la 360Fly. Cadena de caracteres a buscar en Shodan |
En la
Figura 3, vemos cómo se repite la palabra “
resource” tanto en título, la
URL y hasta en el
Body de la página. Era suficiente munición”para activar a
Shodan en búsqueda de… ¿cámaras
360Fly públicas? No pareció encontrar ninguna al descubierto pero en la red de pesca lanzada había alguna otra cosa.
|
Figura 4: Búsqueda en Shodan y resultado del servicio |
Un portal nos paraba los pies pidiendo credenciales, se lee
Tautulli ¿De qué se tratará? Por la información de las cabeceras
HTTP, vemos que el servidor indica:
CherryPy/5.1.0. Sigamos más su rastro…
El papel que ejerce Tautulli
Al parecer,
según su página web oficial es una aplicación de terceros para monitorizar un servidor multimedia
Plex y la palabra
Tautulli, viene del idioma
Inuktitut. Lo siento, pero parece que
Google Translate no lo tiene en su lista de lenguas disponibles.
La sección de descarga de la web
nos lleva a su GitHub. Los avances de versionado son frecuentes, pero no parecen hacer lo mismo con todos sus componentes.
CherryPy es el servidor web usado, un
framework web minimalista escrito en
Python. Su “
changelog” de versionado también es frecuente.
|
Figura 5: Parte del Historial de versiones a día de hoy de CherryPy |
Y la pregunta que se me vino… ¿cuál es la versión de
CherryPy usado en
Tautulli? Podríamos viajar al pasado con “
la máquina del tiempo” pero en este caso es más práctico usar el propio histórico de
GitHub que guarda los cambios cómo trofeos en vitrina” Y la deducción extraída la plasmamos en forma de tabla, que así se verá con mayor claridad.
|
Figura 6: Tabla de historial de cambios CherryPy en Tautulli |
Para sacar estas deducciones, nos centramos en el fichero
wsgiserver2.py donde refleja los cambios de versionado de
CherryPy. En
Figura 6, a la izquierda, se muestra quién realizó, y las veces del cambio de este fichero. A la derecha, y de manera encadenada, se obtiene el rango deducido por las fechas de
wsgiserver2.py y la correlación del
changelog de
Tautulli. La versión de
CherryPy que abarca más versiones en
Tautulli es la
5.1.0 abarcando versión
v1.3.16 (2016-05-01) en adelante (por el momento, la
2.1.14).
Como nota curiosa para bordar algo más el rastro, también podemos ver, que
Tautulli antes se llamaba
PlexPy y que su creador principal fue
drzoidberg33 en lugar de ser
JonnyWong16.
Tautulli al descubierto
El dato del servidor
CherryPy usado es clave para buscar versiones actuales y las que datan del año
2016 (incluyendo las de
PlexPy). El momento antes de poner el
string CherryPy/5.1.0 en
Shodan lo describiría con un sentimiento similar al que uno podía tener cuando abrías uno de esos huevos sorpresa,… ¿quñe saldrá...?
|
Figura 7: Portal principal de un Tautulli desprotegido |
Entrando en puerto
8181 y al
/home en
URL sin… ¿usuario ni contraseña? Pues mirad por dónde que ya tenemos la receta para acceder a los
Tautulli’s/PlexPy’s expuestos de todo el mundo, eso sí, gracias a
Shodan. A priori obtenemos interesante información, cómo:
- Películas más vistas.
- Películas más populares.
- Los programas de TV más vistos.
- Los programas de televisión más populares.
- Visto recientemente.
- Usuarios más activos.
- La barra de estadísticas...
- Y... ¡Lo que se está viendo ahora!
Parece una buena fuente de datos de una persona para hacerse un
Big Data en toda regla al estilo de
Cambridge Analytica si tienes la dirección
IP asociada a ti, por cualquier casualidad del destino. Además te dibuja gráficos cómo muestra la siguiente
Figura 8.
|
Figura 8: Gráficas de estadísticas en Tautullli |
La avaricia rompe el saco que dicen, pues vamos a ver si podemos romperlo. Cómo
hackers intentamos
"romper” con la finalidad de que sea reparado/subsanado, notificar algo sin llegar al punto de aprovechar la brecha que un “
Bad Guy” podría llegar a hacer. En este contexto, el hecho de romper es para fortalecer, es cómo si vemos a alguien que se le cae algo por el camino y le avisamos para devolvérselo, no nos lo quedamos y nos vamos - para entendernos -, ¡por supuesto!
Echando un ojo a la videoteca
Pica la curiosidad por saber la arquitectura de esa parte. Nos dirigimos a
Libraries y entre las distintas categorías que tiene el usuario, decidimos escoger una película de
Ace Ventura. Clic para verla en
Plex, por lo que pone en la miniatura, pero algo no va a ir bien en ese punto.
|
Figura 9: Abriendo un streaming |
Ohh!... parece que a priori necesitamos las credenciales de
Plex. Parece que esa zona es robusta, pero visto todo esto tal vez encontremos otra forma. Vamos a seguir viendo el portal.
No rompas la puerta, la llave esta debajo del felpudo
Otra pieza clave es el valor del
Token que encontramos dentro del menú
Settings, pues se trata de un master
Token generado por un
Plex Media Server del usuario que ha tenido que configurarlo en esta zona de la configuración para que pueda funcionar
Tautulli con el software de
Plex.
|
Figura 10: Master Token de Plex |
Tautulli se alimenta de
Plex Media Server (PMS) mediante accesos que realiza con este
Token para poder construir una información clara de “
tracking” de los movimientos que se realizan del contenido multimedia albergado en
PMS.
Y más preguntas que surgieron… ¿qué privilegios nos da este
Token?
Google nos dijo que puede ser usado de la siguiente forma, según el soporte oficial de
Plex, pasando el valor
X-Plex-Token cómo parámetro en
URL para obtener peticiones bajo
XML.
|
Figura 11: X-Plex-Token en la dirección URL |
En la documentación se explica que para obtener el
Token hace falta un usuario y password de
Plex. Nosotros no tenemos las credenciales, pero no las necesitamos porque tenemos ya el
Token que nos “
regala”
Tautulli. No le haremos el feo y hacemos un “
unboxing” del mismo. Usaremos:
http://IP:32400/?X-Plex-Token=YOURTOKENVALUEHERE
En puerto
32400 que es el estándar usado por
Plex.
|
Figura 12: Estructura XML del Servidor Plex |
Esto parece una estructura de carpetas ¿verdad? Pero en un entorno más propio de un “
cmd style” que no de uno en modo
GUI. Vamos a ver, como reto, si somos capaces de llegar a esa película de
Ace Ventura y ver su estructura desde otra perspectiva, ahora que tenemos el
Master Token de Plex.
|
Figura 13: Navegación en estructura de carpetas bajo XML |
En
Figura 12 nos sitúa en el directorio “
root”. En
Figura 13 nos encontramos dentro de
/library ya que saltamos hasta dicho directorio, después a
sections (
/library/sections) y así sucesivamente, navegando en subcarpetas hasta llegar a la info deseada - siempre indicando el valor de
X-Plex-Token cómo autorizador de las consultas en
URI -. La interpretación de su
XML es bastante intuitiva y te hace saber el tipo de “
pavimento que pisas” en todo momento.
Las carpetas se distinguen con el nombre
Directory, estos también llevan atributos. Los directorios tienen atributos con nombre
key y el valor de éstos son los aceptados en
URL. Con lo que, para saltar de directorio (o carpeta) en directorio, usaremos el contenido de las
key. Pero espera, esta
key parece contener una extensión de fichero, un
.mp4. ¿Será otro directorio?
|
Figura 14: La key de la película |
Nota: Puede usarse el atributo
title (o el de
type) como referencia para tener una idea del contenido, ya que el valor de una key no siempre será igual al valor del atributo
title y no contendrá información deducible sobre su contenido.
[Continúa en la segunda parte]
Autor: Gerard Fuguet (@GerardFuguet)