M1RACLES¶
Apple M1 üzerinde, herhangi iki EL0 process'inin okuyup yazabildiği iki bitlik, per-cluster bir system register; OS izolasyonunu bypass eden bir cross-process covert channel oluşturur.
Mechanism¶
Kırılan invariant
Bir EL0 (unprivileged userspace) instruction stream'i, OS aracılık etmeden karşılıklı izole process'ler arasında görünür olan, paylaşılan, yazılabilir bir architectural state parçasına sahip olmamalıdır. M1RACLES (CVE-2021-30747) bunu kırar çünkü Apple M1, belgelenmemiş bir ARM system register'ı implemente eder — s3_5_c15_c10_1 olarak encode edilen — ki bu register EL0'dan okunabilir ve yazılabilir ve implemente edilmiş iki bit tutar (bit 0 ve bit 1). Kritik olarak register per-cluster'dır: bir CPU cluster'ındaki her core aynı instance'ı görür. Dolayısıyla aynı cluster'ın core'larında schedule edilen iki process, hiçbir memory, dosya, socket ya da syscall devreye girmeden iki bitlik değiştirilebilir state paylaşır. Bu saf bir covert channel'dır — tek başına victim'in secret'larını okumaz — ama iki sandbox'lanmış process'in hiçbir şekilde iletişim kuramayacağı varsayımını çürütür.
Walkthrough¶
m1racles.com'daki açık disclosure'dan alınan yüksek seviyeli özet:
- Shared state discovery. Kusur şudur: EL0'da erişilebilen bir architectural register, bir core tarafından yazılan değeri korur ve aynı cluster'daki başka bir core tarafından gözlemlenebilir.
-
Clock-and-data protocol. İşbirliği yapan iki process, iki biti bir bitlik data line artı bir bitlik clock olarak ele alır. Kavramsal olarak sender bir data bit yazar (örneğin
1x) ve receiver, sonraki biti talep etmek için00yazarak acknowledge eder; bu da senkronize bir bit stream üretir.Kavramsal register access (yalnızca fragment)
Bu encoding üzerinde yalnızca bir; read the per-cluster register from EL0 (conceptual) mrs x0, s3_5_c15_c10_1 ; write two bits back msr s3_5_c15_c10_1, x0mrs/msrçiftinin fikri gösterilmiştir; çalışan bir transport protokolü burada yeniden üretilmemiştir. -
Throughput. Yazar, 1 MB/s'i aşan transfer hızları raporlar (scheduling jitter'a karşı sağlamlık için data redundancy/error-correction eklendiğinde daha az).
- Scope. Channel, OS abstraction layer'ının altında yaşadığı için farklı kullanıcılar ve privilege level'lar arasında çalışır. Tek başına bir memory-disclosure primitive'i değildir.
Warning
Gerçekçi risk dardır: covert channel'lar yalnızca malware zaten çalışırken ve bir sandbox sınırı boyunca exfiltrate etmek istediğinde önem taşır (örneğin, bir tracking library ile koordine olan kötü amaçlı bir uygulama). Tek başına bir Mac'i enfekte edemez ya da data çalamaz.
Detection¶
- Static/dynamic app analysis. System register'ların userspace'ten doğrudan kullanımı anomalous'tur. Apple'ın kendi App Store review pipeline'ı, system register'lara doğrudan dokunan uygulamaları zaten reddeder; savunmacılar gönderilen ya da yüklü binary'lerde belgelenmemiş encoding'lere (özellikle
s3_5_c15_c10_1) karşımrs/msr'yi işaretleyebilir. - Binary scanning / EDR. Disassembly'de spesifik register encoding'ini ve tek bir register'ın okuma ile yazmalarını dönüşümlü yapan sıkı loop'ları arayın — bir clock-and-data transport'unun imzası.
- Behavioral. Aynı cluster'a pin'lenmiş, birbiriyle ilgisiz iki process'in hiçbir IPC, dosya ya da network aktivitesi olmadan data alışverişi yapması gözlemlenebilir anomalidir; ancak çalışma zamanında yakalamak zordur.
Mitigation¶
- Silicon'da yamalanamaz. Davranış M1'in içine işlenmiştir; gerçek bir fix yeni bir chip revizyonu gerektirir.
- Virtualization tabanlı masking. Register, EL0 erişimini virtualize eden bir hypervisor altında OS çalıştırılarak trap/emülasyon edilebilir, ama disclosure bunun macOS'ta pratik olmadığını (VM/hypervisor tasarımının yeniden ele alınmasını gerektirir) ve Linux'ta beceriksizce kaldığını belirtir çünkü Apple, non-VHE hypervisor desteği etrafında ARM spec'inden sapar.
- Defense-in-depth. Bunu yalnızca bir covert channel olarak ele alın: untrusted code'u sistemin dışında tutun, doğrudan system-register kullanımı için app-store/EDR taramasına güvenin ve önceki bir compromise olmadığında channel'ın düşük etkili olduğunu kabul edin.