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ş):
- 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).
- Timing'den, signature başına az sayıda most-significant nonce bit'ini çıkarsa.
- (signature, partial-nonce) çiftlerini bir Hidden Number Problem olarak encode et.
- 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).