MITRE [T1055] 프로세스 주입을 권한 상승 및 방어 회피 기법으로 정의합니다.
이 기법의 핵심은 신뢰할 수 없는 코드를 신뢰할 수 있는 프로세스의 주소 공간에 주입하여, 잠재적으로 방어 솔루션을 우회하고 해당 코드가 프로세스 소유자의 보안 컨텍스트를 상속받도록 하는 것이다.
프로세스 주입을 성공적으로 수행하기 위해 필요한 주요 단계.
1. 프로세스 내에 새로운 메모리 영역을 할당한다.
2. 쉘코드를 해당 영역에 복사한다.
3. 쉘코드를 실행한다
Basic Injection
기본적인 형태의 프로세스 인젝션은 VirtualAlloc, WriteProcessMemory 및 CreateThread API를 사용하는 방법이다.
이 방법은 실행 중인 프로세스에 쉘코드를 주입하여 실행 한다.
Remote Injection
기본적인 인젝션과 비슷하지만 프로세스의 프로세스 ID(PID)를 통해 해당 프로세스에 대한 핸들을 확보해야 하는 추가 단계가 필요합니다.
Thread hijacking
실행 중인 프로세스의 기존 스레드 실행 흐름을 가로채서, 공격자가 원하는 코드가 실행되도록 만드는 프로세스 인젝션 계열 기법 이다.
Asynchronous Procedure Calls
이 기법은 위와 유사하지만, 새로운 스레드를 생성하는 대신 기존 스레드에 비동기 프로시저 호출(APC)을 큐에 추가한다.
Sleep이나 WaitForSingleObject와 같은 API를 호출할 때)에 진입하면, APC가 가리키는 쉘코드가 실행 된다.
스레드에 APC를 큐에 넣으려면 해당 스레드의 핸들이 필요하며, 이를 위해서는 스레드 ID가 필요하다.
Early bird Injection
프로세스가 완전히 실행되기 전, 초기 스레드가 시작되는 타이밍에 APC 등을 이용해 코드를 먼저 실행시키는 프로세스 인젝션 기법이다.
Process hollowing
이 기술은 프로세스를 일시 중지 상태로 시작한 다음, 원래 PE를 메모리에서 매핑 해제하고 그 자리에 새로운 PE를 매핑하는 방식이다.
프로세스 할로잉의 중간 단계로는, 먼저 아무것도 매핑 해제하지 않는 채 PE의 진입점을 쉘코드로 간단히 덮어쓰는 방법이 있다.
프로세스가 재개되면, 프로세스의 주 스레드는 PE의 실행 코드 섹션 대신 우리의 쉘코드를 가리키게 된다.
MITRE [T1055]