A Side Journey to Titan (CVE-2021-3011) - cloning Google Titan Security Keys¶
NinjaLab, Google'ın Titan Security Key'i içindeki NXP A700X secure element'ten uzun ömürlü ECDSA private key'i, U2F signature'lar sırasındaki electromagnetic emanation'ları yakalayarak çıkardı ve second factor'ün bir clone'unu mümkün kıldı.
Mechanism¶
Neden çalışır
Bir FIDO U2F key, bir secure element içinde — burada NXP A700X (NXP P5x /
SmartMX smartcard ailesinin bir üyesi) — bir ECDSA signature hesaplayarak
authenticate eder. Her ECDSA signature taze, gizli, rastgele bir ephemeral
key (nonce) k kullanır ve uzun ömürlü private key d, saldırgan çok sayıda
signature boyunca k'nın yalnızca birkaç bit'ini öğrenirse matematiksel olarak
kurtarılabilir (bir partial-nonce lattice attack).
Leak fizikten gelir: secure element elliptic curve üzerinde k·G scalar
multiplication'ını gerçekleştirirken, logic gate'lerinin anahtarlaması işlenen
k değeriyle korelasyonlu küçük electromagnetic (EM) emanation'lar üretir.
NinjaLab, çipin üzerine bir EM probe yerleştirip çok sayıda signing işlemini
kaydederek her nonce hakkında kısmi bilgi kurtardı. Bu partial nonce'lar
ardından, tam statik private key d'yi yeniden inşa eden bir lattice-based
key-recovery algoritmasına (bir hidden-number-problem solver'a) beslendi. d
çıkarıldıktan sonra saldırgan, o hesap için U2F cihazının işlevsel bir
clone'unu üretebilir — relying party, clone ile orijinali birbirinden
ayıramaz.
Walkthrough¶
Saldırı invaziftir ama standart EM side-channel araçları kullanır. Analizin kendisi için çip decapsulation'ı gerektirmez, ama secure element'i açığa çıkarmak için plastik kasayı açmayı ve key'in uzun süre fiziksel olarak elde tutulmasını gerektirir.
-
Cihazı aç ve çipi bul. NXP A700X paketini açığa çıkarmak için kasayı sıcak hava ile ayır ve die yüzeyine bir EM probe yaklaştır.
-
Acquire side-channel traces. Key'i tekrarlı U2F authentication isteklerinden geçirip ECDSA signature sırasında EM kaydet. NinjaLab şunu raporluyor:
Rhea (NXP J3D081 JavaCard, profiling device): ~4,000 traces (~4 hours)
Google Titan Security Key (target): ~6,000 traces (~6 hours)
-
Profile / cluster the leakage. Scalar multiplication sırasında leak olan partial-nonce bilgisini sınıflandırmak için trace'ler üzerinde unsupervised machine learning kullan. Aynı secure-element ailesini paylaşan profiling cihazı (Rhea), gerçek Titan'a saldırmadan önce leakage modelini kurmak için kullanılır.
-
Recover the key via lattice attack. Kurtarılan partial nonce'ları ve onlara karşılık gelen signature'ları bir lattice (hidden-number-problem) solver'a besleyerek tam ECDSA private key
d'yi yeniden inşa et. -
Clone.
d'yi U2F konuşan programlanabilir bir cihaza yükle; artık kurbanın second factor'ü olarak authenticate eder.
Etkilenen cihazlar (savunmasız NXP secure element'i paylaşır)
Threat model ve kısıtlar
Bu, remote değil hedefli, iyi kaynaklı bir saldırıdır. Saldırganın, kurbanın key'ine birkaç saat boyunca fiziksel olarak sahip olması, kasayı açması ve laboratuvar EM ekipmanına (oscilloscope + probe) ihtiyacı vardır. Kullanıcı kurcalamayı tespit edebilir (kasa yeniden açılıp/yapıştırılmalıdır) ve second factor'ü revoke edebilir. Clone yalnızca kurban o credential'ı hesaptan kaldırana kadar çalışır.
Detection¶
Birincil gösterge fiziksel kurcalamadır: kasanın açılıp yeniden monte edilmesi gerekir. Bir key'de hasar fark eden kullanıcılar onu revoke edip değiştirmelidir. Hesap düzeyinde, kaybolduğu ya da kurcalandığı bilinen bir key'den gelen beklenmedik authentication olayları bir clone'a işaret eder.
Mitigation¶
- Uzun süre göz önünden uzak erişimden şüphelenilen herhangi bir U2F key'i revoke et ve yeniden enroll et.
- Birden fazla bağımsız second factor kaydet, böylece birinin kaybı/clone'lanması hesabı kilitlemesin ve daha yeni, sertifikalı secure element'ler üzerine kurulu key'leri tercih et.
- NinjaLab, daha yeni NXP ailelerinin (P60/SmartMX2, P70/SmartMX3, Common Criteria sertifikalarıyla) bu spesifik leakage'tan etkilenmediğini belirtiyor.