NX 비트
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
NX 비트는 메모리 페이지에 대한 실행 권한을 제어하는 기술로, 코드 실행을 허용하거나 금지하여 보안을 강화한다. AMD가 AMD64 아키텍처에 도입한 후 인텔도 x86 프로세서에 유사한 기능을 추가했다. NX 비트는 페이지 테이블의 특정 비트 값을 사용하여 구현되며, 운영체제는 이를 활용하여 스택이나 힙 영역에서 코드 실행을 막아 버퍼 오버플로우 공격과 같은 보안 위협을 방어한다. 윈도우, 리눅스, OS X 등 다양한 운영체제가 NX 비트를 지원하며, 데이터 실행 방지(DEP)와 같은 이름으로 사용되기도 한다.
더 읽어볼만한 페이지
- 운영 체제 보안 - 슈퍼유저
슈퍼유저는 운영 체제에서 모든 권한을 가진 사용자를 지칭하며, 유닉스 계열에서는 root, 윈도우에서는 관리자 계정이 해당 역할을 수행한다. - 운영 체제 보안 - LXC
LXC는 리눅스 커널의 cgroup과 네임스페이스 격리 기능을 이용하여 운영 체제 수준의 가상화를 제공하는 기술로, IBM 연구원들이 개발했으며 보안 강화 및 LXD 컨테이너 관리자 프로젝트를 통해 발전해왔다. - 중앙 처리 장치 - 마이크로컨트롤러
마이크로컨트롤러는 프로세서, 메모리, 입출력 기능을 단일 칩에 통합하여 임베디드 시스템의 핵심이 되는 부품으로, 프로그램 내장 방식을 통해 소프트웨어만으로 제어 기능 변경이 가능하며, 현재는 32비트 ARM, MIPS 아키텍처 기반 제품이 주를 이루고, 저전력 소모, 소형화, 다양한 기능 통합을 특징으로 다양한 분야에서 활용된다. - 중앙 처리 장치 - 컴퓨터 냉각
컴퓨터 냉각은 CPU나 GPU 같은 부품에서 발생하는 열을 제거하여 안정적인 작동을 돕는 기술로, 초기 자연 공랭 방식에서 발전하여 공랭, 수랭, 액침 냉각 등 다양한 방식으로 컴퓨터 부품 수명 연장, 성능 저하 방지, 고성능 컴퓨팅 환경 지원에 기여한다.
NX 비트 | |
---|---|
일반 정보 | |
이름 | 실행 불가능 비트 |
다른 이름 | NX 비트 (Never eXecute bit) XD 비트 (eXecute Disable bit) APX (Access Permissions eXecute) EVP (Enhanced Virus Protection) |
설명 | CPU의 메모리 보호 기능 |
유형 | 하드웨어 기반 보안 기능 |
목적 | 악성 코드 실행 방지 |
기술적 세부 사항 | |
작동 방식 | 메모리 페이지에 실행 가능 여부 속성을 부여 |
지원 아키텍처 | x86 x86-64 ARM (VMSAv6 이상) |
주요 기능 | 데이터 영역에서 코드 실행을 막아 버퍼 오버플로 공격을 방어 |
구현 방식 | AMD: 향상된 바이러스 보호 (EVP) 기술 (XD 비트) 인텔: 실행 불가능 비트 (XD 비트) ARM: APX (Access Permissions eXecute), XN (eXecute Never) 비트 |
역사 및 개발 | |
최초 개발 | AMD |
최초 상용화 | AMD K6-2 프로세서 |
보안 효과 | |
주요 방어 대상 | 버퍼 오버플로 공격 악성 코드 실행 |
추가 정보 | NX 비트는 완벽한 보안 솔루션이 아니며, 다른 보안 기술과 함께 사용해야 효과적임 |
2. 역사적 배경
NX 비트는 메인프레임이나 워크스테이션 등에서 이미 사용되던 기술이었으나, 개인용 컴퓨터 (PC)에서는 AMD가 2000년대 초반 AMD64 아키텍처에 처음 도입하면서 널리 알려지게 되었다.[2]
인텔은 2001년에 IA-64 아키텍처를 사용하는 아이테니엄 프로세서에 유사한 기능을 구현했지만, 널리 사용되던 x86 프로세서 계열(펜티엄, 셀러론, 제온 등)에는 도입하지 않았다. x86 아키텍처에서 이 기능은 AMD가 애슬론 64 및 옵테론과 같은 AMD64 계열 프로세서에 "NX 비트"로 처음 구현하였다.[2] AMD의 결정 이후, 인텔은 펜티엄 4 프로세서부터 XD 비트 (eXecute Disable)라는 유사한 기능을 x86 프로세서에 구현했다.[3]
NX 비트는 데이터 영역의 코드가 실행되는 것을 막는 기능으로, 운영 체제와 CPU의 협력을 통해 버퍼 오버런 공격과 같은 보안 위협을 방지하는 데 사용된다. 이 기능은 메모리를 코드 영역과 데이터 영역으로 분리하고, 데이터 영역에 특별한 표시를 하여 해당 영역의 데이터 실행을 막는 방식으로 작동한다.
2. 1. x86 아키텍처
80286 이후 x86 프로세서들은 세그먼트 수준의 비슷한 기능을 제공했지만, 플랫 메모리 모델(Flat memory model)을 사용하는 현대 운영체제에서는 실질적인 효과가 없었다.[2] 80386 이후 프로세서의 페이지 테이블에는 "실행 가능" 플래그가 없어 페이지 수준의 실행 제어가 불가능했다.[2]AMD는 AMD64 아키텍처에서 페이지 테이블 항목에 "실행 불가" 비트(NX 비트)를 추가하여 페이지 단위의 실행 제어를 가능하게 했다.[2] 이는 전체 세그먼트가 아닌 페이지 단위로 실행을 제어할 수 있는 메커니즘을 제공했다.
AMD가 이 기능을 AMD64 명령어 세트에 도입하기로 결정한 뒤, 인텔은 펜티엄 4 프로세서부터 XD 비트(eXecute Disable)라는 이름으로 유사한 기능을 도입하였다.[3]
NX 비트는 페이지 테이블 안에 있는 64비트 엔트리의 비트 숫자 63(최상위 비트)을 가리킨다. 이 비트가 0이면 해당 페이지에서 코드를 실행할 수 있고, 1이면 코드를 실행할 수 없으며, 해당 페이지의 모든 내용은 데이터로 간주된다. 이 기능은 물리 주소 확장(PAE) 페이지 테이블 포맷에서만 사용할 수 있다.[2]
2. 2. 기타 아키텍처
썬의 SPARC, 알파, IBM의 파워PC와 같은 다양한 프로세서 아키텍처에서 페이지 수준의 실행 제어 기능이 이미 여러 해 동안 사용되었다.[1] 2001년에는 인텔이 IA-64 아키텍처를 사용하는 아이테니엄 프로세서에 비슷한 기능을 추가했다. AMD가 AMD64 계열 프로세서에 NX 비트를 도입한 이후, NX 비트라는 용어는 다른 프로세서의 비슷한 기술을 설명할 때도 흔히 쓰이게 되었다.- ARMv6에는 "실행 금지" 비트가 포함된 새로운 페이지 테이블 항목 형식이 도입되었다.[1]
- ARMv8-A는 특권 모드와 비특권 모드에 대해 "실행 금지" 비트를 가지며, 2단계 변환에 대해서는 단일 "실행 금지" 비트를 가진다.[4]
- 알파 아키텍처 설명서에 따르면, 페이지 테이블 항목에 실행 오류 비트가 있다.[5]
- 썬 마이크로시스템즈 SPARC 버전 8용 SPARC 참조 MMU는 페이지 테이블 항목에 읽기 전용, 읽기/쓰기, 읽기/실행, 읽기/쓰기/실행 권한 값을 갖는다.[6]
- SPARC 버전 9 MMU는 읽기/쓰기/실행 권한의 임의 조합을 제공할 수 있다.[7]
- Oracle SPARC Architecture 2011의 Translation Table Entry는 별도의 실행 비트와 쓰기 비트를 갖는다.[8]
- IBM 파워PC의 페이지 테이블 항목에는 실행 불가능 비트가 있다.[9]
- 파워 ISA의 페이지 테이블 항목에는 읽기/쓰기 및 실행 접근 권한을 부여하는 별도의 권한 비트가 있다.[10]
- 변환 색인 버퍼(TLB) 항목과 PA-RISC의 페이지 테이블 항목은 읽기 전용, 읽기/쓰기, 읽기/실행 및 읽기/쓰기/실행 페이지를 지원한다.[11][12]
- Itanium의 TLB 항목은 읽기 전용, 읽기/쓰기, 읽기/실행 및 읽기/쓰기/실행 페이지를 지원한다.[13]
- z/Architecture 프로세서는 명령어 실행 보호 기능을 지원할 수 있으며, 페이지 테이블 항목에 비트를 추가하여 명령어 실행 여부를 제어한다.[14]
아키텍처 | 실행 제어 기능 | 비고 |
---|---|---|
SPARC | 페이지 수준 실행 제어 | 썬 마이크로시스템즈 |
알파 | 실행 오류 비트 | DEC |
파워PC | 실행 불가능 비트 | IBM |
아이테니엄 | 페이지 수준 실행 제어 | 인텔, IA-64 아키텍처 |
AMD64 | NX 비트 | AMD |
ARMv6 | 실행 금지 비트 | |
ARMv8-A | 실행 금지 비트 | 특권/비특권 모드, 2단계 변환에 따라 다름 |
PA-RISC | 페이지 수준 실행 제어 | |
z/Architecture | 명령어 실행 보호 기능 |
NX 비트는 페이지 테이블 항목의 특정 비트(일반적으로 최상위 비트)를 사용하여 해당 페이지의 실행 가능 여부를 나타낸다. 이 비트가 1로 설정되면 해당 페이지는 데이터 영역으로 간주되어 코드 실행이 차단된다.[2] NX 비트는 물리 주소 확장(PAE) 페이지 테이블 형식 또는 롱 모드(64비트 모드)에서만 사용할 수 있는데, 원래 x86의 32비트 페이지 테이블 형식에는 이 비트가 없기 때문이다.[3]
W^X, Exec Shield와 같은 일부 운영 체제는 하드웨어 지원 이전에 소프트웨어적으로 NX 비트 기능을 에뮬레이션하여 제공했다. NX 비트를 에뮬레이션하면 스택 및 힙 메모리 영역의 실행을 방지하고, 실행 가능한 메모리에 쓰기를 방지하여 새서 웜, 블래스터 웜과 같은 특정 버퍼 오버플로 공격을 막을 수 있다. 이러한 공격은 쓰기 및 실행이 가능한 메모리 영역(주로 스택)에 의존하기 때문에, 쓰기나 실행이 불가능하면 공격은 실패한다.
대부분의 현대 운영체제는 NX 비트 또는 이와 유사한 기능을 지원한다. 주요 운영체제별 지원 현황은 다음과 같다.
3. 기술적 특징
AMD가 AMD64 명령어 세트에 이 기능을 도입하기로 결정한 후, 인텔은 프레스캇 코어의 x86 기반 펜티엄 4 프로세서부터 이와 비슷한 XD 비트 기능을 도입하였다.[3]
구체적으로, NX 비트는 페이지 테이블 안에 있는 64비트 엔트리의 63번 비트(최상위 비트)를 가리킨다. 이 비트가 0이면 해당 페이지에서 코드를 실행할 수 있다. 1이면 해당 페이지에서 코드를 실행할 수 없으며, 해당 페이지의 모든 내용은 데이터로 간주된다.[2]
4. 소프트웨어적 구현
5. 운영체제별 지원 현황
5. 1. 리눅스
리눅스 커널은 2004년 2.6.8 버전부터 NX 비트를 지원하기 시작했다. 앤디 클린은 64비트 모드에서, 인고 몰나는 32비트 모드에서 NX 비트 지원을 추가했다.
일부 데스크톱 리눅스 배포판(페도라 코어 6, 우분투 리눅스, 오픈수세 등)은 펜티엄 프로 이전, 셀러론 M, 펜티엄 M 프로세서와 같이 PAE를 지원하지 않는 구형 프로세서와의 호환성을 위해 기본 커널에서 HIGHMEM64 옵션(32비트 모드에서 NX 비트 접근에 필요)을 활성화하지 않는다. 이러한 프로세서에서는 PAE 모드를 켜면 시동에 실패할 수 있다.
Exec Shield, PaX 등의 기술을 통해 소프트웨어적으로 NX 비트 기능을 에뮬레이션할 수 있다.
5. 2. FreeBSD
FreeBSD는 2004년 5.3-RELEASE부터 NX 비트를 지원한다. 2007년 4월 6일에는 관련 기능 개선이 있었다.
하드웨어 지원 프로세서 | |
---|---|
에뮬레이션 | |
기타 지원 | |
기본 제공 여부 | |
출시일 |
5. 3. OS X
애플의 인텔 기반 OS X은 10.4.4 버전부터 NX 비트를 지원한다.5. 4. 윈도우
윈도우 XP 서비스 팩 2와 윈도우 서버 2003 서비스 팩 1부터 데이터 실행 방지(DEP)라는 이름으로 NX 기능을 지원한다.[2] Windows XP/Server 2003에서는 하드웨어 NX 지원 여부에 따라 NX 기능이 자동으로 활성화된다.[2]Windows에서 NX에 의한 보호는 중요한 Windows 서비스에만 사용된다. DEP 설정은 "내 컴퓨터"의 "고급 시스템 설정"에서 변경할 수 있다.
"소프트웨어 DEP"는 NX 비트와 관계없이, 마이크로소프트가 "안전한 예외 처리기"에 붙인 명칭이다. "소프트웨어 DEP"는 애플리케이션의 함수 테이블에 예외가 등록되어 있는지 확인하여 프로그램이 안전하게 설계되었는지 검증한다.
DEP는 ASLR(Address Space Layout Randomization)을 제공하지 않아, Return-to-libc 공격을 통해 DEP를 무효화할 수 있다. ASLR은 윈도우 비스타부터 제공되었다.
x86 이외에는, 인텔 IA-64에서 동작하는 Windows용 NX 버전이 존재한다.
항목 | 내용 |
---|---|
하드웨어 지원 프로세서 | AMD64, IA-64, Efficeon, Intel 64, 펜티엄 M(후기 리비전), 셈프론(후기 리비전) |
에뮬레이션 | 없음 |
기타 지원 | 없음 |
표준 탑재 여부 | 윈도우 XP 서비스 팩 2, 윈도우 서버 2003 서비스 팩 1, 윈도우 비스타 |
출시일 | 2004년 8월 6일 |
5. 5. OpenBSD
OpenBSD 운영 체제는 W^X (Write XOR Execute)라는 기술을 사용한다.[15] AMD64 포트에서는 NX 비트 기술을 활용하여 W^X를 구현한다. W^X는 OpenBSD에서 NX 비트를 지원하지 않는 CPU에서도 작동한다.W^X는 Alpha, AMD64, PA-RISC, SPARC 프로세서의 NX 비트를 지원한다. (초기 Intel 64는 NX 기능이 없었기 때문에 지원하지 않는다.)
OpenBSD 3.3은 2003년 5월 1일에 출시되었으며, W^X를 처음으로 포함한 버전이다.
5. 6. NetBSD
NetBSD 2.0 (2004년 12월 9일 출시) 이후 버전부터 NX 비트를 지원하며, 지원하는 아키텍처에서 실행 불가능한 스택과 힙을 제공한다.AMD64, SPARC64, SPARC (sun4m, sun4d), PowerPC (ibm4xx), Alpha, SH5 및 PA-RISC는 페이지 단위의 세밀한 제어를 지원한다.
PowerPC(예: macppc), 80386는 영역 단위의 제어만 지원한다.
NetBSD는 기본적으로 NX 비트 기능을 활용하는 소프트웨어를 사용하지 않기 때문에, 다른 아키텍처에서는 실행 불가능한 스택이나 힙의 이점을 얻지 못한다.
5. 7. Solaris
Solaris 10은 NX 비트를 지원하는 프로세서에서 부팅될 때, 보호 기능을 자동적으로 활성화한다. 프로그램의 스택 세그먼트에 대한 과거 32비트 ABI 처리 방식은 예외이다. 대부분의 프로그램은 변경 없이 작동하지만, 기존 애플리케이션 실행 시 SIGSEGV가 발생하는 경우, eeprom (1M)을 사용하여 enforce-prot-exec를 off로 설정하고 재부팅하여 NX 기능을 비활성화할 수 있다. 버그는 애플리케이션 개발자에게 보고하여 PROT_EXEC를 적절히 사용하도록 업데이트할 수 있다. 자세한 내용은 eeprom(1M) 매뉴얼 페이지 및 mmap(2) 매뉴얼 페이지의 PROT_EXEC 항목을 참조한다.6. 동등 기술 간 기능 비교
하드웨어 NX 비트는 일반적으로 CPU 자체에서 연산을 수행하므로 오버헤드가 거의 발생하지 않는다. 반면, 소프트웨어 에뮬레이션은 정확도에 따라 오버헤드가 발생할 수 있다.[1] 처리 능력, 정확성, 가상 메모리 공간 손실 없이 오버헤드를 줄이는 에뮬레이션 방법은 현재까지 개발되지 않았다.[1]
참조
[1]
웹사이트
ARM Architecture Reference Manual
http://www.arm.com/m[...]
ARM Limited
[2]
서적
Hands on Virtual Computing
https://books.google[...]
Cengage Learning
2017-05-24
[3]
웹사이트
Data Execution Prevention
http://h10032.www1.h[...]
Hewlett Packard
2014-03-23
[4]
웹사이트
ARM Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile
http://infocenter.ar[...]
ARM Limited
[5]
서적
Alpha Architecture Reference Manual
http://download.maji[...]
Compaq Computer
2002-01-01
[6]
웹사이트
The SPARC Architectural Manual, Version 8
http://sparc.org/wp-[...]
SPARC International
[7]
웹사이트
The SPARC Architecture Manual, Version 9
https://web.archive.[...]
SPARC International
[8]
웹사이트
Oracle SPARC Architecture 2011, Draft D1.0.0
http://www.oracle.co[...]
Oracle Corporation
2016-01-12
[9]
서적
PowerPC Operating Environment Architecture Book III, Version 2.01
IBM
2003-12-01
[10]
웹사이트
Power ISA Version 3.0
https://openpowerfou[...]
IBM
2015-11-30
[11]
웹사이트
PA-RISC 1.1 Architecture and Instruction Set Reference Manual, Third Edition
https://web.archive.[...]
Hewlett-Packard
1994-02-01
[12]
웹사이트
PA-RISC 2.0 Architecture, Chapter 3: Addressing and Access Control
https://web.archive.[...]
Hewlett-Packard
[13]
웹사이트
Intel Itanium Architecture Software Developer's Manual, Volume 2: System Architecture, Revision 2.0
https://web.archive.[...]
Intel
2001-12-01
[14]
서적
z/Architecture Principles of Operation
http://publibfp.dhe.[...]
IBM
2017-09-01
[15]
문서
메모리 접근 제어
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com