DLL Injection
1. DLL 인젝션
실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 삽입하는 기술
다른 프로세스가 LoadLibrary() API를 호출하도록 명령/유도하여 공격자가 원하는 DLL을 로딩하는 것
일반적인 DLL 로딩 vs DLL 인젝션
>로딩 대상(Target)이 되는 프로세스가 자신이냐, 아니면 다른 프로세스냐?
2. DLL 인젝션 활용
기능 개선 및 버그 패치
메시지 후킹
API 후킹
PC 사용자들을 감시하고 관리하기 위한 응용 프로그램
악성 코드
3. DLL 인젝션 구현 방법
1) 원격 스레드 생성(CreateRemoteThread() API)
2) 레지스트리 이용 (AppInit_DLLs 값)
3) 메시지 후킹 (SetWindowsHookEx() API)
코드 인젝션
1. 코드 인젝션
상대방 프로세스에 독립 실행 코드를 삽입한 후 실행하는 기법
> target 대상이 되는 프로세스에 코드와 데이터 삽입
1) 코드 형식 = 스레드(Thread) 프로시저 형식
2) 데이터는 스레드의 파라미터로 전달
>> 코드와 데이터를 각각 인젝션한다.
일반적으로 CreateRemoteThread() API를
이용하여 원격 스레드 형식으로 실행
> Thread 인젝션이라고 함
2.1 코드 인젝션을 사용하는 이유
구현/운영 시, 필요한 메모리 크기가 작다.
공격 흔적을 찾기 어렵다.
1) DLL 인젝션은 해당 프로세스 메모리에 인섹션 흔적(기록)을 남긴다.
2) Code 인젝션은 흔적을 남기지 않는다.
별도의 DLL 파일을 생성할 필요가 없다.
>> Code Injector 프로그램만 있으면 OK
DLL 인젝션 - 코드 인젝션
차이점
주입되는 내용
DLL 인젝션: DLL 파일
코드 인젝션: 실행 가능한 코드 자체
를 프로세스에 삽입한다.
복잡도
DLL 인젝션: DLL 파일을 준비하고 이를 로드시키는 과정이 필요
코드 인젝션: 직접 실행 코드를 메모리에 써넣는 방식
흔적 유무
DLL 인젝션: 해당 프로세스 메모리에 인섹션 흔적(기록) o
코드 인젝션: 흔적 x
'공부 > 리버싱 핵심원리' 카테고리의 다른 글
| 메모장 WriteFile 함수 후킹 (0) | 2024.06.01 |
|---|---|
| DLL 인젝션 (0) | 2024.05.21 |
| Windows 메시지 후킹 (0) | 2024.05.21 |
| 인라인 패치 실습 (0) | 2024.05.14 |
| UPX 언패킹 (0) | 2024.05.12 |