Home PE 저장 구조 식별
Post
Cancel

PE 저장 구조 식별

PE 구조

Windows 에게 프로그램을 메모리에 적재하는 방법을 알려줍니다.
동작중인 프로그램이 실행 과정에서 사용할 수 있는 미디어 지원
디지털 코드 서명과 같은 보안 데이터 지원
프로그램이 실행 과정에서 사용할 수 있는 미디어 리소스 지원
GUI 대화 상자, 콘솔 출력에서 볼수 있는 문자열 포함
디지털 코드 서명 데이터 지원
전자서명된 데이터가 신뢰할 수 있는 출처인지 확인 가능

PE 헤더

바이너리 코드, 이미지, 압축 데이터, 기타 프로그램 속성 정의
파일 컴파일 시간 등 악성코드 분석에 필요한 메타데이터가 풍부

선택적 헤더

PE 파일 내 프로그램의 진입점 위치 확인
PE 파일 Windows 하위 시스템, Windows GUI / 커멘드 라인 파일 등 세부 사항 정보를 적재

섹션 헤더

PE 파일에 포함된 데이터 섹션 정보
Windows 섹션에 어떤 권한을 부여해야 하는지 알려주는 역할
일반적으로 .text 섹션은 어떤 r-x 권한을 부여하되 -w-는 부여하지 않음 (실수/고의로 코드 ㅟ변조 발생 방지 목적)

.text 섹션

실행 가능한 코드 섹션 관련 정보 포함

.idata 섹션

import 정보 포함
IAT (Import Address Table)

데이터 섹션

마우수 커서 이미지, 버튼 이미지, 오디오 등 다양한 리소스 정보 포함
icoutils를 이용하여 .rsrc 섹션으로부터 이미지/아이콘 등을 추출하여 분석할 수 있음

VA(Virtual Address) / RVA (Relatiev Virtual Address )

Base Address + RAV = VA

PE 헤더에는 VA(절대 주소)가 아닌 RVA(상대주소)를 많이 사용함

  • 여러 개의 PE 파일이 같은 위치에 로딩 될 수 있기 때문에 정상적인 Access 가 이루어지지 않을 수 있음, 이렇게 같은 위치에 로딩이 될 경우 재배치(reloacation) 과정을 통해 비어있는 위치로 PE file을 로딩한다.

  • VA를 사용한다고 가정하면, 재배치 과정을 통해 위치가 변하게 되면 VA도 변해야 정상적인 접근 되는 반면에 RVA인 경우에는 재배치 과정을 통하더라도 기준 위치에 대한 상대 주소는 변함없기 때문에 아무 문제 없이 접근 할수 있음

Rich Header

Rich Header나 악성코드가 주로 사용하는 icon 을 패턴으로 적용해도 상당히 높은 탐지율을 보인다.

  • Encoding/Decoding Algorithm
  • Program DataBase Path
  • Debug Message
  • Section Name/Entropy
  • Breached Data Zip Password
  • Import Hash
  • Mutex
  • Created Registry Key/Value
  • Created Process Name
  • Rich Header
  • File name
  • Dll, Export Function Name
  • Icon

Rich Header

Visual Studio 등으로 PE 파일 생성 시, 어떤 라이브러리를 가지고 어떻게 만들었는가에 대한 정보가 담기는 헤더, 패턴 분석을 통해 Rich Header 정보로 그룹을 추적하기도 한다.
이 Rich Header는 PE 안에 존재하는 Structure이며 컴파일 정보가 포함되어 있다. 쉽게 변조가 가능함 파일 실행에 영향을 주지 않으므로 신뢰성이 높은 정보는 아니다. 하지만 악성코드를 포함한 대부분의 PE 바이너리에서 Rich Header를 남겨두는 경우가 많아 바이너리 간 유사도를 계산하는데 사용된다. 패커가 건드리지 않는 겨우도 있어 패킹된 바이너리에서도 활용할 수 있다. MS에 의해 문서화 되어 있지는 않으며, DOS Stub 끝에 존재한다.
Rich heaer 끝 부분에 Rich Identifier와 checksum이 존재한다. 앞단에는 정보가 인코딩 되어 있는데, 이걸 디코딩 하기 위해서는 chechsum 값으로 xor 해야 한다.

Feature 제안

  • Valid Rich Header
    정상적으로 build 했다면 Rich Header가 존재해야 하며, Rich Headder 가 없다면 특수하게 Build 되었거나 혹은 인위적으로 제거되었을 것으로 판단된다.

  • Rich Header Offset 일반적으로 Rich Header의 Offset은 Binary 마다 거의 같으나 일부 악성코드는 offset이 다른 경우가 존재한다

  • Vaild ProdID 유효한 prodID가 정해져 있으며 이외의 ProdID는 Invalid Rich Header로 설정

  • Duplicate mCV and ProdID mCV(각 도구의 Minor 버전)와 ProdID(도구별 고유 ID)조합은 unique 하며 중복되는 경우는 정상적이지 않음

  • Vaild Checksum checksum이 invalid 하면 인위적으로 변조되었을 가능성이 있다.

  • Vaild Linker Optional Header의 Linker 정보와 Rich Heaer 내의 Linker 정보의 일치 여부 확인

  • Vaild Import Count PE Import Directory에 기록되어 있는 import function 의 수는 Rich Header의 ProdIDImport 값보다 작으면 안된다는 조건을 확인

  • Vaild Resource Binary에 Resource 가 존재하는지 여부와 Rich Headder 내의 Resource 관련 값의 유효성 여부를 확인

  • NumberofSection : 섹션의 개수

  • IAT (Import Address Table) Windows Program이 어떤 라이브러리에서 어떤 함수를 사용하고 있는지를 기술한 테이블

  • EAT (Export Address Table) 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 테이블


Refference

This post is licensed under CC BY 4.0 by the author.

데이터 중심 보안

금융 데이터 분석