woonadz :)

[지속 기법] DLL Side-Loading 본문

IT/악성코드

[지속 기법] DLL Side-Loading

C_scorch 2024. 3. 6. 02:31
반응형

DLL Side-Loaing이란?

DLL Search Order Hijacking과 비슷하게 동작하지만 목적과 방법에 약간의 차이를 두고 있는 DLL Hijacking 기법입니다.

더보기

DLL Injection과 DLL Hijacking의 차이

Injection은 다른 프로세스 메모리에 외부 DLL 코드를 강제로 주입하여 악성코드를 실행시키는 것에 중점을 두고 있고, Hijacking은 프로세스가 실행될 때 검색하는 DLL 자체를 악성 DLL로 대체하여 실행시키는 것에 중점을 두고 있습니다.

가장 큰 차이점이라고 한다면 강제성 여부라고 생각합니다. 예를 들어, Hijacking은 a.dll 이라는 정상 dll을 로드해야하지만 a.dll의 이름으로 위장한 악성 dll을 정상인 dll(a.dll)로 생각하고 자연스럽게 로드하게 되는 것입니다.

 

DLL Hijacking은 정상 프로세스가 악성코드를 삽입된 악성 DLL 파일을 검색하고 로드하여 악성코드를 실행시키는 방식입니다.

DLL Search Order Hijacking는 Windows에서 정해둔 DLL 검색 순서를 악용한 방식으로 정상 DLL이 검색되기 이전에 악성 DLL이 먼저 검색될 수 있는 위치에 생성하여 로딩시키는 방식으로 동작합니다.

더보기

일반적인 Windows 시스템 DLL 검색 순서

  1. 실행할 애플리케이션이 존재하는 디렉터리
  2. 시스템 디렉터리(C:\Windows\System32 , SysWOW64)
  3. 윈도우 디렉터리(C:\Windows\System)
  4. 현재 디렉터리
  5. PATH 변수에 정의된 디렉터리

하지만 이러한 DLL Search Order Hijacking은 정상 DLL이 로드되어야 할 자리에 악성 DLL이 로드되기 때문에 정상 DLL에서 제공하는 함수 등의 리소스를 정상 프로세스에 제공할 수 없습니다. 그렇게 되면 정상 프로세스가 비정상적으로 종료될 것이고 공격자는 더이상 악성 행위를 하기 어렵게 됩니다.

이러한 문제를 해결한 정상 프로세스의 비정상적인 종료를 막을 수 있는 기법이 바로 DLL Side-Loading 기법입니다.

 

DLL Side-Loading 기법은 Proxy DLL을 이용하여 DLL Proxy Loading 기법이라고도 불립니다.

*Proxy DLL : 정상 실행파일에서 사용되는 DLL 로드 과정에서 함수 로딩 중 실행 흐름을 탈취하여 악성 DLL 또는 코드를 실행하게 하는 DLL

이러한 기법은 윈도우 SxS Manifest 파일이 로드될 때 SxS 어셈블리의 이름, 버전, 공개키 토큰 등을 명시적으로 기재해놓지 않은 경우, 이름이 같은 악성 DLL을 만들어 실행시킬 수 있습니다. SxS 어셈블리의 이름, 버전, 공개키 토큰 등을 명시적으로 기재해놓지 않는 경우가 조건이 되는 이유는 Windows는 이러한 경우에 DLL Search Order에 따라 DLL을 로드하게 되기 때문입니다. 만약 SxS 어셈블리의 이름, 버전, 공개키 토큰 등을 명시적으로 기재해놓은 경우, 지정된 DLL의 버전 종류와 코드 서명과 관련된 공개키 토큰이 다르기 때문에 로드가 거부됩니다.

 

SxS Manifest 파일은 아래와 같이 PE 파일 등에서 발견할 수 있습니다. (Pestudio, DIE 등 프로그램 사용)

SxS Manifest에 대한 더 자세한 설명은 아래 링크를 참조하시길 바랍니다.

https://learn.microsoft.com/en-us/windows/win32/sbscs/assembly-manifests

 

Assembly Manifests - Win32 apps

An assembly manifest is an XML file that describes a side-by-side assembly.

learn.microsoft.com

 

특히나 이 기법은 Microsoft에서 취약점으로 인정하지 않기 때문에 패치가 없습니다. 특정 DLL의 Side Loading은 패치가 되어 막혔지만, 다른 DLL을 사용하여 우회가 가능합니다.

 

아래 사이트에서 예시로 든 공격 과정을 바탕으로 추가 설명을 하겠습니다.

https://www.cybereason.com/blog/threat-analysis-report-dll-side-loading-widely-abused

 

THREAT ANALYSIS REPORT: DLL Side-Loading Widely (Ab)Used

This Threat Analysis Report explores widely used DLL Side-Loading attack techniques, outlines how threat actors leverage these techniques, describes how to reproduce an attack, and reports on how defenders can detect and prevent these attacks...

www.cybereason.com

 

1. DLL 사이드 로딩 취약점이 있는 실행 파일을 찾아, 합법적인 DLL과 동일한 이름을 가진 악성 DLL을 생성합니다.

2. 취약한 실행 파일에 대한 바로가기(LNK) 파일을 생성하고 악성 DLL과 취약한 실행 파일을 동일한 디렉토리에 패키징(압축)합니다.

*여기서 취약한 실행 파일은 SxS Manifest 파일에 DLL에 대한 정보가 제대로 설정되어 있지 않은 경우 등이 포함됩니다.

3. 악성 LNK 파일이 실행되면, 그 안에 포함된 명령어가 실행됩니다. 이 명령어는 주로 신뢰할 수 있는 실행 파일을 호출하고, 그에 따라 실행 파일이 실행됩니다.

 

 

Proxy DLL 생성 방법

저는 악성 Proxy DLL을 생성할 때 어떻게 정상 DLL의 기능을 포함하는지가 잘 이해되지 않아 그 부분을 더 설명해보겠습니다.

 

1. 취약한 실행 파일의 IAT 테이블에서 참조하는 DLL의 Export 함수 목록을 가져옵니다.

2. 악성 DLL에 포함될 악성코드를 작성합니다.

3. cURL, SharpDllProxy 등의 도구를 사용하여 Export 함수 목록을 리디렉션하고 추가로 작성한 악성코드를 포함한 Proxy DLL을 생성합니다.

 

Proxy DLL의 실행 순서를 다시 정리하면 아래와 같습니다.

 

정상 DLL의 이름 : abc.dll(기존) -> efg.dll(기존 dll 이름이 아닌 이름)

Proxy DLL의 이름 : abc.dll

Proxy DLL의 구성

                      - 실행파일에서 efg.dll Export 함수를 리디렉션하는 코드

                      - 악성코드

 

즉, 실행 파일이 정상 DLL로 위장한 Proxy DLL을 호출할 때, 코드 내부에서는 정상 DLL의 Export 함수를 불러와서 실행 파일의 요청에 응하고 추가한 악성코드까지 실행하는 것입니다.

 

 

이외에 더 자세한 설명은 아래 3개의 사이트를 참고하시면 도움될 것 같습니다.

https://redteaming.co.uk/2020/07/12/dll-proxy-loading-your-favorite-c-implant/

 

DLL Proxy Loading Your Favourite C# Implant

DLL Side-Loading or DLL Proxy loading allows an attacker to abuse a legitimate and typically signed executable for code-execution on a compromised system. Mitre has been keeping a log of this techn…

redteaming.co.uk

https://www.xn--hy1b43d247a.com/persistence/dll-sideloading

 

DLL 사이드로딩 (DLL Side-Loading) - 레드팀 플레이북

SxS 매니패스트 파일이 명시적으로 DLL의 이름, 버전, 공개키 토큰등을 기재해놓지 않은 경우, 윈도우 운영체제의 로더는 프로세스 생성/시작 시 운영체제의 DLL Search Order에 따라서 DLL을 로드하게

www.xn--hy1b43d247a.com

https://www.igloo.co.kr/security-information/dll-hijacking-part-2-dll-side-loading/

 

DLL Hijacking PART 2: DLL Side-Loading

01. DLL Hijacking PART 1: Search Order Hijacking 요약 ‘DLL Hijacking PART 1: Search Order Hijacking’을 통해 DLL Hijacking의 유형과 공격방식을 설명하고, DLL Hijacking 공격방식 중 하나인 Search Order Hijacking의 개념과 실

www.igloo.co.kr

 

반응형