DrK (De-randomizing Kernel ASLR with Intel TSX)¶
Hangi kernel page'lerinin mapped/executable olduğunu probe etmek için Intel TSX transactional abort'larını fault-suppressing bir oracle olarak kullan; hiçbir kernel memory leak olmadan KASLR'ı milisaniyeler içinde kır.
Mechanism¶
Neden çalışır
Intel TSX (Transactional Synchronization Extensions), XBEGIN/XEND
arasındaki bir kod bölgesinin bir transaction olarak çalışmasını sağlar.
Transaction içinde bir fault oluşursa — mapped olmayan veya non-executable bir
adrese dokunmaktan kaynaklanan bir page fault dahil — transaction sessizce
abort eder ve abort handler'a atlar, exception'ı OS'e hiç teslim etmeden.
Bu bastırma (suppression) oracle'dır. DrK'nın exploit ettiği invariant:
- Leak: abort latency, page'in state'ine göre değişir. Bir mapped page'i, bir unmapped page'i ve bir executable page'i probe etmek ayırt edilebilir timing/abort-code signature'ları üretir, çünkü page-table walk ve TLB davranışı farklıdır.
- Transmit/decode: bir TSX transaction içinde bir probe çalıştırıp (örn. bir aday kernel adresine load veya jump) abort'u time'layarak attacker, her aday KASLR slide adresini mapped/unmapped/executable olarak sınıflandırır.
Fault'lar kernel'a hiç ulaşmadığı için probe sessizdir (segfault yok, log kaydı yok) ve son derece hızlıdır — DrK tüm kernel address space'ini tarar ve slide'ı saniyenin epey altında geri elde eder.
Walkthrough¶
Probe, bir aday kernel adres erişimini bir TSX transaction içine sarar:
// Conceptual DrK probe (requires a TSX-capable CPU, e.g. Skylake-era).
static int probe_mapped(void *kaddr) {
unsigned status;
uint64_t t0 = rdtscp();
if ((status = _xbegin()) == _XBEGIN_STARTED) {
*(volatile char *)kaddr; // page fault here aborts the TX silently
_xend();
return SLOW; // committed: distinguish via timing
}
uint64_t dt = rdtscp() - t0; // abort latency classifies the page
return classify(dt, status); // mapped vs unmapped vs executable
}
Aday KASLR base offset'lerini süpürmek ve her birini sınıflandırmak slide'ı verir.
Beklenen timing sınıfları (kavramsal)
Mitigation¶
- TSX'i devre dışı bırakmak oracle'ı kaldırır (sonraki microcode, ilgisiz nedenlerle birçok parçada TSX'i de devre dışı bıraktı).
- Daha ince granüllü KASLR / function-granular randomization maliyeti yükseltir.
- Generic mapping-indistinguishability savunma sınıfı için bkz. FLARE-targeted KASLR breaks.