SlideShare a Scribd company logo
으으리 리버싱 악성코드 분석
김형석(kimgudtjr68@gmail.com)
Home page : https://euripy.github.io/#!index.md
튜토리얼
Assembley 분석 시에
자주 등장하는
코드들에 대해 확인 해보자.
자주 등장하는 코드
• 함수 호출1 – 프로그래머가 만든 함수
• 함수 호출2 – 미리 만들어진 Library 함수
• 반복문
• 조건 분기문
함수 호출 1 – 프로그래머 제작 함수
위의 함수의 경우 Func1(arg1) 와 같은 형태 인 것을 알 수 있다.
함수 명이 보이지 않는 경우 해당 심볼이 없거나 프로그래머가 제작한 함수이다.
분석 시에 그냥 넘어가면 안 되는 함수 이기도 하다.
※ 정적으로 컴파일 된 라이브러리 일 수도 있다.
( IDA 와 같은 디버거로 보게 되면 보이는 경우도 있다. )
함수 호출 2 – 미리 만들어진 Libraray
위의 함수의 경우는
CreateFileA(FileName,0x120089,0,NULL,OPEN_EXISTING,0,NULL)
와 같이 번역 할 수 있다. 함수호출 시에 함수 이름이 보이며
Kernel32 라는 모듈내부에 이미 만들어진 함수 임을 알 수 있다.
이런 함수는 내부로 들어가서 분석 할 필요 없다.
반복문
위의 함수에서 JMP (Address) 와 같이 JMP하여 도착하는 코드의 위치가
위쪽을 향하는 것을 볼 수 있다. 이런 것은 반복적으로 사용하는 반복문에서
많이 볼 수 있다.
조건 분기문
위와 같이 TEST 혹은 CMP와 같은 명령어 연산 이후에 조건을 보고
JE 명령어로 분기하는 것을 볼 수 있다.
특히 TEST EAX, EAX는 자주 등장하는 명령어 이며
If eax == 0 조건이면 JE 다음 주소로 점프하는 경우이다.
해당 값이 0인지 아닌지 검사할 때 자주 등장한다.
분석 방법
정적 분석
동적 분석
정적 분석
위와 같이 HXD나 PEVIEW와 같이 해당 프로그램을 실행하지 않고
파일상에 존재하는 RAW DATA 만으로 해당 실행프로그램을 분석하는 경우이다.
동적 분석
Immunity Debugger 혹은 OLLYDBG 와 같은 메모리에 프로그램을
로드하고 명령어를 실행하면서 분석하거나
TcpView , ProcessExplorer와 같이 직접 프로그램을 동작시키고
해당 행위들을 모니터링 하는 것들이다.
OEP와 ImageBase Address
OEP
프로그램의 시작지점으로 Assembly으로 표현하면 아래와 같은 코드로 찾을 수 있다.
ImageBase Address
메모리에 각 모듈들이 Load된 주소들을 볼 수 있다.
각 모듈이 로드 된 시작 주소를 ImageBase Address 라고 한다.
ImageBase Address는 아래와 같은 주소로 구하거나
로드 할 수 있다.
ImageBase Address2
각 모듈들의 상세 구조
악성코드의 패턴 example
레지스트리 접근
파일 Drop
C&C 요청
악성코드 자동시작을 위한
레지스트리 생성
RegCreateKeyExA 함수로 SoftwareMicrosoftWindowsCurrentVersionRun
실행파일에 포함된 악성파일 Drop
자신의 실행파일 영역 중 Resource 영역에 Drop 할 실행파일을 숨기고
해당 실행 파일을 찾아서 Drop 하기 위해 FindResource 함수를 호출하는 것을
볼 수 있다.
공격자가 설정한 서버에 접속하여
악성코드 행위 결정
패킷의 내용을 보면 GET /~ 으로 시작하는 내용이 있는 것을 볼 수 있다.
이것은 해당 공격자 서버에 접속하여 악성코드가 어떤 행위를 할 것인지
혹은 어느 쪽으로 접속을 할 것인지에 대한 정보를 얻어 행동할 수 있다.
실습
• 준비된 악성코드 Sample 2개를 분석 해보자.

More Related Content

What's hot

Python
PythonPython
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
GangSeok Lee
 
Windows reversing study_basic_1
Windows reversing study_basic_1Windows reversing study_basic_1
Windows reversing study_basic_1
Jinkyoung Kim
 
bof기초+rtl+fake_ebp
bof기초+rtl+fake_ebpbof기초+rtl+fake_ebp
bof기초+rtl+fake_ebp
one_two_12
 
Java 기초
Java 기초Java 기초
Java 기초
Hyosang Hong
 
Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405
Hyosang Hong
 
Linux reversing study_basic_3
Linux reversing study_basic_3Linux reversing study_basic_3
Linux reversing study_basic_3
Jinkyoung Kim
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011Esun Kim
 
141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍
Changwon Choe
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introduction
Jinkyoung Kim
 
Jpa more
Jpa moreJpa more
Jpa more
Jonghee Lee
 
1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론
Youngjun Chang
 
[NHN_NEXT/윈도우 게암 프로그래밍] 3. 라이브러리
[NHN_NEXT/윈도우 게암 프로그래밍] 3. 라이브러리[NHN_NEXT/윈도우 게암 프로그래밍] 3. 라이브러리
[NHN_NEXT/윈도우 게암 프로그래밍] 3. 라이브러리MinGeun Park
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
Youngjun Chang
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장SeongHyun Ahn
 
System+os study 7
System+os study 7System+os study 7
System+os study 7
Jinkyoung Kim
 
2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법
Youngjun Chang
 

What's hot (17)

Python
PythonPython
Python
 
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
 
Windows reversing study_basic_1
Windows reversing study_basic_1Windows reversing study_basic_1
Windows reversing study_basic_1
 
bof기초+rtl+fake_ebp
bof기초+rtl+fake_ebpbof기초+rtl+fake_ebp
bof기초+rtl+fake_ebp
 
Java 기초
Java 기초Java 기초
Java 기초
 
Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405
 
Linux reversing study_basic_3
Linux reversing study_basic_3Linux reversing study_basic_3
Linux reversing study_basic_3
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍141103 최창원 파이썬 확장 프로그래밍
141103 최창원 파이썬 확장 프로그래밍
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introduction
 
Jpa more
Jpa moreJpa more
Jpa more
 
1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론
 
[NHN_NEXT/윈도우 게암 프로그래밍] 3. 라이브러리
[NHN_NEXT/윈도우 게암 프로그래밍] 3. 라이브러리[NHN_NEXT/윈도우 게암 프로그래밍] 3. 라이브러리
[NHN_NEXT/윈도우 게암 프로그래밍] 3. 라이브러리
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장
 
System+os study 7
System+os study 7System+os study 7
System+os study 7
 
2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법
 

Similar to 으리리버싱시즌3

[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반
arundine
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversing
Youngjun Chang
 
Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8
Jinkyoung Kim
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
복연 이
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
Jinkyoung Kim
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기
KTH, 케이티하이텔
 
xecon-phpfest2014composer
xecon-phpfest2014composerxecon-phpfest2014composer
xecon-phpfest2014composer
jhyeon1010
 
Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2
성일 한
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXTMinsuk Lee
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
NAVER Engineering
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XpressEngine
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
Sewon Ann
 
보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법
Youngjun Chang
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XpressEngine
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
KwangSeob Jeong
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
정명훈 Jerry Jeong
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
Jaehoon Choi
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
Dong Chan Shin
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU
 
[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)
NAVER D2
 

Similar to 으리리버싱시즌3 (20)

[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversing
 
Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기
 
xecon-phpfest2014composer
xecon-phpfest2014composerxecon-phpfest2014composer
xecon-phpfest2014composer
 
Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)[devil's camp] - Crack me (김민재)
[devil's camp] - Crack me (김민재)
 

으리리버싱시즌3

  • 1. 으으리 리버싱 악성코드 분석 김형석(kimgudtjr68@gmail.com) Home page : https://euripy.github.io/#!index.md
  • 2. 튜토리얼 Assembley 분석 시에 자주 등장하는 코드들에 대해 확인 해보자.
  • 3. 자주 등장하는 코드 • 함수 호출1 – 프로그래머가 만든 함수 • 함수 호출2 – 미리 만들어진 Library 함수 • 반복문 • 조건 분기문
  • 4. 함수 호출 1 – 프로그래머 제작 함수 위의 함수의 경우 Func1(arg1) 와 같은 형태 인 것을 알 수 있다. 함수 명이 보이지 않는 경우 해당 심볼이 없거나 프로그래머가 제작한 함수이다. 분석 시에 그냥 넘어가면 안 되는 함수 이기도 하다. ※ 정적으로 컴파일 된 라이브러리 일 수도 있다. ( IDA 와 같은 디버거로 보게 되면 보이는 경우도 있다. )
  • 5. 함수 호출 2 – 미리 만들어진 Libraray 위의 함수의 경우는 CreateFileA(FileName,0x120089,0,NULL,OPEN_EXISTING,0,NULL) 와 같이 번역 할 수 있다. 함수호출 시에 함수 이름이 보이며 Kernel32 라는 모듈내부에 이미 만들어진 함수 임을 알 수 있다. 이런 함수는 내부로 들어가서 분석 할 필요 없다.
  • 6. 반복문 위의 함수에서 JMP (Address) 와 같이 JMP하여 도착하는 코드의 위치가 위쪽을 향하는 것을 볼 수 있다. 이런 것은 반복적으로 사용하는 반복문에서 많이 볼 수 있다.
  • 7. 조건 분기문 위와 같이 TEST 혹은 CMP와 같은 명령어 연산 이후에 조건을 보고 JE 명령어로 분기하는 것을 볼 수 있다. 특히 TEST EAX, EAX는 자주 등장하는 명령어 이며 If eax == 0 조건이면 JE 다음 주소로 점프하는 경우이다. 해당 값이 0인지 아닌지 검사할 때 자주 등장한다.
  • 9. 정적 분석 위와 같이 HXD나 PEVIEW와 같이 해당 프로그램을 실행하지 않고 파일상에 존재하는 RAW DATA 만으로 해당 실행프로그램을 분석하는 경우이다.
  • 10. 동적 분석 Immunity Debugger 혹은 OLLYDBG 와 같은 메모리에 프로그램을 로드하고 명령어를 실행하면서 분석하거나 TcpView , ProcessExplorer와 같이 직접 프로그램을 동작시키고 해당 행위들을 모니터링 하는 것들이다.
  • 12. OEP 프로그램의 시작지점으로 Assembly으로 표현하면 아래와 같은 코드로 찾을 수 있다.
  • 13. ImageBase Address 메모리에 각 모듈들이 Load된 주소들을 볼 수 있다. 각 모듈이 로드 된 시작 주소를 ImageBase Address 라고 한다. ImageBase Address는 아래와 같은 주소로 구하거나 로드 할 수 있다.
  • 15. 악성코드의 패턴 example 레지스트리 접근 파일 Drop C&C 요청
  • 16. 악성코드 자동시작을 위한 레지스트리 생성 RegCreateKeyExA 함수로 SoftwareMicrosoftWindowsCurrentVersionRun
  • 17. 실행파일에 포함된 악성파일 Drop 자신의 실행파일 영역 중 Resource 영역에 Drop 할 실행파일을 숨기고 해당 실행 파일을 찾아서 Drop 하기 위해 FindResource 함수를 호출하는 것을 볼 수 있다.
  • 18. 공격자가 설정한 서버에 접속하여 악성코드 행위 결정 패킷의 내용을 보면 GET /~ 으로 시작하는 내용이 있는 것을 볼 수 있다. 이것은 해당 공격자 서버에 접속하여 악성코드가 어떤 행위를 할 것인지 혹은 어느 쪽으로 접속을 할 것인지에 대한 정보를 얻어 행동할 수 있다.
  • 19. 실습 • 준비된 악성코드 Sample 2개를 분석 해보자.