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]
- På trods af de hardwareblokke, der bruges i Intel MPX, resulterer det ikke i hurtigere programudførelse sammenlignet med softwarebeskyttelsesmetoder. De nye MPX-instruktioner fører i værste fald til en firedobbelt opbremsning, og ved brug af optimeringer er den gennemsnitlige afmatning omkring 50 %.
- I modsætning til andre metoder beskytter MPX ikke mod tidssikre hukommelsessikkerhedsbrud.
- Intel MPX indeholder ikke eksplicit multithreading-understøttelse, hvilket kan føre til race-forhold i ældre multithreaded-applikationer, hvis compilere ikke bruger eksplicit grænsesynkronisering.
- Intel MPX understøtter ikke adskillige almindeligt anvendte C/C++ sprogsprog på grund af begrænsninger for hukommelsesplacering.
- Intel MPX er ikke fuldt ud kompatibel med individuelle udvidelser, især kan der være problemer med ydeevne og sikkerhed, når det blandes med Intel TSX og Intel SGX .
- Når man udfører MPX-operationer på ældre generationer af processorer (for eksempel Haswell), er der en afmatning på omkring 15%.
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
- ↑ Intel ISA-udvidelser . Intel . Hentet 4. november 2013. Arkiveret fra originalen 10. november 2013. (ubestemt)
- ↑ Introduktion til Intel Memory Protection Extensions . Intel (16. juli 2013). Hentet 10. september 2013. Arkiveret fra originalen 28. juli 2013. (ubestemt)
- ↑ Diskussion af Intel Memory Protection Extensions (MPX) og sammenligning med AddressSanitizer . code.google.com . Hentet 4. november 2013. Arkiveret fra originalen 4. juli 2015. (ubestemt)
- ↑ 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. (ubestemt)
- ↑ 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. (ubestemt)
- ↑ 1 2 3 4 Intel® Memory Protection Extensions (Intel® MPX) til Linux* | 01.org Arkiveret 2. april 2017 på Wayback Machine , 2016
- ↑ Intel Software Development Emulator . Intel (15. juni 2012). Hentet 4. november 2013. Arkiveret fra originalen 16. oktober 2013. (ubestemt)
- ↑ Intel Software Development Emulator . Intel. Hentet 21. november 2016. Arkiveret fra originalen 6. maj 2019. (ubestemt)
- ↑ 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. (ubestemt)
- ↑ Jonathan Corbet. Understøtter Intel MPX i Linux . LWN.net (29. januar 2014). Hentet 9. februar 2015. Arkiveret fra originalen 9. februar 2015. (ubestemt)
- ↑ Linux-kernen kan miste understøttelse af hukommelsesbeskyttelsesudvidelser . Phoronix . Hentet 31. marts 2020. Arkiveret fra originalen 28. april 2020. (ubestemt)
- ↑ [GIT PULL x86: fjern Intel MPX] . Hentet 1. august 2019. Arkiveret fra originalen 7. august 2019. (ubestemt)
- ↑ 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. (ubestemt)
- ↑ 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. (ubestemt)
- ↑ GCC 9 ser ud til at fjerne Intel MPX Support - Phoronix . Hentet 1. august 2019. Arkiveret fra originalen 9. februar 2019. (ubestemt)
- ↑ https://istep2016.ru/files/presentations/IntelR%20Compilers.pdf#page=26 Arkiveret 21. november 2016.
- ↑ Visual Studio 2015-opdatering 1: Ny eksperimentel funktion - MPX | C++ teamblog . Hentet 1. august 2019. Arkiveret fra originalen 15. januar 2019. (ubestemt)
- ↑ 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].
- ↑ Konstantin Serebryany - Forskning hos Google . research.google.com . Hentet 1. august 2019. Arkiveret fra originalen 16. september 2016. (ubestemt)
- ↑ Diskussion af Intel Memory Protection Extensions (MPX) og sammenligning med AddressSanitizer . Hentet 4. november 2013. Arkiveret fra originalen 12. januar 2019. (ubestemt)
- ↑ 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