인텔 MPX
Intel MPXIntel MPX(Memory Protection Extensions)는 x86 명령 집합 아키텍처의 확장 세트였다.인텔 MPX는 컴파일러, 런타임 라이브러리, 운영체제 지원을 통해 정상적인 컴파일 시간 의도가 버퍼 오버플로로 인해 런타임에 악의적으로 악용되는 포인터 레퍼런스를 체크해 소프트웨어 보안을 강화했다고 주장했다.실제로 설계에서 너무 많은 결함이 발견되어 유용하지 않으며 대부분의 컴파일러 및 운영 체제에서 지원이 사용되지 않거나 제거되었다.인텔은 자사의 Intel® 64 및 IA-32 Architectures Software Developer's Manual Volume 1의 섹션 2.5에 MPX를 2019년 제거 및 향후 하드웨어로 나열했다.
확장
인텔 MPX는 새로운 경계 레지스터와 이러한 레지스터에서 작동하는 새로운 명령 집합 확장을 도입한다.또한, 경계 레지스터에 들어갈 수 있는 범위를 초과하는 경계를 저장하는 새로운 "경계 테이블" 세트가 있다.[2][3][4][5][6]
MPX는 4개의 128비트 경계 레지스터를 사용한다.BND0
로BND3
각각 버퍼의 64비트 하한(LB) 및 상한(UB) 값 쌍을 저장한다.상한은 자신의 보완형태로 저장되며, 다음과 같다.BNDMK
(한계 생성) 및BNDCU
(상위값 선택) 변환 수행아키텍처에 두 개의 구성 레지스터가 포함됨BNDCFGx
(BNDCFGU
사용자 공간에서BNDCFGS
커널 모드) 및 상태 레지스터BNDSTATUS
예외일 경우 메모리 주소와 오류 코드를 제공한다.[7][8]
2단계 주소 변환은 메모리에 한계를 저장하는 데 사용된다.상단 계층은 애플리케이션 시작 시 생성된 경계 디렉토리(BD)로 구성된다.각 BD 항목은 비어 있거나 동적으로 생성된 BT(Bound Table)에 대한 포인터를 포함하며, 포인터들의 선형 주소와 함께 포인터 경계 집합을 포함한다.경계 하중 (BNDLDX
() 및 저장(BNDSTX
) 지시사항은 적절한 BT 항목에서 주소 변환 및 액세스 제한을 투명하게 수행한다.[7][8]
인텔 MPX는 스카이레이크 마이크로아키텍처(Skylake 마이크로아키텍처)의 일환으로 도입됐다.[9]
인텔 골드몬트 마이크로아키텍처도 인텔 MPX를 지원한다.[9]
소프트웨어 지원
- glibc 버전 2.35에서 지원을 제거했다.
- GNU 컴파일러 컬렉션(GCC) 5.0은 MPX에 대한 지원을 추가했다.[10]2018년에는 유지보수 부담으로 인해 이러한 확장에 대한 지원이 약화되고 인텔 개발자들이 간헐적으로 패치를 기여하면서 GCC 9.0에서 지원을 중단하자는 제안이 나왔다.[11]GCC 9.1에서 지원이 제거되었다.[12]
- 인텔 C++ 컴파일러(icc) 15.0은 인텔 MPX에 대한 지원을 추가했다.[10]
- 인텔 MPX에 대한 커널 레벨 소프트웨어 지원은 2015년 2월 8일 출시된 커널 버전 3.19의 Linux 커널 메인라인으로 통합되었다.[13][14]2018년에 Thomas Gleixner는 Linux 커널 4.18에서 MPX 지원을 제거할 것을 제안했다.[15]철거와 함께 당김 요청은 2018년 12월 개발 주기 4.20에 게시됐지만 받아들여지지 않았다.[16]두 번째 시도는 2019년 7월에 이루어졌다.[17]MPX 지원은 5.6에서 제거되었다.[18]
- QEMU는 버전 2.6[19] 이후 MPX를 지원했고 4.0 릴리즈에서 지원을 중단했다.[20]
- 마이크로소프트 비주얼 스튜디오 2015 업데이트 1은 MPX에 대한 실험 지원을 추가했다.[21]
인텔 MPX 분석
한 연구는 MPX 시스템 스택의 상세한 단층 절편 및 3가지 소프트웨어 기반 메모리 보호 메커니즘(AddressSanitizer, SAFECode, SoftBound)과의 비교를 조사하여 다음과 같은 결론을 제시하였다.[8]
- 인텔 MPX는 자체 하드웨어 레지스터 세트가 추가된 특수 설계된 하드웨어 지원 접근법이지만, 어떤 소프트웨어 기반 접근법보다 빠르지 않다.컴파일러 최적화로 인해 상각되고 평균적으로 최대 50%의 런타임 오버헤드가 발생하지만 새로운 Intel MPX 지침은 최악의 경우 최대 4배의 성능 저하를 초래할 수 있다.
- 다른 소프트웨어 기반 솔루션과 달리 Intel MPX는 일시적 메모리 안전 오류에 대한 보호를 제공하지 않는다.
- Intel MPX는 멀티스레딩을 본질적으로 지원하지 않으며, 이는 레거시 스레드 프로그램에서 안전하지 않은 데이터 레이스로 이어질 수 있으며 컴파일러가 경계를 명시적으로 동기화하지 않을 수 있다.
- Intel MPX는 허용된 메모리 레이아웃의 제한으로 인해 몇 가지 일반적인 C/C++ 프로그래밍 숙어를 지원하지 않는다.
- 인텔 MPX는 일부 다른 ISA 확장과 충돌하여 성능 및 보안 문제가 발생하고 있다.좀 더 구체적으로, 이러한 문제는 Intel MPX가 Intel TSX 및 Intel SGX와 같은 다른 하드웨어 기반 보호 메커니즘과 결합하여 사용될 때 발생한다.
- 마지막으로 MPX가 지원되지 않는 인텔 CPU에서도 MPX 지침은 상당한 성능 저하(15+%)를 초래한다.
또한, 검토 결과 MPX는 생산 준비가 되지 않았으며 AddressSanitizer가 더 나은 선택이라고 결론 내렸다.[8]어드레스새니저의 개발사인 구글의 코스타 세레브리아니 리뷰에서도 비슷한 결과가 나왔다.[22][23]
멜트다운
Spectre 및 Meltdown 보안 취약성의 범위를 조사한 또 다른 연구에서는 BR(Bound Range Extended) 하드웨어 예외를 사용하여 멜트다운을 사용하여 Intel MPX를 우회할 수 있다는 사실이 밝혀졌다.그들의 출판물에 따르면, 연구원들은 MPX 시스템에 의해 보호되는 어레이에 대한 경계 밖으로의 접근으로부터 Flush+Reload 은밀한 채널을 통해 정보를 유출할 수 있었다.그들의 개념 증명서는 공개되지 않았다.
참고 항목
참조
- ^ Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture. Intel. November 2020. Retrieved 2021-03-03.
- ^ "Intel ISA Extensions". Intel. Retrieved 2013-11-04.
- ^ "Introduction to Intel Memory Protection Extensions". Intel. 2013-07-16. Retrieved 2013-09-10.
- ^ "Discussion of Intel Memory Protection Extensions (MPX) and comparison with AddressSanitizer". code.google.com. Retrieved 2013-11-04.
- ^ "Intel® Memory Protection Extensions (Intel® MPX) support in the GCC compiler". gcc.gnu.org. Retrieved 2013-11-04.
- ^ "Intel MPX Explained: Storing bounds in memory". intel-mpx.github.io. Retrieved 2017-02-06.
- ^ a b "Intel Architecture Instruction Set Extensions Programming Reference" (PDF). Intel. December 2013. Retrieved 2014-01-17.
- ^ a b c d 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". arXiv:1702.00719 [cs.CR].
- ^ a b "Intel Software Development Emulator". Intel. 2012-06-15. Retrieved 2013-11-04.
- ^ a b "Design of Intel MPX". Intel.
- ^ "GCC 9 Looks Set To Remove Intel MPX Support". Phoronix. Retrieved 2018-04-27.
- ^ "Intel MPX Support Removed From GCC 9 - Phoronix". www.phoronix.com.
- ^ "Linux kernel 3.19, Section 1.2. Support for the Intel Memory Protection Extensions". kernelnewbies.org. February 9, 2015. Retrieved February 9, 2015.
- ^ Jonathan Corbet (January 29, 2014). "Supporting Intel MPX in Linux". LWN.net. Retrieved February 9, 2015.
- ^ "The Linux Kernel Might Drop Memory Protection Extensions Support". Phoronix.
- ^ "[GIT PULL] x86: remove Intel MPX".
- ^ "[PATCH 0/3] [RFC] x86: start the MPX removal process".
- ^ "Intel MPX Support Is Dead With Linux 5.6 - Phoronix". www.phoronix.com.
- ^ "ChangeLog/2.6".
- ^ "QEMU 4 arrives with toys for Arm admirers, RISC-V revolutionaries, POWER patriots... you get the idea". The Register.
- ^ "Visual Studio 2015 Update 1: New Experimental Feature – MPX". Microsoft. 2016-01-20.
- ^ "Konstantin Serebryany - Research at Google". research.google.com.
- ^ "Discussion of Intel Memory Protection Extensions (MPX) and comparison with AddressSanitizer". GitHub. Retrieved 2013-11-04.
- ^ Canella, Claudio; Van Bulck, Jo; Schwarz, Michael; Lipp, Moritz; von Berg, Benjamin; Ortner, Philipp; Piessens, Frank; Evtyushkin, Dmitry; Gruss, Daniel (2018). "A Systematic Evaluation of Transient Execution Attacks and Defenses". arXiv:1811.05441 [cs.CR].
외부 링크
- Intel Architecture Instruction Set Extensions Programming Reference (PDF). Intel. July 2013. Retrieved 2016-01-10.
- 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". arXiv:1702.00719 [cs.CR]. 온라인 보충 자료(https://intel-mpx.github.io.
- "Introduction to Intel Memory Protection Extensions". Intel. 2013-07-16. Retrieved 2013-09-10.
- "Intel ISA Extensions". Intel. Retrieved 2013-11-04.
- "Intel® Memory Protection Extensions (Intel® MPX) support in the GCC compiler". gcc.gnu.org. Retrieved 2013-11-04.
- Hansen, Dave (2016-03-16). "Intel® Memory Protection Extensions (Intel® MPX) for Linux". Retrieved 2018-05-17.