서 론
2020 Defenit CTF에서 Malicious Baby문제를 풀면서 APC Injection이 사용되었다는 것을 알게 되었습니다.
rocess Hollowingc, injection, dll injection 등은 많이 봤는데, APC Injection??? 난생 처음 들어보는 injection 기법이었습니다. 그래서 공부해서 정리해 보았습니다.
기본적인 개념
먼저, 동기호출과 비동기호출에 관한 개념을 간단하게 집고 넘어가겠습니다.
쉽게 말하면 동기호출은 작업이 요청되는 순서대로 차근차근 진행되는 것입니다. 쓰레드는 운영체제 스케쥴링 알고리즘에 의해서 우선순위가 높은 순서대로 실행됩니다. 예를 들어 큐에 1 2 3이렇게 순서대로 있다고 하면 FIFO구조로 3 2 1 순서대로 쓰레드가 실행될 것입니다. 이것이 바로 동기 호출입니다. 단점은 많은 작업을 동시에 수행할 수 없습니다.
비동기 호출은 말 그대로 비동기적으로 호출하는 것입니다. 예를 들어 3번을 실행 중에 1번을 실행할 필요가 있습니다. 이것을 비동기 호출이라고 합니다. 다시 말해 어떤 스레드가 하부 작업을 요청하면 그 하부 작업이 완료되거나 리턴에 상관없이 스레드가 계속 실행이 되는 호출입니다.
(요청에 대한 결과가 동시에 일어나지 않고 요청을 한번에 다 받고 이벤트가 준비되었을 때 응답을 나중에 이루어짐)
APC는 Asynchronous Procedure Calls의 약자로 비동기 함수 호출이다.
APC Queue에는 실행될 비동기함수들이 있다.
APC Injection
1. QueueUserAPC 함수를 통해 쓰레드의 APC Queue에 큐잉을합니다.( 호출할 함수를 Queue에 넣습니다.)
2. 해당 쓰레드를 Alertable State로 만들어줍니다. ( = Sleep함수 사용 )
3. Queue에 있는 함수들이 실행됩니다.
[요약] APC Queue에 쉘코드를 넣고, 해당 쓰레드를 alertable state로 만들면 apc queue에 있는 쉘코드가 실행 되겠죠??
부가적인 설명을 드리겠습니다.
APC에 대한 APC Queue가 존재합니다. 각각의 쓰레드는 독립적이고, 쓰레드가 알람 가능한 상태(alertable State)가 되었을 때 Queue에 있는 함수들이 호출 됩니다.
우리가 해야할 일은 실행할 함수를 APC Queue에 넣는것입니다. QueueUserAPC를 사용하면 됩니다.
[ 중요 ]
alertable state는 그냥 sleep함수를 사용하면 호출이 되고, alertable 상태가 되어야 apc queue에 있는 함수가 실행된다. 라고 만 알면 될것 같습니다. 자세한 설명은 구글링^^\
쓰레드를 alertable state로 어떻게 만들 것인가???????????????
위와 같은 함수를 이용해 쓰레드를 alertable state로 만들 수 있다.
질문) 만약 Queue에 함수가 3개 있고, 이를 모두 호출하려면 lterable state가 3번되어야 하나?
-> 그렇지 않습니다. 한 번 alertable state가 되면 큐에 함수가 모두 실행되고 모두 비워집니다.
DWORD SleepEx( DWORD dwMilliseconds, //time-out interval BOOL bAlertable //true => alertable state ) |
bAlertable의 인자로 true를 주면 APC Queue에서 함수가 하나씩 호출된다.
위와 같은 형태를 띈다.
하단에 APC Injection 관련 자료들을 써놓겠다.
에필로그
사실.. 적고 나서 알았다. Defenit CTF에서 Malicious Baby문제가 APC Injection이 아니라
'Atombombing'이라는 기법이 사용 되었다는 것을.............................
하지만 Atombombing이라는 것을 공부하기 위해서는 APC Injectoin이 뭔지는 알 필요가 있다^^
참조.
APC Dll injection : github.com/fdiskyou/injectAllTheThings/blob/master/injectAllTheThings/t_QueueUserAPC.cpp
APC code Injection : www.ired.team/offensive-security/code-injection-process-injection/apc-queue-code-injection
'ETC' 카테고리의 다른 글
epoll을 사용한 I/O Multiplexing (0) | 2021.07.26 |
---|---|
DLL Hijacking Concepts of Organizing (0) | 2021.07.22 |
악성코드관련 멘토링 정리 (0) | 2021.06.15 |
Atombombing 기법 wtih Atom Table, APC (0) | 2020.12.31 |
DKOM을 활용한 프로세스 권한상승 With Cheat Engine (0) | 2020.11.06 |