Case of Using Phantom DLL Hijacking

1. 개요

이 글에서는 Phantom DLL Hijacking 기법을 활용한 침해사고 사례를 통해 주요 공격 기법과 이를 대응하기 위한 대응 전략을 설명하고자 한다.

최근 기업 내 엔드포인트 보안에 대한 중요성이 커지면서, 많은 기업이 엔드포인트 보안 솔루션(백신, EDR 등)을 도입하고 있다. 이로 인해 공격자들은 공격 과정에서 보안 솔루션의 탐지를 회피하는 기술을 필수적으로 활용하고 있다.

DLL Hijacking은 일부 Windows 애플리케이션이 동적 연결 라이브러리(DLL)를 검색하고 로드하는 방식을 악용해 악성 코드를 삽입하는 공격 기법으로, 공격자들이 보안 솔루션의 탐지를 우회하기 위해 자주 사용하는 방법 중 하나이다.

대표적인 DLL Hijacking 공격 기법으로 Search Order Hijacking, Relative path DLL Hijacking, Phantom DLL Hijacking, DLL redirection이 존재한다.

공격 기법 설명
Search Order Hijacking Windows 애플리케이션이 DLL 파일을 검색하는 순서를 악용해 악성 코드를 삽입하는 기법으로 가장 잘 알려진 DLL Hijacking 기법
Relative path DLL Hijacking Search Order Hijacking 기법의 변형으로 쓰기 권한이 있는 폴더에 정상 Windows 애플리케이션과 악성 DLL을 옮겨 놓고 실행해
악성 코드를 삽입하는 기법
Phantom DLL Hijacking Windows 애플리케이션에서 존재하지 않는 DLL 파일을 로드하는 것을 악용해 악성 코드를 삽입하는 기법
DLL redirection 레지스트리를 변경해 운영체제에서 DLL 파일을 검색하는 위치를 수정함으로써 악성 코드를 삽입하는 기법

이 중 Phantom DLL Hijacking은 최근 북한 라자루스(Lazarus) 그룹과 APT 41 등이 주로 사용하는 것으로 알려졌으며, 이로 인해 해당 기법을 활용하는 공격이 점점 많아질 것으로 보인다.

또한 MITRE ATT&CK 프레임워크에서도 Phantom DLL Hijacking을 새로운 서브테크닉으로 추가할 예정이라고 밝혀, 이에 대한 효과적인 대응 방안 마련의 중요성이 더욱 강조되고 있다.

2. Phantom DLL Hijacking이란?

Phantom DLL Hijacking은 Windows 운영체제의 애플리케이션이 시스템에 존재하지 않는 누락된 DLL(Phantom DLL) 파일을 로드하려는 동작을 악용해 악성 DLL을 실행시키는 공격 기법이다.

이 기법은 정상적인 Windows 애플리케이션이 정상적인 DLL 파일로 위장된 악성 DLL을 로드하도록 유도하기 때문에, 보안 솔루션에서 탐지하기 어렵다.

아래 표는 Phantom DLL Hijacking에서 주로 사용되는 프로세스와 DLL 경로이다.

구분 실행 프로세스 DLL 경로
서비스 IKEEXT Service(svchost.exe) - C:\Windows\System32\wlbsctrl.dll
- C:\Windows\System32\slbsctrl.dll
SessionEnv Service(svchost.exe) - C:\Windows\System32\TSMSISrv.dll
- C:\Windows\System32\TSVIPSrv.dll
Print Spooler Service(spoolsv.exe) - C:\Windows\System32\ualapi.dll
애플리케이션 msdtc.exe - C:\Windows\System32\oci.dll
msinfo32.exe - C:\Windows\System32\fveapi.dll
wmiprvse.exe - C:\Windows\System32\wbem\wbemcomn.dll
Narrator.exe - C:\Windows\System32\Speech\Engines\TTS\MSTTSLocEnUS.DLL
ImagingDevices.exe - C:\Program Files\Windows Photo Viewer\sti.dll

Phantom DLL Hijacking은 실행 방식에 따라 서비스를 활용하는 방식과 Windows 애플리케이션을 활용하는 방식으로 나뉘며, 각각의 동작에 차이점은 다음과 같다.

  1. 서비스를 활용하는 방식
    이 방식은 서비스와 연계해 악성 DLL을 실행한다.
    서비스의 시작 유형을 "자동"으로 설정하면, 시스템이 부팅될 때마다 악성 DLL이 자동으로 실행돼 별도의 공격자 개입 없이 지속적으로 악성 DLL을 실행할 수 있다.
  2. Windows 애플리케이션을 활용하는 방식
    이 방식은 Windows 애플리케이션을 통해 악성 DLL을 실행한다.
    공격자는 시작 프로그램이나 작업 스케줄러에 애플리케이션을 등록해, 애플리케이션이 지속적으로 실행되도록 추가 설정을 해야 한다. 이를 통해 사용자가 시스템에 로그인하거나 특정 작업을 수행할 때 악성 DLL이 실행되도록 할 수 있다.

두 방식 모두 보안 솔루션의 탐지를 우회하며 지속적으로 악성 DLL을 실행하는 데 사용되지만, 공격자의 추가 설정 부분에서 차이가 존재한다.

3. 침해사고에서 보는 Phantom DLL Hijacking

본 장표에서는 Phantom DLL Hijacking 기법이 실제 침해사고에서 어떻게 활용됐는지, 이를 중심으로 주요 공격 기법과 활용 사례를 설명한다.

공격자는 Phantom DLL Hijacking을 통해 악성 DLL을 로드하고, 명령 제어 서버(Command and Control, 이하 C2)와 지속적으로 통신했다. 이 과정에서 C2서버를 통해 시스템 정찰을 수행하고, 다양한 명령을 실행해 추가적인 공격 단계를 준비했다.

[그림 1] Phantom DLL Hijacking이 활용된 침해사고 개요도

피해 시스템들에서 공통적으로 작업 스케줄이 등록되어 있었으며, 해당 작업 스케줄은 정상 시스템 파일(msinfo32.exe)을 주기적으로 실행하도록 등록되어 있었다.

정상 시스템 파일(msinfo32.exe)이 실행되면 동일 경로에 위치한 'fveapi.dll' 파일을 호출하려고 시도한다. 그러나, 'fveapi.dll' 파일은 운영체제에서 제공되지 않는 파일로 기본적으로 시스템에 존재하지 않는다.

공격자는 이러한 점을 악용해 다음과 같은 방식으로 악성 행위를 수행했다.

  1. 작업 스케줄 등록: 정상 시스템 파일(msinfo32.exe)을 지속적으로 실행하도록 악성 작업 스케줄을 등록
  2. 악성 DLL 삽입: 'msinfo32.exe'와 동일한 경로에 악성 DLL(fveapi.dll)을 생성
  3. C2 통신 수행: 작업 스케줄에 의해 'msinfo32.exe'가 실행될 때마다 악성 DLL(fveapi.dll)이 로드되며, 이를 통해 명령 제어 서버(C2)와 통신
[그림 2] 악성 작업 스케줄 등록 내용

해당 사고에서 사용된 Phantom DLL Hijacking 공격 흐름을 정리하면 다음 그림과 같다.

[그림 3] 침해사고에서 사용된 Phantom DLL Hijacking 공격 흐름도

4. EDR에서 보는 Phantom DLL Hijacking

엔드포인트에서 발생하는 침해사고에 대응하기 위해 많은 기업이 EDR을 도입하고 있다. 이에 따라, Phantom DLL Hijacking 기법이 사용됐을 때 EDR에서 이를 어떻게 탐지하는지 확인해 봤다.

Phantom DLL Hijacking 테스트 시나리오는 '3. 침해사고에서 보는 Phantom DLL Hijacking'과 동일하게 구성했다.

  • 악성 작업 스케줄을 통해 정상 시스템 파일을 실행하고, 이 과정에서 악성 DLL 파일을 호출하도록 설정
  • 호출된 악성 DLL 파일은 'Metasploit'의 DLL 페이로드를 사용해 명령 제어 서버(C2)와 리버스 쉘을 연결하고 명령을 실행

또한, 테스트에서는 현재 백신에서 탐지되지 않는 악성코드를 Phantom DLL Hijacking 기법으로 실행하는 상황을 구성하기 위해 백신 및 EDR의 악성 파일 탐지 기능을 비활성화한 상태로 진행했다.

⚠️
테스트는 CrowdStrike Falcon EDR을 활용했으며, 호출되는 악성 DLL 파일과 EDR마다 탐지 방식의 차이가 존재할 수 있다.

Phantom DLL Hijacking 테스트 결과, 악성 DLL 파일이 정상 시스템 파일에서 호출하는 정상 DLL 파일로 위장해 실행되는 과정은 탐지되지 않았다. 그러나, 악성 DLL을 통해 원격에서 시스템 정찰 명령(netstat)을 수행하는 행위는 Incident로 탐지됐다.

[그림 4] CrowdStrike Falcon EDR에서 탐지된 netstat 명령 실행

탐지된 Incident의 프로세스 트리를 확인한 결과, 정상 시스템 파일(msinfo32.exe)에서 호출한 DLL 파일이 네트워크 연결 및 시스템 정찰 명령(ipconfig, quser, netstat)을 실행한 것을 확인할 수 있었다.

'msinfo32.exe'는 시스템 정보를 출력하는 정상적인 시스템 파일로, 일반적으로 네트워크 연결이나 명령 실행과 같은 행위를 하지 않는다. 따라서, 이러한 비정상적인 동작은 악성 행위로 판단할 수 있다.

[그림 5] 탐지된 Incident의 프로세스 트리

탐지된 호스트의 EDR 이벤트 로그를 분석한 결과, 'msinfo32.exe' 프로세스 생성 시점 이전에 'msinfo32.exe'가 호출하는 누락된 DLL(Phantom DLL) 파일인 'fveapi.dll'이 생성된 것을 확인할 수 있었다.

[그림 6] EDR 이벤트 로그에서 확인된 fveapi.dll 파일 생성 이력

'msinfo32.exe' 프로세스의 생성 원인을 확인하기 위해 EDR 이벤트 로그를 추가 분석한 결과, 해당 프로세스가 작업 스케줄을 통해 실행된 것을 확인할 수 있었다.

[그림 7] EDR 이벤트 로그에서 확인된 msinfo32.exe 프로세스 생성 원인

5. 대응 방안

1) 시스템 내 Phantom DLL 사전 확인

Phantom DLL Hijacking에 대응하기 위해서는 시스템에서 호출되고 있는 누락된 DLL(Phantom DLL)을 사전에 확인해 파악하는 것이 중요하다. 이를 통해 잠재적인 보안 취약점을 미리 식별하고 대응할 수 있다.

이를 위해, Sysinternals의 'Process Monitor'를 사용해 다음과 같은 3가지 필터를 설정하면 현재 시스템에서 호출되고 있는 누락된 DLL(Phantom DLL)을 확인할 수 있다.

No Column Relation Value Action
1 Operation is CreateFile Include
2 Result contains NOT FOUND Include
3 Path ends with .dll Include

아래 그림은 해당 필터를 적용한 상태에서 'msinfo32.exe'를 실행했을 때, 존재하지 않는 'fveapi.dll'를 호출하려는 파일 시스템 활동을 확인한 화면이다.

[그림 8] Process Monitor로 확인한 msinfo32.exe에서 누락된 fveapi.dll을 호출하는 이력

2) 호스트 위협 모니터링

Phantom DLL Hijacking에 대응하기 위해서는 시스템에서 확인한 누락된 DLL(Phantom DLL) 파일들이 실제로 생성됐는지, 이를 통해 악성 행위가 수행되고 있는지를 모니터링하는 체계적인 호스트 위협 모니터링 방안이 필요하다.

CrowdStrike Falcon EDR과 같은 엔드포인트 보안 솔루션을 활용하면, 주기적인 위협 모니터링을 통해 Phantom DLL Hijacking을 효과적으로 탐지할 수 있다.

Falcon EDR은 'Custom IOA rule'을 통해 사용자가 직접 공격 지표(IOA)를 탐지할 수 있는 룰을 구성할 수 있다. 확인한 누락된 DLL(Phantom DLL) 파일들을 생성하는 행위를 탐지할 수 있게 룰을 구성하고 주기적으로 탐지 이력을 확인해야 한다.

아래 그림은 'msinfo32.exe'에서 호출하는 'fveapi.dll' 파일 생성 행위를 탐지할 수 있도록 구성한 예시로, 'fveapi.dll' 파일 생성 시 'Custom IOA rule'에 의해 탐지 및 차단되는 것을 확인할 수 있었다.

[그림 9] Custom IOA rule을 통한 누락된 DLL(Phantom DLL) 탐지 화면

공격자가 Windows 애플리케이션을 활용해 Phantom DLL Hijacking을 수행할 때, 지속적으로 악성 DLL을 실행시키기 위해 시작 프로그램이나 작업 스케줄러를 추가로 등록해야 한다.

Falcon EDR은 'Scheduled tasks registered' 기능을 통해 시스템에 등록된 작업 스케줄러의 상세 내용을 확인할 수 있다. 아래와 같이 등록된 작업 스케줄러가 사용자가 등록하지 않았거나, 악성으로 의심되는 명령을 수행하는지 주기적으로 확인해야 한다.

[그림 10] Scheduled tasks registered를 통한 악성 작업 스케줄러 탐지 화면

Phantom DLL Hijacking을 통해 악성 DLL이 로드되는 초기 단계에서 탐지하지 못하더라도, 이후 호스트에서 발생하는 악성 행위를 위협 모니터링을 통해 탐지할 수 있다.

Falcon EDR은 'CrowdScore Incidents'를 통해 보안 이벤트 및 위협에 대한 심각성을 점수로 확인할 수 있고, 위협 이벤트와 연관된 전후 행위에 대한 이벤트도 같이 확인할 수 있기 때문에 악성 행위를 명확하게 판단하는 것이 가능하다.

[그림 11] CrowdScore Incidents 화면

6. 마치며

Phantom DLL Hijacking 기법은 정상적인 시스템 파일을 이용하기 때문에 정찰 및 초기 공격 단계에서 보안 솔루션의 탐지를 효과적으로 우회할 수 있으며, 지속성을 수립해 은밀히 활동할 수 있는 효과적인 공격 방식으로 활용되었다.

많은 기업이 여전히 호스트 보안 솔루션으로 백신만 도입하고, 실제 위협에 대한 지속적인 모니터링을 수행하지 않는 경우가 많다. Phantom DLL Hijacking은 단순히 단순히 보안 솔루션을 도입한다고 해서 완벽하게 대응할 수 없다. 최근 Phantom DLL Hijacking과 파일리스(Fileless) 공격이 증가하고 있기 때문에 단순히 백신으로는 위협을 탐지하기 쉽지 않다.

따라서, 모든 공격이 반드시 표면으로 드러나지 않기 때문에 침해(Compromise)가 사고(Incident)로 연결되지 않도록 호스트 위협 모니터링을 반드시 수행해야 한다.

또한, "공격자가 이미 기업 환경에 침투해 있는 것은 아닌가?"라는 의문을 해결해 주는 침해 평가(Compromise Assessment) 서비스도 존재한다. 해당 서비스를 통해 조직의 환경을 주기적으로 점검해 잠재적 위협에 대응하는 것을 권장한다.

침해 평가 - Services - PLAINBIT
플레인비트
You've successfully subscribed to PLAINBIT
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.