본문 바로가기

메가IT아카데미 국기과정/리버싱과 악성코드 분석15

[2-1] 악성코드 파일 1. PowerShell 분석 2. PowerShell 난독화 3. JavaScript 난독화 4. VBA 분석 5. HWP 분석 6. PDF 분석 2022. 9. 13.
[1-13] PE파일 분석 2022. 9. 13.
[1-12] 인젝션 이해(코드 인젝션) 1. 코드 인젝션 - 인젝션 대상 프로세스에 DLL 파일을 삽입하는 것이 아니라 실행 코드와 데이터를 삽입한 이후 실행하는 방식이다. - 코드만 삽입하는 방식이므로 별도의 데이터가 필요한 경우 데이터를 같이 삽입해야 한다. - DLL 인젝션과 마찬가지로 인젝터가 필요하며, 인젝터는 다음과 같은 과정을 실시한다. 사용할 데이터 및 함수 구성 데이터 영역 인젝션 코드 영역 인젝션 원격 쓰레드 생성 및 실행 2. 코드 인젝션 특징 - DLL 파일 없이 인젝터에 의해서 인젝션이 가능하다. - 주로 작은 코드와 데이터를 인젝션할 때 용이하다. - 그리고 DLL 인젝션은 해당 프로세스에 인젝션한 흔적이 발견되지만, 코드 인젝션은 흔적을 발견하기 힘들다. 2022. 9. 13.
[1-11] DLL 인젝션 이해(DLL 인젝터 생성) 1. 인젝션 - 실행 중인 프로세스에 DLL 또는 코드를 강제로 삽입하여 프로세스에서 해당 코드가 실행될게 하는 것을 의미함 - 인젝션 유형 : 라이브러리 파일을 삽입하는 DLL 인젝션, 메모리에 영역에 코드를 직접 삽입하는 코드 인젝션 - 인젝션을 사용하는 사례는 다음과 같다. 프로그램 기능을 개선, 추가, 프로그램 오류 및 버그를 패치하기 위해서 자녀 보호 및 유해 사이트 접속 차단과 같은 실시간 감시 프로그램에서 사용함 메세지 후킹 및 AIP 후킹 기법에 사용 악성 코드 유포 2. 인젝션 방법 - DLL 인젝션을 하기 위해서는 인젝션을 수행하는 코드(DLL 인젝터)와 인젝션 코드가 필요하다. - 인젝션 코드가 독립적인 코드를 수행할 경우 하나의 별도 프로그램을 내부에 추가하여 동작한다. - 만약, .. 2022. 9. 13.
[1-10] 패킹&언패킹 분석 도구 : exeinfope, PEview, upx, OllyDbg 1. UPX 운영 체제에서 사용하는 실행 파일 압축/해지 프로그램 대략 60% 정도의 압축율을 제공한다. 2. 'Packing_1.exe' 파일 UPX 패킹 1) upx을 이용하여 'Packing_1.exe' 파일을 'Packing_1_pack.exe'으로 패킹한다. upx Packing_1.exe -o Packing_1_pack.exe 2) 'Exeinfope'를 이용하여 패킹/언패킹 유무를 확인한다. 3) 'PEview'를 이용하여 패킹/언패킹 PE 구조를 확인한다. - 원본 파일 -> SECTION .rdata -> IAT - 패킹 파일 -> SECTION . rsrc -> IAT (DLL/함수 전체 목록 확인 불가능) - 원본.. 2022. 9. 13.
[1-9] PE 파일 분석(API&DLL) 분석 파일 : user32.dll, lock_1.exe, lock_2.exe, lock_3_import.ext, lock_3_export.dll 분석 도구 : VS2008, PEview, CFF Explorer, Dependency Walker 1. API Application Programming Interface 운영체제, 프로그램 언어가 응용 프로그램에서 사용할 수 있도록 기능을 제공하는 인터페이스(함수) MSDN 문서 참조 2. 컴파일 모든 헤더와 소스 파일 내용을 합쳐서 하나의 기계어 코드를 생성하는 기능을 수행한다. 소스 코드에 오류가 있는지를 검사한다. 3. DLL Dynamic Linked Library 여러 프로그램에서 동시에 사용할 수 있는 코드, 데이터, 함수를 포함한 라이브러리이다... 2022. 9. 13.
[1-8] PE 파일 분석(IAT&Pre Binding) 1. IAT(Import Address Table) 'GetStartupInfoA' 함수 호출 주소값 찾기 DLL 파일이 메모리 상에 로드되는 주소값을 갖고 있는 테이블이며, 암시적 링킹에서 사용한다. 'calc(ASLR X).exe'를 올리디버거로 오픈하여 코드창에서 '0x01012D89' 주소로 이동하여 'GetStartupInfoA' 함수 주소(0x0100114C)를 확인한다. 메모리창에서 '0x0100114C'로 이동하여 저장된 주소값을 확인한다. 10 1E 46 76 -> 0x76461E10 'KERNEL32.dll'의 'GetStartupInforA' 함수를 호출할때, 직접 호출하지 않고 PE 로더가 프로그램 실행시 '0x0100114C' 주소에 저장된 함수 주소 값(0x76461E10)을 갖.. 2022. 9. 13.
[1-7] PE 파일 분석(PE 재배치) 1. PE 재배치 실행 파일이 로드될때 ImageBase에 다른 실행 파일이 로드되어 있다면, 중첩되는 문제가 발생된다. 이런 문제를 해결하기 위해서 로더는 ASLR 기능에 의해서 다른 주소를 찾아서 해당 주소로 실행 파일을 로드한다. 이때, 로드되는 주소가 변경되면 절대 주소 값을 변경된 주소로 수정되어야 한다. 이렇게 변경된 주소 정보를 '.reloc' 섹션에 저장하여 다른 실행 프로그램과 중첩되지 않도록 동작한다. 즉, PE 재배치는 프로그램에 하드코딩된 메모리 주소를 현재 로딩된 주소에 맞게 수정해주는 기능을 의미한다. DLL 파일이 로드될때 이미 그 주소에 다른 DLL이 로드된 경우, PE 재배치를 통해서 다른 주소에 로드된다. 2. PE 재배치 위치 확인 PE 재배치 위치를 확인하려면, 다음과.. 2022. 9. 13.
[1-6] PE 파일 분석(PE 바디-섹션) 1. '.text' 섹션 코드 영역 컴파일러/어셈블리가 최종적으로 생성하는 명령 코드, 실행 명령어들이 포함되어 있다. ──────── 0x01001000 .text 섹션 -------------------- 0x01053CA1 패딩 : 0x035F ──────── 0x01053FFF 2. '.data' 섹션 전역 변수, 정적 변수의 할당을 위한 영역이며, 읽기/쓰기 가능한 데이터가 포함되어 있다. ──────── 0x01054000 .data 섹션 -------------------- 0x010580C0 패딩 : 0x0F40 ──────── 0x01058FFF 3. '.rsrc' 섹션 프로그램이 사용하는 리소스(아이콘, 이미지, 추가 바이너리) 정보들이 포함되어 있다. ──────── 0x0105900.. 2022. 9. 13.
[1-5] PE 파일 분석(RVA to RAW) 1. RAW 파일이 실행되기 이전에 파일에서의 주소를 의미한다. 즉 File Offset(Pointer to RAW Data)를 의미한다. RAW = X_RVA - 섹션_RVA + Pointer to Raw Data 섹션_RVA 섹션 헤더 멤버의 RVA 주소 Virtual Size 메모리에서 차지하는 섹션의 크기(패딩/Null 포함) X_RVA 메모리에서 찾고자 하는 어떤 데이터의 주소 Size of Raw Data 파일에서 섹션의 크기(패딩/Null 포함) Pointer to Raw Data 파일에서 섹션의 주소 2. RVA to RAW 구하기 X_RVA=0x1000인 경우, RAW는? (메모리 RVA 0x1000에 있는 데이터는 파일에서 어디 주소에 있는가?) RAW = X_RVA - 섹션_RVA +.. 2022. 9. 13.
[1-4] PE 파일 분석(RVA to VA) VA = Imagebase + RVA RVA = VA - Imagebase 1. ImageBase PE 파일이 메모리에 로드되는 시작 주소 DLL/EXE 파일 -> User 메모리 영역인 '0x00000000 ~ 0x7FFFFFFF'에 로드 SYS 파일 -> 커널 메모리 영역인 '0x80000000 ~ 0xFFFFFFFF'에 로드 DLL 파일/윈도우 제공 EXE 파일 : 0x01000000 그 외 EXE 파일 : 0x00400000 2. VA 주소를 구하기 위한 요소 VA 메모리 상에 프로세스 절대 주소 Virtual Size 메모리에서 차지하는 섹션의 크기(패딩/Null 포함) RVA 메모리에서 찾고자 하는 어떤 데이터의 주소 Size of Raw Data 파일에서 섹션의 크기(패딩/Null 포함) P.. 2022. 9. 13.
[1-3] PE 파일 분석(섹션 헤더) 1. IMAGE_SECTION_HEADER 섹션 헤더는 각 섹션의 속성 정보들을 갖고 있는 구조체이다. 섹션이란 프로그램의 실제 내용(어셈블리 코드, 전역 변수, 정적 변수)을 담고 있는 영역을 의미한다. .text 프로그램 코드를 담고 있는 섹션, IAT 정보를 갖고 있음 .data 전역 변수, 정적 변수의 할당을 위한 섹션, 읽기/쓰기 가능한 데이터를 갖고 있음 .rdata 읽기 전용 섹션, 문자열, 상수 정보를 갖고 있음 .bss 초기화되지 않은 변수를 갖고 있는 섹션 .rsrc 아이콘, 커서, 추가 바이너리 등의 리소스 관련 정보를 갖고 있는 섹션 .idata Import 할 DLL/API 정보를 갖고 있는 섹션 .edata Export 할 DLL/API 정보를 갖고 있는 섹션 .reloc 재배치.. 2022. 9. 13.
[1-2] PE 파일 분석(PE 헤더) 분석 파일 : calc.exe 분석 도구 : PEview, HxD, CFF Explorer, OllyDbg 1. PE 구조 PE 헤더 : IMAGE_DOS_HEADER, MS-DOS Stub Program, IMAGE_NT_HEADERS, IMAGE_SECTION_HEADER PE 바디 : 실제 데이터 정보가 있는 영역(text, data, rsrc, reloc) 2. IMAGE_DOS_HEADER 64Byte(0x40)로 구성되어 있으며, 19개 필드로 구성되어 있다. PE 파일 시그니처와 IMAGE_NT_HEADERS의 위치 정보를 갖고 있다. e_magic : '5A4D' -> MZ -> PE 파일 시그니처를 의미한다. e_ifanew : IMAGE_NT_HEADERS의 위치를 의미한다. (0x00.. 2022. 9. 13.
[1-1] 리버싱 선수 지식 1. 실행 파일(Excutable File) 명령어에 의해서 특정 작업을 수행할 수 있도록 생성된 파일(Code, Data 포함되어 있음) Windows PE(Portable Exectable) Linux ELF(Excutable & Linkable Format) MAC Mach-O(Mach Object File Format) 2. 프로그램 & 프로세스 & 프로세서 & 쓰레드 프로그램 : 작업을 수행하기 위해서 명령어/데이터들이 포함되어 있는 실행 파일 프로세스 : 작업을 수행하기 위해서 메모리에 올라간 프로그램 단위 (Ex : 일꾼) 프로세서 : 메모리에 올라간 프로세스를 처리하는 CPU 쓰레드 : 생성된 프로세스에서 처리 및 흐름 과정을 담당하는 프로세스 안에 또 다른 프로세스 (Ex : 일꾼의 손 .. 2022. 9. 13.
[목차] 리버싱과 악성코드 분석 1. 리버싱 1-1. 리버싱 선수지식 1-2. PE파일 분석(PE 헤더, 섹션 헤더, RVA to VA/RAW, PE 바디-섹션, PE 재배치, IAT & Pre binding, API & DLL) 1-3. 어셈블리(레지스터 이해, 기본명령어 이해, 스택 프레임, 지역/전역변수, 구조체, 함수, 배열...) 1-4. 어셈블리(MOV, LEA, SUB, IMUL, IDIV, JE&JZ, JNE&JNZ, JLE, JGE, JL, JG, switch, for, while) 1-5. 패킹 & 언패킹, DLL 인젝션 이해(코드인젝션) 1-6. Lena 1-12 1-7. Lena 13-19 2. 악성코드 분석 2-1. 악성코드 선수지식 2-2. Backdoor.exe, downloader.exe, dropper.e.. 2022. 9. 11.