> Information Security/Windows
-
Windows 루트킷 원리> Information Security/Windows 2017. 7. 16. 11:44
루트킷 원리 Windows 환경에서의 루트킷은 DOS 스텔스 바이러스에서부터 유래되었다. 스텔스(Stealth) 방식의 바이러스는 프로세스와 프로세스 사이에 자신을 은닉하는 방법으로써, 일반적인 프로세스 확인(ex:작업관리자)로는 탐지되지 않는다.루트킷의 은닉하는 특성 때문에 공격자가 침입 후 재진입 할 목적으로 생성하는 백도어로써 존재하기도 한다. Windows OS에서는 운영체제를 구동하기 위한 핵심코드를 커널 레벨에 둠으로써, 일반적인 응용프로그램과 분리하였다. Ring0의 커널모드, Ring3의 유저모드로 구성되어 있다. 루트킷은 커널레벨에서의 API 호출과정을 이용하여 프로세스를 은닉하는 경우가 있다. 커널모드에서는 유저모드보다 높은 권한을 필요로 하기 때문에 커널모드에서의 루트킷은 CPU나 메..
-
루트킷 - 프로세스 은닉에 이용되는 기술> Information Security/Windows 2014. 10. 30. 11:06
1.3. 루트킷 - 프로세스 은닉에 이용되는 기술 (1) IAT 후킹(유저레벨) 프로그램을 실행하게 되면, 하드디스크에 저장된 프로그램과 관련된 프로세스가 메모리에 적재된다.이 때 실행하는 프로그램은 PE(Portable Executive, 실행파일포맷) 구조로 되어있는데, 루트킷이 은닉하기 위한 기술 중 IAT Hooking에서는 프로그램 내부에 존재하는 PE구조에서도, IAT(Import Address Table)을 후킹하는 방식이다.이는 운영체제를 직접 후킹하는 것이 아니므로, 유저모드에서만 동작하는 후킹이다. 가. 실행파일 구조 WORD e_magic ; 시그니처(MZ)LONG e_lfanew ; PE HEADER 시작점 PE SignaturePE00 (5045) IMAGE..
-
Win32 API 기초> Information Security/Windows 2014. 6. 17. 12:37
#include // 1. WinMain() 함수int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){// 2. 윈도우 구조체 설정WNDCLASSEX wcex={};wcex.cbSize=sizeof(WNDCLASSEX);wcex.style=CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.hInstance = hInstance;wcex.hbrBackground(HBRUSH)(COLOR_WINDOW+1);wcex.lpszClassName="win01"; // 3. 윈도우 구조체 OS에 등록RegisterClassEx(&wcex); // 4..
-
악성코드 탐지 - 툴 사용법> Information Security/Windows 2014. 5. 30. 13:42
이번 포스팅에서 언급할 악성코드 탐지방법론은 일차적으로 백신에서 탐지하지 못하였는데 의심되는 악성코드가 어딘가에 있을 것이라 생각 될 때. 내 PC를 좀 더 깔끔한 환경에서 사용하고 싶을 때. 악성코드의 기본적인 특성을 바탕으로 수동으로 탐지하는 방법에 대해 기술할 것이다. 1. 프로세스 확인 가장 먼저 확인해야 할 것은 현재 실행되고 있는 프로세스 목록을 확인하는 것이다.현재 사용하고 있는 응용프로그램과 관련이 없는 프로세스를 판별하고, 비정상적인 프로세스를 의심해 나가는 것을 시작으로 한다. Windows 작업관리자 이외에, 원하는 정보를 한눈에 파악하기 쉬운 몇가지 툴을 아래와 같이 정리해보았다. 1) Procexp (Sysinternals) Microsoft에서 제공하는 Sysinternals T..
-
Stealth (프로세스 은폐기법)> Information Security/Windows 2012. 6. 11. 19:41
Stealth (프로세스 은폐기법) 스텔스(stealth)는 프로세스를 은폐하는 기법이다. 프로세스를 은폐할 때, 은폐할 대상의 프로세스가 있다면 은폐할 대상 프로세스를 hooking하는 것이 아니라, 주변 프로세스를 hooking 하는 방식이다. 이 때 주변 프로세스에 사용되는 기법은 크게 말하면 API Hooking이 사용되는데, 좀 더 세부적으로 나타내면, DLL 파일을 인젝션시켜 은폐대상 프로세스의 DLL파일의 Code를 수정(API Code Patch)하는 방식이다. 다음은 스텔스 기법을 도식화시킨 것이다. 이 때 프로세스를 API Hooking하게 될 프로그램은 반드시 유저모드여야 한다. 이 유저모드인 프로그램이 API Hooking을 통하여 프로세스에 접근하게 될텐데, 프로그램에 있는 API..
-
API Code Patch> Information Security/Windows 2012. 6. 11. 19:10
API Code Patch API Code Patch를 해석해보면 API의 코드를 수정한다는 의미다. 아래의 API Code Patch의 테크맵을 보면 API Code Patch의 방법을 크게 알 수 있다. API Code Patch는 동적(dynamic)인 방법으로 프로세스메모리의 Code부분에 Injection기법을 사용한다. DLL 파일이 사용되며 CreatRemoteThread라는 API함수가 이용된다. 출처는 www.reversecore.com API Code Patch의 동작 원리다. API Code Patch가 되었을 때 Code의 시작 5byte부분이 JMP XXXXX 로 변경된다. 예로, procexec.exe와 ntdll.dll 파일이 있다고 하자 이때 Stealth.dll 파일을 인젝..
-
안티디버깅 기법 - CheckRemoteDebuggerPresent()> Information Security/Windows 2012. 5. 20. 00:26
안티디버깅 기법 - CheckRemoteDebuggerPresent() CheckRemoteDebuggerPresent()는 IsDebuggerPresent()와 비슷하고,WindowsNT버전에서만 가능하다. (XP이상)따라서, 이 함수 내부에서는 NtQueryInformationProcess()라는 API함수를 호출하고, EPROCESS라는 구조체 커널구조체에서 Debugport값을 검사한다. 또한, 디버거가 선택된 프로세스내에서 보여지는지에 대한 여부는TRUE와 FALSE값으로 나타내어진다. 먼저, CheckRemoteDebuggerPresent()함수는 한글로 표현하면'원격으로 디버거가 보여지는지를 체크' 한다는 말이다. 즉, 자신 이외의 다른 프로세서가 디버깅을 당하는 지를 알 수 있는 API함수..
-
안티디버깅 - IsDebuggerPresent> Information Security/Windows 2012. 4. 11. 08:53
안티디버깅 - IsDebuggerPresent IsDebuggerPresent()는 해당 프로세스가 디버깅을 당하고있는지의 여부를 PEB구조체의 디버깅 상태값을 확인한다. (디버깅 당할때 리턴 값 = 1, 아닐경우 리턴 겂 = 0) 이 함수로는 커널모드의 디버거는 탐지하지 못하고, 유저모드의 디버거만 탐지가 가능하다. kernel32.dll에서 export되는 함수이며, 보통 프로그램의 보호차원에서 쓰이지만 우회방법이 많다. 1. 환경구축 Visual studio로 Win32 Console응용프로그램으로 프로젝트를 생성하고, C++형식의 파일을 추가한다. 2. IsDebuggerPresent 샘플코드 작성 이 프로그램은 1초마다 IsDebuggerPresent()함수를 계속 호출하면서 디버깅당하고 있는지..