Message Queuing Telemetry Transport (MQTT – Mesaj Kuyruğu Telemetri Aktarımı) Protokolü; Organization for the Advancement of Structured Information Standards (OASIS – Yapılandırılmış Bilgi Standartlarının Geliştirilmesi Teşkilatı) ve International Organization for Standardization (ISO – Uluslararası Standardizasyon Örgütü)/International Electrotechnical Commission (IEC – Uluslararası Elektroteknik Komisyonu) 20922 standardıdır.
1. MQTT Protokolünün Tarihçesi
MQTT protokolünün birinci versiyonu; International Business Machines (IBM) şirketinde çalışan Andy Stanford Clark ve Arlen Nipper tarafından 1999 yılında tasarlamıştır ve ilk olarak çölde bulunan petrol boru hattını izlemek için kullanılmıştır. 1999 yılında, çok pahalı bir yöntem olan uydu bağlantısı yoluyla cihazlar sisteme bağlandığı için bant genişliği tasarruflu, hafif ve çok az pil gücü kullanan MQTT protokolü tasarlanmıştır.
2. MQTT Protokolünü Kullanan Bazı Sistemler ve Uygulamalar
- Akıllı Ev – Akıllı Şehir Kontrol Sistemleri
- Facebook Messenger
- Petrol ve Gaz Endüstrisi
- Amazon Web Services (AWS)
3. MQTT Protokolünün Genel Özellikleri
MQTT protokolü, Machine to Machine (M2M – Makineden Makineye) ve Internet
of Things (IoT – Nesnelerin İnterneti) bağlantı tabanlı protokolüdür.
M2M, kablolu ve kablosuz dâhil olmak üzere herhangi bir iletişim kanalını
kullanan cihazlar arasında doğrudan haberleşmeye denilmektedir. IoT, fiziksel
nesnelerin birbirleriyle veya daha büyük sistemlerle bağlantılı olduğu haberleşme
ağıdır. IoT, Wireless Sensor Network (WSN – Kablosuz Sensör Ağı) bir
parçasıdır. WSN, çevrenin fiziksel koşullarının izlenmesi ve kaydedilmesi ve
toplanan verilerin merkezi bir yerde düzenlenmesi için kullanılan sensör
grubunu ifade etmektedir.
MQTT protokolü, genellikle Transmission Control Protocol/Internet
Protocol (TCP/IP – Aktarma Kontrol Protokolü / İnternet Protokolü) protokol
takımı üzerinden çalışmaktadır. TCP/IP, günümüzde en yaygın olarak
kullanılan protokol takımıdır. Gelişmiş bilgisayar ağlarında paket
anahtarlamalı bilgisayar iletişiminde kayıpsız veri gönderimi sağlayabilmek
için TCP protokolü yazılmıştır. IP adresi, interneti ya da TCP/IP protokol
takımını kullanan diğer paket anahtarlamalı ağlara bağlı cihazların, ağ
üzerinden birbirleri ile veri alışverişi yapmak için kullandıkları adrestir.
MQTT protokolü, client (istemci) – server (sunucu) ağ mimarisini
kullanmaktadır. Server (Sunucu); bilgisayar ağlarında, diğer ağ bileşenlerinin
(kullanıcıların) erişebileceği, kullanımına veya paylaşımına açık kaynakları
barındıran bilgisayar birimidir. Bir ağda birden fazla sunucu birimi
bulunabilmektedir. Client (İstemci), bir ağ üzerinde, sunucu bilgisayarlardan
hizmet alan kullanıcı bilgisayarlarıdır. İstemcilerin, bilgiye erişim yetkileri
sunucu tarafından belirlenmektedir. Şekil 1’de istemci – sunucu ağ mimarisi modeli
gösterilmektedir.
Şekil 1: İstemci – Sunucu Ağ Mimarisi Modeli |
MQTT protokolü, lightweight (hafif) cihazlar arasında mesaj ileten publish
(yayınlama) – subscribe (abone olma)
kalıbını kullanan ağ protokolüdür. Yayınlama – Abone Olma Kalıbı, publisher
(yayıncı) olarak adlandırılan mesaj gönderenlerin, subscriber (abone) olarak
adlandırılan belirli alıcılara doğrudan gönderilecek mesajları programlamadığı
bir mesajlaşma modelidir. Yayınlama – Abone Olma Kalıbı, ağ bant genişliğinin
sınırlı olduğu uzak konumlara bağlantılar için kullanılmaktadır. Şekil 2’de publish
(yayınlama) – subscribe (abone olma)
kalıbı modeli gösterilmektedir.
Şekil 2: Publish (Yayınlama) – Subscribe (Abone Olma) Kalıbı Modeli |
4. MQTT Protokolünün Mimarisi
MQTT protokolünün mimarisinde message broker (mesaj aracısı) ve
istemciler olmak üzere iki tür ağ öğesi bulunmaktadır.
Mesaj aracısı; bir mesajı, gönderenin mesajlaşma protokolünden, alıcının
mesajlaşma protokolüne çeviren bir ara bilgisayar programı modülüdür. MQTT
protokolünde mesaj aracısı, MQTT Broker (Aracısı)’dır. Bir MQTT Broker
(Aracısı), istemcilerden gelen tüm iletileri alan ve ardından iletileri uygun
hedef istemcilere yönlendiren bir sunucudur. MQTT Broker (Aracı); bilgisayarda
veya bulutta çalışan bir yazılımdır ve varsayılan portu 1883’dür.
MQTT protokolünde; istemciler publisher (yayıncı) – subscriber (abone)’dır
ve istemciler, MQTT protokolü kütüphanesini çalıştıran ve bir ağ üzerinden MQTT
Broker (Aracısı)’a bağlanan herhangi bir cihazdır.
MQTT protokolünde; alıcının adresi kullanılmamaktadır, topic (konu) adlı
konu satırı kullanılmaktadır, iletinin bir kopyasını isteyen tüm istemciler
istediği konuya abone olmaktadır, konular Unicode Transformation Format (UTF – Unicode
Dönüşüm Biçimi)-8 kodlu bir dizedir ve bir konu maksimum 64 Kilobayt boyutunda
olabilmektedir. MQTT protokolünde yayıncının, abonelerin sayısı veya konumları
hakkında herhangi bir veriye sahip olması gerekmemektedir. MQTT protokolünde
yayıncılar ve abone olanlar arasında doğrudan bağımlılık olmadığı için sistem
ölçeklenebilir hale getirilebilmektedir.
MQTT protokolünde her istemci, hem yayınlayarak hem de abone olarak hem
veri üretebilmektedir hem de veri alabilmektedir. Yani cihazlar MQTT protokolünde;
sensör verilerini yayınlayabilmektedir ve yine de yapılandırma bilgilerini veya
kontrol komutlarını alabilmektedir. Kısaca MQTT protokolü iki yönlü bir haberleşme
protokolüdür. Bu durum, hem veri paylaşmaya, hem de cihazları yönetmeye ve
kontrol etmeye yardımcı olmaktadır.
4.1. MQTT Protokolü Çalışma Prensibi
MQTT protokolünün çalışma prensibinin örneği şekil 3’de gösterilmektedir.
Şekil 3’de; ilk olarak yayıncı, mesajı “KTU”
konusu ile yayınlamaktadır, yani mesaj MQTT Broker (Aracı) birimine iletilmektedir.
Ardından “KTU” konusuna abone olan aboneye MQTT Broker (Aracı) “KTU” konulu mesaj
iletilmektedir, ancak “Trabzon” konusuna abone olan aboneye mesaj
iletilmemektedir.
MQTT protokolünde; istemcilerin konulara abone
olurken kullanabildikleri iki özel karakter (‘#’ ve ‘+’) bulunmaktadır.
MQTT protokolünde konuların sonuna ‘#’ özel
karakteri konulmasıyla istemci konudan sonra gelen tüm düzeylere abone olmaktadır.
Örneğin ilk konu “Türkiye/Trabzon/Ortahisar/KTÜ/Kabin1/Nem-Sıcaklık/Nem” olsun.
Yeni konu ise “Türkiye/Trabzon/Ortahisar/KTÜ/Kabin1/#” olsun. Yeni konu
incelendiğinde en sonunda ‘#’ özel karakteri olduğu için abone Nem-Sıcaklık/Nem
alt konularına abone olmuştur.
MQTT protokolünde konuların sonuna ‘+’ özel
karakteri konulmasıyla istemci bir düzeydeki tüm konulara abone olmaktadır. Örneğin
ilk konu “Türkiye/Trabzon/Ortahisar/KTÜ/Kabin1/Nem-Sıcaklık/Nem” olsun. Yeni
konu ise “Türkiye/Trabzon/Ortahisar/KTÜ/+/ Nem-Sıcaklık/Nem” olsun. Yeni konu içeriğinde
‘+’ özel karakteri olduğu için abone tüm Kabinlere (Kabin1, Kabin2, Kabin3, …)
abone olmuştur.
MQTT protokolünde, konunun içerikleri ‘/’
karakteri ile ayrılma zorunluluğu bulunmamaktadır, ancak gelenek olarak konunun
içerikleri ‘/’ karakteri ile birbirinden ayrılmaktadır.
MQTT protokolünde bir yayıncının dağıtmak için
yeni bir veri öğesi olduğunda, bağlı olduğu MQTT Aracısına verileri içeren bir
kontrol mesajı iletmektedir. MQTT Aracısı daha sonra verileri bu konuya abone
olan istemcilere dağıtmaktadır. MQTT protokolünde kontrol mesajının
içeriğindeki veri boyutu 2 Bayt ile 256 Megabayt arasında değişebilmektedir.
Tablo 1’de MQTT protokolü kontrol paketleri, kontrol paketlerin yönü
gösterilmektedir.
Tablo 1: MQTT Protokolü Kontrol Paketleri |
5. MQTT Protokolünün
Güvenlik Zafiyetleri
5.1 Erişim
Kısıtlandırma Sistemi Eksikliği
Herhangi bir istemcinin istediği konulara abone
olmasını veya yayın yapmasını engelleyen herhangi bir erişim kısıtlandırması
protokolün saf kullanımında bulunmamaktadır. Bu durum veri güvenliği açısından
hassas bir konu olmakla birlikte gereksiz bir trafik oluşturarak ağın verimli
kullanılmasını engelleyebilmektedir.
Bu probleme çözüm olarak, Access Control List (ACL - Erişim
Kontrol Listesi) getirilebilmektedir. ACL, sistemdeki nesnelere
iliştirilmiş olan izinlerin bir listesidir. Bir ACL, hangi kullanıcılara erişim
izni verildiğini, kullanıcılara hangi izinlerin verildiğini ve belirli
konularda hangi işlemlere izin verildiğini belirlemektedir. Tipik bir ACL'deki
her giriş bir konuyu ve işlemi belirtmektedir. Örneğin, MQTT Aracısı üzerinde
çalışan bir ACL dosyasında (user veli topic read write ev/#) şeklinde bir girdi
olması sistemin Veli adındaki kullanıcıya ev/# konusuna abone olmaya ve yayın yapmaya
izin verdiğini ifade etmektedir. ACL dosyası MQTT Aracısının konfigürasyon
ayarlarından yapılandırılabilmektedir.
5.2. İletim
Sırasında Meydana Gelebilecek Problemler
İletim sırasında kaybolan paketlerin sıralanması
ve yeniden gönderilmesi en büyük zorluklardan biridir. Kontrol sağlanmadığında
içeriği hassas olan ve önem taşıyan paketlerin kaybolması ve karşıya
iletilmemesi söz konusu olabilmektedir. Benzer şekilde eğer bir abone, MQTT Aracısından
mesajı almayı unutursa, veriler MQTT Aracısında sonsuza dek kalabilme ihtimali
bulunmaktadır. Bu nedenle MQTT Aracısı; aşırı yüklenmiş olur ve performans
açısından olumsuz etkilenebilmektedir.
Mesajların herhangi bir abone tarafından
alınmamaları durumunda, mesajların sonsuza dek MQTT Aracısında kalmamaları için
paketlere zaman damgası eklemek etkin bir çözüm olabilmektedir.
5.3. Distributed
Denial of Service (DDoS – Dağıtılmış Hizmet Reddi) Saldırısı Korumasızlığı
IoT ağındaki tehdit edici saldırılardan biri olan
DDoS saldırısı, kaynak sunucusuna birden çok istek göndererek çok sayıda isteği
işleme kapasitesini aşmayı ve doğru şekilde çalışmasını engellemeyi
amaçlamaktadır. Bu tarz saldırılar en çok abone olunan konunun belirlenmesi ve MQTT
Aracının bu konudaki yüksek seviye Quality of Service (QoS – Ağ İletişimi
Hizmet Kalitesi) mesajlarını doldurmasıyla başlatılabilmektedir.
Böyle bir saldırıyı engellemek için, abonelerin
ve yayıncıların faaliyetlerini depolamak, izlemek ve analiz etmek için MQTT Aracısında
bir önbellek dağıtımı kullanılabilmektedir. Yüksek seviye QoS, mesajların
taşmasına sebep olmaktadır ve bu nedenle MQTT Aracısı aşırı yüklenmektedir. Bu
etkiyi kısmen azaltmak için MQTT Aracısında varsayılan seviye olarak düşük
seviye QoS’lar kullanılabilmektedir. Şekil 4’te DDoS saldırısına uğrayan MQTT
Aracısı modeli gösterilmektedir.
Şekil 4: DDoS Saldırısına Uğrayan MQTT Aracısı Modeli |
5.4. Kimlik
Doğrulama Mekanizması Eksikliği
MQTT protokolü, saf kullanımında herhangi bir
istemci herhangi bir konuda yayın yapabilecek veya herhangi bir konuya abone
olabilecek şekilde yapılandırılmıştır. MQTT Aracısı tarafından sağlanan
hizmetleri kullanmak için kullanıcı kimliğini doğrulayan herhangi bir doğrulama
veya doğrulama tekniği bulunmamaktadır. Bu durum veri gizliliği üzerinde ciddi
bir tehdit oluşturmaktadır.
Kimlik doğrulama mekanizması yalnızca kayıtlı
kullanıcıların veri yayınlamasına ve abone olmasına izin vererek bu tehdidin önüne
geçilebilmektedir. Çeşitli kimlik doğrulama yöntemleri bulunmaktadır. Kullanıcı
adı ve şifre kullanarak yapılan kimlik doğrulama bunun en yaygın örneğidir.
Kullanılan bir diğer güvenli yöntem ise dijital sertifikalardır.
5.5. Şifreleme
Mekanizması Eksikliği
MQTT protokolünün en önemli güvenlik zafiyetlerinden
biri şifreleme mekanizmasından yoksun olmasıdır. Kullanıcı bir konuya abone
olduğunda veya yayın yapmak istediğinde iletilen mesaj açık metin olarak
karşıya iletilmektedir. Hatta kullanıcı adı ve şifre doğrulaması ile
yapılandırılan MQTT Aracısında kimlik bilgileri dahi açığa çıkarılabilmektedir.
Dolayısıyla çeşitli araçlar kullanan saldırganlar için araya girerek iletilen
mesajları ve paket bilgilerini okumak oldukça kolaydır.
Bu zafiyete çözüm olarak çeşitli şifreleme
algoritmaları önerilebilir. Buradaki önemli husus düşük kapasiteli cihazların
işlem gücü dikkate alınarak ihtiyaca göre bir algoritma belirlenmesidir. Şifreleme
mekanizmalarına çözüm getirmek için Secure Sockets Layer (SSL – Güvenli Soket
Katmanı) / Transport Layer Security (TLS – Taşıma Katmanı Güvenliği)
protokolleri uygulanabilmektedir.
Kaynaklar
- https://mqtt.org/
- https://en.wikipedia.org/wiki/MQTT
- https://www.hivemq.com/mqtt-essentials/
- https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html
- http://www.steves-internet-guide.com/mqtt/
- https://ieeexplore.ieee.org/document/9296847
- https://ieeexplore.ieee.org/document/8239179
- https://en.wikipedia.org/wiki/Machine_to_machine
- https://tr.wikipedia.org/wiki/Nesnelerin_interneti
0 Yorumlar