MTE Tag Brute Force¶
ARM MTE'nin 4-bit tag'i 16 olası değer verir; biri (
GCR_EL1.Excludeile) reserve edildiği için pratikte ~15 kullanılabilir kalır, bu yüzden tek bir illegal erişimin tespit edilmeden geçme şansı kabaca 1/15'tir (%6–7) — saldırganların tag'leri tahmin ederek ya da öğrenerek büyütmeye çalıştığı iyi bilinen probabilistik limit.
Mechanism¶
Neden entropy her şeyin özüdür
ARM MTE, her 16-byte granule başına bir
4-bit allocation tag ve pointer'ın top byte'ında eşleşen bir tag saklar; bir
load/store yalnızca ikisi farklı olduğunda fault'lar. Dört bit 16 olası tag
değeri (0–15) demektir — ve pratikte bir değer (çoğunlukla 0) GCR_EL1.Exclude
mask'i üzerinden reserve edilir, ~15 kullanılabilir bırakır. Project Zero,
bunun random bir tahmin için "yaklaşık 1/15 başarı şansı" verdiğini not eder,
yani tek bir tespit edilmemiş illegal erişimin tespitten kaçma olasılığı kabaca
%6–7'dir.
Bu yüzden MTE'nin dayandığı defansif özellik tag confidentiality'dir: "tag değerlerinin gizliliği, bir mitigation olarak memory-tagging'in etkinliğinin anahtarıdır." Bir saldırgan bir target granule'ün tag'ini öğrenebilir ya da tahmin edebilirse, "geçersiz memory erişimlerinin doğru tag'leneceğini ve dolayısıyla tespit edilemeyeceğini doğrudan ya da dolaylı olarak sağlayabilir" — probabilistik savunmayı sıfıra yakın bir noktaya çökertir.
Düşük entropy'nin ne kadar istismar edilebilir olduğunu iki faktör belirler:
- Tekrarlı denemeler. Deneme başına 1/15, yalnızca saldırgan sonuç almadan birçok bağımsız deneme yapabiliyorsa zayıftır. Her yanlış tahmini ölümcül bir fault'a çeviren bir savunma, etkili başarı olasılığını 1/15'te tutar.
- Bir oracle. Yanlış bir tahmin gözlemlenebilir ama ölümcül değilse, saldırgan körlemesine tahmin etmek yerine tag'leri doğrudan prob edebilir.
Walkthrough¶
Bu kayıt kavramsaldır — 4-bit tag'in neden deterministik değil, probabilistik bir savunma olduğunu ve hangi hardening'in onu güçlü tuttuğunu açıklar. Hiçbir silahlandırılmış chain verilmez.
1. Entropy matematiği. ~15 kullanılabilir tag ile, kör tahmin p ≈ 1/15
olasılıkla başarılı olur. Önemli olan şu: her yanlış deneme process'i ya da
thread'i crash ettirirse, saldırgan iterate edemez: başarı başına beklenen iş
yüksek kalır ve her başarısızlık gürültülüdür.
2. Sync mode invariant'ı korur; async mode onu zayıflatır.
prctl(PR_SET_TAGGED_ADDR_CTRL, ...) ile seçilen mode, yanlış bir tahminin bir
oracle olup olmadığına karar verir:
PR_MTE_TCF_SYNC -> tag mismatch faults on instruction retirement (SIGSEGV / SEGV_MTESERR)
PR_MTE_TCF_ASYNC -> mismatch does not fault immediately; flagged later (SEGV_MTEAERR)
Async neden daha brute-force edilebilir
Project Zero: synchronous modda "tag check failure'ları instruction retirement'ta bir donanım fault'uyla sonuçlanır," bu yüzden saldırgan geçersiz bir erişimin sonucunu asla gözlemleyemez — yanlış bir tahmin sadece bir crash'tir. Asynchronous modda "tag check failure'ları doğrudan bir fault'la sonuçlanmaz. Geçersiz read'lerin sonuçları ve geçersiz write'ların etkileri architecturally observable'dır," ki bu da saldırganın bir tahminin doğru olup olmadığını tespit etmesine ve böylece brute-force ya da bir tag oracle inşa etmesine izin verir. Analiz, "hard deterministic mitigation" için gerekli olanın Sync-MTE olduğunu söyler.
Side channel'lar tag'leri hiç tahmin etmeden leak edebilir
Sync modda bile, "Spectre tarzı speculative side-channel'lar tag confidentiality'yi kırmak için kullanılabilir" — speculative read'ler, hiçbir zaman bir architectural fault tetiklemeden bir granule'ün tag'ini açığa çıkarabilir. 2024 tarihli TikTag çalışması pratik speculative tag leakage'ı gösterdi. Yani tag gizliliği tek başına sync mode tarafından garanti edilmez; speculation hardening ile birleştirilmelidir.
Detection¶
Sync-mode tag fault'ları si_code = SEGV_MTESERR ile SIGSEGV olarak yüzeye
çıkar; async fault'lar SEGV_MTEAERR olarak. Bir process'ten gelen bir MTE-tagged
fault patlaması, prob etmenin ya da bir brute-force girişiminin güçlü bir sinyalidir
ve bir runtime monitor için kullanışlı bir telemetry hook'udur.
Mitigation¶
(Riski azaltan şey.) Güvenlik-hassas kodu synchronous tag-check modunda
çalıştır ki her yanlış tahmin leak etmek yerine fault'lasın; 4-bit tag'i asla
deterministik bir bariyer olarak görme. Tag reuse'u azalt ve öngörülebilir
değerleri GCR_EL1 exclude mask'i üzerinden exclude et, ilk MTE fault'unda
fail-closed ol ve MTE'yi ASLR ve
speculation savunmalarıyla birlikte kullan ki tek başına bir tag tahmini yeterli
olmasın. Temel mekanizma için bkz. ARM MTE.
References¶
- Project Zero. MTE As Implemented, Part 2: Mitigation Case Studies. — https://projectzero.google/2023/08/mte-as-implemented-part-2-mitigation.html
- Linux kernel docs. Memory Tagging Extension (MTE) in AArch64 Linux. — https://docs.kernel.org/arch/arm64/memory-tagging-extension.html
- TikTag: Breaking ARM's Memory Tagging Extension with Speculative Execution. — https://arxiv.org/html/2406.08719v1