SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
영남권 정보보호영재교육원
김 동 현
Volatility Plugin 개발
쉽고 빠르게 시작하는
HYSS 2016 / Keynote #5
저작물 인용
저작권법 제 35조의 3 ‘공정이용’ 조항에 따라 교육과 연구 목적으로 이용하고 있습니다.
혹시 문제가 있을 경우, ehdgus9549@smartksia.org 로 연락 주시면 적절한 조치를
취하겠습니다.
발표 자료 배포
미숙한 부분이 존재하는 자료로써 수정 및 검토를 거친 뒤 추후 배포될 예정입니다.
자료와 관련한 문의는 페이스북을 이용해주시기 바랍니다.
김동현
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 os
import sys
import shutil
import requests
import json
import 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 Process
IDs (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 + "Volatilityplugins“
+ "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 : " + filetype
print "[-] 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을 만들어보세요!
Reference
Forensic Proof (김진국) – 메모리 분석 방안
AhnLab 보안 이슈 – ASEC 장영준 선임 연구원
윈도우 포렌식 실전 가이드 – 고원봉
Windows 구조와 원리 – 정덕영
The Art of Memory Forensic – Michael Hale Ligh
DailySecu 칼럼 – Plainbit 이준형 연구원
@Digitalis
감사합니다.
HYSS 2016 / Keynote #5

Mais conteúdo relacionado

Mais procurados

김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
성훈 김
 
오픈소스소프트웨어 최종프로젝트 발표자료_201716366_김연영
오픈소스소프트웨어 최종프로젝트 발표자료_201716366_김연영오픈소스소프트웨어 최종프로젝트 발표자료_201716366_김연영
오픈소스소프트웨어 최종프로젝트 발표자료_201716366_김연영
ssusera234a4
 
111 n grinder-deview_day1_track1_session_1_ver_2
111 n grinder-deview_day1_track1_session_1_ver_2111 n grinder-deview_day1_track1_session_1_ver_2
111 n grinder-deview_day1_track1_session_1_ver_2
NAVER D2
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
NAVER D2
 

Mais procurados (20)

bof기초+rtl+fake_ebp
bof기초+rtl+fake_ebpbof기초+rtl+fake_ebp
bof기초+rtl+fake_ebp
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
 
2017 새싹교실 1교시
2017 새싹교실 1교시2017 새싹교실 1교시
2017 새싹교실 1교시
 
2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
 
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
 
[스프링 캠프 2014] 내가 파이썬을 선택한 이유
[스프링 캠프 2014] 내가 파이썬을 선택한 이유[스프링 캠프 2014] 내가 파이썬을 선택한 이유
[스프링 캠프 2014] 내가 파이썬을 선택한 이유
 
12 1 예외처리(try-except)
12 1 예외처리(try-except)12 1 예외처리(try-except)
12 1 예외처리(try-except)
 
[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)
 
오픈소스소프트웨어 최종프로젝트 발표자료_201716366_김연영
오픈소스소프트웨어 최종프로젝트 발표자료_201716366_김연영오픈소스소프트웨어 최종프로젝트 발표자료_201716366_김연영
오픈소스소프트웨어 최종프로젝트 발표자료_201716366_김연영
 
Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
 
2.악성코드와 분석 방안
2.악성코드와 분석 방안2.악성코드와 분석 방안
2.악성코드와 분석 방안
 
111 n grinder-deview_day1_track1_session_1_ver_2
111 n grinder-deview_day1_track1_session_1_ver_2111 n grinder-deview_day1_track1_session_1_ver_2
111 n grinder-deview_day1_track1_session_1_ver_2
 
라즈베리파이로 슬랙 봇 개발하기
라즈베리파이로 슬랙 봇 개발하기라즈베리파이로 슬랙 봇 개발하기
라즈베리파이로 슬랙 봇 개발하기
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
 
01_2_파이썬설치
01_2_파이썬설치 01_2_파이썬설치
01_2_파이썬설치
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 

Destaque

Destaque (17)

Memory forensics with volatility
Memory forensics with volatilityMemory forensics with volatility
Memory forensics with volatility
 
Steam works artifact
Steam works artifactSteam works artifact
Steam works artifact
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
 
Ubuntu에서 Flask개발 맛보기 - 1
Ubuntu에서  Flask개발 맛보기 - 1Ubuntu에서  Flask개발 맛보기 - 1
Ubuntu에서 Flask개발 맛보기 - 1
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
NDC 2015 박주은,최재혁 물리기반렌더링 지난1년간의 경험
NDC 2015 박주은,최재혁 물리기반렌더링 지난1년간의 경험NDC 2015 박주은,최재혁 물리기반렌더링 지난1년간의 경험
NDC 2015 박주은,최재혁 물리기반렌더링 지난1년간의 경험
 
2010년 상반기 보안 위협 동향과 주요 보안 위협
2010년 상반기 보안 위협 동향과 주요 보안 위협2010년 상반기 보안 위협 동향과 주요 보안 위협
2010년 상반기 보안 위협 동향과 주요 보안 위협
 
SNS 보안 위협 사례
SNS 보안 위협 사례SNS 보안 위협 사례
SNS 보안 위협 사례
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
보안 위협 동향과 대응 방안
보안 위협 동향과 대응 방안보안 위협 동향과 대응 방안
보안 위협 동향과 대응 방안
 
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
 
[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)
 
[Kerference] Nefarious SQL - 김동호(KERT)
[Kerference] Nefarious SQL - 김동호(KERT)[Kerference] Nefarious SQL - 김동호(KERT)
[Kerference] Nefarious SQL - 김동호(KERT)
 
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
 
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
 

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

『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
복연 이
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
Youngmin Koo
 

Semelhante a [HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발 (20)

[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
In c
In cIn c
In c
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
16 학술제 마무리 자료
16 학술제 마무리 자료16 학술제 마무리 자료
16 학술제 마무리 자료
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
 
졸업후 취업까지.ssul
졸업후 취업까지.ssul졸업후 취업까지.ssul
졸업후 취업까지.ssul
 
『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기
 
Native A/V
Native A/VNative A/V
Native A/V
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼
 
실용주의 프로그래머를 위한 개발환경 만들기
실용주의 프로그래머를 위한 개발환경 만들기실용주의 프로그래머를 위한 개발환경 만들기
실용주의 프로그래머를 위한 개발환경 만들기
 
데이터분석의 길 2: “고수는 최고의 연장을 사용한다” (툴채인)
데이터분석의 길 2:  “고수는 최고의 연장을 사용한다” (툴채인)데이터분석의 길 2:  “고수는 최고의 연장을 사용한다” (툴채인)
데이터분석의 길 2: “고수는 최고의 연장을 사용한다” (툴채인)
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
2020년 3월 7일 개발 이야기 정리
2020년 3월 7일 개발 이야기 정리2020년 3월 7일 개발 이야기 정리
2020년 3월 7일 개발 이야기 정리
 
하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr
 

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

  • 1. 영남권 정보보호영재교육원 김 동 현 Volatility Plugin 개발 쉽고 빠르게 시작하는 HYSS 2016 / Keynote #5
  • 2. 저작물 인용 저작권법 제 35조의 3 ‘공정이용’ 조항에 따라 교육과 연구 목적으로 이용하고 있습니다. 혹시 문제가 있을 경우, ehdgus9549@smartksia.org 로 연락 주시면 적절한 조치를 취하겠습니다. 발표 자료 배포 미숙한 부분이 존재하는 자료로써 수정 및 검토를 거친 뒤 추후 배포될 예정입니다. 자료와 관련한 문의는 페이스북을 이용해주시기 바랍니다.
  • 3. 김동현 Kim Dong Hyun / Digitalis 영남권 정보보호영재교육원 장학생 Volatility Plugin - “Malcom” 개발 “Windows MBR 분석” 문서 작성 소속 없는 잉여 포렌서 / 고3
  • 4. Step 1. 메모리 포렌식 및 Volatility 소개 2. Plugin 개발 시작하기 3. 개발 과정 돌아보기 4. 결론 및 요약, 소소한 팁
  • 6. “저 C언어도 할 줄 모르는데 가능 할까요?” C알못 “걱정 마세요, 저도 개발을 잘 못해요!” Hello World
  • 7. “이거 들으면 이런 플러그인 만들 수 있나요 ?” 기적의 10분 공부법 “많은 삽질과 경험이 필요합니다.” 삽질 인생 하루 만에 듣고 공부해서 멋진걸 만들어 보고 싶어.py
  • 10. #Volatility가 뭐죠? • 메모리 포렌식 도구 • 오픈 소스, 파이썬 기반 • Linux, Android 지원
  • 11. 포렌식 관련 CTF 어디에 써먹을 수 있을까? 침해사고대응 관련 세상을 구..? #Volatility가 뭐죠?
  • 12. 그러니 메모리 포렌식 공부를 “아주 조금” 해봅시다. 이런 삽질할 시간에 국,영,수를 좀 했으면 …
  • 13. #찬양하라! 필요성 • 특별한 악성코드 – 바로 메모리에 로드 • 사용자 프라이버시 – 웹 브라우저 프라이버시 모드 장점 • Window API에 의존하지 않음 • 반복적인 조사 가능 • 다양한 방식의 조사 가능
  • 14. #우리의 폰 노이만 형 실행코드가 올라오는 메모리 구조상 메모리는 필수관문… 음 그럼 메모리에 다 있는 건가?
  • 15. #가상 메모리의 존재 그건 아니에요! 가상 메모리 라는 것을 살펴봅시다. (포너블 잘 하시는 분들은 껌)
  • 16. #가상 메모리의 존재 다른 프로세스들 간의 눈치게임 방지 Multitasking에 유리한 구조
  • 17. 32Bit 기준으로 너도 나도 모든 프로세스가 4GB씩 가상 메모리를 받게 됩니다! (논리적인 형태, 용량 변경 가능) 4GB 4GB 4GB 0x0 0xffffffff
  • 18. 이 가상 메모리에서 프로그램에서 필요한 핵심 부분은 RAM에! 그 외의 부분은 페이지 파일로 저장!
  • 19. 가상 메모리 유저 영역 2GB 커널 영역 2GB 물리적 메모리 페이지 파일
  • 20. #중간 결론? 실제로 완벽한 메모리 분석을 위해서는 Page file + RAM / 그러나 연관성 크게 없음 가상 메모리를 덤프 할 수는 없고 사실 RAM만 덤프 해서 분석해도 충분.
  • 21. 메모리 포렌식에 관심이 있다면! Jin kook Kim Plainbit Co.Ltd
  • 23. Core Program Plugin 1 Plugin 2 기존의 프로그램에 기반하여 새롭거나 생각지도 못한 기능을 만들어주는 파일
  • 24. IDA – PRO / Hexray
  • 26. 나도 저런 거 하나 만들어보고 싶은데? 끝없는 삽질의 서막
  • 27. #전체적인 기획 과정 1. 타 프로그램의 유용한 기능 선정 • 프로세스 관련 도구 - Process Explorer • Check Virustotal 기능 2. 유사 플러그인 탐색 • Sebastien Bourdon-Richard Virustotal Plugin • Maj3sty (이준형) Malscan Plugin
  • 28. #전체적인 기획 과정 3. 해당 플러그인의 개선점 파악 • Volatility 최신 버전에서 플러그인이 구동이 되지 않음 • 불필요한 정보 출력, 복잡한 코드 4. 해결방안 탐색 & 개발 착수 • 최신 버전에 맞게 코드의 구조 및 사용 함수 검토 • 일반 사용자에게 필요한 데이터만 파싱 (Parsing)
  • 32.
  • 35. “저걸 다 활용해야 하나요?” 멘붕 __init__ 포탑 다이브 calculate render_text #널 위한 삼위일체
  • 36. __init__ calculate render_text import 그럼 살펴봅시다. • Import – 필요 모듈 • __init__ - 옵션 지정 • calculate – 실제 연산 • render_text – 텍스트 처리
  • 37. import os import sys import shutil import requests import json import volatility.plugins.procdump as procdump malcom_key = “----API-KEY------”
  • 38. 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 Process IDs (comma-separated)', action = 'store', type = 'str')
  • 39. 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 + "Volatilityplugins“ + "executable.{0}.exe".format(self._config.PID) shutil.copy(filepath, copypath) print "n[+] Copying Dump File ..." print "[-] Copy Dump File Path : " + copypath return filename
  • 40. 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 : " + filetype print "[-] File Size : " + str(filesize) + " Byte" print "n[!] AV Scan Result : " + str(positives) + " / " + str(total)
  • 43. python vol.py –f memdump.img imageinfo
  • 44. python vol.py –f memdump.img –profile=Win7SP0x86 pslist
  • 45. python vol.py –f memdump.img –profile=Win7SP0x86 Malcom –p 2200
  • 47. 인간은 망각의 동물 주석을 통해 타인 및 자신의 코드를 돌아보며 공부하고, 중요한 기능은 참조해 사용하도록 하자.
  • 48. 모방은 창조의 어머니 다른 플러그인을 참조해 유사한 기능을 구현해보자
  • 49. Python 무조건 Plugin일 필요는 없다 일단 문법에 대한 숙지와 다양한 활용능력을 기르는 것이 중요하다. EX) MRU Viewer, MBR Analyzer
  • 50. Blue Ocean Linux, Mac, Android는 어떤가 Volatility도 지원하지만 상대적으로 관련된 플러그인이 많지는 않다.
  • 51. 포기하지 말자. 분명 처음이라 한번에 성공 할 수 없다. 이러한 시련 속에도 잘 참고 오류를 해결 해나가고 기능을 구현한다면 상당한 기쁨 그 이상을 보상받을 지도.. Malcom Plugin 실행 횟수 53번
  • 52. 갓들의 존재 무작정 의존하고 처음부터 물어보는 것이 아닌, 정말 이해가 안 되는 부분 코드가 잘 구현이 안 되는 부분에 대해 “방향”을 제시 받자.
  • 54. #최근 진행중인 프로젝트 Volakao Plugin • 메모리 상에 존재하는 Kakao ID 및 정보 추출 • 카카오톡 PC 버전에 대한 분석 필요 HanScan Plugin • 열어둔 한글 파일에 대한 취약점 여부 스캔 • Nurilab의 HwpScan2를 참조할 예정
  • 55. #최근 진행중인 프로젝트 • Volatility Cookbook 부제 : 파이썬으로 시작하는 달콤한 메모리 포렌식 라이브 포렌식 윈도우 메모리 구조 Volatility 설치 및 기본 사용법 외부 플러그인 활용법 Volatility 플러그인 제작 해킹 방어 대회 - 메모리 포렌식 문제 풀이
  • 56. 다 좋은데 … 그냥 누군가 만들어주지 않을까요? 힘들게 만들어 써야 하나요?
  • 57. 분명 플러그인을 만드는 건 재미 있지만, 귀찮고 힘든 일이기도 합니다.
  • 58. 하지만 조금 힘들더라도, 세상에 도움이 되는 일을 한다는 것이 정말 멋지다고 생각하지 않나요?
  • 59. 그 멋진 일을 마음만 먹으면 누구나 시작할 수 있답니다. 오늘부터 나만의 Plugin을 만들어보세요!
  • 60. Reference Forensic Proof (김진국) – 메모리 분석 방안 AhnLab 보안 이슈 – ASEC 장영준 선임 연구원 윈도우 포렌식 실전 가이드 – 고원봉 Windows 구조와 원리 – 정덕영 The Art of Memory Forensic – Michael Hale Ligh DailySecu 칼럼 – Plainbit 이준형 연구원