İçeriğe geç
Sedat Özdemir
Yazılar

cybersecurity

Akıllı Cihazların Aptalca Hataları: IoT Dünyasında Labirentte Kaybolmak

Test labındaki o 'akıllı' kahve makinesi neden iç ağdaki veritabanı sunucusuna port scan yapıyordu? IoT güvenliğinin karanlık dehlizlerine dalıyoruz.

Sedat Özdemir
· 4 dk okuma

Saat gece 03:24. Terminal ekranındaki yeşil satırlar o kadar hızlı akıyor ki, gözlerim artık odaklanmakta zorlanıyor. testCompany bünyesindeki lab ortamında her şeyin yolunda olduğunu sanırken, SIEM üzerinden düşen bir 'anomalous internal traffic' uyarısıyla koltuğumdan fırladım. İşin garibi neydi biliyor musun? Trafiğin kaynağı bir sunucu ya da bir developer workstation'ı değildi. Mutfaktaki o, üzerinde dokunmatik ekranı olan 'akıllı' kahve makinesiydi. Bizim kahve makinesi, içerideki production veritabanına nmap benzeri paketler gönderiyordu. İşte o an anladım; IoT (Internet of Things) dünyası, aslında güvenliğin unutulduğu bir vahşi batıdan farksızdı.

Oyuncak Değil, Truva Atı

IoT cihazları çoğunlukla 'çalışsın da gerisi mühim değil' mantığıyla üretiliyor. İçerisine kırpılmış bir Linux çekirdeği (genelde BusyBox), üzerine de alelacele yazılmış, bolca yetki hatası barındıran bir web arayüzü ekleyip piyasaya sürüyorlar. Bizim kahve makinesi vakasında da durum farklı değildi. Cihazın firmware'ini kurcaladığımda, root şifresinin 12345 olduğunu ve SSH'ın dış dünyaya açık kaldığını gördüm. Saldırgan (ki bu senaryoda bendim), cihazın içine sızdıktan sonra onu bir 'pivot point' olarak kullanıp ağın geri kalanına sızmaya çalışıyordu.

IoT cihazlarındaki en büyük problem, bu cihazların 'kurumsal ağın bir parçası' olarak görülmemesi. Çoğu zaman birer oyuncak muamelesi görüyorlar. Ama o oyuncak, senin Domain Controller'ına giden yolu açan ilk anahtar olabilir.

Firmware Analizi: Perdenin Arkası

Bir IoT cihazını hacklemek istiyorsan, ilk durağın genelde üreticinin sitesindeki 'Download Firmware' sayfasıdır. Eğer şanslıysan (ki genelde öyle olur), firmware şifrelenmemiştir. binwalk ile o dosyayı parçaladığında karşına çıkan manzara genelde içler acısıdır.

Örneğin, standart bir IoT web arayüzünde şöyle bir zafiyetle karşılaşmak çok olasıdır:

# Zararsızlaştırılmış (Defanged) Örnek: IoT Cihazı Command Injection
# Cihazın ping testi arayüzünü taklit eden bir request

POST /api/v1/network_test HTTP/1.1
Host: 127.0.0.1
Content-Type: application/json

{
  "target_ip": "127.0.0.1; whoami; cat /etc/shadow"
}

Yazılımcı dostumuz, kullanıcıdan gelen target_ip değerini doğrudan sistem komutuna (ping -c 4 $target_ip) gömdüğü için, biz noktalı virgül ile kendi komutumuzu ekleyebiliyoruz. Sonuç? Cihaz üzerinde tam yetki.

Donanım Seviyesinde Sızma: UART ve JTAG

Her şey yazılımsal değil elbet. Bazen cihazın kasasını açıp 'kalbine' inmek gerekir. PCB (Baskılı Devre Kartı) üzerindeki o küçük pinler var ya? Hah, işte onlar bizim altın madenimiz. UART (Universal Asynchronous Receiver-Transmitter) pinlerini bulup bir USB-to-TTL dönüştürücü ile bağlandığında, cihazın boot sürecini izleyebilir, hatta bazen doğrudan bir root shell ile karşılaşabilirsin.

[MOCK CONSOLE OUTPUT]
U-Boot 2021.04 (Oct 10 2023 - 12:00:00)
DRAM:  128 MiB
Relocation Offset is: 07f35000
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0 
# _

Burada 'autoboot' sürecini durdurup bootargs değiştirilerek cihazın korumaları bypass edilebilir. Eğer üretici JTAG portunu kapatmadıysa, doğrudan işlemcinin hafızasına erişip 'runtime' sırasında şifreleri çekmek bile mümkün. Donanım güvenliği, yazılımdan çok daha karmaşık ama bir o kadar da keyifli bir alan.

Defans Hattı: Bu Kaosu Nasıl Durdururuz?

"Tamam Sedat, her şey patlıyor, ne yapalım?" dediğini duyar gibiyim. Aslında çözümler çok radikal değil ama disiplin gerektiriyor.

  1. Network Segmentation (Ağ Segmentasyonu): En temel kural. Akıllı ampulün, senin finans departmanındaki PC'lerle aynı VLAN'da ne işi var? IoT cihazlarını tamamen izole bir ağa (Guest Network veya IoT-Specific VLAN) hapsedeceksin. Bu cihazlar sadece kendi bulut sunucularıyla konuşmalı, senin iç ağındaki sunuculara selam bile vermemeli.

  2. MACE (Mutual Authentication): Sadece cihazın sunucuya güvenmesi yetmez, sunucunun da cihaza güvenmesi lazım. mTLS (mutual TLS) kullanarak her cihazın kendine has bir sertifikası olmasını sağlamak, 'credential stuffing' saldırılarının önüne geçer.

  3. Default Credential Felaketi: Artık yıl 2024 (veya sonrası), hala admin/admin şifresiyle çıkan cihazlar var. Eğer bir cihazı kuruyorsan, ilk işin o şifreyi değiştirmek (hatta mümkünse SSH'ı kapatmak) olmalı.

  4. Firmware Signing: Yazılımcı arkadaşlara sesleniyorum; cihazlarınıza yüklenen update paketlerini mutlaka dijital olarak imzalayın. Aksi takdirde, saldırganın (veya benim) araya girip 'sahte' bir update ile cihazı bir botnete çevirmesi sadece birkaç dakikasını alır.

Hardening Örneği (Pseudo-code)

Cihazın web servislerinde kullanıcıdan gelen veriyi nasıl işlemen gerektiğine dair küçük bir güvenli kod örneği bırakıyorum. Eski usul system() çağrılarından kaçınmak hayat kurtarır.

# GÜVENLİ YAKLAŞIM (Defanged/Pseudo)
import subprocess
import shlex

def secure_ping(ip_address):
    # Gelen inputu whitelist kontrolünden geçir
    if not is_valid_ip(ip_address):
        return "Invalid IP"
    
    # Kabuk (shell) kullanmadan, argümanları liste olarak gönder
    # Bu sayede command injection ihtimalini ortadan kaldırıyoruz
    try:
        result = subprocess.run(["/bin/ping", "-c", "4", ip_address], 
                                capture_output=True, 
                                text=True, 
                                timeout=10,
                                shell=False) # KRİTİK: shell=False olmalı
        return result.stdout
    except Exception as e:
        return str(e)

Kapanışta Birkaç Kelam

IoT güvenliği, sadece teknik bir problem değil, aynı zamanda bir 'sorumluluk' meselesi. Evindeki akıllı süpürge veya ofisindeki akıllı termostat, sadece konforunu değil, dijital varlıklarını da temsil ediyor. Bir gün ofise geldiğinde tüm ekranlarda bir fidye yazılımı notu görmek istemiyorsan, o 'küçük ve önemsiz' görünen cihazlara bir de bu gözle bakmanı öneririm.

Sahada gördüğüm en büyük hata, güvenliği bir 'eklenti' (plugin) sanmak. Güvenlik bir süreçtir, bir yaşam biçimidir. Özellikle IoT gibi kontrolün zor olduğu alanlarda, 'Assume Breach' (Sızıldığını Varsay) mantığıyla hareket etmek seni her zaman bir adım önde tutar.

Bir sonraki teknik krizde görüşmek üzere, terminalinize zeval gelmesin.

İlgili yazılar