msgbartop
Ïa! Ïa! Cthulhu Fthagn! Ph’nglui mglw’nfah Cthulhu R’lyeh wgah’nagl fhtagn!
msgbarbottom

15 oct 19 Solución hardware para los problemas de conectividad WiFi de la Orange Pi Zero+

Soy usuario habitual -quien lea esto habitualmente lo sabrá a estas alturas- de dispositivos de cómputo en formato single-board computer: para entendernos, Raspberry Pi, Orange Pi y dispositivos similares. Y es que, echando la cuenta, rondan por casa cinco cacharros de este tipo: dos RPi Modelo B (una haciendo de sistema de telemetría en el Mercedes irlandés), una Asus Tinker Board con el Home Assistant, una RPI 3 Modelo B+, y una Orange Pi Zero+, conectada a la impresora 3D. En concreto, tengo una cierta experiencia con las Orange Pi Zero, ya que han pasado por mis manos cuatro de ellas, tres modelos Zero (una en el centro de enseñanza de Ana, otra en casa de mis padres en Córdoba, y otra en casa de mi cuñado Fernando, todas ellas con Home Assistant como plataforma de domótica). El caso es que hace algún tiempo me hice con la evolución de este modelo, una Orange Pi Zero+, pero no había llegado a darle un uso intensivo hasta que la utilicé para controlar la impresora con Octoprint. Y como no le había dado un uso intensivo, no había notado un irritante problema que parece sufrir esta versión del dispositivo: un comportamiento algo errático de la tarjeta WiFi.

En mi caso, este comportamiento se manifiesta cuando se inicia el dispositivo sin estar conectado a ninguna red cableada, y el problema es que la mayoría de las veces la WiFi ni siquiera llegaba a iniciarse. Curiosamente sí funcionaba sin problemas cuando la red cableada también se encontraba conectada, o bien cuando iniciaba la misma con el puerto serie conectado para ver los mensajes de carga del sistema. En estos casos, casi sin excepción la WiFi arrancaba igualmente. Tras leer diversos foros de Armbian, y probar las más variapintas soluciones (versiones de kernel, versiones de sistema operativo, ramas de desarrollo, etc…) y no conseguir nada en claro, finalmente opté ayer por tirar por la calle de en medio: hacer uso de un terminador ethernet de tipo loopback, un viejo truco que usaba en tiempos pretéritos para engañar al sistema operativo de servidores y permitir configurar las interfaces de red sin tenerlas conectadas a redes reales.

Conector loopback RJ45

Conector loopback RJ45

Tenía mis dudas al respecto, pero ha funcionado perfectamente. A raíz de usar este conector, e incluso sin ninguna configuración específica de la tarjeta de red cableada (simplemente aparece como activa, pero sin dirección IP), la WiFi ya se levanta perfectamente, tras múltiples encendidos, reinicios, apagados, tanto ordenado como desordenado. En fin: puede que no sea una solución muy elegante, pero lo que se puede asegurar es que funciona. :mrgreen:

Por cierto, que mi conector loopback no es tan elegante como el de la imagen de arriba: es un simple conector cortado de un cable de red viejo, cortado y con los pines 1-3 y 2-6 empalmados. :D

VN:F [1.9.20_1166]
Rating: 10.0/10 (1 vote cast)

Etiquetas: , ,

14 oct 19 Repetidor WiFi con router doméstico y OpenWRT

Uno de los inconveniente de tener la casa domotizada, con múltiples sensores y actuadores ubicados a lo largo de las tres plantas de la misma (y todo eso sin contar teléfonos, portátiles y otros cacharros que se conectan a Internet), es que la fiabilidad de la señal WiFi se resiente enormemente. Es normal, a más dispositivos queriendo usar de manera simultánea el canal de comunicación, peor es la calidad de la transmisión. Para los profanos, es como hablar por el patio de luces con tu vecino del quinto, si vives en el segundo: si sólo habláis vosotros os entenderéis bastante bien, pero si también hablan los del primero con el tercero y los del sexto con el bajo, a menos que os pongáis de acuerdo para hablar por turnos (con el consiguiente retardo en la conversación), lo único que se oirá será un guirigay de voces. Existen varias maneras de solucionar este problema, a saber:

  • Utilizar red cableada frente a WiFi siembre que sea posible: La mejor solución. Pasas de un canal compartido half-duplex a uno dedicado full-duplex. Pero suele tener como principal inconveniente el divorcio si prentendes llevar cables ethernet por toda la casa para que el sensor de temperatura del salón tenga un canal dedicado para sí. Bromas aparte, para aquellos equipos que estén ocultos, cercanos al router o que consuman un gran ancho de banda es la solución óptima, si bien es la más difícil de implementar a medida que los dispositivos se alejan de los puntos de red, y tiene una movilidad muy escasa.
  • Utilizar un dispositivo PLC para llevar otro punto WiFi/Ethernet a otra ubicación de la casa: Los dispositivos Power Line Communication consiguen utilizar la red eléctrica de la casa para propagar una señal de datos. Bastante interesante, ya que los cables eléctricos están por toda la casa, pero tienen como inconveniente que precisa de dos convertidores de medios para poder implementar la solución, con el consiguiente coste económico. Lo bueno es que muchos proporcionan de manera simultánea la conversión de medios PLC y punto de acceso WiFi de manera unificada, además de la toma de red cableada, por lo que en cierto sentido se mitiga el impacto económico, que puede estar en torno a los 50€
  • Un repetidor WiFi: La opción más económica, y no tan ineficiente como parece. Se trata de ubicar un repetidor de la señal WiFi en las zonas donde la intensidad de la señal del punto de acceso maestro empiece a flojear, para levantar una nueva WiFi (o extender la existente de manera transparente) que tenga más calidad de señal. Aunque parece contraintuitivo que añadir un nuevo dispositivo WiFi a la red pueda mejorarla, la gracia del asunto es que el repetidor emitirá en un canal WiFi diferente al original, por lo que las señales ya no se pisarán tanto.

En mi caso esta ha sido la opción que he elegido para solucionar el problema. Pero en vez de comprar un repetidor comercial, he optado por una opción más sostenible medioambientalmente: poner en servicio un viejo router Huawei EchoLife HG556a de Vodafone que andaba rondando por casa, reprogramarlo con el software OpenWRT, y utilizar sus capacidades para actuar como repetidor WiFi. En este caso la idea es complementar la instalación base de OpenWRT con la interfaz de administración web LuCi, para una configuración más sencilla.

Configuración del repetidor WiFi

Configuración del repetidor WiFi

…y la verdad es que funciona como la seda. En mi caso, he preferido levantar una WiFi complementaria a la principal (UPC******), y hasta ahora -lleva ya unos cuantos meses, desde que puse en el salón el Amazon Fire Stick- funciona como la seda. Además de tener la ventaja de darme un mini-switch para enchufar la televisión Philips, que es una smartTV arcaica sin WiFi, pero con toma de red Ethernet. Y tan contento. :D

P.S.: Sí, el nombre de mi WiFi original es el nombre de mi configuración doméstica de Dublín, con el operador de cable UPC Ireland. Pequeños detalles que me recuerdan los días pasados allí, y que en cierto sentido me hacen lucir una sonrisa al recordarme los años que allí viví. :)

VN:F [1.9.20_1166]
Rating: 10.0/10 (1 vote cast)

Etiquetas: , , , , ,

06 oct 19 Impresora 3D controlada de manera remota

Y seguimos a vueltas con la impresora 3D. En este caso, en el ámbito de la usabilidad. Mi impresora es una Creality Ender 3 Pro, que en su configuración de fábrica se utiliza mediante una tarjeta micro SD y un control en base a una botonera. Sin embargo, la impresora viene con una interfaz mini USB que permite el control remoto de la impresora. Tras un rato de investigar, he encontrado una aplicación llamada OctoPrint que facilita enormemente el control remoto de la impresora. En líneas generales, habilita una interfaz web que permite subir los ficheros .gcode y cargarlos en línea, sin tener que grabarlos previamente en la micro SD de la impresora.

Interfaz gráfica de OctoPrint

Interfaz gráfica de OctoPrint

No sólo eso, sino que permite controlar todos los aspectos de la impresora, desde la ubicación del cabezal de impresión hasta la temperatura de la cama caliente y extrusor, además del progreso de la impresión. Incluso permite configurar una webcam (bien conectada localmente al servidor donde se encuentre OctoPrint o una cámara IP) para visualizar de manera remota cómo progresa la impresión.

Interfaz gráfica de OctoPrint

Interfaz gráfica de OctoPrint

En mi caso, he utilizado para albergar OctoPrint un miniservidor Orange Pi Zero+ que había comprado hace algún tiempo (y cuya carcasa había creado con la impresora) con una Armbian recién descargada. Si bien por el momento la alimentación de ambos dispositivos es independiente (existe una manera de obtener la alimentación para la Orange Pi desde la impresora), en mi caso he optado -para optimizar el consumo energético del sistema- por utilizar por delante de la impresora un interruptor general Sonoff Basic con el firmware Tasmota instalado, a fin de poder controlar el sistema desde mi plataforma de domótica de casa, pudiendo encender todo el conjunto cuando vaya a imprimir, y tenerlo apagado cuando no se encuentre en uso. Y así cerramos el círculo: impresora 3D controlada por mi sistema de domótica. :mrgreen:

VN:F [1.9.20_1166]
Rating: 10.0/10 (1 vote cast)

Etiquetas: , , , , , , ,

22 ago 19 Hacking lab sobre Modbus TCP. Lecciones aprendidas

Esta entrada es la parte 4 de 4 de la serie Hacking Lab Modbus TCP

A modo de finalización de esta serie de artículos, a continuación se describen las lecciones aprendidas de esta práctica, que fueron las siguientes:

  • El protocolo MODBUS es un protocolo enormemente inseguro, al no haber sido planteado en su diseño un sistema de autenticación o comprobación de protocolos. Cualquier elemento que esté en la misma red que un sistema PLC que se comunique con MODBUS sobre TCP tiene la capacidad de influir y alterar los valores de dicho PLC.
  • En función de la implementación del sistema HMI puede ser más o menos sencillo percibir cambios en los valores del PLC. En este caso, al leerse los cambios cada 500ms, es difícil ocultarse a dichas variaciones.
  • Es esencial una adecuada segmentación de la red, para evitar explotación de amenazas mediante movimientos laterales E-O. Esta segmentación puede realizarse mediante un sistema cortafuegos, bien ruggerizado o no, con inspección de protocolos a nivel industrial. Dicha inspección profunda de paquetes, además de crear las reglas convencionales de tráfico permitido en función del origen y destino, permite crear reglas más finas, como por ejemplo otorgar permiso para realizar sólo operaciones de lectura para determinados orígenes (ej.: sistemas de monitorización), y permisos de lectura y escritura para los sistemas de control (HMI), además de denegación para el resto de elementos de la red.
Cortafuegos Check Point de categoría industrial

Cortafuegos Check Point de categoría industrial

  • Una buena manera de proteger un dispositivo PLC, además de la anteriormente expuesta, es mediante un Gateway que permita implementar las funciones adicionales de autenticación que el propio PLC puede no permitir en función de su implementación.
  • En lo referente a los sistemas de reconocimiento utilizados, como nmap, es necesario afinar con la configuración del escaneo, ya que un escaneo masivo como el planteado puede levantar alertas en el sistema de correlación de alertas, si existe, al realizar conexiones masivas a los elementos de la red.
VN:F [1.9.20_1166]
Rating: 10.0/10 (1 vote cast)

Etiquetas: , , , ,

10 jul 19 Hacking lab sobre Modbus TCP. Proceso de intrusión en el sistema

Esta entrada es la parte 3 de 4 de la serie Hacking Lab Modbus TCP

El tercer capítulo de esta serie describe el proceso a seguir para lograr una intrusión en el sistema. Para realizar este proceso, se han seguido los pasos descritos en la metodología de hacking ético desarrollados por el Centro de Ciberseguridad Industrial. En concreto, las fases realizadas son las siguientes:

Fase de Reconocimiento

La fase de reconocimiento consistió en determinar qué equipo de la red de sistema escuchaba tráfico MODBUS. Para ello, se hizo uso de ZenMap, interfaz gráfica para NMAP. Se realizó un escaneo a la red entre los puertos 1 y 2000, para el segmento 192.168.0.0/24, determinándose que el equipo con IP 192.168.0.39 escuchaba en el puerto 1502/TCP. Ninguno de los demás equipos descubiertos en la red escuchaba en dicho puerto.

Resultado del comando NMAP ejecutado en Zenmap

Resultado del comando NMAP ejecutado en Zenmap

Comando ejecutado: nmap -p 1-2000 -T4 -A -v 192.168.0.0/24

El resultado de nmap para dicho servidor fue el siguiente:

Initiating SYN Stealth Scan at 23:24
Scanning 192.168.0.39 [1 port]
Discovered open port 1502/tcp on 192.168.0.39
Completed SYN Stealth Scan at 23:24, 0.30s elapsed (1 total ports)
Initiating Service scan at 23:24
Scanning 1 service on 192.168.0.39
Completed Service scan at 23:25, 68.99s elapsed (1 service on 1 host)
Initiating OS detection (try #1) against 192.168.0.39
WARNING: RST from 192.168.0.39 port 1502 -- is this port really open?
WARNING: RST from 192.168.0.39 port 1502 -- is this port really open?
WARNING: RST from 192.168.0.39 port 1502 -- is this port really open?
WARNING: RST from 192.168.0.39 port 1502 -- is this port really open?
WARNING: RST from 192.168.0.39 port 1502 -- is this port really open?
WARNING: RST from 192.168.0.39 port 1502 -- is this port really open?
NSE: Script scanning 192.168.0.39.
Initiating NSE at 23:25
Completed NSE at 23:25, 0.04s elapsed
Initiating NSE at 23:25
Completed NSE at 23:25, 0.04s elapsed
Nmap scan report for 192.168.0.39
Host is up (0.00023s latency).
PORT STATE SERVICE VERSION
1502/tcp open shivadiscovery?
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 2.4.X
OS CPE: cpe:/o:linux:linux_kernel:2.4.21
OS details: Linux 2.4.21
Network Distance: 0 hops

Se puede apreciar cómo se ha encontrado abierto el puerto 1502/tcp en el elemento de red 192.168.0.39, que según nuestro diagrama, corresponder al PLC simulado que recibe los comandos para encender y apagar las luces.

Fase de escaneo

Una vez determinado el equipo que actúa como PLC recibiendo comunicaciones Modbus, se utilizó la herramienta modbus-cli disponible en Kali con el fin de intentar determinar las bobinas que controlaban el sistema de iluminación. Se hizo una lectura de las 20 primeras direcciones de memoria del PLC identificado. Tras sucesivas pruebas, se pudo determinar que los valores que variaban eran las relativas a las direcciones de memoria 2 a 4:

Resultados de los escaneos con modbus-cli

Resultados de los escaneos con modbus-cli

De acuerdo a la especificación del protocolo Modbus, los primeros 9999 registros de memoria corresponden a bobinas con valores TRUE o FALSE (1 o 0):

Tipos de registros de memoria en función de su dirección

Tipos de registros de memoria en función de su dirección

Una vez determinados estos valores, pudo pasarse a la siguiente fase del ataque.

Fase de ganado de acceso
En el caso de protocolo Modbus, al ser un protocolo que no tuvo en cuenta en su fase de desarrollo ninguna medida en especial de seguridad, es tremendamente sencillo acceder al sistema para realizar cambios. Se trata tan sólo de inyectar los valores correspondientes mediante las oportunas señales de control, ya que no se hace verificación alguna de origen, identidad, permisos, ni se realiza autenticación alguna. En este caso, basta con ejecutar el mismo modbus-cli en modo escritura para alterar los valores registrados en el PLC:

# modbus write -p 1502 192.168.0.39 2 0 0 0

Sucesivos comandos de cambio de estado

Sucesivos comandos de cambio de estado

Estado final del sistema de iluminación

Estado final del sistema de iluminación

El resultado de dichos comandos fue, en primer lugar, el apagado completo de la iluminación, y posteriormente, el encendido de la iluminación en verde, controlada por la bobina 3. Estos cambios se vieron reflejados en la interfaz HMI del sistema, por lo que un operador podría haber determinado la existencia de un comportamiento anómalo del sistema.

Interfaz HMI reflejando el cambio de estado

Interfaz HMI reflejando el cambio de estado

Sin embargo, no es tan sencillo introducir valores fuera de rango. Al intentar inyectar valores distintos de 0 o 1 en las bobinas, la herramienta devolvió un mensaje de error, y no se alteró el funcionamiento del sistema:

root@raspberrypi:/home/pi# modbus write -p 1502 192.168.0.39 2 10 10 10
ERROR: parameter 'VALUES ...': Value should be in the range 0..1

See: 'modbus write --help'

En lo referente a las dos últimas fases (Mantener Accesso y Borrar Huellas) excedía el ámbito de lo buscado en este piloto, por lo que no se han desarrollado de manera explícita.

VN:F [1.9.20_1166]
Rating: 10.0/10 (1 vote cast)

Etiquetas: , , , , , , ,