1883 - Pentesting MQTT (Mosquitto)

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

WhiteIntel je dark-web pretraživač koji nudi besplatne funkcionalnosti za proveru da li je kompanija ili njeni korisnici kompromitovani od strane malvera za krađu podataka.

Primarni cilj WhiteIntel-a je borba protiv preuzimanja naloga i napada ransomware-a koji proizilaze iz malvera za krađu informacija.

Možete posetiti njihovu veb stranicu i isprobati njihovu mašinu za besplatno na:


Osnovne informacije

MQ Telemetry Transport (MQTT) poznat je kao protokol za razmenu poruka putem objavljivanja/pretplate koji se ističe po svojoj ekstremnoj jednostavnosti i lakoći. Ovaj protokol je posebno prilagođen za okruženja u kojima uređaji imaju ograničene mogućnosti i funkcionišu preko mreža koje se karakterišu niskom propusnošću, visokom latencijom ili nepouzdanim vezama. Osnovni ciljevi MQTT-a uključuju minimiziranje korišćenja mrežne propusnosti i smanjenje zahteva na resurse uređaja. Pored toga, cilj mu je održavanje pouzdane komunikacije i pružanje određenog nivoa sigurnosti isporuke. Ovi ciljevi čine MQTT izuzetno pogodnim za rastuće polje komunikacije mašina sa mašinama (M2M) i Interneta stvari (IoT), gde je esencijalno efikasno povezivanje različitih uređaja. Osim toga, MQTT je veoma koristan za mobilne aplikacije, gde je čuvanje propusnosti i trajanja baterije od suštinskog značaja.

Podrazumevani port: 1883

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

Pregled saobraćaja

Kada MQTT posrednici prime paket CONNECT, šalju nazad paket CONNACK. Ovaj paket sadrži kod povratka koji je ključan za razumevanje statusa veze. Kod povratka 0x00 znači da su pristupni podaci prihvaćeni, što označava uspešnu vezu. S druge strane, kod povratka 0x05 signalizira da su pristupni podaci nevažeći, čime se sprečava veza.

Na primer, ako posrednik odbije vezu zbog nevažećih pristupnih podataka, scenario bi izgledao ovako:

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

Pentesting MQTT

Autentikacija je potpuno opcionalna i čak i ako se vrši autentikacija, podrazumevano se ne koristi šifrovanje (poverljivi podaci se šalju u čistom tekstu). MITM napadi i dalje mogu biti izvršeni radi krađe lozinki.

Za povezivanje na MQTT servis možete koristiti: https://github.com/bapowell/python-mqtt-client-shell i pretplatiti se na sve teme koristeći:

> 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žete koristiti https://github.com/akamai-threat-research/mqtt-pwn

Možete takođe koristiti:

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.

Ili možete pokrenuti ovaj kod da biste pokušali da se povežete sa MQTT servisom bez autentifikacije, pretplatite se na svaku temu i slušate ih:

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

Više informacija

sa ovde: https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b

Šema objavljivanja/pretplate

Model objavljivanja/pretplate sastoji se od:

  • Objavljivač: objavljuje poruku na jednu (ili više) temu(u) na brokeru.

  • Pretplatnik: pretplaćuje se na jednu (ili više) temu(u) na brokeru i prima sve poruke poslate od objavljivača.

  • Broker: usmerava sve poruke od objavljivača ka pretplatnicima.

  • Tema: sastoji se od jednog ili više nivoa koji su odvojeni kosom crtom (npr. /pametna-kuća/dnevna-soba/temperatura).

Format paketa

Svaki MQTT paket sadrži fiksni zaglavlje (Slika 02).Slika 02: Fiksno zaglavlje

Vrste paketa

  • CONNECT (1): Iniciran od strane klijenta zahtevajući vezu sa serverom.

  • CONNACK (2): Potvrda servera o uspešnoj vezi.

  • PUBLISH (3): Koristi se za slanje poruke od klijenta ka serveru ili obrnuto.

  • PUBACK (4): Potvrda o PUBLISH paketu.

  • PUBREC (5): Deo protokola isporuke poruke koji osigurava da je poruka primljena.

  • PUBREL (6): Dodatno osiguranje u isporuci poruke, ukazujući na oslobađanje poruke.

  • PUBCOMP (7): Završni deo protokola isporuke poruke, ukazujući na završetak.

  • SUBSCRIBE (8): Zahtev klijenta za slušanje poruka sa teme.

  • SUBACK (9): Potvrda servera o zahtevu za SUBSCRIBE.

  • UNSUBSCRIBE (10): Zahtev klijenta za prestanak primanja poruka sa teme.

  • UNSUBACK (11): Odgovor servera na zahtev UNSUBSCRIBE.

  • PINGREQ (12): Poruka otkucaja srca poslata od strane klijenta.

  • PINGRESP (13): Odgovor servera na poruku otkucaja srca.

  • DISCONNECT (14): Iniciran od strane klijenta za prekid veze.

  • Dve vrednosti, 0 i 15, označene su kao rezervisane i njihova upotreba je zabranjena.

Shodan

  • port:1883 MQTT

WhiteIntel je pretraživač pokretan dark-web-om koji nudi besplatne funkcionalnosti za proveru da li je kompanija ili njeni korisnici ugroženi od strane malvera za krađu.

Njihov primarni cilj WhiteIntela je borba protiv preuzimanja naloga i napada ransomvera koji proizilaze iz malvera za krađu informacija.

Možete posetiti njihovu veb lokaciju i isprobati njihovu mašinu za besplatno na:

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated