APC(Asynchronous Procedure Call)
https://so106037.tistory.com/363
APC Injection
참고 및 출처: MITRE-ATT&CK
공격자들은 프로세스 기반 방어를 회피하고 권한을 높이기 위해 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 |