inflearn logo
강의

Course

Instructor

Linux Kernel Hacking: A to Z

swapgs_restore_regs_and_return_to_usermode

Resolved

534

r0am

4 asked

0

안녕하세요. 

페이지 테이블을 분리해주는 역할을 하는 swapgs_restore_regs_and_return_to_usermode함수를 사용하는 것이 왜 KPTI를 우회할 수 있게 해주는 것인지 궁금합니다. 

kpti 시스템 해킹 linux 모의해킹

Answer 1

1

v4bel

안녕하세요.

swapgs_restore_regs_and_return_to_usermode 는 강의에 나온 대로, 커널 모드에서 유저 모드로 전환할 때 호출되는 함수입니다.

KPTI가 설정될 경우 커널 공간과 유저 공간이 서로 다른 페이지 테이블을 사용하게 되는데, 이 swapgs_restore_regs_and_return_to_usermode 함수에서는 cr3 레지스터의 값을 커널의 페이지 테이블에서 유저의 페이지 테이블로 전환시켜주는 역할을 하기 때문에 KPTI 우회에 사용되는 것입니다.

 

다시 말해,

1. KPTI는 커널과 유저가 서로 다른 페이지 테이블을 사용하도록 합니다. 그렇기 때문에 모드 간 전환시 cr3에 저장된 페이지 테이블 주소를 변환시켜주어야 합니다.

2. cr3 변환 작업을 하는 함수가 바로 swapgs_restore_regs_and_return_to_usermode 함수입니다. 이 함수는 KPTI의 설정 여부에 상관없이 호출됩니다(KPTI 설정 여부에 따라 함수의 흐름이 달라짐).

3. exploit이 완료되고 유저 모드로 복귀할 때 cr3를 유저 모드의 페이지 테이블 주소로 변경해주지 않으면, 당연히 커널 패닉이 발생하기 때문에 ROP chain의 마지막에 swapgs_restore_regs_and_return_to_usermode 함수가 사용됩니다.

 

0

r0am

답변 감사합니다!

강의 들으며 정리한 글을 블로그에 공개로 올려도 될까요?

0

82

2

cred 구조체에 __randomize_layout이 적용된건가요?

0

84

1

ppt자료 문의

0

108

2

빌드환경 및 커널소스의 버전

0

139

1

Stack based BOF 강의에서 질문입니다.

0

185

2

kaslr 우회 기법에서 commit_creds, prepare_kernel_cred의 offset을 구하는 과정 질문

0

216

1

CTF 참가 시 전문 분야

0

317

1

SMAP 우회에서 궁금한게 하나 있습니다.

0

405

2

KADR 우회에서 init파일이 없는 경우는 어떻게 하나요?

0

463

1

KADR 우회에서 init파일이 없는 경우는 어떻게 하나요

0

312

1

여전히 해결책 없는 build_result

0

427

1

KASLR 강의에서 주어진 환경에서는 /proc/kallsyms 확인 못하는 것이 맞나요?

0

609

1

build_result가 안보입니다

0

288

1

kernel stack pivoting에서 gadget 관련 질문드립니다.

0

507

1

안녕하세요 수강중 궁금한 것이 있습니다.

0

574

2

pwndbg가 커널에 attach는 되는데 디스어셈코드나 레지스터 표시가 안됩니다.

0

581

1

가젯에 대해 이해가 잘 안됩니다.

0

608

1

Kernel KPTI 적용시 영향?

0

656

1

qemu 스크립트 실행시 Kernel panic이 발생합니다.

0

881

2

Kernel UAF

0

650

1

디버깅 방법

0

936

3

강의 자료 문의

0

381

1

boot.sh 실행시

0

365

1

Kernel Debugging

0

413

1