MQTT Prácticas óptimas de seguridad y aplicación

por Hema


MQTT security best practices

El ecosistema de Internet de las cosas (IoT) conecta miles de millones de dispositivos en todo el mundo, desde sistemas de automatización a maquinaria industrial. Ya sea que trabajes con una red de IoT a pequeña escala en a controlled environment or implementing a large-scale, enterprise-grade IoT ecosystem, security no se puede pasar por alto. Incluso en las implementaciones de red cerradas donde el acceso es limitado, el riesgo todavía existen ataques internos, acceso no autorizado a dispositivos y brechas de datos. Seguridad débil prácticas en cualquier escala del despliegue pueden exponer datos sensibles, la integridad de los dispositivos de compromiso y poner en peligro todo el sistema. En esta guía exploraremos las prácticas de seguridad de IoT, centrándonos en cómo para la aplicaciónmedidas de seguridad utilizando MQTT(Message Queuing Telemetry Transport) con ejemplos de Paho (cliente) y CrystalMQ (servidor).


Comprender los riesgos de seguridad en IoT

El primer paso para asegurar un ecosistema de IoT es entender los diversos vulnerabilidades, incluidas:

  • Data Breaches:Datos sensibles transmitidos sobre canales no cifrados.
  • Device Hijacking:Acceso no autorizado dispositivos.
  • Ataques Man-in-the-Middle (MITM):Intercepción y alteración de datos.
  • Denial of Service (DoS):Flotando el sistema con solicitudes falsas para abrumar recursos.

Para mitigar estos riesgos, es fundamental implementar protocolos de seguridad tanto cliente como servidor, así como asegurar el cifrado de datos y el alojamiento seguro

MQTT y sus desafíos de seguridad

MQTTes un protocolo ligero diseñado para una comunicación eficiente entre dispositivos IoT y un servidor central. Si bien es ideal para dispositivos limitados, su simplicidad también puede llevar a desafíos de seguridad tales como:

  • Falta de cifrado incorporado
  • conexiones de dispositivo no autenticadas
  • Falta de control de acceso fino

Para superar estos problemas, el MQTT requiere capas adicionales de seguridad comoSSL/TLS para encriptación, autenticación de dispositivos y listas de control de acceso (ACLs) para autorización.

Cliente-Side Seguridad: Python MQTT

Usando elPython MQTT clientecomo ejemplo, veamos cómo podemos establecer una conexión segura con el servidor. Aquí están las configuraciones clave de seguridad:

Paso 1: Activar la autenticación del cliente (Nombre de usuario > Contraseña)

La primera capa de seguridad es la autenticación básica. Paho proporciona métodos simples para configurar esto configuración.

importa paho.mqtt.client as mqt

cliente = mqtt.Client()

# Establecer nombre de usuario y contraseña para la autenticación

cliente.username_pw_set(username="client_user", password="client_password")

# Conectar al corredor

cliente.connect("broker.example.com", 1883, 60)

cliente.loop_start()

Paso 2: Enable TLS/SSL Encryption

Para proteger los datos en tránsito, se debe habilitar TLS/SSL. Paho soporta SSL con un simple configuración:

importa paho.mqtt.client as mqt

cliente = mqtt.Client()

# Path to the CA certificate

cliente.tls_set(ca_certs="/path/to/ca.crt")

# Enable TLS/SSL

cliente.username_pw_set("client_user", "client_password")

cliente.connect("broker.example.com", 8883, 60)

cliente.loop_start()

Paso 3: Validación de certificado

Asegúrese de verificar el certificado del corredor para evitar ataques MITM. El Paho cliente admite varias opciones de certificado para garantizar la integridad de los datos.

Paho ofrece opciones para validación de certificados por defecto, y se puede configurar utilizandotls_set()ytls_insecure_set(). Aquí hay un ejemplo donde el cliente valida el certificado del corredor contra la Autoridad de Certificados (CA) y asegura que el La conexión es segura.

importa paho.mqtt.client as mqt

# Crear una nueva instancia cliente MQTT

cliente = mqtt.Client()

# Establecer nombre de usuario y contraseña para la autenticación básica

cliente.username_pw_set(username="client_user", password="client_password")

# Path to CA certificate for validating the broker's certificate

ca_cert_path = "/path/to/ca.crt"

# Camino al propio certificado del cliente y llave privada (opcional, para TLS mutuo)

cliente_cert_path = "/path/to/client.crt"

cliente_key_path = "/path/to/client.key"

# Enable TLS/SSL encryption with certificate validation

cliente.tls_set(ca_certs=ca_cert_path,

certfile=client_cert_path,

keyfile=client_key_path,

tls_version=mqtt.ssl.PROTOCOL_TLSv1_2)

# Asegurar que el certificado sea validado (configurado a False para hacer cumplir la validación)

cliente.tls_insecure_set(False)

# Conectar al corredor en el puerto seguro (generalmente 8883 para MQTT sobre SSL)

broker_url = "broker.example.com"

broker_port = 8883

cliente.connect(broker_url, broker_port)

# Iniciar el bucle cliente para procesar eventos de red

cliente.loop_start()

Explicación
  • ca_certs=ca_cert_path:Este es el camino el archivo de certificado CA. Permite al cliente validar que el certificado del corredor fue firmada por una autoridad de certificado de confianza.
  • certfile y keyfile (Optional):Estos parámetros se utilizan para TLS mutuo (mTLS) donde el cliente también presenta un certificado el corredor. Esta es una capa opcional de seguridad, que asegura que ambas partes sean verificadas. Si no necesita autenticación mutua, puede omitir estas líneas.
  • tls_insecure_set(False):Esto garantiza que el corredor El certificado siempre es validado. Al establecer esto a False, usted impone que Paho debe verificar certificado del corredor contra el certificado CA proporcionado. Si la validación falla, la conexión no se establecerá.
  • Versión TLS:Hemos establecido explícitamente el TLS versión a PROTOCOL_TLSv1_2, garantizando el uso de la última versión de TLS (o versiones más nuevas como TLS 1.3 si son compatibles con el cliente y el broker).

4. Seguridad del servidor: Cristal MQ MQTT Broker

El corredor MQTT está en el corazón de la comunicación IoT. Garantizar el corredor garantiza que sólo Los dispositivos autenticados pueden conectarse y comunicarse. NuestroMQTT Broker(CrystalMQ) ofrece múltiples capas de seguridad para proteger la infraestructura IoT.

Paso 1: Enable SSL/TLS Encryption

CrystalMQ admite SSL/TLS, lo que le permite cifrar la comunicación entre el corredor y los dispositivos IoT.

  • Configure el corredor para utilizar el puerto 8883 para una comunicación segura.
  • Cargue el certificado autofirmado o firmado por CA.
  • Permitir TLS obligatorio en las conexiones con el cliente.

Viene con un certificado CA auto-firmado, ubicado en el Carpeta CrystalMQ/Certificate. Puede utilizar el certificado auto-firmado predeterminado o reemplazarlo con su propio certificado personalizado.

Referir elEncriptación TLS/SSLen nuestra sección ayuda a la documentación para administrar TLS/SSL en nuestro broker.

Paso 2: Autenticación del usuario

CrystalMQ proporciona un sistema de autenticación de usuario fácil de configurar.

Le permite crear claves de autenticación y fichas (nombre de usuario y contraseña) a través del panel MQTT Broker bajo la pestaña Seguridad. Esto hace que sea fácil gestionar la autenticación del cliente directamente desde el panel de control.

Para agregar o crear un nuevo usuario:
  • Ve a la pestaña de seguridad en el tablero.
  • Añadir un nuevo usuario con un nombre de usuario y contraseña para la autenticación del cliente.

Las teclas creadas se establecerán / configurarán en el cliente Paho en username_pw_set() función.

Más detalles sobre el establecimiento de seguridad se pueden encontrar en nuestrabróker ayuda documentación.

Paso 3: Autorización mediante listas de control de acceso (LAC)

Autorización asegura que una vez que un cliente es autenticado, sólo es permitido realizar acciones específicas, como publicar o suscribir temas particulares.Listas de control de acceso (LCA)son una manera común de gestionar estos permisos en un sistema MQTT.

En CrystalMQ, los administradores pueden configurar ACLs ya sea para individuos nombres de usuario o ID de cliente conectado. Esto se puede hacer a través del MQTT Broker dashboard navegando al menú de Seguridad.

  • ACL basado en el nombre de usuario:Cada nombre de usuario MQTT puede se le asignan permisos específicos para publicar/subcribir temas. Por defecto, los nuevos usuarios tienen acceso a todos los temas, pero esto se puede modificar editando la configuración del usuario.
  • ACL basado en cliente:Los administradores pueden establecer LCA para clientes ya conectados basados en su ID de cliente.

Por ejemplo, un cliente sólo puede ser restringido a publicar un tema específico mientras se le niega acceso a otros.

5. Datos de seguridad en tránsito y en reposo

La seguridad de los datos es crucial para los sistemas de IoT, especialmente porque a menudo manejar información sensible que requiere protección mientras se transmite (en transit) y cuando se almacena (en reposo). Un ecosistema de IoT seguro garantiza que los datos estén encriptados durante transmisión y almacenamiento seguro, evitando el acceso no autorizado y minimizando el riesgo de datos Violaciones.

Datos en tránsito

Data in transit refers to the data being transferred from IoT devices to a server or from server to cliente. El mayor riesgo durante esta fase es la interceptación de los atacantes, también conocido como Ataques del hombre en el medio (MITM). Para prevenir tales ataques, protocolos de cifrado tales comoTLS/SSLson esenciales.

Datos del Descanso

Los datos en reposo se refieren a los datos almacenados en servidores o bases de datos. Storing los datos de forma segura son fundamentales para prevenir el acceso no autorizado, especialmente en casos de incumplimientos de datos o acceso físico a servidores.

Las mejores prácticas para asegurar datos en reposo:
  • Almacenamiento cifrado: Cristal MQ utiliza un método de precipitación y sal para almacenar las claves de autenticación del cliente. Esto asegura que incluso si los atacantes obtienen acceso al almacenamiento, no pueden recuperar las llaves originales. La función hachís, combinada con una sal única para cada uno clave, hace que sea computacionalmente infeasible revertir el motor de los valores almacenados, asegurando así datos de autenticación sensibles.
  • CrystalMQ permite almacenar datos de mensajes de forma segura, y puede configurar el broker para almacenar registros y mensajes persistentes en bases de datos cifradas.
  • Encryption Key Management: Deben establecerse prácticas de gestión clave seguras para proteger claves de encriptación. Asegurar que las teclas se rotan periódicamente y almacenado de forma segura utilizando módulos de seguridad de hardware (HSMs) o bóvedas clave seguras.
  • Control de acceso y autenticación:Solution provider Plataforma IoTproporciona acceso limitado al almacenamiento de datos utilizando múltiples factores autenticación (MFA) and role-based access control (RBAC). Esto garantiza que sólo el personal autorizado o los servicios pueden acceder a los datos almacenados.
  • Políticas de retención de datos: NuestraCorredor de MQTT alojado en Cloudtiene políticas claras de retención de datos para minimizar el almacenamiento de datos innecesarios. Eliminar datos antiguos o redundantes reduce la superficie de riesgo para los atacantes y garantiza el cumplimiento con leyes de privacidad de datos comoGDPRo CCPA. Esta política también se puede practicar al gestionar la base de datos por su cuenta en un entorno local.

6. Hosting Environment Security

La seguridad del entorno de acogida desempeña un papel vital en el protección general de un ecosistema de IoT. Ya sea el despliegue de CrystalMQ on-premise or using a infraestructura basada en la nube, garantizar que el entorno de acogida sea seguro es fundamental para mantener la integridad y disponibilidad del sistema.

Hosting On-Premise

Para empresas que prefieren mantener su infraestructura de IoT en marcha, la seguridad de acogida implica el físico y la red seguridad del centro de datos local o de la sala de servidores.

Consideraciones clave para la organización en marcha:
  • Segmentación de red:Segregating IoT red desde su red empresarial utilizando LANs Virtuales (VLAN) o redes definidas por software (SDN). Esto minimiza las posibilidades de que un atacante llegue a los dispositivos IoT a través de la empresa red.
  • Firewalls and Intrusion Detection Systems (IDS):Implementación de cortafuegos para bloquear el tráfico no autorizado e IDS para monitorear y detectar maliciosos actividades en tiempo real.
  • Patching regular:Asegurando que tu servidores, software de corredores y sistemas operativos se actualizan regularmente con los últimos parches de seguridad. Las vulnerabilidades en el software anticuado pueden ser fácilmente explotadas por los atacantes.

Hosting basado en la nube

Las implementaciones basadas en la nube ofrecen escalabilidad y flexibilidad, pero la nube el entorno debe configurarse de forma segura para evitar exponer el sistema IoT a amenazas.

Consideraciones clave para el alojamiento basado en la nube:
  • Proveedor seguro de nube:Seleccionar una nube proveedor que ofrece características de seguridad fuertes, como Amazon Web Services (AWS), Microsoft Azure, Océano Digital, etc. Estos proveedores ofrecen cortafuegos incorporados, protección DDoS y servicios de encriptación.
  • Máquinas Virtuales Aisladas (VM) o Containers:VMs aislados o entornos containerizzatos (por ejemplo, Docker) para acoger elMQTT broker. Esto aísla al corredor de otros servicios, asegurando una brecha de seguridad en uno El contenedor no afecta a todo el sistema.
  • Cifrado de datos en la nube:Asegurarse todos los datos almacenados en la nube se cifran en reposo utilizando servicios de encriptación nativa de la nube. Para ejemplo, AWS ofrece AWS Key Management Service (KMS) for secure key management.
  • Network Security Groups (NSGs) and VPNs:Configuración de NSGs o Redes Privadas Virtuales (VPN) para restringir el acceso al corredor y al IoT plataforma, asegurando que solo los dispositivos y servicios de confianza puedan conectarse.
  • Respaldo y desastre Recuperación:Aplicación respaldos regulares de configuraciones de corredores y datos. En caso de desastre o incumplimiento de datos, tendrá un plan de recuperación para minimizar el tiempo de inactividad.

Cumplimiento de las normas de seguridad de IoT

Ambos entornos on-premise y cloud cumplen con la seguridad de IoT normas tales como:

  • GDPR(Reglamento General de Protección de Datos): Garantizar la privacidad de datos para los sistemas IoT en la UE.

Así es como puedes construir un ecosistema IoT robusto y seguro. Empezando conSeguridad MQTTprotocolos tanto en el lado cliente como en el servidor, junto con el manejo seguro de datos y prácticas de alojamiento, usted puede mitigar muchos de los riesgos comunes de seguridad en entornos IoT.

Con CrystalMQ Broker como el servidor MQTT, puede implementar prácticas de seguridad IoT de última generación para proteger datos y dispositivos, asegurando una infraestructura de IoT más segura y segura.