Skip to content

NetSpectre (remote cache/prefetch leak)

İlk tamamen remote Spectre v1 saldırısı: kurbanda saldırgan kontrollü hiçbir kod olmadan, bir bounds check'i network üzerinden mistrain et ve speculatively erişilen secret'ı bir remote Evict+Reload cache channel (~15 bit/saat) ya da bir AVX power-state channel (~60 bit/saat) üzerinden exfiltrate et.

Mechanism

Neden çalışır

Klasik Spectre v1, saldırganın bir cache state'i zamanlamak için kurbanda kod çalıştırmasını gerektirir. NetSpectre bu gereksinimi, saldırıyı kurbanın network'ten erişilebilir kodunda zaten var olan iki gadget'a bölerek ve channel'ı network response timing'i aracılığıyla okuyarak ortadan kaldırır.

  • Leak gadget'ı: bir Spectre v1 bounds-check-bypass gadget'ı. Saldırgan, branch predictor'ı eğitmek için birçok in-bounds istek gönderir, sonra bir out-of-bounds index. CPU, array[secret_index]'i speculatively okur ve secret byte'ı ikinci bir buffer'a dokunmak (ya da bir microarch state'i toggle etmek) için kullanır; architectural sonuç squash edilse bile ölçülebilir bir ayak izi bırakır.
  • Transmit gadget'ı: o microarchitectural ayak izini, saldırganın network üzerinden gözlemleyebileceği bir timing farkına dönüştürür. NetSpectre iki tane kullanır:
    • Remote Evict+Reload (cache): secret bit, belirli bir memory konumunun kurban tarafından cache'lenip cache'lenmeyeceğini belirler. Buradaki "remote", saldırganın uzaktan doğrudan eviction yaptığı anlamına gelmez — kurbanda saldırgan kodu çalışmaz. Saldırgan yalnızca kurbanın network'ten erişilebilir kodunu tetikler ve response latency farklarını (cache hit/miss ile korele) ölçerek secret'a bağlı memory erişiminin olup olmadığını çıkarır.
    • AVX (cache'siz): AVX2 unit'i boştayken power down olur ve "ısınmak" için ekstra cycle alır. Secret bit'e bağlı speculative bir AVX instruction'ı, sonraki bir AVX işleminin latency'sini değiştirir ve bu response süresinde görünür.
  • Amplification: tek bir network ölçümü fazlasıyla gürültülüdür. Saldırgan ölçümü binlerce kez tekrarlar ve ortalamasını alır, milisaniyelik network jitter'ından sub-nanosaniyelik bir microarchitectural farkı çekip çıkarır.

"Gerçek veri sızdırmayan daha zayıf gadget'larla" aynı primitive, saldırganın remote ASLR'ı kırmasını sağlar.

Walkthrough

Saldırgan yalnızca network paketleri gönderir; tüm yürütme kurbanın kendi (savunmasız) request handler'ında gerçekleşir.

Phase 1 — Mistrain:   send N requests with in-bounds index  -> trains predictor
Phase 2 — Leak:       send 1 request with out-of-bounds index
                      -> victim speculatively reads secret, runs transmit gadget
Phase 3 — Measure:    probe the channel and time the response
Repeat Phases 1-3 thousands of times, average -> recover one secret bit

Remote ölçüm loop'u için pseudocode (saldırgan tarafı):

// Conceptual NetSpectre attacker loop (no code runs on the victim).
for (int bit = 0; bit < secret_bits; bit++) {
    reset_channel_state_remote();          // remote evict, or let AVX power down
    for (int i = 0; i < TRAIN; i++)
        send_request(in_bounds_index);     // mistrain the bounds-check branch
    send_request(oob_index_for(bit));      // trigger speculative secret access
    uint64_t t = time_probe_response();    // network round-trip time
    accumulate(bit, t);                    // average over many repetitions
}
// threshold the averaged latencies -> reconstruct the secret bits

Makaleden bildirilen sızıntı oranları:

channel                         leak rate
-----------------------------   ----------------
Remote Evict+Reload (cache)     ~15 bits / hour
AVX power-state (cache-free)    ~60 bits / hour

Warning

NetSpectre yavaştır — saatte onlarca bit — ve kararlı, düşük-jitter bir path artı kurbanın açık kodunda kullanılabilir bir leak+transmit gadget'ı talep eder. Bu bir fizibilite sonucudur (LAN'larda ve Google Cloud VM'leri arasında doğrulanmıştır), hızlı bir exfiltration aracı değildir.

Mitigation

  • Network'e bakan kodda Spectre v1 savunmalarını uygula: bounds check'lerden sonra lfence (ya da eşdeğer speculation barrier'ları), index masking ve speculation altında secret'a bağlı memory erişiminden kaçınma.
  • Timing-channel sinyalini azalt: jitter ekle, rate-limit uygula ya da network'ten gözlemlenebilir timing'i kabalaştır ki amplification pratik olmaktan çıksın.
  • AVX/SIMD power-state davranışını secret'a bağlı path'ten uzak tut.

References