Firmware Analysis
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Firmware, cihazların doğru bir şekilde çalışmasını sağlayan, donanım bileşenleri ile kullanıcıların etkileşimde bulunduğu yazılım arasında iletişimi yöneten ve kolaylaştıran temel yazılımdır. Kalıcı bellekte depolanır ve cihazın açıldığından itibaren kritik talimatlara erişmesini sağlar, bu da işletim sisteminin başlatılmasına yol açar. Firmware'i incelemek ve potansiyel olarak değiştirmek, güvenlik açıklarını belirlemede kritik bir adımdır.
Bilgi toplama, bir cihazın yapısını ve kullandığı teknolojileri anlamada kritik bir ilk adımdır. Bu süreç, aşağıdaki verilerin toplanmasını içerir:
CPU mimarisi ve çalıştığı işletim sistemi
Bootloader ayrıntıları
Donanım düzeni ve veri sayfaları
Kod tabanı metrikleri ve kaynak konumları
Harici kütüphaneler ve lisans türleri
Güncelleme geçmişleri ve düzenleyici sertifikalar
Mimari ve akış diyagramları
Güvenlik değerlendirmeleri ve belirlenen güvenlik açıkları
Bu amaçla, açık kaynak istihbarat (OSINT) araçları çok değerlidir, ayrıca mevcut açık kaynak yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analizi de önemlidir. Coverity Scan ve Semmle’nin LGTM gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar.
Firmware elde etme, her biri kendi karmaşıklık seviyesine sahip çeşitli yollarla gerçekleştirilebilir:
Kaynaktan (geliştiriciler, üreticiler) doğrudan
Verilen talimatlardan oluşturarak
Resmi destek sitelerinden indirerek
Barındırılan firmware dosyalarını bulmak için Google dork sorgularını kullanarak
S3Scanner gibi araçlarla bulut depolama'ya doğrudan erişerek
Man-in-the-middle teknikleriyle güncellemeleri yakalayarak
UART, JTAG veya PICit gibi bağlantılar aracılığıyla cihazdan çıkararak
Cihaz iletişimi içinde güncelleme taleplerini sniffing yaparak
Hardcoded güncelleme uç noktalarını tanımlayıp kullanarak
Bootloader veya ağdan dumping yaparak
Tüm bunlar başarısız olursa, uygun donanım araçları kullanarak depolama çipini çıkartıp okuyarak
Artık firmware'e sahip olduğunuzda, ona nasıl yaklaşacağınızı bilmek için bilgi çıkarmanız gerekir. Bunun için kullanabileceğiniz farklı araçlar:
Eğer bu araçlarla pek bir şey bulamazsanız, görüntünün entropisini binwalk -E <bin>
ile kontrol edin, düşük entropi varsa, muhtemelen şifrelenmemiştir. Yüksek entropi varsa, muhtemelen şifrelenmiştir (ya da bir şekilde sıkıştırılmıştır).
Ayrıca, bu araçları firmware içinde gömülü dosyaları çıkarmak için kullanabilirsiniz:
File/Data Carving & Recovery ToolsYa da dosyayı incelemek için binvis.io (code) kullanabilirsiniz.
Önceki yorumlanan araçlarla binwalk -ev <bin>
kullanarak dosya sistemini çıkarmış olmalısınız.
Binwalk genellikle bunu dosya sistemi türüyle adlandırılan bir klasörün içine çıkarır, bu genellikle aşağıdakilerden biridir: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Bazen, binwalk dosya sisteminin sihirli baytını imzalarında bulamayabilir. Bu durumlarda, binwalk kullanarak dosya sisteminin ofsetini bulun ve sıkıştırılmış dosya sistemini ikili dosyadan çıkarın ve aşağıdaki adımları kullanarak dosya sistemini türüne göre manuel olarak çıkarın.
Aşağıdaki dd komutunu çalıştırarak Squashfs dosya sistemini çıkarın.
Alternatif olarak, aşağıdaki komut da çalıştırılabilir.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Squashfs için (yukarıdaki örnekte kullanılmıştır)
$ unsquashfs dir.squashfs
Dosyalar daha sonra "squashfs-root
" dizininde olacaktır.
CPIO arşiv dosyaları
$ cpio -ivd --no-absolute-filenames -F <bin>
JFFS2 dosya sistemleri için
$ jefferson rootfsfile.jffs2
NAND flash ile UBIFS dosya sistemleri için
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Firmware elde edildikten sonra, yapısını ve potansiyel zayıflıklarını anlamak için parçalanması önemlidir. Bu süreç, firmware görüntüsünden değerli verileri analiz etmek ve çıkarmak için çeşitli araçların kullanılmasını içerir.
İlk inceleme için bir dizi komut sağlanmıştır ( <bin>
olarak adlandırılır). Bu komutlar, dosya türlerini tanımlamaya, dizeleri çıkarmaya, ikili verileri analiz etmeye ve bölüm ve dosya sistemi ayrıntılarını anlamaya yardımcı olur:
Görüntünün şifreleme durumunu değerlendirmek için, entropy binwalk -E <bin>
ile kontrol edilir. Düşük entropi, şifreleme eksikliğini gösterirken, yüksek entropi olası şifreleme veya sıkıştırmayı belirtir.
Gömülü dosyaları çıkarmak için, file-data-carving-recovery-tools belgeleri ve dosya incelemesi için binvis.io gibi araçlar ve kaynaklar önerilir.
binwalk -ev <bin>
kullanarak, genellikle dosya sistemi çıkarılabilir ve bu genellikle dosya sistemi türüyle adlandırılan bir dizine yerleştirilir (örneğin, squashfs, ubifs). Ancak, binwalk sihirli baytların eksikliği nedeniyle dosya sistemi türünü tanımadığında, manuel çıkarma gereklidir. Bu, binwalk
kullanarak dosya sisteminin ofsetini bulmayı ve ardından dosya sistemini çıkarmak için dd
komutunu kullanmayı içerir:
Sonrasında, dosya sistemi türüne (örneğin, squashfs, cpio, jffs2, ubifs) bağlı olarak, içerikleri manuel olarak çıkarmak için farklı komutlar kullanılır.
Dosya sistemi çıkarıldıktan sonra, güvenlik açıkları arayışına başlanır. Güvensiz ağ daemon'larına, hardcoded kimlik bilgilerine, API uç noktalarına, güncelleme sunucusu işlevlerine, derlenmemiş koda, başlangıç betiklerine ve çevrimdışı analiz için derlenmiş ikililere dikkat edilir.
Ana konumlar ve incelemesi gereken öğeler şunlardır:
Kullanıcı kimlik bilgileri için etc/shadow ve etc/passwd
etc/ssl içindeki SSL sertifikaları ve anahtarları
Potansiyel güvenlik açıkları için yapılandırma ve betik dosyaları
Daha fazla analiz için gömülü ikililer
Yaygın IoT cihazı web sunucuları ve ikilileri
Dosya sistemi içindeki hassas bilgileri ve güvenlik açıklarını ortaya çıkarmaya yardımcı olan birkaç araç vardır:
LinPEAS ve Firmwalker hassas bilgi arayışı için
The Firmware Analysis and Comparison Tool (FACT) kapsamlı firmware analizi için
FwAnalyzer, ByteSweep, ByteSweep-go ve EMBA statik ve dinamik analiz için
Dosya sisteminde bulunan hem kaynak kodu hem de derlenmiş ikililer güvenlik açıkları açısından incelenmelidir. Unix ikilileri için checksec.sh ve Windows ikilileri için PESecurity gibi araçlar, istismar edilebilecek korumasız ikilileri tanımlamaya yardımcı olur.
Firmware emülasyonu süreci, bir cihazın çalışması veya bireysel bir programın dinamik analizi için olanak tanır. Bu yaklaşım, donanım veya mimari bağımlılıkları ile zorluklarla karşılaşabilir, ancak kök dosya sistemini veya belirli ikilileri, Raspberry Pi gibi eşleşen mimari ve endianlıkta bir cihaza veya önceden oluşturulmuş bir sanal makineye aktarmak, daha fazla test yapmayı kolaylaştırabilir.
Tek programları incelemek için, programın endianlığını ve CPU mimarisini belirlemek kritik öneme sahiptir.
MIPS mimarisi ikilisini emüle etmek için şu komut kullanılabilir:
Ve gerekli emülasyon araçlarını kurmak için:
For MIPS (big-endian), qemu-mips
kullanılır ve little-endian ikili dosyalar için qemu-mipsel
tercih edilir.
ARM ikili dosyaları için süreç benzerdir, emülasyon için qemu-arm
emülatörü kullanılır.
Firmadyne, Firmware Analysis Toolkit ve diğerleri gibi araçlar, tam firmware emülasyonunu kolaylaştırır, süreci otomatikleştirir ve dinamik analize yardımcı olur.
Bu aşamada, analiz için gerçek veya emüle edilmiş bir cihaz ortamı kullanılır. OS ve dosya sistemine shell erişimini sürdürmek önemlidir. Emülasyon, donanım etkileşimlerini mükemmel bir şekilde taklit etmeyebilir, bu nedenle ara sıra emülasyonun yeniden başlatılması gerekebilir. Analiz, dosya sistemini yeniden gözden geçirmeli, açığa çıkan web sayfalarını ve ağ hizmetlerini istismar etmeli ve önyükleyici zafiyetlerini keşfetmelidir. Firmware bütünlüğü testleri, potansiyel arka kapı zafiyetlerini belirlemek için kritik öneme sahiptir.
Çalışma zamanı analizi, bir süreç veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar, kesme noktaları ayarlamak ve fuzzing ve diğer teknikler aracılığıyla zafiyetleri tanımlamak için kullanılır.
Belirlenen zafiyetler için bir PoC geliştirmek, hedef mimarinin derin bir anlayışını ve daha düşük seviyeli dillerde programlama bilgisi gerektirir. Gömülü sistemlerde ikili çalışma zamanı korumaları nadirdir, ancak mevcut olduğunda, Return Oriented Programming (ROP) gibi teknikler gerekli olabilir.
AttifyOS ve EmbedOS gibi işletim sistemleri, gerekli araçlarla donatılmış firmware güvenlik testleri için önceden yapılandırılmış ortamlar sağlar.
AttifyOS: AttifyOS, Nesnelerin İnterneti (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testleri yapmanıza yardımcı olmak için tasarlanmış bir dağıtımdır. Tüm gerekli araçların yüklü olduğu önceden yapılandırılmış bir ortam sağlayarak size çok zaman kazandırır.
EmbedOS: Gömülü güvenlik test işletim sistemi, firmware güvenlik test araçları ile önceden yüklenmiş Ubuntu 18.04 tabanlıdır.
Firmware'deki zafiyetleri keşfetmek için pratik yapmak amacıyla aşağıdaki zayıf firmware projelerini başlangıç noktası olarak kullanın.
OWASP IoTGoat
Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
AWS Hacking Öğrenin ve Pratik Yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking Öğrenin ve Pratik Yapın: HackTricks Training GCP Red Team Expert (GRTE)