<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=Intel_Memory_Protection_Extensions</id>
	<title>Intel Memory Protection Extensions - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=Intel_Memory_Protection_Extensions"/>
	<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=Intel_Memory_Protection_Extensions&amp;action=history"/>
	<updated>2026-06-14T01:55:01Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://junhoahn.kr/noriwiki/index.php?title=Intel_Memory_Protection_Extensions&amp;diff=2107&amp;oldid=prev</id>
		<title>Ahn9807: 새 문서: 분류: 하드웨어 기반 보안 분류: 인텔  = Intel Memory Protection Extensions (MPX) =  &#039;&#039;&#039;Intel Memory Protection Extensions&#039;&#039;&#039; (MPX)는 Intel이 설계한 x86 아키텍처 확장으로, 런타임 시 포인터 참조의 유효 범위를 검사하여 버퍼 오버플로우와 같은 메모리 오류를 방지하는 것을 목표로 하였다. 그러나 실효성에 대한 우려와 다수의 설계적 결함으로 인해 대부분의 운영체제 및 컴파일...</title>
		<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=Intel_Memory_Protection_Extensions&amp;diff=2107&amp;oldid=prev"/>
		<updated>2025-05-27T11:12:44Z</updated>

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