1. 인젝션
- 실행 중인 프로세스에 DLL 또는 코드를 강제로 삽입하여 프로세스에서 해당 코드가 실행될게 하는 것을 의미함
- 인젝션 유형 : 라이브러리 파일을 삽입하는 DLL 인젝션, 메모리에 영역에 코드를 직접 삽입하는 코드 인젝션
- 인젝션을 사용하는 사례는 다음과 같다.
프로그램 기능을 개선, 추가, 프로그램 오류 및 버그를 패치하기 위해서
자녀 보호 및 유해 사이트 접속 차단과 같은 실시간 감시 프로그램에서 사용함
메세지 후킹 및 AIP 후킹 기법에 사용
악성 코드 유포
2. 인젝션 방법
- DLL 인젝션을 하기 위해서는 인젝션을 수행하는 코드(DLL 인젝터)와 인젝션 코드가 필요하다.
- 인젝션 코드가 독립적인 코드를 수행할 경우 하나의 별도 프로그램을 내부에 추가하여 동작한다.
- 만약, 삽입된 인젝션 코드에 의해서 해당 프로세스에 문제가 발생하거나 함수 호출, 메세지, 이벤트와 같은 내용
들이 중간에 가로채기 또는 변조되면 이를 후킹이라고 한다.
- DLL 인젝터는 DLL 인젝션 대상 프로세스에서 코드가 실행될 수 있도록 다음과 같은 동작을 실시한다.
대상 프로세스 핸들 획득
대상 프로세스에 공간 확보
인젝션 DLL 이름 쓰기
라이브러리를 로드
원격 쓰레드 생성 및 실행
3. DLL 인젝션 단계
1) 인젝션할 프로세스 제어권을 획득한다.
- 프로세스에 DLL을 인젝션하려면 해당 프로세스에 대한 제어권 및 프로세스 아이디 정보가 필요하다.
- 이때, 'OpenProcess' 함수를 이용하여 프로세스 핸들을 획득해야 한다.
OpenProcess : 특정 프로세스에 대한 정보를 얻거나 제어를 하기 위해서 이미 실행중인 프로세스 핸들을 얻는 함수
2) 인젝션할 DLL 경로를 해당 프로세스에 기록한다.
- 프로세스 핸들을 획득하였다면, 프로세스가 사용하는 메모리에 내부에 접근이 가능해진다.
- 그럼 'VirtualAllocEx' 함수를 이용하여 DLL 경로 문자열 길이만큼 공간을 만들어주고, 'WriteProcessMemory' 함수를 이용하여 메모리에 DLL 경로를 기록한다.
- 이 과정이 완료되면 해당 프로그램이 실행될때 인젝션될 DLL 경로를 찾아서 DLL를 로드하게 된다.
VirtualAllocEx : 메모리(공간)를 할당하는 함수
WriteProcessMemory : 원격 프로세스로 데이터를 작성할 때 사용하는 함수
3) 기록된 DLL를 프로스세에서 로드하기 위한 작업을 실시한다.
- 'KERNEL32.dll'에서 지원하는 'LoadLibrary' 함수를 이용하여 DLL를 로드한다.
- 이때, 'LoadLibrary' 함수 주소를 모르기 때문에 호출이 불가능하므로 'GetModuleHandle' 함수를 이용하여 'KERNAL32.dll' 핸들을 획득한 이후, 'GetProcAddress' 함수를 이용하여 'LoadLibrary' 함수 주소를 획득한다.
- 이 과정이 완료되면 'LoadLibrary' 함수가 호출되면서 인젝션한 DLL이 프로세스 내부에서 실행된다.
GetModuleHandle : 이미 로드한 모듈의 핸들을 가져오는 함수
LoadLibrary : 프로그램 시작시에 로드하지 않은 프로세스의 DLL를 로드하는 함수
GetProcAddress : 메모리에 로드한 DLL에서 함수 주소를 검색하는 함수
4) 기록된 DLL을 원격 쓰레드 생성을 통하여 프로세스에서 로드한다.
- 'CreateRemoteThread' 함수를 이용하여 원격에서 프로세스 내부에 쓰레드를 생성 및 실행하여 쓰레드의 시작점으로 'LoadLibrary' 함수 주소를 삽입한다.
- 그럼 쓰레드 생성과 동시에 'LoadLibrary' 함수가 호출되면서 인젝션한 DLL이 프로세스 내부에서 로드된다.
CreateRemoteThread : 다른 프로세스의 가상 주소 공간에서 프로세스를 실행하는 함수
'메가IT아카데미 국기과정 > 리버싱과 악성코드 분석' 카테고리의 다른 글
| [1-13] PE파일 분석 (0) | 2022.09.13 |
|---|---|
| [1-12] 인젝션 이해(코드 인젝션) (0) | 2022.09.13 |
| [1-10] 패킹&언패킹 (0) | 2022.09.13 |
| [1-9] PE 파일 분석(API&DLL) (0) | 2022.09.13 |
| [1-8] PE 파일 분석(IAT&Pre Binding) (0) | 2022.09.13 |