[kerference] 쉽고 빠르게 시작하는 volatility plugin 개발 - 김동현(bob)

61
영남권 정보보호영재교육원 김동현 Volatility Plugin 개발 쉽고 빠르게 시작하는 HYSS 2016 / Keynote #5

Upload: naver-d2

Post on 07-Jan-2017

1.707 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

영남권 정보보호영재교육원

김동현

Volatility Plugin 개발쉽고 빠르게 시작하는

HYSS 2016 / Keynote #5

Page 2: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

저작물 인용저작권법 제 35조의 3 ‘공정이용’ 조항에 따라 교육과 연구 목적으로 이용하고 있습니다.혹시 문제가 있을 경우, [email protected] 로 연락 주시면 적절한 조치를취하겠습니다.

발표 자료 배포미숙한 부분이 존재하는 자료로써 수정 및 검토를 거친 뒤 추후 배포될 예정입니다.자료와 관련한 문의는 페이스북을 이용해주시기 바랍니다.

Page 3: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

김동현Kim Dong Hyun / Digitalis

영남권 정보보호영재교육원 장학생

Volatility Plugin - “Malcom” 개발

“Windows MBR 분석” 문서 작성

소속 없는 잉여 포렌서 / 고3

Page 4: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Step

1. 메모리포렌식및 Volatility 소개

2. Plugin 개발시작하기

3. 개발과정돌아보기

4. 결론및요약, 소소한팁

Page 5: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#시작 전에

Page 6: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

“저 C언어도 할 줄 모르는데 가능 할까요?”C알못

“걱정 마세요, 저도개발을잘못해요!”Hello World

Page 7: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

“이거 들으면 이런 플러그인 만들 수 있나요 ?”기적의 10분

공부법

“많은 삽질과경험이필요합니다.”삽질 인생

하루 만에 듣고 공부해서 멋진걸 만들어 보고 싶어.py

Page 8: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#그럼 시작해봅시다!

Page 9: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Volatility Plugin 개발

Page 10: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#Volatility가 뭐죠?

• 메모리포렌식도구

• 오픈소스, 파이썬기반

• Linux, Android 지원

Page 11: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

포렌식 관련 CTF

어디에 써먹을 수 있을까?

침해사고대응 관련 세상을 구..?

#Volatility가 뭐죠?

Page 12: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

그러니 메모리 포렌식 공부를 “아주 조금” 해봅시다.

이런 삽질할 시간에 국,영,수를 좀 했으면 …

Page 13: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#찬양하라!

필요성

• 특별한 악성코드 – 바로 메모리에 로드

• 사용자 프라이버시 – 웹 브라우저 프라이버시 모드

장점

• Window API에 의존하지 않음

• 반복적인 조사 가능

• 다양한 방식의 조사 가능

Page 14: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#우리의 폰 노이만 형

실행코드가 올라오는 메모리

구조상 메모리는 필수관문…

음그럼메모리에다있는건가?

Page 15: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#가상 메모리의 존재

그건 아니에요!

가상메모리 라는 것을

살펴봅시다.

(포너블 잘 하시는 분들은 껌)

Page 16: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#가상 메모리의 존재

다른 프로세스들 간의 눈치게임 방지

Multitasking에 유리한 구조

Page 17: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

32Bit 기준으로 너도 나도 모든 프로세스가

4GB씩 가상 메모리를 받게 됩니다!

(논리적인 형태, 용량 변경 가능)

4GB 4GB 4GB

0x0

0xffffffff

Page 18: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

이 가상 메모리에서 프로그램에서 필요한 핵심 부분은 RAM에!

그 외의 부분은 페이지파일로 저장!

Page 19: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

가상 메모리

유저 영역

2GB

커널 영역

2GB

물리적 메모리

페이지 파일

Page 20: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#중간 결론?

실제로 완벽한메모리분석을 위해서는

Page file + RAM / 그러나 연관성 크게 없음

가상 메모리를 덤프 할 수는 없고

사실 RAM만덤프해서분석해도충분.

Page 21: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

메모리 포렌식에 관심이 있다면!

Jin kook Kim

Plainbit Co.Ltd

Page 22: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Volatility Plugin 개발

Page 23: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Core Program

Plugin 1 Plugin 2

기존의 프로그램에 기반하여

새롭거나 생각지도 못한 기능을 만들어주는 파일

Page 24: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

IDA – PRO / Hexray

Page 25: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Wordpress Plugin

Page 26: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

나도 저런 거 하나 만들어보고 싶은데?

끝없는 삽질의 서막

Page 27: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#전체적인 기획 과정

1. 타 프로그램의 유용한 기능 선정• 프로세스 관련 도구 - Process Explorer

• Check Virustotal 기능

2. 유사 플러그인 탐색• Sebastien Bourdon-Richard Virustotal Plugin

• Maj3sty (이준형) Malscan Plugin

Page 28: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#전체적인 기획 과정

3. 해당 플러그인의 개선점 파악• Volatility 최신 버전에서 플러그인이 구동이 되지 않음

• 불필요한 정보 출력, 복잡한 코드

4. 해결방안 탐색 & 개발 착수• 최신 버전에 맞게 코드의 구조 및 사용 함수 검토

• 일반 사용자에게 필요한 데이터만 파싱 (Parsing)

Page 29: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

그래서 탄생했습니다!

Page 30: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Volatility Plugin 개발

Page 31: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Volatility Reference

Page 32: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
Page 33: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

구조를 알면형태가 보이고

설계가 가능하다.

Page 34: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

render_text

calculate

__init__

안해! 안한다고!

Page 35: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

“저걸 다 활용해야 하나요?”멘붕

__init__포탑 다이브

calculate

render_text

#널위한삼위일체

Page 36: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

__init__

calculate

render_text

import

그럼 살펴봅시다.

• Import – 필요 모듈

• __init__ - 옵션 지정

• calculate – 실제 연산

• render_text – 텍스트 처리

Page 37: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

import osimport sysimport shutilimport requestsimport jsonimport volatility.plugins.procdump as procdump

malcom_key = “----API-KEY------”

Page 38: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

class malcom(procdump.ProcDump):"""Process Dump & Malwares.com Scan Plugin."""

def __init__(self, config, *args, **kwargs):

procdump.ProcDump.__init__(self, config, *args, **kwargs)

config.add_option('OFFSET', short_option = 'o',default = None, help = 'EPROCESS offset (in hex)in the physical address space', action = 'store',type = 'str')

config.add_option('PID', short_option = 'p',default = None, help = 'Operate on these ProcessIDs (comma-separated)', action = 'store',type = 'str')

Page 39: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

def calculate(self):

if self._config.DUMP_DIR == None:print "\n[!] Process to dump in the current directory."self._config.DUMP_DIR = os.getcwd()

if self._config.PID != None:print "\n[+] To start a process dump.\n"result = procdump.ProcDump(self._config).execute()result2 = procdump.ProcDump.calculate(self)filepath = self._config.DUMP_DIR +"\executable.{0}.exe".format(self._config.PID)filename = "executable.{0}.exe".format(self._config.PID)copypath = self._config.DUMP_DIR + "\Volatility\plugins“+ "\executable.{0}.exe".format(self._config.PID)

shutil.copy(filepath, copypath)

print "\n[+] Copying Dump File ..."print "[-] Copy Dump File Path : " + copypath

return filename

Page 40: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

def render_text(self, outfd, data):

print "\n[+] Upload File & File Analysis ..."

params = {'api_key':malcom_key,'filename': data}files = {'file':(data,open(data,'rb'), 'application/octet-stream')}response = requests.post('https://www.malwares.com/api/v2/file/upload', files=files, data=params)json_response = response.json()

md5 = json_response["md5"]

params = {'api_key':malcom_key, 'hash':md5}response = requests.get('https://www.malwares.com/api/v2/file/mwsinfo', params=params)json_response = response.json()

result_msg = json_response["result_msg"]date = json_response["date"]md5 = json_response["md5"]sha1 = json_response["sha1"]sha256 = json_response["sha256"]

if(black_white == 1):print "[-] Black & White List : Black List"

else:print "[-] Black & White List : White List"

print "[-] File Type : " + filetypeprint "[-] File Size : " + str(filesize) + " Byte"print "\n[!] AV Scan Result : " + str(positives) + " / " + str(total)

Page 41: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#대망의 순간!

Page 42: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

python vol.py -h

Page 43: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

python vol.py –f memdump.img imageinfo

Page 44: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

python vol.py –f memdump.img –profile=Win7SP0x86 pslist

Page 45: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

python vol.py –f memdump.img –profile=Win7SP0x86 Malcom –p 2200

Page 46: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#약간의 팁?

Page 47: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

인간은망각의동물

주석을 통해 타인 및 자신의 코드를 돌아보며

공부하고, 중요한 기능은 참조해 사용하도록 하자.

Page 48: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

모방은창조의어머니

다른 플러그인을 참조해

유사한 기능을 구현해보자

Page 49: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Python

무조건 Plugin일 필요는 없다

일단 문법에 대한 숙지와 다양한

활용능력을 기르는 것이 중요하다.

EX) MRU Viewer, MBR Analyzer

Page 50: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

Blue Ocean

Linux, Mac, Android는 어떤가

Volatility도 지원하지만 상대적으로

관련된 플러그인이 많지는 않다.

Page 51: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

포기하지말자.

분명 처음이라 한번에 성공 할 수 없다.

이러한 시련 속에도 잘 참고 오류를 해결

해나가고 기능을 구현한다면

상당한 기쁨 그 이상을 보상받을 지도..

Malcom Plugin실행 횟수

53번

Page 52: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

갓들의존재

무작정 의존하고 처음부터

물어보는 것이 아닌, 정말 이해가 안 되는 부분

코드가 잘 구현이 안 되는 부분에 대해

“방향”을 제시 받자.

Page 53: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#이야기를 마치며 ..

Page 54: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#최근 진행중인 프로젝트

Volakao Plugin• 메모리 상에 존재하는 Kakao ID 및 정보 추출

• 카카오톡 PC 버전에 대한 분석 필요

HanScan Plugin• 열어둔 한글 파일에 대한 취약점 여부 스캔

• Nurilab의 HwpScan2를 참조할 예정

Page 55: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

#최근 진행중인 프로젝트

• Volatility Cookbook

부제 : 파이썬으로시작하는달콤한메모리포렌식

라이브 포렌식

윈도우 메모리 구조

Volatility 설치 및 기본 사용법

외부 플러그인 활용법

Volatility 플러그인 제작

해킹 방어 대회 - 메모리 포렌식 문제 풀이

Page 56: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

다 좋은데 …

그냥 누군가 만들어주지 않을까요?

힘들게 만들어 써야 하나요?

Page 57: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

분명 플러그인을 만드는 건 재미 있지만,

귀찮고 힘든 일이기도 합니다.

Page 58: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

하지만 조금 힘들더라도,

세상에 도움이 되는 일을 한다는 것이

정말 멋지다고 생각하지 않나요?

Page 59: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

그멋진일을마음만먹으면

누구나시작할수있답니다.

오늘부터나만의 Plugin을만들어보세요!

Page 60: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

ReferenceForensic Proof (김진국) – 메모리 분석 방안

AhnLab 보안 이슈 – ASEC 장영준 선임 연구원

윈도우 포렌식 실전 가이드 – 고원봉

Windows 구조와 원리 – 정덕영

The Art of Memory Forensic – Michael Hale Ligh

DailySecu 칼럼 – Plainbit 이준형 연구원

Page 61: [Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)

@Digitalis

감사합니다.

HYSS 2016 / Keynote #5