블로그
home
Nation-State Cyber Actors Analysis Report
home
🇰🇵

[IG-25-4006-O] 북한발 PebbleDash 백도어 악성코드 분석 : DPRK PebbleDash Malware Analysis

Classification
TLP:CLEAR
Release Date
2025/05/08
Writer
GyeongRyeol Kim
Editor
Bohyeong Son
Mihee Kim
Tags
악성코드
PebbleDash
Backdoor
Kimsuky
DPRK
2 more properties

1. 개요

○ 북한발 해킹그룹이 사용하는 것으로 알려진 PebbleDash 악성코드 확보하여 기능 파악을 위해 분석 진행
PebbleDash는 과거 Lazarus 그룹에서 사용했으나 최근에는 Kimsuky 그룹에서 사용한 정황 발견됨
○ PebbleDash의 설정 데이터 작성, 지속성 유지 및 실행을 위해, 앞서 로더 등의 다른 악성코드를 실행하는 공격이 있었을 것으로 추정
Kimsuky 그룹은 스피어피싱 메일의 첨부 파일을 통해 악성코드를 유포하는 것으로 알려짐
○ PebbleDash는 백도어 악성코드로 C&C 서버와의 통신을 통해 정보 탈취, 명령어 실행 등을 비롯한 총 28가지의 명령을 수행
추가로 원격제어 또는 VNC 악성코드를 다운로드하여 실행하는 것으로도 알려짐
[그림 1] PebbleDash 악성코드를 사용한 예상 공격 흐름도

2. 대응방안

○ 메일 열람 시 발신자 메일주소, 첨부된 링크 및 파일 등 신중히 확인 필요
○ 악성 실행 파일은 문서로 위장한 경우가 많아 파일 실행 시 아이콘, 확장자, 유형 등 확인 필요
확장자 확인을 위해 “폴더 옵션 > 보기 탭 > 알려진 파일 형식의 파일 확장명 숨기기” 체크 해제 권장

3. 악성코드 상세 분석

3.1. advconf.dll (MD5: 31345cc286bfb2b3edcee6c960f11c3f)

○ DLL 파일 단독 실행이 불가능하기 때문에 이전에 초기 침투 및 과정이 있었을 것으로 추정
사전 공격에서 설정 데이터 및 지속성 유지 등록 과정 존재했을 것으로 추정되며 상세 내용은 후술
○ 실행 시 파일 내 숨겨진 페이로드를 XOR Key(0x3E)를 이용해 복호화하고 메모리 할당 후 복사해서 접근
[그림 2] 추가 페이로드 복호화 과정 (복호화 전)
[그림 3] 데이터 복호화 후

3.2. payload.bin (MD5: 815eabbaecd9b763d6c63f6a94c25ac0) - PebbleDash

○ 메모리에 할당된 추가 페이로드는 DLL 형식이며 악성행위는 스레드 생성을 통해 실행되는데, 분석 환경에서 스레드가 제대로 생성되지 않거나 실행 도중 종료되는 이슈가 발생하여 추출한 뒤 정적 분석 위주로 분석 진행
[그림 4] 추가 페이로드 DllMain 함수
○ 이번 파일에서 API 호출 등에 사용되는 문자열은 하드코딩된 문자열을 기반으로 한 치환 방식을 사용해 암호화되었으며, [그림 5]의 알고리즘을 통해 복호화하여 사용
이번 파일의 경우 문자열 복호화 시 key_index는 0x16, flag는 0으로 고정하여 사용
[그림 5] 문자열 치환(복호화) 함수 알고리즘
[그림 6] 암호화된 문자열 복호화 예시
○ PebbleDash 동작에 필요한 설정 데이터는 HKLM\SYSTEM\CurrentControlSet\Control\WMI\Security 레지스트리 경로에 GUID 값(9dda1ffas-7afc-9cs6-cc1d-8feaac5cdf764)으로 위장해 사용된 것으로 추정
레지스트리 등록 과정이 발견되지 않으며, 레지스트리 미 발견 시 종료하는 특징이 확인되어 사전 공격에서 레지스트리를 등록하는 과정이 있을 것으로 추정
GUID 형식에 사용할 수 없는 문자인 ‘s’를 사용한 특징 또한 발견됨
[그림 7] 레지스트리에 저장된 설정 데이터 검색 과정 일부
○ 현재 연결된 세션, 드라이브 수 검색하여 저장한 뒤 드라이브가 추가되는 경우(USB 연결 등) 동작하도록 설정하는 기능 발견됨
○ 설정 데이터에서 읽어온 C2 정보를 이용해 소켓을 구성해 연결 시도하며 5회 이상 연결되지 않을 시 종료
[그림 8] 레지스트리에 저장된 설정 데이터를 이용해 소켓 통신 설정
○ C2와 소켓 통신 성공 시 명령어를 수신하여 작업 수행
소켓 통신 시 송수신하는 데이터는 암·복호화 과정을 거치는데 이번 파일의 경우 AES128, Base64 등을 이용하였을 것으로 추정
[그림 9] 명령어 암·복호화 진행 부분
○ 일부 명령(0x20, 0x21, 0x22, 0x26)의 경우 HTTP 프로토콜을 이용한 통신이 발견되며, 아래의 쿼리 구조를 가지지만 실제 통신은 확인하지 못하여 기능 파악 불가
쿼리 구조 : page=<%d>mode=<%08x%d>DATA=<%s>
[그림 10] HTTP 통신 함수 일부
○ C2 통신을 통해 수신한 명령어에 따라 [표 1]의 28가지 동작 수행하며 일부 특이사항이 존재하는 명령만 [표 2]에 별도로 상세 설명 작성
명령
기능
명령
기능
0x09
드라이브 정보 탈취 (유형, 남는 공간, 볼륨 정보)
0x17
현재 작업 디렉토리 위치 설정
0x0A
프로세스 종료
0x18
파일 정보 탈취
0x0B
파일 다운로드
0x19
연결 유지
0x0C
파일 삭제 (일반 삭제)
0x1A
파일 및 디렉토리 정보 탈취
0x0D
파일 삭제 (파일을 NULL로 덮어씌운 뒤 삭제)
0x1D
파일 MAC 시간 및 파일명 변경
0x0E
시스템 정보 탈취 (hostname, adaptersinfo, computername, systeminfo, productinfo)
0x1E
파일 속성 변경
0x0F
프로세스 정보 탈취 (ProcessTimes, Module, TokenInformation, Sid, referencedDomainName)
0x1F
프로세스 실행
0x10
커맨드라인 명령 수행 및 결과 탈취 (No Window)
0x20
원격 데스크톱(RD) 세션 현재 상태 확인
0x11
커맨드라인 명령 수행 및 결과 탈취
0x21
RD 세션에 로그온된 사용자 토큰으로 명령어 실행
0x12
파일 MAC(Modification, Access, Change) 시간 변경
0x22
RD 세션에 로그온된 사용자 토큰으로 명령어 실행 (SYSTEM 권한 상승)
0x13
파일 업로드(탈취)
0x23
설정 데이터 확인
0x14
파일 업로드(탈취) 및 삭제
0x24
설정 데이터 수정
0x15
C2 통신 주기 설정 (입력 값)
0x25
소켓 비차단(논블로킹) 모드 전환
0x16
C2 통신 주기 설정 (입력 값 / 409680000000000h)
0x26
자가 삭제
[표 1] PebbleDash 명령(총 28개) 모음
명령
상세 기능
0x0D
“(0x0C) 파일 삭제” 기능과 다르게 파일을 NULL로 덮어씌운뒤 삭제하는 행위가 발견되는데 이는 파일 복구를 방해하기 위한 목적으로 추정
0x10
“(0x11) 커맨드라인 명령 수행 및 결과 탈취” 기능과 다르게 cmd.exe를 이용해 명령어를 실행할 때 CREATE_NO_WINDOW 옵션을 주어 콘솔 창 없이 실행
0x12
두 개의 파일 경로를 인자로 받아서 첫 번째 경로의 파일 MAC 시간을 두 번째 경로의 파일 MAC 시간으로 수정
0x1D
“(0x12) MAC 시간 변경” 기능과 다르게 단일 파일의 경로를 받아 직접 MAC 시간을 변경하며 PE 파일인 경우에는 TimeStamp도 수정
0x22
“(0x21) RD 세션에 로그온된 사용자 토큰으로 명령어 실행” 기능과 다르게 RD 세션에 로그온된 사용자의 토큰을 복사한 뒤 S-1-16-12288 sid(ML_HIGH)를 부여하는데, 이는 해당 사용자 세션의 무결성 수준을 System Integrity Level로 높여 SYSTEM 권한과 동일한 수준으로 작업 수행 가능하도록 함
0x25
소켓은 기본적으로 동기 방식인 차단 모드로 동작하기 때문에 데이터 송수신 및 연결이 완료되어야 다른 작업들을 수행할 수 있는데, ioctlsocket API에 FIONBIO 옵션을 주어 비차단 모드로 전환하여 비동기 방식으로 작업 수행 가능
0x26
레지스트리에 저장된 설정 데이터(HKLM\SYSTEM\CurrentControlSet\Control\WMI\Security의 9dda1ffas-7afc-9cs6-cc1d-8feaac5cdf764 값) 삭제 지속성 유지에 사용된 레지스트리(HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages)*에서 “advconf” 문자열 검색하여 삭제 advconf.dll 파일을 NULL 데이터로 덮어씌운 뒤 삭제 * LSA\Security Packages에 DLL 등록 시 시스템이 시작될 때마다 Lsass.exe에 DLL이 로드되어 동작하는 기능 악용. 해당 레지스트리는 사전 공격에서 등록했었을 것으로 추정
[표 2] PebbleDash 일부 명령 기능 상세 설명
○ 동적 분석이 이루어지지 않아 이후 과정은 직접 확인할 수 없었으나, 2021.11.16. 안랩에서 공개한 Kimsuky 그룹의 APT 공격 분석 보고서 (AppleSeed, PebbleDash)에 따르면 원격 제어를 위한 악성코드나 VNC 악성코드를 추가로 설치하여 공격하는 것으로 알려짐

4. IoC 정보

NO
Type
Data
Info
1
MD5
31345cc286bfb2b3edcee6c960f11c3f
advconf.dll
2
MD5
815eabbaecd9b763d6c63f6a94c25ac0
payload.bin
3
GUID
9dda1ffas-7afc-9cs6-cc1d-8feaac5cdf764
PebbleDash 설정 데이터 (레지스트리 HKLM\SYSTEM\CurrentControlSet\Control\WMI\Security)

5. 참고자료

IGLOO Corp. 2025. All rights reserved.