14. 여러분들은 실제 분석하면서 이런 어려움을 만날겁니다
➤ 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..?
17. 전체적인 프로세스
사건 대응사건 분석사건 발생
위 내용은 기관이나 사람에 따라 달라질 수 있습니다.
➤ 무슨 문제가 생겨서 사건 발생
ex. 인터넷이 느려짐, 정보 유출, 데이터 삭제, 외부의 알림(?)
➤ 문제로 인한 피해 발생
ex. 컴퓨터를 사용하지 못함, 회사는 일을 못함
➤ 의뢰자는 빨리 해결되기 바람
18. 전체적인 프로세스
사건 대응사건 분석사건 발생
위 내용은 기관이나 사람에 따라 달라질 수 있습니다.
➤ 어떻게 감염되었는가
감염 경로를 통해 악성코드의 유형을 파악할 수 있습니다.
➤ 감염시키고 나서 발생한 피해
ex. 문서 데이터가 전부 삭제, 공인인증서 유출, 로그인 시도 등(?)
➤ 어디와 통신하였는가, 이전에 유사한 경우는 없는가
악성코드 제작자는 비슷한 경우가 더러 있습니다. 이러한 그룹을 생성해놓으면 분석에 용이!
19. 전체적인 프로세스
사건 대응사건 분석사건 발생
위 내용은 기관이나 사람에 따라 달라질 수 있습니다.
➤ 어떻게 하면 치료 할 수 있는가?
악성코드를 제거할려면 일단 분석한 내용을 가지고 Taint된 부분을 원상태로 복구
➤ 피해 복구 방법 논의
랜섬웨어의 경우에는 VSS 영역이나 기타 백업 데이터 활용
21. 분석 방법론
Static Analysis (정적 분석)
➤ 악성코드의 내부를 살펴보기
위해 사용하는 분석 방법
➤ 대략적인 행위를 파악하기 위해
사용하는 분석 방법이며 구조를
파악하는데 용이함
➤ 장점 : 악성코드를 직접 실행하
지 않아도 행위를 대략적으로
알아낼 수 있다.
➤ 단점 : 난독화가 되어있는 경우
분석하기 어려워짐. :(
22. 분석 방법론
Dynamic Analysis (동적 분석)
➤ 악성코드를 실제 환경이나
가상 환경에서 실행시켜 그 행
위를 관찰하는 분석 방법
➤ 장점 : 정적 분석에서 알아내기
어려운 부분에 대해서 분석함
➤ 단점 : 환경구축하기 어려우며
Host가 감염될 가능성이 높다
23. IN MY CASE?
정적 분석 개시
분석한 내용을 가지고
동적 분석 with API Hooking
다시 내용을 가지고
28. PE STRUCTURE
➤ 실행 가능한 (Portable Executable) File Format
➤ EXE, SCR, DLL, OCX, SYS, OBJ 모두 이 File Format!
➤ OBJ 파일은 사실 실행은 안되지만 PE Specification 에 있습니다.
➤ 여기서는 이 부분에 대해서 자세히 설명은 하지 않도록 하겠습니다.
29. WATCH IAT
➤ Import Address Table
➤ 프로그램이 어떤 Library에서 어떠한 function을 call 하는지 기술
➤ Implicit Linking에 대한 정보만 제공해준다.
-> 프로그램이 처음 실행될때 같이 로딩되어 종료될때 free되는 방식
41. API MONITOR
➤ 아 이 악성코드는 GetFileAttributes 함수를 통해 파일 확인 후에 파일을
생성하고, Registry를 조작하는 기능을 가지고 있다.
42. 이 정보들을 통해서 알아낼 수 있는 것
➤ 이 악성코드가 실제 사용하는 함수 -> 악성코드 행위
➤ 감염 경로 -> 악성코드 제작자의 목적
➤ 악성코드 C&C Server or Phishing Site -> 악성 행위 추측
➤ 실제 동적 분석 -> 악성코드 행위 실제 확인 가능
44. MY OWN ANALYZER
➤ 이러한 행위들을 자동화 해보고싶다면?
➤ 나만의 분석기를 만들어보자!
➤ using Python PEFILE!
45. 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
46. BASIC
➤ 파일을 로딩할려면 PE class 를 사용해야 합니다!
➤ 일단 pefile 모듈이 해당 exe 파일에 대한 정보를 파싱하는 작업
import pefile
p = pefile.PE(’s.exe’)
47. 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])
49. PACKING DETECTION
from pefile import *
p = PE(’s.exe’)
entro_info = []
for section in p.sections:
entro_info.append([section.Name, section.get_entropy()])
50. GET IMPORT INFORMATION
➤ 아까 PEView에서 볼 수 있었던 Import 정보를 가져올 수 있다.
➤ 이를 통해서 EXE 에서 사용하는 함수의 정보를 가져옴!
➤ 물론 명시적에 대해서만.. 이지만 그래도!
➤ 저는 MSDN API를 하나 만들어서 개인적으로 사용중입니다!
51. 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)
53. CONCLUSION
➤ 악성코드 분석은 전체 과정중에 하나입니다.
➤ 전체 사건의 퍼즐에 하나의 Piece에 불과합니다.
➤ 주위에 여러 부분들을 같이 고려하면서 분석하면 쉬워집니다.
➤ 그래도 일단 Assembly부터..?!
➤ 그리고 공격자가 주는 힌트를 너무 믿지 마세요 (Fake)
➤ 요즘에는 자동화 분석 보조도구들이 많이 나와있어서 공부하기 좋아요
➤ 처음에는 분석 보조도구 좀 보다가 자기만의 도구를 만드는것도.. ㅎ