Firmware Reversing (Part 1) - [ IoT Security ]

Merhaba dostlar yeni yazıma hoşgeldiniz, bu yazımda elimizde olan bir firmware’ın analizinden bahsedeceğim.

Firmware Nedir ?

Donanım yazılımı, sayısal veri işleme yeteneği bulunan her tür donanımın kendisinden beklenen işlevleri yerine getirebilmesi için kullandığı yazılımlara verilen addır. Elektronikte ve bilişimde donanım yazılımı, kalıcı bellek, program kodu ve veri deposudur. Özetle Firmware, donanım için yazılmış bir yazılımdır. Cihazda, programların çalışmasını sağlar.

Firmware Dosyalarını Elde Etmek

Firmware Dosyalarını elde etmek için en çok bilinen yöntemler şunlardır ;

  • Cihaza Fiziksel erişim varsa , Cihazın UART portları üzerinden çeşitli yöntemler ile dosyaları elde edebiliriz.

  • Üreticinin Websitesinden dosyaları indirebiliriz.

Firmware Dosyalarını elde ettikten sonra , artık analiz etme aşamasına geçebiliriz.

Analize Başlıyalım

Bu yazımızda uygulamalı örnek olması için D-Link 'in DCS-932L isimli WiFi Camera ürününün 1.14.4 versiyonuna sahip Firmware’ı nı analiz edeceğiz.

Burada Analiz işlemimizi kolaylaştıracak binwalk isimli bir araç kullanacağız. (GitHub - ReFirmLabs/binwalk: Firmware Analysis Tool)

Binwalk özetle , dosyayı ayrıştırır ve bulduklarına göre bir içindekiler tablosu döndürür.

İlk olarak dosyayı .zip den çıkaralım.

Ekran Görüntüsü - 2021-03-08 23-13-16

ve adrından ,

$ binwalk dcs932l_v1.14.04.bin Komutunu çalıştırarak çıktıyı görelim. Çıktı üzerinde ;

  • Ondalık formatta bir dosya konumu
  • Onaltılık (Hexa Decimal) formatta bir dosya konumu
  • O konumda bulunan şeyin açıklaması

İlk satıra baktığımızda binwalk 106352’de bir U-Boot dizesi bulduğunu görüyoruz. U-Boot popüler bir bootloader’dır. Bir aygıt açıldığında, işletim sistemini yüklemek bootloader 'In görevidir. Ve tabii ki 327680’de, 327744’te başlayan bir LZMA arşivinde OS çekirdek imajını bulacağımızı söyleyen bir uImage başlığı görebiliriz.

Ekran Görüntüsü - 2021-03-08 23-27-28

Bu LZMA arşivini açmadan ve derinlemesine incelemeden önce, onu .bin dosyadan ayırmamız gerekiyor. Şu Komutu çalıştırarak bu işlemi gerçekleştiriyoruz :

$ dd if=dcs932l_v1.14.04.bin skip=327744 bs=1 of=kernel.lzma

Ekran Görüntüsü - 2021-03-09 00-01-14

LZMA arşivini elde ettiğimize göre artık dosyaları arşivden çıkartabiliriz. unlzma kernel.lzma komutu ile bu işlemi gerçekleştiriyoruz. Ve arşivden çıkan dosyanın bir data dosyası olduğunu görüyoruz.

Arşivden çıkan dosyayı tekrar binwalk ile analiz ettiğimizde 4038656 adresinde , birtane daha LZMA arşivi olduğunu görüyoruz. İç içe geçmiş 2 LZMA arşivi…

Şimdi orada gördüğümüz LZMA’yı da data dosyasından ayıralım…

$ dd if=kernel skip=4038656 bs=1 of=temizcikti.lzma

ardından çıkan LZMA arşivinden çıkartalım…

$ unlzma temizcikti.lzma

komtu çalıştırdıktan sonra , çıkan dosyanın bir cipo arşivi olduğunu görüyoruz. Bu arşiv içinden çıkacak dosyaların , Linux Sistem dosyaları olma ihtimali çok yüksek.

Şimdi linux sistem dosyalarını bir klasör oluşturalım ve bu klasöre çıkartalım.

$ mkdir cpio; cd cpio

Ardından cipo arşivi içindeki dosyaları , çıkartalım ;

$ cpio -idm --no-absolute-filenames < ../temizcikti

Dosyaları çıkartma işleminin ardından çıkan dosyaların , Linux Sistem dosyaları olduğunu görüyoruz.

Ekran Görüntüsü - 2021-03-09 01-04-14

Bundan sonraki adımda , configuration dosyaları , Binary dosyaları üzerinde veya ullandığınız Firmware Http kullanıyorsa Web tarafında PHP/ASP kodları üzerinde Resarch Yapabilirsiniz. 2. yazımda bu kısımlara daha detaylı şekilde göz atıp. Firmware üzerinde modification yaptıktan sonra tekrar .bin haline getirmek ve Firmware a Backdoor gömmek üzerinde duracağız.

Bir sonraki yazımda görüşmek üzere , Esen Kalın…

4 Beğeni

Merhaba,

Yazı için tebrik ederim. Eline sağlık.

Aslında gerekli araçlar kurulu olduktan sonra binwalk bunu “-e” parametresini verince otomatik çıkartıyor. Tabi lzma veya cpio tipleri birer istisna olabilirler.

Benim genelde genelde gördüğüm, kaynak kodların PHP veya başka dil NAS v.s gibi cihaz firmwareları içerisinde daha çok olduğu. Router v.s gibi cihazlarda binarylerden yürümek gerekiyor genellikle. Asus, TP-Link, WesternDigital markalarında binaryden yürümek gerekiyor mesela zira dosyalar elinde olmuyor web tarafı için :(.

UART olayına değinmen hoş olmuş, gönül ister ki bunu bir de videolu anlatsan.

Genel olarak güzel bir giriş yazısı çıkardığını düşünüyorum, diğer yazılarını da merakla bekliyorum.

M.

Hocam öncelikle teşekkürler güzel yorumuz için. Binwalk bazı dosya sistemi formatlarında sıkıntı çıkartıyor örneğin .7z ve .bz2 dosyalarını bozuk çıkartabiliyor, o yüzden coreutils kullanmayı tercih ettim. Videolu anlatım biçiminde bir seri çekmeyi zaten düşünüyordum. UART üzerinden imajı elde etmek için gerekli donanımı aldığımda güzel bir seri çekeceğim nasipse…

1 Beğeni

Eline sağlık kardeşim bu gün okuma fırsatı buldum devamını bekliyorum.

3 Beğeni

Eyvalah abi, vakit buldukça getirecem inşallah devamını.