Execution Port Contention (PortSmash)¶
Paylaşılan execution port'larındaki contention'ı time'layarak birlikte yerleşik bir SMT sibling'ının instruction mix'ini çıkarsa — memory ve shared cache gerektirmeyen bir port-contention timing channel.
Mechanism¶
Neden çalışır
Bir SMT/Hyper-Threading core'unda iki logical thread, sabit bir issue port seti üzerinden erişilen core'un execution unit'lerini paylaşır. Her micro-op, onu çalıştırabilen bir port'a dispatch edilmek zorundadır; her iki sibling aynı cycle'da aynı port'a ihtiyaç duyduğunda biri geciktirilir.
PortSmash, bu contention'ı bir covert/side channel'a dönüştürür:
- Leak: attacker thread'i sürekli olarak belirli bir port'a bağlanan instruction'lar (örn. yalnızca port 1 veya port 5'in hizmet verebileceği bir chain) çalıştırır ve sabit bir batch'in ne kadar sürdüğünü time'lar. Victim sibling de o port'u kullandığında attacker'ın batch'i daha yavaştır; victim başka port'ları kullandığında daha hızlıdır.
- Transmit/decode: batch başına latency trace'i, port baskısının bir zaman serisidir. Secret'a bağlı control flow (örn. bir modular-exponentiation / scalar-multiplication loop'undaki bir branch) farklı instruction mix'leri çalıştırdığı için, trace victim'in secret'a bağlı yolunu ortaya çıkarır.
Cache attack'lerinin aksine, channel port seviyesindedir — herhangi bir shared memory veya shared cache line olmadan çalışır, yalnızca SMT yoluyla aynı fiziksel core üzerinde co-residency gerektirir.
Walkthrough¶
Spy, sıkı bir port-bound loop çalıştırır ve victim (SMT sibling) secret'a bağlı bir operasyon gerçekleştirirken iterasyon başına timing'i kaydeder:
// Conceptual PortSmash spy: saturate one port, time the batch.
static inline uint64_t batch_latency(void) {
uint64_t t0 = rdtscp();
// Long dependency chain of ops that contend for a specific port,
// e.g. repeated CRC32 / specific ALU ops mapping to one port:
asm volatile(
"mov $1024, %%ecx\n"
"1:\n"
" crc32 %%rax, %%rax\n" // illustrative port-bound op
" dec %%ecx\n"
" jnz 1b\n"
::: "rax","ecx","cc");
return rdtscp() - t0;
}
// for(;;) record batch_latency(); -> high latency == victim used that port
Ortaya çıkan latency zaman serisi, secret'a bağlı branch'leri çıkarmak için post-process edilir (alignment + classification) — örn. victim'in modular arithmetic'inden bir ECDSA/TLS private key geri elde etmek.
Beklenen trace (kavramsal)
Mitigation¶
- SMT/Hyper-Threading'i devre dışı bırak (standart workaround); CVSS'te moderate derecelendirilmiş.
- Secret'lardan bağımsız, port-stable bir instruction mix'e sahip constant-time crypto.
- Güvenilmeyen kod bir victim ile asla fiziksel bir core paylaşmasın diye scheduler isolation.