Security/Others

Shellcode(쉘코드)

bonggang 2019. 9. 26. 00:24

Shellcode


시스템의 특정 명령을 실행하는 작은 사이즈의 프로그램으로, 공격 대상 시스템의 명령어 쉘(Command Shell-etc:bash)을 실행시킨다는 의미로부터 파생되었다. 주로 소프트웨어 취약점을 통한 공격(Exploitation) 이후 실행될 작은 규모의 프로그램(Payload)으로 사용된다.

 

쉘코드 종류


로컬 쉘코드(Local Shellcode)

 

로컬 환경에서 동작되는 쉘(/bin/sh)로 공격자가 대상 시스템에 대한 제한적인 접근 권한을 가지고 있는 경우, 버퍼 오버플로우 등의 취약점이 있는 높은 권한을 가진 프로세스를 공격하여 해당 프로세스와 같은 높은 권한을 획득하기 위해 사용된다.

 

원격 쉘코드(Remote Shellcode)

 

네트워크 상의 다른 대상 시스템에 대한 취약점이 존재하는 프로세스를 공격할 때 사용한다. 원격 쉘코드는 연결 방식에 따라 Reverse Shellcode(리버스 쉘코드), Bind Shellcode(바인드 쉘코드)로 나눠진다.

 

Reverse Shellcode(리버스 쉘코드)

목표 시스템으로부터 공격자에게 연결을 요청하도록 하기에 Connect-Back 쉘코드라고 한다.

 

Bind Shellcode(바인드 쉘코드)

쉘코드가 목표 시스템의 특정 포트를 바인드(bind)하여 공격자가 대상 시스템에 연결할 수 있도록 한다.

 

다운로드 및 실행 쉘코드(Download & Execute Shellcode)

 

다운로드 및 실행 쉘코드는 쉘코드가 직접 쉘을 실행하지는 않지만 주로 외부의 네트워크로부터 악성코드를 다운로드하고 실행할 때 주로 사용된다. 특히 요즘에는 드라이브 바이 다운로드(Drive By Download)공격에 널리 사용된다.