1. intro
2. code 및 분석
2.1. code
생략
2.2. 분석
특정 바이너리에서 모듈을 load하는데, 이 때 seccomp가 걸려있어 write 함수 이외에는 사용할 수 없게된다.
다만, 모듈 내에서 바이너리로부터 전달받은 쉘코드를 실행해준다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
seccomp bypass
3.2. 공격 준비
개인적으로 내가 이걸 풀었다는게 레전드라고 생각한다.
물론 힌트를 다소 참고하긴 했지만...
유저 영역에서의 seccomp는 결국 커널 영역의 특정 주소에 실행 가능 (또는 불가) 한 함수에 따라 bit setting을 해두고, 이를 참조하며 실행 여부를 판단한다.
https://docs.google.com/presentation/d/1YMlOERClX6Yi8Fb9DYxBBJ5MYB1C-_F75XKkoSmbl8k/embed
주요 사항은 위 슬라이드의 7 page 내용이며, 슬라이드에서와 같이 결론적으로 아래 한 줄만 처리하면 된다.
current_task_struct->thread_info.flags &= ~(1 << TIF_SECCOMP)
그래서 해당 주소를 알아내야하는데,
운 좋게도 gs register를 기준으로 해당 값을 알아낼 수 있다.
이에, 물론 커널 버전에 따라 다를 수 있겠지만, 아래 강의와 같이 테스트를 통해 알아낼 수 있다.
https://youtu.be/mKzUA3j6myg?list=PL-ymxv0nOtqowTpJEW4XTiGQYx6iwa6og
해당 코드는
pwnkernel/src/make_root.c at main · pwncollege/pwnkernel · GitHub
에 있으니 참고하고, 이를 토대로 shellcode를 작성하자.
유의사항으로는 마찬가지로 동영상 강의에서 보는 것과 같이 자식 스레드가 생성되면 자식 스레드는 부모 스레드의 seccomp로 실행되기 때문에 부모 스레드에서 flag를 읽는 행위를 해야한다.
4. exploit
생략
'Wargame > pwn.college' 카테고리의 다른 글
kernel security level9 (0) | 2023.09.25 |
---|---|
pwn.college - kernel security payload (0) | 2023.09.25 |
kernel security level1~7 (0) | 2023.09.24 |
Kernel security - 명령어 사용법 (0) | 2023.09.22 |
Dynamic Allocator Misuse - level 1~20 (0) | 2023.08.21 |