검색 여닫기
검색
메뉴 여닫기
531
239
4
2.1천
noriwiki
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
파일 올리기
환경 설정 메뉴 여닫기
notifications
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
user-interface-preferences
한국어
개인 도구
로그인
Intel Memory Protection Extensions 문서 원본 보기
noriwiki
문서 공유하기
다른 명령
←
Intel Memory Protection Extensions
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
[[분류: 하드웨어 기반 보안]] [[분류: 인텔]] = Intel Memory Protection Extensions (MPX) = '''Intel Memory Protection Extensions''' (MPX)는 Intel이 설계한 x86 아키텍처 확장으로, 런타임 시 포인터 참조의 유효 범위를 검사하여 버퍼 오버플로우와 같은 메모리 오류를 방지하는 것을 목표로 하였다. 그러나 실효성에 대한 우려와 다수의 설계적 결함으로 인해 대부분의 운영체제 및 컴파일러에서 지원이 중단되었으며, 2019년 이후 생산된 Intel 하드웨어에서는 완전히 제거되었다. == 개요 == Intel MPX는 포인터의 하한(lower bound) 및 상한(upper bound)을 레지스터에 저장하고, 포인터 연산 수행 시 이 범위 내에서 동작하는지를 검사한다. 이러한 구조는 하드웨어 및 소프트웨어 계층의 협업을 필요로 하며, 별도의 컴파일러 플래그 및 런타임 지원이 요구된다. == 아키텍처 및 동작 방식 == MPX는 다음과 같은 구성 요소로 이루어져 있다: * '''바운드 레지스터''' – BND0~BND3의 네 개의 128비트 레지스터는 각각 포인터의 하한과 상한 값을 저장한다. * '''바운드 테이블(BT) 및 바운드 디렉토리(BD)''' – 주소 매핑 정보를 계층적으로 저장하며, 런타임에 포인터의 경계를 확인하는 데 사용된다. * '''명령어 확장''' – <code>BNDLDX</code>, <code>BNDSTX</code> 등의 명령어는 메모리에서 바운드 정보를 불러오거나 저장하는 데 사용된다. 상한 값은 1의 보수 형태로 저장되며, 관련 명령어(<code>BNDCU</code>, <code>BNDMK</code> 등)가 이를 자동 변환한다. == 소프트웨어 지원 == {| class="wikitable" ! 컴포넌트 !! 지원 현황 |- | glibc || 2.35 버전부터 MPX 제거 |- | GNU GCC || 5.0에서 도입, 9.1에서 제거<ref>GCC Bugzilla, [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87063 Remove MPX support from GCC 9]</ref> |- | Intel C Compiler || 15.0부터 지원 |- | Linux 커널 || 3.19에서 도입, 5.6에서 제거<ref>Linux Kernel Archives, [https://lore.kernel.org/all/20190716101203.12986-1-mhocko@suse.com/ MPX removal patchset]</ref> |- | QEMU || 2.6~3.x 버전에서 지원, 4.0에서 제거 |- | Visual Studio || 2015 Update 1에서 실험적 지원<ref>[https://learn.microsoft.com/en-us/visualstudio/releasenotes/vs2015-update1 Visual Studio 2015 Update 1 Release Notes]</ref> |} == 한계 및 분석 == 여러 연구에 따르면 MPX는 다음과 같은 문제점을 가진다: * '''낮은 성능''' – 평균 50%의 오버헤드가 발생하며, 최악의 경우 최대 4배 느려진다. * '''시간적 메모리 안전 보장 불가''' – dangling pointer 등의 시간적 오류를 감지하지 못한다. * '''스레드 안전 미보장''' – 바운드 테이블 접근은 멀티스레드 환경에서 동기화되지 않는다. * '''프로그래밍 언어 특성 미지원''' – C/C++의 flexible array member, offset 연산 등을 완전히 지원하지 못한다. * '''타 ISA 확장과의 충돌''' – Intel TSX, SGX 등과의 호환성 문제로 인해 성능 및 보안 문제가 발생할 수 있다. * '''추가적인 성능 저하''' – MPX 기능이 비활성화된 CPU에서도 MPX 명령어의 존재 자체로 오버헤드가 발생한다. == 보안 연구 사례 == Meltdown 계열의 취약점을 활용한 실험에서는, MPX가 보호하는 배열에 대해 <code>#BR</code> (Bound Range Exceeded) 예외를 우회할 수 있음이 입증되었다. 연구자들은 <code>Flush+Reload</code> covert channel을 통해 보호된 메모리의 내용을 유출하는 데 성공하였다. 해당 연구는 MPX의 보안성이 한계가 있음을 보여주는 대표적인 사례로 간주된다. == 평가 == Intel MPX는 하드웨어 기반의 포인터 검증 메커니즘을 제공하였으나, 성능, 호환성, 실효성 측면에서 충분한 효과를 보이지 못하였다. 주요 컴파일러 및 운영체제는 이를 AddressSanitizer와 같은 더 가벼운 소프트웨어 기반 솔루션으로 대체하였다. == 참고 문헌 == <references /> == 같이 보기 == * [[AddressSanitizer]] * [[SoftBound]] * [[Spectre (security vulnerability)]] * [[Meltdown (security vulnerability)]]
Intel Memory Protection Extensions
문서로 돌아갑니다.