Securiza tu servidor MQTT y evitarás problemas

¿Por qué debemos dedicar un rato a securizar nuestros entornos? La Domótica y el protocolo MQTT

Es algo que nos gusta, que nos atrae. El estar indagando, aprendiendo, investigando, OSINTnizando por internet, exprimiendo nuestras herramientas, destripando protocolos y, esta vez, le ha tocado a MQTT. Con éste artículo no pretendemos realizar un análisis exhaustivo de este protocolo, sólo pretendemos mostrar cómo podemos descubrir hábitos de vida, extraer información de dispositivos domóticos, localización de dispositivos móviles, etc invirtiendo solo un poco de tiempo, un rato de ocio. Eso sí, sin malas intenciones.

Pero comencemos por el principio. ¿ Qué es la domótica?

La domótica es una tecnología que ayuda a monitorizar la actividad de los diferentes elementos y dispositivos electrónicos de un hogar o empresa. De esta forma, se puede controlar en tiempo real diferentes características o aspectos relacionados con los dispositivos como temperatura, humedad, volumen o puesta en marcha de dispositivos de sonido, iluminación, información de dispositivos móviles, etc. Por su ubicación dentro de las redes es posible obtener información, a través de los distintos sensores, de localización, hábitos de vida, desplazamientos, etc que podría ser aprovechados por terceros de forma muy sencilla si no se toman las medidas básicas de protección y bastionado, es decir, tomar las acciones pertinentes para asegurar el sistema o servidor.

¿ Y qué es exactamente MQTT ?

MQTT (Message Queuing Telemetry Transport) es un protocolo usado para la comunicación (machine-to-machine) (M2M) en el Internet of Things (IoT). Es por tanto un protocolo usado en domótica.

Básicamente se usa para conectar y controlar de forma remota dispositivos domésticos inteligentes, un protocolo cliente-servidor usado como transporte de mensajes sobre el que se publican/suscriben los entre los dispositivos/sensores interconectados. Un protocolo muy ligero y sencillo que necesita de pocos recursos y ancho de banda para las comunicaciones. Apto, por ejemplo, para su uso en dispositivos móviles y otros.

Existe gran cantidad de guías de configuración para este protocolo, sin embargo muchos usuarios han obviado el capítulo referente a la securización del servidor. Solo bastaría con configurar un usuario y contraseña para conseguir un entorno “un poquito más seguro”.

¿ Y qué podemos descubrir a través de MQTT y las herramientas adecuadas ?

Con un cliente básico de mosquitto puedes ver los brokers accesibles y eso, desde nuestro punto de vista, es demasiada información expuesta y sin sentido.

Aquí os dejamos algunos ejemplos que hemos ido viendo a lo largo de esas tardes/noche de insomnio.

SSID de tu wifi con su MAC:

tele/D0303/STATE {“Time”:”2018-xx-xxT00:46:11",”Uptime”:”17T06:16:04",”Vcc”:3.104,”POWER”:”OFF”,”Wifi”:{“AP”:1,”SSId”:”GO**S**D**”,”RSSI”:72,”AP**c”:”**:**:**:**:**:**”}

Si tienes la puerta de garaje abierta o cerrada:

iot/garage-gauche/position/position 0

Si estás viendo la televisión y ¿¡lo que ves!?:

Kodi/Acer2/status/title {“kodi_details”: {“title”: “Attack on Central City (2)”, “fanart”: “image://httpmié%2f%2fwww.thetvdb.com%2fbanners%2ffanart%2foriginal%2f5ba534ae8d939.jpg/", “id”: 256, “file”: “nfs://192.168.0.237/volume1/video/TV Show/The flash (2014)/The Flash Season 3/The.Flash.S03E14.720p.HDTV.x265.ShAaNiG.mkv”, “label”: “Attack on Central City (2)”, “type”: “episode”, “thumbnail”: “image://httpmié%2f%2fwww.thetvdb.com%2fbanners%2fepisodes%2f279121%2f5944643.jpg/", “streamdetails”: {“video”: [{“language”: “”, “stereomode”: “”, “width”: 1280, “codec”: “hevc”, “aspect”: 1.7777800559997559, “duration”: 2547, “height”: 720}], “audio”: [{“channels”: 2, “codec”: “aac”, “language”: “”}], “subtitle”: []}}, “val”: “Attack on Central City (2)”}

Si tu roomba se está cargando, el schedule que tienes configurado:

/roomba/feedback/cleanSchedule_cycle [‘none’, ‘start’, ‘start’, ‘start’, ‘start’, ‘start’, ‘none’]

Además se expone la configuración de las webcams, con el login/clave de acceso, la cual “posiblemente” sea reutilizada en otros entornos.

Si recibes tus feeds de noticias:

informados/news {“id”:”3**97****”,”title”:”Las l\u00e1grimas por Boca, la Copa Davis y otra lesi\u00f3n que lo fortaleci\u00f3: las confesiones de Juan Mart\u00edn del Potro”,”summary”:”Mientras contin\u00faa recuper\u00e1ndose de la fractura de r\u00f3tula que sufri\u00f3 en el mes de octubre, Juan Mart\u00edn Del Potro habl\u00f3 con Juan Pablo Varsky, en el flamante podcast \”Se juega como se vive\”. El di\u00e1logo cruz\u00f3 temas como su presente, sus lesiones, la Copa Davis y hasta algunas revelaciones sobre la vida extradeportiva. Adem\u00e1s, no falt\u00f3 tiempo para comentar la situaci\u00f3n de Boca, club del que es hincha.”,”published”:******,”href”:”https:\/\/www.lanacion.com.ar\/2204349-del-potro","imageUrl":"\/octo\/plugins\/gibraltarsf\/informados\/assets\/images\/backnew.png","fuenteId":"2","fuente_detalle":"La Naci\u00f3n Online”,”hash”:”************”}

Si recibes los mensajes en telegram, con toda la información:

openhab/out/Service_Home_TelegramAPI_LastSeen/state ON
telegram/0/communicate/users {“6******1”:”Y***”,”3***9**9*”:”대원”,”4****450*”:”이”,”5**07**40":”호운”}

y un largo etcétera.

No sólo puedes verlo, también, “quizá” puedes interactuar sobre ellos, apagar y encender luces, abrir y cerrar la puerta del garaje e incluso decirle a la escoba que se ponga a limpiar a las 2:00 am.

Como el ser humano es un animal de muy malas costumbres y tropieza dos veces en la misma piedra, no conforme con hacer jornadas de puertas abiertas en su servidor MQTT, también lo hacemos con OpenHAB.

¿ Qué es OpenHab?

OpenHAB es un open source que permite gestionar sensores de diferentes fabricantes para controlarlos desde un entorno más amigable, el navegador.

Bien, ahora nos ponen las cosas sencillas, a click de ratón te quitamos la calefacción, subimos la temperatura de la sauna o te subimos la puerta del garaje para ventilar.

este para los que sepan ruso
este para los que sepan italiano

Dejamos las bromas porque el tema comienza a ser preocupante, sobre todo cuando, dentro de nuestra curiosidad, vemos brokers de owntracks.

¿ Qué es Owntracks ?

Owntracks es un open source que te permite compartir ubicaciones GPS. Creo que ya veis por dónde van los tiros y la importancia, desde el punto de la privacidad y seguridad, que tiene.

Llegado a este punto, la diversión pasa a nivel de preocupación. Es cierto que es muy peligroso que modifiquen el estado de un sensor como la temperatura de la sauna pero no se a qué nivel de preocupación llega el que conozcan tu ubicación exacta en cualquier momento del día.

No nos alarmemos, es cierto que aún son pocos pero desde nuestro punto de vista son suficientes. Pensamos que es mejor avisar desde el principio para que esto no se convierta en la pelota de un escarabajo pelotero.

Lo que hemos visto y lo que no decimos, os lo dejamos aquí:

Hemos visto el IMEI:

owntracks/trackers/3**71**4*0*4*3* {“_type”:”location”,”lat”:**.******,”lon”:**.******,”tst”:**********,”tid”:”*6",”vel”:0,”cog”:**0.85,”alt”:null,”acc”:
1,”fuel”:43,”odo”:16248367,”temp”:null,”imei”:”3**71**4*0*4*3*”}

Saber algo más del bloque familiar:

owntracks/homeassistant/*atri***** {“cog”:186,”conn”:”w”,”acc”:5,”lon”:**.*********,”vel”:38,”_type”:”location”,”batt”:7,”vac”:3,”lat”:**.********722527,”t”:”t”,”tst”:15**6****6,”alt”:151,”tid”:”pm”}
owntracks/homeassistant/p****ov {“_type”:”location”,”tid”:”ds”,”acc”:19,”batt”:89,”conn”:”m”,”lat”:**.****711,”lon”:*.**95**,”tst”:15**6****6}
owntracks/homeassistant/son* {“_type”:”location”,”tid”:”h1",”conn”:”m”,”lat”:**.****,”lon”:**.0***9,”tst”:15**6****6,”acc”:1200,”batt”:68}

Hemos estado trazando algunas personas. Hemos visto cuando salían de casa, donde se iban, si estaban mucho tiempo en un sitio posiblemente fuera su lugar de trabajo o su casa.

Algunas personas no paran durante el día…

Y para terminar con el plato más fuerte. Los autobuses de una compañía de los países nórdicos.

owntracks/tag/6**44/gps/rmc $GPRMC,231204.00,A,****.*****,N,****4.***29,E,0.008,,261218,,,D*79

recorrido del autobus

La información está ahí, podéis ser curiosos o podéis ser … esa es una elección vuestra. Solo un par de minutos de reflexión:

Lo que os hemos mostrado es un poco de lo que hemos visto; pero ahí fuera hay más, mucha más información a disposición de cualquiera que tenga buenas o malas intenciones. En el caso de los últimos pueden saber dónde exactamente vives, pueden manipular los sensores, pueden saber si estás o no estas en casa, desactivar alarmas, pueden entrar…

Es cierto que por ahora solo son unos miles de servidores a lo largo del mundo pero esto sólo acaba de empezar, el mundo de la domótica está creciendo, a todos nos gusta automatizar nuestra casa y, sí está bien, pero antes de hacerlo documéntate, pregunta en los foros, eso es mejor que exponer 2T de fotos a disposición de la comunidad.

Esperemos que os haya gustado. :D

Os dejamos una guía rápida de configuración de mqtt y owntracks.

“la curiosidad nunca mató a la gata y al gato, solo alimentó su inquietud”
That’s all folks!!

Configurando rápidamente mosquitto.

Aquí os dejamos algunas directrices que debéis tener en cuenta si tenéis previsto usar MQTT. Insistimos; no pretendemos que sea una guía de instalación.

Cuando termines la instalación no olvides, establecer usuario y clave. Puedes hacerlo de dos formas:

  1. creando un fichero con esos datos
  2. usando el comando que viene con la instalación.

En ambos casos deberás usar el comando mosquitto_passwd.

1. Creando fichero

Crea un fichero con un editor de textos. Por ejemplo, el vi -;

El fichero deberá tener el formato usuario:password

Las claves del fichero deben estar en texto plano.

Ejecuta:

mosquitto_passwd -U fichero

Si lo abres, verás que la clave se ha cifrado.

2. usando directamente el comando

mosquitto_passwd -c fichero user

Te pedirá la clave por la consola.

Nota: puedes usar mosquitto_passwd -b passwordfile user password pero eso de dejar la clave en el history :( Si lo haces un history -r para borrar comandos de esa sesión

Tanto en un método como en otro debes de configurar el fichero mosquitto.conf para indicarle el nombre de fichero con usuario/clave así como eliminar el acceso anonymous.

allow_anonymous false
password_file fichero

No olvides de reiniciar el servidor.

Otra buena práctica sería usar ssl para las conexiones. Aquí os dejamos una configuración de cómo usando un certificado de LetsEncrypt puedes securizar tu servidor nginx mqtt y owntracks.

Sacado de https://community.home-assistant.io/t/mqtt-through-nginx-and-owntracks/4943/8

server {
listen 8889 ssl;
server_name YOURSERVER; # Your site
ssl_certificate /etc/letsencrypt/live/YOURSERVER/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOURSERVER/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
location / {
proxy_pass http://localhost:1884/; # Mosquitto websockets port
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
auth_basic “Restricted Content”;
auth_basic_user_file /etc/nginx/.htpasswd;
}
}

¡Ah! ¡otra cosa! desactiva el uPnP del router, te evitarás problemas.

Referencias:

--

--