Upload
naver-d2
View
2.604
Download
8
Embed Size (px)
Citation preview
악성코드 분석 잘하고 싶어요부제 : 엄마 저는 어떻게 하면 될까요?
김남준
➤ 세종대학교 정보보호학과
➤ UpRoot System Developer
➤ KITRI Best of the Best 3기
➤ Interested in 악성코드 자동화 분석, 유사도 평가, 분산처리
➤ 2014, 2015 CODEGATE, Inc0gnito Speaker
IN THIS SESSION
➤ 악성코드 분석 진짜 잘하는법 (저도 못함)
➤ 악성코드 분석할려면 뭘 공부해야 되는가?
➤ 요즘 악성코드 분석하는법?
➤ 실전 분석! with Case Study
말하기 전에..
“악성코드 분석은 과정만 알면
아기도 충분히 할 수 있습니다
- bunseokbot@UpRoot
이게 뭔소리여
분석 [ ANALYSIS ]
➤ 얽혀 있거나 복잡한 것을 풀어서개별적인 요소나 성분으로 나눔
악성코드 분석
➤ 악성코드 [Malicious Code]악의적인 행위를 하기 위해 의도적으로 제작된 모든 프로그램 및 그 구성 요소
➤ Conclusion악의적인 행위를 하는 프로그램에얽혀 있는 것들을 개별적인 요소로 분리하는 것
그럼 이 악성코드 분석을 왜 할까?
AV Engine 개발 악성코드 패턴 분석 침해사고 대응
다양한 곳에 이용됨
과거 (엄청 옛날..?)
No Obfuscation
No polymorphic
No VM Detect
근데 요즘에는?
그러면서 생긴 문제
Self Protection
Organization
여러분들은 실제 분석하면서 이런 어려움을 만날겁니다
➤ 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..?
또!
붕괴된 내 멘탈
전체적인 프로세스
사건 대응사건 분석사건 발생
위 내용은 기관이나 사람에 따라 달라질 수 있습니다.
➤무슨 문제가 생겨서 사건 발생 ex. 인터넷이 느려짐, 정보 유출, 데이터 삭제, 외부의 알림(?)
➤문제로 인한 피해 발생 ex. 컴퓨터를 사용하지 못함, 회사는 일을 못함
➤의뢰자는 빨리 해결되기 바람
전체적인 프로세스
사건 대응 사건 분석사건 발생
위 내용은 기관이나 사람에 따라 달라질 수 있습니다.
➤어떻게 감염되었는가 감염 경로를 통해 악성코드의 유형을 파악할 수 있습니다.
➤감염시키고 나서 발생한 피해 ex. 문서 데이터가 전부 삭제, 공인인증서 유출, 로그인 시도 등(?)
➤어디와 통신하였는가, 이전에 유사한 경우는 없는가 악성코드 제작자는 비슷한 경우가 더러 있습니다. 이러한 그룹을 생성해놓으면 분석에 용이!
전체적인 프로세스
사건 대응사건 분석사건 발생
위 내용은 기관이나 사람에 따라 달라질 수 있습니다.
➤어떻게 하면 치료 할 수 있는가? 악성코드를 제거할려면 일단 분석한 내용을 가지고 Taint된 부분을 원상태로 복구
➤피해 복구 방법 논의 랜섬웨어의 경우에는 VSS 영역이나 기타 백업 데이터 활용
분석 방법론
Dynamic Analysis
동적 분석
Static Analysis
정적 분석
분석 방법론
Static Analysis (정적 분석)
➤ 악성코드의 내부를 살펴보기 위해 사용하는 분석 방법
➤ 대략적인 행위를 파악하기 위해 사용하는 분석 방법이며 구조를 파악하는데 용이함
➤ 장점 : 악성코드를 직접 실행하지 않아도 행위를 대략적으로 알아낼 수 있다.
➤ 단점 : 난독화가 되어있는 경우 분석하기 어려워짐. :(
분석 방법론
Dynamic Analysis (동적 분석)
➤ 악성코드를 실제 환경이나 가상 환경에서 실행시켜 그 행위를 관찰하는 분석 방법
➤ 장점 : 정적 분석에서 알아내기 어려운 부분에 대해서 분석함
➤ 단점 : 환경구축하기 어려우며 Host가 감염될 가능성이 높다
IN MY CASE?
정적 분석 개시
분석한 내용을 가지고
동적 분석 with API Hooking
다시 내용을 가지고
OPEN SOURCE!
CASE STUDY #1
➤ 뭔지 모름!
➤ Drive By Download 방식
➤ 동작 OS : Windows
➤ Packer : Yes (EXE & Some..?)
➤ 최초발견일 : 20151128(어제!)
FIRST LOOK?
in PEView
PE STRUCTURE
PE STRUCTURE
➤ 실행 가능한 (Portable Executable) File Format
➤ EXE, SCR, DLL, OCX, SYS, OBJ 모두 이 File Format!
➤ OBJ 파일은 사실 실행은 안되지만 PE Specification 에 있습니다.
➤ 여기서는 이 부분에 대해서 자세히 설명은 하지 않도록 하겠습니다.
WATCH IAT
➤ Import Address Table
➤ 프로그램이 어떤 Library에서 어떠한 function을 call 하는지 기술
➤ Implicit Linking에 대한 정보만 제공해준다.-> 프로그램이 처음 실행될때 같이 로딩되어 종료될때 free되는 방식
WATCH IAT
이 악성코드가 사용하는 FUNCTION은?
➤ RegFlushKey - 레지스트리 키 변경한 것을 레지스트리에 입력
➤ modf - 나눗셈 함수
➤ PathFileExistA - 파일 존재 유무를 확인한다.
FUNCTION SEARCH?
➤ 실제 함수는 엄청 많지만 외우기 어렵다 ㅠㅠ
➤ 그럴땐 바로 마소갓 MSDN을 참고하면 된다.
➤ 한글화도 그럭저럭 잘 되어있어 참고하기 좋다.
EXEINFO
➤ Packer를 사용하였다!
➤ 이래서 제대로 분석되지 않았다.
➤ Packer 의 이름은 UPX
➤ 언패커가 있음! -> Failure :(
스냅샷 생성 필수
흠..? 좀 더 자세히 볼까
➤ 정적 단계에서 Flow 분석하기
➤ Interactive Disassembler (IDA) -> 엄청 비쌈
➤ Immunity Debugger 로 가능함! -> 무료
에라이 모르겠다 실행이나 해보자!
실행 전 주의사항
➤ 악성코드가 VMEscape하는 악성코드는 아닌가
➤ 악성코드가 VM을 탐지하지는 않았는가
➤ 설정상에서 완전하게 Host PC와 분리하였는가
➤ 분석을 위한 도구를 설치하였는가
API MONITOR
API MONITOR
API MONITOR
API MONITOR
➤ 아 이 악성코드는 GetFileAttributes 함수를 통해 파일 확인 후에 파일을 생성하고, Registry를 조작하는 기능을 가지고 있다.
이 정보들을 통해서 알아낼 수 있는 것
➤ 이 악성코드가 실제 사용하는 함수 -> 악성코드 행위
➤ 감염 경로 -> 악성코드 제작자의 목적
➤ 악성코드 C&C Server or Phishing Site -> 악성 행위 추측
➤ 실제 동적 분석 -> 악성코드 행위 실제 확인 가능
생각의 조합?
MY OWN ANALYZER
➤ 이러한 행위들을 자동화 해보고싶다면?
➤ 나만의 분석기를 만들어보자!
➤ using Python PEFILE!
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
BASIC
➤ 파일을 로딩할려면 PE class 를 사용해야 합니다!
➤ 일단 pefile 모듈이 해당 exe 파일에 대한 정보를 파싱하는 작업
import pefile
p = pefile.PE(’s.exe’)
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])
PACKING DETECTION
➤ pefile 모듈에서는 패킹 탐지도 해준다!
➤ 방식은 엔트로피! -> 무질서함의 정도를 기반으로 탐지!
PACKING DETECTION
from pefile import *
p = PE(’s.exe’)
entro_info = []
for section in p.sections:
entro_info.append([section.Name, section.get_entropy()])
GET IMPORT INFORMATION
➤ 아까 PEView에서 볼 수 있었던 Import 정보를 가져올 수 있다.
➤ 이를 통해서 EXE 에서 사용하는 함수의 정보를 가져옴!
➤ 물론 명시적에 대해서만.. 이지만 그래도!
➤ 저는 MSDN API를 하나 만들어서 개인적으로 사용중입니다!
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)
GET IMPORT INFORMATION
CONCLUSION
➤ 악성코드 분석은 전체 과정중에 하나입니다.
➤ 전체 사건의 퍼즐에 하나의 Piece에 불과합니다.
➤ 주위에 여러 부분들을 같이 고려하면서 분석하면 쉬워집니다.
➤ 그래도 일단 Assembly부터..?!
➤ 그리고 공격자가 주는 힌트를 너무 믿지 마세요 (Fake)
➤ 요즘에는 자동화 분석 보조도구들이 많이 나와있어서 공부하기 좋아요
➤ 처음에는 분석 보조도구 좀 보다가 자기만의 도구를 만드는것도.. ㅎ
감사합니다