PLATYPUS¶
Veriyi ve instruction'ları ayırt etmek için unprivileged Intel RAPL enerji okumalarını suistimal eden, AES-NI anahtarlarını recover eden, KASLR'yi kıran ve SGX secret'larını sızdıran, x86 üzerinde software-tabanlı power side-channel saldırıları.
Mechanism¶
Intel'in Running Average Power Limit (RAPL) arayüzü, ısıl yönetim ve güç bütçeleme için tasarlanmış enerji/güç counter'larını açığa çıkarır. Linux'ta powercap framework'ü bu counter'ları geçmişte unprivileged kullanıcılar tarafından okunabilir yapıyordu. PLATYPUS (Lipp et al., IEEE S&P 2021) bu telemetriyi bir power side channel'a çevirir — herhangi bir oscilloscope veya fiziksel erişim olmadan.
Neden çalışır
Bir CPU'nun bir instruction'ı yürütürken harcadığı enerji, işlediği veriye bağlıdır: farklı operand değerleri ve özellikle operand'ların ve memory load'larının farklı Hamming weight'leri ölçülebilir biçimde farklı miktarlarda güç çeker. RAPL bu güç tüketimiyle doğrudan korelasyonlu değerler raporlar. RAPL düşük çözünürlüklüdür (etkin olarak ~20 kHz, dahili olarak bir running average iken oscilloscope'un GHz örneklemesi karşısında), dolayısıyla tek bir okuma bilgilendirici değildir — ama yeterli tekrar ve istatistiksel toplama ile küçük, instruction-başına, Hamming-weight-bağımlı farklar ayırt edilebilir hale gelir. Bu, klasik differential power analysis'in suistimal ettiği aynı fiziksel sızıntıdır, şimdi tamamen software'de okunuyor.
Walkthrough¶
Savunmasız bir Linux sisteminde, unprivileged RAPL enerji counter'ı powercap sysfs üzerinden açığa çıkarılır:
# Intel RAPL energy counter (microjoules), historically world-readable
cat /sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj
Bir ölçüm primitive'i bu counter'ı (veya altta yatan MSR'yi) bir hedef işlemin etrafında örnekler ve enerji farkını alır:
// Conceptual PLATYPUS measurement loop
uint64_t e0 = read_rapl_energy_uj(); // read /sys/.../energy_uj
victim_operation_with_secret(); // e.g., AES-NI round on a key byte
uint64_t e1 = read_rapl_energy_uj();
record(e1 - e0); // energy delta correlates with data
// aggregate thousands of samples, then correlate energy vs. key hypotheses
Paper'dan gösterilen sonuçlar:
- AES-NI key recovery — side-channel'a dayanıklı implementasyonlardan, Intel SGX enclave'leri içindeki anahtarlar dahil (SGX'ten RSA anahtarları da çıkarıldı).
- KASLR'yi kırma — enerji farkları üzerinden intra-cacheline control flow'u ayırt ederek.
- Secret instruction stream'lerini çıkarsama ve timing'den bağımsız bir covert channel kurma.
Saldırı Sandy Bridge nesli ve sonrası Intel server, desktop ve laptop CPU'larında çalışır.
Warning
Yama öncesi, Linux'ta özel ayrıcalık gerekmiyordu — energy_uj'yi okuyan herhangi bir yerel kullanıcı saldırıyı yapabiliyordu. SGX'e karşı, microcode düzeltmesinden önce ayrıcalıklı bir attacker bile (RAPL MSR'lerini doğrudan okuyabilen) enclave secret'larını sızdırabiliyordu.
Detection¶
Sağlam bir runtime imzası yoktur; saldırı yalnızca bir counter okur. Pratikte, /sys/class/powercap/intel-rapl/.../energy_uj'yi veya RAPL MSR'lerini yüksek frekansta tekrar tekrar yoklayan unprivileged process'leri izle.
Mitigation¶
CVE-2020-8694 (Linux) ve CVE-2020-8695 (SGX) olarak takip edilir:
- OS düzeltmesi: RAPL/powercap enerji arayüzlerini kısıtla ki artık unprivileged-okunabilir olmasınlar (Linux
energy_uj'yi root ile sınırladı). - Microcode düzeltmesi: SGX etkinken Intel RAPL'i model-tabanlı (filtrelenmiş) bir enerji tahminine geçirir ki okumalar artık operand/instruction'ları ayırt etmesin, ayrıcalıklı-attacker varyantını etkisiz kılar.