Powrót W sierpniu 2021 r. firma Intel wprowadziła pierwsze łatki dla „FineIBT” dla jądra systemu Linux, które miały na celu połączenie najlepszych technologii Control-flow Enforcement (CET) i Control Flow Integrity w celu efektywnego podniesienia zabezpieczeń jądra.
W ubiegłym roku łatki FineIBT zostały zaktualizowane, aw tym tygodniu inżynier Intela Peter Zijlstra wysłał najnowsze łatki FineIBT dla systemu Linux. Jego najnowsze podsumowanie pracy nad integralnością przepływu sterowania FineIBT dla systemu Linux sprowadza się do:
Zaimplementuj alternatywny schemat CFI, który łączy w sobie zarówno drobnoziarnistą naturę kCFI, ale także w pełni wykorzystuje grubą ziarnistość sprzętowy CFI dostarczony przez IBT.
Dla kontrastu:
kCFI jest czysto programowym schematem CFI i opiera się na możliwości odczytywania tekstu – w szczególności instrukcji *przed* symbolem docelowym i walidacji skrótu *przed* wykonaniem wywołanie (w przeciwnym razie przepływ sterowania jest już zagrożony).
FineIBT to schemat hybrydowy oprogramowania i sprzętu; zapewniając, że każdy cel oddziału zaczyna się od walidacji skrótu, możliwe jest umieszczenie walidacji skrótu po gałęzi. Ma to kilka zalet:
o unika się obciążenia (haszowania); bez notatki; brak wymogu RX.
o Stan IBT CZEKAJ NA ENDBR jest zatrzymaniem spekulacji; umieszczając walidację skrótu w instrukcji bezpośredniej po docelowym gałęzi, powstaje minimalne okno spekulacji, a całość stanowi realną ochronę przed SpectreBHB.
Oczywiście ta poprawka opiera się na kCFI (upstream), ale dodatkowo opiera się również na dopełnieniu z łatek do śledzenia połączeń (tip/x86/core). Używa tego dopełnienia, aby umieścić walidację hash, podczas gdy strony wywołania są ponownie zapisywane, aby zmodyfikować cel pośredni tak, aby znajdował się 16 bajtów przed pierwotnym celem, tym samym trafiając w tę nową preambułę.
Zwłaszcza, że nie ma sprzętu, który wymaga śledzenia głębi połączeń (Skylake) i obsługuje IBT (Tigerlake i nowsze).
Ten kod opiera się na najnowszym Call Śledzenie głębokości działa na drodze do głównego systemu Linux (prawdopodobnie 6.2). Zobacz tę serię poprawek, aby zapoznać się z najnowszą dyskusją na temat FineIBT — w tym dyskusję nad dodatkowymi implikacjami bezpieczeństwa do rozważenia. Zobaczymy, dokąd prowadzi ta praca FineIBT i czy/kiedy uda się ją przechwycić przez główne jądro.