- Samsung WB850F, DRIMeIII SoC ile Wi-Fi’yi birlikte kullanan ilk modeldi; firmware ZIP’ine dahil edilen partialImage.o.map sayesinde ana SoC firmware analiz edilebildi ve hotspot algılaması atlatılabildi
WB850F_FW_210086.zip, 6 partition içerenWB850-FW-SR-210086.binile 300 binden fazla satırlık bir linker dökümü içeriyor; buradanMain_Image’ın gerçek ARM firmware’i olduğu doğrulanabildi- Ghidra analizinde, string adresleri arasındaki farkı kullanarak
Main_Imageiçin 0xc0004000 base adresini bulmak ve.textfonksiyon adlarını dönüştürüp symbol olarak içe aktarmak kilit adımdı - Hotspot karar fonksiyonu
DevHTTPResponseStart, AP’nin doğrulanıp doğrulanmadığını HTTP 200’de Yahoo domain cookie’siyle veya 301/302/307 redirect URL’sinin başlarındakiyahoo.string’iyle belirliyor - Yahoo’nun HTTPS’e redirect etmesiyle
yahoo.konumu kodun izin verdiği aralığın dışına çıktı;samsung-nx-emailservicepatch’inden sonra WB850F’nin fotoğraf upload’u başarılı oldu
WB850F firmware ZIP’inin yapısı
- Samsung WB850F, artık kullanımdan kalkmış iLauncher uygulamasından sonra bile Samsung’un hâlâ firmware ve destek dosyalarını yayımladığı az sayıdaki modelden biri
WB850F_FW_210086.zipiçinde şu dosyalar bulunuyorGPS_FW/BASEBAND_FW_Flash.mbinGPS_FW/BASEBAND_FW_Ram.mbinGPS_FW/Config.BINGPS_FW/flashBurner.mbinFWUPpartialImage.o.mapWB850-FW-SR-210086.binwb850f_adj.txt
FWUP, firmware test/otomasyon modülü için bir script gibi görünen yalnızcaupgrade allstring’ini içeriyorwb850f_adj.txt, GPS firmware’ini upgrade eden ve ilgili dosyaları silen daha karmaşık bir script- GPS ile ilgili script’ler ve
GPS_FWklasörü bu analiz kapsamı dışında bırakıldı
partialImage.o.map: linker dökümü olan bir harita
partialImage.o.map, 300 binden fazla satırlık bir metin dosyası;partialImage.oiçin linker çıktısını ve bağlanan dosyanın tüm bellek haritasını içeriyor.textsection’ındasysInit,archPwrDown,DevHTTPResponseStart,DevHTTPResponseData,DevHTTPResponseEndgibi fonksiyon adları yer alıyor.datasection’ındasysBus,sysCpu,sysBootLinegibi veri symbol’ları bulunuyor- Bu dosya, firmware içindeki kodu ve fonksiyon adlarını eşleştiren bir symbol haritası olarak kullanılıyor
WB850-FW-SR-210086.bin header’ı ve partition table’ı
WB850-FW-SR-210086.bindosyasınabinwalkile bakıldığında HTML, PNG, JPEG header’ları, VxWorks header’ı ve çeşitli Unix path’leri görünüyor; ancak net bir partition veya filesystem ortaya çıkmıyor- İlk 1 KB hex dump edildiğinde firmware version’ı
210086sonrasında0x00 0x06geliyor, ardındanFW_UP/ONBL1.bingibi dosya adları görünüyor - Her record’un 60 byte’lık bir yapı olduğu; 32 byte sıfır padding’li string, iki little-endian integer ve 20 byte sıfır padding’li partition adından oluştuğu analiz edildi
- İki integer sırasıyla uzunluk ve dosya içi offset olarak yorumlandı
- Toplam 6 record olduğu için
0x00 0x06, firmware version string’inin bitiş veya padding byte’ı ile 1 byte’lık partition sayısı olarak yorumlandı -
Yeniden oluşturulan partition’lar
FW_UP/ONBL1.bin- Boyut: 196 byte, offset:
0x0000800, partition adı:ONBL1
- Boyut: 196 byte, offset:
FW_UP/ONBL2.bin- Boyut: 46KB, offset:
0x00008c4, partition adı:ONBL2
- Boyut: 46KB, offset:
[WB850]DSC_5KEY_WB850- Boyut: 30MB, offset:
0x000bef4, partition adı:Main_Image
- Boyut: 30MB, offset:
RomFS/SPID.Rom- Boyut: 48MB, offset:
0x1d2b32c, partition adı:Resource
- Boyut: 48MB, offset:
FW_UP/WB850.HEX- Boyut: 19KB, offset:
0x4c75f2c, partition adı:OIS
- Boyut: 19KB, offset:
FW_UP/skin.bin- Boyut: 36MB, offset:
0x4c7acb2, partition adı:SKIN
- Boyut: 36MB, offset:
- Partition çıkarma için DRIMeIII firmware partition çıkarma aracı yazılıp kullanıldı
Kod ve veri partition’larını ayırmak
- Çıkarma aracı partition adına göre dosyaları çıkarıp
.binuzantısı ekliyor - Yalnızca
filesonucu,Main_Image.bin’in OpenPGP Secret Key sanılması gibi nedenlerle sınırlı fayda sağlıyor ONBL1veONBL2,Main_Imageiçindeki"BootLoader(ONBL1, ONBL2) Update Done"string’ine bakıldığında birinci ve ikinci aşama bootloader olarak tahmin ediliyorMain_Imagegerçek firmware;binwalk -Abu dosyada çok sayıda ARM fonksiyon prologue’u raporluyorResourceveSKINbüyük container’lar; kamera UI skin’iyle ilgili, SoC üreticisinin sağladığı bir yapılandırma olma ihtimali varOIS, dosya adının aksine gerçek bir HEX değil; özel optik görüntü sabitleme biriminin firmware’i olabilir- Analizin odağı
Main_Image
Ghidra’da Main_Image’ı map etmek
ONBL1,ONBL2,Main_Imageadlı üç partition gerçek ARM kodu içeriyor- Tipik ARM firmware’i reset vector table’ı
0x0000000adresine koyar; ancak üç binary’nin de başında lineer kod bulunduğu için henüz bilinmeyen bir adrese yeniden map edilmeleri gerekiyordu - Hotspot’un yanlış algılanmasını analiz etmek için şu işler gerekliydi
Main_Image’ın map edileceği doğru bellek adresini bulmakpartialImage.o.mapiçindeki symbol adlarını Ghidra’ya yüklemek- Hotspot login kararını yanlış tetikleyen fonksiyonu analiz etmek
- Ghidra’nın Defined Strings sekmesinde
"yahoo"arandığındaDevHTTPResponseStart()için debug string’i gibi görünen öğeler çıktıDevHTTPResponseStart: url=%s, handle=%x, status=%dDevHTTPResponseStart: This is YAHOO check !!!DevHTTPResponseStart: THIS IS GOOGLE/YAHOO/SAMSUNG PAGE!!!! 111301/302/307! cannot find yahoo!
partialImage.o.mapiçindeDevHTTPResponseStart0x321a84adresinde; Ghidra da aynı offset’te fonksiyonu buldu- Debug string pointer değeri ile gerçek string offset’i arasındaki fark
0xc0004000ile eşleşti; bu yüzdenMain_Imageiçin base adresin0xc0004000olduğu sonucuna varıldı - Ghidra’da base adres sonradan değiştirilemediği için binary’yi projeden kaldırıp base adresi ayarlayarak tekrar içe aktarmak gerekti
Fonksiyon adlarını içe aktarma ve DevHTTPResponseStart analizi
- Ghidra’nın ImportSymbolScript.py script’i, metin tablolarından toplu symbol içe aktarabiliyor
- Script her satırda symbol adı, hex adres ve fonksiyon olup olmadığını gösteren
fya da label olup olmadığını gösterenlbekliyor partialImage.o.mapiçinde yalnızca mevcut.textsection’ındaki fonksiyonlar gerektiğinden şu öğeleri hariç bırakmak gerekiyordu- Boş satırlar
- Object file offset’leri
.textgibi section label’larıL$_prefix’li label’lar$prefix’li local symbol’lar
- Adreslere Ghidra base adresiyle eşleşmesi için
0xc0004000eklendi - Dönüştürme sonucu
sysInit c0004000 f,archPwrDown c0004094 fgibi formatlarda oluşturulup Ghidra’nın Script Manager’ından yüklendi - Fonksiyon adları geldikten sonra çeşitli
DAT_alanları pointer olarak işaretlenip debug string’lerine göre parametre adları değiştirilinceDevHTTPResponseStartdecompile çıktısı okunabilir hale geldi
Hotspot algılama koşulları
DevHTTPResponseStart, HTTP response status’u ile URL ve header’lara bakarak Wi-Fi AP’nin doğrulanıp doğrulanmadığını belirliyor- HTTP 200 OK response’unda doğrulama başarılı sayılması için response header’da Yahoo domain cookie’si olması gerekiyor
- Kontrol edilenler
domain=.yahoo,Domain=.yahoo,domain=kr.yahoo,Domain=kr.yahoo - Koşul sağlanırsa
p_request_ongoing0 yapılır ve browser doğrulanmamış durumdaysasafnotify_auth_ap(0)çağrılır
- Kontrol edilenler
- HTTP 301/302/307 redirect’lerinde URL içindeki
yahoo.string’i kontrol ediliyoryahoo.yoksa veyaurl + 11den daha sonra bulunuyorsa Yahoo bulunamamış kabul ediliyor- Browser framebuffer açık değilse ve doğrulama da yapılmamışsa
safnotify_auth_ap(1)çağrılıyor yahoo.başlarda bulunuyorsasafnotify_auth_ap(0)ile doğrulama başarılı kabul ediliyor
- Negatif status, iptal edilmiş request gibi
falsedöndürüyor - 200 veya redirect olmayan pozitif status’larda sonuç browser framebuffer durumuna göre değişiyor
TLS sonrası bozulan Yahoo kontrolü ve atlatma
- Kameranın sorguladığı URL
http://www.yahoo.co.kr/ - Doğrudan request atıldığında sunucu
HTTP/1.1 301 Moved Permanentlyile birlikteLocation: https://www.yahoo.com/adresine redirect ediyor https://www.yahoo.com/içindeyahoo.substring’i 12. konumda- Kod,
yahoo.nun ilk 11 konumdan birinde olmasını şart koştuğu için bu kontrol HTTPS geçişinden sonra bozuluyor - Hotspot kontrolünü geçmek için DNS record’unu başka bir sunucuya yönlendirmek ve bu sunucunun daha Yahoo’ya benzer bir isme HTTP redirect yapması ya da Yahoo domain cookie’si ayarlaması gerekiyor
- samsung-nx-emailservice patch’i sonrasında kamera gerçekten bağlanıp fotoğraf upload ediyor
Aynı atlatmanın uygulandığı diğer kameralar
- Bu analiz, tersine mühendisliği yapılan tek bir fonksiyona dayanarak Samsung WB850F Wi-Fi kameranın hotspot algılamasını anlamayı ve atlatmayı başardı
- Nihai patch küçüktü; ancak Samsung mühendisinin uyguladığı algılama yöntemi nedeniyle yalnızca packet trace ile atlatma yöntemini tahmin etmek zordu
- Neyin aranması gerektiği anlaşıldıktan sonra, MSN.com’u sorgulayan kameralara da aynı atlatma uygulandı
- Bunun sonucunda EX2F, ST200F, WB3xF, WB1100F desteklenen kamera listesine eklendi
Main_Imageiçinde 77 binden fazla fonksiyon var; dijital kamera davranışını daha iyi anlamak için analiz edilecek çok şey kalıyor
1 yorum
Hacker News yorumları
https://op-co.de/blog/posts/samsung_nx_cryptofail/#index3h3 kısmını daha çok beğendim
Gerçekten şaşırtıcı bir firmware şifreleme hatası örneği
Harika bir çalışma. Tersine mühendislik yöntemini bir eğitime dönüştürmeyi düşünüp düşünmediğini merak ediyorum
Yalnızca Google’da kolayca bulunabilecek kısımları atladım
İstediğim tek şey, kamera düğmesiyle bir dSLR fotoğrafı çektiğimde kısa süre sonra o görüntünün Apple Photos’a düşmesi
Akıllı telefonlar tüketici kamerası pazarını neredeyse yok ettiği için talep yetersiz gibi. Bir proje fikri olarak, bir ESP32’yi SD kartın içine sığdırmanın yolunu aramak var
Telefona, tablete ve web sitesine de bağlanabiliyor, ancak bir uygulama ya da servis gerekiyor. Kameradan doğrudan FTP’ye gönderme dokümanı: https://gdlp01.c-wss.com/gds/5/0300024975/01/eos5d-mk4-wff-i... sayfa 113. Bağlantı EOS 5D Mark IV (WG) Wi-Fi (Wireless Communication) Function Instruction Manual’a ait
Ne yazık ki 10 yıllık modeller ve ikinci el piyasasında da nadir bulunuyorlar
Wi-Fi ya da Bluetooth üzerinden eşleşiyor; isterseniz iPad’den kamerayı uzaktan kontrol edip ekranı da görebiliyorsunuz