목록3-2 (25)
발자취
악성코드 탐지시스템의 구조를 알아보는 실습, 그 마지막 시간이다. 본 실습은 '파이썬으로 배우는 Anti-Virus 구조와 원리' 교재의 4~7, 12장에 해당하는 실습이며, 본 게시물에서는 12장의 내용을 다룬다. 앞선 실습의 탐지 시스템의 문제점을 개선한 구조의 탐지 시스템을 확인할 수 있다. 이전 실습 게시글: https://haelyn.tistory.com/127 https://haelyn.tistory.com/128 https://haelyn.tistory.com/129 4. 네번째 실습 실습에 필요한 코드는 다음과 같다. # -*- coding:utf-8 -*- # Author: Kei Choi(hanul93@gmail.com) import sys import k2rsa if __name__ ..
악성코드 탐지시스템의 구조를 알아보는 실습, 그 세 번째 시간이다. 본 실습은 '파이썬으로 배우는 Anti-Virus 구조와 원리' 교재의 4~7, 12장에 해당하는 실습이며, 본 게시물에서는 7장의 내용을 다룬다. 앞선 실습의 탐지 시스템의 문제점을 개선한 구조의 탐지 시스템을 확인할 수 있다. 이전 실습 게시글: https://haelyn.tistory.com/127 https://haelyn.tistory.com/128 3. 세번째 실습 실습에 필요한 코드는 다음과 같다. #Written by JWHO for IntrusionDetection Class import hashlib import string import random import os NUM_OF_FAKE_VIRUSE_FILES=10 n..
악성코드 탐지시스템의 구조를 알아보는 실습, 그 두번째 시간이다. 본 실습은 '파이썬으로 배우는 Anti-Virus 구조와 원리' 교재의 4~7, 12장에 해당하는 실습이며, 본 게시물에서는 6장의 내용을 다룬다. 앞선 실습의 탐지 시스템의 문제점을 개선한 구조의 탐지 시스템을 확인할 수 있다. 이전 실습 게시글: https://haelyn.tistory.com/127 2. 두번째 실습 실습에 필요한 코드는 다음과 같다. #Written by JWHO for IntrusionDetection Class import hashlib import string import random import os NUM_OF_FAKE_VIRUSE_FILES=10 name = "virus.db" for i in range(..
악성코드 탐지시스템의 구조를 알아보는 실습을 네 시간에 걸쳐 진행할 예정이다. 본 실습은 '파이썬으로 배우는 Anti-Virus 구조와 원리' 교재의 4~7, 12장에 해당하는 실습이고, 본 게시물에서는 4, 5장의 내용을 다룰 예정이다. 네 번에 걸쳐 진행하는 이 실습은 시그니처를 어떻게 관리해서 악성코드를 관리하는지를 볼 수 있는 실습이다. 이 실습을 통해 악성코드 탐지 엔진의 구성을 확인할 수 있다. 간단한 탐지 시스템 실습부터 시작하여, 해당 시스템의 문제점을 해결해나가며 더욱 더 효율적인 방식을 사용하는 탐지 시스템으로 발전시킬 예정이다. 악성코드 분석 팀에는 악성코드 특징을 파악하여 시그니처를 만드는 팀과 그 시그니처를 가지고 어떻게 효율적으로 탐지할지에 대한 작업을 하는 팀이 있다. 이 실습..
본 실습은 리버싱 핵심원리 교재의 33장에 해당하는 실습이다. 악성코드 프로세스가 시스템 상에서 돌아가는 것을 타겟이 모르도록 은폐하는 실습이다. 사용코드는 다음과 같다. https://github.com/reversecore/book (소스코드\04_API_Hooking\33_스텔스_프로세스) 본 게시글에서는 실습을 총 두 번 진행한다. 첫번째 실습의 문제점을 개선하여 두번째 실습을 진행하고, 두번째 실습의 문제점을 파악해 해결 방안을 알아볼 것이다. 1. 첫번째 실습 사용 코드: HideProc.cpp, stealth.cpp 목표: notepad.exe 프로세스 은폐 1. 코드 수정 1. HideProc.cpp - [83, 132] InjectDll 함수와 EjectDll 함수 안에서 사용된 Wait..
본 실습은 리버싱 핵심원리 교재의 32장에 해당하는 실습이다. 1. 인젝션 실습 사용코드는 다음과 같다. https://github.com/reversecore/book (소스코드\04_API_Hooking\32_계산기_한글을_배우다) 본 실습에서 사용하는 계산기는 Windows 7용이므로, 다운로드 받아줘야 한다. 1. 코드 수정 hookiat.cpp의 MySetWindowTextW 함수 내부에서 wchar_t* pNum = L"영일이삼사오육칠팔구"; 를 const wchar_t* pNum = L"영일이삼사오육칠팔구"; 로 변경한다. => 빌드하여 InjectDllcalc.exe 파일과 hookiat.dll 파일을 만들어준다. 두 파일을 같은 경로에 둔다. 2. 실습 시작 옛날 계산기를 실행 후, pr..
Code Injection이란? Dll Injection의 연장선으로, Dll보다 작은 코드들을 인젝션하는 것이다. Dll Injection과 비교했을 때, Code Injection의 장점은? (코드 인젝션의 사용 이유) 1. Dll Injection에 비해 메모리를 적게 차지한다. 2. Dll Injection에 비해 탐지 가능성이 낮다. (Dll 인젝션은 인젝션 후 이젝션 전까지는 메모리 공간을 비교적 많이 차지하므로 탐지 가능성이 큰데, 코드 인젝션은 메모리 상에서 흔적을 남기는 게 비교적 작기 때문이다) 3. Code Injector만 있으면 다 된다. 1. 실습 사용 코드는 다음과 같다. https://github.com/reversecore/book (소스코드\03_DLL_Injection\..
본 실습은 리버싱 핵심원리 교재 25장의 내용을 진행하며, 03_DLL_Injection > 25_PE_패치를_이용한_DLL_로딩의 TextView.cpp, myhack3.cpp 코드를 사용한다. (https://github.com/reversecore/book) 최종 목표는 TextView_Patch.exe에 myhack3.dll을 패치하여 어떠한 동작을 하도록 만드는 것이다. TextView.exe와 myhack3.dll을 만든 뒤, 같은 파일에 둔다. TextView.exe의 복사본을 만들어서 TextView_Patch.exe 파일을 만든다. TextView.exe는 원본 파일, TextView_Patch.exe는 직접 패치를 할 파일이다. 1. 실습 진행 1. 옵션 헤더의 사이즈 변경 기존에 없던..
실습을 진행하기에 앞서 우선 필요한 파일은 echo_rop.c와 echo_server_ROP.c 두가지이다. echo_rop.c는 ROP 공격을 위해 사용되는 파일이며, echo_server_ROP.c는 ROP의 공격 대상이 되는 echo 서버 파일이다. #include #include #include #include #include #include #include #include "echo.h" #define NOP 0x90 int main(int argc, char* argv[]) { int so, op; Packet pkt; unsigned long start_address, end_address,first_arg_val, second_arg_val; unsigned long prepare_addr..
실습에는 총 두가지의 코드 파일이 필요하다. #include #include #include #include #include #include #include #include "echo.h" #define NOP 0x90 int main(int argc, char* argv[]) { int so, op; Packet pkt; unsigned long runSystem_address, runExit_address, shell_address; struct sockaddr_in remote_addr; struct sockaddr_in local_addr; if(argc != 3) { printf("Usage: echo_retlib \n"); exit(-1); } bzero(&remote_addr, sizeof(..