Skip to content

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:

  1. 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.
  2. 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.

    loop:
      issue N ops targeting port p      # e.g. a chain of same-port uops
      t = measure_cycles()              # rdtsc / timestamp delta
      record(t)                         # one sample of the contention trace
    
  3. 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.

  4. 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.

References