Selam ekip, bugün biraz damara basacağız. Siber güvenlik dünyasında herkesin dilinde bir IoT (Internet of Things) türküsü dönüp duruyor. Ama gelin dürüst olalım; çoğunuzun yaptığı 'güvenlik' testi, Shodan'a girip port:23 veya product:camera yazıp çıkan sonuçlara bakıp 'Vay canına, dünya ne kadar güvensiz' demekten öteye geçmiyor. Eğer IoT güvenliğini sadece internete açık cihazları taramak sanıyorsanız, üzgünüm ama sadece buzdağının üzerindeki martıları sayıyorsunuz. Asıl canavar suyun altında ve o canavarın adı: 'Gömülü Güvensizlik'.
Shodan Güvenlik Aracı Değildir, Sadece Bir İndekstir
Sektörde bir hastalık var; 'X aracını kullanıyorum, o halde güvendeyim' yanılgısı. Özellikle IoT tarafında Shodan, Censys veya ZoomEye gibi araçları kutsallaştırmayı bırakın. Bu araçlar size kapının açık olup olmadığını söyler, ama kapının arkasındaki kilidin neden plastik dondurma çubuğundan yapıldığını söylemez. Prod ortamında sadece bu araçlara güvenerek bir savunma stratejisi geliştirmek tam anlamıyla delilik.
Gerçek bir Red Teamer gibi düşünelim: Hedefimizdeki o 'akıllı' endüstriyel sensör veya ofisteki kahve makinesi internete açık olmayabilir. Peki, bu onu güvenli mi kılar? Tabii ki hayır. İç ağa bir şekilde (phishing, fiziksel erişim, başka bir zafiyet) sızdığımda, o 'sessiz ve derinden' çalışan IoT cihazı benim için en mükemmel 'lateral movement' (yanal hareket) sıçrama tahtasıdır.
Firmware: Kutunun İçindeki Cesetler
IoT güvenliğinde asıl aksiyon firmware analizinde başlar. Bir cihazın web arayüzünde 'admin/admin' denemek okul öncesi aktivitesidir. Biz yetişkinler, üreticinin sitesinden o .bin dosyasını indirir, karnını yarar ve içinde neler sakladığına bakarız.
Çoğu IoT üreticisi, 'kimse buraya bakmaz' mantığıyla hareket ediyor. Firmware'in içinde hardcoded (statik) şifreler, unutulmuş SSH anahtarları ve hatta geliştiricinin o meşhur 'test_user' hesabı öylece duruyor.
Örneğin, tipik bir firmware analiz sürecinde ilk adımımız her zaman binwalk olur.
# Firmware içindeki dosya sistemini ayıklayalım (Zararsızlaştırılmış örnek)
# Dosya: test_device_v1.0.bin
binwalk -e test_device_v1.0.bin
# Çıktıda squashfs, jffs2 gibi dosya sistemleri gördüğümüzde
# aslında cihazın işletim sistemine 'merhaba' demiş oluyoruz.
İçeri girdiğimizde ne mi arıyoruz? Basit bir grep komutu bile neler anlatır:
grep -ri "password" ./extracted_firmware
grep -ri "key" ./extracted_firmware
Burada karşınıza çıkan root:x:0:0:root:/root:/bin/sh satırı ve yanındaki o zayıf MD5 hash'i, aslında tüm o 'gelişmiş firewall' yatırımlarınızın nasıl boşa gittiğinin kanıtıdır.
MQTT: IoT Dünyasının Başıboş Postacısı
Bir de protokol seviyesindeki facialar var. MQTT (Message Queuing Telemetry Transport), IoT dünyasının can damarıdır. Hafiftir, hızlıdır ama 'default' haliyle tam bir felakettir. Çoğu kurulumda authentication (kimlik doğrulama) bile yoktur.
Hayal edin: testCompany bünyesinde tüm iklimlendirme sistemi MQTT üzerinden haberleşiyor. Bir saldırgan olarak ağa dahil olduğumda, sadece 'topic'leri dinleyerek (subscribe) tüm fabrikanın veya ofisin nabzını tutabilirim.
# MQTT Topic Dinleme (Pseudo-code / Defanged)
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Bağlandık! Durum kodu: " + str(rc))
# Her şeyi dinle (wildcard)
client.subscribe("#")
def on_message(client, userdata, msg):
print(f"Konu: {msg.topic} | Mesaj: {msg.payload.decode()}")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
# Yerel ağdaki broker'a bağlanalım
client.connect("127.0.0.1", 1883, 60)
client.loop_forever()
Eğer bu kod parçası ekranınıza veri yağdırıyorsa, geçmiş olsun. Sadece izlemekle kalmaz, client.publish("fabrika/sicaklik/set", "99") diyerek odayı fırına da çevirebilirim. Güvenlik nerede? Yok.
Savunma: Sadece Yama Yapmak Yetmez
'Peki Sedat, ne yapalım? Akıllı cihazları çöpe mi atalım?' dediğinizi duyar gibiyim. Hayır, ama onları 'evcil hayvan' gibi beslemeyi bırakıp 'vahşi hayvan' muamelesi yapmanız lazım.
Network Segmentation (Ağ Bölümleme): IoT cihazlarını ana ağınızdan (kurumsal verilerin olduğu yer) cerrahi bir titizlikle ayırın. Onlar için ayrı bir VLAN, ayrı bir dünya kurun. Akıllı ampul, domain controller'a ping atamamalı arkadaşım! Bu kadar basit.
Zero Trust for Things: Cihazın kimliğine güvenmeyin. 'Bu kamera her gün bu IP'ye veri gönderiyor, o zaman güvenlidir' demeyin. Eğer o kamera birdenbire dış dünyada bir
example.comadresine 1 GB veri yüklemeye başlarsa, o bağlantıyı otomatik kesecek bir yapınız olmalı.Firmware Hardening: Eğer bir üreticiyseniz veya cihaz alıyorsanız, firmware güncellemelerinin 'signed' (imzalı) olduğundan emin olun. Saldırganın cihaz üzerine kendi modifiye edilmiş firmware'ini yüklemesi (firmware hijacking) en klasik ama en etkili yöntemlerden biridir.
Default Credentials Katliamı: İlk kurulumda şifre değiştirmeyi zorunlu kılmayan hiçbir cihazı prod ortamına sokmayın. 'Admin/1234' ile çalışan bir cihaz, aslında bir cihaz değil, bir güvenlik açığıdır.
Sahadan Bir Not
Bir keresinde testCompany benzeri bir yapıda, çok gelişmiş bir firewall arkasında duran bir 'akıllı tahta' üzerinden tüm toplantı odasının sesini dinleyebildiğimizi fark etmiştik. Sebebi neydi biliyor musunuz? Cihazın üzerindeki sesli komut özelliğinin, yerel ağdan gelen her türlü UDP paketine 'root' yetkisiyle cevap vermesi. Ne Shodan bunu görürdü, ne de standart bir zafiyet tarayıcı. Sadece merak ve 'bu kutunun içinde ne var?' sorusu bizi oraya götürdü.
IoT güvenliği, dashboard izleyerek değil, kabloyla cihaza bağlanıp, sinyalleri analiz edip, protokollerin açıklarını bularak yapılır. 'Bağladım, çalışıyor' dediğiniz an, aslında 'Sızdılar, bekliyorlar' dediğiniz andır.
Kendinize iyi bakın, loglarınıza daha da iyi bakın. Bir sonraki teknik analizde görüşmek üzere.
