본문 바로가기

System/TTPs

3. APC(Asynchronous Procedure Call) Injection

APC(Asynchronous Procedure Call)

https://so106037.tistory.com/363

 

APC (Asynchronous procedure call)

참고 # Windows 시스템 프로그래밍 제 3판 JOHNSON M. HART 저 # Micosoft 설명서 (링크) APC (Asynchronous procedure call) 1. 개념 - 인자를 전달받아 바로 호출하는 SPC(Synchronous Procedure Calls) 함수와 달리, APC 는

so106037.tistory.com

 

APC Injection

참고 및 출처: MITRE-ATT&CK

Techniques: Process Injection의 Sub-techniques

 

공격자들은 프로세스 기반 방어를 회피하고 권한을 높이기 위해 APC queue를 사용하여 악성코드를 프로세스에 인젝션할 수 있다. 


Techniques:​ Process injection

- 공격자가 목표에 대한 tactic을 달성하기 위한 방법

- Technique를 사용함으로써 발생하는 결과를 명시함

- Tactic에 따라 다양한 technique들이 존재 가능.

 

Tactics

- 방어 회피(Defense Evasion): 공격자가 침입한 시간 동안 탐지 당하는 것을 피하기 위한 행위 

- 권한 상승(Privilege Escalation): 공격자가 시스템이나 네트워크에서 높은 권한을 얻기 위한 행위

Mitigations

종단(Endpoint)에서의 동작을 방지하기.

엔드포인트 보안 솔루션을 통해 Process injection  중 발생하는 동작 순서를 기반으로 공격을 차단할 수 있다.

 


 

1. 전체적인 과정

1. 스레드의 APC queue에 악성 코드 등록

2. 스레드가 Alertable state가 되었을 때 대기중인 APC 함수 실행

이때, 타겟은 OpenThread와 같은 기본적인 Windows API 호출로 생성됨  //합법적 호출

3. QueueUserAPC를 이용하여 악의적인 함수 주입

 

​다른 프로세스의 컨텍스트에서 코드 실행 시 해당 프로세스의 메모리, 시스템 및 네트워크 리소스, 상승된 권한에 접근 가능하다.
APC 인젝션을 통한 실행은 합법적인 프로세스에서 실행되기에 보안 제품에서 탐지되는 것을 피할 수 있다.

 

 

2. QueueUserAPC()

DWORD QueueUserAPC (
 PAPCFUNC pfnAPC,    //대상 스레드가 호출할 실제 APC 함수를 가리키는 포인터
 HANDLE hThread,     //대상 스레드의 핸들
 DWORD dwDate        //APC 함수가 수행될 때 함수로 전달될 인수
);

- QueueUserAPC(): 감독 스레드가 대상 스레드에서 실행시키기를 원하는 함수를 대상 스레드의 큐에 등록하는 함수. (User Mode)
- dwDate 파라미터를 통해 APC 함수에 원하는 인자를 전달할 수 있음.
- 스레드는 User Mode APC 실행을 위해서 Alertable state에 있어야 함.
▶ APC Injection을 위해서는 Alertable state로 변환될 가능성이 있는 대상 스레드를 찾아야 한다.

 

[Alertable state로 전환시킬 수 있는 함수 목록]

· WaitForSingleObjectEx()

· WaitForMultipleObjectsEx()

· SleepEx()

· SignalObjectAndWait()

· MsgWaitForMultipleObjectsEx()

 

여기서 WaitForSingleObjectEx()는 윈도우에서 굉장히 자주 호출되는 함수이다.

이를 통해 Alertable state인 다수의 스레드를 찾을 수 있다.

 

[방법]

① 대상 스레드 식별자를 획득

② OpenThread() 통해 대상 스레드 핸들 오픈(식별자를 주어서)

③ pfnAPC와 함께 QueueUserAPC() 함수 호출

 

 

3. 실습하기 좋은 대상: svchost.exe

svchost.exe는 스레드가 Alertable State로 자주 전환되기 때문에 APC injection의 주 타겟이 된다.

악성코드 실행이 빠르게 이루어지도록 하기 위해 svchost.exe의 모든 스레드에 APC injection 수행할 수 있다.

 

 

4. Detection

Code inejection은 다양한 방식으로 이루어질 수 있다.

그렇기에 알려진 공격 패턴(호출 시퀀스)가 아닌 이상,  모든 Windows API 호출을 모니터링하는 것은 비효율적이다.

탐지는 특정 API 호출을 로깅하는 식으로 수행된다.

[주로 사용되는 API]

- SuspendThread()

- SetThreadContext()

- ResumeThread(), QueueUserAPC()

- NtQueueApcThread()

- VirtualAllocEx()

- WriteProcessMemory()


또는, 프로세스의 동작을 분석하여 탐지할 수도 있다.

- 프로세스가 N/W 연결을 열거나 파일 읽기 및 손상 등의 의심스러운 동작을 하는지 확인

- 일반적으로 수행되지 않는 작업을 수행하는지 확인

'System > TTPs' 카테고리의 다른 글

APC injection 실습 (2)  (0) 2023.03.31
APC Injection 실습 (1)  (0) 2023.03.30
DLL Hijacking 실습 (4) - 리버스 쉘  (0) 2023.03.30
DLL Hijacking 실습 (3)  (0) 2023.03.30
DLL Hijacking 실습 (1)  (0) 2023.03.29