DLL INJECTION AND CODE INJECTION OVERVIEW

Similar documents
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

슬라이드 1

Microsoft PowerPoint - chap01-C언어개요.pptx

API 매뉴얼

Microsoft PowerPoint - chap06-2pointer.ppt

Sharing Memory Between Drivers and Applications

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

정도전 출생의 진실과 허구.hwp

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Chapter #01 Subject

PCServerMgmt7

DLL Injection

Frama-C/JESSIS 사용법 소개

Microsoft PowerPoint - o8.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드]

AhnLab_template

OCW_C언어 기초

1. Execution sequence 첫번째로 GameGuard 의실행순서는다음과같습니다 오전 10:10:03 Type : Create 오전 10:10:03 Parent ID : 0xA 오전 10:10:03 Pro

Deok9_PE Structure

No Slide Title

152*220

JVM 메모리구조

ISP and CodeVisionAVR C Compiler.hwp

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

Adobe Flash 취약점 분석 (CVE )

Part Part

PART

£01¦4Àå-2

½ºÅ丮ÅÚ¸µ3_³»Áö

272*406OSAKAÃÖÁ¾-¼öÁ¤b64ٽÚ

PowerPoint Presentation

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

Windows 10 General Announcement v1.0-KO

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Deok9_Exploit Technique

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이

Secure Programming Lecture1 : Introduction

C# Programming Guide - Types

Microsoft Word - FunctionCall

<41736D6C6F D20B9AEBCADBEE7BDC42E687770>

chapter4

PowerPoint 프레젠테이션

Microsoft Word - PLC제어응용-2차시.doc

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint APUE(Intro).ppt

I care - Do you?

서현수

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

API 매뉴얼

USER GUIDE

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - PE Infection ? How to Inject a dll.doc

금오공대 컴퓨터공학전공 강의자료

untitled

쉽게 풀어쓴 C 프로그래밍

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

DE1-SoC Board

Microsoft PowerPoint 웹 연동 기술.pptx

요약문 1. 연구제목 DLL Injection 을이용한 KeyLogger 제작및탐지방법연구 2. 연구목적및필요성인터넷의발달과컴퓨터의성능과보안프로그램성능과기술이발전함에따라악성코드의기술과기교도많이발전하였다. 그리고악성코드의기술도늘어남에따라초보자도쉽게사용이가능해지고본인이모르

C 언어 프로그래밊 과제 풀이

RHEV 2.2 인증서 만료 확인 및 갱신

Microsoft PowerPoint Predicates and Quantifiers.ppt

Dialog Box 실행파일을 Web에 포함시키는 방법

Lab 3. 실습문제 (Single linked list)_해답.hwp

Microsoft PowerPoint - chap04-연산자.pptx

강의10

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

ºÐ´ç¿ì¸®Áö1409

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap10-함수의활용.pptx

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

슬라이드 1

= ``...(2011), , (.)''

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

실험 5

Windows Server 2012

ActFax 4.31 Local Privilege Escalation Exploit

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

adfasdfasfdasfasfadf

Microsoft PowerPoint - e pptx

11장 포인터

041~084 ¹®È�Çö»óÀбâ

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

OCW_C언어 기초

BMP 파일 처리

PowerPoint Template

hlogin7

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft Word - ExecutionStack

리눅스 프로세스 관리

슬라이드 1

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

Transcription:

Code injection using Dll injection Why do I write this document? 어느날갑자기는아니고진작에익혔으면문서화해놓았어야했는데 3~4 주전에소스만만들어놓고개인사정이있어서보류하다가작성한다. 이문서는개인적으로 Dll injection 과 Code injection 에대해서이해한내용을기록한문서이기에틀린내용이있을지도모르니주의 하시기바란다. 그리고첨부된소스에대한설명은하지않는다. 그이유는이미 Reversecore 님께서보다훨씬높은수준의강의로 Blog 에공개가되어있고이론적으로 이해하고있으면나중에소스를봐도활용하는데큰문제가없다고여기기때문이다. 그나저나이문서만들때예쁘게해보려고워드 2010 만지작거리는재미도있다. 그리고어차피 보고서같은문서라글자체만윤고딕을써줘도이렇게미려하게나오는구나. 요즘 MacBook 이눈앞에아른거리는데 (iwork) 워드도괜찮은소프트였군!! 제대로안써보고 iwork 의미려함만좇았었는데더열심히써줘야겠다. -2011 년 7 월 16 일한여름의토요일밤에서일요일새벽으로넘어가는시점에서 - 혹시모를질문은 mailto:appff@naver.com - 영남대학교컴퓨터공학과김정민 What is the Dll injection? 먼저 Code injection 을하려면 Dll injection 이필요하므로먼저 Dll injection 부터이야기하겠다. 일반적으로윈도우는한프로세스가다른프로세스에게접근하는것을허용하지않는다. 가장 쉬운예를들면그것은커널오브젝트일것이다. 정확히는 Kernel Object 에접근할수있게해주는 HANDLE 값이다. 이 HANDLE 값은각프로세스마다고유한 HANDLE TABLE 로관리해서특정프로세스의 Editor Control 윈도우의 HANDLE 이 3 이라는고유값을가지더라도 그것이다른프로세스의 HANDLE TABLE 의 3 이라는값과같은 Kernel Object 를나타낸다는 보장은없다. ( 때에따라같은 Kernel Object 를나타내게할수도있다.) 그러나프로그래머들은종종자신이만든프로그램이다른프로그램을제어해야할경우가있다. 이럴때바로 Dll injection 을이용해서대상프로세스에강제로침입을하는것이다. 일반적인 Dll loading 과비교해보았을때일반적인 Dll loading 은자기자신이사용할 Dll 파일을 loading 하는작업이지만 Dll injection 은자신이아닌특정프로세스에대해서 Dll loading 시키는 작업이라할수있다. 1

Dll injection 의기법은대표적으로세가지정도이며아래에소개한다. 1. Registry 값조작을이용한 Dll injection 2. Windows hook function 을이용한 Dll injection 3. Thread 생성을이용한 Dll injection 현재이문서에서는 RemoteThread 를생성해서 LoadLibrary() function 을 call 하는방법으로 Dll injection 을구현하는방법을이야기할것이다. 사실이렇게글로풀어놓아봤자이해하기힘들것이다. 그러니딱한마디로 Dll injection 을 줄이고그림으로설명하겠다. 다른프로세스에게 LoadLibrary() API 를호출하도록명령하여 내가원하는 Dll loading 하는것이다. ( reversecore blog 에서인용 ) figure1 은 (Matt Pietre s article 발췌 ) pe 라고불리는윈도우운영체제의실행파일 format 이다. Dll injection 을이해하려면아래의그림을이해하고머릿속에그릴수있어야한다. PE32(portable excutable32) 프로세스의내부가 이해가되지않는다면 An In-Depth Look into the Win32 Portable Executable File Format 을읽어보길 바란다. MSDN Magazine 에보면 Matt Pietrek 이쓴 An In- Depth Look into the Win32 Portable Executable File Format 이라는 Article 이있는데이문서에서는.Net 환경에서개발된프로그램을제외한모든 PE32 format 에대해서자세히언급하고있다. Figure 1 영문이라겁이난다면 Windows 시스템실행파일의 구조와원리 ( 한빛미디어, 이호동저 ) 라는책을참고하면된다. Matt Pietrek 이한이야기를포함해서 PE32 format 에대한내용을책으로풀어써놨기에방대한양이며, 굳이 Dll injection 을위해서책을다볼필요는없다고생각된다. 이왕이면 Matt Pietrek 이써놓은기사정도만읽어보면될듯하다. (Pietrek 의 Article 도무려 Part1, Part2 로나뉜다.) i i Matt Pietrek s Article : http://msdn.microsoft.com/en-us/magazine/cc301805.aspx 2

다음으로 figure2 는 Dll injection 을나타내는그림이다. 한번에이해가되는가? (reversecore blog 에서발췌 ) 이그림만이해한다면 Dll injection 에대한이해는끝난것이다. ^^ 참 ~ 쉽죠잉 (?!) 자여기서문제는우리가사용 할 RemoteThread function 을이용해서 Dll injection 을구현하면어떤그림이그려질것인가가문제겠군요? 뭐아랫부분에직접그릴예정입니다만이문서를보시는 분들각자가한번상상해보세요. 힌트는바로 CreateRemoteThread() 함수입니다. Figure 2 한마디로줄여보면 Target Process 의 Remote Thread ( 원격스레드 ) 를생성해서그 Thread 가 LoadLibrary() function 을실행하게하는것이다. i i Reversecore.com 3

Dll injection using CreateRemoteThread() API 이제위에서이야기한 Remote Thread 를이용해서 Dll injection 을수행하였을때어떤모양의그림이그려지는지이야기하겠다. 먼저 figure3 을보자. Thread A HANDLE CreateRemoteThread( HANDLE hprocess, PTHREAD_START_ROUTINE lpstartaddress, PVOID lpparameter); Target 에게가상메모리공간을할당받고 lpstartaddress 에해당하는 Thread 를할당하고실행한다. injection Process A Target Process Virtual memory allocation Process A 에대한 Thread A 의 가상메모리공간 (Dll Loading Code) LoadLibrary( in LPCTSTR lpfilename) lpfilename 는 lpparameter 에할당된다. 이는 LoadLibrary() API 가 1 개의매개변수만이용한다는점을착안한아주영리한발상이다. 결과적으로 lpparameter 에는 LoadLibrary() API 의 Address 이며 LoadLibrary() API 를 Call 하게만든다. 자세한사항은첨부된소스를참고하기바란다. (Dll injector project) 4

What is the next work? 자여기까지오느라고생했다. 이제내가원하는프로세스에침투하는것은완료했다. 예를들면 internet explorer ( 이하 ie) 프로세스에우리의 Dll 이침투했다고가정하자. 여러분은혹시 컴퓨터를사용하면서특정사이트가접속되지않거나인터넷이되지않는바이러스에감염되어본적이있는가? 우리가만들 Code injection Sample project 는바로 internet explorer 가제대로작동되지않게하는바이러스성프로그램을만들것이다. Remote Thread 를이용한 Dll injection 이아주손쉽게특정프로세스의메모리영역에침투하는기술이기에사실백신에서도쉽게감지되긴하지만우리는 injection 에대한개념을익히기위한목적으로만드는것이니 재미있게즐기기만하자!! 더궁금한사항이있다면구글링으로 ~ How can you control the ie? 여러분이만든 C 언어프로그램에서 printf 함수의주소를바꿀수있다면? 또는 printf 함수를 호출하기전에그함수로전달되는매개변수들을가로챌수있다고가정해보자. 그렇다면프로그램의사용자가기대하는출력값이아닌엉뚱한값이출력되도록만들수있겠다. 이러한발상을그대로 ie 로가져가자. ie 가사용하는 dll 파일중에 wininet.dll 이존재하는데해당 라이브러리가제공하는함수중 InternetConnect() 라는함수를눈여겨보아야한다. 이함수는 FTP or HTTP 서버에접속하는함수이다. 아래는이함수의 Syntax 다. HINTERNET InternetConnect( ); in HINTERNET hinternet, in LPCTSTR lpszservername, in INTERNET_PORT nserverport, in LPCTSTR lpszusername, in LPCTSTR lpszpassword, in DWORD dwservice, in DWORD dwflags, in DWORD_PTR dwcontext 이함수의자세한사항은 MSDN 을참고하기바라며이문서에서는 lpszservername 변수에만 집중하도록하겠다. 이변수는말그대로인터넷주소이다. 자이제다시한번상상해보자 ie 가 InternetConnect 함수를호출하는시점에그매개변수들을우리가가로챌수있다면, 5

ie 사용자가기대하는서버외에우리가원하는서버로접속하게만들수있을것이다. 만약 없는주소라면? 당연히인터넷이안되는것같은효과가발생할것이다. ^^;;; 아래그림은실제로임의의 API 에대한 Hooking 이어떻게이루어지는지설명한다. Internet Explorer Hooked Function()... Call InternetConnect( www.naver. com ); Hooked HINTERNET HookedFunc(a,b,c) { b = yahoo.co.kr 강제접속할주소 Call Origin InternetConnect(a,b,c); Injection 된 Dll 은원래의 InternetConnect() 의주소를 우리가만든임의의함수의주소로교체한다. Hooked func 은 InternetConnect() 함수의두번째변수의값을변조하고원래의 InternetConnect() 를 호출한다. } Call Origin InternetConnect() HINTERNET InternetConnect(a,b,c) { Function body } 마치며 시작하며언급했지만이문서는실제로구현부분의이야기는거의없다. 단순히 DLL INJECTION 의개념과 CODE INJECTION 을이용한 API Hooking 의원리에대해서정리한 문서이며첨부된코드에대한내용은생략한다. 솔직히다까먹었다. ( 지금은 2011.11 월 ) T_T 모쪼록 DLL INJECTION 을공부하는분들에게미약하나마도움이되길! 6