PigeonHole / page-fault sequence attack¶
Güvenilmeyen bir işletim sisteminin korunan bir programın page'lerini unmap edip ortaya çıkan page-fault adres dizisini okuyarak control flow'u ve veriyi yeniden inşa ettiği bir controlled-channel saldırısı.
Mechanism¶
Shielded-execution tehdit modellerinde (Intel SGX, Haven, InkTag) uygulama OS'ten korunur, ama page table'lar yine de OS'e aittir. Enclave memory'sini okuyamasa da OS hangi page'lerin present olduğunu kontrol eder ve her page fault'u o işler — dolayısıyla korunan programın her fault verdiğinde hangi page'e dokunduğunu öğrenir.
Neden çalışır
Page fault'lar deterministik, attacker tarafından tetiklenebilir bir side channel'dır. OS, korunan programın code ve data page'lerindeki present bit'i temizler; unmap'lenmiş bir page'e bir sonraki erişim OS'e trap eder, OS de 4 KiB-aligned faulting adresi tekrar map'leyip öncekini unmap etmeden önce kaydeder. Victim'i bu şekilde single-step etmek timing gürültüsü olmadan tam page-granularity erişim dizisini verir. Gerçek programlar input-bağımlı şekillerde branch ettiği ve veriye eriştiği için, o page dizisi secret control/data flow'un bir parmak izidir — gözlemlenen page geçişlerinden programın gizli state'ine geri giden bir "pigeonhole" eşlemesi.
Walkthrough¶
Xu, Cui ve Peinado (IEEE S&P 2015) bunu controlled-channel attack olarak tanıttı. Çekirdek döngü:
İsimlendirme: controlled-channel = pigeonhole
Bu tek bir tekniğin iki adıdır. Saldırıyı ortaya koyan Xu, Cui, Peinado (2015) buna controlled-channel attack dedi; savunmaları ele alan Shinde, Chua, Kuppusamy, Saxena (2015, "Preventing Your Faults From Telling Your Secrets: Defenses Against Pigeonhole Attacks") aynı page-fault side channel'ı pigeonhole attack olarak adlandırdı. Bu atom, tekniğin page-fault-sequence yönüne "pigeonhole" adıyla odaklanır; genel çerçeve için controlled-channel-attack atomuna bakın.
1. Unmap: clear the present bit on the enclave's code/data pages
so the next access to them page-faults.
2. Observe: on each #PF, the OS handler records the faulting page address
(CR2 & ~0xFFF) -- one page, exactly, per fault.
3. Advance: re-map the just-faulted page and unmap the previously
accessed page, forcing the victim to fault again on its
next page transition.
4. Reconstruct: the recorded page sequence is matched against the known
page-level control/data flow of the target library.
// Conceptual OS-side fault handler (untrusted kernel)
void page_fault_handler(uintptr_t cr2) {
uintptr_t page = cr2 & ~0xFFFUL;
log_page(page); // observed access trace
map_present(page); // let the victim make progress
unmap_present(prev_page); // re-arm the channel
prev_page = page;
}
Paper, yaygın olarak kullanılan üç library'ye karşı uçtan uca secret recovery gösterdi:
- FreeType (font rendering) ve Hunspell (spell checker) — eksiksiz metin belgelerini recover etti.
- libjpeg (JPEG decoding) — işlenen görüntülerin dış hat/yapısını recover etti.
Saldırılar Haven ve InkTag'e karşı gösterildi, SGX ise motive eden deployment modeliydi.
Warning
Bu channel deterministik ve gürültüsüzdür. Cache- veya timing-tabanlı side channel'ların aksine, ortalaması alınacak bir şey yok: attacker fault başına tam bir page görür, dolayısıyla sızıntı tek bir koşuda güvenilirdir.
Detection¶
Görünür belirti, korunan program içinde anormal yüksek bir page-fault / asynchronous-enclave-exit (AEX) oranıdır. T-SGX, Déjà Vu ve SGX-Shield gibi savunmalar aşırı fault/AEX'leri tespit eder veya sınırlar ki attacker'ı açığa çıkarsınlar.
Mitigation¶
Paging güvenilmeyen OS'e devredildiği için bir microcode düzeltmesi yoktur. Savunmalar yürütmeyi page-fault-oblivious yapar: page dizisi input'tan bağımsız olsun diye data-oblivious / control-flow-flattened kod; enclave içinde self-paging veya fault-rate monitoring; ve ORAM tarzı access-pattern obfuscation.