Windows PE구조와 NT헤더
Windows PE(Portable Executable)는 Windows 운영 체제에서 실행 파일, DLL 및 기타 유형의 파일에 사용되는 파일 형식이다. 형식에는 운영 체제가 프로그램을 로드하고 실행하는 데 사용하는 정보가 포함된 NT 헤더가 포함된다. NT 헤더의 구조와 구성 요소를 이해하는 것은 Windows PE 파일을 분석하고 리버스 엔지니어링을 하는 데 필수적이다.
-목차-
1. Windows PE 개요
2. NT 헤더 개요
3. Windows PE 작업과 리버싱
4. Windows PE 및 NT 헤더의 취약성
1. Windows PE 개요
Windows PE의 정의
WinPE(Windows PE)는 Windows 데스크톱 버전, Windows Server 및 기타 Windows 운영 체제를 설치, 배포 및 복구하는 데 사용되는 소형 운영 체제다. Windows 운영 체제의 32비트 및 64비트 버전에서 사용되는 exe, DLL 형식의 실행파일이다. Windows NT 3.1에서 처음 도입되었으며 그 이후 모든 후속 버전의 Windows에 포함되어있다.
Windows PE와 다른 실행형식과 차이점
Windows PE와 다른 형식의 주요 차이점 중 일부는 헤더 구조, 파일에 포함된 섹션 유형, 파일의 가져오기, 내보내기 및 기타 기능에 대해 제공되는 정보를 포함한다. 또한 이러한 각 형식은 특정 운영 체제 또는 플랫폼에서 작동하도록 설계되었으므로 Windows PE에 없는 기능이 포함될 수 있으며 그 반대의 경우도 마찬가지이다.
- DOS 실행 파일(.EXE): 이전 버전의 MS-DOS 및 Windows에서 사용되던 파일 형식이다. DOS 실행 파일에는 파일 크기, 진입점 및 기타 기본 정보에 대한 정보가 포함된 매우 간단한 헤더가 있다. 파일의 가져오기, 내보내기 또는 기타 고급 기능에 대한 정보는 포함하지 않는다.
- ELF(Executable and Linkable Format): Linux를 포함한 Unix 기반 시스템에서 사용되는 일반적인 실행 파일 형식이다. ELF 파일은 헤더 뒤에 코드, 데이터 및 리소스와 같은 다양한 데이터 섹션이 나온다는 점에서 Windows PE 파일과 유사하다. 그러나 ELF 헤더의 구조가 다르고 형식에 따라 다른 유형의 섹션이 포함된다.
- Mach-O(Mach Object File Format): macOS 및 기타 Apple 운영 체제에서 사용되는 실행 파일 형식이다. ELF 파일과 마찬가지로 Mach-O 파일에는 다양한 데이터 섹션이 뒤따르는 헤더가 포함되어 있다. 그러나 형식에는 다양한 유형의 섹션이 포함되며 Windows PE 파일과 다른 헤더 구조를 사용한다.
- Java 아카이브(.JAR): Java 애플리케이션에 사용되는 파일 형식이다. JAR 파일은 운영 체제에서 직접 실행되지 않고 JVM(Java Virtual Machine)에서 해석되는 Java 바이트코드를 포함한다는 점에서 기본 실행 파일과 다르다. JAR 파일은 JVM이 설치된 모든 시스템에서 실행할 수 있다.
. - NET 어셈블리(.DLL, .EXE): .NET Framework 및 기타 .NET 기반 시스템에서 사용하는 파일이다. .NET 어셈블리는 헤더와 다양한 데이터 섹션을 포함한다는 점에서 Windows PE 파일과 유사하다. 그러나 형식에는 코드 및 리소스에 대한 추가 정보가 포함되며 코드는 .NET 런타임에서 실행되는 중간 언어로 컴파일된다.
Windows PE 장점
- 휴대성: Windows PE는 휴대가 가능하도록 설계되었다. 즉, 설치할 필요 없이 USB 드라이브, CD/DVD 또는 네트워크를 통해 실행할 수 있다. 따라서 여러 시스템에서 시스템 복구 또는 유지 관리 작업을 수행해야 하는 IT 전문가 및 시스템 관리자에게 편리한 도구다.
- 메모리 사용 공간 감소: Windows PE는 전체 Windows 운영 체제에 비해 메모리 사용 공간이 작기 때문에 더 빠르게 로드하고 더 효율적으로 사용할 수 있다.
- 사용 용이성: Windows PE는 사용자에게 친숙한 그래픽 인터페이스를 제공하므로 시스템 작업을 쉽게 탐색하고 수행할 수 있다. 고급 사용자를 위한 명령줄 인터페이스도 포함되어 있다.
- 호환성: Windows PE는 기존 Windows 응용 프로그램과 호환되도록 설계되었으므로 문제 없이 자주 사용하는 도구와 유틸리티를 실행할 수 있다.
- 보안: Windows PE는 호스트 파일 시스템 및 네트워크에 대한 읽기 전용 액세스와 같은 기능을 갖추고 변경 사항이 지속되지 않는 안전한 환경으로 설계되었다. 이는 맬웨어 감염 및 기타 보안 문제를 방지하는 데 도움이 된다.
- 사용자 지정: 특정 요구 사항에 맞게 추가 드라이버, 응용 프로그램 및 도구를 사용하여 Windows PE를 사용자 지정할 수 있다.
2. NT 헤더 개요
NT 헤더 정의
NT Header는 모든 Windows PE 파일의 시작 부분에 나타나는 데이터 구조다. 이는 파일의 크기, 유형 및 진입 지점 등 파일에 대한 정보를 포함한다. 됩니다: DOS Header, COFF Header 및 Optional Header입니다.
NT 헤더 구성요소
NT Header는 세 가지 주요 헤더로 구성된다.
- 도스 헤더 (DOS Header): DOS Header는 NT Header의 첫 번째 섹션으로 MS-DOS와의 호환성을 위해 사용된다. 이는 파일이 MS-DOS 모드에서 실행될 경우 실행되는 MS-DOS 스텁 프로그램을 포함한다. DOS Header에는 또한 COFF Header로의 포인터도 포함한다.
- COFF 헤더 (COFF Header): COFF Header는 NT Header의 두 번째 섹션으로, UNIX 시스템에서 사용되는 COFF 파일 형식을 기반으로 한다. 이는 파일에 대한 정보(예: 기계 유형, 섹션 수 및 타임스탬프)를 포함한다. COFF Header에는 또한 Optional Header로의 포인터도 포함된다.
- 옵션 헤더 (Optional Header): Optional Header는 NT Header의 세 번째 섹션으로, 파일에 대한 추가 정보(예: 이미지 베이스, 진입 지점 주소 및 섹션 정렬)를 포함한다.
Optional Header
Optional Header에는 Windows 운영 체제가 파일을 올바르게 로드하고 실행하는 데 중요한 여러 필드가 포함된다.
- Image Base: 이 필드는 이미지가 메모리에 로드되어야 하는 기본 메모리 주소를 지정한다. 64K의 배수이며 일반적으로 0x400000으로 설정된다. 기본 주소가 이미 다른 모듈에 의해 점유된 경우 운영 체제는 이미지를 다른 메모리 주소로 재배치한다.
- Address of Entry Point: 이 필드는 이미지에서 실행 가능한 코드의 시작 주소를 지정한다. 이 주소는 Image Base 필드에 지정된 값인 이미지의 기본 주소에 상대적입니다. 운영 체제가 이미지를 로드할 때 프로그램 실행을 시작하기 위해 이 주소로 제어를 전송한다.
- Base of Code: 이 필드는 이미지에서 코드 섹션의 시작 주소를 지정한다. 코드 섹션은 실행 가능한 코드가 포함된 파일의 일부다. 주소는 이미지의 기본 주소에 상대적이며 코드 섹션에 있는 각 명령의 절대 메모리 주소를 계산하는 데 사용된다.
- Base of Data: 이 필드는 이미지에서 데이터 섹션의 시작 주소를 지정한다. 데이터 섹션은 전역 변수와 같은 초기화된 데이터를 포함하며 섹션의 각 데이터 항목의 절대 메모리 주소를 계산하는 데 사용된다.
- Section Alignment: 이 필드는 이미지에서 섹션의 바이트 정렬을 지정한다. 값은 2의 거듭제곱이고 512 이상이어야 한다. 섹션 정렬은 각 섹션이 지정된 값의 배수인 주소에서 시작하도록 하는 데 사용되며, 이는 메모리 페이지 폴트 수를 줄여 성능을 향상시킬 수 있다.
- File Alignment: 이 필드는 디스크에 있는 이미지의 바이트 정렬을 지정한다. 값은 2의 거듭제곱이고 최소 512여야 한다. 파일 정렬은 각 섹션이 디스크에 정렬되도록 하는 데 사용되며, 이는 디스크 I/O를 줄여 성능을 향상시킬 수 있다.
- Size of Image 이 필드는 모든 헤더와 섹션을 포함하여 메모리의 이미지 크기를 지정한다. 이미지가 로드될 때 운영 체제에서 이미지에 대한 메모리를 할당하는 데 사용된다.
- Subsystem: 이 필드는 Windows GUI, 콘솔 또는 네이티브와 같이 이미지가 실행될 하위 시스템을 지정한다. 운영 체제는 이 필드를 사용하여 이미지를 초기화하는 방법을 결정하고 실행할 적절한 환경을 제공한다.
- Stack Reserve/Commit and Heap Reserve/Commit: 이 필드는 운영 체제가 이미지에 할당해야 하는 스택 및 힙 메모리의 크기를 지정한다. 예약 값은 이미지에 필요할 수 있는 총 메모리 양을 지정하고 커밋 값은 즉시 사용할 수 있는 초기 메모리 양을 지정한다.
3. Windows PE 작업과 리버싱
Windows PE 작업과정
- Windows PE 이미지 생성: Windows PE 이미지는 PE 파일 형식을 사용하며, 보통 윈도우즈 설치 디스크나 복구 디스크, 리눅스 배포판과 같은 OS를 사용하여 생성할 수 있다. PE 이미지를 생성하는 도구로는 Microsoft에서 제공하는 "Windows Automated Installation Kit" (WAIK)와 "Windows Assessment and Deployment Kit" (ADK) 등이 있다.
- 실행 파일을 메모리에 로드: PE 이미지는 실행 파일을 메모리에 로드하는 데 필요한 정보를 담고 있다. 이 정보는 Optional Header에 포함되어 있으며, 실행 파일의 이미지 베이스, 코드 베이스, 데이터 베이스 등이 포함된다. 운영체제는 이 정보를 이용하여 실행 파일을 로드하고, 실행 파일의 코드와 데이터를 올바른 위치에 배치한다.
- 프로그램 실행 시작: 실행 파일이 메모리에 로드되고, 필요한 초기화 작업이 완료된 후에, 운영체제는 실행 파일의 Entry Point 주소를 호출하여 프로그램 실행을 시작한다. Entry Point는 실행 파일에서 시작되는 코드의 시작점으로, 주로 main() 함수 등이 해당된다. 이후 프로그램은 사용자의 입력이나 시스템 호출 등에 따라 동작하게 된다.
Windows PE 리버싱
리버싱(Reversing)은 컴퓨터 프로그램을 분석하여 그 내부 동작을 이해하는 과정을 말한다.
- 디버깅 도구 준비: 리버싱에는 디버깅 도구가 필요함. 대표적인 도구로는 OllyDbg, IDA Pro, x64dbg 등이 있다. 이런 도구는 프로그램의 실행 중에 프로세스 내부 정보를 볼 수 있게 해주며, 실행 흐름을 따라가며 분석할 수 있도록 돕는다.
- 파일 분석: 리버싱할 파일의 PE 헤더 정보를 분석한다. 특히 Optional Header의 Image Base, Entry Point, Export Table, Import Table 등을 분석하여 프로그램의 동작을 예측할 수 있다.
- 코드 분석: 프로그램의 코드를 분석한다.
4. Windows PE 및 NT 헤더의 취약성
- Buffer Overflow: PE 파일 내에 존재하는 문자열이나 배열 등의 데이터를 제한 없이 복사하거나 읽는 동작을 할 경우, 버퍼 오버플로우 취약점이 발생할 수 있다. 이 취약점은 악의적인 코드를 실행시키거나 시스템을 다운시키는 등의 결과를 초래할 수 있다.
- Injection: 이 공격은 PE 파일의 메모리에 직접 악성 코드를 삽입하거나, DLL 파일을 조작하여 PE 파일에서 호출되는 함수를 악성 코드로 대체하는 등의 방식으로 이루어진다.
- DLL Hijacking: PE 파일이 호출하는 DLL 파일의 경로를 조작하여 악성 DLL 파일을 로드하는 공격이다. PE 파일 내부에 설정된 DLL 로드 우선순위를 이용하여 악성 DLL 파일을 불러들이는 것이 가능하다.
- Exploiting Optional Header: Optional Header는 PE 파일에 대한 정보를 담고 있다. PE 파일이 로딩될 때, Optional Header 정보를 이용하여 메모리 할당 등의 작업을 수행한다. Optional Header의 정보를 악의적으로 조작하여 실행 흐름을 변경하는 공격이 있을 수 있다.
- Manipulating the Import Address Table (IAT): PE 파일은 런타임 시 필요한 함수를 호출하기 위해 Import Address Table (IAT)을 사용한다. 악의적인 공격자는 IAT를 조작하여 PE 파일이 호출하는 함수를 악성 코드로 대체하는 등의 공격을 수행할 수 있다.
문의는 댓글 남겨주세요
'정보보안' 카테고리의 다른 글
snort 룰 (10) | 2023.03.09 |
---|---|
snort rule 만드는법 (0) | 2023.03.07 |
안드로이드 침투테스트(갤럭시Z플립2) (7) | 2023.02.15 |
미터프리터를 활용한 정보수집 (+멀웨어 트로이목마 만들기) (0) | 2023.02.14 |