Skip to content

LeapFrog

Stack üzerindeki bir saved return address'teki bit'leri flip'lemek için Rowhammer kullanarak, bir fonksiyonun nereye return ettiğini yeniden konumlandır ve böylece execution'ın güvenlik açısından kritik bir kod bölgesini — bir authentication check'i, bir encryption round'unu ya da protocol padding'ini — atlamasını sağla.

Mechanism

Saved bir PC'deki bit flip, bir instruction-skip primitive'idir

Rowhammer'ın ders kitabı hedefleri data ve page table'lardır. LeapFrog ise bellekte saklanırken Program Counter değerini hedefler — çoğunlukla bir call sırasında user ya da kernel stack'ine push edilmiş bir return address. Saldırgan o saved return address'teki bir bit'i flip'lerse, fonksiyon farklı bir konuma return eder. Flip'i, yeni hedef güvenlik açısından kritik bir pattern'in hemen ötesine düşecek şekilde seçmek, return'de CPU'nun o kodu fiilen atlamasını sağlar.

Bu bir data corruption'dan ziyade Rowhammer kaynaklı bir control-flow fault'tur: atlanan bölge bir parolayı doğrulayan karşılaştırma, bir cipher'ın bir round'u ya da bir protokoldeki bir padding check olabilir. Bir "LeapFrog gadget", (a) return address'i (PC'yi) stack'teki hammer'lanabilir bir DRAM konumuna saklayan ve (b) küçük bir return-address kaymasının üzerinden atlayabileceği güvenlik açısından kritik bir pattern'e sahip herhangi bir victim koddur.

Bu, Rowhammer + memory templating üzerine kuruludur ve kavramsal olarak FAULT+PROBE'a komşudur (ikisi de directional flip'leri salt corruption yerine kontrol için yeniden kullanır). Ayrıca stack'e spill edilen register değerlerini hedefleyen Mayhem'e de yakındır: Mayhem geçici register durumunu flip'lerken LeapFrog saved return address'i flip'ler — ikisi de stack-resident bir değeri savunmasız bir window boyunca hammer'lar.

Walkthrough

1. LeapFrog gadget'larını bul. Victim kodu, PC/return address'in flip'lenebilir bir stack konumuna spill edildiği ve tek bir küçük kaymanın kritik bir check'i atladığı yerler için sistematik biçimde tara.

gadget search:
  locate saved return addresses on the stack
  find flips that shift return target past a security-critical block
  rank by reliability + which check gets skipped

2. Template'le ve hizala. DRAM'i, directional flip'i saved return address'te gereken bit değişimini veren bir cell için profille; kurbanın stack'ini memory massaging kullanarak return address'in o cell'e düşeceği şekilde organize et.

3. Doğru anda hammer'la. Victim'i tetikle, saved return address'i flip'lemek için hammer'la ve fonksiyonun bypass edilen kodun ötesine return etmesine izin ver.

Demonstrated targets (EuroS&P 2025)
- TLS handshake client: induced instruction skip in the client app
- OpenSSL: real-world code-in-the-wild instruction skip
effect: return address repositioned -> security-critical pattern skipped

Timing/yerleşim duyarlı ama yüksek etkili

LeapFrog, geçici olarak saklanmış bir return address ile hizalanmış doğru flip'lenebilir cell'e ve savunmasız window'a zamanlanmış bir hammer'a ihtiyaç duyar. İsabet ettiğinde sonuç ağırdır: tek bir flip, secret veriye hiç dokunmadan bir authentication ya da kriptografik adımı etkisiz kılabilir.

Detection

  • Control-flow anomalileriyle aynı anda gerçekleşen ECC corrected-error olayları.
  • Aralıklı olarak tetiklenen stack canary'ler / return-address integrity check'leri.

Mitigation

  • Control-flow integrity / shadow stack'ler bozulmuş bir return target'ı tespit eder.
  • TRR / artırılmış refresh / ECC flip'leri engeller ya da düzeltir.
  • Yedekli/kopyalanmış kritik check'ler ile tek bir skip onları bypass edemez.

References