Firmware Analizine Giriş: Cihazın İçindeki Gizli Bilgi
Firmware nedir, hangi katmanlardan oluşur ve analiz için temel araç seti
Elinizdeki router, IP kamera ya da akıllı priz, siz fişe takmadan önce bile bir yazılım çalıştırıyor: firmware. Bu yazıda firmware'in ne olduğunu, bir cihazın hangi katmanlardan (bootloader, çekirdek, sürücüler, dosya sistemi, uygulama) oluştuğunu ve bu katmanlara bakmak için kullanılan temel araçları (Binwalk, FMK, QEMU) anlatıyoruz. Bu, firmware analizi ve donanım güvenliği serisinin ilk adımı.
Giriş
Evindeki router’ı bir düşün. Fişe takıyorsun, birkaç saniye sonra ışıkları yanıyor, WiFi yayını başlıyor. Sana hiç “işletim sistemi yükleniyor” gibi bir ekran göstermiyor, hiçbir şey sormuyor. Sadece çalışıyor.
Peki bu birkaç saniyede ne oluyor? Cihaz nasıl “ben kimim, ne yapmam gerekiyor” bilgisine sahip oluyor? Cevap tek bir kelime: firmware.
Bu yazıda firmware’in tam olarak ne olduğunu, bir cihazın içinde hangi katmanlardan örüldüğünü ve bu katmanlara nasıl bakabileceğimizi — hangi araçlarla, ne şekilde — adım adım göreceğiz. Bu, firmware analizi ve donanım güvenliği üzerine kuracağımız serinin ilk taşı. Konu üzerine gerçek olaylardan da alıntılanacak serimize başlıyoruz.
Bir bilgisayar sistemi, donanımdan uygulamaya kadar uzanan katmanlı bir yapıya sahiptir. Süreç, en altta fiziksel bileşenleri (Hardware) ve onları ilk adımda ayağa kaldıran köprü yazılımı (Firmware/BIOS) barındıran temel katmanla başlar; sanallaştırma senaryolarında ise bu tabana opsiyonel bir Hypervisor eşlik eder. Bu donanımsal altyapının üzerinde yükselen işletim sistemi; donanım kontrolünü sağlayan sürücüler (OS Drivers), arka plan hizmetleri (OS Services) ve kullanıcı arabirimi (OS UI) ile sistem trafiğini yönetilebilir bir çalışma ortamına dönüştürür. Mimarinin üst kısmında ise veri tabanı yönetimi gibi altyapı çözümlerini sunan ara katman yazılımları (Middleware) yer alır; tüm bu yapı en tepede son kullanıcının doğrudan etkileşime girdiği ve iş mantığını yürüten Application (CRM, ERP vb.) katmanıyla bütünsel bir yazılım yığını haline gelir. Aşağıdaki katman yığını bu yapıyı özetler. Biz bu aşamada tabii ki Firmware ile ilgileneceğiz.
Yazılım Yığını (Software Stack) — üstten alta:
Application → Uygulama katmanı (CRM, ERP vb.)
Middleware → Ara katman (ör. veritabanı uygulamaları)
OS UI → İşletim sistemi kullanıcı arabirimi
OS Services → Arka plan hizmetleri
OS Drivers → Donanım sürücüleri ve çalışma zamanları
Hypervisor → (opsiyonel) Sanallaştırma katmanı
Firmware (BIOS) → Donanımı ilk ayağa kaldıran köprü yazılım
Hardware → Fiziksel donanım
Firmware Nedir?
Firmware, bir donanımın çalışması için gereken, genellikle flash bellek gibi yarı kalıcı bir alanda saklanan, donanıma çok yakın çalışan yazılımdır. “Yarı kalıcı” diyoruz çünkü değiştirilebilir — bir güncelleme geldiğinde firmware de değişir — ama normal kullanımda kullanıcı onu hiç görmez, hiç dokunmaz.
Klasik bir bilgisayardaki işletim sistemiyle karıştırmamak lazım. Windows ya da Linux, donanım zaten ayaktayken üstüne kurulan bir katmandır. Firmware donanıma gömülü, sık sık güncellenmesi amaçlanmayan yazılım anlamına gelirken, software ise belirli bir donanım aygıtı için tasarlanmış yazılım anlamına gelir. Donanımı ilk ayağa kaldıran, ona “nasıl çalışacağını” söyleyen şey firmware’dir. Bir akıllı telefon ve tablette, akıllı televizyonda, yazıcıda, tarayıcıda, hatta arabanın motor kontrol ünitesinde (ECU) hep aynı mantık işler.
Firmware’in Katmanları
Firmware tek parça bir blok değildir. Bir cihazı söktüğünde ya da daha doğrusu dosyasını çıkarıp incelediğinde karşına genelde aşağıdaki 5 katman çıkar. Her biri farklı bir işi üstlenir. Ek olarak da Dosya Sistemi katmanı bulunmaktadır.
Firmware katman yığını — alttan üste:
Bootloader (Önyükleyici) → Firmware'i yükler, donanımı başlatır
OS Kernel (Çekirdek) → Kaynak yönetimi, çoklu görev
Device Drivers (Sürücüler) → Donanım soyutlama ve kontrol
Middleware (Ara Katman) → Bağlanırlık, güvenlik, protokol yığınları
Application (Uygulama) → Arayüz, algoritmalar, protokoller
Önyükleyici (Bootloader)
Cihaz fişe takıldığı an ilk uyanan şey budur. İşletim sistemi henüz yok, dosya sistemi henüz yüklenmedi; ortada sadece donanım ve onu konuşturacak bu küçük program var. Görevi basit ama kritik: işlemciyi, belleği, depolama birimini ayağa kaldırmak ve bir sonraki katmanı (çekirdeği) belleğe yükleyip çalıştırmak. Bootloader çalışma zamanında (runtime) iken herhangi bir sorun oluştuğunda cihaz hatalı bir şekilde başlatılmış olacak veya hiç çalışmayacaktır.
Çekirdek (Kernel)
Bootloader işini bitirip çekirdeği yüklediğinde, asıl yönetim ona geçer. Çoğu modern IoT/gömülü cihaz, küçültülmüş bir Linux çekirdeği çalıştırır. Donanım sürücüleri (ağ kartı, flash bellek denetleyicisi, USB) burada yaşar; işlemler, bellek yönetimi, dosya sistemine erişim hep çekirdek üzerinden yürür.
Cihaz Sürücüleri
İşletim sistemi ile fiziksel donanımlar (sensörler, motorlar vb.) arasında bir tercüman gibi çalışır. Yukarıdaki yazılımların donanımın elektrik pinleriyle veya markasıyla uğraşmasını engeller; gelen komutları donanımın anlayacağı dile çevirerek cihazı doğrudan kontrol eder.
Dosya Sistemi
Çekirdek ayağa kalktıktan sonra bir dosya sistemi bağlanır (mount edilir). Burada cihazın “içeriği” durur: yapılandırma dosyaları, web arayüzünün kendisi, sistem servisleri, kullanıcı verileri. Gömülü cihazlarda yer kazanmak için genelde sıkıştırılmış dosya sistemleri kullanılır — SquashFS (salt okunur, çok yaygın) ve JFFS2 (yazılabilir, flash bellek için optimize) en sık rastlayacaklarınızdan.
Bir firmware analizinde en çok zaman geçireceğin katman da burasıdır — çünkü hardcoded şifreler, API anahtarları, debug script’leri, unutulmuş test araçları genelde burada saklı kalır.
Middleware Katmanı
Middleware (ara katman yazılımı), sürücüler ile son kullanıcı uygulamaları arasında bir köprü görevi gören yazılımdır. Veri akışının yönlendirilmesini ve taşınmasını sağlayan katmandır.
Uygulama Katmanı
En üstte, cihaza asıl kimliğini veren servisler durur: web yönetim paneli, API’ler, cihaza özel arka plan servisleri. Bir router’ı router yapan, bir IP kamerayı IP kamera yapan kod burasıdır.
Bu Katmanları Nasıl İnceleriz?
Firmware’in katmanlarını anlamak bir şey, onlara gerçekten bakabilmek başka bir şey. Bu serinin ilerleyen yazılarında her birini derinlemesine işleyeceğiz, ama öncelikle firmware analizine nasıl başlanmalı ve kullanılan temel araç setini şimdiden tanımaya çalışalım.
Elinizde bir IoT cihazı var ve güvenlik analizini yapabilmek için yazılımını incelemek istiyorsunuz. Peki öncelikle şu akla gelir: ben bu cihazın yazılımını nasıl bulabilirim? Bir IoT cihazının güvenlik analizine başlarken akla gelen ilk fikir, cihazın firmware (donanım yazılımı) imajını üretici firmanın web sitesinden bir .bin veya .hex dosyası olarak kolayca indirmektir. Ancak gerçek siber güvenlik senaryolarında durum hiç de böyle ilerlemez. Çoğu elektronik cihazın derlenmiş firmware sürümleri internette herkese açık bir şekilde barındırılmaz. Üretici; ticari sırların, kaynak kod mantığının ve kullanılan algoritmanın bir saldırgan veya rakip firma tarafından bilinmesini tabii ki istemez. Bunun yerine doğrudan cihaza şifreli OTA (Over-the-Air) güncellemeleri gönderirler. Bu yüzden bir güvenlik araştırmacısı firmware’i elde etmek için ya cihazın içini açıp JTAG/SWD hatları üzerinden ya da çipi fiziksel olarak sökerek (chip-off) yazılımı doğrudan flash bellekten çekmesi (firmware dumping) ya da cihazın güncelleme sırasındaki ağ trafiğini koklayarak indirme linkini yakalaması gerekir.
Ancak yazılım güncellemeleri firmanın internet adresi üzerinden erişilebiliyorsa, derlenmiş dosyaları indirerek analize başlayabilirsiniz.
Temel Araçlar
Binwalk — Bir firmware dosyasını ilk açtığında elinde genelde tek bir .bin dosyası olur. Binwalk, bu dosyanın içinde hangi dosya sistemlerinin, hangi sıkıştırma formatlarının, hangi imzaların gizlendiğini tarar ve gerekirse otomatik olarak çıkarır (extract). Firmware analizinde neredeyse herkesin ilk açtığı araçtır.
Firmware Analyzer — gömülü sistemlerin donanım yazılımlarını (firmware) otomatik analiz süzgecinden geçirerek güvenlik açıklarını, yapılandırma hatalarını ve zararlı yazılım kalıntılarını tespit eden otomasyon tabanlı bir siber güvenlik aracıdır. Büyük ölçekli IoT ve akıllı cihaz ağlarının güvenlik denetimlerinde, manuel analiz yükünü minimize etmek amacıyla tasarlanmıştır. Firmware imajlarını otomatik olarak decompile ederek dosya sistemini açar; içerisindeki zafiyet barındıran bağımlılıkları, yetkisiz erişim noktalarını ve zararlı bileşenleri tarayarak kuruma özel risk ve uyumluluk raporları hazırlar.
SecTriage — firmware dosyalarını analiz eden ve potansiyel zafiyetleri sınıflandıran bir araçtır. Bu araç, firmware güvenliğini değerlendirirken hızlı ve kapsamlı sonuçlar sağlar.
Firmware-Mod-Kit (FMK) — Binwalk’ın çıkardığı dosya sistemini düzenlemek, üzerinde değişiklik yapıp tekrar paketlemek istediğinde devreye giren bir araç seti.
QEMU — Firmware’i gerçek donanım olmadan, kendi bilgisayarında emüle etmeni sağlar. Bu sayede cihazı fiziksel olarak elinde tutmadan, web arayüzünü çalıştırıp davranışını gözlemleyebilirsin.
Bu araçların her birini, gerçek bir firmware dosyası üzerinde adım adım kullanmayı, gelecek yazılarda komut çıktılarıyla birlikte göreceğiz.
Sonuç
Firmware, donanımın ilk uyanan sesidir. İşletim sistemi henüz yokken cihaza “nasıl çalışacağını” söyleyen katman odur — kullanıcının asla görmediği, asla dokunmadığı bir yer.
Firmware tek parça değil, katmanlı bir yapıdır. Bootloader donanımı ayağa kaldırır, çekirdek donanımı yönetir, dosya sistemi cihazın “içeriğini” barındırır, uygulama katmanı ise cihaza kimliğini verir. Her katmanın kendi rolü, kendi riskleri vardır.
Asıl değerli veri çoğu zaman dosya sistemi katmanındadır. Hardcoded şifreler, API anahtarları, unutulmuş debug script’leri — bir güvenlik araştırmacısının en çok zaman geçireceği yer burasıdır.
Firmware’e her zaman üretici sitesinden kolayca ulaşılamaz. Bu da çoğu zaman firmware analizini sıradan bir “dosya indirme” işinden çıkarıp gerçek bir teknik beceri haline getirir.
Bu Seride Seni Neler Bekliyor?
Bu, firmware analizi ve donanım güvenliği serimizin ilk yazısıydı. Önümüzdeki haftalarda şu konuları işleyeceğiz:
- Firmware bir cihazdan nasıl elde edilir (UART, SPI flash okuma, OTA güncelleme dosyaları üzerinden)
- Binwalk ile statik analiz: dosya sistemini çıkarma ve inceleme
- QEMU ile dinamik analiz: firmware’i emüle etme
- Donanım üzerinde UART/JTAG arayüzlerini fiziksel olarak bulma
- Firmware’de sık rastlanan zafiyet sınıfları
- Gerçek vakalar üzerinden uçtan uca analiz (CVE incelemeleri)
Gelecek hafta bir modem markasının firmware’ini elde edip statik analizini yapacağız. Takipte kalmaya devam edin.
Kaynakça
- TechTarget. (2024). What is a software stack? Definition and architecture layers. SearchSoftwareQuality. https://www.techtarget.com/searchsoftwarequality/definition/software-stack
- Marwedel, P. (2021). Embedded System Design: Embedded Systems Foundations of Cyber-Physical Systems, and the Internet of Things (4th ed.). Springer.
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