2 poin oleh GN⁺ 2024-05-26 | 1 komentar | Bagikan ke WhatsApp
  • Samsung WB850F adalah model pertama yang memakai DRIMeIII SoC bersama Wi-Fi, dan berkat partialImage.o.map yang disertakan dalam ZIP firmware, analisis firmware SoC utama serta bypass deteksi hotspot menjadi mungkin
  • WB850F_FW_210086.zip berisi WB850-FW-SR-210086.bin dengan 6 partisi serta dump linker lebih dari 300 ribu baris, sehingga dapat dipastikan bahwa Main_Image adalah firmware ARM yang sebenarnya
  • Dalam analisis Ghidra, bagian kuncinya adalah menemukan alamat dasar 0xc0004000 untuk Main_Image menggunakan selisih alamat string, lalu mengonversi nama fungsi .text agar dapat diimpor sebagai simbol
  • Fungsi penentu hotspot DevHTTPResponseStart menentukan apakah AP telah diautentikasi berdasarkan cookie domain Yahoo pada HTTP 200 atau string yahoo. di awal URL redirect 301/302/307
  • Saat Yahoo mulai melakukan redirect ke HTTPS, posisi yahoo. keluar dari rentang yang diizinkan kode, dan setelah patch samsung-nx-emailservice, upload foto dari WB850F berhasil

Struktur ZIP firmware WB850F

  • Samsung WB850F adalah salah satu dari sedikit model yang, bahkan setelah aplikasi iLauncher dihentikan, masih disediakan firmware dan file dukungan secara publik oleh Samsung
  • WB850F_FW_210086.zip berisi file-file berikut
    • GPS_FW/BASEBAND_FW_Flash.mbin
    • GPS_FW/BASEBAND_FW_Ram.mbin
    • GPS_FW/Config.BIN
    • GPS_FW/flashBurner.mbin
    • FWUP
    • partialImage.o.map
    • WB850-FW-SR-210086.bin
    • wb850f_adj.txt
  • FWUP hanya berisi string upgrade all, yang tampaknya merupakan skrip untuk modul pengujian/otomasi firmware
  • wb850f_adj.txt adalah skrip yang lebih kompleks untuk meng-upgrade firmware GPS dan menghapus file terkait
  • Skrip terkait GPS dan folder GPS_FW dikecualikan dari analisis ini

partialImage.o.map: peta berupa dump linker

  • partialImage.o.map adalah file teks lebih dari 300 ribu baris, berisi output linker untuk partialImage.o dan peta memori lengkap dari file yang ditautkan
  • Bagian .text berisi nama fungsi seperti sysInit, archPwrDown, DevHTTPResponseStart, DevHTTPResponseData, DevHTTPResponseEnd
  • Bagian .data memuat simbol data seperti sysBus, sysCpu, sysBootLine
  • File ini digunakan sebagai peta simbol untuk mencocokkan kode di dalam firmware dengan nama fungsi

Header dan tabel partisi WB850-FW-SR-210086.bin

  • Jika WB850-FW-SR-210086.bin dilihat dengan binwalk, terlihat header HTML, PNG, JPEG, header VxWorks, dan beberapa path Unix, tetapi partisi atau filesystem yang jelas tidak tampak
  • Hex dump 1KB pertama menunjukkan versi firmware 210086, diikuti 0x00 0x06, lalu nama file seperti FW_UP/ONBL1.bin
  • Setiap record tampak sebagai struktur 60 byte, dianalisis terdiri dari string 32 byte berpadded nol, dua integer little-endian, dan nama partisi 20 byte berpadded nol
  • Dua integer tersebut ditafsirkan masing-masing sebagai panjang dan offset di dalam file
  • Karena ada total 6 record, 0x00 0x06 ditafsirkan sebagai byte terminator atau padding untuk string versi firmware dan jumlah partisi 1 byte
  • Partisi yang direkonstruksi

    • FW_UP/ONBL1.bin
      • Ukuran: 196 byte, offset: 0x0000800, nama partisi: ONBL1
    • FW_UP/ONBL2.bin
      • Ukuran: 46KB, offset: 0x00008c4, nama partisi: ONBL2
    • [WB850]DSC_5KEY_WB850
      • Ukuran: 30MB, offset: 0x000bef4, nama partisi: Main_Image
    • RomFS/SPID.Rom
      • Ukuran: 48MB, offset: 0x1d2b32c, nama partisi: Resource
    • FW_UP/WB850.HEX
      • Ukuran: 19KB, offset: 0x4c75f2c, nama partisi: OIS
    • FW_UP/skin.bin
      • Ukuran: 36MB, offset: 0x4c7acb2, nama partisi: SKIN
    • Untuk mengekstrak partisi, dibuat dan digunakan alat ekstraksi partisi firmware DRIMeIII

Membedakan partisi kode dan data

  • Alat ekstraksi mengambil file berdasarkan nama partisi dan menambahkan .bin
  • Hasil file saja kurang berguna, misalnya Main_Image.bin salah dikenali sebagai OpenPGP Secret Key
  • ONBL1 dan ONBL2 diperkirakan sebagai bootloader tahap 1 dan tahap 2, dilihat dari string "BootLoader(ONBL1, ONBL2) Update Done" di dalam Main_Image
  • Main_Image adalah firmware yang sebenarnya, dan binwalk -A melaporkan banyak prolog fungsi ARM di file ini
  • Resource dan SKIN adalah container besar, kemungkinan merupakan konfigurasi yang disediakan produsen SoC terkait skin UI kamera
  • OIS, terlepas dari nama filenya, sebenarnya bukan HEX, dan bisa jadi firmware untuk unit optical image stabilization khusus
  • Fokus analisis adalah Main_Image

Memetakan Main_Image di Ghidra

  • Tiga partisi ONBL1, ONBL2, dan Main_Image berisi kode ARM sungguhan
  • Firmware ARM umum biasanya meletakkan tabel reset vector di alamat 0x0000000, tetapi ketiga binary ini memiliki kode linear di bagian awal, sehingga harus dipetakan ulang ke alamat yang belum diketahui
  • Untuk menganalisis salah deteksi hotspot, pekerjaan berikut diperlukan
    • Menemukan alamat memori yang benar untuk memetakan Main_Image
    • Memuat nama simbol dari partialImage.o.map ke Ghidra
    • Menganalisis fungsi yang salah memicu keputusan login hotspot
  • Saat mencari "yahoo" di tab Defined Strings Ghidra, muncul item yang tampak sebagai string debug dari DevHTTPResponseStart()
    • DevHTTPResponseStart: url=%s, handle=%x, status=%d
    • DevHTTPResponseStart: This is YAHOO check !!!
    • DevHTTPResponseStart: THIS IS GOOGLE/YAHOO/SAMSUNG PAGE!!!! 111
    • 301/302/307! cannot find yahoo!
  • Di partialImage.o.map, DevHTTPResponseStart berada pada 0x321a84, dan Ghidra juga menemukan fungsi pada offset yang sama
  • Selisih antara nilai pointer string debug dan offset string sebenarnya cocok dengan 0xc0004000, sehingga alamat dasar Main_Image disimpulkan sebagai 0xc0004000
  • Di Ghidra, alamat dasar tidak bisa diubah setelah impor, sehingga binary harus dihapus dari proyek lalu diimpor kembali dengan alamat dasar tersebut

Mengimpor nama fungsi dan analisis DevHTTPResponseStart

  • ImportSymbolScript.py milik Ghidra dapat mengimpor simbol massal dari tabel teks
  • Skrip ini mengharapkan setiap baris berisi nama simbol, alamat heksadesimal, dan f untuk menandai fungsi atau l untuk menandai label
  • Karena dari partialImage.o.map hanya fungsi di bagian .text saat ini yang diperlukan, item berikut harus dikecualikan
    • Baris kosong
    • Offset file objek
    • Label section seperti .text
    • Label berawalan L$_
    • Simbol lokal berawalan $
  • Untuk menyesuaikan alamat dengan alamat dasar Ghidra, 0xc0004000 ditambahkan ke alamat
  • Hasil konversi dibuat dalam format seperti sysInit c0004000 f, archPwrDown c0004094 f, lalu dimuat dari Script Manager Ghidra
  • Setelah nama fungsi masuk, beberapa field DAT_ ditetapkan sebagai pointer, dan nama parameter diubah menyesuaikan string debug, sehingga hasil dekompilasi DevHTTPResponseStart bisa dibaca

Kondisi deteksi hotspot

  • DevHTTPResponseStart melihat status respons HTTP, URL, dan header untuk menentukan apakah Wi-Fi AP telah diautentikasi
  • Pada respons HTTP 200 OK, harus ada cookie domain Yahoo di header respons agar dianggap berhasil autentikasi
    • Target pemeriksaan adalah domain=.yahoo, Domain=.yahoo, domain=kr.yahoo, Domain=kr.yahoo
    • Jika kondisi terpenuhi, p_request_ongoing diubah menjadi 0, dan jika browser belum terautentikasi, safnotify_auth_ap(0) dipanggil
  • Pada redirect HTTP 301/302/307, string yahoo. di dalam URL diperiksa
    • Jika yahoo. tidak ada atau berada setelah url + 11, dianggap tidak menemukan Yahoo
    • Jika framebuffer browser belum aktif dan belum terautentikasi, safnotify_auth_ap(1) dipanggil
    • Jika yahoo. berada di bagian awal, autentikasi dianggap berhasil dengan safnotify_auth_ap(0)
  • Status negatif mengembalikan false seperti request yang dibatalkan
  • Pada status positif yang bukan 200 maupun redirect, hasil berbeda tergantung status framebuffer browser

Pemeriksaan Yahoo yang rusak setelah TLS dan bypass

  • URL yang diminta kamera adalah http://www.yahoo.co.kr/
  • Jika diminta langsung, server merespons HTTP/1.1 301 Moved Permanently dengan Location: https://www.yahoo.com/
  • Di https://www.yahoo.com/, substring yahoo. berada di posisi 12
  • Kode mengharuskan yahoo. berada di salah satu dari 11 posisi pertama, sehingga pemeriksaan ini rusak setelah transisi ke HTTPS
  • Untuk melewati pemeriksaan hotspot, record DNS harus diarahkan ke server lain, dan server tersebut harus melakukan redirect HTTP ke nama yang lebih menyerupai Yahoo atau menetapkan cookie domain Yahoo
  • Setelah patch samsung-nx-emailservice, kamera benar-benar terhubung dan meng-upload foto

Kamera lain yang menerapkan bypass yang sama

  • Analisis ini berhasil memahami dan melewati deteksi hotspot kamera Wi-Fi Samsung WB850F berdasarkan satu fungsi yang direkayasa balik
  • Patch akhirnya kecil, tetapi karena cara deteksi yang diimplementasikan insinyur Samsung, sulit menebak metode bypass hanya dari pelacakan paket
  • Setelah mengetahui apa yang harus dicari, bypass yang sama diterapkan juga pada kamera yang menanyakan MSN.com
  • Hasilnya, EX2F, ST200F, WB3xF, dan WB1100F ditambahkan ke daftar kamera yang didukung
  • Main_Image memiliki lebih dari 77 ribu fungsi, sehingga masih banyak target analisis untuk lebih memahami cara kerja kamera digital

1 komentar

 
GN⁺ 2024-05-26
Komentar Hacker News
  • Saya lebih menyukai bagian https://op-co.de/blog/posts/samsung_nx_cryptofail/#index3h3
    Benar-benar contoh kegagalan enkripsi firmware yang mengejutkan

  • Pekerjaan yang hebat. Saya penasaran apakah ada rencana untuk membuat tutorial tentang metode reverse engineering ini

    • Sebenarnya saya berharap tulisan ini memberikan informasi yang cukup untuk berfungsi sebagai tutorial
      Saya hanya melewatkan bagian-bagian yang mudah dicari di Google
  • Yang saya inginkan hanyalah, saat mengambil foto dSLR dengan tombol kamera, beberapa saat kemudian gambar itu sudah masuk ke Apple Photos

    • Dulu ada kartu SD dengan Wi-Fi bawaan yang bisa menyinkronkan foto secara otomatis, tetapi Eye-Fi, pemain utama di bidang itu, sudah tutup, dan sepertinya belum ada yang membuat produk baru yang bekerja dengan layanan cloud modern
      Smartphone tampaknya hampir menghapus pasar kamera konsumen, sehingga permintaannya kurang. Sebagai ide proyek, bisa mencoba mencari cara memasukkan ESP32 ke dalam kartu SD
    • Canon dSLR yang memiliki Wi-Fi sepertinya bisa memakai FTP
      Bisa juga terhubung ke ponsel, tablet, dan situs web, tetapi membutuhkan aplikasi atau layanan. Dokumen untuk mengirim langsung dari kamera lewat FTP: https://gdlp01.c-wss.com/gds/5/0300024975/01/eos5d-mk4-wff-i... halaman 113. Tautan tersebut adalah EOS 5D Mark IV (WG) Wi-Fi (Wireless Communication) Function Instruction Manual
    • Samsung NX1 dan NX500 yang menjalankan Linux bisa cukup mudah dibuatkan skrip untuk mengunggah JPEG atau RAW ke layanan online apa pun, asalkan ada jaringan Wi-Fi
      Sayangnya, modelnya sudah berumur 10 tahun dan jarang juga di pasar barang bekas
    • Seri Nikon Z dengan Snapbridge hampir menjadi opsi terbaik untuk kebutuhan itu
      Bisa dipasangkan lewat Wi-Fi atau Bluetooth, dan jika mau, Anda bisa mengendalikan kamera dari jarak jauh dengan iPad sekaligus melihat layarnya
    • Ini sudah bisa dilakukan untuk Google Photos, jadi yang ini juga semestinya bisa: https://www.stg-uploader.xyz/