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

Bu yazıda, ESP32 ağ trafiği izlemek için kullanılan yöntemlere ve bu analizlerin IoT güvenliği açısından nasıl değerli bilgiler sunduğuna odaklanacağız. ESP32, IoT projelerinde oldukça popüler bir mikrodenetleyicidir. Ancak IoT cihazlarının güvenliğini sağlamak, projelerin başarısı kadar kritik bir öneme sahiptir.

⚠️ Yasal Uyarı:

Bu içerik yalnızca eğitim ve bilgi amaçlı olarak hazırlanmıştır. İçerikte belirtilen yöntemlerin kötüye kullanımı yasalara aykırı olabilir ve sorumluluk tamamen kullanıcının kendisine aittir.

Her zaman yasalara uygun hareket etmeniz ve izinsiz girişimlerde bulunmamanız gerektiğini unutmayın. Yazar ve devreyakan.com, bu bilgilerin kötüye kullanılmasından doğabilecek yasal veya teknik sorunlardan sorumlu tutulamaz.

Ağ Trafiği İzleme Neden Önemlidir?

IoT cihazları, genellikle hassas verileri internet üzerinden iletir. Ancak, bu iletim sırasında:

  1. Veriler açık bir şekilde gönderiliyor olabilir.
  2. Cihazlar, saldırganlar tarafından hedef alınabilir.
  3. Hangi verilerin, hangi sunuculara gittiği fark edilmeyebilir.

ESP32’nin ağ trafiğini izleyerek şu bilgilere erişebilirsiniz:

  • Cihazın hangi sunuculara bağlandığı,
  • Hangi protokolleri kullandığı,
  • Gönderilen veya alınan veri paketlerinin içeriği.

Bu bilgiler, güvenlik açıklarını tespit etmek ve saldırılara karşı önlemler almak için kullanılır.


ESP32’nin Ağ Trafiği Nasıl İzlenir?

1. ESP32’nin Ağ Trafiğini İzlemek için Gerekli Araçlar

ESP32 ağ trafiğini izlemek için şu araçlara ihtiyacınız var:

  • Wireshark: Ağ trafiğini analiz etmek için en popüler araçlardan biridir.
  • Linux Dağıtımı: Wireshark gibi araçları çalıştırmak için güçlü bir işletim sistemi.
  • ESP32 Wi-Fi Özelliği: Cihazı bir erişim noktası olarak kullanabilirsiniz.
  • Router (Yönlendirici): Trafiği takip etmek için router’ın log ve analiz özelliklerini kullanabilirsiniz.

2. Wireshark ile Ağ Trafiği Yakalama

Wireshark, ağ trafiğini analiz etmek için güçlü bir araçtır. ESP32 ağ trafiğini izlemek için şu adımları izleyebilirsiniz:

Öncelikle bir linux dağıtımını mevcut bilgisayarınıza ya da sanal bir bilgisayara(virtualbox) kurmanız gerekmektedir. Kurulum adımları aşağıdaki gibidir;

ESP32 Ağ Trafiği İzleme
ESP32 Ağ Trafiği İzleme – Wireshark Örnek Ekran Görüntüsü
  1. ESP32’yi bir Wi-Fi ağına bağlayın: ESP32’nin bir istemci veya erişim noktası olarak çalıştığından emin olun.
  2. Ağ Arayüzünü Tanımlayın: Linux üzerinde, ifconfig veya ip addr komutları ile ağ arayüzünüzü bulun.
  3. Wireshark ile Trafik Kaydedin: Wireshark’ı açarak doğru ağ arayüzünü seçin ve “Capture” butonuna tıklayın. Kullandığınız arayüzü Wireshark arayüzünden görebilirsiniz.
IoT Siber Güvenliği: ESP32 Ağ Trafiği İzleme esp32 ağ
  1. Filtreleme: Yalnızca ESP32’ye ait trafiği görmek için IP adresine veya MAC adresine göre filtre uygulayın.

…using this filter: kısmında DNS, HTTP, TLS, MQTT gibi filtrelemeleri yapabilirsiniz.

3. ESP32 Trafiğinin İncelenmesi

Wireshark üzerinde ESP32 ağ trafiğini incelediğinizde şunları analiz edebilirsiniz:

  • DNS istekleri: Cihazın hangi domain’lere bağlandığını öğrenebilirsiniz. DNS isteklerini filtrelemek için dns and ip.addr== ESP32 IP Adresi
DNS Wireshark
  • HTTP veya HTTPS trafiği: Verilerin şifrelenip şifrelenmediğini kontrol edebilirsiniz. HTTP isteklerini filtrelemek için http, HTTPS isteklerini filtrelemek için tls kullanabilirsiniz.
  • MQTT veya CoAP gibi IoT protokolleri: Projenizin kullandığı özel protokolleri analiz edebilirsiniz. MQTT isteklerini filtrelemek için MQTT anahtarını kullanabilirsiniz.
mqtt wireshark

ESP32’nin Hazırlanması

Öncelikle mevcut bir IoT projenizi teste tabii tutabilirsiniz, ya da paketlerin nasıl çalıştığını anlamak için ESP32 için hazırladığımız web arayüzündeki butonlara tıkladığında, MQTT mesajları, DNS istekleri ve HTTP/HTTPS protokolleri tetikleyebilirsiniz. Aynı zamanda seri ekran kısmından çıktıları görebilirsiniz.

MQTT için gerekli olan “PubSubClient” kütüphanesine buradan ulaşabilirsiniz.

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.");
  }
}

Arayüz ve Seri Ekran’ın Görüntüleri

Kodu yükledikten sonra kurduğunuz kablosuz ağa ESP32 bağlanıp DHCP tarafından bir ip alacaktır, bu ip adresine modem/router/switch ya da farklı bir katmandan ulaşabilirsiniz, ya da doğrudan seri ekrandan ulaşabilirsiniz;

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

ESP32 cihazımız ip adresi aldığına göre, artık web arayüzünü kullanarak protokol tetiklemelerini başlayabiliriz;

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

Gönderilen istekleri paralel olarak seri ekrandan da takip edebilir ya da doğrudan Wireshark üzerinden takip edebilirsiniz;

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

ESP32 Ağ Trafiği İzlerken Dikkat Edilmesi Gerekenler

  1. Veri Şifrelemesi:
    Wireshark gibi araçlar, HTTPS trafiği şifrelenmiş olduğu için verinin içeriğini gösteremez. Ancak, ESP32 üzerinde TLS/SSL kullanılmadığı durumlarda veriler düz metin olarak görülebilir.
  2. Yasal ve Etik Kullanım:
    Ağ trafiği izlemek, yalnızca kendi cihazlarınız üzerinde yapılmalıdır. Aksi takdirde, yasal sorunlarla karşılaşabilirsiniz.
  3. Performans Etkisi:
    Ağ trafiği izleme işlemleri, özellikle yoğun ağ kullanımında ESP32’nin performansını etkileyebilir.

ESP32 Trafik İzlemenin IoT Güvenliğine Katkıları

ESP32 ağ trafiğini izleyerek şu güvenlik önlemlerini alabilirsiniz:

  • Varsayılan şifreleri tespit ederek değiştirme: Güvenliği artırır.
  • Yetkisiz veri transferlerini tespit etme: ESP32’nin yalnızca güvenilir sunuculara bağlandığından emin olun.
  • Protokol güvenliğini kontrol etme: Örneğin, MQTT kullanıyorsanız, TLS ile şifrelenip şifrelenmediğini analiz edin.

Sonuç:

ESP32 ağ trafiğini izlemek, yalnızca bir cihazın güvenliğini artırmakla kalmaz, aynı zamanda IoT projelerinizin genel güvenliğini güçlendirir. Wireshark gibi araçlarla bu analizleri yaparak, potansiyel riskleri tespit edebilir ve IoT cihazlarınızı daha güvenli hale getirebilirsiniz.

Bir sonraki yazıda, ESP32 üzerinden DNS sızıntılarının nasıl analiz edileceğini ve bu sorunun nasıl çözülebileceğini ele alacağız.

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.