ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (626)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (13)
      • dreamhack (12)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

Supervisor Mode Execution Prevention(SMEP)/Supervisor Mode Access Prevention(SMAP)
background/linux kernel

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

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

 

'background > linux kernel' 카테고리의 다른 글

[Linux Kernel Exploit] Slab Allocator & msg_msg Struct  (3) 2024.10.03
[Linux Kernel Exploit] ROP (with ret2usr)  (0) 2024.04.05
Kernel Address Display Restriction (KADR)  (0) 2024.04.04
[Linux Kernel Exploit] ret2usr  (0) 2024.04.04
Kernel Address Space Layout Randomization (KASLR)  (0) 2024.04.03
    'background/linux kernel' 카테고리의 다른 글
    • [Linux Kernel Exploit] Slab Allocator & msg_msg Struct
    • [Linux Kernel Exploit] ROP (with ret2usr)
    • Kernel Address Display Restriction (KADR)
    • [Linux Kernel Exploit] ret2usr
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바