Firmware Analysis
Last updated
Last updated
AWS Hacking'i öğrenin ve uygulayın:HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve uygulayın: HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)
Firmware, cihazların donanım bileşenleri ile kullanıcıların etkileşimde bulunduğu yazılım arasındaki iletişimi yöneterek cihazların doğru bir şekilde çalışmasını sağlayan temel bir yazılımdır. Cihazın açıldığı anda önemli talimatları erişebilmesini sağlayan kalıcı bellekte depolanır ve işletim sisteminin başlatılmasına yol açar. Firmware'in incelenmesi ve potansiyel olarak değiştirilmesi, güvenlik açıklarının belirlenmesinde kritik bir adımdır.
Bilgi toplama, bir cihazın yapısını ve kullandığı teknolojileri anlamanın kritik ilk adımıdır. Bu süreç, şunlar hakkında veri toplamayı içerir:
CPU mimarisi ve çalıştırdığı işletim sistemi
Bootloader özellikleri
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
Mimarlık 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 ve mevcut açık kaynaklı yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analiz edilmesi de önemlidir. Coverity Scan ve Semmle’s LGTM gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar.
Firmware elde etme, kendi karmaşıklık seviyesine sahip çeşitli yöntemlerle ele alınabilir:
Kaynaktan (geliştiriciler, üreticiler) doğrudan
Sağlanan talimatlarla oluşturarak
Resmi destek sitelerinden indirerek
Barındırılan firmware dosyalarını bulmak için Google dork sorgularını kullanma
S3Scanner gibi araçlarla doğrudan bulut depolama erişimi
Orta adam saldırısı teknikleriyle güncellemeleri araştırarak
UART, JTAG veya PICit gibi bağlantılar aracılığıyla cihazdan çıkarma
Cihaz iletişimi içindeki güncelleme isteklerini sızdırma
Tanımlama ve sabitlenmiş güncelleme uç noktalarını kullanma
Bootloader'dan veya ağdan dump alma
Tüm diğer yöntemler başarısız olduğunda, uygun donanım araçları kullanarak depolama yongasını çıkararak ve okuyarak
Şimdi firmware'e sahip olduğunuza göre, onun hakkında bilgi çıkarmak için farklı araçlar kullanmanız gerekmektedir:
Eğer bu araçlarla çok fazla şey bulamazsanız, görüntünün entropisini binwalk -E <bin>
ile kontrol edin, düşük entropi ise muhtemelen şifrelenmemiştir. Yüksek entropi ise muhtemelen şifrelenmiştir (veya bir şekilde sıkıştırılmıştır).
Ayrıca, firmware içine gömülü dosyaları çıkarmak için bu araçları kullanabilirsiniz:
Ya da dosyayı incelemek için binvis.io (kod) kullanabilirsiniz.
Önceki yorumlanmış araçlar gibi binwalk -ev <bin>
ile dosya sistemini çıkarmış olmanız gerekiyor.
Binwalk genellikle bunu, genellikle şunlardan biri olan dosya sistemi türü adında bir klasörün içine çıkarır: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Bazı durumlarda, binwalk'ün imzalarında dosya sisteminin sihirli baytı olmayabilir. Bu durumlarda, binwalk'ü kullanarak dosyanın dosya sistemi ofsetini bulun ve sıkıştırılmış dosya sistemini kesin ve aşağıdaki adımları kullanarak dosya sistemini el ile çıkarın.
Aşağıdaki dd komutunu çalıştırarak Squashfs dosya sistemi kazıyı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ıldı)
$ 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 flaş 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ı anlamak ve potansiyel güvenlik açıklarını belirlemek için parçalamak esastır. 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.
İkili dosyanın ( <bin>
olarak adlandırılan) ilk incelemesi için bir dizi komut sağlanmıştır. Bu komutlar, dosya türlerini tanımlamaya, dizeleri çıkarmaya, ikili verileri analiz etmeye ve bölüm ve dosya sistem detaylarını anlamaya yardımcı olur:
Şifreleme durumunu değerlendirmek için entropy değeri binwalk -E <bin>
komutu ile kontrol edilir. Düşük entropy değeri şifreleme eksikliğini, yüksek entropy değeri ise olası şifreleme veya sıkıştırmayı gösterebilir.
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>
kullanılarak genellikle dosya sistemi çıkarılabilir, genellikle dosya sistemi türünün adını taşıyan bir dizine (örneğin, squashfs, ubifs) çıkarılır. Ancak, binwalk dosya sistemi türünü tanıyamadığında sihirli baytların eksik olması nedeniyle manuel çıkarma gereklidir. Bu, binwalk
'ın dosya sisteminin ofsetini bulmak için kullanılmasını ve ardından dd
komutunun dosya sisteminin çıkarılmasını içerir:
Dosya sistemi çıkarıldıktan sonra, güvenlik açıklarının aranmasına başlanır. Güvensiz ağ daemonları, sabitlenmiş kimlik bilgileri, API uç noktaları, güncelleme sunucusu işlevleri, derlenmemiş kodlar, başlangıç betikleri ve çevrimdışı analiz için derlenmiş ikili dosyalar dikkatle incelenir.
İncelenmesi gereken ana konumlar ve öğ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ı
İleri analiz için gömülü ikili dosyalar
Ortak IoT cihazı web sunucuları ve ikili dosyalar
Dosya sistemi içinde hassas bilgileri ve güvenlik açıklarını ortaya çıkarmaya yardımcı olan çeşitli araçlar bulunmaktadır:
Hassas bilgi araması için LinPEAS ve Firmwalker
Kapsamlı firmware analizi için The Firmware Analysis and Comparison Tool (FACT)
Statik ve dinamik analiz için FwAnalyzer, ByteSweep, ByteSweep-go ve EMBA
Dosya sisteminde bulunan hem kaynak kodları hem de derlenmiş ikili dosyalar, güvenlik açıkları açısından incelenmelidir. Unix ikili dosyaları için checksec.sh ve Windows ikili dosyaları için PESecurity gibi araçlar, sömürülebilecek korumasız ikili dosyaları belirlemeye yardımcı olur.
Firmware'in emüle edilmesi, bir cihazın işleyişinin veya bireysel bir programın dinamik analizinin yapılmasını sağlar. Bu yaklaşım, donanım veya mimari bağımlılıklarıyla karşılaşabilir, ancak kök dosya sistemini veya belirli ikili dosyaları, Raspberry Pi gibi mimari ve bitiş düzenine sahip bir cihaza veya önceden oluşturulmuş bir sanal makineye aktarmak, daha fazla test yapmayı kolaylaştırabilir.
Tek programları incelemek için programın bitiş düzenini ve CPU mimarisini belirlemek önemlidir.
MIPS mimarisi ikili dosyasını emüle etmek için şu komut kullanılabilir:
Ve gerekli emülasyon araçlarını yüklemek için:
ARM ikili dosyaları için, emülasyon için qemu-arm
emülatörü kullanılır.
Firmadyne, Firmware Analiz Araç Seti ve diğer 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. İşletim sistemine ve dosya sistemine erişimi sürdürmek esastır. Emülasyon, donanım etkileşimlerini mükemmel bir şekilde taklit etmeyebilir, bu nedenle zaman zaman emülasyon yeniden başlatmaları gerekebilir. Analiz, dosya sistemine tekrar bakmalı, açığa çıkarılan web sayfalarını ve ağ hizmetlerini kullanmalı ve önyükleme yükleyicisi açıklarını keşfetmelidir. Firmware bütünlük testleri, potansiyel arka kapı açıklarını belirlemek için kritiktir.
Çalışma zamanı analizi, bir işlem veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar kullanılarak kesme noktaları belirleme ve bulma ve diğer teknikler aracılığıyla zafiyetleri tanımlama.
Belirlenen zafiyetler için bir PoC geliştirmek, hedef mimariyi derinlemesine anlama ve düşük seviye dillerde programlama gerektirir. Gömülü sistemlerde ikili çalışma zamanı korumaları nadirdir, ancak varsa, Return Oriented Programming (ROP) gibi teknikler gerekebilir.
AttifyOS ve EmbedOS gibi işletim sistemleri, gerekli araçlarla donatılmış firmware güvenlik testi için önceden yapılandırılmış ortamlar sağlar.
AttifyOS: AttifyOS, Nesnelerin İnterneti (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testi 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 zaman kazandırır.
EmbedOS: Ubuntu 18.04 tabanlı gömülü güvenlik testi işletim sistemi, firmware güvenlik testi araçlarıyla önceden yüklenmiş.
Firmware'deki zafiyetleri keşfetmek için aşağıdaki zafiyetli firmware projelerini bir başlangıç noktası olarak kullanın.
OWASP IoTGoat
The Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)