블로그
home
Nation-State Cyber Actors Analysis Report
home
🇨🇳

[IG-25-4033-CLEAR] 중국 APT41그룹 ShadowPad 악성코드 분석(2차) : EXE, DLL, DAT 기반 ShadowPad 기능 및 행위 분석

Classification
TLP:CLEAR
Release Date
2025/07/09
Writer
GyeongRyeol Kim
Editor
Bohyeong Son
Mihee Kim
Tags
Malware
ShadowPad
APT41
AntiAnalysis
중국
Backdoor
Plugin
악성코드
2 more properties

1. 개요

○ 최근 중국 사이버 보안 회사 i-SOON에서 유출된 내부 문서에서 ShadowPad가 사용한 C2 인프라가 발견됨에 따라 APT41 그룹과의 연관성이 제기*되어 ShadowPad를 통해 중국발 사이버 공격 메커니즘을 통한 예방을 위해 관련 분석내용 공유
○ ShadowPad는 2015년에 PlugX* 악성코드의 후속으로 등장한 모듈형 백도어 악성코드로, APT41(Winnti) 그룹이 최초로 사용한 후 다양한 중국 기반 공격 그룹에서 사용되어옴
* PlugX: 중국 기반 APT 그룹(ex. Mustang Panda)에서 주로 사용하는 모듈형 백도어 악성코드
○ 본 문서에서 분석한 샘플은 EXE, DLL, DAT로 이루어져 정상 EXE 파일 실행 시 같은 폴더에 있는 DLL 파일이 사이드로딩되어 실행 → DLL 파일은 암호화된 DAT 파일 복호화 후 실행 → DAT 파일은 C2와의 통신을 통해 추가 모듈 로딩하여 악성행위 수행
[그림 1] exe, dll, dat 구성의 ShadowPad 실행 흐름도
샘플 종류
파일 구성
발견 시기
특징
1차
EXE, DLL
2020년
DLL 파일에서 ShadowPad 로드 및 실행 다수의 플러그인이 내장된 방식
2차
EXE, DLL, DAT
2021년
Loader(DLL), ShadowPad(DAT) 분리 C2와 통신을 통한 플러그인 로드 방식 1차 샘플보다 고도화된 난독화 적용
[표 1] 1차, 2차 샘플 특징 비교

2. 대응방안

○ C:\ProgramData 폴더에 평소에 존재하지 않던 폴더 혹은 파일 생성 여부 확인
○ Run 레지스트리 키 및 서비스 목록 확인하여 의심스러운 항목 제거

3. ShadowPad 정보

3.1. ShadowPad 공격 사례 및 진화 양상

○ ShadowPad는 2017년 넷사랑(NetSarang)의 공급망 공격 사례를 통해 알려졌으며, 중국의 APT41(Winnti) 그룹이 최초로 사용한 것으로 알려짐
현재는 APT41을 비롯한 중국계 공격 그룹(APT17, RedEcho, Aquatic Panda 등)에서 사용
시기
공격 그룹
공격 사례
2024
미확인
유럽·중동 기업 21개 사 이상 랜섬웨어 연계 공격
2023.07 ~ 2023.08
APT41(Winnti)
대만 정부산하 연구소 공격
2020 ~ 2021
RedEcho, RedFoxtrot
인도를 비롯한 중국 서부 인접 아시아 국가 항공우주, 방산, 통신사, 전력망, 정부 기관 등 공격
2019.11
APT41(Winnti)
홍콩 대학 2곳 이상 공격
2018.06 ~ 2018.11
APT41(Winnti)
ASUS Live Update 공격 (Operation ShadowHammer)
2017.08 ~ 2017.09
Axoim(APT17)
CCleaner 공급망 공격
2017.07
APT41(Winnti)
Netsarang 공급망 공격
[표 2] ShadowPad 악성코드가 사용된 공격 사례 일부
○ 사용되는 파일 구성은 크게 두 가지로 확인되며 분석을 방해하기 위한 기법이 고도화되고 있음
본 문서에서 분석한 ShadowPad 샘플은 2021년도에 발견된 샘플로, 세 개의 파일(EXE, DLL, DAT)을 드롭하여 실행하는 구조이며 ScatterBee의 난독화 기능이 발견
파일 구성
발견 시기
특징
EXE, DLL
2017년~
정상 EXE 실행 시 악성 DLL 사이드로딩 전용 DLL 로더가 ShadowPad 페이로드를 메모리에서 복호화 및 실행
EXE, DLL, DAT
2018년~
DLL이 암호화된 DAT 파일 복호화하여 로딩
[표 3] 파일 구성에 따른 ShadowPad 분류
적용 시기
분석 방해 기법
2017년~
간단한 RC4, XOR 기반 암호화 및 압축
2018년~
문자열 암호화, API 동적 로딩
2020년~
ScatterBee, ShadowShredder 등을 이용한 난독화 고도화
2022년~
ScatterBrain(ScatterBee의 진화형) 사용 안티 분석 및 VM 탐지 기능 고도화
[표 4] 시기에 따른 분석 방해 기법 진화 양상

3.2. 안티 분석 기법 - ScatterBee

○ 하나의 유의미한 어셈블리 명령어를 실행한 후 난독화 용도로 다수의 jmp 조건 명령어를 사용
○ 함수를 call 하고 return 시에 되돌아갈 위치가 담긴 스택 값을 바꾸는 함수를 이용해 디스어셈블러에서 다음에 실행할 명령어 흐름을 정적으로 파악하기 힘들도록 난독화
7FFD1D901ECA에서 함수를 call한 후 7FFD1D901ECF의 명령어가 실행되는 것이 자연스러운 흐름이지만, 실제로는 7FFD1D8FD38D의 명령어가 실행됨
[그림 2] 다음 실행할 명령어 위치 변경 메커니즘
[그림 3] 다음 실행할 명령어 위치 계산
○ 스택(rsp)이 가질 수 없는 아주 낮은 값과 비교한 후 그보다 낮으면 분기하는 조건을 만들어, 사실상 진행방향은 고정되어있지만 분석 시 헷갈리도록 구조 파악을 방해하는 난독화 기법 사용
[그림 4] jmp를 이용한 제어 흐름 난독화
○ API 함수로 사용할 문자열을 인코딩하는 알고리즘을 이용해 복호화한 함수명을 PEB를 통해 확인하여 함수 포인터를 동적으로 가져오는 방식
[그림 5] API 함수로 사용할 문자열을 인코딩하는 함수
○ 암호화된 데이터를 복호화하거나 반대로 복호화된 데이터를 암호화하는 동작이 발견되는데, 이때 데이터 주소, Key 생성에 사용할 시드, 암·복호화 여부 등을 인자로 전달받아 MD5 해시를 통해 AES 키 생성하여 암·복호화 수행하는 함수 이용
[그림 6] 페이로드 암·복호화 시에 사용하는 AES 기반 함수

4. 악성코드 상세분석

4.1. OLEVIEW.exe(MD5: 5f3093473ae4167fd51d4282fce73741) - Installer

○ 최초 파일은 리소스에 악성 파일을 가지고 있는 일종의 드로퍼 파일로 확인
[그림 7] 최초 exe 파일 기본 정보
○ 실행 시 관리자 권한을 요구하며, 드롭할 파일의 경로를 설정한 후 dll, exe, dat 파일을 드롭한 뒤 exe 파일 실행
exe에서 실제로 드롭되지는 않는 일부 파일명도 발견됨
[그림 8] 최초 실행 파일 실행 시 요구되는 관리자 권한
[그림 9] 드롭 파일 경로 설정
[그림 10] 악성 파일 Drop 과정
[그림 11] 드롭한 exe 파일 실행

4.2. IVIEWERS.dll(MD5: ad82d23accb10b4c0fc7f8c9782ae6ad) – ShadowPad Loader

○ 드롭한 실행 파일은 정상 파일로 확인되며, 악성 DLL이 DLL SideLoading 기법을 통해 실행
[그림 12] 실행파일(OLEVIEW.exe)에서 DLL 파일이 로드되는 과정
○ DLL 파일은 3.2. 안티 분석 기법에서 소개된 방식들을 이용하여 난독화된 상태로, PwC에서 제공하는 난독화 해제용 스크립트들을 활용하여 난독화 해제 후 분석 진행
○ DLL 파일의 목적은 Loader로, ShadowPad 모듈이 들어있는 .dat 파일을 찾아서 복호화 후 SOFTWARE\Classes\CLSID\<샘플별 고유값>에 복호화했던 .dat, exe, dll 등의 데이터들을 AES Key로 암호화하여 저장 후 .dat 쉘코드 실행
이번 샘플에서 확인된 CLSID 값은 {6E1DD2BB-CCCD-44E0-33EB-43286CE8A3E1}\AC2EFC66
[그림 13] ShadowPad 암호화 데이터를 레지스트리에 저장

4.3. IVIEWERS.dll.dat(MD5: 3db6f7535816e28dd55607d0a60ee9f2) - ShadowPad

○ 복호화된 .dat 파일 역시 3.2. 안티 분석 기법에서 소개된 방식들을 이용하여 난독화된 상태
○ 1차 분석에서 확인한 ShadowPad 샘플과 다르게 플러그인 내장 방식이 아니라, 핵심 기능만 들어있고 C2 통신을 통해 추가 플러그인을 받아와서 동작하는 구조로 추정
○ 1차 분석 보고서에서의 사례와 유사하게 최초 실행한 OLEVIEW.exe -> 이를 복제해서 실행한 wsuhost.exe -> Shadowpad를 Injection한 svchost.exe를 차례대로 실행하면서 동작
[그림 14] ShadowPad 프로세스 실행 과정
○ C:\ProgramData\DRM 폴더 하위 및 system32 폴더에 wsuhost.exe, IVIEWERS.dll 파일로 복사한 후, 서비스 실행을 통해 wsuhost.exe를 실행하고 최종적으로 system32 폴더의 svchost.exe 실행 후 프로세스 인젝션 수행하여 ShadowPad 실행
[그림 15] Injection을 위해 svchost.exe 실행
[그림 16] Injection 함수
○ 지속성 유지 및 실행을 위해 Windows_Search_Update 라는 이름의 서비스 및 Run 레지스트리 등록
[그림 17] 지속성 유지를 위해 서비스 등록된 ShadowPad
[그림 18] 지속성 유지를 위해 Run 레지스트리에 등록된 ShadowPad
○ 파일 복제 시에 CLSID를 제어판의 CLSID({21EC2020-3AEA-1069-A2DD-08002B30309D})로 조작한 desktop.ini 파일을 생성하여, 해당 폴더에 접근 시 원래 폴더가 아닌 제어판을 표시하도록 하는 은폐 기능 발견됨
desktop.ini 파일은 system, hidden, readonly 속성이 부여되어있어 속성 제거 후 확인
[그림 19] 제어판으로 위장된 악성 파일 위치 폴더
[그림 20] 폴더 접근 시 제어판 화면 표시
[그림 21] CMD로 확인 가능한 폴더 내부
[그림 22] 제어판 CLSID로 조작된 desktop.ini 파일
[그림 23] desktop.ini 파일 삭제 시 확인 가능한 폴더
○ C2 도메인에 DNS를 이용한 통신 시도 확인되나 연결 불가로 이후 과정 확인 불가
C2 통신을 통해 추가 플러그인을 받아와 메모리에서 실행하는 것으로 알려짐
GET, POST, CONNECT 메소드를 사용하는 것 관찰됨
[그림 24] C2 통신 과정

5. IoC 정보

No
Type
Data
Info
1
MD5
5f3093473ae4167fd51d4282fce73741
OLEVIEW.exe (Installer)
2*
MD5
8fdf8e4ecff114c1e6c9827c53742a1c
OLEVIEW.exe, wsuhost.exe (정상파일)
3
MD5
ad82d23accb10b4c0fc7f8c9782ae6ad
IVIEWERS.dll (Loader)
4
MD5
3db6f7535816e28dd55607d0a60ee9f2
IVIEWERS.dll.dat (Shadowpad)
5
C2
fljhcqwe[.]com:80
TCP
* 2번 파일의 경우 실행 과정에서 발견되어 기재했으며, 파일 자체는 정상파일이므로 IoC 활용 시 주의 필요

6. 참고자료

IGLOO Corp. 2025. All rights reserved.