Skip to content

TPM Genie: Interposer Attacks Against the Trusted Platform Module Serial Bus

Discrete TPM'in serial bus'ına (I2C) yerleştirilen ucuz bir bus interposer, host↔TPM trafiğine man-in-the-middle yapar; böylece saldırgan PCR ölçümlerini spoof'layabilir, attestation quote'larını forge edebilir ve RNG ile sealed storage'ı kurcalayabilir.

Mechanism

Invariant

Bir discrete TPM (dTPM), düşük hızlı bir serial bus (I2C, LPC veya SPI) üzerinden erişilen ayrı bir çiptir. Platform, TPM'e hardware root of trust olarak güvenir: measured boot hash'leri PCR'lara extend eder, remote attestation PCR quote'larını imzalar ve sealed storage secret'ları yalnızca doğru PCR state altında release eder. Bunların hepsi, CPU ile TPM arasındaki bus'ın güvenilir olmasına bağlıdır. TPM Genie'nin kırdığı, dile getirilmemiş invariant şudur: serial bus authenticate edilmemiş ve encrypt edilmemiş plaintext'tir. Wire'ların üzerinde oturan bir interposer her command/response'u görür ve yeniden yazabilir. Yani istediği PCR değerlerini geri döndürebilir, host'a seçilmiş bir "random" sayı besleyebilir veya attestation verisini değiştirebilir — TPM çipinin kendisini hiç ele geçirmeden root of trust'ı çökertir.

Walkthrough

Jeremy Boone'un (NCC Group) public TPM Genie araştırmasından — discrete TPM'ler için Arduino tabanlı bir I2C interposer:

  1. dTPM'in I2C bus'ına fiziksel olarak tap yap (interposer host ile TPM arasında oturur).
  2. Measured boot'u spoof'la: TPM2_PCR_Extend/read trafiğini intercept et ve forge edilmiş PCR değerleri sun; böylece host kurcalanmamış bir boot olduğuna inanır.
  3. Attestation'ı forge et: TPM2_Quote exchange'lerini manipüle et, böylece bir remote verifier ele geçirilmiş bir platform için sağlıklı görünen bir attestation'ı kabul etsin.
  4. RNG'yi spoof'la: TPM2_GetRandom response'larını saldırganın seçtiği byte'larla değiştir; TPM RNG'sinden türetilen herhangi bir key/nonce'u zayıflat.
  5. Driver fuzzing: malformed response'lar döndürerek interposer, kırılgan host tarafı TPM driver'larında (Linux kernel, bootloader'lar) parsing/memory-corruption bug'larını tetikler.
# Conceptual: interposer rewrites a PCR-read response on the I2C bus
host  -> TPM:  TPM2_PCR_Read(pcr=0..7)
TPM   -> host: <real digests>        # interposer overwrites with expected good values
host:          "measured boot OK"     # trust broken

Warning

TPM bus'ına fiziksel erişim gerektirir ama yalnızca ~$50'lik bir interposer. Araştırma repo'su firmware, bir donanım kurulum planı ve attack PoC'leri içerir. Yapısal ders şu: authenticate edilmemiş bir serial bus, dTPM'in zayıf noktasıdır.

Detection

  • Yazılımdan tespit etmek zordur, çünkü TPM çipinin kendisine dokunulmaz; fiziksel inceleme / TPM bus'ında tamper-evidence pratik kontroldür.
  • Anormal TPM driver parse hataları, malformed response enjekte eden bir interposer'a işaret edebilir.

Mitigation

  • TPM bus encryption / parameter session'ları (TPM 2.0 salted/HMAC session'ları) kullan; böylece host↔TPM trafiği authenticate edilmiş ve confidential olur, pasif ve aktif interposer'ları etkisiz bırakır.
  • SoC'a bağlı firmware TPM (fTPM) veya tamper-resistant paketleme tercih et; host tarafı TPM driver'larını malformed response'lara karşı sertleştir.

References