서 론
Windows Atom Table과 APC(Async Procedure Call)을 활용하는 'AtomBombing' 코드 삽입기술에 대해서 살펴 볼 것입니다.
이 기법은 인젝션에 많이 사용되는 CreateRemoteThread(), WriteProcessMemory() 없이도 원하는 프로세스에 실행코드를 주입할 수 있습니다. 따라서 유저모드 API기반으로 인젝션을 탐지했다면, 많은 부분 우회를 할 수 있습니다.
본 론
AtomBombing 공격은 시스템레벨의 Atom Table을 이용합니다.
Atom Table이란? 어플리케이션들이 문자열 정보를 저장할 수 있도록 하는 윈도우 기능입니다.
Atom Table(Microsoft docs)
- An atom table is a system-defined table that stores strings and corresponding identifiers.
- An application places a string in an atom table
- A string that has been placed in an atom table is called an atom name.
위 그림처럼
악성코드가 Atom Table에 쉘코드를 넣고, 공격 대상 프로세스가 이 Atom Table을 읽게 만드는 것입니다.
[핵심]
구체적으로 설명드리면..
공격자가 GlobalAddAtom()[Atom Table에 문자열 추가하는 API]을 인젝션할 코드를 Global Atom Table에 추가한다.
( 그러면 모든 어플리케이션이 Atom Table에 접근할 수 있게 되겠죠? )
이후
공격대상 프로세스가 GlobalGetAtomName()을 호출해 쉘코드를 가져오도록 만듭니다.
[Q&A] 이때!!!!!!!!!!! 어떻게 공격대상 프로세스가 쉘코드를 가져오도록 만들까요???
-> 바로 APC쓰레드를 이용하는 것입니다.
APC Queue에 GlobalGetAtomName을 큐잉한뒤에 공격대상 프로세스가 이를 실행하도록 하는 것입니다.
QueueUserAPC()내부적으로 NtQueueAPCThread()를 실행하는데
NtQueueAPCThread()을 사용하여 큐잉해줍니다.!
( 그 이유는 맨 아래 참조 링크를 참고해주시길 바랍니다.^^ )
위의 내용을 코드로 정리해보자면
[요약]
Atom Table에 쉘코드를 넣고, 그 쉘코드의 주소를 APC Queue에 넣어줍니다. 그리고 공격 대상프로세스가 alertable state가 되면 쉘코드가 실행 되겠죠?????? 이러한 메커니즘을 통해 WriteProcessMemory() 없이도 코드인젝션이 가능하다.
* 여기서 끝난것이 아니다!!!!! *
이제 쉘코드를 실행시켜야하는데... 코드를 실행시키기 위해서 메모리의 RWE권한이 필요합니다.
즉, 우리가 Atom Table에서 가져온 Buffer는 DEP로 인해 실행할 수 없는 상태이고, 이 Buffer를 실행가능한 메모리 위치로 올려 옮겨주어야 한다는 것이다.
바로 ROP Chain을 이용해서 말이다.^^
www.reversenote.info/atombombing-stage2
위의 링크를 참조하면 훨~씬 더 이해가 빠를 것이다.^^
ROP Chain을 통해 쉘코드를 실행했다고 가정하자.
실행이 끝나면 ROP chain으로 인해 레지스터들이 엉뚱한 값으로 바뀌어져 있을 것입니다.
이를 원상복구 시켜주어야 합니다.
방법은 APC 함수를 실행하기 이전에 레지스터의 정보를 담고있는 Context구조체를 따로 저장해두고,
call 이 끝난뒤 다시 context를 가지고 와서 실행시켜주면됩니다.!
github.com/BreakingMalwareResearch/atom-bombing/blob/master/AtomBombing/main.cpp
'ETC' 카테고리의 다른 글
epoll을 사용한 I/O Multiplexing (0) | 2021.07.26 |
---|---|
DLL Hijacking Concepts of Organizing (0) | 2021.07.22 |
악성코드관련 멘토링 정리 (0) | 2021.06.15 |
APC Injection (비동기호출 인젝션) (0) | 2020.12.31 |
DKOM을 활용한 프로세스 권한상승 With Cheat Engine (0) | 2020.11.06 |