Intel MPX — Intel MPX
Intel MPX ( rozszerzenia ochrony pamięci ) był zestawem rozszerzeń architektury zestawu instrukcji x86 . Dzięki obsłudze kompilatora , biblioteki wykonawczej i systemu operacyjnego Intel MPX twierdził, że zwiększa bezpieczeństwo oprogramowania , sprawdzając odwołania do wskaźników, których normalne intencje podczas kompilacji są złośliwie wykorzystywane w czasie wykonywania z powodu przepełnienia bufora. W praktyce wykryto zbyt wiele błędów w projekcie, aby był użyteczny, a wsparcie zostało przestarzałe lub usunięte z większości kompilatorów i systemów operacyjnych. Firma Intel wymieniła sprzęt MPX jako usunięty w 2019 r. i później w sekcji 2.5 swojego Podręcznika programisty oprogramowania architektury Intel® 64 i IA-32, tom 1.
Rozszerzenia
Intel MPX wprowadza nowe rejestry graniczne i nowe rozszerzenia zestawu instrukcji, które operują na tych rejestrach. Dodatkowo istnieje nowy zestaw „tablic związanych”, które przechowują granice poza tym, co może zmieścić się w rejestrach granic.
MPX używa czterech nowych 128-bitowych rejestrów granicznych , BND0
to BND3
, z których każdy przechowuje parę 64-bitowych wartości dolnej granicy (LB) i górnej granicy (UB) bufora. Górna granica jest przechowywana w postaci uzupełnień , z BNDMK
(utwórz granice) i BNDCU
(sprawdź górną granicę) wykonując konwersję. Architektura obejmuje dwa rejestry konfiguracyjne BNDCFGx
( BNDCFGU
w przestrzeni użytkownika iw BNDCFGS
trybie jądra) oraz rejestr statusu BNDSTATUS
, który zapewnia adres pamięci i kod błędu w przypadku wystąpienia wyjątku.
Dwupoziomowa translacja adresów służy do przechowywania granic w pamięci. Górna warstwa składa się z katalogu Bounds Directory (BD) utworzonego podczas uruchamiania aplikacji. Każdy wpis BD jest albo pusty, albo zawiera wskaźnik do dynamicznie tworzonej tabeli granic (BT), która z kolei zawiera zestaw granic wskaźnika wraz z adresami liniowymi wskaźników. Instrukcje bounds load ( BNDLDX
) i store ( BNDSTX
) w sposób przezroczysty wykonują translację adresów i granice dostępu we właściwym wpisie BT.
Intel MPX został wprowadzony jako część mikroarchitektury Skylake .
Mikroarchitektura Intel Goldmont obsługuje również technologię Intel MPX.
Wsparcie oprogramowania
- glibc usunęło wsparcie w wersji 2.35.
- GNU Compiler Collection (GCC) 5.0 dodał obsługę MPX. W 2018 r. wsparcie dla tych rozszerzeń osłabło ze względu na obciążenia konserwacyjne i programiści Intela sporadycznie dostarczający poprawki, co zaowocowało propozycją rezygnacji z obsługi w GCC 9.0. Wsparcie zostało usunięte w GCC 9.1.
- Kompilator Intel C++ (icc) 15.0 dodał obsługę Intel MPX.
- Obsługa oprogramowania na poziomie jądra dla Intel MPX została połączona z główną linią jądra Linuksa w wersji jądra 3.19, która została wydana 8 lutego 2015 r. W 2018 r. Thomas Gleixner zaproponował usunięcie obsługi MPX z jądra Linuksa 4.18. Żądanie ściągnięcia wraz z jego usunięciem zostało opublikowane w grudniu 2018 r., podczas cyklu rozwojowego 4.20, ale nie zostało zaakceptowane. Druga próba została podjęta w lipcu 2019 r. Obsługa MPX została usunięta w 5.6.
- QEMU wspierało MPX od wersji 2.6 i zrezygnowało z obsługi w wersji 4.0.
- Microsoft Visual Studio 2015 Update 1 dodał eksperymentalną obsługę MPX.
Analiza Intel MPX
W badaniu przeanalizowano szczegółowe przekrojowe przekroje warstw stosu systemu MPX i porównanie z trzema znaczącymi mechanizmami ochrony pamięci opartymi na oprogramowaniu ( AddressSanitizer , SAFECode i SoftBound) i przedstawiono następujące wnioski.
- Chociaż Intel MPX jest specjalnie zaprojektowanym podejściem wspomaganym sprzętowo z własnym dodanym zestawem rejestrów sprzętowych, nie jest szybszy niż jakiekolwiek podejście oparte na oprogramowaniu. Nowe instrukcje Intel MPX mogą w najgorszym przypadku spowodować nawet czterokrotne spowolnienie, chociaż optymalizacje kompilatora amortyzują je i prowadzą do średnio ~50% kosztów wykonawczych.
- W przeciwieństwie do innych rozwiązań opartych na oprogramowaniu, Intel MPX nie zapewnia ochrony przed błędami bezpieczeństwa pamięci tymczasowej.
- Intel MPX z natury nie obsługuje wielowątkowości, co może prowadzić do niebezpiecznych wyścigów danych w starszych programach z wątkami i jeśli kompilatory nie synchronizują jawnie granic.
- Intel MPX nie obsługuje kilku popularnych idiomów programowania C / C++ ze względu na ograniczenia dozwolonego układu pamięci.
- Intel MPX jest w konflikcie z niektórymi innymi rozszerzeniami ISA, co powoduje problemy z wydajnością i bezpieczeństwem. Mówiąc dokładniej, problemy te pojawiają się, gdy Intel MPX jest używany w połączeniu z innymi sprzętowymi mechanizmami ochrony, takimi jak Intel TSX i Intel SGX .
- Wreszcie, instrukcje MPX powodują znaczny spadek wydajności (15+%) nawet w przypadku procesorów Intel bez obsługi MPX.
Ponadto przegląd wykazał , że MPX nie jest gotowy do produkcji, a AddressSanitizer jest lepszym rozwiązaniem. Recenzja Kostyi Serebryany z Google, dewelopera AddressSanitizer, zawierała podobne wnioski.
Topnienie
W innym badaniu badającym zakres luk w zabezpieczeniach Spectre i Meltdown odkryto, że Meltdown można wykorzystać do ominięcia Intel MPX przy użyciu wyjątku sprzętowego Bound Range Exceeded (#BR). Zgodnie z ich publikacją, naukowcy byli w stanie ujawnić informacje za pośrednictwem ukrytego kanału Flush+Reload z zewnętrznego dostępu do macierzy chronionej przez system MPX. Ich dowód koncepcji nie został publicznie ujawniony.
Zobacz też
Bibliografia
Zewnętrzne linki
- Informacje o programowaniu rozszerzeń zestawu instrukcji Intel Architecture (PDF) . Intel . Lipiec 2013 . Pobrano 2016-01-10 .
- Oleksenko, Oleksii; Kuvaiskii, Dymitr; Bhatotia, Pramod; Felbera, Pascala; Fetzer, Christof (2017). „Wyjaśnienie Intel MPX: empiryczne badanie Intel MPX i podejść do sprawdzania granic opartych na oprogramowaniu”. arXiv : 1702.00719 [ cs.CR ].Dodatkowe materiały online pod adresem https://intel-mpx.github.io .
- „Wprowadzenie do rozszerzeń Intel Memory Protection Extensions” . Intel . 2013-07-16 . Źródło 2013-09-10 .
- „Rozszerzenia Intel ISA” . Intel . Pobrano 04.11.2013 .
- „Obsługa rozszerzeń Intel® Memory Protection Extensions (Intel® MPX) w kompilatorze GCC” . gcc.gnu.org . Pobrano 04.11.2013 .
- Hansen, Dave (2016-03-16). „Rozszerzenia Intel® Memory Protection Extensions (Intel® MPX) dla systemu Linux” . Źródło 2018-05-17 .