1883 - Pentesting MQTT (Mosquitto)

Zacznij od zera i stań się ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzania, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące dane.

Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:


Podstawowe informacje

MQ Telemetry Transport (MQTT) jest znany jako protokół komunikacyjny typu publish/subscribe, który wyróżnia się swoją skrajną prostotą i lekkością. Ten protokół jest specjalnie dostosowany do środowisk, w których urządzenia mają ograniczone możliwości i działają w sieciach charakteryzujących się niskim pasmem, wysokim opóźnieniem lub niestabilnymi połączeniami. Główne cele MQTT obejmują minimalizowanie użycia pasma sieciowego i redukcję zapotrzebowania na zasoby urządzenia. Ponadto, dąży do utrzymania niezawodnej komunikacji i zapewnienia pewnego poziomu zapewnienia dostawy. Te cele sprawiają, że MQTT jest wyjątkowo odpowiedni dla rozwijającej się dziedziny komunikacji maszynowej do maszyn (M2M) i Internetu Rzeczy (IoT), gdzie istotne jest efektywne połączenie wielu urządzeń. Ponadto, MQTT jest bardzo korzystny dla aplikacji mobilnych, gdzie oszczędzanie pasma i życia baterii jest kluczowe.

Domyślny port: 1883

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

Inspekcja ruchu

Kiedy broker MQTT odbierze pakiet CONNECT, wysyłany jest pakiet CONNACK. Ten pakiet zawiera kod zwrotny, który jest kluczowy dla zrozumienia statusu połączenia. Kod zwrotny 0x00 oznacza, że poświadczenia zostały zaakceptowane, sygnalizując udane połączenie. Z kolei kod zwrotny 0x05 oznacza, że poświadczenia są nieprawidłowe, uniemożliwiając połączenie.

Na przykład, jeśli broker odrzuci połączenie z powodu nieprawidłowych poświadczeń, scenariusz będzie wyglądał mniej więcej tak:

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

Testowanie penetracyjne MQTT

Uwierzytelnianie jest całkowicie opcjonalne i nawet jeśli jest wykonywane, szyfrowanie nie jest domyślnie używane (dane uwierzytelniające są przesyłane w postaci zwykłego tekstu). Ataki typu MITM mogą nadal być przeprowadzane w celu kradzieży haseł.

Aby połączyć się z usługą MQTT, można użyć: https://github.com/bapowell/python-mqtt-client-shell i zasubskrybować się do wszystkich tematów wykonując:

> 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/#"

Możesz również użyć 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.

Możesz uruchomić ten kod, aby spróbować połączyć się z usługą MQTT bez uwierzytelnienia, subskrybować każdy temat i nasłuchiwać ich:

#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()

Więcej informacji

zobacz tutaj: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b

Wzorzec Publikuj/Subskrybuj

Model publikuj/subskrybuj składa się z:

  • Wydawca: publikuje wiadomość do jednego (lub wielu) tematu(ów) w brokerze.

  • Subskrybent: subskrybuje jeden (lub wiele) temat(ów) w brokerze i otrzymuje wszystkie wiadomości wysłane przez wydawcę.

  • Broker: przekierowuje wszystkie wiadomości od wydawców do subskrybentów.

  • Temat: składa się z jednego lub więcej poziomów oddzielonych ukośnikiem (np. /smartshouse/livingroom/temperature).

Format Pakietu

Każdy pakiet MQTT zawiera stały nagłówek (Rysunek 02).Rysunek 02: Stały Nagłówek

Typy Pakietów

  • CONNECT (1): Inicjowany przez klienta w celu nawiązania połączenia z serwerem.

  • CONNACK (2): Potwierdzenie serwera udanego połączenia.

  • PUBLISH (3): Używane do wysłania wiadomości od klienta do serwera lub odwrotnie.

  • PUBACK (4): Potwierdzenie pakietu PUBLISH.

  • PUBREC (5): Część protokołu dostarczania wiadomości zapewniająca, że wiadomość została odebrana.

  • PUBREL (6): Dodatkowe zapewnienie w dostarczaniu wiadomości, wskazujące na wydanie wiadomości.

  • PUBCOMP (7): Ostateczna część protokołu dostarczania wiadomości, wskazująca na zakończenie.

  • SUBSCRIBE (8): Żądanie klienta o nasłuchiwanie wiadomości z tematu.

  • SUBACK (9): Potwierdzenie serwera żądania SUBSCRIBE.

  • UNSUBSCRIBE (10): Żądanie klienta zaprzestania odbierania wiadomości z tematu.

  • UNSUBACK (11): Odpowiedź serwera na żądanie UNSUBSCRIBE.

  • PINGREQ (12): Wiadomość ping wysłana przez klienta.

  • PINGRESP (13): Odpowiedź serwera na wiadomość ping.

  • DISCONNECT (14): Inicjowane przez klienta w celu zakończenia połączenia.

  • Dwa wartości, 0 i 15, są oznaczone jako zarezerwowane i ich użycie jest zabronione.

Shodan

  • port:1883 MQTT

WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzenia, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.

Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated