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.
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:
- Veriler açık bir şekilde gönderiliyor olabilir.
- Cihazlar, saldırganlar tarafından hedef alınabilir.
- 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’yi bir Wi-Fi ağına bağlayın: ESP32’nin bir istemci veya erişim noktası olarak çalıştığından emin olun.
- Ağ Arayüzünü Tanımlayın: Linux üzerinde,
ifconfig
veyaip addr
komutları ile ağ arayüzünüzü bulun. - 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.
- 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
- 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.
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;
ESP32 cihazımız ip adresi aldığına göre, artık web arayüzünü kullanarak protokol tetiklemelerini başlayabiliriz;
Gönderilen istekleri paralel olarak seri ekrandan da takip edebilir ya da doğrudan Wireshark üzerinden takip edebilirsiniz;
ESP32 Ağ Trafiği İzlerken Dikkat Edilmesi Gerekenler
- 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. - 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. - 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.