Drammer¶
Android/ARM üzerinde, öngörülebilir physical-allocator reuse'unu (Phys Feng Shui) kullanarak bir page table'ı flip'lenebilir bir cell'e oturtan deterministik Rowhammer privilege escalation'ı — software bug yok, izin yok.
Mechanism¶
Determinizm donanımdan değil, allocator'dan gelir
Önceki Rowhammer exploit'leri olasılıksal memory massaging'e ya da mobilde
bulunmayan veya kilitlenmiş olan özel feature'lara (örn. pagemap, transparent
huge pages) dayanıyordu. Drammer'ın temel kavrayışı, kernel'in physical page
allocator'larının öngörülebilir davrandığıdır. Linux/Android üzerinde buddy
allocator ve Android ION contiguous-memory allocator'ı en son free edilen
bölgeyi önce geri verir (LIFO benzeri reuse). Bir size class'ı tüketip ardından
kontrollü bir sırayla free ederek, saldırgan allocator'ı seçtiği bir nesneyi
seçtiği bir physical konuma yerleştirmeye zorlayabilir — işte bu Phys Feng
Shui'dur.
Drammer önce belleği template'leyerek güvenilir şekilde flip'lenen bir cell bulur (bir "1-to-0" ya da "0-to-1" konumu), sonra o konuma bir page table page massage'ler ki bir flip bir page-table entry (PTE)'yi değiştirsin. Flip'lenmiş bir PTE, kurbanın kendi page table'ını saldırgan kontrolündeki bir physical frame'e işaret edecek şekilde ayarlanabilir; bu da kernel page table'lar üzerinde read/write ve dolayısıyla root verir.
Drammer, mobilde lokal olarak uygulanan Flip Feng Shui ailesinin bir örneğidir ve standart hammer loop'una ek olarak ARM'da double-sided hammering'e dayanır.
Walkthrough¶
1. Bit flip'leri için profil çıkar (templating). ION üzerinden büyük chunk'lar allocate et, komşu row'ları hammer'la ve hangi offset'lerin hangi yönde flip'lendiğini kaydet.
$ ./drammer
[*] Obtaining contiguous memory via ION...
[*] Hammering, searching for flippable cells...
[+] flip at PA 0x... bit 12 1 -> 0 (usable for PTE)
2. Phys Feng Shui. Template'lenen chunk'ı free et, sonra bir page-table page allocation'ını tetikle ki buddy/ION allocator flip'lenebilir cell'i içeren tam o physical frame'i yeniden kullansın.
3. Bir PTE oturt ve hammer'la. Vulnerable cell'in üzerine oturan bir PTE ile, PTE'nin physical-frame-number alanındaki bir bit'i flip'lemek için tekrar hammer'la; böylece bir virtual page'i saldırgan kontrolündeki bir page table'a yönlendir.
Conceptual exploit flow
Donanıma bağımlı, ama app ile teslim edilebilir
Drammer'ın DRAM'i gerçekten flip'lenen bir telefona ihtiyacı var, ama exploit'in kendisi sıradan bir app olarak gelir: root yok, özel izin yok, software CVE yok. Onu dikkat çekici yapan da buydu — saf bir donanım fault'unu deterministik olarak silahlaştırdı.
Mitigation¶
- ION contiguous allocator'larını devre dışı bırakmak/kilitlemek deterministik placement primitive'ini ortadan kaldırır (Google, disclosure sonrası bazı ION açıklığını mitigate etti).
- Target Row Refresh / artırılmış refresh flip uygunluğunu azaltır (sonradan many-sided/TRRespass tarafından bypass edildi).
- ECC (mobilde nadir) single-bit flip'leri düzeltir.
References¶
- Van der Veen et al. Drammer: Deterministic Rowhammer Attacks on Mobile Platforms. CCS 2016 — https://vvdveen.com/publications/drammer.pdf
- VUSec. Drammer: Flip Feng Shui Goes Mobile. — https://www.vusec.net/projects/drammer/
- vusec/drammer (test binary) — https://github.com/vusec/drammer