쉘코드(shellcode)를 이용한 권한 상승

2021. 4. 29. 19:47

 

쉘코드(shellcode)란?

● 시스템의 특정 명령을 실행할 수 있는 작은 문자열의 집합.

● 즉, 쉘을 실행시키기 위한 기계어 코드.

● 소프트웨어 취약점을 이용하기 위한 내용부에 주로 사용된다.

● 대개 어셈블리어로 작성되며, 이를 기계어로 변환하여 사용한다.

 

익스플로잇(exploit)이란?

● 프로그램에 존재하는 취약점을 공격하는 행위

● 대개 컴퓨터 혹은 서버 내 권한 획득 또는 서비스 거부 공격(DoS)가 목적이다.

 

페이로드(payload)란?

● 익스플로잇을 위해 프로그램에 입력되는 데이터

● 해커의 명령을 수행하는 코드와 공격조건을 맞추기 위한 목적으로,

● 코드는 공격코드와 의미없는 값으로 구성

 

 

권한 상승을 위한 쉘코드 작성해보기

익스플로잇을 시도하기 위해, 리눅스 내 로컬 환경 상 동작하는 쉘(/bin/sh)을 만든다.

바로 어셈블리어나 기계어 코드로 작성하는 불편함을 덜어내기 위해,

C언어로 코드를 작성한 후 어셈블리어 코드로 재작성하는 과정을 거쳐 쉘코드를 작성한다.

 

그림1. C언어를 이용하여 /bin/sh를 사용하는 프로그램을 제작해본다.

여기서 execve는 인자 3개를 필요로 하는 함수다.

(인자 3개 = cheat[0], cheat, &cheat[1])

execve 함수는 eax 레지스터에,

나머지 인자 3개는 각각 ebx, ecx, edx 레지스터에 저장된다.

 

그림2. 컴파일을 실행할 때 call 함수의 움직임을 확인하기 위해 -static옵션을 사용한다.
그림 3. 제작한 C언어 파일 내 execve함수를 disassemble했다.

-static 옵션을 주었던 만큼, evecve+36 부분에 함수를 call하고 있는 것을 알 수 있다.

 

그림 4. break 이후 info register 명령어를 통해 eax, ebx, ecx, edx 주소를 확인할 수 있다.

얻어낸 레지스터 정보를 바탕으로 어셈블리어를 작성해보면 아래와 같다.

 

 

어셈블리어 코드를 확인한 후 다음 과정을 거쳐 작성한 파일을 컴파일한다.

① nasm -f elf 파일명.asm

② ld -o 파일명 파일명.asm

③ 파일을 실행해본다.

 

shell 명령어가 작동함을 알 수 있다.

 

이후 objdump -d 파일명을 통해 어셈블리어의 기계어 코드 구성을 확인해본다.

코드 구성은 아래와 같다.

 

objdump를 이용하여 어셈블리어의 기계어코드를 확인해본다.

 

다만 아래와 같은 기계어 코드를 그대로 페이로드에 사용할 경우,

null byte(00)로 인해 익스플로잇을 실패할 가능성이 매우 높다.

따라서 뒤의 00을 제거해주는 작업이 필요하다.

null byte을 없애기 위해 다시 한 번 어셈블리어를 수정한다.

 

 

기존의 어셈블리어 코드에서 0을 생성시켰던

'push 0' 부분과 mov eax,0xb 부분을 아래와 같이 수정한다.

 

① 'push 0'은 비트연산자를 이용해 xor eax,eax와 push eax로 처리했으며

② mov eax,0xb는 mov al,0xb로 변경시켜주었다.

 

새로 작성한 어셈블리어 코드를 이용해 기계어 코드를 확인해보니,

기존 기계어 코드와 달리 00이 붙은 부분이 사라졌음을 알 수 있다. 

 

 

 

이후 자동적으로 리눅스 상에서 setuid(0)을 얻기 위해

기계어 코드에 추가적으로 삽입하였다.

먼저 setuid(0)의 시스템 콜 번호를 확인해보기 위해

/usr/include/asm/unistd.h 경로를 출력해보았다.

 

 

setuid의 콜 번호가 23번. 즉 16진수로 0x17임을 알 수 있다.

이를 어셈블리어 코드로 변환한 후 null byte(00) 제거를 위해 아래와 같이 수정하였다.

 

여기서 eax와 ebx를 비트연산자를 이용하여 초기화해준 이유는,

프로그램을 실행할 때 남아있을 수 있는 찌꺼기 값, null byte 등에 영향을 받지 않기 위해서다.

 

 

프로그램을 실행해본 뒤 정상적으로 실행되는 것을 확인하였다. 

 

BELATED ARTICLES

more