NX 비트
(
NX bit, Never eXecute bit
, 實行 防止 비트)는 프로세서 命令語나 코드 또는 데이터 貯藏을 위한 메모리 領域을 따로 分離하는
CPU
의 技術이다. 이 機能은
하버드 아키텍처
프로세서에서 普通 쓰인다. 그러나 NX 비트는 基本的인
폰 노이만 救助
프로세서에서 保安을 目的으로 많이 쓰인다.
NX 特性으로 指定된 모든 메모리 區域은 데이터 貯藏을 위해서만 使用되며, 프로세서 命令語가 그 곳에 常住하지 않음으로써 實行되지 않도록 만들어 준다.
實行 保護
라는 一般 技術은 특정한 種類의 惡性 소프트웨어를 컴퓨터에 들어오지 못하게 막는 데 使用된다. 惡性 소프트웨어의 境遇 自身의 코드를 다른 프로그램의 資料 記憶 領域에 심어 놓은 다음 이 區域 안에서 自身의 코드를 實行하게 만들며, 이를
버퍼 오버플로
攻擊이라고 한다.
인텔은 eXecute Disable의 弱者인
XD 비트
로 廣告하기로 決定하였다. 그러나 인텔의 XD 비트와 AMD의 NX 비트는 같은 機能을 遂行하며 이름만 다른 것이다.
하드웨어 背景
[
編輯
]
80286 以後의 x86 프로세서들은
세그먼트
水準으로 追加된 비슷한 機能을 提供한다. 그러나 이러한 制御 救助는 너무 貧弱하여 쓸모가 없다. 特히
플랫 메모리 모델(Flat memory model)
을 使用하는 現代의 소프트웨어의 境遇에는 그렇다. 完全한 세그먼트가 아닌, 各 페이지마다 實行을 制御할 수 있는 새로운 構造가 必要하게 되었다.
페이지 水準의 救助는
썬
의
SPARC
,
알파
,
IBM
의
파워PC
와 같은 다른 다양한 프로세서 아키텍처에서 여러 해 동안 使用되었다. 2001年에 인텔은
IA-64
아키텍처를 使用하는 自社의
아이테니엄
(Merced) 프로세서에 비슷한 機能을 追加하였지만, 當時 사람들이 愛用하던 x86 프로세서 系列(펜티엄, 셀러론, 제온 等)에는 導入하지 않았다. x86 아키텍처의 境遇,
AMD
는
애슬론 64
와
옵테론
과 같은
AMD64
系列 프로세서에 NX 비트를 導入하였다. NX 비트라는 用語는 다른 프로세서의 비슷한 技術을 敍述할 때에도 흔히 쓰이게 되었다.
AMD가 이 機能을 AMD64 命令語 세트에 導入하기로 決定한 뒤, 인텔은 後半 프레스캇 코어의 x86 基盤의
펜티엄 4
프로세서부터 이와 비슷한 機能을 導入하였다.
具體的으로 말해, NX 비트는
페이지 테이블
안에 있는 64비트 엔트리의 비트 數字 63(最上位 비트)을 일컫는다. 이 비트가 0으로 設定된 境遇, 코드는 그 페이지에서 實行될 수 있다. 1로 設定된 境遇, 코드는 그 페이지에서 實行될 수 없으며 어떠한 것도 그 데이터에 常住할 수 없다. 또한
物理 住所 擴張
(PAE) 페이지 테이블 포맷으로만 使用될 수 있다는 것도 잊어서는 안 된다. 왜냐하면 x86의 元來 32비트 페이지 테이블 포맷은 分明히 비트 63이 存在하지 않기 때문이다.
소프트웨어 具現
[
編輯
]
하드웨어로 이 機能을 具現하기 앞서, 여러 運營 體制는 소프트웨어를 통해 이 機能을 假想으로 具現하였다. 이를테면
W^X
또는
Exec Shield
를 들 수 있다.
NX 비트의 利點을 利用하고 이를 假想으로 具現하는 機能을 包含하는
運營 體制
는
스택
과
히프
메모리 領域이 實行되지 못하게 막으며, 實行 可能한 메모리를 記錄하지 못하게 막는다. 特히
璽書 웜
과
블래스터 웜
과 같은 코드를 實行하고 拒否하는 特定한
버퍼 오버플로
의 利用을 막는 데 도움을 준다. 이러한 攻擊은 쓰기 可能, 實行 可能이 되기 위한 메모리 一部 (普通 스택)에 따라 달라진다. 쓰기나 實行이 不可한 境遇, 攻擊은 失敗로 끝난다.
運營 體制로의 導入
[
編輯
]
수많은 運營 體制는 NX 政策을 包含하고 있으며, 그 運營 體制들 가운데 一部는 NX 에뮬레이션을 使用한다. 一部 技術의 境遇, 各 技術이 支援하는 주된 機能을 다음과 같이 要約하고 있다.
- 하드웨어 支援 프로세서: (CPU 아키텍처의 쉼標 區分 目錄)
- 에뮬레이션: (아니오) 또는 (아키텍처 獨立) 또는 (CPU 아키텍처의 쉼標 區分 目錄)
- 其他 支援: (없음) 또는 (CPU 아키텍처의 쉼標 區分 目錄)
- 標準 分配: (아니오) 또는 (예) 또는 (이 技術을 支援하는 버전이나 配布의 쉼標 區分 目錄)
- 公開일: (처음 公開된 날)
아키텍처 獨立
에뮬레이션
을 供給하는 技術은 하드웨어的으로 支援하지 않는 모든 프로세서에서 使用할 수 있다. "其他 支援"는 NX 비트가 分明히 存在하지 않는 프로세서를 爲한 것이다.
FreeBSD
[
編輯
]
FreeBSD
는 2007年 4月 6日 以後로 NX를 支援하지 않는다.
OS X
[
編輯
]
인텔 基盤
OS X
은
애플
로부터 NX 비트를 支援한다. (처음 公開한 인텔 基盤의 10.4.4 뒤로).
리눅스
[
編輯
]
리눅스 커널
은 NX 비트를 支援하는 CPU(이를테면 現在 팔리는 64비트 AMD, 인텔, VIA, 트랜스메타 CPU)의 基本 하드웨어 NX를 支援하고 있다.
x86_64 CPU 위의 64비트 모드에서 이 機能에 對한 支援이
2004年
에
앤디 클린
에 依해 追加되었고, 같은 해에
忍苦 몰나
는 64비트 CPU 위의 32 비트 모드에서 NX 비트에 對한 支援을 追加하였다. 이러한 機能들은 安定化된 리눅스 커널(2004年 8月에 公開한 2.6.8 以後)에서 使用할 수 있다.
32비트 x86 CPU와 64비트 x86 互換 CPU에서 實行되는 32비트 x86 커널 위의 NX 비트의 利用은 매우 重要하다. 왜냐하면 32비트 x86 커널은 普通
AMD64
나
IA-64
가 提供하는 NX 비트를 豫測하지 못하기 때문이다. NX 使用 可能火 패치는 "NX 비트"를 使用할 수 있는 環境을 갖추었을 境遇 이러한 커널이 NX 비트를 使用할 수 있게 도와 준다.
一部 데스크톱
리눅스 配布版
, 이를테면
페도라 코어 6
,
우분투 리눅스
,
오픈수세
는 32 비트 모드에서 NX 비트 接近에 要求되는 HIGHMEM64 옵션을 基本 커널에서 켜 놓지 않는다. 그 까닭은 NX 비트 使用에 必要한 PAE 모드를 켜 놓고 (PAE를 支援하지 않는)
펜티엄 프로
移轉,
셀러론 M
,
펜티엄 M
프로세서를 使用할 境遇, 始動에 失敗하기 때문이다. PAE를 支援하지 않는 다른 프로세서는
AMD K6
移轉,
트랜스메타 크루소
,
VIA C3
以前, 그리고
Geode
GX/LX가 있다.
페도라 코어 6
은 PAE, NX를 支援하는 커널 PAE 패키지를 提供하지 않는다.
實行 防止 機能은 다른 비 x86 프로세서에도 存在한다.
같이 보기
[
編輯
]
外部 링크
[
編輯
]