Intel MPX

Intel MPX ( Memory Protection Extensions )   er en udvidelse af instruktionssættet til x86 / x86-64- arkitekturen , foreslået i 2013. Med støtte fra compileren , runtime- bibliotekerne og operativsystemet øger Intel MPX-udvidelsen programmernes sikkerhed med hensyn til hukommelsesadgang ved at tilføje pointer -adgangskontrol , især for at forhindre bufferoverløbsangreb .

Understøttelse af udvidelsen blev fjernet fra mange softwareprodukter i slutningen af ​​2018/begyndelsen af ​​2019.

Udvidelser

MPX introducerer nye grænseregistre og flere instruktioner , der behandler disse registre . Derudover introduceres konceptet "grænsetabeller", som gemmer beskrivelser af hukommelsesområder i tilfælde af mangel på grænseregistre. [1] [2] [3] [4]

MPX definerer fire nye 128-bit grænseregistre, BND0..BND3, som hver lagrer et par 64-bit nedre grænser (LB) og øvre grænser (UB) af værdierne af et objekt i hukommelsen, såsom en buffer eller et array . Den øvre grænse gemmes i ens komplementformat , og konverteringen sker, når værdien er indlæst med instruktionerne BNDMKog BNDCU. Arkitekturen tilføjede et brugerkonfigurationsregister BNDCFGU, et privilegeret konfigurationsregister IA32_BNDCFGS(som en del af MSR-registrene ) og et statusregister BNDSTATUS, der giver information om en fejlagtig adresse i hukommelsen og en fejlkode i tilfælde af en undtagelse. [5]

En applikation kan bruge Bounds Directory (BD) for flere Bounds Tables (BT), der indeholder buffermarkørens lineære adresser sammen med bufferens grænser. Tabellerne er organiseret som et to-niveau radix-træ fra pointerens lineære adresse [6] . De to indlæser og gemmer instruktioner - BNDLDXog BNDSTX - synkroniserer registerværdierne BNDxmed de grænser, der er angivet i biblioteket. [5] De to instruktioner, der er indsat af compileren, BNDCLog BNDCU, tjek markøren for at være inden for de specificerede grænser (henholdsvis nedre og øvre) og resulterer i en undtagelse uden for grænserne.

Brugen af ​​MPX kræver yderligere hukommelse til at beskrive grænserne. I værste tilfælde ville 4 kilobyte af forskellige pointere (1024 eller 512) kræve 16 kilobyte grænsetabeller (hver grænse gemmer 4 værdier på størrelse med pointer). Indlæsning af grænser fra eller ind i tabeller er et hukommelseshit og kan forsinke nogle programmer [6] .

Support

Intel MPX-udvidelserne blev introduceret i Skylake- mikroarkitekturen . [7] Intel Goldmont (Atom) mikroarkitekturer understøtter også Intel MPX. [otte]

Support i Linux -kernen dukkede op i version 3.19 (8. februar 2015), [9] [10] suppleret fra version 4.1 [6] . I 2018 blev det foreslået at fjerne understøttelsen af ​​Intel MPX fra den kommende udgivelse af Linux-kernen 4.20 [11] [12] , men de tilsvarende ændringer blev kun accepteret for version 5.6. Understøttelse af MPX blev fjernet i marts 2020-udgivelsen af ​​Linux-kernen 5.6 [13] .

Understøttet i GCC- kompileren fra 5.2 [6] [4] til 9.0 (maj 2019) [14] [15] . Implementeret i Intel Compiler 15.0 [16] og Microsoft Visual Studio 2015 Update 1 [17] .

Analyse af Intel MPX

I 2017 blev en uafhængig udvidelsesgennemgang og sammenligning af teknologien med tre moderne hukommelsessikkerhedssoftwaresystemer ( AddressSanitizer , SAFECode, SoftBound) offentliggjort. [atten]

Gennemgangen konkluderede, at MPX ikke var klar til brug i industrielle applikationer og indikerede, at AddressSanitizer var en bedre mulighed. [18] Kostya Serebryany [19] [20] , udvikleren af ​​AddressSanitizer, en ansat i det transnationale selskab Google, udtrykte samme mening .

Undersøgelsen af ​​MPX i lyset af Meltdown- og Spectre -sårbarhederne [21] viste, at Meltdown-angreb ikke stoppes ved hjælp af Intel MPX, og at det er muligt at udføre datalækage (datafiltrering) gennem sidekanalen ved hjælp af Flush + Reload-metoden ved adgang uden for array-grænserne beskyttet af MPX.

Noter

  1. Intel ISA-udvidelser . Intel . Hentet 4. november 2013. Arkiveret fra originalen 10. november 2013.
  2. Introduktion til Intel Memory Protection Extensions . Intel (16. juli 2013). Hentet 10. september 2013. Arkiveret fra originalen 28. juli 2013.
  3. Diskussion af Intel Memory Protection Extensions (MPX) og sammenligning med AddressSanitizer . code.google.com . Hentet 4. november 2013. Arkiveret fra originalen 4. juli 2015.
  4. 1 2 Understøttelse af Intel Memory Protection Extensions (Intel MPX) i GCC-kompileren . gcc.gnu.org . Hentet 4. november 2013. Arkiveret fra originalen 11. juni 2019.
  5. 1 2 Intel Architecture Instruction Set Extensions Programming Reference (PDF). Intel (december 2013). Dato for adgang: 17. januar 2014. Arkiveret fra originalen 1. februar 2014.
  6. 1 2 3 4 Intel® Memory Protection Extensions (Intel® MPX) til Linux* | 01.org Arkiveret 2. april 2017 på Wayback Machine , 2016
  7. Intel Software Development Emulator . Intel (15. juni 2012). Hentet 4. november 2013. Arkiveret fra originalen 16. oktober 2013.
  8. Intel Software Development Emulator . Intel. Hentet 21. november 2016. Arkiveret fra originalen 6. maj 2019.
  9. Linux-kerne 3.19, afsnit 1.2. Understøttelse af Intel Memory Protection Extensions . kernelnewbies.org (9. februar 2015). Hentet 9. februar 2015. Arkiveret fra originalen 12. februar 2015.
  10. Jonathan Corbet. Understøtter Intel MPX i Linux . LWN.net (29. januar 2014). Hentet 9. februar 2015. Arkiveret fra originalen 9. februar 2015.
  11. Linux-kernen kan miste understøttelse af hukommelsesbeskyttelsesudvidelser . Phoronix . Hentet 31. marts 2020. Arkiveret fra originalen 28. april 2020.
  12. [GIT PULL x86: fjern Intel MPX] . Hentet 1. august 2019. Arkiveret fra originalen 7. august 2019.
  13. Intel MPX-understøttelse er død med Linux 5.6 - Phoronix . www.phoronix.com . Hentet 31. marts 2020. Arkiveret fra originalen 29. februar 2020.
  14. GCC 9 Release Series - Ændringer, nye funktioner og rettelser - GNU Project - Free Software Foundation (FSF) . Hentet 1. august 2019. Arkiveret fra originalen 19. februar 2022.
  15. GCC 9 ser ud til at fjerne Intel MPX Support - Phoronix . Hentet 1. august 2019. Arkiveret fra originalen 9. februar 2019.
  16. https://istep2016.ru/files/presentations/IntelR%20Compilers.pdf#page=26 Arkiveret 21. november 2016.
  17. Visual Studio 2015-opdatering 1: Ny eksperimentel funktion - MPX | C++ teamblog . Hentet 1. august 2019. Arkiveret fra originalen 15. januar 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 - Forskning hos Google . research.google.com . Hentet 1. august 2019. Arkiveret fra originalen 16. september 2016.
  20. Diskussion af Intel Memory Protection Extensions (MPX) og sammenligning med AddressSanitizer . Hentet 4. november 2013. Arkiveret fra originalen 12. januar 2019.
  21. Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal & Fetzer, Christof (2018), A Systematic Evaluation of Transient Execution Attacks and Defense, arΧiv : 1811.05441 [cs.CR]. 

Links