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 , BND0to 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( BNDCFGUw przestrzeni użytkownika iw BNDCFGStrybie 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