Skip to content

TPM-FAIL: TPM meets Timing and Lattice Attacks (CVE-2019-16863)

Intel fTPM ve STMicroelectronics ST33 TPM'lerinde ECDSA scalar multiplication'ındaki secret-dependent execution time, nonce bit'lerini leak eder; lattice attack'ları bunları birleştirerek 256-bit private key'i kurtarır.

Mechanism

Bug class / invariant

Bir TPM'in, signing operation'ları private key hakkında hiçbir şey açığa çıkarmayan tamper-resistant bir key store olması beklenir. ECDSA signing, signature başına secret bir nonce k ile bir k·G scalar multiplication hesaplar; güvenlik invariant'ı bunun k'ye göre constant-time olmasını gerektirir. Etkilenen TPM'ler bunu ihlal eder: scalar multiplication'ın (ve ilgili modular operation'ların) süresi k'nin bit-length'ine / leading bit'lerine bağlıdır. Böylece her signature, nonce'unun birkaç bit'ini timing üzerinden leak eder. ECDSA, nonce leakage'ine felaket derecede kırılgandır — çok sayıda signature boyunca kısmi nonce bit'leri, bir lattice (LLL/BKZ) attack'ının long-term private key'i kurtarmak için çözdüğü bir Hidden Number Problem instance'ı tanımlar.

Walkthrough

TPM-FAIL paper'ı / advisory'lerinden üst düzey (patch edilmiş):

  1. TPM'den çok sayıda ECDSA signature talep et ve her operation'ın execution time'ını hassas şekilde ölç (local ya da bazı setup'larda hızlı bir network üzerinden bile).
  2. Timing'den, signature başına az sayıda most-significant nonce bit'ini çıkarsa.
  3. (signature, partial-nonce) çiftlerini bir Hidden Number Problem olarak encode et.
  4. Birkaç yüzden birkaç bine kadar biased signature'dan tam private key'i kurtarmak için bir lattice reduction çalıştır.
Raporlanan etki

Intel fTPM key recovery local olarak ~4–20 dakikada; STMicroelectronics ST33 etkilendi (CVE-2019-16863); paper'ın deneylerinde bir VPN server'ının authentication key'i hızlı bir LAN üzerinde remote olarak kurtarıldı.

Detection

  • Timing leakage normal log'larda görünmez; etkilenen TPM model'lerini/firmware'ini tespit edilebilir koşul olarak ele al.
  • TPM'leri envantere al: fix'ten önceki (2019-09-12'den önce) Intel fTPM firmware sürümlerini ve STMicroelectronics ST33 parçalarını belirle.
  • Bir TPM'e fine-grained timing ile çok yüksek hacimde ECDSA signing isteği issue eden uygulamaları izle — olası bir harvesting pattern'i.

Mitigation

  • Firmware update'lerini uygula: Intel fTPM update'i (CVE-2019-11090 olarak izlenir) ve STMicroelectronics'in düzeltilmiş ST33 chip'i/firmware'i (CVE-2019-16863) constant-time scalar multiplication implement eder.
  • Vulnerable TPM'lerde üretilen/kullanılan herhangi bir ECDSA key'ini rotate et, çünkü önceki signature'lar zaten leak etmiş olabilir.
  • Constant-time olarak doğrulanmış signing scheme'leri / implementation'ları tercih et; mümkün olduğunda nonce hardening ekle (örneğin deterministic ECDSA tek başına multiplication'daki bir timing leak'i düzeltmez, bu yüzden constant-time fix gereklidir).

References