[시스템해킹] 시스템콜(syscall)

ShinboTinBBO·2025년 1월 27일

systemhacking

목록 보기
3/4

스톰트루퍼 둠칫둠칫
스둠둠~

syscall이란

유저모드에서 커널모드에게 동작을 요청하는 방법이다.
유저모드란 운영체제가 사용자에게 부여하는 권한이기 때문에 상당히 한정적이다. 그렇기에 파일시스템에 접근하는 등 그 이상의 권한을 얻기 위해서 이를 가능하게 하는 커널모드의 접근으로 syscall을 사용한다.

어셈블리에서의 활용

syscall은 추가적인 인자를 필요로 하지 않는 단일 명령 니모닉이다.
그렇기에 어셈블리 상황에서도 단 한줄만 입력하면 된다.

syscall

하지만 이 하나의 명령은 굉장히 다양한 동작을 수행할 수 있다.
이러한 동작은 레지스터의 값들에 의해서 결정된다.

rax : syscall에 따른 동작을 결정한다.

예를 들어 rax가 0x0이면 이는 sys_read를 실행하여 파일의 내용을 읽근다. 

그리고 아래의 순서대로의 레지스터가 각 함수의 인자를 차례대로 담당한다.

rdi rsi rdx rcx r8 r9 stack

rdi에 설정되어 있는 값을 함수의 첫번째 인자, 
rsi에 있는 값을 함수의 두번째 인자로 사용하여 동작한다.  

참고자료

링크와 같이 다양한 자료에서 syscall을 호출 시 레지스트의 값에 대한 정보를 제공하고 있다.

이들을 이용해서 shellcode를 작성할 때와 같이 다양한 상황에서 syscall을 사용하는데 도움을 얻을 수 있을 것이다.

다음에는 shellcode를 직접 작성해보는 것을 공부해보게카

profile
지상 최강의 해적

0개의 댓글