[정보 보안] 체육을 잘하면 악성코드를 잘 분석할 수 있다?! (feat. PE)
아마 제목이 무슨 말인가 싶어서 들어와본 사람들이 많지 않을까 싶습니다. 악성 코드를 분석하기 위해 여러가지 방법을 활용할 수 있는데, 그중 하나가 이 PE라는 녀석입니다. Physical Education? 아니, Portable Excutable이라고 하죠.
PE란?
영어 약자를 풀면 PE(Portable Executable) 즉, 말 그대로 옮겨다니면서 실행시킬 수 있는 파일을 뜻합니다. MS에서 다른 운영체제와 이식성을 좋게 하기위해 만든 파일 포맷입니다.
종류
실행, 드라이버, 라이브러리, 오브젝트 총 4개의 계열이 있습니다
- 실행계열: EXE, SCR
- 드라이버계열: SYS,VXD
- 라이브러리 계열: DLL, OCX, CPL, DRV
- 오브젝트 계열: OBJ
PE구조는 파일이 실행되기 위한 모든 정보를 볼 수 있고, 프로그램이 사용하는 API나 어느 메모리주소에 파일이 로딩되는지 알 수 있기 때문에 알아하는 중요한 개념이다.
기본 구조
메모리에 적재(loading 또는 mapping)될때의 모습
- PE header: DOS header ~ Section header
- PE Body: 그밑 Section들
메모리에서는 절대주소로 위치를 표현하며 이를 VA라고 합니다.
Null 값이 존재하는 이유
자세히 보시면 헤더의 끝부분과 각섹션 끝에 Null값이 붙는것을 확인하실 수 있습니다. Null은 padding이라고 불리기도 합니다.
즉. 최소 기본단위(컴퓨터에서 파일, 메모리, 네트워크 패킷 등을 처리할때 효율을 높이기 위한 개념)를 사용하기위해 Null값이 존재합니다.
파일/메모리에서 섹션의 시작위치는 각각 최소 기본단위의 배수에 해당하는 위치여야하고 빈공간은 Null로 채워버립니다.
RVA
VA와는 반대되는 개념입니다. 즉, 어느 기준 위치(ImageBase)에서부터의 상대주소 어떤 기준에서부터 상대주소를 뜻합니다
- 먼저 PE가 메모리에 적재되기 전에 기본 ImageBase는 0입니다
- 그리고 PE안에서는 상대주소로 주소가 적히게 됩니다
- 메모리에 적재시 절대주소가 들어가게 된다면 Relocation이 어렵기 때문입니다
- 상대주소가 들어가면 ImageBase에서 얼마만큼 떨어진 곳으로 이동하면 되기때문에 Relocation이 쉽게되어 상대주소를 사용합니다.
- RVA + ImageBase = VA
- 상대주소 + 기준위치 = 절대주소
사용해야 하는 이유
PE헤더 내의 정보는 RVA형태로 된 것이 많습니다. PE파일(주로DLL)이 프로세스 가상메모리의 특정위치에 로딩되는 순간 이미 그위치에 다른PE파일(DLL)이 로딩되어 있을 수 있습니다. 이때 재배치(Relocation)를 통해서 비어있는 다른자리에 로딩되어야 하는데 만약 PE헤더 정보들이 VA로 되어있다면 정상적인 엑세스가 이루어지지 않았을것입니다.
참고 : 여기