tmxklab

Hooking (악성코드 관련) 본문

Security/07 Malware Technique

Hooking (악성코드 관련)

tmxk4221 2021. 4. 22. 01:08

0. 목차

1. Hooking

공격자가 코드(일반적으로 DLL, 이외에도 exe파일, 쉘 코드도 사용됨)를 정상 프로세스에 인젝션하는 이유는 Target Process의 API 호출을 후킹하기 위함이다. Target Process에 코드를 인젝션하면 프로세스 메모리에 모든 권한을 가지며 해당 컴포넌트도 수정할 수 있다. 프로세스 메모리 컴포넌트를 변경할 수 있는 기능을 사용하면 IAT에 있는 항목을 교체하거나 API 함수 자체를 수정할 수 있는데 이러한 기술을 후킹(Hooking)이라고 한다.

[Case Study] 루트킷의 오늘 1 : 2세대 루트킷
1. 루트킷의 어제 : 1세대 루트킷(2012년 2월호) 2. 루트킷의 오늘 1 : 2세대 루트킷(이번 호) 3. 루트킷의 오늘 2 : 3세대 루트킷(2012년 4월호) 4. 루트킷의 내일 : 차세대 루트킷(2012년 5월호) 지난 호에서는 1세대 루트킷에 대해 살펴보았다. 1세대 루트킷은 현재 통용되는 의미의 루트킷-보안 프로그램 또는 운영체제로부터 자신의 행위를 숨기기 위한 프로그램-으로 보기에는 어려운 부분이 있었다.
https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=19122

공격자는 API를 후킹함으로써 프로그램 실행 경로를 제어하고 악성코드로 경로를 재지정할 수 있다. 또한 다음과 같은 기능을 수행할 수 있다.

  • 정상 애플리케이션(보안 제품 등)의 API 호출을 차단
  • API로 전달되는 입력 파라미터를 모니터링하고 가로챔
  • API에서 반환되는 결과 파라미터를 필터링

1.1 IAT Hooking

IAT Hooking은 말 그대로 애플리케이션이 DLL에서 임포트한 함수를 포함한 IAT 항목을 후킹하는 것으로 공격 과정은 IAT를 찾아 후킹할 함수 항목을 식별한 뒤, 해당 함수의 주소를 악의적인 함수의 주소와 교체한다. 가장 단순하며 구현 방법이 쉬운 후킹이다.

예를 들어, 일반적으로 애플리케이션이 IAT에 존재하는 API함수를 호출하면 다음과 같다.

하지만, IAT Hooking이 된 경우 다음 그림과 같다.

IAT에 있는 정상적인 API함수의 주소를 악의적인 함수의 주소로 교체된다. 결국, 후킹된 정상적인 API함수를 호출할 때마다 악의적인 함수(악성코드)로 리다이렉션되고 악의적인 함수는 다시 원래 API함수 주소를 호출하여 정상적인 것처럼 보이게한다.

단점)

① DLL을 동적으로 로딩해서 사용하는 API함수는 후킹할 수 없다.

→ 예를 들면 내부 로직에서 LoadLibraryW("User32.dll")를 통해서 동적으로 User32.dll을 로딩하는 경우 해당 DLL의 API함수는 IAT를 참조하지 않기 때문이다.

② IAT 후킹은 쉽게 탐지됨

→ 후킹 기술을 탐지하고자 보안 제품은 해당 모듈의 주소 범위 밖에 있는 IAT 항목을 식별할 수 있으며 64bit 윈도우에서 커널패치보호(KPP, Kernel Patch Protection) 또는 패치가드(PatchGuard)라 불리는 기술은 IAT를 포함해 호출 테이블을 패치하지 못하도록 한다.

커널 패치 보호 - 위키백과, 우리 모두의 백과사전
커널 패치 보호(KPP : Kernel Patch Protection)는 비공식적으로 패치가드(PatchGuard)라고도 불리며 64비트 마이크로소프트 윈도우에서 커널을 패치하는 것을 막는 기능이다. 이것은 2005년 윈도우 XP x64 버전과 윈도우 서버 2003 서비스 팩 1에서 처음 도입되었다. "커널 패치"는 윈도우 운영 체제의 커널 또는 중앙 요소에 대한 지원되지 않은 수정을 의미한다.
https://ko.wikipedia.org/wiki/%EC%BB%A4%EB%84%90_%ED%8C%A8%EC%B9%98_%EB%B3%B4%ED%98%B8

→ 추가적으로 패치가드로 인해 커널단에서 후킹할 수 있는 SSDT(System Service Dispatch Table)후킹도 안된다고 한다.

→ 하지만 2017년도 기사보면은 고스트 훅이라는 기술을 통해 패치가드를 우회할 수 있다고한다.

패치가드 무력화시키고 커널 통제권 뺏는 고스트후크 공격
보안 및 성능 점검 위해 사용되는 기술...공격자가 가져가면 루트 권한 뺏겨마이크로소프트는 "패치할 만큼 심각한 위협 아니다" [보안뉴스 문가용 기자] 마이크로소프트의 커널 패치 보호 기술인 패치가드(PatchGuard) 덕분에 윈도우 10 64비트 시스템을 공격해 룻키트를 설치하는 것이 상당히 어려운 일이 되었다. 여태까지는 말이다. 하지만 보안 업체인 사이버아크 랩스(CyberArk Labs)의 전문가들이 이 패치가드를 무력화시키는 방법을 발견했다.
https://www.boannews.com/media/view.asp?idx=55427&kind=1

(이 부분은 나중에 따로 정리해야게따..)

IAT Hooking관련 자료) → example code도 있음

Import Adress Table (IAT) Hooking
IAT contains pointers to information that is critical for an executable to do its job: a list of DLLs it depends on for providing the expected functionality a list of function names and their addresses from those DLLs that may be called by the binary at some point It is
https://www.ired.team/offensive-security/code-injection-process-injection/import-adress-table-iat-hooking

1.2 Inline Hooking

인라인 후킹(Inline Hooking)이란 API함수 자체를 패치해서 API함수를 악성코드로 리다이렉션하는 방식이다. 인라인 후킹은 일반적으로 공격 대상 API함수가 호출되어 시작하는 몇 바이트를 악성코드로 분기할 수 있도록 코드 패치를 사용한다. 가장 널리 사용되는 방법으로 다음과 같은 여러 가지 다양한 옵션이 존재한다.

  • 처음 5byte를 JMP <ADDR> 명령어로 패치하는 방법
  • 함수 일부를 덮어쓰는 방법
  • 필요한 부분만 일부 변경하는 방법

위 옵션 중에서 JMP를 사용하는 방법에서는 jmp명령이 최소 5byte가 필요하므로 악성코드는 5byte 또는 그 이상을 차지하는 명령어를 선택하여 패치해야 한다. 다음 그림을 살펴보자

패치 하기 전 5byet 인스트럭션을 jmp를 통해 악의적인 함수로 패치하고 악의적인 함수의 인스트럭션에는 원하는 작업을 진행한 뒤 다시 패치하기 전의 원래 API함수의 인스트럭션과 원래 API 함수로 돌아가는 jmp명령어를 넣어 원래대로 돌아가게끔 한다.

위와 같이 API 함수의 시작 부분에 인스트럭션을 jmp명령어로 패치한 경우 탐지할 수 있지만, 시작 부분이 아닌 더 깊숙한 곳에 jmp명령어로 패치한 경우 탐지가 어려워진다.

관련 악성코드) - Zeus bot

1.3 In-Memory Patching using shim

  • shim을 통해 인-메모리 패칭을 사용해 코드를 인젝션하고 API 함수를 후킹하는 기술.
  • MS에서는 인-메모리 패칭 기술을 사용하여 제품의 취약점을 수정하기도 함

참고자료)

To SDB, Or Not To SDB: FIN7 Leveraging Shim Databases for Persistence
In 2017, Mandiant responded to multiple incidents we attribute to FIN7, a financially motivated threat group associated with malicious operations dating back to 2015. Throughout the various environments, FIN7 leveraged the CARBANAK backdoor, which this group has used in previous operations. A unique aspect of the incidents was how the group installed the CARBANAK backdoor for persistent access.
https://www.fireeye.com/blog/threat-research/2017/05/fin7-shim-databases-persistence.html
https://www.blackhat.com/docs/asia-14/materials/Erickson/WP-Asia-14-Erickson-Persist-It-Using-And-Abusing-Microsofts-Fix-It-Patches.pdf
http://files.brucon.org/2015/Tomczak_and_Ballenthin_Shims_for_the_Win.pdf

다음 링크는 리버싱을 통해 인-메모리 패칭 기능을 파악하고 분석하기 위한 도구임

evil-e/sdb-explorer
sdb-explorer is a tool that provides the ability to read and write Microsoft Fix-It In-memory patches, also known as SDB files. Note the version of apphelp.dll in Windows 10 does not include the function SeiApplyPatch. This was the function responsible for patching and flushing the instruction cache.
https://github.com/evil-e/sdb-explorer

관련 악성코드) - GootKit

커널 후킹이나 다른 후킹도 공부해서 추가하자

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

Obfuscation(encoding, crypto, packing)  (0) 2021.04.22
DLL Injection using shim  (0) 2021.04.22
다양한 인젝션 기술  (0) 2021.04.20
SetWindowsHookEx DLL Injection  (0) 2021.04.20
APC Injection  (4) 2021.04.19
Comments