본문 바로가기

인프런

[인프런] 메모리 포렌식

https://github.com/proneer/Slides/blob/master/Fundamentals/(FP)%20메모리%20포렌식%20(Memory%20Forensics).pdf

 

Slides/Fundamentals/(FP) 메모리 포렌식 (Memory Forensics).pdf at master · proneer/Slides

Slides. Contribute to proneer/Slides development by creating an account on GitHub.

github.com

 

 

<1장. 물리메모리 이해 >

 

 

1. 메모리 포렌식의 목적

 

  • 프로세스 행위 탐지: 악성코드나 루트킷 등의 실행 여부
  • 네트워크 연결 정보: 외부 서버와의 접속 흔적
  • 복호화된 데이터 확보: 파일이 디스크에 암호화되어 있더라도, 실행 중인 메모리에는 평문으로 존재할 수 있음
  • 패스워드, 암호키 수집: 로그인 세션, 키 스트로크 등은 모두 메모리에 일시적으로 저장

2. 메모리 포렌식의 대상

 

  • 물리메모리 (RAM)
  • 페이지파일 (pagefile.sys): RAM 부족 시 디스크에 기록
  • 하이버네이션 파일 (hiberfil.sys): 절전 모드시 RAM 전체가 저장됨

3. AWE (Address Windowing Extensions)

 

  • AE로 확장된 메모리를 접근하기 위한 WinAPI
  • VirtualAlloc, AllocateUserPhysicalPages, MapUserPhysicalPages 등으로 사용자 프로세스에 물리 메모리를 직접 매핑 가능

4. DEP (Data Execution Prevention)

 

  • 스택/힙 영역에서의 코드 실행 방지
  • 하드웨어 기반:
    • NX(AMD) 또는 XD(Intel) 비트 필요
    • PAE가 활성화되어야 DEP 사용 가능
  • 소프트웨어 기반:
    • Visual Studio에서는 /SafeSEH 설정으로 구성 가능
  • 설정 방법 예시:
    • bcdedit /set nx AlwaysOn
    • 또는 boot.ini에 /noexecute=optin 추가

5. ASLR (Address Space Layout Randomization)

  • 메모리 주소 배치를 랜덤하게 하여 익스플로잇 성공률을 낮춤
  • 실행 파일(.exe), DLL 등이 매 실행마다 다른 위치에 적재됨

 

가상 메모리 구조

윈도우의 기본 가상 메모리 체계:

  • 4GB 주소 공간 중 3GB는 사용자 영역, 1GB는 커널 영역
  • /3GB 스위치를 boot.ini에 설정하면 사용자 영역을 확장 가능

가상주소 → 물리주소 변환

  • 32비트 주소는 아래와 같이 나뉜다:
    • 상위 10비트: 페이지 디렉토리 인덱스
    • 다음 10비트: 페이지 테이블 인덱스
    • 하위 12비트: 오프셋
  • 이 구조를 이용해 페이지 테이블, 디렉토리, PFN을 따라가 물리 주소를 계산

 

 

 

<2장. 물리메모리 덤프 >

 

1. 메모리 덤프란?

물리 메모리 덤프는 메모리 전체 또는 일부의 내용을 추출해 파일로 저장하는 과정입니다. 이는 후속 분석의 출발점이 되며, 가능한 시스템에 영향을 최소화한 상태로 수집하는 것이 중요합니다.

덤프 방식 5가지:

  1. 하드웨어 기반 덤프
  2. 소프트웨어 기반 덤프
  3. 크래시 덤프 (Crash Dump)
  4. 가상 머신 덤프
  5. 절전모드(Hibernation) 덤프

2. 하드웨어 기반 덤프

1) Tribble

  • PCI 카드 형태로 장착해 RAM 데이터를 외부 저장장치로 추출
  • 미리 설치되어 있어야 함
  • 악성코드 방해 없이 신뢰성 높은 덤프 가능

2) FireWire Attack

  • FireWire(IEEE 1394) 포트를 이용해 DMA 직접 접근
  • 장점:
    • 빠르고 무결성 우수
    • 악성코드 영향 없음
  • 단점:
    • 드물게 시스템 크래시 발생 가능
    • 최신 OS에서는 지원 제한

3. 소프트웨어 기반 덤프

1) Win(32|64)dd

  • MoonSols에서 개발한 도구
  • 커뮤니티 버전은 무료, 프로 버전은 유료 (약 500유로)
  • WinXP ~ Win7까지 지원

2) Memoryze

  • 맨디언트(Mandiant)에서 배포
  • 무료, XML 기반으로 스크립트 자동화 가능

3) FastDump Pro

  • HBGary 개발, 상용 버전은 대용량/속도 우수
  • 일부 OS와 64비트 비지원

 

4. 크래시 덤프

  • 시스템에서 강제로 BSOD(블루스크린)을 발생시켜 메모리를 저장
  • 윈도우 설정:
    • 시스템 > 고급 > 시작 및 복구 > 크래시 덤프
  • 저장 방식:
    • 전체 덤프, 커널 덤프, 스몰 덤프 선택 가능
  • 수동 발생:
    • 레지스트리에서 CrashOnCtrlScroll 설정 후
    • Ctrl + Scroll Lock + Scroll Lock 입력

5. 절전모드(Hibernation) 덤프

  • 메모리 전체가 hiberfil.sys에 저장됨
  • 절전모드 진입 → 파일 추출
  • 장점:
    • 추가 장비/설정 없이 간단
    • 노트북에선 자동 설정됨
  • 단점:
    • 전체가 아닌 사용 중인 영역만 저장됨

 

 

<3장. 물리메모리 분석>

 

 

1. 메모리 분석 초입 단계: 문자열 & 파일 카빙

1. 문자열(String) 분석

  • strings 명령어로 메모리 내 ASCII/유니코드 문자 추출
  • 이메일, URL, 비밀번호, 인증키 등 텍스트 기반 정보 수집

2. 파일 카빙(File Carving)

  • 바이너리 데이터에서 시그니처를 기반으로 이미지, 레지스트리, HTML 등 추출
  • hex 에디터 또는 carving 도구 사용

2. 오브젝트 탐지 방법

1. 리스트 워킹(List Walking)

  • EPROCESS 리스트를 따라 프로세스를 순차적으로 탐색
  • 예: ActiveProcessLinks 등 커널 구조체 활용
  • 한계: DKOM 등의 은닉 기법에 취약

2. 패턴 매칭(Pattern Matching)

  • EPROCESS 구조체 자체를 시그니처처럼 탐색
  • 은닉된 프로세스도 구조체 패턴으로 발견 가능

구조체 탐색 키 포인트

  • 모든 오브젝트는 OBJECT_HEADER 포함
  • 프로세스/스레드는 DISPATCHER_HEADER로 시작
  • 대부분 non-paged pool에 존재

3. Volatility 기본 사용법

필수 명령어:

bash
복사편집
# 프로파일 추론 vol.py -f image.raw imageinfo # 프로세스 목록 보기 vol.py -f image.raw --profile=WinXPSP2x86 pslist

주요 플러그인:

  • pslist, pstree, psscan, psxview: 프로세스 추적
  • dlllist, handles, vadinfo: 프로세스 내부 정보
  • threads, privs: 권한/스레드 분석

4. PE/코드 인젝션 분석

  • moddump, procexedump: 프로세스 PE 파일 덤프
  • malfind: 인젝션된 코드 영역 탐색 (행위 기반 탐지)
  • ldrmodules, impscan: PE 구조 기반 은닉 분석

5. 네트워크 & 커널 분석

네트워크 플러그인

  • connections, connscan, netscan, sockets

커널 관련

  • modules, ssdt, idt, gdt: 루트킷 탐지에 활용
  • timers, callbacks: 숨겨진 훅 감지

6. 기타 고급 분석 플러그인

  • driverscan, mutantscan, filescan: 시스템 내부 객체 스캔
  • hivelist, printkey, userassist, shellbags: 레지스트리 분석
  • lsadump, hashdump: 패스워드 덤프
  • yarascan: YARA 룰 기반 시그니처 스캔

Volatility는 단순한 구조 파악에서 악성코드 감지, 정보 수집, 포렌식 리포트 작성까지 모든 메모리 분석 단계에 필수입니다.