슈퍼바이저 모드접근 방지
Supervisor Mode Access Prevention슈퍼바이저 모드액세스 방지(SMAP)는 인텔 Broadwell 마이크로아키텍처 등 일부 CPU 구현의 기능으로 슈퍼바이저 모드에서 이들 매핑에 액세스하면 트랩이 발생하도록 슈퍼바이저 모드프로그램에서 임의로 사용자 공간 메모리 매핑을 설정할 수 있습니다.이로 인해 악성 프로그램이 사용자 공간 [1][2]프로그램의 명령 또는 데이터를 사용하도록 커널을 "속이기" 어렵게 됩니다.
역사
슈퍼바이저 모드액세스 방지는 앞서 소개한Supervisor Mode Execution Prevention(SMEP; 슈퍼바이저 모드실행방지)을 보완하기 위해 설계되었습니다.SMEP 를 사용하면, 슈퍼 바이저 모드가 의도하지 않게 유저 스페이스 코드를 실행하는 것을 방지할 수 있습니다.SMAP는 이 보호를 읽기 및 [2]쓰기까지 확장합니다.
혜택들
Supervisor Mode Access Prevention을 사용하지 않으면 보통 슈퍼바이저 코드는 사용자와 공간의 메모리 매핑에 대한 완전한 읽기 및 쓰기 액세스 권한을 가집니다(또는 완전한 액세스 권한을 취득할 수 있습니다).이로 인해 권한 상승 공격 등 여러 보안 공격이 개발되어 커널이 [3]의도하지 않았을 때 사용자 공간 메모리에 액세스하도록 함으로써 작동합니다.운영체제는 SMAP을 사용하여 의도하지 않은 사용자 공간 메모리 액세스를 강제로 실행하여 페이지 장애를 트리거함으로써 이러한 부정 이용을 차단할 수 있습니다.또한 SMAP은 사용자 공간 [1]메모리에 액세스하는 절차를 따르지 않는 결함이 있는 커널 코드를 노출시킬 수 있습니다.
다만, 슈퍼 바이저 코드가 [4]유저 스페이스 메모리에 액세스 하려면 , SMAP 를 일시적으로 디세블로 할 필요가 있기 때문에, operating system에서 SMAP 를 사용하면, 커널 사이즈가 커지거나 슈퍼 바이저 코드에서 유저 스페이스의 메모리액세스가 느려지는 일이 있습니다.
기술적 세부사항
프로세서는 확장기능 CPUID 리프 경유로 슈퍼바이저 모드액세스 방지 지원을 나타내고 있습니다.
SMAP는 메모리페이징이 활성화되어 있고 CR4 컨트롤 레지스터의 SMAP 비트가 설정되어 있을 때 활성화됩니다.EFLAGS 를 설정하는 것으로써, 명시적인 메모리액세스에 대해서 SMAP 를 일시적으로 디세블로 할 수 있습니다.AC(Alignment Check) 플래그.그stac(AC 플래그 설정) 및clac([5]AC 플래그 지우기) 지침을 사용하여 플래그를 쉽게 설정하거나 지울 수 있습니다.
CR4의 SMAP 비트가 설정되어 있는 경우, EFLAGS가 3 미만의 특권 레벨로 실행되고 있는 코드에 의해 실행되는 사용자 모드페이지에 대한 명시적인 메모리의 판독과 쓰기는 항상 페이지 장애를 일으킵니다.AC 플래그가 설정되어 있지 않습니다.SMAP 가 네이블이 되어 있는 경우, EFLAGS 의 값에 관계없이, 유저 모드의 페이지에의 암묵적인 판독과 기입(디스크 리프터 테이블에의 기입 등)에 의해서, 항상 페이지 장해가 트리거 됩니다.AC.[5]
운영 체제 지원
Supervisor Mode Access Prevention의 Linux 커널 지원은 H. Peter Anvin에 [1]의해 구현되었습니다.메인라인 Linux 3.7 커널에 병합되었으며 [4]이 기능을 지원하는 프로세서에서 기본적으로 사용하도록 설정됩니다.
FreeBSD는 2012년부터[6] 슈퍼바이저 모드 실행 방지,[7] 2018년부터 슈퍼바이저 모드액세스 방지를 지원하고 있습니다.
OpenBSD는 2012년부터 [8]Supervisor Mode Access Prevention 및 관련 Supervisor Mode Execution Prevention을 지원하며 OpenBSD 5.3은 이 기능을 지원하는 [9]첫 번째 릴리스입니다.
슈퍼바이저 모드 실행 방지(SMP)에 대한 NetBSD 지원은 2015년 [10]12월에 Maxime Villard에 의해 구현되었습니다.슈퍼바이저 모드액세스 방지(SMAP)의 서포트도 [11]2017년8월에 Maxime Villard에 의해서 실장되었습니다.NetBSD 8.0은, 서포트 기능과 [12]이네이블의 양쪽 모두의 기능을 갖춘 최초의 릴리스입니다.
슈퍼바이저 모드 실행 방지(SMEP)에 대한 하이쿠 지원은 2018년 [13]1월에 Jérome Duval에 의해 구현되었습니다.
macOS는 적어도 2017년 [14]macOS 10.13 출시 이후 SMAP를 지원하고 있다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b c Corbet, Jonathan (2012-09-26). "Supervisor mode access prevention". LWN.net. Retrieved 2017-08-04.
- ^ a b Mulnix, David (2015-05-22). "Intel Xeon Processor D Product Family Technical Overview: Supervisor Mode Access Protection (SMAP) 4". Intel. Retrieved 2017-08-04.
- ^ Corbet, Jonathan (2009-07-20). "Fun with NULL pointers, part 1". LWN.net. Retrieved 2017-08-04.
- ^ a b Larabel, Michael (2012-10-02). "Intel SMAP Comes To Try To Better Secure Linux". Phoronix. Retrieved 2017-08-04.
- ^ a b "Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A: System Programming Guide, Part 1" (PDF). Intel. July 2017. Retrieved 2017-08-04.
- ^ Belousov, Konstantin (2012-11-01). "Revision 242433". Retrieved 2018-01-19.
- ^ Belousov, Konstantin (2018-07-29). "Revision 336876". Retrieved 2018-07-30.
- ^ Henderson, Stuart (2017-03-26). "Re: Does OpenBSD have SMEP and SMAP implementation? or MPX?". Retrieved 2017-08-04 – via marc.info.
- ^ "OpenBSD 5.3". OpenBSD. 2013-05-01. Retrieved 2017-08-04.
- ^ "Significant changes from NetBSD 7.0 to 8.0". NetBSD. 2017-10-12. Retrieved 2018-01-09.
- ^ Maxime Villard (2017-08-23). "amd64: smap support". Retrieved 2018-01-09.
- ^ "Announcing NetBSD 8.0 (July 17, 2018)". NetBSD. 2018-07-17. Retrieved 2018-07-29.
- ^ "kernel: support for Intel SMAP and SMEP on x86_64". Haiku (operating system). 2018-01-30. Retrieved 2018-09-04.
- ^ "/osfmk/x86_64/idt64.s.auto.html". Apple Inc. 2017-09-25. Retrieved 2018-09-19.