tmxklab

SetWindowsHookEx DLL Injection 본문

Security/07 Malware Technique

SetWindowsHookEx DLL Injection

tmxk4221 2021. 4. 20. 00:57

1. SetWindowsHookEx()

MS에서는 프로세스간에 주고 받는 메시지를 후킹할 수 있는 함수를 제공해주는 데 그것이 바로 SetWindowsHookEx()라는 함수이다.

idHook

  • 후킹하고자 하는 메시지의 ID(메시지 유형은 msdn에서 참고)
  • idHook 파라미터에 지정된 값의 이벤트(메시지)가 발생할 경우 훅 프로시저 동작

lpfn

  • 훅 프로시저에 대한 포인터

hmod

  • 훅 프로시저를 포함하는 DLL에 대한 핸들

dwThreadId

  • 훅 프로시저를 호출하는 스레드 식별자
  • 0이면 모든 스레드에서 훅을 호출

SetWindowsHookEx()를 통해 우리는 특정 후크 프로시저를 후크 체인에 넣을 수 있으며, 특정 이벤트 발생 시 특정 스레드(모든 스레드가 될 수 있음)에서 훅 프로시저를 호출할 수 있게 된다.

2. SetWindowsHookEx DLL Injection

앞서 SetWindowsHookEx()에 대한 내용을 살펴보면 짐작할 수 있듯이 악성코드가 SetWindowsHookEx()를 통해 특정 이벤트가 발생하면 악성 DLL을 타겟 스레드(모든 스레드가 될 수 있음)에서 로딩되는 방식이다.

3. 동작 과정

크게 Injector악성 DLL로 나뉘는데 차례대로 살펴보자

(참고로, 악성 DLL의 익스포트 함수A는 악의적인 기능을 수행한다.)

① Injector프로세스가 실행되고 LoadLibrary를 통해 악성 DLL을 자신의 주소 공간에 로드한다.

GetProcAddress를 통해 악성 DLL에 포함된 익스포트 함수A의 주소를 가져온다.

③ Injector는 악성 DLL 핸들과 함수A의 주소를 사용해 키보드 이벤트에 훅 프로시저를 등록하는데 이 때, SetWindowsHookEx()를 사용한다.

④ 결국, 애플리케이션에서 키보드 이벤트가 트리거되면 애플리케이션은 악성dll을 로드하고 함수A를 호출한다.

참고로 악성코드는 발생 가능한 이벤트가 있는 한 다양한 이벤트에 훅을 설정할 수 있으며 가장 중요한 점은 DLL이 타겟 프로세스의 주소 공간으로 로드되고 악의적인 작업이 수행된다는 것이다.

관련 악성코드)

Locky Ransomware, Trojan Padador

다른 참고자료에서 자세히 설명해주므로 직접 예제 코드로 테스트하는 것은 패스...

4. 참고자료

Hooking 관련)

윈도우 후킹 원리 (1) - User Mode
리버싱을 하는 데 있어 흔히 "Art of Reversing is an API Hooking"이라는 말과 같이 API 후킹은 리버싱의 꽃이라 일컬어진다. 어떤 윈도우 응용프로그램을 개발하기 위해서 우리는 다양한 종류의 언어나 도구를 사용할 수가 있다. 이런 언어나 도구를 사용하여 개발하는 방법은 다르더라도 결국, 개발된 프로그램의 내부로 들어가면 윈도우 운영체제가 제공하는 API를 호출한다.
https://kali-km.tistory.com/entry/Windows-API-Hooking-1-%E2%80%93-User-Mode-Hooking

SetWindowsHookEx DLL Injection관련)

10 가지 프로세스 인젝션 기술 - 일반적으로 유행하는 프로세스 인젝션 기법에 대한 기술적 조사
Elastic Security 사 블로그에 2017년 07월 19일에 올라온 "Ten process injection techniques: A technical survey of common and trending process injection techniques" 글을 한글 번역함. https://www.elastic.co/kr/blog/ten-process-injection-techniques-technical-survey-common-and-trending-process 프로세스 인젠션은 악성코드 및 파일 없는 공격자 트레이드크래프트(Fileless Adversary Tradecraft)에서 자주 사용되는 광범위한 방어 회피 기술이며 다른 프로세스의 주소 공간 내에서 사용자 지정 코드를 실행해야 함.
https://koromoon.blogspot.com/2020/09/10.html
SetWindowsHookEx DLL injection: My code and some questions. - Programming
SetWindowsHookEx DLL injection: My code and some questions. - posted in Programming: Hello everyone, I recently found an excellent article that covers the underlying principles of DLL injection using SetWindowsHookEx with a practical example so I decided to try it myself. Several things did bother me from the example in this article.
http://www.rohitab.com/discuss/topic/43926-setwindowshookex-dll-injection-my-code-and-some-questions/
War Room
The goal of DLL injection is to load a code into another running process' address space. So how exactly do we go about accomplishing that? It turns out there are a couple of ways to do so in Windows. We are first going to examine "SetWindowsHookEx," a method for creating hooks in Windows.
https://warroom.rsmus.com/dll-injection-part-1-setwindowshookex/

'Security > 07 Malware Technique' 카테고리의 다른 글

DLL Injection using shim  (0) 2021.04.22
다양한 인젝션 기술  (0) 2021.04.20
APC Injection  (4) 2021.04.19
악성코드 기능  (0) 2021.04.18
악성코드 지속메커니즘  (0) 2021.04.18
Comments