본문 바로가기

4-1. 2025-2 심화 스터디/디지털 포렌식 2팀

[25.11.14] 포포포_4주차_활동

GrrCon 2015 (Forensics) — 메모리 포렌식 정리 

1) 전체 분석 흐름(High-level)

  1. 증거(메모리 덤프) 확보 → 해시 계산(무결성 확보).
  2. imageinfo로 운영체제/프로파일 추정.
  3. 프로세스·네트워크·CMD·파일 관련 플러그인으로 전반 조사(pslist, psscan, pstree, psxview, netscan 등).
  4. 의심 프로세스(예: TeamViewer, outlook.exe, iexplore.exe, mstsc.exe 등) 식별 → PID 확보.
  5. 해당 PID로 메모리/실행파일/파일핸들 덤프(memdump, procdump, dumpfiles 등).
  6. 추출물(strings, hexdump, PE 검사, VirusTotal, YARA 등)로 IOC·플래그·악성행위 확인.
  7. 네트워크(네트워크 연결/소켓)로 C2/공격자 IP 추적.
  8. 타임라인 구성 및 보고서 작성.

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 풀이 요지

  1. imageinfo로 OS 식별 → profile 설정.
  2. pslist/psscan/pstree/psxview로 프로세스 스캔 → pstree에서 teamviewer 등 의심 프로세스 발견.
  3. 의심 PID(예: 4064)로 memdump 실행 → dumps/4064.dmp 생성 → strings로 내부 문자열 확인.
  4. netscan으로 외부 연결 IP 확인 → 10.1.1.2x 형태의 IP를 공격자 의심.
  5. outlook 프로세스 덤프(예: PID 3196) → strings_3196.log에서 메일 원본 / 악성 링크 확인 → 악성메일로 의심.
  6. dumpfiles로 tv_w32.exe(teamviewer 관련 바이너리) 추출 → VirusTotal 검사(결과가 X였더라도 재검증/행위분석 권장).
  7. iexplorer.exe도 덤프 → 브라우징 흔적, 다운로드 URL 확인.
  8. 최종적으로 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) 문서/보고서 템플릿

  1. 개요 (사건 요약, 증거 식별자)
  2. 증거 보존 (원본 해시값, 취득 방법)
  3. 분석 환경 (Volatility 버전, profile, 사용 툴)
  4. 주요 발견 요약 (의심 프로세스, 공격자 IP, 추출파일 목록)
  5. 상세 분석
    • 프로세스별(예: TeamViewer PID 4064) 덤프/발견된 문자열/행위
    • 네트워크 연결(출발지→목적지, 포트, 타임스탬프)
    • 추출파일(파일명, 해시, VT 결과, 의심 행위)
  6. 결론(침입 여부 추정, 데이터 유출 가능성 등)
  7. 권고(격리, 차단 IP, 추가 로그 확보, 재감사)
  8. 부록(명령 로그, strings 출력 일부, YARA 규칙 등)

14) 체크리스트

  • 원본 덤프 해시 확인 및 기록
  • imageinfo → profile 설정
  • pslist/psscan/pstree/psxview 결과 스냅샷 저장
  • netscan/connections/sockets 결과 저장
  • 의심 PID 메모리/프로세스 덤프(memdump/procdump) 수행
  • dumpfiles로 파일 핸들에서 의심 파일 추출
  • strings → URL/이메일/명령어/세션 토큰 검색
  • 추출물 해시 및 VirusTotal 조회
  • YARA 스캔(메모리 전체)
  • 타임라인 생성 및 보고서 작성