background/linux kernel

Supervisor Mode Execution Prevention(SMEP)/Supervisor Mode Access Prevention(SMAP)

ssongk 2024. 5. 2. 14:15
  • 커널은 절대 사용자 공간 메모리(userspace memory)를 실행하거나 접근해서는 안된다.
  • 이러한 규칙은 하드웨어 기반으로 제한(x86의 SMEP/SMAP, ARM의 PXN/PAN)을 지원하거나 에뮬레이션(ARM의 메모리 도메인)을 통해 시행할 수 있다.
  • 이러한 방식으로 사용자 공간 메모리를 차단하면 실행 및 데이터 구문 분석이 사용자 공간 메모리로 전달 될 수 없으므로, 공격이 커널 메모리에서만 작동하도록 만든다.

 

SMEP (Supervisor Mode Execution Prevention)

  • 사용자 모드에 있는 실행 코드를 Ring-0 권한으로의 실행을 제한하고 충돌을 일으킨다.
  • 따라서 사용자 모드 페이로드 실행에 의존하는 EoP 익스플로잇을 실행하지 못하게 된다.
  • 이를 통해 Intel OS Guard는 EoP(Escalation of Privilege) 보안 공격을 방지하는 데 도움이 된다.
  • 다음과 같은 명령어로 SMEP의 활성화 여부를 알 수 있다.
$ sudo cat /proc/cpuinfo |grep smep

 

SMAP(Supervisor Mode Access Prevention)

  • SMEP의 목적은 수퍼바이저 모드에서 명령 패치 및 코드 실행을 제어하는 ​​것 이라면, SMAP는 수퍼바이저 모드의 데이터 엑세스를 방지하는 것이다.
  • 페이지 관리자 모드 데이터 액세스로부터 보호 가능
  • SMAP = 1, OS가 애플리케이션의 선형 주소에서 데이터에 액세스할 수 없는 경우
  • 다음과 같은 명령어로 SMAP의 활성화 여부를 알 수 있다.
$ sudo cat /proc/cpuinfo |grep smap

 

Privileged execute-never(PXN)/Privileged Access Never(PAN) - arm

  • PXN은 ARM 하드웨어에 의해 제공되며 SMEP와 유사한 기능이다.
  • ARM v8.1에 PAN이 도입 되었는데 SMAP와 유사한 기능이며 커널이 사용자 공간에 직접 액세스하지 못하게 막아준다.

 

CR4 Register

  • 컨트롤 레지스터는 프로세서의 운영 모드나 현재 실행 중인 태스크의 특성을 결정하는 데 이용된다.
  • x86에서는 CR0, CR1, CR2, CR3, CR4 5개의 컨트롤 레지스터가 있다.
  • x86-64에서는 CR8이 추가되어 6개의 컨트롤 레지스터가 있다.
  • CR4레지스터에서는 프로세스에서 지원하는 각종 확장 기능들을 제어하며, SMEP, SMAP 기능들도 제어된다.
  • SMEP 비트는 CR4 레지스터의 비트는 20, SMAP 비트는 21이며 인텔은 다음과 같이 정의한다.
  • 이 비트를 1로 설정하면 활성화되고 0으로 설정하면 비활성화된다.

[https://www.lazenca.net/pages/viewpage.action?pageId=25624859] CR4 register

 

SMEP bypass

  • "return to user" 전에 CR4 레지스터의 값을 변경하여 SEMP를 비활성화하면 된다.
  • 또는 ROP를 이용한 우회도 가능하다.
  • 다음과 같은 가젯을 찾아서 활용하면 된다.
pop rdi ; ret
mov cr4, rdi ;

 


 

 

https://www.lazenca.net/pages/viewpage.action?pageId=25624859

 

02.Segregation of kernel memory from userspace memory(x86's SMEP/SMAP, ARM's PXN/PAN) - TechNote - Lazenca.0x0

Excuse the ads! We need some help to keep our site up. List 02.Segregation of kernel memory from userspace memory(x86’s SMEP/SMAP, ARM’s PXN/PAN) 커널은 절대 사용자 공간 메모리(userspace memory)를 실행과 접근해서는 안됩니다.

www.lazenca.net