İçeriğe atla
Yazılar

Bir Mikrodenetleyiciden Flash Bellek Dökümü Almak: UART, SWD, Chip-off Yöntemleri

Bir MCU’nun içindeki firmware’e ulaşmanın birden fazla yolu var — her biri farklı bir zorluk, risk ve delil kalitesi seviyesinde. Doğru sırayı bilmek işin yarısı.

3 dk okuma
Ortada flash bellekli bir MCU ve ona UART bootloader, SWD/JTAG debug portu ve chip-off yöntemleriyle ulaşan üç yolu gösteren diyagram.
Flash dökümü almanın üç yolu ve doğru sıra: en az müdahaleden en fazlasına.
İçindekiler
  1. Altın kural: en az müdahaleden başla
  2. Yöntem A — UART bootloader (en yumuşak)
  3. Yöntem B — SWD / JTAG debug portu
  4. Yöntem C — Chip-off (son çare)
  5. Şifreleme ve okuma koruması gerçeği
  6. Adli bütünlük notları
  7. Adli bilişim açısı
  8. Kapanış

Bir önceki yazıda Raspberry Pi gibi Linux tabanlı bir cihazdan imaj almayı konuştuk — orada işler görece kolaydı, çünkü çıkarılabilir bir SD kart ya da dosya sistemi vardı. Ama gömülü dünyanın büyük kısmı mikrodenetleyicilerden (MCU) oluşur: STM32, ESP32, PIC gibi, firmware’i doğrudan yonga içi flash belleğinde tutan çipler. Buradan döküm almak farklı bir oyun.

Bu yazıda bir MCU’dan flash dökümü almanın üç ana yolunu, ne zaman hangisini seçeceğini ve adli açıdan nelere dikkat edeceğini anlatıyorum.

Altın kural: en az müdahaleden başla

Adli bilişimde her fiziksel müdahale bir risktir. Bu yüzden yöntem sırası şudur: önce hiç dokunmadan (yazılımsal), sonra debug portundan, en son fiziksel sökme. Aşağıdaki üç yöntem tam da bu sırayla gidiyor.

Yöntem A — UART bootloader (en yumuşak)

Birçok MCU, fabrika çıkışında bir ROM bootloader ile gelir. Belirli pinler doğru seviyeye çekildiğinde (ör. STM32’de BOOT0), çip bu bootloader’a girer ve UART üzerinden bellek okuma/yazma komutlarını kabul eder. Bu, çoğu zaman en temiz ve en az müdahaleci yoldur.

# STM32 örneği — stm32flash aracıyla flash okuma
stm32flash -r firmware_dump.bin /dev/ttyUSB0
sha256sum firmware_dump.bin

Avantajı: fiziksel sökme yok, üretici destekli bir arayüz. Dezavantajı: bazı cihazlarda bu bootloader devre dışı bırakılmış ya da parola korumalı olabilir.

Yöntem B — SWD / JTAG debug portu

MCU’ların çoğunda geliştirme için bir debug arayüzü vardır: ARM tarafında SWD (Serial Wire Debug) ya da klasik JTAG. Bir debug probe’u (ST-Link, J-Link gibi) ile bu porta bağlanıp belleği doğrudan okuyabilirsin.

# OpenOCD ile flash okuma (örnek)
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg \
  -c "init; reset halt; dump_image dump.bin 0x08000000 0x100000; exit"

Avantajı: hızlı ve tam erişim. Dezavantajı: üreticiler bu portu okuma koruması (RDP — Readout Protection) ile kilitleyebilir. Kilit aktifse debug portu belleği okumayı reddeder; bu da bizi bir sonraki (ve en zor) yönteme iter.

Yöntem C — Chip-off (son çare)

Diğer yollar kapalıysa — bootloader devre dışı, debug portu kilitli — geriye fiziksel yol kalır: çipi anakarttan söküp özel bir okuyucuya takmak. Bu, sıcak hava istasyonu, hassas lehim işi ve okuyucu donanımı gerektiren, geri dönüşü olmayan bir işlemdir.

Chip-off adli açıdan en son başvurulan yöntemdir çünkü:

  • Geri dönüşsüzdür; cihaz genelde bir daha çalışmaz.
  • Yüksek beceri ve doğru ekipman ister; hata veriyi yok edebilir.
  • Şifreli flash’ta ham döküm işe yaramayabilir (anahtar çipin içindeyse).

Şifreleme ve okuma koruması gerçeği

Modern MCU’lar giderek daha fazla flash şifreleme ve secure boot ile geliyor. Bu durumda ham dökümü alsan bile içerik şifreli olabilir. Bu, savunma açısından iyi haber; adli açıdan ise incelemenin sınırını belirleyen kritik bir faktör. Secure boot’un gerçekte neyi koruyup neyi korumadığını serinin ayrı bir yazısında ele alıyorum.

Adli bütünlük notları

  • Hangi yöntemi kullanırsan kullan, dökümü aldıktan sonra hash al ve sakla.
  • Her adımı, kullandığın aracı ve pin bağlantılarını tutanakla — özellikle fiziksel müdahalede.
  • Mümkünse aynı modelden bir referans cihazla yöntemi önce doğrula, sonra delil cihaza uygula.

Adli bilişim açısı

Flash dökümü, gömülü adli bilişimin en somut becerisidir. Elde ettiğin ham dökümü sonra binwalk ile açar, dosya sistemini ayıklar, sabit kodlanmış sırları ararsın — bunları serinin “firmware analizi 101” ve “gömülü sır avı” yazılarında işliyorum. Ama her şey doğru dökümü, doğru yöntemle, bütünlüğü bozmadan almakla başlar.

Kapanış

Bir MCU’dan döküm almak, uygun aracı seçmekten çok doğru sırayı izlemekle ilgilidir: önce UART, sonra debug portu, en son chip-off. Her adım daha fazla erişim ama daha fazla risk demek. İyi bir gömülü adli bilişimci, mümkün olan en yumuşak yöntemle en fazla delili toplayabilendir.


Bu içerik eğitim amaçlıdır; yalnızca sahibi olduğun donanımda uygula.