Intel MPX

Intel MPX ( Memory Protection Extensions )   je rozšíření instrukční sady pro architekturu x86 / x86-64 , navržené v roce 2013. S podporou kompilátoru , runtime knihoven a operačního systému zvyšuje rozšíření Intel MPX bezpečnost programů s ohledem na přístup do paměti přidáním kontrol přístupu ukazatelů , zejména k zabránění útokům přetečením vyrovnávací paměti .

Podpora pro rozšíření byla z mnoha softwarových produktů odstraněna koncem roku 2018/začátkem roku 2019.

Rozšíření

MPX zavádí nové hraniční registry a několik instrukcí , které tyto registry zpracovávají. Navíc je zaveden koncept „tabulek hranic“, které uchovávají popisy paměťových rozsahů pro případ nedostatku hraničních registrů. [1] [2] [3] [4]

MPX definuje čtyři nové 128bitové registry hranic BND0..BND3, z nichž každý ukládá pár 64bitových dolních hranic (LB) a horních hranic (UB) hodnot nějakého objektu v paměti, jako je vyrovnávací paměť nebo pole. . Horní mez je uložena ve formátu doplňku a ke konverzi dojde, když je hodnota načtena pomocí instrukcí BNDMKa BNDCU. Architektura přidala uživatelský konfigurační registr BNDCFGU, privilegovaný konfigurační registr IA32_BNDCFGS(jako součást MSR registrů ) a stavový registr BNDSTATUS, který poskytuje informace o chybné adrese v paměti a chybovém kódu v případě výjimky. [5]

Aplikace může používat Bounds Directory (BD) několika tabulek Bounds (BT), které obsahují lineární adresy ukazatele vyrovnávací paměti spolu s hranicemi vyrovnávací paměti. Tabulky jsou organizovány jako dvouúrovňový radixový strom z lineární adresy ukazatele [6] . Tyto dvě instrukce načítají a ukládají - BNDLDXa BNDSTX - synchronizují hodnoty registru BNDxs hranicemi určenými v adresáři. [5] Dvě instrukce vložené kompilátorem BNDCLa BNDCU, zkontrolují, zda se ukazatel nachází ve specifikovaných mezích (dolní a horní, v tomto pořadí) a vedou k výjimce mimo meze.

Použití MPX vyžaduje další paměť pro popis hranic. V nejhorším případě by 4 kilobajty různých ukazatelů (1024 nebo 512) vyžadovaly 16 kilobajtů tabulek hranic (každá hranice ukládá 4 hodnoty o velikosti ukazatele). Načítání hranic z nebo do tabulek je zásah do paměti a může zpomalit některé programy [6] .

Podpora

Rozšíření Intel MPX byla představena v mikroarchitektuře Skylake . [7] Mikroarchitektury Intel Goldmont (Atom) také podporují Intel MPX. [osm]

Podpora v linuxovém jádře se objevila ve verzi 3.19 (8. února 2015), [9] [10] doplněna z verze 4.1 [6] . V roce 2018 bylo navrženo odstranění podpory pro Intel MPX z nadcházejícího vydání linuxového jádra 4.20 [11] [12] , nicméně odpovídající změny byly přijaty pouze pro verzi 5.6. Podpora pro MPX byla odstraněna ve vydání linuxového jádra 5.6 z března 2020 [13] .

Podporováno v kompilátoru GCC od 5.2 [6] [4] do 9.0 (květen 2019) [14] [15] . Implementováno v Intel Compiler 15.0 [16] a Microsoft Visual Studio 2015 Update 1 [17] .

Analýza Intel MPX

V roce 2017 byla publikována nezávislá rozšiřující revize a srovnání technologie se třemi moderními softwarovými systémy pro bezpečnost paměti ( AddressSanitizer , SAFECode, SoftBound). [osmnáct]

Přezkum dospěl k závěru, že MPX není připraven k použití v průmyslových aplikacích a ukázal, že AddressSanitizer je lepší volbou. [18] Kostya Serebryany [19] [20] , vývojář AddressSanitizer, zaměstnanec nadnárodní korporace Google, vyjádřil stejný názor .

Studie MPX ve světle zranitelností Meltdown a Spectre [21] ukázala, že útoky Meltdown nejsou zastaveny pomocí Intel MPX a že je možné provést únik dat (filtrování dat) postranním kanálem pomocí metody Flush + Reload při přístupu mimo hranice pole chráněné MPX.

Poznámky

  1. Rozšíření Intel ISA . Intel . Získáno 4. listopadu 2013. Archivováno z originálu 10. listopadu 2013.
  2. Úvod do rozšíření Intel Memory Protection Extensions . Intel (16. července 2013). Získáno 10. září 2013. Archivováno z originálu 28. července 2013.
  3. Diskuse o Intel Memory Protection Extensions (MPX) a srovnání s AddressSanitizer . code.google.com . Získáno 4. listopadu 2013. Archivováno z originálu dne 4. července 2015.
  4. 1 2 Podpora rozšíření Intel Memory Protection Extensions (Intel MPX) v kompilátoru GCC . gcc.gnu.org . Získáno 4. listopadu 2013. Archivováno z originálu 11. června 2019.
  5. 1 2 Intel Architecture Instruction Set Extensions Programming Reference (PDF). Intel (prosinec 2013). Datum přístupu: 17. ledna 2014. Archivováno z originálu 1. února 2014.
  6. 1 2 3 4 Intel® Memory Protection Extensions (Intel® MPX) pro Linux* | 01.org Archivováno 2. dubna 2017 na Wayback Machine , 2016
  7. Intel Software Development Emulator . Intel (15. června 2012). Získáno 4. listopadu 2013. Archivováno z originálu 16. října 2013.
  8. Intel Software Development Emulator . Intel. Získáno 21. listopadu 2016. Archivováno z originálu 6. května 2019.
  9. Linuxové jádro 3.19, Oddíl 1.2. Podpora pro rozšíření Intel Memory Protection Extensions . kernelnewbies.org (9. února 2015). Získáno 9. února 2015. Archivováno z originálu 12. února 2015.
  10. Jonathan Corbet. Podpora Intel MPX v Linuxu . LWN.net (29. ledna 2014). Získáno 9. února 2015. Archivováno z originálu 9. února 2015.
  11. Linuxové jádro může zahodit podporu rozšíření ochrany paměti . Phoronix . Získáno 31. března 2020. Archivováno z originálu dne 28. dubna 2020.
  12. [GIT PULL x86: odebrat Intel MPX] . Získáno 1. srpna 2019. Archivováno z originálu dne 7. srpna 2019.
  13. Podpora Intel MPX je v Linuxu 5.6 - Phoronix mrtvá . www.phoronix.com . Získáno 31. března 2020. Archivováno z originálu dne 29. února 2020.
  14. GCC 9 Release Series – Změny, nové funkce a opravy – GNU Project – Free Software Foundation (FSF) . Získáno 1. srpna 2019. Archivováno z originálu 19. února 2022.
  15. Zdá se, že GCC 9 je nastaven na odstranění podpory Intel MPX - Phoronix . Získáno 1. srpna 2019. Archivováno z originálu 9. února 2019.
  16. https://istep2016.ru/files/presentations/IntelR%20Compilers.pdf#page=26 Archivováno 21. listopadu 2016.
  17. Visual Studio 2015 Update 1: Nová experimentální funkce – MPX | Blog týmu C++ . Staženo 1. srpna 2019. Archivováno z originálu 15. ledna 2019.
  18. 1 2 Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal & Fetzer, Christof (2017), Intel MPX Explained: An Empirical Study of Intel MPX and Software-based Bounds Checking Approaches, arΧiv : 1702.00719 [cs.CR].  
  19. Konstantin Serebryany – Výzkum ve společnosti Google . research.google.com . Získáno 1. srpna 2019. Archivováno z originálu 16. září 2016.
  20. Diskuse o Intel Memory Protection Extensions (MPX) a srovnání s AddressSanitizer . Získáno 4. listopadu 2013. Archivováno z originálu 12. ledna 2019.
  21. Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal & Fetzer, Christof (2018), A Systematic Evaluation of Transient Execution Attacks and Defenses, arΧiv : 1811.05441 [cs.CR]. 

Odkazy