셸코드

IT 위키
Shellcode,Shell Code

시스템의 특정 명령을 실행하는 작은 사이즈의 프로그램. 일반적으로 기계어로 작성되어 있다.

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

셸코드의 종류[편집 | 원본 편집]

셸코드는 대상에 따라 로컬(Local) 및 원격(Remote) Shell Code로 나눌 수 있으며, 그 자체가 Shell을 실행하지는 않지만 외부의 네트워크로부터 특정 파일을 다운로드하고 실행하는(Download & Execute) 하는 경우도 있다.

로컬 쉘코드[편집 | 원본 편집]

Local Shellcode

공격자가 대상 시스템에 대한 제한적인(혹은 완전한) 접근 권한을 가지고 있는 경우, 버퍼 오버플로(Buffer Overflow) 등의 취약점이 있는 높은 권한(대부분 root)을 가진 프로세스를 공격하여, 해당 프로세스와 같은 높은 권한을 획득하기 위해 사용된다.

원격 쉘코드[편집 | 원본 편집]

Remote Shellcode

공격자가 네트워크상의 다른 대상 시스템에 한 취약점이 있는 프로세스를 공격하고자 하는 경우 사용한다. 일반적으로 원격 쉘은 공격자가 대상 시스템의 Shell에 대한 접근을 허용하기 위해 표준 TCP/IP 소켓 연결을 사용하며, 이 때 연결이 어떤 방식으로 이루어졌는가에 따라 다음과 같이 분류될 수 있다.

리버스 쉘코드[편집 | 원본 편집]

Reverse Shellcode
  • 목표 시스템으로부터 공격자에게 연결을 요청하도록 하기에 커넥트 백(Connect-Back) 쉘코드라고 한다.

바인드 쉘코드[편집 | 원본 편집]

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

다운로드 및 실행 쉘코드[편집 | 원본 편집]

Download & Execute Shellcode

다운로드 및 실행 쉘코드는 쉘코드가 직접 쉘을 실행하지는 않지만, 주로 외부의 네트워크로부터 Malware(악성코드)를 다운로드하고 실행할 때 주로 사용된다. 특히 요즘에는 대상 시스템이 악성 페이지에 방문하는 것만으로도, 사용자 몰라 악성코드를 내려받아 실행하는 Drive By Download(드라이브 바이 다운로드) 공격에 널리 사용된다.