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

firmware-analysis

Akıllı Cihazların Aptal Şifreleri: IoT Dünyasında Firmware’den Sızmak

IoT cihazlarının zayıf noktalarını, firmware analizinden fiziksel portlara kadar teknik bir derinlikle ele alıyor ve bu cihazların neden 'güvenlik' kelimesinden uzak olduğunu konuşuyoruz.

Sedat Özdemir
· 3 dk okuma

nmap -p 23,80,443,8080 127.0.0.1/24 çıktısında Telnet'in açık olduğunu ve varsayılan root:root kombinasyonunun kabul edildiğini gördüğün o milisaniye, cihazın mülkiyeti artık üreticinin değil, senin elindedir. IoT dünyasında 'güvenlik' genelde ürünün kutusundaki şık bir logodan ibaret.

Selam arkadaşlar, bugün testCompany tarafında üzerinde çalıştığımız bir IoT güvenlik senaryosundan ve sahadaki acı gerçeklerden bahsedeceğiz. Akıllı ampullerden endüstriyel gateway'lere kadar her şeyin birbirine bağlandığı bu ekosistemde, saldırı yüzeyi sadece bir web arayüzünden ibaret değil. İşin içine donanım, firmware ve egzotik protokoller girdiğinde işler gerçekten 'geek' bir hal alıyor.

Fiziksel Katman: UART ve JTAG Sürprizi

Bir cihazı kutusundan çıkardığında Red Teamer olarak ilk baktığımız yer RJ45 portu değil, cihazın içindeki o gizli pinlerdir. Genelde PCB (Baskılı Devre Kartı) üzerinde dörtlü veya beşli yan yana dizilmiş pinler görürsün. İşte orası UART (Universal Asynchronous Receiver-Transmitter) portudur. Eğer üretici 'security by obscurity' (gizlilik yoluyla güvenlik) hatasına düştüyse, buraya bir USB-to-TTL dönüştürücü ile bağlandığında karşına direkt bir root shell çıkabilir.

# UART üzerinden seri bağlantı örneği (Defanged)
screen /dev/ttyUSB0 115200

Bağlandığında boot loglarını izlemek, kernel'in hangi parametrelerle başladığını görmek ve hatta init sürecine müdahale etmek paha biçilemez. Eğer shell direkt gelmiyorsa, bootloader (u-boot gibi) aşamasında bir kesme yaparak çevre birimlerine erişmek çoğu zaman çocuk oyuncağı. JTAG ise işin daha derin boyutu; işlemcinin register'larına kadar inip çalışma zamanında memory dump almaktan bahsediyoruz.

Firmware Analizi: Samanlıkta İğne Aramak

Cihazın firmware'ini ya web sitesinden indirirsin ya da UART/JTAG üzerinden dump edersin. Elimizi kirletme vakti geldiğinde ilk durağımız her zaman binwalk olur.

# Firmware içindeki dosya sistemini ayıklama
binwalk -e firmware_image.bin

Binwalk bize bir SquashFS veya JFFS2 dosya sistemi veriyorsa, bayram havası başlar. İçerideki /etc/shadow dosyasını çekip hash'leri kırmaya çalışmak klasik bir yöntemdir ama asıl hazine /etc/init.d/ altındaki script'lerde veya özel binary'lerde saklıdır.

Örneğin, testCompany laboratuvarında incelediğimiz bir akıllı kamera projesinde, binary içindeki hardcoded bir API anahtarının tüm bulut altyapısına erişim sağladığını gördük. Bu tarz 'hardcoded credentials' hataları, IoT dünyasının kronik hastalığıdır.

# Pseudo-code: Firmware içinde hardcoded secret arama scripti
import os

def scan_secrets(directory):
    keywords = ["API_KEY", "SECRET", "PASSWORD", "AWS_ACCESS"]
    for root, dirs, files in os.walk(directory):
        for file in files:
            with open(os.path.join(root, file), 'rb') as f:
                content = f.read()
                for key in keywords:
                    if key.encode() in content:
                        print(f"[!] Potansiyel sızıntı: {file} -> {key}")

# scan_secrets('./extracted_firmware')

Protokollerin Karanlık Yüzü: MQTT ve CoAP

IoT cihazları genelde HTTP kullanmaz; düşük güç tüketimi için MQTT veya CoAP gibi protokolleri tercih ederler. MQTT, bir 'Publish/Subscribe' modelidir. Eğer bir broker (sunucu) şifresiz veya zayıf bir kimlik doğrulama ile dış dünyaya açıksa, saldırgan tüm cihazların trafiğini dinleyebilir.

# MQTT trafiğine sızma (Defanged example.com)
mosquitto_sub -h example.com -t '#' -v

Yukarıdaki komut, o broker üzerindeki tüm 'topic'leri (başlıkları) dinler. Kapı kilitlerinden gelen 'unlock' komutlarını veya termostat verilerini canlı izlediğini düşün. Daha kötüsü, saldırgan aynı kanaldan sahte bir update paketi yayınlayarak cihazların firmware'ini bozabilir veya kendine bir backdoor açabilir.

Savunma ve Sertleştirme (Hardening)

Peki, bu kadar açık varken ne yapmalı? testCompany olarak müşterilerimize veya geliştiricilere her zaman şu üçlü saç ayağını öneriyoruz:

  1. Güvenli Önyükleme (Secure Boot): Cihaz, sadece üreticinin dijital imzasıyla imzalanmış firmware'i çalıştırmalıdır. Bu, UART üzerinden bile olsa zararlı kodun sisteme dahil edilmesini engeller.
  2. Debug Portlarını Fiziksel Olarak Kapatmak: Üretim bandından çıkan son üründe UART, JTAG gibi arayüzlerin pinleri fiziksel olarak sökülmeli veya yazılımsal olarak devre dışı bırakılmalıdır.
  3. Taşıma Katmanı Güvenliği (TLS): MQTT, HTTP veya CoAP fark etmeksizin, her türlü veri alışverişi TLS 1.2/1.3 ile şifrelenmelidir. 'Hafif cihaz, şifreleme yapamaz' argümanı artık geçerli değil; modern mikrodenetleyicilerde donanımsal kripto hızlandırıcılar var.

Son Söz Yerine

IoT güvenliği, sadece bir yazılım meselesi değil; donanım, firmware ve network'ün iç içe geçtiği bir disiplin. Eğer bir akıllı cihaz tasarlıyorsan veya kurumuna bu cihazlardan alıyorsan, 'bu sadece bir ampul' diye düşünme. O ampul, içerideki ana network'e giden en zayıf halka olabilir.

Bir sonraki yazıda, ARM mimarisinde buffer overflow saldırılarını ve IoT özelindeki exploit geliştirme süreçlerini konuşuruz. O zamana kadar, portlarınızı kapalı, firmware'lerinizi güncel tutun.

İlgili yazılar