Skip to content

FirmWire: Transparent Dynamic Analysis for Cellular Baseband Firmware

Fuzzing, debugging ve cellular protocol bug'larının root-cause analizi için Samsung Shannon ve MediaTek baseband firmware image'larını boot eden, açık kaynaklı full-system emulation platformu (NDSS 2022).

Mechanism

FirmWire (Hernandez, Muench, Maier, Milburn, Park, Scharnowski, Tucker, Traynor, et al., NDSS 2022) zor bir defensive problemi ele alır: baseband firmware, devasa bir over-the-air attack surface üzerinde, otuz yıllık cellular standartlardan gelen yüzlerce message type'ı decode eder; ama kod opak, proprietary modem core'larda çalıştığı için çok az güvenlik analizi görür.

Rehosting'i mümkün kılan invariant: core'u emulate et, RTOS'u intercept et

Bir baseband image, source'u, debugger'ı olmayan ve gerçek hardware peripheral'lara sıkıca bağlı proprietary bir ARM modem SoC için firmware'dir. FirmWire bunu rehosting ile analiz edilebilir kılar — firmware'i silicon üzerinde değil, bir full-system emulator (QEMU/PANDA tabanlı) içinde çalıştırarak. Enabling insight, firmware'in keşfedilebilir task ve message-passing yapılarına sahip bir vendor RTOS (örn. ShannonOS) üzerinde oturmasıdır. FirmWire bunları pattern/symbol analizi ile bulur, sonra eksik hardware peripheral'ları firmware'in boot olup protocol parser'larına ulaşmasına tam yetecek kadar transparent biçimde modeller. Boot olduktan sonra, message'ları doğrudan modem'in internal task queue'larına inject eder — radio layer'ı tamamen bypass ederek — böylece bir analist keyfi bir GSM/LTE message'ı belirli bir handler'a teslim edebilir. Core emulate edilmiş haldeyken FirmWire, TriforceAFL tarzı hypercall'lar üzerinden AFL++'a köprü kurar ve fuzz edilemez proprietary bir blob'u coverage-guided fuzzing target'ına çevirir. Analiz için (saldırı için değil) sömürülen invariant determinism'dir: message dispatch'ten hemen önce alınan bir snapshot tekrar tekrar restore edilebilir, böylece her fuzz case birebir aynı state'ten başlar ve crash'ler reproducible olur.

Walkthrough

Aşağıdakiler gerçek, dokümante edilmiş FirmWire komutlarıdır. Platform defensive araştırma için açık kaynak yayınlanmıştır.

Bir Shannon modem image'ı boot et (loader ve machine otomatik algılanır):

$ ./firmwire.py modem.bin

Public bir Shannon image'ı doğrudan URL ile fetch edip boot edebilir:

$ ./firmwire.py https://github.com/grant-h/ShannonFirmware/raw/master/modem_files/CP_G973FXXU3ASG8_CP13372649_CL16487963_QB24948473_REV01_user_low_ship.tar.md5.lz4

Gerekirse GDB/peripheral port'larını sınırla:

$ ./firmwire.py --consecutive-ports 10000 modem.bin

Bir protocol handler'ı AFL++ ile coverage-guided fuzzing — uzun modem boot'unun yalnızca bir kez ödenmesi için önceden hazırlanmış bir snapshot restore edilir:

$ afl-fuzz -i in -o out -U -- \
    ./firmwire.py --restore-snapshot fuzz_base \
    --fuzz gsm_cc --fuzz-input @@ modem.bin

Stateful firmware'de daha yüksek throughput için persistent-mode fuzzing:

$ afl-fuzz -i in -o out -U -- \
    ./firmwire.py --restore-snapshot fuzz_base \
    --fuzz gsm_cc --fuzz-input @@ --fuzz-persistent 1000 modem.bin

Root-cause analizi için tek bir crash'leyen input'u logging ile replay/triage et:

$ ./firmwire.py --restore-snapshot fuzz_base \
    --fuzz-triage gsm_cc --fuzz-input ./crash.bin modem.bin
Notes from the documentation
# ./firmwire.py modem.bin auto-recognizes the firmware, unpacks it,
#   and selects a loader + machine.
# Snapshots (fuzz_base) are required: modem boot is slow and AFL++
#   would otherwise time out.
# Fuzz harnesses (e.g. gsm_cc, GSM Call Control) are built with the
#   "modkit" and talk to AFL++ via hypercalls.
# Supported: a subset of Samsung Shannon and MediaTek (MTK) images.

FirmWire, exynos-modem-internet-to-baseband-rce-cve-2023-24033.md ve exynos-modem-internet-to-baseband-rce-cve-2023-26496-cve.md gibi açıklanmış baseband bug'larını canlı network'lere dokunmadan incelemek için güvenli ortamdır.

Detection

FirmWire bir defensive analiz aracıdır, saldırı değil; dolayısıyla buradaki "detection", onu adversary'lerden önce baseband vulnerability'lerini bulmak için kullanmak demektir:

  • Protocol handler'ların coverage-guided fuzzing'i, memory-corruption bug'larını (Exynos CVE'leriyle aynı SDP/IMS parser sınıfı) reproducible crash'ler olarak yüzeye çıkarır.
  • Snapshot + triage replay (--fuzz-triage) deterministic root-cause analizi sağlar ve defender'ların bir vendor patch'inin crash'leyen input'u gerçekten kapatıp kapatmadığını doğrulamasına izin verir.
  • Vendor'lar ve araştırmacılar FirmWire harness'larını CI'a entegre ederek baseband image'larını bilinen bug sınıfları için regression-test edebilir.

Mitigation

  • Rehosting/fuzzing'i SDLC'ye dahil et. Architectural çıkarım, baseband firmware'in proprietary olmasına rağmen fuzz edilebileceğidir; vendor'lar protocol parser'ları (GSM/LTE/IMS message handler'ları) release öncesi fuzz etmeli.
  • FirmWire'ın bulduğu crash'leri, remotely-reachable parser'lara öncelik vererek düzelt ve regression-test et.
  • Daha derin bug bulma için sanitized emulation yaklaşımlarıyla birleştir — bkz basesafe-baseband-sanitized-fuzzing-through-emulation.md ve emulating-samsung-s-baseband-for-security-testing.md.

References