GrrCon 2015 (Forensics) — 메모리 포렌식 정리
1) 전체 분석 흐름(High-level)
- 증거(메모리 덤프) 확보 → 해시 계산(무결성 확보).
- imageinfo로 운영체제/프로파일 추정.
- 프로세스·네트워크·CMD·파일 관련 플러그인으로 전반 조사(pslist, psscan, pstree, psxview, netscan 등).
- 의심 프로세스(예: TeamViewer, outlook.exe, iexplore.exe, mstsc.exe 등) 식별 → PID 확보.
- 해당 PID로 메모리/실행파일/파일핸들 덤프(memdump, procdump, dumpfiles 등).
- 추출물(strings, hexdump, PE 검사, VirusTotal, YARA 등)로 IOC·플래그·악성행위 확인.
- 네트워크(네트워크 연결/소켓)로 C2/공격자 IP 추적.
- 타임라인 구성 및 보고서 작성.
2) 초기 준비 / 증거 보존
- 덤프 파일 무결성 확인: md5sum memory.dmp && sha1sum memory.dmp
- 항상 원본은 변경 금지(read-only). 분석은 복사본으로 진행.
- Volatility 환경: Volatility 2 vs 3가 플러그인 이름·옵션이 다름. 강의 노트는 Volatility 2 스타일 명령어(예: imageinfo, pslist) 기준으로 정리됨.
3) 운영체제 식별
- 명령:
-
vol.py -f memory.dmp imageinfo
- 결과로 추천 profile(WinXPSP2x86 등)을 얻음 → 이후 명령에 --profile=WinXPSP2x86 사용.
4) 프로세스 조사 (숨겨진 프로세스 포함)
- pslist : 정상적으로 보이는 프로세스(시간순).
-
vol.py -f memory.dmp --profile=... pslist
- psscan : 메모리 스캔 기반으로, 숨겨진/종료된 프로세스 탐지 가능.
-
vol.py -f memory.dmp --profile=... psscan
- pstree : 프로세스 계층 구조(PID, PPID) 확인 — 부모/자식 관계에서 의심점 찾기.
-
vol.py -f memory.dmp --profile=... pstree
- psxview : 여러 방법(pslist/psscan/etc.)을 합쳐 서로 차이를 보여줌(루트킷 감지에 유용).
-
vol.py -f memory.dmp --profile=... psxview
분석 팁
- pstree로 보면 mstsc.exe, outlook.exe, iexplore.exe, teamviewer같은 원격/통신 도구가 보인다면 우선순위로 조사.
- 의심 PID를 기록(PID, 프로세스명, 시작 시간 등).
5) 메모리에서 프로세스 덤프
- 특정 PID 메모리 덤프:예: memdump -p 4064 -D .\dumps\ (user note)
vol.py -f memory.dmp --profile=... memdump -p <PID> -D ./dumps/
- 실행 파일(PE) 추출:
-
vol.py -f memory.dmp --profile=... procdump -p <PID> -D ./procdumps/
- 파일 핸들/파일 구조로부터 파일 추출:
-
vol.py -f memory.dmp --profile=... filescan vol.py -f memory.dmp --profile=... dumpfiles -Q <OFFSET> -D ./files/ -n
실무 팁
- memdump로 뽑은 덤프는 strings로 먼저 훑어 플래그/URL/이메일/명령어/키워드 찾아보기.
- procdump로 얻은 실행파일은 PE 검사(PEiD/pefile), 정적분석(IDA/Ghidra)이나 VirusTotal 업로드 검토.
6) 네트워크 분석 (연결·소켓·스캔)
- connections : 현재 연결된 TCP 통신 정보(소스/목적지/포트).
-
vol.py -f memory.dmp --profile=... connections
- sockets : 리스닝 상태(수신 대기)인 소켓들.
-
vol.py -f memory.dmp --profile=... sockets
- netscan : 내부 구현에 따라 위의 정보를 통합(Active TCP/UDP 소켓 포함).
-
vol.py -f memory.dmp --profile=... netscan
사용자 노트 반영
- netscan으로 10.1.1.2x 형태의 IP를 발견 → 공격자 의심.
- connections는 현재 연결, sockets는 리슨/열린 포트 정보. 둘 다 같이 봐야 전체 상황 파악.
7) CMD / 콘솔 분석
- cmdline : 프로세스가 띄워질 때 전달된 인자 확인 → 인자 안에 URL/명령어/파일경로 있을 수 있음.
vol.py -f memory.dmp --profile=... cmdline
- cmdscan : 콘솔(명령 프롬프트)에 입력된 값(버퍼) 확인 — 일부 환경에서만 가능.
-
vol.py -f memory.dmp --profile=... cmdscan
- consoles : 콘솔의 입출력 전체(있다면).
-
vol.py -f memory.dmp --profile=... consoles
참고
- cmdscan/consoles는 항상 성공하지 않음(콘솔 버퍼가 메모리에 남아있어야 함). 성공하면 공격자가 입력한 명령을 직접 확인 가능.
8) 파일 관련 스캔 / 추출
- filescan : 메모리 내 파일 오브젝트 목록(핸들 포함).
-
vol.py -f memory.dmp --profile=... filescan
- dumpfiles : filescan 결과의 오프셋을 이용해 파일 추출.
-
vol.py -f memory.dmp --profile=... dumpfiles -Q 0x123456 -D ./files/ -n
- 추출물 검사: strings, binwalk, PE 검사, 압축/암호화 탐지 등.
9) 문자열 검색 및 간단 분석
- memdump로 추출한 파일/프로세스 덤프에 대해:
-
strings ./dumps/3196.dmp > strings_3196.log
- 로그에서 From:, Subject:, http://, .exe, teamviewer, tv_w32.exe 등 키워드 검색.
- Outlook 메일 원본은 메모리 내에 MIME 원문 형태로 남아 있을 가능성이 높음(From:/To:/Subject:/Content-Transfer-Encoding: 등).
10) IOC 확인 및 추가 검사
- 의심 파일/PE: MD5/SHA1 계산 → VirusTotal 조회(업로드/검색).
- IP/도메인: 블랙리스트 조회, 네트워크 장비 로그 조정(방화벽/프록시 로그).
- YARA 규칙으로 메모리 스캔 가능(특정 서명/문자열을 반복 검출할 때 유용).
예: TeamViewer 관련 단순 YARA 샘플 -
rule TeamViewer_string { strings: $a = "TeamViewer" ascii $b = "tv_w32.exe" ascii condition: $a or $b }
-
- 정적분석: procdump로 얻은 실행파일을 PE 분석(임포트 테이블, 섹션명, 리소스 등) 및 동적분석(샌드박스) 병행.
11) 사례별(노트) 요약
GrrCon 풀이 요지
- imageinfo로 OS 식별 → profile 설정.
- pslist/psscan/pstree/psxview로 프로세스 스캔 → pstree에서 teamviewer 등 의심 프로세스 발견.
- 의심 PID(예: 4064)로 memdump 실행 → dumps/4064.dmp 생성 → strings로 내부 문자열 확인.
- netscan으로 외부 연결 IP 확인 → 10.1.1.2x 형태의 IP를 공격자 의심.
- outlook 프로세스 덤프(예: PID 3196) → strings_3196.log에서 메일 원본 / 악성 링크 확인 → 악성메일로 의심.
- dumpfiles로 tv_w32.exe(teamviewer 관련 바이너리) 추출 → VirusTotal 검사(결과가 X였더라도 재검증/행위분석 권장).
- iexplorer.exe도 덤프 → 브라우징 흔적, 다운로드 URL 확인.
- 최종적으로 reader_sl.exe(또 다른 사례) 등의 악성프로세스 식별 후 procdump/memdump로 분석 → URL/통신 IP(41.168.5.140:8080) 확인 → 악성행위/통신 확인.
12) 추가/심화 분석 제안
- 타임라인(최종 보고용): 모든 타임스탬프(파일 생성/수정/프로세스 시작/네트워크 접속)를 모아 plaso/log2timeline 같은 툴로 시각적 타임라인을 구성.
- 메모리-디스크 교차검증: 디스크 이미지(또는 원본 시스템 로그)가 있으면 메모리에서 찾은 파일/URL/타임스탬프를 디스크 파일과 교차 검증.
- 프로세스 행위 분석: 메모리 덤프에서 API 호출 흔적(Import Table, 함수 포인터), 네임드 파이프, 레지스트리 키 흔적(메모리에 남아있을 수 있음) 확인.
- 메모리 내 네트워크 스트림 재조립: 가능하면 scapy나 네트워크 포렌식 도구로 메모리상 네트워크 스트림을 재구성해 C2 통신 내용 확인.
- 패턴 탐지(YARA): 알려진 악성 문자열/배너 모음으로 메모리 전체 스캔.
- 암호화/난독화 분석: 메모리에서 동적으로 복호화된 페이로드(Plaintext URL/명령)가 보이면, 해당 코드가 실제 파일로 저장되었는지 확인 및 추가 정적분석.
- 피벗 분석: 악성 IP/도메인을 기반으로 다른 관련 호스트/로그(프록시, DNS, 방화벽)에 대한 추가 조사 요청.
13) 문서/보고서 템플릿
- 개요 (사건 요약, 증거 식별자)
- 증거 보존 (원본 해시값, 취득 방법)
- 분석 환경 (Volatility 버전, profile, 사용 툴)
- 주요 발견 요약 (의심 프로세스, 공격자 IP, 추출파일 목록)
- 상세 분석
- 프로세스별(예: TeamViewer PID 4064) 덤프/발견된 문자열/행위
- 네트워크 연결(출발지→목적지, 포트, 타임스탬프)
- 추출파일(파일명, 해시, VT 결과, 의심 행위)
- 결론(침입 여부 추정, 데이터 유출 가능성 등)
- 권고(격리, 차단 IP, 추가 로그 확보, 재감사)
- 부록(명령 로그, strings 출력 일부, YARA 규칙 등)
14) 체크리스트
- 원본 덤프 해시 확인 및 기록
- imageinfo → profile 설정
- pslist/psscan/pstree/psxview 결과 스냅샷 저장
- netscan/connections/sockets 결과 저장
- 의심 PID 메모리/프로세스 덤프(memdump/procdump) 수행
- dumpfiles로 파일 핸들에서 의심 파일 추출
- strings → URL/이메일/명령어/세션 토큰 검색
- 추출물 해시 및 VirusTotal 조회
- YARA 스캔(메모리 전체)
- 타임라인 생성 및 보고서 작성
'4-1. 2025-2 심화 스터디 > 디지털 포렌식 2팀' 카테고리의 다른 글
| [25.11.28] 포포포_6주차_활동 (0) | 2025.11.28 |
|---|---|
| [25. 11. 21] 포포포_5주차_활동 (0) | 2025.11.21 |
| [2025.09.27] 포포포_3주차_활동 (0) | 2025.10.03 |
| [2025.09.20] 포포포_2주차_활동 (0) | 2025.09.26 |