Bluethunder (SGX branch predictor)¶
CPU'nun 2-level (history tabanlı) directional branch predictor'ını suistimal ederek, BranchScope gibi yalnızca PHT'ye dayanan saldırılardan çok daha az training overhead'iyle bir SGX enclave içindeki input'a bağlı control flow'u leak et.
Mechanism¶
Note
Basit bir directional predictor (BranchScope'un saldırdığı türden) 2-bit counter'lardan oluşan bir Pattern History Table'ı yalnızca branch address ile indexler. Modern core'lar bir 2-level predictor kullanır: branch başına bir history register son taken/not-taken desenini kaydeder ve o history (address ile birleşerek) ikinci bir counter tablosunu indexler. Dolayısıyla durum uzayı tek bir counter değil, history'dir — Bluethunder'ın tam olarak istismar ettiği budur. Değişmez nokta: 2-level predictor'ın history/tabloları enclave ile aynı yerde bulunan saldırgan bağlamı arasında paylaşılır ve enclave exit'te flush'lanmaz. Saldırgan, kendi branch'lerini aynı 2-level yapıya çarpıştırarak, enclave'in secret'a bağlı branch'inin history-indexed entry'yi nasıl güncellediğini okur. Bir gözlem tek bir counter adımı yerine bütün bir history desenini encode ettiği için, aynı control-flow bit'ini kurtarmak BranchScope'a göre çok daha az training gerektirir — 52x'lik bir avantaj olarak raporlanmıştır — daha yüksek bandwidth ve doğruluk sağlar.
Walkthrough¶
Saldırgan, bir enclave'e karşı kötü niyetli bir OS/kardeş bağlam çalıştırır, enclave'i single-step ya da time-slice eder ve paylaşılan 2-level directional predictor'ı gözlemler.
-
2-level predictor'ı prime'la — enclave branch'iyle çarpışan entry'de bilinen bir history deseni kuran shadow branch'ler yürüterek.
-
Enclave'i resume et, böylece secret'a bağlı conditional branch'i yürütülsün ve history-indexed counter'ı güncellesin.
-
Çarpışan branch'i probe et ve mispredict ile doğru prediction'ı ölç, enclave'in history-indexed entry'yi nasıl oynattığını oku — yani secret branch'in taken/not-taken sonucunu.
Raporlanan vaka çalışmaları ve sonuçlar
Target: Intel SGX enclave, 2-level directional branch predictor
vs: BranchScope (PHT-only) — Bluethunder ~52x lower training overhead
Case 1: vfprintf() in the Intel SGX SDK — extract format-string info
Case 2: RSA decryption in mbed TLS — recover the RSA private key with
96.76% accuracy in a single run
Warning
Diğer SGX branch-predictor saldırıları gibi Bluethunder de, kurban enclave'i schedule edebilen, kesebilen ya da single-step edebilen ve predictor'da çarpışan saldırgan kodunu aynı yere yerleştirebilen privileged bir saldırgan (kötü niyetli OS/hypervisor) varsayar. Control-flow leakage'ını hedefler; secret'a bağlı branch'ler ön koşuldur.
Detection¶
Genel ve düşük doğruluklu: anormal branch-misprediction oranlarını ya da single-stepping'e işaret eden olağandışı yüksek enclave AEX/interrupt oranlarını izle. Savunmalar önleyicidir.
Mitigation¶
Enclave entry/exit'te branch-predictor durumunu flush'la/partition'la; enclave'ler için SMT'yi devre dışı bırak; secret'a bağlı kararlar için branchless / data-oblivious kod yaz (secret kontrollü conditional branch yok); Zigzagger tarzı control flow linearizasyonu (Branch Shadowing'e karşı önerildiği gibi).