뉴비에욤
Shellcode 만들기 - 1 (쉘코드 정의 및 종류) 본문
쉘코드의 정의
쉘코드(Shellcode)는 시스템의 특정 명령을 실행하는 작은 사이즈의 프로그램을 뜻하여, 일반적으로 기계어 코드(Machine Code)로 작성되어 있다. 쉘코드란 단어는 공격 대상 시스템의 명령어 쉘(Command Shell-etc:bash)을 실행시킨다는 의미로부터 파생되었으며, 주로 소프트웨어 취약점을 통한 공격(Exploitation) 이후 실행될 작은 규모의 프로그램(Payload)으로 사용된다. 실제 쉘코드의 예는 아래와 같다.
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80
쉘코드의 종류
쉘코드는 대상에 따라 로컬(Local) 및 원격(Remote) 쉘코드로 나눌 수 있으며, 그 자체가 쉘을 실행하지는 않지만, 외부의 네트워크로부터 특정 파일을 다운로드하고 실행하는(Download & Execute) 하는 경우도 있다.
1. 로컬 쉘코드 (Local Shellcode)
로컬 쉘코드는 공격자가 대상 시스템에 대한 제한적인(혹은 완전한) 접근 권한을 가지고 있는 경우, 버퍼 오버플로(Buffer Overflow) 등의 취약점이 있는 높은 권한(대부분 root)을 가진 프로세스를 공격하여, 해당 프로세스와 같은 높은 권한을 획득하기
위해 사용한다.
2. 원격 쉘코드 (Remote Shellcode)
원격 쉘코드는 공격자가 네트워크상의 다른 대상 시스템에 대한 취약점이 있는 프로세스를 공격하고자 하는 경우 사용한다. 일반적으로 원격 쉘코드는 공격자가 대상 시스템의 쉘에 대한 접근을 허용하기 위해 표준 TCP/IP 소켓 연결을 사용하며, 이 때 연결이 어떤 방식으로 이루어졌는가에 따라 다음과 같이 분류될 수 있다.
2-1. 리버스 쉘코드 (Reverse Shellcode)
리버스 쉘코드는 목표 시스템으로부터 공격자에게 연결을 요청하도록 하기 때문에 커넥트-백(Conntect-Back) 쉘코드라고 한다.
2-2. 바인드 쉘코드 (Bind Shellcode)
바인드 쉘코드는 쉘코드가 목표 시스템의 특정 포트를 할당(Bind)하여 공격자가 대상 시스템에 연결 할 수 있도록 한다.
3. 다운로드 및 실행 쉘코드 (Download & Execute Shellcode)
다운로드 및 실행 쉘코드는 쉘코드가 직접 쉘을 실행하지는 않지만, 주로 외부의 네트워크로부터 악성코드(Malware)를 다운로드하고 실행할 때 주로 사용된다. 특히 요즘에는 대상 시스템이 악성 페이지에 방문하는 것만으로도, 사용자 몰라 악성코드를 내려 받아 실행하는 드라이브 바이 다운로드(Drive By Download, dbd) 공격에 널리 사용된다.
'System Hacking(OS) > Shellcode' 카테고리의 다른 글
Universal Shellcode for Windows ( 윈도우 범용 쉘코드 ) (0) | 2016.05.13 |
---|---|
Shellcode 만들기 - 4 (쉘코드 동작 원리 이해 및 제작) (0) | 2015.10.01 |
Shellcode 만들기 - 3 (메모리 세그먼트 구조) (0) | 2015.10.01 |
Shellcode 만들기 - 2 (시스템 및 프로그래밍 기본 사항) (0) | 2015.09.30 |