Responsive image

El viaje del conocimiento

25 mayo 2023

Prólogo


Hoy estoy de celebración, por fin han publicado en actas la nota de mi Trabajo Fin de Máster, con esto finalizo mi Máster en Seguridad Informática por la Universidad de Jaén.

Durante los últimos dos años, me he sumergido en un proyecto que ha abarcado una amplia gama de áreas de conocimiento, ha desafiado mis habilidades y, sobre todo, me ha brindado una oportunidad invaluable de aprendizaje y crecimiento personal.

El TFM, sin duda alguna, representa uno de los desafíos más significativos y gratificantes que he enfrentado en mi trayectoria académica. Su envergadura y extensión han permitido que me sumerja en diferentes disciplinas y me haya permitido explorar aspectos diversos relacionados con mi área de estudio. A medida que avanzaba en este proyecto, me di cuenta de la amplitud del conocimiento que debía adquirir para abordar de manera adecuada cada aspecto de mi investigación.

A lo largo de este proceso, me he enfrentado a desafíos intelectuales y técnicos que han requerido una dedicación y esfuerzo constantes. Sin embargo, cada obstáculo superado ha resultado en un crecimiento personal invaluable. He aprendido a investigar, a sintetizar información compleja, a desarrollar mi capacidad crítica y a aplicar metodologías rigurosas en la búsqueda de respuestas.

Titulado "Diseño e implementación de un sistema de transmisión y monitorización de SFA en localizaciones remotas", mi TFM es un proyecto de investigación y desarrollo y continuación de mi TFG. Este proyecto define el diseño e implementación de un sistema inalámbrico de monitorización para SFA (sistemas fotovoltaicos autónomos) instalados en localizaciones remotas, como pueden ser las comunidades de los países en desarrollo.

Con este trabajo se pretende centralizar los datos de monitorización de diversos SFA y transmitirlos a través de Internet a un servidor para que sean accesibles de manera remota. Se tendrán en cuenta técnicas de seguridad para la transmisión y almacenamiento de datos así como prevención de ataques al servidor donde se almacena la información.

Finalmente, el día 25 de mayo de 2023 defendí mi Trabajo Fin de Máster frente al tribunal de la Universidad de Jaén, el cual determinó que merecía la máxima nota y matrícula de honor. En esta sección de mi blog, trato de resumir el trabajo realizado y del cual me siento muy orgulloso.


Introducción


Para comenzar, que es un Sistema Fotovoltaico Autónomo o SFA por siglas. Esto es un sistema capaz de producir energía y autoabastecerse aprovechando la energía solar. Consta de 3 partes fundamentales: el módulo fotovoltaico para generar la energía, la batería para almacenar la energía excedente que será usada cuando no haya luz solar y la carga a alimentar.

error loading image :(

Para generar energía a partir del sol un módulo fotovoltaico se compone de muchas células fotovoltaicas. Estas células suelen están basadas en una capa P y una capa N que generan una diferencia de potencial cuando incide la luz solar.

error loading image :(

Los SFA son muy utilizados, por ejemplo es muy común verlos en el ámbito de la agricultura para dar energía a los sistemas de riego. Sin embargo, existe todavía una gran parte de la población que no dispone de acceso a la electricidad donde los SFA tienen un papel fundamental. Ya que son utilizados como fuente principal de energía en pequeñas comunidades de localizaciones remotas. Por ejemplo, en muchas zonas de África.

error loading image :(

Estas comunidades se componen de pequeñas viviendas, cada una con un pequeño SFA para dar energía a pequeños electrodomésticos y aparatos eléctricos.

Sin embargo, debido a los escasos recursos de estas comunidades los SFA no suelen incluir un sistema de monitorización. El cual es muy importante ya que ayuda a prevenir fallos y permite alargar enormemente la vida útil de los SFA.

Tras un estudio inicial y debido al contexto en el que se encuentran estos SFA, la solución que hemos considerado óptima es conectar todos los dataloggers en una red inalámbrica que permita enviar los datos a un servidor en Internet. Esto de beneficios como:

No obstante, todos estos beneficios no son gratis ya que la red a desplegar requiere de una gran complejidad.

error loading image :(

Antecedentes


¿Cuales son los dataloggers que hay en el mercado que podrían utilizarse para este propósito?

Pues hay muchos fabricantes, pero ninguno de ellos se adecua de forma óptima al proyecto debido a que tienen un coste muy elevado, no tienen suficientes entradas para realizar la correcta monitorización de los parámetros de un SFA o además requieren utilizar otros productos del fabricante para realizar una monitorización plena. Como es el caso del fabricante Morningstar o Schneider.

error loading image :(

Si no se va utilizar ningún dispositivo comercial pues tendrá que fabricarse un sistema. Los problemas a enfrentar para fabricar el sistema será la elección del datalogger, cómo se va a realizar las comunicaciones entre dataloggers, cómo se van a enviar los datos al servidor y cómo va a ser el propio servidor.

Para el datalogger la forma más sencilla es utilizar una plataforma de desarrollo que ya cuente con un número suficiente de entradas y puertos de comunicaciones para conectar todos los sensores y componentes necesarios. Las plataformas más utilizadas son: Arduino, ESP32 o Raspberry PI.

error loading image :(
error loading image :(
error loading image :(

Para la comunicación de estos dataloggers hay otro montón de opciones entre las que hay protocolos inalámbricos como WiFi, Bluetooth o Zigbee o soluciones privadas como Z-Wave, LoRaWAN o Sigfox.

Para las comunicaciones entre los dataloggers y el servidor pueden utilizarse soluciones privadas como LoRaWAN o Sigfox, conexión vía satélite con Starlink o Swarm o utilizar la red de telefonía móvil para conectar a Internet.

Por último habrá que determinar qué se va a utilizar de servidor. Será necesario que tenga una base de datos, que podrá ser relacional o no relacional y de una interfaz que permita subir y consultar los datos.


Objetivos


Los objetivos que se han establecido son:


Solución adoptada


Se han separado los dataloggers en dos sistemas.

Para las comunicaciones con el servidor se utilizará la red de telefonía móvil ya que es la que más cobertura tiene, es barata y permite una gran velocidad.

error loading image :(

Para conectarse a esta red se utiliza un Router 4G que crea un punto de acceso WiFi al que se conectan los nodos Master mediante el WiFi integrado del ESP32. Además, usar un Router 4G da la posibilidad a los habitantes de la comunidad de tener acceso a Internet.

Para elegir el método de comunicaciones entre dataloggers se ha realizado una comparación entre todos ellos y se han descartado los menos aptos.

WiFi 4 BLE Zigbee Z-Wave LoRaWAN Sigfox
Ad-Hoc Sí (complejo)
Frecuencia 2.4 GHz <1GHz
Alcance - 1.6 Km 10 Km
Velocidad 150 Mbps 25-50 Mbps 250 Kbps 100 Kbps 0.3-50 Kbps 600 bps
Seguridad Acceso a la red (WPA2) Acceso a la red. P2P (ECDH). Acceso a la red. P2P (AES128). Acceso a la red. P2P (ECDH). Acceso a la red. P2P (AES128). -

Los sistemas propietarios Z-Wave, LoRaWAN y Sigfox tienen las desventajas de depender de un proveedor externo y utilizar una frecuencia por debajo del gigahercio. Esto es un inconveniente ya que la frecuencia utilizada dependerá del país en el que se despliegue. Por ejemplo, en Europa se utiliza la frecuencia 868 MHz y en EEUU se utiliza 928 MHz. Así que estas soluciones quedan descartadas.

WiFi también se ha descartado debido a que el rango que ofrece no es muy elevado y la seguridad es únicamente en acceso al medio. Una vez en la red las comunicaciones van en claro a no ser que se utilice otro protocolo que cifre los datos entre nodos.

Quedan Bluetooth Low Energy y Zigbee. La velocidad de transmisión entre estos dos es alta, mucho más en Bluetooth, pero para la cantidad de datos que se envían ambas son buenas opciones. Sin embargo, Zigbee fue un protocolo diseñado para transferencia de datos entre dispositivos IoT a largo alcance, los dispositivos que hemos utilizado pueden comunicarse hasta 1 kilómetro de distancia mientras que el dispositivo Bluetooth con mayor alcance que hemos encontrado es de 100 metros. Así que nos quedamos con Zigbee y haciendo uso de módulos XBee.

Para el servidor se ha elegido la base de datos relacional MariaDB. Ya que ofrece muy buenas prestaciones y ya se ha trabajado previamente con ella.

Para la interfaz se creará una aplicación Web dividida en dos entornos, una API REST para las comunicaciones de los nodos con el servidor y una interfaz de usuario que permita a los usuarios acceder a la aplicación mediante un navegador. Como software se utiliza Spring Boot y una arquitectura Modelo-Vista-Controlador.

A continuación, se muestra un esquema de toda la infraestructura a desplegar.

error loading image :(

Desarrollo del sistema


Para comprender más fácilmente toda la infraestructura desplegada se ha separado en dos partes. Una parte hardware dedica a los nodos y una parte software relativa al servidor.

error loading image :(

A modo resumen, los componentes electrónicos de cada nodo son:

  • ESP32
  • XBee Pro
  • Tarjeta SD
  • RTC
  • 3 AO de instrumentación
  • 3 Sensores efecto hall
  • 2 sensores de temperatura
  • Estación meteorológica
    • Arduino Nano
    • Sensor temperatura humedad
    • Anemómetro y pluviómetro
    • Barómetro
  • Arduino Nano
  • XBee Pro
  • 3 AO de instrumentación
  • 3 Sensores efecto hall
  • 2 sensores de temperatura

El funcionamiento del programa del nodo Master pueden distinguirse tres estados.

error loading image :(

Como hemos dicho para la base de datos se utiliza MariaDB y para el servidor una arquitectura MVC con una API REST y una interfaz web desarrollada en Spring Boot.

Para desplegarlo se realiza mediante Docker ya que permite desplegar el sistema de forma rápida en cualquier tipo de servidor. Ya sea en una Raspberry PI o en la nube. Además, se pueden añadir imágenes de un WAF o de un balanceador de carga si se viera necesario.

error loading image :(

A continuación, se pueden ver dos vistas de la aplicación Web. La vista principal arriba y la presentación de los datos monitorizados en forma de gráfica.

error loading image :(
error loading image :(

Con respecto a la seguridad se han implementado numerosas medidas. Para explicar el porqué de cada medida pues se ha seleccionado el TOP 10 de vulnerabilidades más comunes según el OWASP.

OWASP TOP10 Prevención
1. Broken Access Control Validación de permisos de nodos y usuarios.
2. Cryptographic Failures HTTPS, HSTS, SSL Pinning y doble cifrado, nonce aleatorios, hash de contraseñas
3. Injection Estricta validación y sanitización de entradas.
4. Insecure Design Robustez, escalabilidad y seguridad desde el inicio. Git, SonarQube, Docker hub
5. Security Misconfiguration Evitar usar configuraciones por defecto
6. Vulnerable and Outdated Components Uso de últimas versiones
7. Identification and Authentication Failures Política de contraseñas, _csrf, X-Frame-Options, no sesiones concurrentes, fail2ban.
8. Software and Data Integrity Failures Uso de librerías de orígenes confiables.
9. Security Logging and Monitoring Failures Monitorización de actividad de los usuarios. Detección de acciones maliciosas.
10. Server Side Request Forgery (SSRF) No está contemplado en la aplicación.

Además de todo lo anterior se han implementado otras medidas de seguridad:


Análisis de resultados


Aquí se pueden ver un par de imágenes del prototipados. Una primera imagen en las etapas iniciales del prototipado y otra al final con el prototipo prácticamente terminado.

error loading image :(
error loading image :(

Aquí se puede ver el prototipo una vez desplegado, monitorizando un pequeño SFA con un módulo fotovoltaico y una batería.

Se ha desplegado también un pequeño nodo Slave sin sensores que envía datos simulados al servidor para comprobar que los nodos Slave también funcionan correctamente. Los cables rojo y blanco que aparecen aquí es para la alimentación del nodo, los datos se envían mediante el módulo XBee.

error loading image :(

El nodo Slave tiene un consumo máximo de 0.78 vatios. Unas 10 veces menos que una bombilla led. Y el nodo Master, debido a que tiene conectado el Router 4G, tiene un consumo de 4 vatios, la mitad de una bombilla de tipo led.

El presupuesto del nodo Slave es de 180€ y el del nodo Master de 265€

El nodo Master sí estaba monitorizando el SFA, aquí muestro una captura de la presión atmosférica a principios de abril y de la corriente de la batería durante todo el tiempo que estuvo monitoreando el SFA. Pueden apreciarse claramente los ciclos de carga y descarga de la batería.

error loading image :(

Aquí se muestran las vulnerabilidades encontradas en el Pentest Web. La vulnerabilidad más grave que se detectó fue un XSS almacenado debido a que no se validó una de las entradas de la aplicación y junto una librería de bootstrap que permitía ejecutar código javascript codificado en HTML.

error loading image :(

Con respecto al test IoT. Se han detectado tres vulnerabilidades que tendrán que asumirse, salvo la segunda que se ha mitigado levemente.

error loading image :(

Uno de los ataques a los que se ha sometido el nodo Master. Con este ataque se pretendía interceptar las comunicaciones entre Nodo Master y Servidor mediante un man-in-the-middle y poder mostrar la doble encriptación que tiene los datos. Sin embargo, la medida de SSL Pinning que se ha implementado no ha permitido hacer esto.

error loading image :(

Mediante un ataque ARP Spoofing podemos ponernos en medio de las comunicaciones entre nodo Master y Servidor y poder ver todos los datos transmitidos. Como puede verse en la siguiente imagen, los datos que no están cifrados, como las consultas DNS pueden verse fácilmente.

error loading image :(

Para romper HTTPS se desplegó un servidor proxy malicioso al que redirigir el tráfico de los nodos mediante un ataque TCP hijacking. Como estamos entre medias de las comunicaciones podemos modificar la dirección IP y el número de puerto de los paquetes TCP/IP de los nodos Master y el servidor y redirigirlos al servidor Malicioso. Sin embargo, al hacer esto el nodo Master se encuentra con el certificado del servidor proxy malicioso en lugar de el del servidor y rechaza la conexión, esto es el mecanismo SSL Pinning.

En la captura de wireshark puede verse como en el handshake de SSL se le envía al nodo el certificado del servidor pero el cliente lo rechaza con un mensaje "Certificado no soportado".

error loading image :(

Conclusiones


Después de analizar los resultados se han llegado a estas conclusiones.


Líneas futuras


Y para finalizar con la presentación los siguientes pasos al sistema serían: