Cachegrab (TrustZone cache attack tool)¶
NCC Group'un açık kaynaklı aracı; TrustZone'lu ARMv8 (AArch64) core'larında secure-world yazılımına karşı trace-driven Prime+Probe cache attack'ları gerçekleştirir ve görselleştirir.
Mechanism¶
Paylaşılan bir cache TrustZone isolation'ını neden kırar
ARMv8'de secure world ve non-secure world genelde aynı physical cache'leri paylaşır. TrustZone, memory içeriği üzerinde bir güvenlik sınırı uygular ama bir secure-world hesaplamasının geride bıraktığı microarchitectural footprint üzerinde uygulamaz. Secure-world kodu çalıştığında cache line'larını evict eder ve yeniden doldurur; bu eviction'lar, attacker'ın kendi line'larından hangilerinin yerinden edildiğini ölçerek non-secure world'den gözlemlenebilir. Bu yüzden privileged bir non-secure attacker (örn. kernel/root) world sınırı boyunca klasik bir Prime+Probe attack'ı kurabilir: cache'i attacker data'sıyla prime'la, secure-world victim'i invoke et, sonra victim'in hangi set'lere dokunduğunu öğrenmek için probe et. Bir victim'in access ettiği set/line index'i onun secret'a bağlı memory access'lerine bağlı olduğundan, cache trace'i secret'ı sızdırır. Cachegrab ek olarak ARMv8 performance counter'larını doğrudan okuyarak cache-refill ve branch-misprediction event'lerini kaydeder; böylece kaba bir timing channel'ı invocation başına daha zengin bir trace'e dönüştürür.
Walkthrough¶
Cachegrab üç bileşen olarak yapılandırılmıştır:
- attack'ı süren ve cihaz üzerindeki cache / performance-counter state'ini okuyan
bir kernel module (
module/), - victim kodunu invoke eden ve sample'ları stream eden Cachegrab server'ı ve
shim library (
server/), ve - trace'leri yeniden inşa edip görselleştirmek için sample'ları bir source →
filter → analyzer pipeline'ı boyunca alan client (
client/) — bir Python module artı GUI.
Tipik bir Android deployment'ı kernel'i loadable-module desteğiyle yeniden derler, module'ü yükler ve server portunu analiz host'una geri forward'lar:
# Rebuild the target kernel with CONFIG_MODULES and CONFIG_MODULE_UNLOAD
insmod cachegrab.ko # load the collection module on-device
adb forward tcp:8000 tcp:8000 # expose the Cachegrab server to the host
Client daha sonra forward'lanan porta bağlanır, server üzerinden victim'i tekrar tekrar tetikler ve invocation başına bir Prime+Probe trace'i toplar. Birçok trace'i hizalamak (trace-driven analiz) secret'a bağlı access pattern'lerini açığa çıkarır — NCC Group bu yaklaşımı, eşlik eden Hardware-Backed Heist araştırmasında bir secure-world implementation'ından bir ECDSA key'i geri kazanmak için kullandı.
Root seviyeli, yalnızca güvenilir ağda kullanılacak araştırma aracı
Cachegrab server'ı "attacker'ın victim kodunu invoke etmek için keyfi shell komutları belirtmesine izin verir" ve bu komutlar bir HTTP interface üzerinden root privileges ile çalışır. Test edilen cihaz güvenilir, izole bir ağda tutulmalıdır. Bu, sahip olduğun donanım üzerinde TrustZone implementation'larını değerlendirmeye yönelik offensive araştırma tooling'idir.
Detection¶
Bu bir attacker aracıdır; buradaki "detection", victim'i sertleştirmek anlamına gelir. Secret data üzerinde branch yapan ya da memory'yi indexleyen secure-world crypto, ayırt edilebilir bir Prime+Probe trace'i üretir. Trusted-application kodunu, tam da bu tür tracing'i kullanarak secret'a bağlı cache footprint'leri açısından değerlendir.
Mitigation¶
- Secure-world cryptography'sini constant-time, constant-cache-access formda implement et (secret'a bağlı branch ya da table index yok).
- Threat model gerektirdiğinde world switch'ler boyunca shared cache'leri flush'la ya da partition'la.
- Secure-world cache event'lerini açığa çıkaran performance counter'lara non-secure access'i kısıtla.