앞선 글에서 PE 파일 개념 및 생성과정과 PE 파일 헤더의 일부를 살펴봤다. 이번에는 마지막으로 남은 PE헤더 중 Section Header를 살펴보려고 한다. 지난 PE 파일 분석기가 궁금하다면 아래를 참고!
1. [악성코드] PE 파일(포맷) Part 1 - 개념 및 생성과정과 구조 : 기본적인 PE 파일 개념, 생성과정 및 DOS 헤더 분석
[악성코드] PE 파일(포맷) Part 1 - 개념 및 생성과정과 구조
기나긴 서론 윈도우 보안을 공부하다보면 기본적으로 PE 파일 구조를 분석해야하는 경우가 존재한다. 왜냐하면 윈도우에서 돌아가는 exe 파일 및 dll, bin, sys 파일들이 다 PE 파일의 일종이기 때문
mocharoll.tistory.com
2. [악성코드] PE 파일(포맷) Part 2 - PE 파일 구조 (feat. IAT, 라이브러리) : PE 파일 헤더 중 NT 헤더 분석
[악성코드] PE 파일(포맷) Part 2 - PE 파일 구조 (feat. IAT, 라이브러리)
앞선 글에서 PE 파일 개념 및 생성과정에 대해 살펴봤었다. 이번 글에서는 PE 파일 구조를 살펴보려고 한다. 만약 PE 파일 개념 및 생성과정을 확인하지 않았다면 PE 파일(포맷) Part 1 - PE 파일 개념
mocharoll.tistory.com
PE 파일 구조
계속 보게 되는 32비트의 PE구조는 위의 사진과 같다. 꽤 복잡해 보였으나 전 게시글부터 잘 따라오고 있다면 벌써 맨 위의 DOS Header부터 Optional Header의 마지막 부분인 파란색 부분까지 중요한 부분을 살펴본 것이다! 그런 의미에서 일단 여기까지 온 모두에게 박수를 보내고 싶다! 이제 PE 헤더의 마지막 파트인 Section Header를 살펴보도록 하자.

3. Section Header
섹션 헤더의 구조체는 위와 같다. PE 파일의 섹션 별로 위 구조체를 따라 저장이 된다.
여기서 섹션은 무엇일까? PE 파일에 중요한 데이터들을 카테고리별로 정리해놓은 데이터 구조라고 보면 된다.
예를 들어 PE 파일을 실행하는 데 필요한 코드도 있을 것이고, 코드 내의 변수들도 실행에 따라 값들이 달라질 것이므로 해당 데이터를 위한 데이터 구조도 필요하다. 그 외에도 PE 파일을 실행시 필요한 사진이나, PE 파일의 아이콘 등을 저장할 데이터 구조도 필요할 것이다.
위 데이터들을 섹션별로 저장을 하게 되고, 이를 위한 헤더가 바로 섹션 헤더가 된다. 그리고 여기에 존재하는 섹션의 수가 바로 NT헤더 중 File Header의 NumberOfSections에 저장되는 값이다.
(만약 NT 헤더를 모른다면 PE 파일(포맷) Part 2 - PE 파일 구조 (feat. IAT, 라이브러리)를 참고!)
여러 섹션이 존재하지만 여기서는 대표적인 섹션 4개를 살펴보도록 하자.
1. .TEXT 섹션
해당 섹션에는 코드가 저장이 된다. 위의 사진에서 보면 특징(characteristics) 부분의 밑에 CODE라는 말과 MEM_EXECUTE, MEM_READ가 있다. 이는 해당 섹션의 특징으로 코드이며, 실행이 가능하고 읽을 수 있음을 의미한다.
당연히 코드는 실행이 되면서 동시에 읽기만 가능해야 한다. 만약 여기에 쓸 수 있는 권한을 준다면 어떻게 될까? 이는 대게 악성코드가 갖는 특징이다. 코드를 직접 쓸 수 있게 하면서 취약한 부분을 이용해 악성 행위를 할 수 있게 끔 만든다.
2. .DATA 섹션
전역 변수의 경우에는 해당 섹션에 저장이 된다. 따라서 데이터 초기화가 필요하고 동시에 해당 변수를 읽고 새로 쓸 수도 있어야 하므로 특징란에 INITIALIZED_DATA, MEM_READ, MEM_WRITE가 있는 것을 볼 수 있다.
3. .RDATA 섹션
대표적으로 문자열들이 저장되는 섹션이다. 따라서 문자열을 저장할 변수의 초기화가 필요하고 선언된 후에는 해당 값을 읽어올 수 있어야 한다. 그래서 특징란에 INITIALIZED_DATA, MEM_READ가 있는 것을 볼 수 있다.
해당 섹션의 특징도 눈여겨볼 만 한데, 만약 해당 섹션에 MEM_EXECUTE가 있다면 어떻게 될까? 악의적인 의도를 가진 개발자가 문자열에 특정 코드를 저장해서 해당 문자열을 실행시킬 수도 있다. 예를 들어, 특정 문자열에 저장한 코드가 실행 권한을 높이거나 물밑에서 다른 행위를 하게끔 유도하는 코드라면, 프로그램을 실행 시 해당 문자열도 같이 실행되면서 악의적인 행위를 할 수 있다는 것이다.
4. .RSRC 섹션
해당 섹션에는 아이콘이나 이미지 등을 저장하는 섹션이다.
해당 섹션에 저장되는 데이터들은 리소스 해커라는 툴을 이용해서 확인이 가능하다. 리소스 해커 툴에 대한 설명은
리소스 해커(Resource Hacker) 다운로드 및 사용법을 참고!
이상으로 기나긴 PE 파일 분석과 PE 헤더 분석이 끝났다.
마지막 Section Header의 경우에도 해당 PE 파일에는 어떤 정보들이 저장되어 있는지 섹션을 이용해 알 수 있기 때문에 매우 중요하다. 또한 보안적으로 보아도 해당 섹션의 특징(characteristics)을 기반으로 악성프로그램일지 아닐지 추측해볼 수 있기 때문에 매우 중요하다.
누군가에게는 정말 지루할지 모르는 PE 파일 분석이 본 글을 통해 조금이나마 흥미로웠길 바라며 이만 글을 줄인다 :)
참고자료
- 리버스 엔지니어링 바이블 – 코드 재창조의 미학 (강병탁 저)
- Python pefile 모듈 : https://github.com/erocarrera/pefile
- 헤더 정보 : https://53c-hi.tistory.com/category/%EB%A6%AC%EB%B2%84%EC%8B%B1?page=2
- 헤더 정보 : https://furysecurity.tistory.com/32?category=712491
- 헤더 구조체 공식 문서 : https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_section_header
'정보보호 공부' 카테고리의 다른 글
DLL Ingection 실습 (1) | 2023.10.30 |
---|---|
리소스 해커(Resource Hacker) 다운로드 및 사용법 (0) | 2021.08.24 |
[악성코드] PE 파일(포맷) Part 2 - PE 파일 구조 (feat. IAT, 라이브러리) (0) | 2021.08.23 |
[악성코드] PE 파일(포맷) Part 1 - 개념 및 생성과정과 구조 (0) | 2021.08.22 |
양자 계산을 위한 선형대수학 -2 : 행렬 (0) | 2020.08.12 |