(fios#03) 1. 실전 윈도 악성코드 메모리 분석

41
FORENSIC INSIGHT; DIGITAL FORENSICS COMMUNITY IN KOREA 실전 윈도 악성코드 메모리 분석 n0fate [email protected] http://forensic.n0fate.com

Upload: insight-forensic

Post on 18-Jan-2017

98 views

Category:

Technology


10 download

TRANSCRIPT

Page 1: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

FORENSIC  INSIGHT;DIGITAL  FORENSICS  COMMUNITY  IN  KOREA

실전 윈도 악성코드 메모리 분석

n0fate

[email protected]

http://forensic.n0fate.com

Page 2: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  2

소개

§ 닉네임 : n0fate

§ 블로그 : forensic.n0fate.com

§ 개발도구

• Volafox : OS X Memory Forensic Toolkit (칼리 리눅스에서 볼 수 있어요..)

• chainbreaker : OS X Keychain Breaker

• iChainbreaker : iCloud Keychain Breaker (아직까진 비공개)

• walitean : SQLite WAL Log Parser

• 등등…

Page 3: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  3

§ 라이브 분석

• 악성코드를 빠르게 식별하기 위해 활성 상태에서 주요 아티팩트 분석

• 조기 식별에 유용하나 최근 악성코드의 대응 능력 확대

ü 라이브 분석 도구 탐지/대응 기법

ü 메모리 조작 악성코드

ü 루트킷

§ 디스크 분석

• 라이브 분석에서 발견되지 않을 경우 이미징 -> 분석

• 사전 정보가 없다면 매우 많은 시간이 소요됨

• 디스크 분석 대응 악성코드 존재

ü 디스크에 존재하지 않는 악성코드

침해 대응 시 이슈

Page 4: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  4

침해 대응 시 이슈 대안책

§ 메모리 분석

• 특정 시점의 메모리를 이미징하여 이미지에서 찾고자 하는 요소를 채취하는 기법

• 포렌식 기법을 이용하여 침해 대응 시 악성코드 분석에 활용(메모리 분석)

§ 침해 대응 시 메모리 분석의 장점

• 라이브 분석의 장점을 포함

ü 라이브 분석 시 획득하는 아티팩트 대부분 수집 가능

ü 상대적으로 높은 신뢰도

• 메모리 조작 악성코드 식별에 특화

• 안티 분석 기법 대응 가능

Page 5: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  5

메모리 분석의 효용성

수집 대상 라이브 분석 메모리 분석

프로세스 목록 O O + 삭제된 프로세스 목록

로드된 라이브러리 O O

로드된 파일 O O

네트워크 세션 목록 O O + 삭제된 세션 목록

이벤트 로그 O O

자동 실행 목록 O O(레지스트리에 한해)

서비스 목록 O O

드라이버 목록 O O

웹 브라우저 정보 O O(IE에 대해)

사용자 패스워드 해시 O O

라이브 vs 메모리

Page 6: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  6

라이브 포렌식 무용론?

§ 메모리 분석을 한다면 라이브 분석은 의미가 없을까?

• 메모리 분석은 라이브 분석에서 수집하는 대부분의 정보를 수집 가능

• 상대적으로 높은 신뢰도를 가지고 있음 (상황에 따라 다름)

§ 라이브 분석의 낮은 신뢰도가 오히려 분석에 도움을 줄 수 있음

• 신뢰된 시스템에서 수집된 라이브 분석 정보와 메모리 분석 정보는 일치

• 두 정보가 다르다면?

ü 해당 정보는 악의적인(가끔 보안적인) 목적으로 변조되었을 수 있음

ü 예) 프로세스 은닉, 네트워크 세션 은닉 등

§ 두 정보 모두 수집하여 분석 결과를 비교하면 분석 효율을 향상시킬 수 있음

Page 7: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  7

메모리 분석으로 악성요소 찾기

§ 메모리 분석을 통해 악성 요소를 효과적으로 식별 가능

• 하지만..

ü Q) 메모리 분석 도구 사용은 해봤는데 어떤 경우에 유용한지 알고 싶다.

• 그래서..

ü A) 몇몇 악성코드 기법을 메모리 분석으로 쉽게 찾아내는 사례를 알아본다.

ü A) volatility를 효과적으로 사용하는 방법을 알아본다.

§ 본 발표에서 사용할 도구 - volatility

• 뛰어난 오픈소스 메모리 포렌식 도구

ü 참고문서 : The Art of Memory Forensics

• 다양한 운영체제 제공

ü Windows, Linux, OS X, Android

Page 8: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  8

메모리 분석으로 악성 요소 찾기-­‐ 악성 프로세스 찾기

-­‐ 악성 라이브러리 찾기

-­‐ 악성 드라이버 찾기

-­‐ 악성 요소 덤프하기

Page 9: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  9

악성 요소 찾기

§ 시스템에는 대부분의 정상 요소와 소수의 악성 요소가 혼재되어 있음

• 분석가는 수많은 데이터 중에서 의심되는 요소를 식별 후 그와 관계된 추가 요소를 식별

• 문제는 악성 요소 자체를 찾는 것

§ 악성 요소는 자신이 악성 요소로 보이지 않기 위해 다양한 트릭을 사용

• 연구된 침해사고 대응 기술을 토대로 안티-대응 기법을 연구 및 반영

Page 10: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  10

악성 요소 찾기

Page 11: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  11

악성 프로세스 찾기

윈도의 프로세스 관리 구조 이해

프로세스구조체

프로세스구조체

프로세스구조체

커널 디버그(KDBG)

로딩된모듈로딩된모듈로딩된모듈

스레드스레드스레드

가상주소디스크립터(VAD)할당된 메모리페이지 주소페이지 권한등을 다룸

핸들 테이블프로세스가 접근하는자원(파일,����������� ������������������  모듈 등의핸들 정보를저장

프로세스 토큰프로세스의 자원접근제어에 사용

Page 12: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  12

악성 프로세스 찾기

§ 프로세스 탐지를 회피하기 위한 가장 효과적인 방법

• 커널 레벨 루트킷을 이용하여 객체를 변조하는 방법

• 라이브 포렌식 무력화

§ 지속적인 창과 방패의 싸움

• 방패는 은닉 기법을 분석하여 이를 탐지하기 위한 기술을 개발

• 창은 탐지 기술을 분석하여 새로운 은닉 기법을 연구

은닉된 프로세스 찾기

프로세스구조체

프로세스구조체

프로세스구조체

커널 디버그(KDBG)

Page 13: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  13

악성 프로세스 찾기

§ 메모리 분석은 최고의 안티 루트킷 기법

• 다양한 분석 기법이 존재

• But, 분석에 많은 내공을 필요하게 구성

§ 볼라틸리티에서 제공되는 분석 기법

• 프로세스 객체 검색(psscan) – 프로세스 객체에 있는 풀 태그를 이용하여 수집

• 스레드 스캔(thrdproc) – 스레드(ETHREAD) 객체를 이용하여 프로세스를 추적

• CSRSS 핸들 테이블(csrss) – 모든 프로세스와 스레드 생성을 관리하는 csrss.exe 이용

• PspCid 테이블(pspcid) – PspCidTable로 모든 프로세스 핸들 수집

• 세션 프로세스(session) – 현재 세션의 프로세스 수집

• 데스크탑 스레드(deskthrd) – 윈도 데스크탑에 연결된 모든 스레드 목록을 수집

은닉된 프로세스 찾기

Page 14: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  14

악성 프로세스 찾기

§ 일단 psxview 명령어를 실행한다.

§ 규칙

• 모든 것이 True인 프로세스는 은닉된 게 아니다.

• 예외

ü system - csrss, session, deskthrd가 False

ü smss.exe - csrss, session, deskthrd가 False

ü csrss.exe - csrss가 False

ü -R(--apply-rules) 옵션으로 처리 가능

• 종료된 프로세스(ExitTime이 존재)는 일반적으로 psscan에서만 True

ü 단, 종료 후, 커널 객체 소멸 이전에 덤프한 경우 pslist, thrdproc도 True인 경우가 있음

ü 루트킷이 ExitTime을 0으로 변경한 경우를 유의

프로세스 분석(psxview) – 쉽게 이해하자

Page 15: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  15

악성 프로세스 선정

사례) 프로세스 은닉 (plasco)

ExitTime이 존재

비정상(pslist에서만 False)

정상(예외 규칙에맞게표시)

Page 16: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  16

악성 프로세스 찾기

§ 접근 토큰(Access Token)

• 프로세스/스레드가 구동 중에 필요한 다양한 권한을 가지기 위한 정보

• 자원 접근 제어에 사용

ü 특정 객체에 접근하거나 API 호출 시 프로세스 토큰 정보로 권한 검사 수행

• 접근 토큰에는 보안 식별 디스크립터(SID)와 사용자 계정의 권한이 정의

§ 메모리 분석 시 활용 분야

• 프로세스 토큰에 저장되는 SID를 이용한 사용자 권한 확인

• Lateral Movement 확인

• 프로세스 행위 유추

• 권한 상승 검증

할당된 접근 토큰을 이용한 식별

Page 17: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  17

악성 프로세스 찾기

§ 정상 프로세스/스레드에서 사용하진 않지만 악성코드가 주로 사용하는 토큰이 존재

• 프로세스/스레드에 부여된 토큰의 권한(privilege) 정보를 통해 악성 여부 판단

§ 악성코드가 주로 사용하는 권한

• SeDebugPrivilege – 권한이 없는 시스템 프로세스의 메모리 접근 가능

• SeTakeOwnershipPrivilege – 특정 객체에 대한 소유주를 변경

• SeLoadDriverPrivilege – 디바이스 드라이버 로드 권한

§ Windows 7 이후 운영체제에선 사용 제한적

• Session 0 Isolation

• 하지만 우회 기법도 연구되고 있음 J

§ 볼라틸리티에선 ‘privs’ 플러그인으로 분석 가능

할당된 프로세스 토큰을 이용한 식별

Page 18: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  18

악성 프로세스 찾기

사례) 권한 확인을 통한 코드 인젝션 탐지

권한 확인

코드 인젝션 확인

-s 옵션 : 주의해야할 Privilege만선별하여 표현

Page 19: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  19

악성 프로세스 찾기

§ 특정 프로세스의 메모리 영역에 코드를 삽입하는 방법

• 다른 프로세스에 기생하여 자기자신을 은닉

• 코드만 삽입하므로 프로세스나 라이브러리에 나타나지 않음

§ 메모리 조작으로 악성코드를 분석해야만 행위를 파악할 수 있음

§ 사례 분석

• 프로세스 교체(Process Hollowing aka Process Replacement)

• DLL 인젝션(악성 라이브러리 찾기)

코드 인젝션

Page 20: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  20

악성 프로세스 찾기 – 코드 인젝션

디스크 분석 vs 메모리 분석

대상 선정

코드 인젝션인지

인젝션된코드 식별

인젝션 페이지 식별, 인젝션 대상 식별

분석

코드 덤프인젝션

범위 식별

메모리 분석

분석

디스크 분석

Page 21: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  21

악성 프로세스 찾기

§ 코드 서명된 프로그램을 화이트리스트로 처리

• 코드 서명 : PE 파일의 변조 여부를 판단하기 위한 디지털 서명

• 디지털 서명된 프로그램은 바이너리 조작 시 실행 불가

ü 실행파일 로드 시점에 디지털 서명을 검증

§ 메모리에서 조작한다면?

• 신뢰된 프로세스가 로드된 후에 할당된 메모리 변조 가능

• 악성코드가 서명된 실행 파일의 코드가 실행되기 전에 코드를 변경하면 악의적 행위 가능

ü 디지털 서명된 프로세스도 더이상 신뢰할 수 없다.

프로세스 교체

Page 22: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  22

악성 프로세스 찾기

프로세스 교체 방법

프로세스메모리

페이로드

코드영역

데이터영역

스택/힙

PAGE_EXECUTE_READ

PAGE_READ

PAGE_READWRITE

2.����������� ������������������  코드 시작지점 식별

코드영역(PAGE_EXECUTE_READWRITE)

3.����������� ������������������  VirtualAlloc->����������� ������������������  WriteProcessMemory

4.����������� ������������������  덮어 씌움

5.����������� ������������������  실행!1.����������� ������������������  신뢰된 프로세스를Suspended����������� ������������������  상태로로드

Page 23: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  23

악성 프로세스 찾기

§ 디스크 및 라이브 분석 시 악성코드 직접 분석 필요

• 메모리에서만 변조가 이루어짐.

§ VAD의 보호 페이지 속성 정보를 확인하여 식별 가능

• VAD(Virtual Address Descriptor) : 프로세스의 할당된 메모리 페이지를 관리

• 메모리 페이지 속성 정보를 분석하면 악성 페이지를 식별할 수 있음

프로세스 교체 분석 방법

http://www.codemachine.com/figures/figure_protopte_2.png

Page 24: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  24

악성 프로세스 찾기

§ malfind 플러그인의 탐지 방법

• VAD 타입이 __MMVAD_SHORT(VadS)인지 확인

ü 정상적인 경우 _MMVAD 또는 _MMVAD_LONG 타입

• 보호 속성이 PAGE_EXECUTE_READWRITE인지 확인

ü 정상적인 경우 3가지 속성을 다 가지지 않음

§ 두 속성에 해당하는 페이지를 추출 (사례 – EvilBunny)

프로세스 교체 분석 방법

Page 25: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  25

악성 프로세스 찾기

§ 메모리 분석을 방해하기 위해 PE헤더 제거

• PE 헤더는 메모리에 로드된 후에는 필요 없음

ü 1페이지 정도(4096바이트)의 헤더 정보를 제거함으로 분석을 까다롭게 함.

• malfind에서는 의심되는 페이지로 추출 가능

§ 두 속성에 해당하는 페이지를 추출 (사례 – Casper)

프로세스 교체 분석 방법

Page 26: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  26

악성 라이브러리 찾기

§ DLL 형태로 구성하여 프로세스에 로드되어 동작

• 프로세스 형태로 노출 시 감지 위험이 높음

• 다양한 실행 파일에 코드를 인젝션하고자 할 때 활용

§ DLL 인젝션 시, 분석 시점에는 악성 프로세스는 존재하지 않는 경우가 많음

• 악성 프로세스는 DLL을 인젝션 후 자기자신을 종료

• 단순히 DLL을 인젝션하는 기능만 내장

ü 보안 솔루션에서 감지하기 어려움

• 각 프로세스가 로드한 라이브러리 정보를 수집하여 의심가는 파일을 추출

§ 악성 프로세스 찾는 과정에서 선별한 프로세스가 주요 대상

• 악성 프로세스로 분류되었으나 프로세스 자체는 정상인 경우를 중심으로 진행

Page 27: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  27

악성 라이브러리 찾기

§ 로드된 라이브러리 목록 수집(dlllist)

• 수많은 로드된 라이브러리 전체를 전시

• 언로드되었지만 메모리에 맵핑 상태인 라이브러리는 확인 불가

• 비정상적인 방법으로 로딩되는 라이브러리 확인 불가

§ 프로세스에 맵핑된 파일 중 라이브러리만 추출(ldrmodules)

• 파일 중 DLL을 목록화하여 출력

ü 프로세스의 가상 주소 디스크립터(VAD)를 이용하여 맵핑된 파일을 찾음

• 언로드되더라도 IAT로 가리키는 메모리 페이지를 소유하는 DLL 감지

• 로드/메모리 맵핑된 모든 DLL 식별 가능

라이브러리 목록 수집

Page 28: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  28

악성 라이브러리 찾기

§ 프로세스의 IAT, EAT, 인라인 후킹 수행

• 프로세스의 행위 모니터링/변조 목적으로 사용

• 분석 방법

ü apihooks 플러그인으로 IAT, EAT, 인라인 후킹된 프로세스 식별하여 분석(사례 : Zeus)

§ DLL 인젝션

• 특정 프로세스의 메모리 영역을 할당받아 로드할 DLL의 이름을 기록(PAGE_READWRITE)

• LoadLibrary 함수를 스레드 형태로 실행하면 해당 프로세스에 동적으로 DLL이 로딩

• malfind 플러그인으로 식별 안됨 <- PAGE에 실행권한이 없음

• 분석 방법

ü threads 플러그인으로 다른 스레드와 다른 시간에 구동된 스레드 확인(프로세스 생성 시간과 비교)

ü 해당 프로세스에서 로드한 모듈을 dlllist 플러그인으로 식별

악성 라이브러리 분석 방법

Page 29: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  29

악성 라이브러리 찾기

사례) DLL 인젝션 (Shadowbot)

Memory

Allocated  Memory

Process  Memory

Kernel32.dll

User32.dll

1. 프로세스 로딩디버깅 권한 설정

2. 메모리 할당(VirtualAlloc) – PAGE_READWRITE코드 작성(WriteProcessMemory) – DLL 경로스레드 실행(CreateRemoteThread) – LoadLibrary 주소

3. LoadLibrary함수 호출

Malicious  DLL

4. 악성 DLL 로드

Page 30: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  30

악성 라이브러리 찾기

§ 공격자가 서비스나 라이브러리를 실행하는 경우..

• 프로세스 로드 시 입력된 커맨드 명령어 수집 필요

• Regsvr32.exe나 svchost.exe와 같이 다른 객체(서비스, 라이브러리)를 로드하는 프로세스의 실행

인자 파악에 유용

• cmdline 플러그인을 이용하여 수집

§ 사례) cmdline 플러그인으로 regsvr32.exe의 인자 파악 (babar)

명령줄 분석

/s����������� ������������������  :����������� ������������������  메시지 상자 표시안함/i����������� ������������������  :����������� ������������������  DLLInstall����������� ������������������  함수 호출/n����������� ������������������  :����������� ������������������  DllRegisterServer����������� ������������������  함수 호출안함

Page 31: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  31

악성 디바이스 드라이버 찾기

§ 커널 레벨에서 동작

• 커널의 리소스를 자유자재로 수정 가능

• 윈도에서 드라이버를 로드하려면 서비스 형태로 동작 (svcscan 플러그인 활용 가능)

• 악성 디바이스 드라이버의 대부분은 루트킷으로 봐도 됨

§ EXE/DLL에 비해 높은 위험도를 가짐

• 커널 레벨 접근은 안정성을 보장할 수 없음.

ü 커널 충돌 발생 시 바로 블루스크린 발생

• 디바이스 드라이버에서만 할 수 있는 일을 수행

ü 특정 개체(프로세스, 파일, 레지스트리 등)를 은닉에 주로 사용

ü 특정 정보를 올바른 것처럼 보이게 만들어 분석가가 잘못된 판단을 하도록 함

§ 기존 포렌식 기법으로 조기 탐지 불가

• 은닉을 위해 동적으로 메모리를 조작하므로, 디스크에는 은닉 흔적이 없음

Page 32: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  32

악성 디바이스 드라이버 찾기

예) 커널 함수 테이블 조작

커널

커널 함수 A

라이브러리

커널 함수 B

애플리케이션 애플리케이션 애플리케이션

커널 레벨

유저 레벨변조된결과 전달

Page 33: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  33

악성 디바이스 드라이버 찾기

§ 프로세스 은닉 탐지

• Psscan – 프로세스 구조체를 패턴 기반으로 수집

• Psxview 플러그인 – 6가지 방법으로 프로세스 구조체 목록을 수집하여 전시

§ 네트워크 세션 은닉

• connscan - 네트워크에 세션 정보를 가지는 구조체를 패턴 기반으로 수집

§ 커널 함수 테이블 은닉

• 커널 함수 포인터를 조작하는 루트킷을 감지하는 기술

• ssdt – 시스템 서비스 디스크립터 테이블을 분석하여 변조된 함수를 판단

• Idt – 인터럽트 디스크립터 테이블을 분석하여 변조된 함수를 판단

• gdt – 전역 디스크립터 테이블을 분석

커널 레벨 은닉 탐지 플러그인

Page 34: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  34

악성 디바이스 드라이버 찾기

§ SSDT 후킹 확인(ssdt)

• 디바이스 드라이버 통신, 레지스트리 및 파일 관리 함수 후킹

§ 드라이버 덤프(moddump)

• 대부분 덤프하면 온전한 바이너리 획득 가능

ü 대부분 루트킷 드라이버는 페이지 아웃되지 않도록 함

ü 커널 함수 후킹 시 페이지 아웃되면 블루스크린 발생

사례) SSDT 후킹 감지 (DFIRCON 2014)

Page 35: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  35

악성 요소 덤프하기

§ 메모리에 있는 프로세스를 정적분석할 수 있도록 덤프하는 방법

• 각 프로세스 별로 B-Tree 형태로 관리(VAD)되는 메모리 페이지를 조립하여 바이너리 생성

• 페이징되지 않은 메모리 영역만 덤프할 수 있음

ü 필요성이 낮아 페이징된 메모리는 덤프하지 못함

ü 단, 일부 도구의 경우 페이지 파일을 분석하여 페이징된 메모리도 덤프하는 기능 제공

§ PE 파일 덤프엔 다음과 같은 명령어 사용

• procdump – 프로세스를 EXE 파일 형태로 덤프하는 플러그인

• dlldump – 로드된 라이브러리를 DLL 파일 형태로 덤프하는 플러그인

• moddump – 로드된 디바이스 드라이버를 sys 파일 형태로 덤프하는 플러그인

§ 팩킹된 바이너리의 경우 언패킹된 코드 획득 가능

Page 36: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  36

악성 요소 덤프하기

예) 패킹된 바이너리 추출

바이너리

코드

데이터

바이너리

압축된바이너리

언팩코드

바이너리

언팩코드

코드

데이터

언팩코드 추가

기존 코드/데이터압축

패킹할실행파일

패킹한실행파일

메모리에서언팩된실행파일

추출

Page 37: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  37

악성 요소 덤프하기

§ 심볼 정보가 제거되어 있을 수 있음

• 동작 후 어느정도 시간이 흐르면 심볼 정보를 가지는 테이블이 제거

• 분석 시 심볼 정보를 확인할 수 없어서 분석 지연

• 방안 : impscan 플러그인으로 라이브러리 함수 주소에 해당하는 심볼 명 확인 가능

§ DLL의 경우 베이스 주소 변경(Relocation)으로 분석에 영향을 미칠 수 있음

• 방안 : PE파일의 Optional Header의 EntryPoint를 덤프하는 DLL의 메모리 상 베이스 주소로 변경

• --fix 옵션 사용

§ 가상주소와 물리주소간의 차이 보정

§ 방안 : PE 파일의 섹션 헤더의 주소 값을 가상주소와 일치되게 변경

§ --memory 옵션 사용

복원된 EXE/DLL 분석 시 이슈

Page 38: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  38

악성 요소 덤프하기

§ 커널 후킹 함수 빠르게 식별

• ssdt, idt와 같은 커널 함수 후킹 탐지 플러그인으로 함수 식별

• 후킹된 함수가 가리키는 주소로 커널후킹 함수 파악

§ 심볼 정보가 제거

• 커널 메모리는 성능 목적으로 항상 사용하는 페이지(Non-Paged) 영역을 제외하곤페이지 아웃

• 로드 타임에 커널 함수와 주소 매핑 후 심볼 정보가 제거

• 방안 : impscan 플러그인으로 심볼 확인

§ 베이스 주소 변경

• 커널 드라이버는 무조건 주소가 변경되어 있음

• 덤프 후 이미지베이스를 변경하거나, 덤프 시 --fix 옵션으로 해결

복원된 SYS 분석 시 이슈

Page 39: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  39

결론

Page 40: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  40

결론

§ 메모리 분석. 이제는 제대로 활용할 때!

• 5년 전부터 중요하다고 했는데 요즘에서야 관심을 가지는 것 같아요..

• 운영체제 상관없이 메모리 포렌식은 필수 항목

§ 실제 경험이 중요하다!

• 메모리 만으로 뽑아낼 수 있는 정보의 한계치를 확인

• Grrcon, DFIRCON 2014의 메모리 이미지 분석 챌린지를 추천

§ 이 발표 내용 외에도 다양한 분야에 활용 가능

• 암호화된 키 또는 사용자 패스워드 추출

• 접근했던 웹 페이지 캐시 추출

• 암호화된 패스워드 셋 추출 및 패스워드 복호화 가능

ü https://gist.github.com/n0fate/790428d408d54b910956

Page 41: (Fios#03) 1. 실전 윈도 악성코드 메모리 분석

forensicinsight.org Page  41

Question and Answer