Emulating Samsung's Baseband for Security Testing (ShannonEE)¶
Samsung "Shannon" baseband firmware'ini cihaz dışında boot eden bir re-hosting/emulation ortamı; böylece firmware'in RTOS'u ve protocol stack'leri bir telefon ya da canlı radyo olmadan fuzz'lanıp incelenebilir.
Mechanism¶
Invariant: bir baseband, RTOS çalıştıran bir ARM SoC'sinden ibarettir — onu re-host edersen radyo opsiyonel hale gelir
Bir cellular baseband, gerçek donanım üzerinde opak ve test edilmesi zordur: ayrı bir işlemcidir, debugger erişimi yoktur, sadece canlı RF beslendiğinde çalışır ve bir crash tüm modemi düşürür. ShannonEE'nin (Hernandez, Muench et al., Black Hat USA 2020) arkasındaki içgörü, Shannon firmware'inin proprietary bir RTOS çalıştıran sıradan ARMv7-R kodu olmasıdır — yani re-host edilebilir: bir emülatöre yüklenip cihaz dışında çalıştırılabilir.
Re-hosting yalnızca firmware'in ortamını tatmin edersen çalışır. İki yapısal gereksinim şunlardır: (1) peripheral modeling — firmware memory-mapped donanıma (UART, timer'lar, mailbox'lar, interrupt controller) dokunur; modellenmemiş read/write'lar yakalanıp makul şekilde cevaplanmalıdır yoksa boot takılır; ve (2) RTOS fidelity — scheduler, timer interrupt'ları ve memory-protection kurulumunun yeterli bir kısmı "çalışmalı" ki task'lar oluşturulup switch'lenebilsin, çünkü test etmek istediğin protocol parser'ları RTOS task'ları olarak koşar.
ShannonEE bunu, avatar2'yi (orchestration / heterojen target kontrolü ve memory layout) PANDA ile (instruction seviyesinde introspection ve record/replay sağlayan QEMU tabanlı bir whole-system motoru) birleştirerek karşılar. RTOS bir steady state'e ulaştığında, over the air erişilebilen message-parsing task'ları saldırgan-kontrollü input ile deterministik olarak ve ölçekte sürülebilir — ki fuzzing'in tam olarak ihtiyacı budur. ShannonEE daha sonra FirmWire oldu ve yaklaşımı daha fazla baseband'e genelledi.
Walkthrough¶
Public konuşma ve open-source projeden temsili workflow (illustrative):
- Firmware'i edin ve unpack et. Shannon modem image'ları (
modem.bin, ~30 MB, 65k+ fonksiyon) bir Samsung firmware paketinden çıkarılır ve load address ile TOC section'larını geri elde etmek için projenin tooling'iyle parse edilir:
git clone https://github.com/grant-h/ShannonBaseband
# parse the Shannon TOC / load segments to memory-map the image
- Firmware'i emülatörde boot et. avatar2 image'ı yerleştirir ve PANDA reset vector'den itibaren çalıştırır. Modellenmemiş peripheral erişimleri, boot ilerleyebilsin diye hazır değerler döndüren Python callback'leri tarafından trap'lenir:
# illustrative peripheral hook (conceptual)
@panda.cb_mmio_read
def on_mmio(addr, size):
return peripheral_model.read(addr, size) # answer UART/timer/mailbox reads
??? example "Modelleme olmadan boot neden takılır" RTOS, çıplak bir emülatörde asla tetiklenmeyen bir status register üzerinde spin'ler ya da bir timer interrupt'ını bekler. Timer'ı (periyodik interrupt'lar iletmek için) ve interrupt controller'ı modellemek, scheduler'ın ilerleyip task switch'leri gerçekleştirmesini sağlayan şeydir; böylece execution erken init'te asılı kalmak yerine protocol stack'e ulaşır.
-
Bir parser task'ına ulaş ve snapshot al. Task switching çalışmaya başladığında, execution bir message-handling task'ına (örn. bir LTE/5G NAS ya da call-control codec) sürülür. PANDA'nın record/replay'i veya bir snapshot, bu state'i fuzzing entry point'i olarak sabitler.
-
Coverage-guided fuzzing. Konuşma, mutasyona uğramış protocol mesajlarının task entry'sine enjekte edilmesi için TriforceAFL'in (full-system QEMU emulation üzerinde AFL) port edilmesini anlatır; QEMU'dan türetilen edge coverage AFL'in bitmap'ini besler. Crash'ler (fault'lar / RTOS assertion'ları) bir telefonu brick'lemek yerine emülatör tarafından yakalanır:
afl-fuzz -i seeds/ -o out/ -- ./shannon_harness @@
# coverage-guided mutation of NAS / call-control messages
Bu yaklaşım, sonraki public baseband re-hosting çalışmalarını yansıtır — bkz. basesafe-baseband-sanitized-fuzzing-through-emulation.md, firmwire-transparent-dynamic-analysis-for-cellular-baseband.md, and breaking-band-reverse-engineering-and-exploiting-the.md.
Detection¶
Re-hosting bir defensive research yöntemidir, over-the-air bir saldırı değil; dolayısıyla buradaki "detection", platformu baseband bug'larını bulmak ve triage etmek için kullanmak anlamına gelir:
- Emülasyonda crash triage. Fault'lar ve RTOS assertion failure'ları PANDA/QEMU içinde tam register ve memory state ile ortaya çıkar — JTAG yok, brick'lenmiş modem yok — bu da protocol stack'teki memory-corruption sınıflarının root-cause analizini mümkün kılar.
- Coverage tracking, hangi message handler'ların çalıştırıldığını belirler; böylece test edilmemiş attack surface (erişilebilir parser'lar) önceliklendirilebilir.
- Differential boot logs. Emüle edilmiş boot/console çıktısını firmware sürümleri arasında karşılaştırmak, bir vendor güncellemesinden sonra yeniden fuzz'lanmaya değer değişmiş ya da yeni eklenmiş parser'ları öne çıkarır.
Mitigation¶
- Harness'in bulduğu bug'ları düzelt. Amaçlanan sonuç, crash'leri patch'lenmeleri için Samsung'a geri beslemektir; coverage-guided emülasyon, sistematik keşfi disclosure öncesinde uygulanabilir kılar.
- Erişilebilir attack surface'i azalt. Kullanılmayan RAT'leri/özellikleri devre dışı bırakmak (örn. operasyonel olarak kabul edilebilir yerlerde VoLTE/Wi-Fi calling), bir saldırganın vurabileceği network-erişilebilir parser kümesini küçültür — emülatörün fuzz'ladığı aynı surface.
- Baseband çevresinde defense-in-depth. Modemi AP'nin perspektifinden untrusted olarak ele al: inter-processor sınırını zorla (IOMMU/shared-memory validation) ki compromise olmuş bir baseband application processor'a kolayca pivot edemesin.
- Re-hosting'i CI'da benimse. Vendor'lar, regresyonları sevkiyat öncesinde yakalamak için yeni firmware build'lerine karşı sürekli olarak emüle edilmiş, coverage-guided fuzzing çalıştırabilir.