본문 바로가기

보안/포렌식

메모리 포렌식 기초 지식

물리 메모리란?

 - 읽고 쓰기가 가능한 주기억 장치이며 반도체 회로로 구성

 - 특정 영역에 저장된 데이터에 접근하는 데 동일한 시간이 걸리고 접근속도가 빠름

 - 전원 공급이 중단되면 기억된 내용은 지워지는 휘발성 저장장치


물리메모리 수집 방법


  가상 메모리

   - 다수의 태스크가 하나의 메모리를 사용하기 때문에 물리 메모리 크기 보다 더 큰 저장 공간 필요

   - 실행영역만을 적재하여 물리 메모리의 크기보다 큰 프로그램의 수행이 가능해짐


  가상 메모리 구조

   - 물리주소 : 실제 물리 메모리 상에서 유효한 주소

   - 논리 주소(가상 주소) : 운영체제에서 주소 할당 시 가상적으로 주어진 주소

   - 가상 주소 공간은 메모리 관리 장치(Memory Management Unit)에 의해 물리 주소로 변환됨


  하드웨어를 이용한 덤프

   - Firewire (IEEE 1394)

   - 장치간의 연결 및 데이터 전송을 위해 Apple사에서 1986년에 개발

   - 현재 동작 중인 대상 시스템에 새로운 응용프로그램을 구동시키지 않지 않음

   - Firewire포트가 존재해야한다는 물리적인 제약 존재

   - 하드웨어 충돌에 의한 시스템 오류로 인해 시스템이 셧다운 되는 경우 발생


  PCI 장치를 이용한 덤프

   - Tribble–PCI 장치를 이용해 물리메모리를 외부저장장치로 덤프

   - 시스템의 무결성을 고려한 제품이긴 하지만 사전에 미리 설치 되어있어야 함


  소프트웨어를 이용한 덤프

   - DD

     - 유닉스용 도구(윈도우 수정 버전도 존재)

     - 사용자가 접근 가능한 모든 데이터를 바이트 혹은 블록단위로 복사

     - 실제 물리 메모리와 동일한 형태인 로우 데이터 포맷(Law Data Format)으로 덤프됨


   - Memorize

     - Mandiant에서 제작한 무료 도구

     - 실행 파일 및 배치파일을 이용해 실행

     - 데이터 수집 시 메모리 자체만이 아닌 페이지파일 데이터도 사용 


   - Winen

     - EnCase에 포함된 메모리 덤프도구

     - 일반적인 포맷이 아닌 독자적인 EnCase 포맷을 가짐


   - MoonSols DumpIt

     - win32dd와 win64dd로 유명한 MoonSols 사의 메모리 덤프 도구

     - DumpIt은 win32dd와 win64dd의 기능을 하나로 통합한 도구

     - 간단하게 물리 메모리를 덤프할 수 있는 기능을 제공함


  메모리 수집 도구 비교


   - 윈도우 XP (실제 사용 3GB / 메모리 크기 4GB)


도구 이름

 메모리 사용

 수집된 크기 

 Dumpit

 1.5MB 

 3GB 

 WinPmem

 2MB 

 3GB 

 Windows Memory Reader

 2MB

 3GB 

 FTK Imager

 25MB

 3GB 

 Encase Imager

 50MB 

 3GB 


   - 윈도우 7 32bit (실제 사용 3GB / 메모리 크기 4GB)


도구 이름

 메모리 사용

 수집된 크기 

 Dumpit

 400KB

 3GB 

 WinPmem

 1400KB

 3GB 

 Windows Memory Reader

 700KB

 3GB 

 FTK Imager

 17MB

 3GB 

 Encase Imager

 25MB 

 3GB 


   - 윈도우 7 64bit (메모리 크기 16GB)


도구 이름

 메모리 사용

 수집된 크기 

 Dumpit

 600KB

 16GB 

 WinPmem

 1500KB

 3.5GB에서 에러발생 

 Windows Memory Reader

 800KB

 16GB 

 FTK Imager

 12MB

 16GB 

 Encase Imager

 40MB 

 16GB 


  크래시 덤프

   - 시스템이 더 이상 정상적으로 구동될 수 없는 경우 커널에 생성되는 물리 메모리의 이미지

   - 시스템에 문제 발생 시 BSD(Blue Screen of Death)과 함께 ‘ \Windows\MEMORY.dmp’ 에 생성

   - WinDbg, Kernel Memory Space Analyzer 등을 통해 디버깅 가능

   - 커널 영역에 문제가 발생했을 때 크래시 덤프 파일이 생성됨

   - 활성 시스템 분석에는 적합하지 않음


   - 장점

     - 물리메모리에 최소한의 영향을 미치므로 순수한 물리메모리 수집방법

     - 전체 크래시덤프는 모든 물리메모리 중 가장 순수한 물리메모리(레지스트리 수정필요)


   - 단점

     - 모든 운영체제가 동일한 크래시덤프를 제공하는 것이 아님

     - 크래시덤프 설정이 되어있지 않다면 재부팅이 필요


  가상화 시스템 덤프

   - 최근 흔적을 은폐하고자 가상화 시스템을 이용한 사건이 다수발생

   - VMware에서 세션이 정지될 경우, 물리메모리 내용은 .vmem확장자를 가지는 파일에 포함

   - vmem 파일은 실제 물리 메모리의 구조와 거의 동일하기 때문에 기존 메모리분석 도구를 통해 분석 가능


  절전모드 덤프

   - 절전모드(Hibernation)로 들어갈 경우 물리메모리 내용을 압축하여 hiberfil.sys 파일로 저장

   - 부팅 과정에서 hiberfil.sys가 설정되어 있을 경우, NTLDR에 의해 메모리로 로드된 후 이전 상태로 복귀

   - 노트북과 같은 휴대용 시스템에서는 절전모드가 기본적으로 설정

   - 활성 상태 시스템 조사 시에 임의로 절전 모드로 진입하도록 하여 생성 가능


  - 장점

   - 추가적인 프로그램이나 장비 불필요

   - 비교적 순수한 메모리 덤프 가능


  - 단점

   - 덤프 파일이 운영체제 파티션의 루트 디렉터리에 저장됨

   - 전체 메모리 영역의 덤프가 아닌 현재 사용 중인 영역만 덤프


  페이지 파일 수집

   - “C:\” 에 pagefile.sys 형태로 파일이 존재

   - 사용자가 페이지파일을 사용하는 경우 존재


  - 수집 방법 :

   - WinHex 와 같은 수집도구를 통하여 실제 사용하는 디스크를 마운트 하고 해당 파일을 복사 하는 형태로 수집가능

   - 윈도우탐색기에서는 확인이 불가능

   - 저장 시에는 “pagefile.sys” 형태가 아닌 덤프형태로 저장


윈도우즈 주요 프로세스

메모리 포렌식을 하다보면 자주 보이는 프로세스명과 어딘가 이상한 프로세스명이 존재한다. 어느 것이 악성코드이고 어느 것이 정상프로세스인지 분간 할 수 있어야 한다.


  idle과 System

   - 실제 프로세스가 아님

   - Idle은 커널이 idle스레드에 대한 cpu 시간을 충전하기 위해서 사용하는 컨테이너

   - System은 커널 모드에서 동작하는 스레드에 대한 기본적인 홈의 역할

   - System 프로세스(PID 4)는 소유한 소켓에 나타나거나 커널 모듈에 의해 열린 파일들에 대한 파일만 처리


  csrss.exe

   - 클라이언트 서버 런타임 하위 시스템은 프로세스를 생성 또는 삭제하는 역할

   - 다른 데이터 소스와 상호 참조하는데 사용할 수 있는 객체의 전용 리스트를 관리

   - 윈도우 7이전에는 cmd.exe에서 실행된 명령의 브로커 역할 수행

   - 메모리 공간으로부터 명령어 내역 추론 가능함


  services.exe

   - 윈도우 서비스를 관리, 그것들의 전용 메모리 공간에서 서비스 목록을 관리

   - 단 한 개의 사본이 있을 수 있으며 system32 디렉토리에서 실행되어야함


  svhost.exe

   - 동시에 실행되는 다수의 공유된 호스트 프로세스를 가지며 각각의 서비스를 구현한 DLL에 대한 컨테이너를 제공

   - 실행파일 경로는 system32 디렉토리로 지정됨


  lsass.exe

  - 로컬 보안 권한 서브시스템 프로세스

  - 보안정책을 강화하고 비밀번호를 검증하며 접근 토큰을 생성

  - system32 디렉토리에 존재

  - 한 개의 인스턴스만 존재

  - 비스타 이전의 부모 프로세스 : winlogon.exe

  - 비스타 이후의 부모 프로세스 : wininit.exe


  winlogin.exe

  - 로그온 대화식 로그인 프롬프트를 제공

  - 컨트롤 알트 딜리트 와 같은 보안 중의 시퀀스 키보드에 동작

  - 윈도우 파일 보호를 구현한 시스템에서 파일과 디렉토리 변화를 감시

  - System32 디렉토리에실행파일 존재


 explorer.exe

  - 각 로그인된 사용자에 대한 한 개의 윈도우 탐색기

  - 사용자와의 상호 작용 처리를 담당


  smss.exe

  - 세션 매니저

  - 부팅 순서에서 첫 번째 시작되는 사용자 모드 프로세스

  - 원격 데스크톱 프로토콜로 로그인할 수 있는 다양한 사용자로부터 운영체제의 서비스를 분리한 세션 생성에 대한 책임을 갖음