MQTT Güvenliği

MQTT Güvenli mi? Tehditler, Efsaneler ve Gerçek Korumalar

MQTT güvenliğine dürüst bir bakış: protokolün neyi koruyup neyi korumadığı, kurulumları gerçekten vuran tehditler, yaygın efsaneler ve bir MQTT sistemini pratikte güvenli kılan katmanlar.

Bir MQTT broker etrafında TLS, kimlik doğrulama ve tenant izolasyonuyla MQTT güvenli mi sorusunu yanıtlayan katmanlı kalkan diyagramı
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

MQTT güvenli mi? Protokolün kendisi güvenlik için yalnızca kancalar sunar: bir kullanıcı adı ve şifre alanı ile TLS üzerinden çalışma desteği. Güvenliği tam olarak etrafındaki kurulum kadardır. Bu yazı MQTT'nin neyi koruyup neyi korumadığını, gerçek sistemleri hangi tehditlerin vurduğunu, sorun çıkaran efsaneleri ve bir MQTT kurulumunu güvenli hâle getiren katmanları açıklıyor.

MQTT'nin Kendisi Neler Sunar?

MQTT hafif bir mesajlaşma protokolü olarak tasarlandı ve spesifikasyonu güvenliğin büyük kısmını bilinçli olarak diğer katmanlara bırakır. Kutudan çıktığı hâliyle şunları elde edersiniz:

  • CONNECT paketinde düz bayt olarak gönderilen bir kullanıcı adı ve şifre alanı.
  • Broker'ın uyguladığı challenge-response yöntemleri için MQTT 5 gelişmiş kimlik doğrulama kancaları (bir kimlik doğrulama yöntemi ve AUTH paketleri).
  • Broker'ın "hatalı kimlik bilgileri" veya "yetkisiz" diyebilmesini sağlayan reason code'lar.
  • MQTT'nin TLS veya güvenli WebSocket üzerinden çalışabilmesini sağlayan taşıma bağımsızlığı.

Protokolün kendi başına sağlamadıkları:

  • Şifreleme yok. TLS olmadan her topic, payload ve şifre hatta okunabilir.
  • Yetkilendirme modeli yok. Hangi istemcinin hangi topic'i kullanabileceği broker'a kalmıştır.
  • Payload bütünlüğü veya imzalama yok. Bir mesaj, ulaştığı bağlantı dışında onu kimin oluşturduğuna dair hiçbir kanıt taşımaz.
  • Hız sınırlama veya kötüye kullanım koruması yok. Bu bir broker özelliğidir.

OASIS MQTT spesifikasyonu bunları uygulama sorumlulukları olarak ele alan bir güvenlik bölümü bile içerir. Dolayısıyla "MQTT güvenli mi" sorusunun dürüst yanıtı şudur: MQTT güvenli hâle getirilebilir ve güvenlik; broker'ın, istemcilerin ve ağ tasarımının bir özelliğidir.

Gerçekten Önemli Olan Tehditler

Tehdit Nasıl gerçekleşir Birincil koruma
Dinleme 1883 portundaki trafiğin Wi-Fi, ISS veya bulut ağında yakalanması 8883 / 8084 üzerinde TLS
İletim sırasında kimlik bilgisi hırsızlığı Şifrenin şifrelenmemiş bir CONNECT'ten okunması Sertifika doğrulamalı TLS
Açık broker'lar Anonim erişimle internete açık broker Kimlik doğrulama, üretimde anonim erişim olmaması
Cihazlardan kimlik bilgisi çıkarma Firmware'e sabit kodlanmış veya düz flash'ta saklanan şifre Cihaz başına kimlik bilgileri, şifrelenmiş depolama
Kimliğe bürünme Saldırganın çalınmış veya paylaşılan bir client ID ile bağlanması Kimlik bilgilerine bağlı client ID'ler
Tenant'lar arası erişim Paylaşılan bir broker'da zayıf izolasyon Tenant izolasyonu
Kötü niyetli komutlar Bir komut topic'ine yayın yapabilen herkes Yetkilendirme, cihazda komut doğrulama
Hizmet engelleme Bağlantı taşkınları, mesaj taşkınları, kaba kuvvet girişleri Kotalar, flood koruması, IP engelleme

Açıkta kalan broker taramaları, 1883 portunda anonim erişime sahip, sensör verisi sızdıran ve bazen komut kabul eden sistemleri düzenli olarak bulur. Bunlar protokol açıkları değil yapılandırma hatalarıdır; asıl işin büyük kısmının operasyonel olmasının nedeni de budur. Bunların nasıl bulunup kapatıldığı için açıkta kalan MQTT broker'lar yazısına bakın.

MQTT Güvenliği Hakkında Yaygın Efsaneler

"MQTT şifreleri düz metin gönderdiği için güvensizdir."

Şifreleri MQTT katmanı içinde düz metin olarak gönderir; tıpkı HTTP Basic kimlik doğrulamasının yaptığı gibi. TLS üzerinden ise CONNECT paketi dahil tüm bağlantı şifrelenir. Sorun MQTT'nin kendisi değil, MQTT'yi TLS olmadan çalıştırmaktır.

"Ağımızın içinde 1883 portu sorun değil."

İç ağlar ele geçirilir, Wi-Fi dinlenir ve "geçici" port yönlendirmeleri kalıcı hâle gelir. Her ağı güvenilmez kabul edin ve mümkün olan her yerde TLS kullanın. Düz 1883'ü, ücretsiz herkese açık MQTT broker üzerindeki demo trafiği gibi, her yerde görülmesinden rahatsız olmayacağınız herkese açık test verisi için ayırın.

"Uzun, rastgele bir client ID bir sırdır."

Client ID'ler günlüklerde, panolarda ve topic yollarında görünür. Bir istemciyi tanımlarlar, kimliğini doğrulamazlar. Güvenlik, client ID'nin bağlı olduğu kimlik bilgisinden gelir.

"TLS payload'ları uçtan uca güvenli kılar."

TLS, bir istemci ile broker arasındaki her adımı korur. Broker payload'ı düz hâliyle görür. Cihazdan uygulamaya uçtan uca gizliliğe ihtiyacınız varsa üstüne MQTT payload şifrelemesi ekleyin.

"Kimse benim sensörlerime saldırmakla uğraşmaz."

Otomatik tarayıcılar sensörlerinizin neyi ölçtüğüyle ilgilenmez. Açık portları ve varsayılan kimlik bilgilerini ararlar; açıkta kalan bir broker bir dayanak noktası veya ücretsiz bir aktarıcı olarak kullanılabilir.

MQTT'yi Güvenli Kılan Katmanlar

  1. Taşıma şifrelemesi. 8883 portunda TLS 1.2 veya daha yenisi ya da tarayıcılar için 8084'te güvenli WebSocket; her istemcide sertifika doğrulaması etkin.
  2. Kimlik doğrulama. Üretim verisine anonim erişim yok. Her cihaz ve servis için benzersiz kimlik bilgileri.
  3. Kimlik bağlama. Bir istemcinin diğerinin kimliğine bürünememesi için client ID'lerin kimlik bilgilerine bağlanması.
  4. İzolasyon ve yetkilendirme. Ayrı tenant'lar ve ortamlar; broker'ınız destekliyorsa topic'leri kısıtlayın ve topic ağaçlarını kimlik ile yön görünür olacak şekilde tasarlayın. MQTT ACL rehberi her iki yaklaşımı da ele alır.
  5. Kötüye kullanım koruması. Bağlantı ve mesaj kotaları, flood koruması ve kaba kuvvet giriş denemelerinin engellenmesi.
  6. Cihaz sıkılaştırma. Şifrelenmiş kimlik bilgisi depolama, Secure Boot, devre dışı bırakılmış hata ayıklama portları, imzalı firmware güncellemeleri.
  7. Operasyon. Kimlik bilgisi yenileme, bağlantı durumunun ve anormalliklerin izlenmesi ve ele geçirilmiş bir cihazı iptal etmek için bir plan.

Yönetilen Bir Broker Açıkları Nasıl Kapatır?

Bu katmanların birçoğu broker tarafındadır ve kendi barındırılan kurulumların en sık yanlış yaptığı kısımlar tam da bunlardır: sertifikaların süresi dolar, anonim erişim bir testten sonra açık kalır, bir şifre dosyası her cihaz tarafından paylaşılır. Bir yönetilen MQTT broker bu sorumlulukları üstlenir.

ConnectMQ'nun yukarıdaki katmanlara karşılıkları şöyle:

Katman ConnectMQ
Taşıma şifrelemesi Let's Encrypt sertifikasıyla 8883'te TLS ve 8084'te güvenli WebSocket (yol /mqtt)
Kimlik doğrulama Broker kimlik bilgisi seti başına oluşturulmuş kullanıcı adı ve şifre
Kimlik bağlama Verilen kimlik bilgilerine bağlı client ID'ler
İzolasyon Müşteriler arasında çok kiracılı (multi-tenant) izolasyon; izole bir küme için Dedicated plan; kendi bulut hesabınızda BYOC
Kötüye kullanım koruması Plan başına kotalar, flood koruması, tekrarlanan başarısız girişlerden sonra IP engelleme
Görünürlük Pano, canlı topic gezgini ve istemci başına bağlantı durumu için $SYS/broker/connection/{clientId}/state

ConnectMQ topic başına ACL uygulamaz; bu yüzden güvenlik sınırı tenant ve broker'dır: iki istemci grubu birbirinin verisini görmemeliyse onlara ayrı broker'lar verin ve güvenilmeyen kullanıcılara broker kimlik bilgileri vermek yerine onları kendi backend'inizin arkasında tutun. Cihaz sıkılaştırma ve kimlik bilgisi yenileme, her broker'da olduğu gibi sizin sorumluluğunuzda kalır; cihazlarda MQTT kimlik bilgilerini güvenli tutmak ve MQTT güvenliği en iyi uygulamaları rehberleri bunları ele alır.

Hızlı Öz Değerlendirme

Mevcut kurulumunuz hakkında şu soruları yanıtlayın:

  1. Herhangi bir üretim istemcisi 1883 portundan bağlanıyor mu?
  2. Herhangi bir istemci sertifika doğrulamasını devre dışı bırakıyor mu?
  3. İki veya daha fazla cihaz tek bir kimlik bilgisini paylaşıyor mu?
  4. Herhangi bir kimlik bilgisi bir firmware imajına veya herkese açık bir depoya sabit kodlanmış mı?
  5. Diğerlerini etkilemeden tek bir cihazı dakikalar içinde iptal edebiliyor musunuz?
  6. Bir cihaz beklenmedik bir yerden bağlanmaya veya normal hızının on katında yayın yapmaya başlasa fark eder miydiniz?

İlk dördünden herhangi birine "evet" ya da son ikisinden birine "hayır" yanıtı, başlamanız gereken yeri gösterir.

ConnectMQ ile Başlayın

Sizin için yönetilen bir bulut MQTT broker ile ilk günden TLS, kimlik doğrulama, kimlik bağlama, tenant izolasyonu ve kötüye kullanım korumasına sahip olun. app.connectmq.com adresinde kredi kartı gerekmeden ücretsiz bir Serverless broker oluşturun ve ilk cihazınızı dakikalar içinde 8883 portu üzerinden bağlayın.

Sık Sorulan Sorular

MQTT, TLS olmadan güvenli mi?

Hayır. TLS olmadan kullanıcı adları, şifreler, topic'ler ve payload'lar trafiği yakalayabilen herkes tarafından okunabilir. Herkese açık test verisinin ötesindeki her şey için 8883 portunu veya güvenli WebSocket'i kullanın.

MQTT, HTTP'den daha mı güvenli yoksa daha mı az güvenli?

Karşılaştırılabilir düzeydeler. Her ikisi de şifreleme için TLS'e, kimlik doğrulama ve yetkilendirme için sunucuya dayanır; hiçbiri düz metin hâlinde güvenli değildir.

MQTT 5 güvenliği iyileştiriyor mu?

MQTT 5; gelişmiş kimlik doğrulama, yeniden kimlik doğrulama ve daha zengin reason code'lar ekler; bunlar güvenli tasarımları kurmayı ve hata ayıklamayı kolaylaştırır. Kendi başına şifreleme eklemez.

Herkese açık bir MQTT broker kullanmak güvenli mi?

Hassas olmayan verilerle öğrenme ve demolar için evet. Herkese açık broker'lar herkes tarafından okunabilir; bu yüzden üretim verisinin yeri kimlik bilgileri ve TLS kullanan özel bir broker'dır.

İlgili yazılar

MQTT Kimlik Bilgileri Kesintisiz Nasıl Yenilenir?

Bir filo genelinde MQTT kullanıcı adı ve şifrelerini yenilemek için adım adım çift kimlik bilgisi stratejisi: yeni kimlik bilgisini hazırlayın, geri dönüş seçeneğiyle geçiş yapın, doğrulayın ve ancak ondan sonra eskisini iptal edin.

6 dk okuma

MQTT Kimlik Bilgilerini Gömülü Cihazlarda Güvenle Saklamak

ESP32 ve Linux cihazlarda MQTT kullanıcı adı ve şifrelerini korumanın yollarına pratik bir karşılaştırma; şifrelenmiş NVS ve flash şifrelemeden secure element'lere ve TPM destekli systemd kimlik bilgilerine kadar.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.