1. 휘발성 데이터 수집 (Live Data 수집)
1) 수집대상
2) 명령어
3) 스크립트
2. 메모리 포렌식(메모리 덤프/분석)
1) 메모리 덤프
2) 분석(volatility)
1. 휘발성 데이터 수집
▷ Live Data 수집 시 참고자료
- RFC3227 , NIST SP800-86 : 포렌식 절차 / 대상 등을 정의
https://www.ietf.org/rfc/rfc3227.txt
http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-86.pdf
- NIST CFFT(Computer Forensic Tool Testing) : 포렌식 도구 검증
http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-86.pdf
□ 휘발성 데이터 수집대상
시간정보(대한민국 UTC+9) |
네트워크 관련 정보 |
프로세스 관련 정보 |
사용자 관련 정보 |
DLL 목록 사용여부 //(Dynamic Link Library) |
핸들 목록 |
명령 히스토리 (제한있음,전부 다 볼 순X) |
서비스 목록 |
예약 작업 |
클립도드 내용 |
네트워크 드라이브 정보 / 공유폴더 |
netbios 정보 |
프로세스. 메모리 덤프 |
=> 주로 사용 할 도구
- Sysinternals Suite(https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx)
- 기본 윈도우 내장 명령어(cmd.exe, c:\window\system32)
□ 휘발성 데이터 명령어
▷ 시간정보
date : 날짜
time : 정보
옵션 /t : 정보 수정없이 현재 정보만 표시
> date /t & time /t
▷ 기본적인 시스템 정보수집
[wmic](Windows Managemant Instrumentation Console)
: (wmic 실행 시 프롬프트 변경)
os : 대략적인 시스템 정보 전체 조회
os get [특정항복1], [특정항목2].. : 특정 항목만 조회
installdate : 설치날짜
serialnumber : 시리얼정보
currenttimezone : 현재 시간대 정보
localdatetime : 시간정보
useraccount : 사용자 계정 정보
[SysinternalsSuite] (폴더로 경로이동)
Sysinternal 도구 실행 시 뒤에 ' /accepteula '옵션 추가 //(end user license agree?)
- 라이센스 동이 GUI 창 미표시
- 자동 라이센스 동의(스크립트)
ㄴ시스템 정보 확인(sysinternals)
PsInfo : 기본 시스템 정보 수집
-d : 디스크 정보
-s : 설치 된 프로그램 정보 (안나오는것도 있음)
-h : 핫픽스 정보
ㄴ로그인 된 사용자 정보 (Sysinternals도구)
: 원격 데스크톱 연결 등을 통해 접속한 사용자 목록 확인
ntsuers : sysintemtool 사이트에서 다운로드
http://www.systemtools.com/cgi-bin/download.pl?NetUsers (현재X)
ㄴ세션 정보 확인(sysinternals)
logonsessions
=> 사용자 로그인 세션 외의 기타 서비스 관련 세션 등의 정보 확인 가능
-p : 각 세션이 실행하는 프로세스 목록 확인
[열려있는 파일 목록 조회]
net file
openfiles
psfile
[cmd에서 실행헀던 명령어 조회](해당 cmd창에서만 유효)
doskey /history
[프로세스 목록 조회]
tasklist : 내장 명령어
/v : 상세 정보 표시
/svc : 프로세스가 관련된 서비스 정보 조회
pslist(sysinternals)
-t : 프로세스 트리표시
-x : 스레드 등 상세 정보 표시
[DLL확인]
listdll.exe (sysinternals)
[핸들 확인]
handle.exe (sysinternals)
[서비스 목록 조회]
psservice.exe (sysinternals)
▷ 네트워크 관련 정보
[네트워크 정보 수집]
netstat: 네트워크에서 열려있는 포트 정보 등 조회
-a : 전체 네트워크 정보 (TCP이외의 연결)
-n : 이름 서비스 조회 중지
-o : 관련 프로세스 정보
-b : 프로세스 이름 정보 표시
fport : 포트 정보 확인 (xp까지는 됐으나 현재 X)
tcpvcon(sysinternals) : 네트워크 포트 정보 확인
-a : 전체 포트 정보
-n : 이름 표시 X
-c : csv형태로 표시 (분석 용이)
[네트워크 인터페이스 정보]
ipconfig /all : NIC 상세 정보 출력
getmac : MAC Address 표시
[라우팅 테이블]
netstat -r , route print : 실행 결과 동일
[arp 캐시 확인]
arp -a : 현재 시스템의 arp 캐시 확인
[dns캐시]
ipconfig /dispalydns : 현재 시스템 DNS 캐시확인
[네트워크 드라이브 확인]
net use : 네트워크 드라이브 연결 / 목록 확인
[Netbios 이름확인]
nbtstat -c : netbios 이름 / 캐시 출력
▷예약작업
at : 일회용 예약 작업 목록 ex)at 13:00 cmd.exe
schtasks : 작업스케줄러에 등록된 예약 작업 목록
□ 스크립트(배치파일 batch)
- .bat
test.bat
reuslt.txt
□휘발성 데이터 수집 스크립트 작성 시 유의사항
① 스크립트 실행결과는 파일로 저장
② 스크립트 실행 시 중단되지 않도록 비 대화형 명령 수행
③ 스크립트 실행에 사용되는 파일은 전부 별도로 준비
(윈도우 내장명령어, 기타 sysinternals 도구 등)
④ cmd.exe도 별도로 준비
참고사이트 [forensic proof]
http://forensic-proof.com/
2. 메모리 포렌식
□ 메모리 포렌식의 필요성
① 메모리에 직접 올라가는 악성 프로그램 등을 분석 가능
인 메모리 라이브 인젝션
②프라이버시를 위하여 보호된 사용자 데이터들이 메모리에 올라갔을때는 암호화 해제
□ 활성데이터 수집(Live Data)과 메모리 포렌식의 차이점
활성데이터 수집(Live Data) |
메모리 포렌식 |
운영체제 API의 영향을 받음 |
메모리 자체를 가져오기 때문에 영향X |
시행 시 마다 다른 결과가 나올 수 있음 |
분석 시 마다 동일한 결과 |
|
전체 메모리 덤프를 통해 분석하지 않은 부분에 대하여 추가적인 분석이 가능 |
□ 메모리 덤프
- 하드웨어 방식 / 소프트웨어 방식
[하드웨어 방식] http://www.grandideastudio.com/tribble/
tribble : RAM 슬롯에 장착하여 메모리 덤프 수행
- 사전에 설치되어 있어야 함
- 설치가 되어있을경우 다른 영향 없이 덤프 추출 가능
IEEE1394(Firewire) : DMA가 가능 (Direct Memory Access)
USB는 운영체제를 통해서만 메모리 접근 가능
원인을 알 수 없는 시스템 크래시가 자주 발생
=> 이러한 이유로 소프트웨어 방식의 메모리 덤프 사용
- 윈도우 API의 영향을 받을 수 있음
- 덤프를 만드는 과정에서 시스템에 영향을 줌
□ 메모리 덤프 추출 도구
▷ 사용자가 임의로 추출한 덤프
- dumpit (http://www.downloadcrew.com/article/23854-dumpit)
: cmd창 -> y -> 메모리 덤프
- memoryze (Mandiant사에서 만든 도구)
: C:\Program Files (x86)\MANDIANT\Memoryze\memoryDD 관리자 권한으로 실행
- DD
: 예전에는 사용가능했으나 현재 윈도우에서는 불가
- FTK Imager Lite (무료도구)
: 메모리모양 클릭 ->경로 설정 -> capture memory -> 끝
▷ 자동저장 덤프 (일반적으로 메모리 포렌식에서 사용하지 않음)
- 크래시 덤프 : 장애 발생 시 자동 저장
경로)사용자설정-고급설정-시작및복구-시스템오류-디버깅정보쓰기-커널/작은/전체 메모리 텀프
커널 메모리 덤프 |
크래시에 대한 최소 정보 |
작은 메모리 덤프 |
커널 메모리 부분만 저장 |
전체 메모리 덤프 |
물리 메모리 전체 |
- 절전모드 덤프 : 최대 절전모드에서 사용하는 덤프 c:\hiberfil.sys
//끄기 powercfg -h off
- VMware 등 가상컴퓨터 시스템 - .vmem 파일
EPROCESS 구조체
- 프로세스가 메모리에 존재할 때의 구조체
- 환형 이중 링크드 리스트 형태
프로세스 스캔 방식
- 리스트 워킹(List Walking) : 링크를 따라 프로세스 검색
- 패턴 매칭 (Pattern Matching): 실제 메모리 데이터 상 EPROCESS형태를 가진 프로세스 검색
□ 메모리 덤프 분석 도구
[volatility] (http://www.volatilityfoundation.org/25)
- volatility.exe -h : 사용법 조회 (플러그인 목록)
1) imageinfo : vola.exe -f [메모리덤프파일이름] imageinfo
메모리 덤프가 추출 된 시스템의 정보 확인
Suggested Profile에서 운영체제 종류 확인
Service Pack이 여러개 검색 될 경우 아래부분의 Service Pack 항목 확인
Win7SP1x64
2) pslist : vola.exe -f [덤프파일] --prorile=Win7SP1x64 pslist
리스트워킹 방식으로 프로세스 검색
3) psscan : vola.exe -f [덤프파일] --prorile=Win7SP1x64 psscan
패턴 매칭 방식으로 프로세스 검색
4) pstree : 프로세스 트리
5) psxview : 다양한 프로세스 검색 방식으로 비교
6) dlllist :
- 메모리 상에 존재하는 프로세스와 관련된 DLL리스트를 출력
--pid : 특정 PID와 관련된 DLL리스트를 출력
--offset [물리메모리주소] : psscan으로 검색된 프로세스의 DLL리스트 확인
7) dlldump : dlldump --dump-dir [덤프 대상 디렉토리] --pid [특정PID]
- DLL을 추출
추출 된 DLL은 virustotal
8) handle
- 프로세스가 접근중인 자원의 목록 확인(핸들)
9) getsids
- 보안식별자 확인
- 프로세스가 사용한 보안식별자 목록 환인
- 권한상승 등의 공격 확인 용도
10) mod시리즈
- modules, modscan, moddump
- 로드된 드라이버(*.sys)
- modules는 리스트 형태로 검색, modscna은 패턴매칭으로 검색
- moddump를 사용하여 덤프
11) thrdscan
- 스레드 정보 검색
12) 네트워크 관련 플러그인
- XP이전 : connections, conscan, sockets, sockscan
connections 연결정보를 리스트로 검색
conscan 연결정보를 스캔으로 검색
socket 열려있는 포트정보를 리스트로 검색
sockscan 열려있는 포트정보를 스캔으로 검색
- Vista 이후 : netscan
13) svcscan
- 서비스 관련
14) cmdscan
- cmd에서 입력했던 명령어
15) consoles
- 마지막 cmd창의 화면 상태 표시
16) procdump
- 특정 프로세스 덤프
--dump-dir [경로] --pid [PID]
□ 레지스트리 관련
17) hivescan : 메모리에서 레지스트리 목록 확인
18) hivelist : 레지스트리 주소와 파일 관계 매칭
19) printkey : 레지스트리에서 특정 값 출력
20) hivedump : 레지스트리 하이브 파일로 덤프
21) hashdump : 윈도우 SAM에 들어있는 계정 해쉬 추출
22) clipboard : 메모리 덤프시 클립보드 내용 출력
23) screenshot : 메모리 덤프시 대략적인 윈도우 배치
24) windows : 덤프시 열려있던 윈도우 창 정보