보안/스피어피싱

[스피어피싱] 7강 쉘코드 개요 및 구성요소

Kevin Seo 2024. 8. 31. 17:02

1. 쉘코드의 동작 및 구성 요소

  1. 실행 파일(msword.exe) 실행
  2. msword.exe를 실행하기 위한 가상 주소 공간 생성
  3. 해당 가상 주소 공간에 매핑
    • 이를 로더를 이용해 로딩된다고 함
    • 로더는 이런 프로그램 이미지를 읽어 헤더 정보를 파싱하고 PE 파일을 메모리 매핑
    • 이때 PE 헤더를 먼저 할당하고 그 후 각 섹션들을 프로텍션을 할당하며 메모리상에 로딩 진행
      • 프로텍션이란 각 섹션이 다른 섹션을 침범하지 않도록 막아주는 베리어 같은 느낌
  4. 위 과정에서 바인딩 작업 발생
  5. 로더 프로그램은 실행 파일이 사용하는 함수 및 참조하는 DLL을 자료구조를 통해 파악 후 DLL 로딩
  6. 메모리에 실행 파일과 라이브러리들이 로딩된 이후 프로그램에 내제된 컴파일된 코드를 실행
  7. 이러한 코드들이 실행되면서 라이브러릴에 정의된 함수들을 호출
  8. 함수가 종료되며 리턴코드가 반환
  9. 이러한 과정에서 임시로 사용할 메모리 공간이 필요
    • 일반적으로 가상 주소 공간에서 맞닥뜨리는 임시 메모리 유형을 크게 2가지로 나누어짐
      • 스택
  10. MS OFFICE 프로그램에 의해 악성 MS OFFICE 문서가 실행될 시 이러한 문서 파일에 내제된 쉘코드가 임시 메모리 공간인 쉘 또는 힙 메모리 영역에 삽입됨
    • 삽입된 쉘코드들은 각각의 라이브러리 안에 있는 함수들의 주소를 알 수 없음
    • 그렇기에 매핑된 후 반드시 바인딩 작업을 거쳐 사용하고자 하는 함수들의 주소를 파악해야함 = 쉘코드에는 바인딩을 위한 코드가 무조건 존재

 

2. 쉘코드 분석

  • 쉘코드를 기준을 가지고 나눠서 보면 보통 앞에는 디코딩 루틴, 뒤에는 암호화 혹은 인코딩된 쉘코드 본체로 나누어짐
    • 디코딩 루틴에서는 루프를 계속 돌며 쉘코드 본체 디코딩 진행
    • 이러한 디코딩이 완료되어야 쉘코드 본체 수행 가능
  • 쉘코드의 코드 일부 기능으로는 동적 바인딩 기능이 존재
    • 동적 바인딩 : 실시간으로 동작하며 바인딩
  • 이러한 바인딩 작업 이후에는 함수 호출 업무, 인터넷 C2 서버 접속, 스토리지 내의 파일 읽기 쓰기 작업 등을 진행

 

정리 :

  • 취약한 프로그램 실행
  • 메모리 공간에 쉘코드 적재
    • 이러한 쉘코드에는 공격자가 원하는 동작과 관련된 함수들을 바인딩하는 코드 존재
  • 공격자는 익스플로잇을 사용하여 쉘코드 실행