관리 메뉴

Information Security

EPROCESS 본문

포렌식/윈도우 포렌식

EPROCESS

HackingPractice 2020. 12. 20. 10:49

EPROCESS? 

  • 개별 프로세스를 나타내는 거대한 구조체
  • KPROCESS(Kernel Process Block)의 포인터 포함 (프로세스 정보, 생성되는 스레드 정보를 가짐)
  • 프로세스 식별 정보
  • 프로세스에서 사용하는 메모리 정보
  • PEB 위치 정보를 확인할 수 있으며 
  • 커널 모드에 위치

 

그림 1-1 EPROCESS 자원

 

 

_EPROCESS의 구조체를 확인할 수 있다.

 

그림 1-2 구조체

 

KDBG를 통해 _EPROCESS를 찾을 수 있다.

 

그림 1-3 KDBG

 

KDBG(_KDDEBUGGER_DATA64) 구조체? 

  • 크래시나 디버깅 시에 필요한 커널의 정보들을 담은 구조체
  • 이 구조체는 아래와 같은 구조의 헤더로 시작

패턴 매칭

  • List 변수의 마지막 8바이트가 항상 0으로 채워짐
  • OwnerTage는 KDBG로 세팅
  • Size는 XP일 경우 0x290, Windows 2000의 경우 0x208 Bytes

VAD(Virtual Address Descriptor)

페이지 폴트 발생 시 메모리 관리자는 프로세스 주소 공간에서 어떤 가상 주소가 예약되어 있는지 여부를 추적할 수 있게 관리하는 데이터 구조체 집합

 

Vad  - nt!mm        - Mm virtual address descriptors
VadF - nt!mm        - VADs created by a FreeVM splitting
Vadl - nt!mm        - Mm virtual address descriptors (long)
VadS - nt!mm        - Mm virtual address descriptors (short)

 

삽입된 쉘 코드를 포함하는 메모리 영역은 파일로 백업되지 않기 때문에 VadS나 VadF로 Tag가 설정된다.

 

EPROCESS -> Peb -> Ldr -> _PEB_LDR_DATA

 

그림 1-4 DLL 리스트

 

DLL 리스팅 방법

  • 접근 순서

fs -> _TEB -> _PEB -> _PEB_LDR_DATA

 

레지트 정보를 조회 후 Base에 저장되어 있는 TEB 주소를 조회하면 PEB 주소를 알 수 있다.

 

그림 1-5 TEB 주소

 

PEB의 구조체를 조회 하면 LDR 주소를 알 수 있다.

 

그림 1-6 PEB

 

PEB_LDR_DATA 주소를 확인할 수 있다.

 

그림 1-7 PEB_LDR_DATA

 

LIST_ENTRY 주소를 조회하면 Flink와 Blink 연결된 모듈들을 조회했다.

 

그림 1-8 LIST_ENTRY

 

Flink 첫번째를 조회하면 덤프 형식으로 아무것도 알 수가 없다.

 

그림 1-9 Flink

 

base 주소를 조회하면 MZ로 시작하는 것으로 보아 base 정보라는 것을 알 수 있다.

 

그림 1-10 base 주소

 

DLL에 대한 이름을 확인할 수 있다.

 

그림 1-11 DLL 정보

 

'포렌식 > 윈도우 포렌식' 카테고리의 다른 글

윈도우 부팅과 시스템 프로세스  (0) 2020.12.21
MBR  (0) 2020.12.20
보안 메커니즘  (0) 2020.12.19
콜백  (0) 2020.12.18
디바이스 드라이버  (0) 2020.12.18