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 활용 시 주의 필요





























