hacktricks/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md

14 KiB
Raw Blame History

1883 - Ελεγχος Ευπαθειών MQTT (Mosquitto)

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)!

Άλλοι τρόποι υποστήριξης του HackTricks:

WhiteIntel

WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες κακόβουλου λογισμικού.

Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.

Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:

{% embed url="https://whiteintel.io" %}


Βασικές Πληροφορίες

Το MQ Telemetry Transport (MQTT) είναι γνωστό ως ένα πρωτόκολλο μηνυμάτων δημοσίευσης/συνδρομής που ξεχωρίζει για την ακραία απλότητα και ελαφρότητά του. Αυτό το πρωτόκολλο είναι σχεδιασμένο ειδικά για περιβάλλοντα όπου οι συσκευές έχουν περιορισμένες δυνατότητες και λειτουργούν σε δίκτυα που χαρακτηρίζονται από χαμηλό εύρος ζώνης, υψηλή καθυστέρηση ή αναξιόπιστες συνδέσεις. Οι βασικοί στόχοι του MQTT περιλαμβάνουν την ελαχιστοποίηση της χρήσης της δικτυακής ζώνης και τη μείωση της ζήτησης στους πόρους της συσκευής. Επιπλέον, στοχεύει στη διατήρηση αξιόπιστης επικοινωνίας και στην παροχή ενός συγκεκριμένου επιπέδου διασφάλισης παράδοσης. Αυτοί οι στόχοι καθιστούν το MQTT εξαιρετικά κατάλληλο για τον αναπτυσσόμενο τομέα της επικοινωνίας μηχανής προς μηχανή (M2M) και του Διαδικτύου των Πραγμάτων (IoT), όπου είναι ουσιώδες να συνδέονται αποτελεσματικά μια πληθώρα συσκευών. Επιπλέον, το MQTT είναι υψίστης ωφέλειας για κινητές εφαρμογές, όπου η διατήρηση της ζώνης ζώνης και της διάρκειας ζωής της μπαταρίας είναι κρίσιμη.

Προεπιλεγμένη θύρα: 1883

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

Επιθεώρηση της κίνησης

Όταν οι κεντρικοί διαμεσολαβητές MQTT λαμβάνουν ένα πακέτο CONNECT, στέλνουν πίσω ένα πακέτο CONNACK. Αυτό το πακέτο περιέχει έναν κωδικό επιστροφής που είναι κρίσιμος για την κατανόηση της κατάστασης σύνδεσης. Ένας κωδικός επιστροφής 0x00 σημαίνει ότι οι διαπιστεύσεις έχουν γίνει δεκτές, υποδεικνύοντας μια επιτυχημένη σύνδεση. Αντίθετα, ένας κωδικός επιστροφής 0x05 υποδεικνύει ότι οι διαπιστεύσεις είναι μη έγκυρες, εμποδίζοντας έτσι τη σύνδεση.

Για παράδειγμα, αν ο διαμεσολαβητής απορρίπτει τη σύνδεση λόγω μη έγκυρων διαπιστεύσεων, το σενάριο θα μοιάζει κάπως έτσι:

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

Χαμηλής Πιθανότητας Επίθεση Brute-Force στο MQTT

Ελεγχος Ασφάλειας MQTT

Η ταυτοποίηση είναι εντελώς προαιρετική και ακόμα κι αν γίνεται ταυτοποίηση, η κρυπτογράφηση δεν χρησιμοποιείται από προεπιλογή (οι διαπιστεύσεις στέλνονται σε καθαρό κείμενο). Οι επιθέσεις MITM μπορούν ακόμα να εκτελεστούν για την κλοπή κωδικών πρόσβασης.

Για να συνδεθείτε σε έναν MQTT υπηρεσία, μπορείτε να χρησιμοποιήσετε: https://github.com/bapowell/python-mqtt-client-shell και να εγγραφείτε σε όλα τα θέματα κάνοντας:

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

Μπορείτε επίσης να χρησιμοποιήσετε 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.

Ή μπορείτε να εκτελέσετε αυτόν τον κώδικα για να δοκιμάσετε τη σύνδεση σε έναν υπηρεσία MQTT χωρίς πιστοποίηση, να εγγραφείτε σε κάθε θέμα και να τα ακούσετε:

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

Περισσότερες πληροφορίες

από εδώ: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b

Το Πρότυπο Δημοσίευσης/Εγγραφής

Το μοντέλο δημοσίευσης/εγγραφής αποτελείται από:

  • Εκδότης: δημοσιεύει ένα μήνυμα σε ένα (ή πολλαπλά) θέμα(τα) στο μεσίτη.
  • Συνδρομητής: εγγράφεται σε ένα (ή πολλαπλά) θέμα(τα) στο μεσίτη και λαμβάνει όλα τα μηνύματα που στέλνονται από τον εκδότη.
  • Μεσίτης: δρομολογεί όλα τα μηνύματα από τους εκδότες στους συνδρομητές.
  • Θέμα: αποτελείται από έναν ή περισσότερους επίπεδους που διαχωρίζονται με μια κάθετο (π.χ., /smartshouse/livingroom/temperature).

Μορφή Πακέτου

Κάθε πακέτο MQTT περιέχει έναν σταθερό κεφαλίδα (Σχήμα 02). Σχήμα 02: Σταθερό Κεφαλίδα

https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png

Τύποι Πακέτων

  • CONNECT (1): Εκκινείται από τον πελάτη για να ζητήσει σύνδεση με τον εξυπηρετητή.
  • CONNACK (2): Η αναγνώριση του εξυπηρετητή για μια επιτυχημένη σύνδεση.
  • PUBLISH (3): Χρησιμοποιείται για να στείλει ένα μήνυμα από τον πελάτη στον εξυπηρετητή ή αντίστροφα.
  • PUBACK (4): Αναγνώριση ενός πακέτου PUBLISH.
  • PUBREC (5): Μέρος ενός πρωτοκόλλου παράδοσης μηνύματος που εξασφαλίζει τη λήψη του μηνύματος.
  • PUBREL (6): Επιπλέον εγγύηση στην παράδοση μηνύματος, υποδεικνύοντας απελευθέρωση μηνύματος.
  • PUBCOMP (7): Τελικό μέρος του πρωτοκόλλου παράδοσης μηνύματος, υποδεικνύοντας ολοκλήρωση.
  • SUBSCRIBE (8): Αίτημα του πελάτη για να ακούσει μηνύματα από ένα θέμα.
  • SUBACK (9): Η αναγνώριση του εξυπηρετητή για ένα αίτημα SUBSCRIBE.
  • UNSUBSCRIBE (10): Αίτημα του πελάτη για να σταματήσει να λαμβάνει μηνύματα από ένα θέμα.
  • UNSUBACK (11): Η απάντηση του εξυπηρετητή σε ένα αίτημα UNSUBSCRIBE.
  • PINGREQ (12): Ένα μήνυμα καρδιάς που στέλνεται από τον πελάτη.
  • PINGRESP (13): Η απάντηση του εξυπηρετητή στο μήνυμα καρδιάς.
  • DISCONNECT (14): Εκκινείται από τον πελάτη για να τερματίσει τη σύνδεση.
  • Δύο τιμές, 0 και 15, έχουν επισημανθεί ως δεσμευμένες και η χρήση τους είναι απαγορευμένη.

Shodan

  • port:1883 MQTT

WhiteIntel

WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες κακόβουλου λογισμικού.

Ο βασικός στόχος του WhiteIntel είναι η καταπολέμηση των απαγωγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.

Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:

{% embed url="https://whiteintel.io" %}

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks: