[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발

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

    -
  • Category

    Software

  • view

    1.024
  • download

    2

Transcript of [HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발

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

김동현

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

HYSS 2016 / Keynote #5

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

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

김동현Kim Dong Hyun / Digitalis

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

Volatility Plugin - “Malcom” 개발

“Windows MBR 분석” 문서 작성

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

Step

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

2. Plugin 개발시작하기

3. 개발과정돌아보기

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

#시작 전에

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

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

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

공부법

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

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

#그럼 시작해봅시다!

Volatility Plugin 개발

#Volatility가 뭐죠?

• 메모리포렌식도구

• 오픈소스, 파이썬기반

• Linux, Android 지원

포렌식 관련 CTF

어디에 써먹을 수 있을까?

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

#Volatility가 뭐죠?

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

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

#찬양하라!

필요성

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

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

장점

• Window API에 의존하지 않음

• 반복적인 조사 가능

• 다양한 방식의 조사 가능

#우리의 폰 노이만 형

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

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

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

#가상 메모리의 존재

그건 아니에요!

가상메모리 라는 것을

살펴봅시다.

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

#가상 메모리의 존재

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

Multitasking에 유리한 구조

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

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

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

4GB 4GB 4GB

0x0

0xffffffff

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

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

가상 메모리

유저 영역

2GB

커널 영역

2GB

물리적 메모리

페이지 파일

#중간 결론?

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

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

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

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

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

Jin kook Kim

Plainbit Co.Ltd

Volatility Plugin 개발

Core Program

Plugin 1 Plugin 2

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

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

IDA – PRO / Hexray

Wordpress Plugin

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

끝없는 삽질의 서막

#전체적인 기획 과정

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

• Check Virustotal 기능

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

• Maj3sty (이준형) Malscan Plugin

#전체적인 기획 과정

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

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

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

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

그래서 탄생했습니다!

Volatility Plugin 개발

Volatility Reference

구조를 알면형태가 보이고

설계가 가능하다.

render_text

calculate

__init__

안해! 안한다고!

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

__init__포탑 다이브

calculate

render_text

#널위한삼위일체

__init__

calculate

render_text

import

그럼 살펴봅시다.

• Import – 필요 모듈

• __init__ - 옵션 지정

• calculate – 실제 연산

• render_text – 텍스트 처리

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

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

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')

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

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)

#대망의 순간!

python vol.py -h

python vol.py –f memdump.img imageinfo

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

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

#약간의 팁?

인간은망각의동물

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

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

모방은창조의어머니

다른 플러그인을 참조해

유사한 기능을 구현해보자

Python

무조건 Plugin일 필요는 없다

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

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

EX) MRU Viewer, MBR Analyzer

Blue Ocean

Linux, Mac, Android는 어떤가

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

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

포기하지말자.

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

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

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

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

Malcom Plugin실행 횟수

53번

갓들의존재

무작정 의존하고 처음부터

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

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

“방향”을 제시 받자.

#이야기를 마치며 ..

#최근 진행중인 프로젝트

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

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

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

• Nurilab의 HwpScan2를 참조할 예정

#최근 진행중인 프로젝트

• Volatility Cookbook

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

라이브 포렌식

윈도우 메모리 구조

Volatility 설치 및 기본 사용법

외부 플러그인 활용법

Volatility 플러그인 제작

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

다 좋은데 …

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

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

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

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

하지만 조금 힘들더라도,

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

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

그멋진일을마음만먹으면

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

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

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

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

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

Windows 구조와 원리 – 정덕영

The Art of Memory Forensic – Michael Hale Ligh

DailySecu 칼럼 – Plainbit 이준형 연구원

@Digitalis

감사합니다.

HYSS 2016 / Keynote #5