MQTT Protokolünün Tarihçesi, Genel Özellikleri, Mimarisi ve Güvenlik Zafiyetleri



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: MQTT Protokolünün Çalışma Prensibi Örneği


Ş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




Yorum Gönder

0 Yorumlar