0. 시스템콜?
여러 OS들은 자신의 체계를 보호하고 효율적인 자원 관리를 위하여 시스템을 유저모드와 커널 모드로 권한을 나눕니다.
1) 유저모드
운영체제가 사용자에게 부여하는 권한입니다. 텍스트에 글을 쓰거나, 동영상을 시청하거나, 무언가를 다운받을때 유저 모드로 작동되게 됩니다.
2) 커널모드
커널모드는 운영체제가 시스템 제어를 위하여 시스템 소프트웨어에 부여하는 권한입니다. 메모리관리, 통신, 파일시스템, 파일을 읽고 명령을 내리는 하드웨어와 밀접한 작업을 할때는 커널 모드에서 진행됩니다. 커널 모드에서는 말 그대로 시스템 전체를 통제할 수 있기때문에 커널이 익스플로잇이 된다면 거의 모든 행동을 할 수 있습니다.
그렇다면 시스템콜은 무엇일까요?
syscall이라고 불리기도 하는 시스템콜은 유저 모드에서 커널모드의 시스템 소프트웨어에게 행위를 요청하는 것을 말합니다. 예를 들어 a라는 파일을 읽기 위하여 cat a를 입력하면 유저모드는 파일시스템에서 해당 정보를 가지고 와야하기 때문에 커널에 도움을 요청합니다. 이 요청을 시스템 콜이라고 하는데 커널은 이요청을 받아 결과를 유저에게 반환하는 역할을 하게 됩니다.
1. 시스템콜
1. x64
시스템 콜은 기본적으로 함수의 형태로 이루어져 있습니다. 레지스터를 세팅하고 함수를 호출한다고 생각하시면 됩니다.
x64 아키텍쳐에선 rax에 따라서 호출되는 시스템콜이 다르다고 할 수 있습니다. rax에 세팅된 값을 보고
rdi ▶ rsi ▶ rdx ▶ rcx ▶ r8 ▶ r9 ▶ 스택 순으로 인자를 넣게 됩니다. 테이블을 보면서 이해해 보겠습니다.
시스템콜 | rax 세팅 | rdi ( arg 0) | rsi ( arg 1) | rdx (arg 2) |
read | 0x00 | unsigned int fd | char *buf | size_t count |
write | 0x01 | unsigned int fd | const char *buf | size_t count |
open | 0x02 | const char *filename | int flags | umode_t mode |
close | 0x03 | unsigned int fd |
네가지 시스템 콜을 보여드렸지만, 시스템콜은 300개정도 있고, 검색하면서 확인해보시는게 좋지만 기본적으로 읽기(read) ,쓰기(write), 열기(open), 닫기(close), execve정도는 숙지가 되어 있으시는게 좋습니다.
'System 관련 CS > 시스템 해킹을 위한 기초 지식' 카테고리의 다른 글
[ 시스템 106 ] pwngdb 사용법, gdb 명령어 정리 및 예시 (0) | 2023.08.01 |
---|---|
[ 시스템 105 ] 실행파일의 종류 (PE파일, ELF파일)를 알아보고 gdb, pwndbg 플러그인 설치해보자 (0) | 2023.08.01 |
[시스템 103] x86-64 어샘블리 기초지식 ( x86-64 assembly ) (0) | 2022.09.06 |
[시스템 102] 레지스터? x86-64 레지스터 분석 (0) | 2022.09.06 |
[시스템 101] Process Memory 프로세스 메모리 분석 (0) | 2022.09.05 |