목록분류 전체보기 (194)
Information Security
[ Debug 방식의 API 후킹 ] 디버거(Debugger): 디버깅/후킹 프로그램(hookdbg.exe)디버기(Debuggee): 디버깅 당하는 프로그램(notepad.exe) 이번에는 디버그 방식으로 API 후킹을 할 것이다. 위의 두 프로세스로 실습을 진행한다.디버거는 디버깅을 당하는 디버기에 대한 모든 권한을 가지므로 후킹 함수를 쉽게 설치할 수 있다. notepad는 파일에 내용을 입력하고 저장할 때 WriteFile() API를 사용한다. 이 API를 후킹하여 저장되는 문자열 중 소문자를 대문자로 덮어쓸 것이다. 먼저 notepad의 WriteFile() 시작 주소에 Break Point를 설치하고 메모장에서 문자열을 저장한다. 그리고 스택에서 파라미터를 확인한다. 두 번째 파라미터(ESP+..
[ Code Injection ]-프로세스에 독립 실행 코드를 삽입한 후 실행하는 기법-CreateRemoteThread() API를 이용하여 원격 스레드 형태로 실행하므로 Thread 인젝션이라고도 한다. Windows 메시지 박스를 출력하는 간단한 코드이다. Ollydbg에서 ThreadProc()를 확인한다.PUSH 명령어로 MessageBox() API의 문자열 주소를 스택에 저장하고 있다.1000781C, 10007828 주소는 DLL의 데이터(.rdata) 섹션 영역에 정의된 문자열을 가리킨다. CALL 명령어의 100060E4 주소는 MessageBox() API의 IAT이다. DLL 코드에서 사용되는 모든 데이터(파라미터, IAT 등)는 DLL의 데이터(.rdata) 섹션에 위치한다. 이 ..
[ PE 패치를 이용한 DLL 로딩 ]실행 파일을 직접 수정하여 DLL을 로딩시켜 봅시다. TextView.exe 파일을 직접 수정하여 실행 시에 myhack3.dll을 로딩하도록 실습을 진행한다.myhack3.dll은 www.google.com에서 index.html을 다운 받아서 프로세스에 드롭(drop)시키는 기능을 가진다. PE 파일에서 어떤 DLL을 import한다는 것은 그 DLL이 코드 내에서 제공하는 export 함수를 호출한다는 의미이다.myhack.dll도 이를 따라 아무런 기능이 없는 dummy라는 export 함수를 정의한다. TextView.exe는 읽고 쓰는 기능을 가진 단순한 텍스트 뷰어이다. PEview에서 이 프로세스의 IDT(IMPORT Directory Table)를 확..
[ DLL Ejection ]프로세스에 강제로 삽입한 DLL을 빼내는 것 notepad.exe에 myhack.dll을 강제로 인젝션했다가 다시 이젝션해봅시다. 이젝션을 하기 위해서는 CreateRemoteThread()를 사용하여 대상 프로세스가 FreeLibrary() API를 스스로 호출하도록 만들어야 한다.pThreadProc은 FreeLibrary()의 주소이고, me.modBaseAddr은 이젝션할 myhack.dll의 로딩 주소이다. 일단 인젝션을 하고 확인을 한다. EjectDll.exe로 이젝션을 시도한다. success. notepad.exe에서 myhack.dll이 빠져 나갔다. 이젝션은 우리가 강제로 삽입한 dll만 가능하고 일반적으로 로딩되어 있는 dll은 불가능하다.
[ DLL Injection ]-실행 중인 프로세스에 LoadLibrary() API를 스스로 호출하도록 명령하여 원하는 DLL을 로딩시키는 것-삽입된 DLL은 이미 프로세스에 로딩되어 있는 다른 DLL과 마찬가지로 프로세스 메모리에 대한 권한을 가지게 된다. DLL이 로딩되면 DLLMain() 함수가 실행되는데, 이 switch 문에 기능을 개선하거나 버그를 패치하는 등의 사용자가 원하는 코드를 넣을 수 있다. 1. 원격 스레드 생성하여 DLL 인젝션 구현하기 - CreateRemoteThread()(리버싱 핵심 원리 https://reversecore.com/104)notepad.exe에 myhack.dll을 인젝션하는 실습을 할 것이다. myhack.dll이 로딩되면 OutputDebugString..
[ DLL Injection - Windows Message Hooking ] Windows는 Event Driven 방식으로 동작한다. 이벤트가 발생하면 OS는 응용프로그램에게 메시지를 보낸다. 이 메시지가 이동하는 중간에 엿보거나 가로채가는 것을 Message Hook이라고 한다.메시지 후킹은 DLL 인젝션 기법의 하나로 사용된다. 아래의 파일을 이용하여 후킹 실습을 진행한다.(리버싱 핵심 원리 https://reversecore.com/104)HookMain.exe은 KeyHook.dll을 최초로 로딩한 후, SetWindowsHookEx()을 이용하여 훅을 설치하는 프로그램이다. SetWindowsHookEX()는 훅을 설치하는 API이고, 정의는 위와 같다. KeyHook.dll에서 확인한 Se..
EAT(Export Address Table) 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 사용할 수 있게 해주는 핵심 메커니즘이다. IMAGE_EXPORT_DIRECTORY 구조체에 Export 정보가 저장되어 있다. NumberOfFunctions 실제 Export 함수 개수 NumberOfNames Export 함수 중에서 이름을 가지는 함수 개수 AddressOfFunctions Export 함수 주소 배열 AddressOfNames 함수 이름 주소 배열 AddressOfNameOrdinals Ordinal 배열 EAT를 통해서만 해당 라이브러리에서 Export하는 함수의 시작 주소를 정확히 구할 수 있다. 라이브러리에서 함수 주소를 얻는 API는 GetProcAddress()이다..
IAT(Import Address Table) 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하는지를 기술한 테이블이다. DLL(Dynamic Linked Library, 동적 연결 라이브러리)이란 여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 포함한 라이브러리이다. DLL의 로딩 방식은 두 가지인데, 그 중 하나가 프로그램 시작할 때 같이 로딩되어 종료 시 메모리에서 해제되는 Implicit Linking 방식이다. IAT는 Implicit Linking에 대한 메커니즘을 제공한다. CALL [1001104] notepad.exe에서 kernel32.dll의 CreateFileW를 호출하는 명령어이다. 이 CALL 명령에서 호출하는 주소는 CreateFileW의 주소가 아니라 IAT 메모리 ..
PE File Format PE(Portable Executable) 파일이란 Windows OS에서 사용하는 실행 파일 형식이다. 우리는 메모장(notepad.exe)으로 PE 파일의 기본 구조를 알아볼 것이다. PE 파일은 PE 헤더(DOS 헤더 ~ 섹션 헤더)와 PE 바디(섹션)로 이루어진다. PE 헤더에는 파일이 실행되기 위해 필요한 정보들이 구조체 형식으로 저장되어 있다. IMAGE_DOS_HEADER HxD로 확인한 DOS Header이다. e_magic DOS signature MZ(4D5A) e_lfanew NT_header의 offset(000000E0) e_lfanew 멤버의 값을 따라서 000000E0에는 IMAGE_NT_HEADERS 구조체가 위치한다. 이 구조체는 signature..
Shell Code -버퍼 오버플로우 공격의 핵심은 오버플로우가 발생하는 버퍼에 저장되는 공격자의 코드로 실행 제어를 이동시키는 것이다. -사용자 명령어 라인의 해석기 Shell로 제어를 넘기고 공격당한 프로그램의 권한으로 시스템의 다른 프로그램에 접근하기 때문에 Shell code라고 부른다. 일단 /bin/sh 명령어를 실행하는 소스 코드를 작성했다. 메모리에 실행할 명령어만 올려야 하므로 data 세그먼트는 사용하지 않고 기계어로 변환해야 한다. text 세그먼트만 사용해서 어셈블리어로 작성했다. 실행 파일을 disassemble해서 기계어를 획득했다. 그런데 여기서 보이는 null 값(00)은 입력할 수 없는 값(bad character)이다. 1. 4바이트 레지스터 eax에 1바이트 값을 넣으면..