보안/스피어피싱
[스피어피싱] 7강 쉘코드 개요 및 구성요소
Kevin Seo
2024. 8. 31. 17:02
1. 쉘코드의 동작 및 구성 요소
- 실행 파일(msword.exe) 실행
- msword.exe를 실행하기 위한 가상 주소 공간 생성
- 해당 가상 주소 공간에 매핑
- 이를 로더를 이용해 로딩된다고 함
- 로더는 이런 프로그램 이미지를 읽어 헤더 정보를 파싱하고 PE 파일을 메모리 매핑
- 이때 PE 헤더를 먼저 할당하고 그 후 각 섹션들을 프로텍션을 할당하며 메모리상에 로딩 진행
- 프로텍션이란 각 섹션이 다른 섹션을 침범하지 않도록 막아주는 베리어 같은 느낌
- 위 과정에서 바인딩 작업 발생
- 로더 프로그램은 실행 파일이 사용하는 함수 및 참조하는 DLL을 자료구조를 통해 파악 후 DLL 로딩
- 메모리에 실행 파일과 라이브러리들이 로딩된 이후 프로그램에 내제된 컴파일된 코드를 실행
- 이러한 코드들이 실행되면서 라이브러릴에 정의된 함수들을 호출
- 함수가 종료되며 리턴코드가 반환
- 이러한 과정에서 임시로 사용할 메모리 공간이 필요
- 일반적으로 가상 주소 공간에서 맞닥뜨리는 임시 메모리 유형을 크게 2가지로 나누어짐
- 스택
- 힙
- 일반적으로 가상 주소 공간에서 맞닥뜨리는 임시 메모리 유형을 크게 2가지로 나누어짐
- MS OFFICE 프로그램에 의해 악성 MS OFFICE 문서가 실행될 시 이러한 문서 파일에 내제된 쉘코드가 임시 메모리 공간인 쉘 또는 힙 메모리 영역에 삽입됨
- 삽입된 쉘코드들은 각각의 라이브러리 안에 있는 함수들의 주소를 알 수 없음
- 그렇기에 매핑된 후 반드시 바인딩 작업을 거쳐 사용하고자 하는 함수들의 주소를 파악해야함 = 쉘코드에는 바인딩을 위한 코드가 무조건 존재
2. 쉘코드 분석
- 쉘코드를 기준을 가지고 나눠서 보면 보통 앞에는 디코딩 루틴, 뒤에는 암호화 혹은 인코딩된 쉘코드 본체로 나누어짐
- 디코딩 루틴에서는 루프를 계속 돌며 쉘코드 본체 디코딩 진행
- 이러한 디코딩이 완료되어야 쉘코드 본체 수행 가능
- 쉘코드의 코드 일부 기능으로는 동적 바인딩 기능이 존재
- 동적 바인딩 : 실시간으로 동작하며 바인딩
- 이러한 바인딩 작업 이후에는 함수 호출 업무, 인터넷 C2 서버 접속, 스토리지 내의 파일 읽기 쓰기 작업 등을 진행
정리 :
- 취약한 프로그램 실행
- 메모리 공간에 쉘코드 적재
- 이러한 쉘코드에는 공격자가 원하는 동작과 관련된 함수들을 바인딩하는 코드 존재
- 공격자는 익스플로잇을 사용하여 쉘코드 실행