54
악성코드 분석 잘하고 싶어요 부제 : 엄마 저는 어떻게 하면 될까요?

제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

Embed Size (px)

Citation preview

Page 1: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

악성코드 분석 잘하고 싶어요부제 : 엄마 저는 어떻게 하면 될까요?

Page 2: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

김남준

➤ 세종대학교 정보보호학과

➤ UpRoot System Developer

➤ KITRI Best of the Best 3기

➤ Interested in 악성코드 자동화 분석, 유사도 평가, 분산처리

➤ 2014, 2015 CODEGATE, Inc0gnito Speaker

Page 3: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

IN THIS SESSION

➤ 악성코드 분석 진짜 잘하는법 (저도 못함)

➤ 악성코드 분석할려면 뭘 공부해야 되는가?

➤ 요즘 악성코드 분석하는법?

➤ 실전 분석! with Case Study

Page 4: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

말하기 전에..

Page 5: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

“악성코드 분석은 과정만 알면

아기도 충분히 할 수 있습니다

- bunseokbot@UpRoot

Page 6: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

이게 뭔소리여

Page 7: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

분석 [ ANALYSIS ]

➤ 얽혀 있거나 복잡한 것을 풀어서개별적인 요소나 성분으로 나눔

Page 8: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

악성코드 분석

➤ 악성코드 [Malicious Code]악의적인 행위를 하기 위해 의도적으로 제작된 모든 프로그램 및 그 구성 요소

➤ Conclusion악의적인 행위를 하는 프로그램에얽혀 있는 것들을 개별적인 요소로 분리하는 것

Page 9: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

그럼 이 악성코드 분석을 왜 할까?

AV Engine 개발 악성코드 패턴 분석 침해사고 대응

다양한 곳에 이용됨

Page 10: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

과거 (엄청 옛날..?)

Page 11: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

No Obfuscation

No polymorphic

No VM Detect

Page 12: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

근데 요즘에는?

Page 13: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

그러면서 생긴 문제

Self Protection

Organization

Page 14: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

여러분들은 실제 분석하면서 이런 어려움을 만날겁니다

➤ Code Obfuscation & Virtualization

➤ Customized Packer

➤ VM (Analysis Environment) Detection

➤ Network Packet Sniffer Detection

➤ Host Machine Infection

➤ hard to find OEP (Original Program Entrypoint)

➤ Customized coded function

➤ not official Windows API

➤ etc..?

Page 15: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

또!

Page 16: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

붕괴된 내 멘탈

Page 17: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

전체적인 프로세스

사건 대응사건 분석사건 발생

위 내용은 기관이나 사람에 따라 달라질 수 있습니다.

➤무슨 문제가 생겨서 사건 발생 ex. 인터넷이 느려짐, 정보 유출, 데이터 삭제, 외부의 알림(?)

➤문제로 인한 피해 발생 ex. 컴퓨터를 사용하지 못함, 회사는 일을 못함

➤의뢰자는 빨리 해결되기 바람

Page 18: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

전체적인 프로세스

사건 대응 사건 분석사건 발생

위 내용은 기관이나 사람에 따라 달라질 수 있습니다.

➤어떻게 감염되었는가 감염 경로를 통해 악성코드의 유형을 파악할 수 있습니다.

➤감염시키고 나서 발생한 피해 ex. 문서 데이터가 전부 삭제, 공인인증서 유출, 로그인 시도 등(?)

➤어디와 통신하였는가, 이전에 유사한 경우는 없는가 악성코드 제작자는 비슷한 경우가 더러 있습니다. 이러한 그룹을 생성해놓으면 분석에 용이!

Page 19: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

전체적인 프로세스

사건 대응사건 분석사건 발생

위 내용은 기관이나 사람에 따라 달라질 수 있습니다.

➤어떻게 하면 치료 할 수 있는가? 악성코드를 제거할려면 일단 분석한 내용을 가지고 Taint된 부분을 원상태로 복구

➤피해 복구 방법 논의 랜섬웨어의 경우에는 VSS 영역이나 기타 백업 데이터 활용

Page 20: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

분석 방법론

Dynamic Analysis

동적 분석

Static Analysis

정적 분석

Page 21: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

분석 방법론

Static Analysis (정적 분석)

➤ 악성코드의 내부를 살펴보기 위해 사용하는 분석 방법

➤ 대략적인 행위를 파악하기 위해 사용하는 분석 방법이며 구조를 파악하는데 용이함

➤ 장점 : 악성코드를 직접 실행하지 않아도 행위를 대략적으로 알아낼 수 있다.

➤ 단점 : 난독화가 되어있는 경우 분석하기 어려워짐. :(

Page 22: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

분석 방법론

Dynamic Analysis (동적 분석)

➤ 악성코드를 실제 환경이나 가상 환경에서 실행시켜 그 행위를 관찰하는 분석 방법

➤ 장점 : 정적 분석에서 알아내기 어려운 부분에 대해서 분석함

➤ 단점 : 환경구축하기 어려우며 Host가 감염될 가능성이 높다

Page 23: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

IN MY CASE?

정적 분석 개시

분석한 내용을 가지고

동적 분석 with API Hooking

다시 내용을 가지고

Page 24: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

OPEN SOURCE!

Page 25: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

CASE STUDY #1

➤ 뭔지 모름!

➤ Drive By Download 방식

➤ 동작 OS : Windows

➤ Packer : Yes (EXE & Some..?)

➤ 최초발견일 : 20151128(어제!)

Page 26: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

FIRST LOOK?

in PEView

Page 27: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

PE STRUCTURE

Page 28: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

PE STRUCTURE

➤ 실행 가능한 (Portable Executable) File Format

➤ EXE, SCR, DLL, OCX, SYS, OBJ 모두 이 File Format!

➤ OBJ 파일은 사실 실행은 안되지만 PE Specification 에 있습니다.

➤ 여기서는 이 부분에 대해서 자세히 설명은 하지 않도록 하겠습니다.

Page 29: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

WATCH IAT

➤ Import Address Table

➤ 프로그램이 어떤 Library에서 어떠한 function을 call 하는지 기술

➤ Implicit Linking에 대한 정보만 제공해준다.-> 프로그램이 처음 실행될때 같이 로딩되어 종료될때 free되는 방식

Page 30: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

WATCH IAT

Page 31: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

이 악성코드가 사용하는 FUNCTION은?

➤ RegFlushKey - 레지스트리 키 변경한 것을 레지스트리에 입력

➤ modf - 나눗셈 함수

➤ PathFileExistA - 파일 존재 유무를 확인한다.

Page 32: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

FUNCTION SEARCH?

➤ 실제 함수는 엄청 많지만 외우기 어렵다 ㅠㅠ

➤ 그럴땐 바로 마소갓 MSDN을 참고하면 된다.

➤ 한글화도 그럭저럭 잘 되어있어 참고하기 좋다.

Page 33: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

EXEINFO

➤ Packer를 사용하였다!

➤ 이래서 제대로 분석되지 않았다.

➤ Packer 의 이름은 UPX

➤ 언패커가 있음! -> Failure :(

Page 34: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

스냅샷 생성 필수

Page 35: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

흠..? 좀 더 자세히 볼까

➤ 정적 단계에서 Flow 분석하기

➤ Interactive Disassembler (IDA) -> 엄청 비쌈

➤ Immunity Debugger 로 가능함! -> 무료

Page 36: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

에라이 모르겠다 실행이나 해보자!

Page 37: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

실행 전 주의사항

➤ 악성코드가 VMEscape하는 악성코드는 아닌가

➤ 악성코드가 VM을 탐지하지는 않았는가

➤ 설정상에서 완전하게 Host PC와 분리하였는가

➤ 분석을 위한 도구를 설치하였는가

Page 38: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

API MONITOR

Page 39: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

API MONITOR

Page 40: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

API MONITOR

Page 41: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

API MONITOR

➤ 아 이 악성코드는 GetFileAttributes 함수를 통해 파일 확인 후에 파일을 생성하고, Registry를 조작하는 기능을 가지고 있다.

Page 42: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

이 정보들을 통해서 알아낼 수 있는 것

➤ 이 악성코드가 실제 사용하는 함수 -> 악성코드 행위

➤ 감염 경로 -> 악성코드 제작자의 목적

➤ 악성코드 C&C Server or Phishing Site -> 악성 행위 추측

➤ 실제 동적 분석 -> 악성코드 행위 실제 확인 가능

Page 43: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

생각의 조합?

Page 44: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

MY OWN ANALYZER

➤ 이러한 행위들을 자동화 해보고싶다면?

➤ 나만의 분석기를 만들어보자!

➤ using Python PEFILE!

Page 45: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

PEFILE MODULE

➤ PE File Parser for Python Language

➤ support multi-platform (Windows, Mac OS X, Linux..)

➤ virustotal, Immunity Debugger, ExeDumpUtility (Web) use this

➤ sudo pip install pefile

Page 46: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

BASIC

➤ 파일을 로딩할려면 PE class 를 사용해야 합니다!

➤ 일단 pefile 모듈이 해당 exe 파일에 대한 정보를 파싱하는 작업

import pefile

p = pefile.PE(’s.exe’)

Page 47: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

PE SECTIONS

➤ 일단 각 Section에 대해서 가져옵니다.

➤ PEView와 같은 느낌을 줄 수 있습니다. ㅎㅎ

import pefile

p = pefile.PE(’s.exe’)

sections = []

for section in p.sections:

sections.append([section.Name, hex(section.VirtualAddress)

, hex(section.Misc_VirtualSize), section.SizeOfRawData])

Page 48: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

PACKING DETECTION

➤ pefile 모듈에서는 패킹 탐지도 해준다!

➤ 방식은 엔트로피! -> 무질서함의 정도를 기반으로 탐지!

Page 49: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

PACKING DETECTION

from pefile import *

p = PE(’s.exe’)

entro_info = []

for section in p.sections:

entro_info.append([section.Name, section.get_entropy()])

Page 50: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

GET IMPORT INFORMATION

➤ 아까 PEView에서 볼 수 있었던 Import 정보를 가져올 수 있다.

➤ 이를 통해서 EXE 에서 사용하는 함수의 정보를 가져옴!

➤ 물론 명시적에 대해서만.. 이지만 그래도!

➤ 저는 MSDN API를 하나 만들어서 개인적으로 사용중입니다!

Page 51: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

GET IMPORT INFORMATION

from pefile import *

p = PE(’s.exe’)

entry_info = []

for e in p.DIRECTORY_ENTRY_IMPORT:

tmp = {‘dllname’ : e.dll, ‘func_list’ : []}

for import_ in e.imports:

tmp[‘func_list’].append(import_.name)

entry_info.append(tmp)

Page 52: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

GET IMPORT INFORMATION

Page 53: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

CONCLUSION

➤ 악성코드 분석은 전체 과정중에 하나입니다.

➤ 전체 사건의 퍼즐에 하나의 Piece에 불과합니다.

➤ 주위에 여러 부분들을 같이 고려하면서 분석하면 쉬워집니다.

➤ 그래도 일단 Assembly부터..?!

➤ 그리고 공격자가 주는 힌트를 너무 믿지 마세요 (Fake)

➤ 요즘에는 자동화 분석 보조도구들이 많이 나와있어서 공부하기 좋아요

➤ 처음에는 분석 보조도구 좀 보다가 자기만의 도구를 만드는것도.. ㅎ

Page 54: 제12회 IT4U 강연회 - 악성코드 분석 잘하고 싶어요

감사합니다