1883 - Pentesting MQTT (Mosquitto)

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

WhiteIntel è un motore di ricerca alimentato dal dark web che offre funzionalità gratuite per verificare se un'azienda o i suoi clienti sono stati compromessi da malware ruba-informazioni.

Il loro obiettivo principale di WhiteIntel è combattere i sequestri di account e gli attacchi ransomware derivanti da malware che rubano informazioni.

Puoi visitare il loro sito web e provare il loro motore gratuitamente su:


Informazioni di Base

MQ Telemetry Transport (MQTT) è noto come un protocollo di messaggistica di tipo pubblica/sottoscrizione che si distingue per la sua estrema semplicità e leggerezza. Questo protocollo è specificamente progettato per ambienti in cui i dispositivi hanno capacità limitate e operano su reti caratterizzate da banda limitata, alta latenza o connessioni non affidabili. Gli obiettivi principali di MQTT includono la minimizzazione dell'uso della larghezza di banda di rete e la riduzione della richiesta di risorse del dispositivo. Inoltre, mira a mantenere una comunicazione affidabile e a fornire un certo livello di garanzia di consegna. Questi obiettivi rendono MQTT eccezionalmente adatto per il crescente campo della comunicazione da macchina a macchina (M2M) e dell'Internet delle cose (IoT), dove è essenziale connettere in modo efficiente una miriade di dispositivi. Inoltre, MQTT è estremamente vantaggioso per le applicazioni mobili, dove è cruciale conservare la larghezza di banda e la durata della batteria.

Porta predefinita: 1883

PORT     STATE SERVICE                 REASON
1883/tcp open  mosquitto version 1.4.8 syn-ack

Ispezione del traffico

Quando un pacchetto CONNECT viene ricevuto dai broker MQTT, viene inviato indietro un pacchetto CONNACK. Questo pacchetto contiene un codice di ritorno che è cruciale per comprendere lo stato della connessione. Un codice di ritorno di 0x00 significa che le credenziali sono state accettate, segnalando una connessione riuscita. D'altra parte, un codice di ritorno di 0x05 indica che le credenziali sono invalide, impedendo così la connessione.

Ad esempio, se il broker rifiuta la connessione a causa di credenziali non valide, lo scenario sarebbe simile a questo:

{
"returnCode": "0x05",
"description": "Connection Refused, not authorized"
}

Pentesting MQTT

L'autenticazione è totalmente facoltativa e anche se viene eseguita l'autenticazione, la crittografia non è utilizzata per impostazione predefinita (le credenziali vengono inviate in chiaro). Gli attacchi MITM possono comunque essere eseguiti per rubare le password.

Per connettersi a un servizio MQTT è possibile utilizzare: https://github.com/bapowell/python-mqtt-client-shell e iscriversi a tutti gli argomenti facendo:

> connect (NOTICE that you need to indicate before this the params of the connection, by default 127.0.0.1:1883)
> subscribe "#" 1
> subscribe "$SYS/#"

Puoi anche utilizzare https://github.com/akamai-threat-research/mqtt-pwn

apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic'
mosquitto_sub -h <host-ip> -t "#" -v #Subscribe to ALL topics.

Oppure potresti eseguire questo codice per provare a connetterti a un servizio MQTT senza autenticazione, iscriverti a tutti gli argomenti e ascoltarli:

#This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py
import paho.mqtt.client as mqtt
import time
import os

HOST = "127.0.0.1"
PORT = 1883

def on_connect(client, userdata, flags, rc):
client.subscribe('#', qos=1)
client.subscribe('$SYS/#')

def on_message(client, userdata, message):
print('Topic: %s | QOS: %s  | Message: %s' % (message.topic, message.qos, message.payload))

def main():
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT)
client.loop_start()
#time.sleep(10)
#client.loop_stop()

if __name__ == "__main__":
main()

Ulteriori informazioni

da qui: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b

Il Modello di Publish/Subscribe

Il modello di publish/subscribe è composto da:

  • Publisher: pubblica un messaggio su uno (o più) topic nel broker.

  • Subscriber: si iscrive a uno (o più) topic nel broker e riceve tutti i messaggi inviati dal publisher.

  • Broker: instrada tutti i messaggi dai publisher ai subscriber.

  • Topic: è composto da uno o più livelli separati da una barra (ad esempio, /smartshouse/livingroom/temperature).

Formato del Pacchetto

Ogni pacchetto MQTT contiene un'intestazione fissa (Figura 02).Figura 02: Intestazione Fissa

Tipi di Pacchetto

  • CONNECT (1): Iniziato dal client per richiedere una connessione al server.

  • CONNACK (2): Conferma del server di una connessione riuscita.

  • PUBLISH (3): Usato per inviare un messaggio dal client al server o viceversa.

  • PUBACK (4): Conferma di un pacchetto PUBLISH.

  • PUBREC (5): Parte di un protocollo di consegna dei messaggi che garantisce che il messaggio sia ricevuto.

  • PUBREL (6): Ulteriore garanzia nella consegna dei messaggi, indicando un rilascio del messaggio.

  • PUBCOMP (7): Parte finale del protocollo di consegna dei messaggi, indicando il completamento.

  • SUBSCRIBE (8): Richiesta di un client di ascoltare i messaggi da un topic.

  • SUBACK (9): Conferma del server di una richiesta di SUBSCRIBE.

  • UNSUBSCRIBE (10): Richiesta di un client di smettere di ricevere messaggi da un topic.

  • UNSUBACK (11): Risposta del server a una richiesta di UNSUBSCRIBE.

  • PINGREQ (12): Un messaggio di battito inviato dal client.

  • PINGRESP (13): Risposta del server al messaggio di battito.

  • DISCONNECT (14): Iniziato dal client per terminare la connessione.

  • Due valori, 0 e 15, sono contrassegnati come riservati e ne è vietato l'uso.

Shodan

  • port:1883 MQTT

WhiteIntel è un motore di ricerca alimentato dal dark web che offre funzionalità gratuite per verificare se un'azienda o i suoi clienti sono stati compromessi da malware ruba-informazioni.

Il loro obiettivo principale di WhiteIntel è combattere le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.

Puoi visitare il loro sito web e provare il loro motore gratuitamente su:

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated