물리 메모리란?
- 읽고 쓰기가 가능한 주기억 장치이며 반도체 회로로 구성
- 특정 영역에 저장된 데이터에 접근하는 데 동일한 시간이 걸리고 접근속도가 빠름
- 전원 공급이 중단되면 기억된 내용은 지워지는 휘발성 저장장치
물리메모리 수집 방법
가상 메모리
- 다수의 태스크가 하나의 메모리를 사용하기 때문에 물리 메모리 크기 보다 더 큰 저장 공간 필요
- 실행영역만을 적재하여 물리 메모리의 크기보다 큰 프로그램의 수행이 가능해짐
가상 메모리 구조
- 물리주소 : 실제 물리 메모리 상에서 유효한 주소
- 논리 주소(가상 주소) : 운영체제에서 주소 할당 시 가상적으로 주어진 주소
- 가상 주소 공간은 메모리 관리 장치(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
- 세션 매니저
- 부팅 순서에서 첫 번째 시작되는 사용자 모드 프로세스
- 원격 데스크톱 프로토콜로 로그인할 수 있는 다양한 사용자로부터 운영체제의 서비스를 분리한 세션 생성에 대한 책임을 갖음
'보안 > 포렌식' 카테고리의 다른 글
USB 사용기록 분석 (0) | 2016.11.03 |
---|---|
볼라틸리티 (Volatility) -메모리 포렌식 (0) | 2016.08.28 |
APT 분석방법 - 디스크 및 패킷 분석 (0) | 2016.06.08 |
윈도우 악성코드 포렌식 (0) | 2016.05.22 |
log2timeline(plaso) 사용방법 (1) | 2016.05.22 |