PortSmash (CVE-2018-5407)¶
Bir simultaneous-multithreading (SMT) port-contention timing channel'ı: bir victim ile aynı physical core'u paylaşan bir spy thread, bir OpenSSL ECDSA private key'i recover etmek için execution-port baskısını ölçer.
Mechanism¶
SMT/Hyper-Threading core'larında, iki logical processor physical core'un execution back-end'ini paylaşır, micro-op'ları functional unit'lere (ALU'lar, branch unit, vb.) dağıtan küçük execution port kümesi dahil. Her iki thread aynı cycle'da aynı port'a micro-op issue etmek istediğinde biri geciktirilir. Bu gecikme, contention yapan thread tarafından bir timing değişimi olarak gözlemlenebilir.
Note
Geçilen sınır SMT altında logical-core isolation'dır. Software eş-konumlu thread'lerin izole olduğunu varsayar, ama bir thread'in port allocation pattern'i contention üzerinden sibling'ına sızar. Instruction seçimi secret-bağımlı control flow'a bağlı olduğu için (ör. bir 0 vs 1 key bit için farklı instruction karışımları çalıştıran bir scalar-multiplication ladder'ındaki bir branch), victim'in secret'ı hangi port'ların meşgul olduğunu modüle eder — ve spy bu modülasyonu time-slice başına bir timing trace olarak okur. "Eş-konumlu bir thread benim instruction stream'imi çıkarsayamaz" invariant'ı çöker.
Walkthrough¶
Public PortSmash sürümünü ve IACR ePrint el yazmasını takip eden üst düzey yeniden üretim:
- Eş-konumlandır. Bir spy thread'i victim ile aynı physical core'a (sibling logical CPU) pinle. Multi-tenant bir host'ta bu scheduling'den kaynaklanabilir.
-
Port baskısı üret. Spy, belirli bir execution port'a yönelik biaslı micro-op'lardan oluşan sıkı bir döngüyü tekrar tekrar issue eder ve her batch'i zamanlar.
-
Bir trace yakala. Victim bir ECDSA (P-384) imzası yaparken, spy bu latency'lerin bir zaman serisini toplar — victim'in zaman içindeki port kullanımını yansıtan düşük gürültülü bir contention dalga biçimi.
- Nonce/key'i recover et. scalar-multiplication'daki secret-bağımlı branch'ler, işlenen her bit için ayırt edilebilir bir contention pattern'i üretir. Birçok imza üzerinde signal-processing + lattice teknikleri nonce bit'lerini ve nihayetinde private key'i yeniden inşa eder.
Bu neden cache değil de "port contention"
FLUSH+RELOAD veya PRIME+PROBE'un aksine, PortSmash paylaşılan cache state'ine hiç dokunmaz — back-end execution-unit contention'ını gözlemler. Bu, cache-partitioning savunmalarını ona karşı etkisiz kılar.
Detection¶
- Sibling-thread timing döngüleri. Bir crypto workload'unun sibling logical CPU'sunda yüksek çözünürlüklü timing (
rdtsc) ile sıkı, port-doyuran döngüler yürüten bir thread anormaldir; port-pressure / uop-dispatch event'lerinin performance-counter izlemesi bunu işaretleyebilir. - Co-scheduling anomalileri. Güvenilmeyen bir thread'in güvenlik-hassas bir process ile aynı physical core'da beklenmedik uzun ömürlü eş-konumluluğu.
- Yararlı iş yapmayan bir thread'den gelen yüksek IPC/contention counter'ları sezgisel bir göstergedir.
Mitigation¶
- SMT/Hyper-Threading'i devre dışı bırak — güvenlik-hassas veya multi-tenant workload'lar için; paylaşılan back-end'i kaldırdığı için en sağlam savunma.
- Single-tenant core / sibling-scheduling politikaları. Hiçbir güvenilmeyen thread'in hassas kodla aynı physical core'u paylaşmadığından emin ol (core scheduling, cgroup/affinity isolation).
- Constant-time, secret-bağımsız crypto. OpenSSL etkilenen ECDSA scalar-multiplication'ını sertleştirdi ki instruction seçimi artık secret bit'lere bağlı olmasın, sızan sinyali kaynağında kaldırdı.
- Crypto library'lerini güncel tut — bu açıklamanın tetiklediği constant-time düzeltmeleri içeren sürümlere.