메모리 포렌식 목적
- 프로세스의 행위 탐지
- 네트워크 연결 정보
- 사용자 행위
- 복호화, 언패킹, 디코딩된 데이터
- 패스워드와 암호키 획득
메모리 포렌식 대상
- 물리메모리
- 페이지 파일
- 하이버네이션 파일
물리 주소 확장(PAE, Physical Address Extension)
- 물리적 주소 지정 비트를 32 비트 -> 36비트 확장(4GB -> 64GB)
- 접근 가능한 물리 주소 공간 증가
bcdedit (BCD, Boot Configuration Data)
윈도우 2003 이전에서 PAE 설정
- %SystemDrive%\boot.ini 파일에 /PAE 스위치 추가
- 확장된 주소 공간 접근을 위해 AEW(Address Windowing Extensions) API 사용
- PAE로 확장된 공간은 보통 램 디스크(RAM Disk)로 활용
주소 윈도잉 확장 (AWE, Address Windowing Extensions)
- 확장된 메모리 접근 API
물리 주소 확장(PAE)에 의해 확장된 메모리를 접근하기 위한 API(winbase.h)
Lock Pages in Memory
사용자 응용 프로그램의 경우, 가상 메모리로 데이터를 페이징하기 않도록 "Lock Pages in Memory"가 설정돼야 함
데이터 실행 방지 (DEP, Data Execution Prevention)
- 스택, 데이터 세그먼트, 힙과 같은 메모리 페이지를 실행 불가능하도록 설정
- 버퍼 오버플로우 등의 공격 방지
하드웨어 강제 (Haredware-enforced)
CPU의 NX/XD 비트로 설정하며 OS와 사용자 애플리케이션 모두에서 사용 가능
NX/XD 비트를 지원하는 CPU에서만 동작
- PAE가 동작할 때만 설정 가능(NX/XD 비트를 사용할 경우 자동으로 PAE로 부팅)
NX : amd, No-eXecute page-protection
XD : intel, eXecution Disable bit
소프트웨어 강제(Software-enforced)
- 비주얼 스튜디오의 /SafeSEH 링커 옵션(SEH, Structured Exception Handler)
주소 공간 배치 랜덤화 (ASLR, Address Space Layout Randomization)
실행 오브젝트의 가상 주소 공간 맵핑을 매 실행마다 랜덤하게
가상 메모리 소개
- Win32 시스템의 모든 프로세스는 4GB의 연속된 주소 공간 사용
- 물리메모리 용량이 4GB인 시스템에서 다수의 프로세스가 동작하는 이유는?
- 가상 메모리 기법으로 대용량 메모리를 사용하는 프로그램 수행 가능
x86 공간
가상 메모리 주소 공간
- Win32 시스템의 모든 프로세스는 4GB의 주소 공간 사용
사용자 영역(0x00000000 - 0x7FFFFFFF)
커널 영역(0x80000000 - 0xFFFFFFFF)
- 사용자 영역 확장
윈도우 Vista 이상
x86 주소 공간
가상 주소 -> 물리 주소 변환
프로세스 생성 과정
1. 실행 파일 실행
2. 서브시스템(POSIX, MS-DOS, Win32 등) 확인
3. EPROCESS, KPROCESS, PEB, 초기 주소 공간 설정
4. 기본 스레드 생성
5. 윈도우 하위 시스템에 새로 생성된 프로세스와 스레드 알림
6. 기본 스레드에 의해 프로세스 환경 설정과 스레드 자원 할당
7. 새로운 프로세스와 스레드의 컨텍스트 내부 주소 공간 초기화 완료
물리메모리 덤프
1. 하드웨어를 이용한 덤프
- PCI 장치를 이용한 덤프 - Tribble
"A Hardware-Based Memory Acquisition Procedure for Digital Investigations"
PCI 장치를 이용해 물리 메모리를 외부 저장장치로 덤프
추가적인 하드웨어/소프트웨어의 설치 없이 무결성을 최대한 보장
단, 사전에 미리 설치되어 있어야 함
- FireWire(IEEE 1394)를 이용한 메모리 덤프 - FireWire Attack
FireWire 인터페이스를 이용해 DMA에 접근하여 메모리 덤프
윈도우, 리눅스, 맥 OS에서 가능
장점
- 악성 프로그램에 영향을 받지 않음
- 빠른 메모리 덤프
- 무결성 최소화
단점
- 간혹 시스템 크래시 발생
- 안정성 문제로 현재 연구로만 진행
2. 소프트웨어를 이용한 덤프
- Win(32|64)dd
- Matthieu Suiche가 개발한 후 현재는 MoonSols Windows Memory Toolkit에 포함
- 커뮤니티버전(기능 제한 무료), 프로페셔널버전(약 75만원)
- 윈도우 XP~7까지 덤프 지원
- Memorize
- 맨디언트에서 개발한 무료 메모리 이미징/분석 도구
- 윈도우 2000 SP4부터 윈도우8(2012)까지 지원
- FD(FastDump)Pro
- HBGary 에서 개발한 상용 메모리 덤프 도구로 Responder 제품의 번들
- 무료 버전은 64비트와 일부 운영체제 미지원
- 매우 빠른 이미징 속도, 대용량 메모리도 이미징 가능
3. 크래시 덤프
시스템 크래시 특징
- [시스템] -> [고급] -> [시작 및 복구] -> [설정]에서 크래시 덤프 설정
- 작은 메모리 덤프, 커널 메모리 덤프, 전체 메모리 덤프
- 윈도우 7에서 전체 메모리 덤프가 사라짐
- BSOD(Blue Screen of Death) 발생 시 자동 생성
- WinDbg, Kernel Memory Space Analyzer 등을 통해 디버깅 가능
- 물리 메모리에 가장 최소한의 영향을 미치는 방법
- 윈도우만 지원하며 수동 크래시를 발생시키려면 시스템 재부팅 필요
레지스트리 설정
HKLM\SYSTEM\CurrentControlSet\Control\CrashControl\CrachDumpEnabled
0 : None
1 : Complete memory dump
2 : Kernel memory dump
3 : Small memory dump
• 크래시 덤프 수동 생성
PS/2 Keyboard : HKLM\System\CurrentControlSet\Services\i8042prt\Parameter
USB Keyboard : HKLM\System\CurrentControlSet\Services\kbdhid\Parameter
CrashOnCtrlScroll을 새로 만들고 DWORD 값을 0x01로 설정
CTRL(오른쪽) + SCROLL + SCROLL 키 조합으로 강제 크래시 덤프
절전 모드 덤프
절전 모드 특징
절전모드(Hibernation)로 진입 시 메모리를 압축하여 C:\hiberfil.sys 파일로 저장
부팅 과정에서 NTLDR에 의해 메모리로 로드 된 후 이전 상태로 복귀
노트북과 같은 휴대용 시스템에서는 절전모드가 기본적으로 설정
조사 시 강제로 절전모드 설정 후 실행
추가적인 프로그램이나 장비 불필요
전체 메모리 영역의 덤프가 아닌 사용 중인 영역만 덤프
콜드 부트
종료된 시스템 메모리를 차갑게 유지시켜 메모리 손실을 줄이는 방법
- 스마트폰 패스워드 획득
4. 가상화 시스템 덤프
실전 메모리 덤프
최근 방식
- 하드웨어 방식은 미리 설치되어 있어야 하거나 안정성 문제
- 절전모드, 크래시 덤프는 제한된 환경에서만 동작
- 따라서, 주로 소프트웨어 방식으로 메모리 덤프
고려 사항
- 덤프한 메모리는 외장저장장치에 저장
- 외장저장장치 이너페이스에 따라 수집 속도 차이
- 침해사고의 경우 현장 상황에 따라 D:\ 볼륨을 이용하는 것도 고려해야함
물리메모리 분석
문자열 추출
- 특정 패턴의 문자열 검색
- 이메일, 계정, 비밀번호, 메신저 대화 등
파일 카빙
- 그래픽 이미지, HTML, 레지스트리 등 파일 카빙 기법으로 파일 획득
오브젝트 검색
- 물리 메모리 상의 오브젝트를 찾기 위한 방법
- 리스트 워킹(List-Walking)
- 패턴 매칭 (Pattern Matching)
리스트 워킹
EPROCESS 프로세스 이름을 이용한 프로세스 탐색 기법
- EPROCESS 구조체 내부의 프로세스 이름을 검색하여 주요 프로세스 확인(system, smss 등)
- 이름이 확인되면 해당 위치를 기준으로 앞 뒤에 EPROCESS 구조가 존재하는지 검증
- EPROCESS 구조가 존재한다면 ActiveProcessLinks를 이용해 프로세스 탐색
KPCR(Kernel Processor Control Region)을 이용한 프로세스 탐색 기법
- KPCR은 XP, 2003, Vista에서 가상주소 0xFFDFF000 위치, 확장 버전인 KPCRB는 0xFFEFF120
- KPCR에는 EPROCESS의 KTHREAD 구조체 포인터 값이 저장됨
- 결국, KTHREAD를 이용해 EPROCESS의 위치 확인 가능
DKOM과 같은 프로세스 은닉 기법 탐지 불가능
패턴 매칭
- 프로세스 구조체의 패턴을 이용해 메모리 영역 전체 검색
- 은닉 프로세스라도 동일한 프로세스 구조체를 가짐
EX)
프로세스와 스레드는 오브젝트로 존재하며, 모든 오브젝트는 OBJECT_HEADER를 포함
프로세스와 스레드는 동기화가 필요, 하부 구조체로 DISPATCHER_HEADER를 포함
프로세스와 스레드는 중요 오브젝트이므로 page pool이 아닌 non-paged pool에 기록 (POOL_HEADER 포함)
'디지털 포렌식' 카테고리의 다른 글
디지털 증거 획득, 증거 수집 방안 (0) | 2022.11.29 |
---|---|
[DFC 2021] 206 - Secret Message (0) | 2022.11.22 |
DFC 2022 [101] shellcode payload (0) | 2022.11.08 |
부팅과 데이터 저장/전송 & 부팅 절차 (0) | 2022.11.08 |
디지털 포렌식 기초 1주차 (0) | 2022.11.01 |