IoT Siber Güvenliği: ESP32 Ağ Trafiği İzleme

IoT Siber Güvenliği: ESP32 Ağ Trafiği İzleme

Bu çalışmada, ESP32 ağ projelerinde, ağ trafiğini izleme ve derinlemesine paket analizi (sniffing) gerçekleştirme yöntemlerini inceleyeceğiz. Ayrıca bu analizlerin, ağ güvenliği mimarisini güçlendirmede nasıl kritik bilgiler sunduğunu ele alacağız. IoT projelerinde fiyat/performans avantajıyla öne çıkan ESP32 gibi mikrodenetleyicilerde uç nokta güvenliğinin sağlanması, donanımın kararlı çalışması kadar hayati bir öneme sahiptir.

Ağ Trafiği İzleme ve Paket Analizinin Önemi

Sahada konumlandırılmış akıllı cihazlar telemetri verilerini, kullanıcı komutlarını ve durum bilgilerini internet üzerinden aktarır. Ancak bu süreçte:

  1. Güvenlik mekanizmaları zayıf ise veriler şifresiz düz metin (plain text) olarak gönderiliyor ve pasif dinleyiciler tarafından deşifre edilebiliyor olabilir.
  2. Cihazlar, ağ geçidindeki (gateway) açıklar nedeniyle siber aktörlerin hedefi haline gelebilir.
  3. Cihazın arka planda hangi IP adresleriyle ve hangi sunucularla bağlantı kurduğu (potansiyel veri sızıntıları) izlenemiyor olabilir.

ESP32 donanımının ağ hareketlerini (traffic profiling) izleyerek şu kritik parametreleri elde edebilirsiniz:

  • Cihazın yerel ağda ve genel internette bağlantı kurduğu tüm uç noktaları (sorgulanan IP/domain adresleri),
  • İletişimde tercih edilen aktif protokol türlerini (DNS, HTTP, HTTPS, MQTT vb.),
  • Gönderilen ve alınan veri paketlerinin tam içeriğini (payload).

Elde edilen bu veriler; ağdaki güvenlik açıklarını erkenden tespit etmek, sıfırıncı gün (zero-day) zafiyetlerini yamamak ve proaktif güvenlik önlemleri geliştirmek için kullanılır.


ESP32 Ağ Trafiği Analizi Nasıl Yapılır?

1. Analiz İçin Gerekli Siber Güvenlik Araçları

ESP32 ağ trafiğini laboratuvar ortamında dinlemek ve çözümlemek için şu bileşenlere ihtiyaç duyulur:

  • Wireshark: Ağ kartından geçen tüm paketleri yakalayan ve protokol düzeyinde derinlemesine analiz imkanı sunan sektör standardı ağ analiz aracıdır.
  • Linux Dağıtımı (Kali Linux vb.): Ağ arayüzünü izleme moduna (monitor mode) almak ve pentest araçlarını kararlı çalıştırmak amacıyla hafif bir Linux işletim sistemi kullanımı önerilir.
  • Kablosuz Ağ Arayüzü: Paket koklama (sniffing) amacıyla ağ trafiğini yansıtacak (port mirroring) veya izleme modunu destekleyen bir Wi-Fi kartı.
  • Yönlendirici (Router) Yönetimi: Cihazın bağlı olduğu yerel ağ geçidindeki yönlendirici üzerinden veri akış loglarını izlemek.

2. Wireshark ile Yerel Ağ Paketlerini Yakalama

Wireshark kullanarak ESP32 paketlerini yakalamak için izlemeniz gereken yapılandırma adımları şu şekildedir:

Paket analizinin stabil yürütülebilmesi için öncelikle ana makinenizde veya bir sanal bilgisayar (VirtualBox/VMware) üzerinde çalışan Linux işletim sisteminde Wireshark aracını kurup hazır hale getirin:

ESP32 Ağ Trafiği İzleme
ESP32 Ağ Trafiği İzleme – Wireshark Örnek Ekran Görüntüsü
  1. Cihazın Ağ Bağlantısı: ESP32 cihazınızı hedef kablosuz ağa (Wi-Fi) bağlayın ve DHCP sunucusundan aldığı lokal IP adresini (örneğin 192.168.1.15) not edin.
  2. Ağ Arayüzünün Tespiti: Linux terminalinde ifconfig veya ip addr komutunu koşturarak dinleme yapacağınız kablosuz ağ arayüzünün (örneğin wlan0 veya wlan0mon) adını tespit edin.
  3. Yakalamayı Başlatın: Wireshark uygulamasını yönetici (root) yetkileriyle başlatın, ilgili arayüzü seçerek paket yakalama işlemini (Capture) aktif edin.
IoT Siber Güvenliği: ESP32 Ağ Trafiği İzleme esp32 ağ
  1. Ağ Filtreleme (Display Filters): Ağdaki diğer cihazların gürültülü trafiğini engellemek ve sadece hedef cihaza odaklanmak için Wireshark üst menüsüne ip.addr == ESP32_IP_ADRESI filtresini girin.

Ağ filtreleme alanında; DNS sorguları için dns, şifresiz web trafiği için http, şifreli HTTPS bağlantıları için tls ve hafif IoT haberleşmesi için mqtt filtrelerini kullanarak analiz alanınızı daraltabilirsiniz.

3. Yakalanan Paketlerin Protokol Bazlı Analizi

Wireshark arayüzünde süzülen paketlerin detaylarını inceleyerek şu analiz adımlarını gerçekleştirebilirsiniz:

  • DNS Çözümleme Sorguları: Cihazın hangi alan adlarına gitmek istediğini görebilirsiniz. Filtre: dns and ip.addr == ESP32_IP_ADRESI
DNS Wireshark
  • HTTP/HTTPS Trafiği ve Şifreleme Kontrolü: Verilerin tünellenip tünellenmediğini analiz edebilirsiniz. Şifresiz HTTP için http, TLS/SSL şifreli HTTPS için tls veya ssl filtreleri uygulanmalıdır.
  • MQTT/CoAP Protokol Analizi: Gömülü sistemin telemetri mesajlaşma desenlerini izleyebilirsiniz. Filtre: mqtt
mqtt wireshark

Analiz Testi İçin Geliştirme Ortamı Hazırlığı

Ağ katmanındaki paket hareketlerini gözlemlemek adına, ESP32 üzerinde çalışan ve bir web arayüzü barındıran tetikleyici bir test yazılımı kullanacağız. Bu yazılım sayesinde tek bir tıklamayla DNS, HTTP, HTTPS ve MQTT isteklerini manuel olarak tetikleyerek Wireshark üzerindeki yansımalarını canlı izleyeceğiz.

MQTT mesajlaşma modüllerini koşturabilmek için projenize dahil etmeniz gereken Arduino PubSubClient kütüphanesini geliştirme ortamınıza yükleyin.

DNS, HTTP, HTTPS, MQTT istekleri için kullanılabilecek kodlar;

#include <WiFi.h>
#include <HTTPClient.h>
#include <PubSubClient.h>

// Wi-Fi bilgileri
const char* ssid = "devreyakan";       // Wi-Fi SSID
const char* password = "devreyakan"; // Wi-Fi şifresi

// MQTT Broker Bilgileri
const char* mqttServer = "test.mosquitto.org"; // Ücretsiz MQTT Broker
const int mqttPort = 1883;                    // MQTT portu (1883)

WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);

WiFiServer server(80);

void setup() {
  Serial.begin(115200);

  // Wi-Fi'ye bağlan
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWi-Fi bağlantısı başarılı!");
  Serial.print("IP Adresi: ");
  Serial.println(WiFi.localIP());

  server.begin();

  // MQTT Broker'a bağlan
  mqttClient.setServer(mqttServer, mqttPort);
  connectToMQTT();
}

void loop() {
  WiFiClient client = server.available();

  if (client) {
    String request = client.readStringUntil('\r');
    Serial.println(request);

    // HTTP isteği
    if (request.indexOf("/http") != -1) {
      makeHTTPRequest();
    }
    // HTTPS isteği
    if (request.indexOf("/https") != -1) {
      makeHTTPSRequest();
    }
    // DNS isteği
    if (request.indexOf("/dns") != -1) {
      makeDNSRequest();
    }
    // MQTT mesajı
    if (request.indexOf("/mqtt") != -1) {
      publishMQTTMessage();
    }

    client.flush();
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body>");
    client.println("<h1>ESP32 Protokol Tetikleyici</h1>");
    client.println("<p><a href=\"/http\">HTTP İsteği Gönder</a></p>");
    client.println("<p><a href=\"/https\">HTTPS İsteği Gönder</a></p>");
    client.println("<p><a href=\"/dns\">DNS İsteği Gönder</a></p>");
    client.println("<p><a href=\"/mqtt\">MQTT Mesajı Yayınla</a></p>");
    client.println("</body></html>");
  }

  // MQTT bağlantısını kontrol et
  if (!mqttClient.connected()) {
    connectToMQTT();
  }
  mqttClient.loop();
}

void connectToMQTT() {
  Serial.print("MQTT Broker'a bağlanılıyor...");
  while (!mqttClient.connected()) {
    if (mqttClient.connect("ESP32Client")) {
      Serial.println("\nMQTT bağlantısı başarılı!");
    } else {
      Serial.print("Bağlantı hatası, tekrar deniyor...");
      delay(2000);
    }
  }
}

// HTTP GET isteği
void makeHTTPRequest() {
  HTTPClient http;
  http.begin("http://jsonplaceholder.typicode.com/posts/1");
  int httpCode = http.GET();
  if (httpCode > 0) {
    String payload = http.getString();
    Serial.println("HTTP yanıtı: " + payload);
  }
  http.end();
}

// HTTPS GET isteği
void makeHTTPSRequest() {
  HTTPClient https;
  https.begin("https://jsonplaceholder.typicode.com/posts/1");
  int httpsCode = https.GET();
  if (httpsCode > 0) {
    String payload = https.getString();
    Serial.println("HTTPS yanıtı: " + payload);
  }
  https.end();
}

// DNS isteği
void makeDNSRequest() {
  IPAddress ip;
  WiFi.hostByName("www.google.com", ip);
  Serial.print("DNS isteği yapıldı: ");
  Serial.println(ip);
}

// MQTT mesajı yayınlama
void publishMQTTMessage() {
  if (mqttClient.publish("esp32/test", "Merhaba, MQTT'den mesaj gönderildi!")) {
    Serial.println("MQTT mesajı gönderildi.");
  } else {
    Serial.println("MQTT mesajı gönderilemedi.");
  }
}

Web Arayüzü ve Seri Ekran Analiz Görüntüleri

Kod cihaza yüklendikten sonra, ESP32 yerel Wi-Fi ağına bağlanarak DHCP sunucusundan bir lokal IP adresi alır. Bu IP adresini seri port ekranından (Serial Monitor) veya yönlendirici arayüzünden tespit edebilirsiniz:

IoT Siber Güvenliği: ESP32 Ağ Trafiği İzleme esp32 ağ

ESP32 cihazının aldığı yerel IP adresine tarayıcınızdan bağlandığınızda, protokol tetiklemelerini yapabileceğiniz yerel arayüze erişirsiniz:

IoT Siber Güvenliği: ESP32 Ağ Trafiği İzleme esp32 ağ

Arayüz üzerinden tetiklediğiniz ağ paketlerinin durumunu hem seri port çıktılarından hem de eşzamanlı olarak arka planda çalışan Wireshark yakalayıcısından izleyebilirsiniz:

IoT Siber Güvenliği: ESP32 Ağ Trafiği İzleme esp32 ağ

Ağ Trafiği İzleme Sürecinde Dikkat Edilmesi Gereken Mühendislik Kriterleri

  1. Kriptografik Güvenlik Sınırları:
    Wireshark, ağdan geçen ham paketleri yakalasa da TLS şifreli paketlerin (HTTPS, MQTTS) içerisindeki hassas verileri doğrudan gösteremez. Şifresiz düz metin HTTP veya standart MQTT paketleri ise tamamen deşifre edilebilir.
  2. Yasal ve Etik Sınırlar:
    Ağ koklama ve paket yakalama işlemleri yalnızca kendi test ortamınızda ve mülkiyetiniz altındaki cihazlar üzerinde, sızma testi (pentest) kuralları çerçevesinde yürütülmelidir. Yetkisiz ağ dinlemeleri yasal olarak suç teşkil eder.
  3. Performans ve İşlemci Yükü:
    Yoğun ağ paketlerinin soket düzeyinde izlenmesi ve sürekli seri port üzerinden raporlanması, kısıtlı işlemci gücüne sahip ESP32 üzerinde ek bir gecikmeye (latency) yol açabilir.

Ağ Trafiği İzlemenin IoT Siber Güvenliğine Katkıları

ESP32 paket analizleri (traffic analysis) sayesinde projelerinizde şu proaktif siber güvenlik filtrelerini geliştirebilirsiniz:

  • Kimlik Bilgisi Sızıntılarının Tespiti: Cihazın şifresiz paketler üzerinden varsayılan parolaları veya API anahtarlarını sızdırıp sızdırmadığını anında görebilirsiniz.
  • Anomali ve Sızıntı Engelleme: Cihazın yetkisiz dış sunuculara veri aktarıp aktarmadığını tespit ederek bağlantıyı güvenlik duvarı (Firewall) üzerinden bloke edebilirsiniz.
  • Protokol Sertifikasyon Denetimi: MQTT veya HTTP servislerinin TLS (MQTTS/HTTPS) ile düzgün şekilde sarılıp sarılmadığını doğrulayabilirsiniz.

Genel Değerlendirme

Sonuç olarak, ESP32 ağ trafiğinin periyodik olarak izlenmesi ve analiz edilmesi, Nesnelerin İnterneti sistem mimarlarının zafiyetleri kapatmasında en etkili siber analiz yöntemlerinden biridir. Wireshark ve Linux tabanlı araçlarla yapacağınız paket koklama testleri, sisteminizde oluşabilecek potansiyel veri sızıntılarını ve ağ açıklarını daha sahaya konuşlandırma yapılmadan önce tespit etmenizi sağlar.

Ağ güvenliğine yönelik benzer analiz süreçlerinin bir parçası olan, DNS sorgu sızıntılarının tespiti ve engellenmesi adımlarını incelemek için ESP32 DNS Manipülasyonu ve Zehirlenmesi rehberimize de göz atabilirsiniz.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.