NX 비트

위키百科, 우리 모두의 百科事典.
( 實行 防止 비트 에서 넘어옴)

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 프로세서에도 存在한다.

같이 보기 [ 編輯 ]

外部 링크 [ 編輯 ]