Selamlar millet, ben Sedat. Bugün biraz can sıkacağız, biraz da o çok güvendiğimiz 'akıllı' dünyayı masaya yatıracağız. Hazırsanız, kahvenizi alın ve arkaya yaslanın.
Sektörde nereye baksam herkes bir Shodan çılgınlığına kapılmış durumda. 'Bak kanka, Shodan'dan 10.000 tane açık kamera buldum' diye övünen mi istersin, yoksa 'admin/admin' girerek dünyayı kurtardığını sanan mı... Beyler, hanımlar; gelin eğri oturalım doğru konuşalım: Shodan üzerinden IP taratıp varsayılan şifre denemek IoT güvenliği değil, sadece dijital turistliktir. Eğer prod ortamında sadece buna güveniyorsanız, geçmiş olsun; kapınızın kilidi zaten çoktan kırılmış ama haberiniz yok.
IoT dünyası dediğimiz şey, aslında 90'lı yılların vahşi batısının modern bir paketle bize sunulmuş hali. Neden mi? Çünkü maliyet düşürme hırsı, güvenlikten her zaman önce geliyor. Bir 'akıllı' tost makinesi üreten firmanın önceliği, o cihazın TLS 1.3 kullanması değil, en ucuz çiple en hızlı şekilde piyasaya çıkmasıdır. Sonuç? Süzgeçten hallice sistemler.
Firmware Analysis: Tavşanın Deliğine Giriş
Gerçek bir Red Teamer veya güvenlik araştırmacısı için Shodan sadece bir başlangıç noktasıdır. Asıl eğlence, o cihazın içindeki yazılımı (firmware) ele geçirdiğinizde başlar. Bir cihazın donanımına dokunamıyorsanız bile, üreticinin web sitesinden o .bin dosyasını indirmekle işe başlayabilirsiniz. Ama dikkat edin, her zaman 'binary' size kucağını açmaz; bazen şifrelidir (encrypted), bazen de paketlenmiştir.
Biz genelde binwalk ile işe başlarız. Eğer şanslıysak, içinde ne var ne yok dökülür:
# Firmware içindeki dosya sistemini ayıklama (Defanged example)
binwalk -e firmware_v1.0.bin
# Dosya sisteminde hassas bilgi arama
grep -r "password" ./_firmware_v1.0.bin.extracted/
grep -r "shadow" ./_firmware_v1.0.bin.extracted/
Burada bulacağınız bir etc/shadow dosyası, cihazın tüm krallığının anahtarıdır. Hash'leri kırmak (cracking) ise işin en keyifli kısmıdır. Ama bazen karşınıza öyle bir şey çıkar ki, şifre bile gerekmez: Hardcoded Backdoors. Geliştiricinin test aşamasında unuttuğu (veya bilerek bıraktığı) bir 'root' girişi...
Emülasyon ve Dinamik Analiz
Cihaz elimizde yok mu? Sorun değil. QEMU gibi araçlarla bu cihazların mimarisini (genelde ARM veya MIPS) emüle edebiliriz. testCompany bünyesinde yaptığımız laboratuvar çalışmalarında gördük ki, statik analizde kaçırdığımız birçok 'buffer overflow' zafiyeti, cihazı ayağa kaldırıp üzerine fuzzing yaptığımızda 'ben buradayım' diye bağırıyor.
Örneğin, bir HTTP server'ın gelen 'Header' bilgisini kontrol etmeden belleğe kopyaladığını düşünün. İşte size klasik bir zafiyet noktası. Aşağıdaki gibi bir mock-up payload ile bunu test edebiliriz:
# Zararsızlaştırılmış (Defanged) Fuzzing Script Taslağı
import socket
target_ip = "127.0.0.1"
target_port = 80
# 'A' karakteriyle buffer'ı zorluyoruz
payload = b"GET / HTTP/1.1\r\n"
payload += b"Host: " + b"A" * 5000 + b"\r\n\r\n"
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
s.connect((target_ip, target_port))
s.send(payload)
response = s.recv(1024)
print("[-] Yanıt alındı: ", response)
except:
print("[!] Cihaz muhtemelen crash oldu (Buffer Overflow?)")
finally:
s.close()
MQTT ve İletişim Protokollerinin Karanlık Yüzü
Sadece cihazın içi değil, dışarıyla nasıl konuştuğu da tam bir felaket senaryosu. Birçok IoT cihazı hafif olsun diye MQTT (Message Queuing Telemetry Transport) protokolünü kullanır. Peki kaç tanesi bu trafiği şifreliyor? Ya da kaç tanesi broker üzerinde yetkilendirme (authentication) istiyor?
Eğer bir saldırgan ağınıza sızdıysa ve siz MQTT trafiğini cleartext akıtıyorsanız, evinizdeki akıllı prizden fabrikadaki üretim bandına kadar her şeyi manipüle edebilir. mosquitto_sub ile ağı dinlemek, bir Red Teamer için çocuk oyuncağıdır:
# Şifresiz bir MQTT broker'ını dinleme (Defanged)
mosquitto_sub -h 127.0.0.1 -t "#" -v
Buradaki # joker karakteri (wildcard), o broker üzerinden geçen tüm mesajları ekrana dökmenizi sağlar. Isı sensöründen gelen veriler, kapı kilitlerinin durumu... Hepsi orada.
Peki Ne Yapmalı? (Defensive Mindset)
Bakın arkadaşlar, IoT cihazı alırken 'kullanım kolaylığı' (usability) her zaman güvenliği (security) döver. Ama biz güvenlikçiler olarak buna izin vermemeliyiz. İşte birkaç sahadan tecrübe önerisi:
- VLAN Ayırımı Şart: IoT cihazlarını asla ve asla ana iş ağınıza veya kişisel bilgisayarlarınızın olduğu ağa sokmayın. Onlar için izole bir 'çöplük' ağı (IoT VLAN) oluşturun. Bir ampul hacklendiğinde domain controller'ınıza gitmesin.
- Gereksiz Servisleri Kapatın: Cihazın arayüzünde 'Telnet', 'UPnP' gibi bir seçenek varsa ve kullanmıyorsanız hemen kapatın. UPnP, modeminizde otomatik delikler açan bir güvenlik kabusudur.
- Firmware Güncellemelerini Takip Edin: Evet, biliyorum sıkıcı. Ama o 'security update' boşuna gelmiyor. Üreticinin 'artık güncelleme vermeyeceğim' dediği (End of Life) cihazı ise direkt emekli edin.
- Ağ Trafiğini İzleyin: Cihazın normal davranışını öğrenin. Bir termostat neden her gün saat 3'te Rusya'daki bir IP adresine (127.0.0.1 misali) 50MB veri göndersin ki? Bu bir anomali belirtisidir.
IoT güvenliği, sadece bir kutu alıp fişe takmakla bitmiyor. O kutu artık sizin dijital ailenizin bir parçası ve her aile üyesi gibi onun da bakıma ve denetime ihtiyacı var. Shodan'da 'webcam' aratıp gülmeye devam edebilirsiniz, ama unutmayın ki başkaları da sizin cihazlarınızın başında aynı şeyi yapıyor olabilir.
Bir sonraki yazıda donanım katmanına inip JTAG ve UART üzerinden nasıl 'root' alınır ona bakacağız. O zamana kadar güvende kalın ve cihazlarınıza iyi bakın.
