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

[IG-25-4009-O] 북한 Kimsuky그룹의 스피어피싱을 통한 악성 LNK파일 : Powershell 백도어 설치 및 RCE 공격 절차 분석 : Malicious LNK through spear phishing by North Korea's Kimsuky Group: Analysis of Powershell backdoor installation and RCE attack procedures

Classification
TLP:CLEAR
Release Date
2025/05/19
Writer
Jeongtae Kim
Editor
Bohyeong Son
Mihee Kim
Tags
악성코드
북한
Kimsuky
Konni
Malware
DPRK
2 more properties

1. 공격개요

○ 북한 해킹 그룹 Kimsuky가 스피어피싱을 통해 유포한 악성 LNK 파일 3건을 확보해 분석
C2의 포트(9992, 7648) 및 파일명, Google Drive 정보에 따라 2가지 유형으로 분류
○ 스피어피싱내 악성LNK를 통한 공격 시나리오(with 클라우드 스토리지)
1.
스피어피싱내 악성LNK파일 : .docx확장자와 아이콘으로 사용자 실행 유도
2.
클라우드 스토리지 이용한 정보 수집 및 정찰 : Dropbox와 Google Drive를 이용해 시스템 정보 탈취 코드 다운로드 및 실행 → 수집된 시스템 정보 업로드
3.
Powershell백도어로 추가 악성코드 실행 : C2에서 명령어를 즉시 혹은 반복 실행기능 있는 Powershell백도어 다운로드 후, Run레지스트리 및 작업 스케줄러 등록으로 지속성 확보 후 추가 악성코드 실행
4.
PebbleDash와 RDP Wrapper로 원격실행 : 최종 악성코드로 PebbleDash* 백도어와 오픈소스 원격 접속 도구 RDP Wrapper를 활용해 피해자 시스템 원격 제어 및 추가 악성 행위 수행
* 기문서 “[IG-25-4006-O] 북한발 PebbleDash 백도어 악성코드 분석 공유”에서 상세분석 확인 가능
[그림 1] 공격 흐름도

2. 대응방안

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

3. 스피어피싱을 통한 악성LNK 공격 유형

○ Kimsuky 그룹이 유포했다고 알려진 [표 1]의 악성 LNK 파일 3건을 확보하여 분석
No
MD5
파일명
1
8ac5d4d3a68ca82b190bceb8cf7cb07e
20250201_388165727.eml.lnk
2
8b541e4da55cb41e3304bda5ea568eb7
20250114_27263.docx.lnk
3
5e040663bbe55915a67f696a6aafb81a
20250206_68013.docx.lnk
[표 1] 확보한 LNK 파일 정보
○ 분석 과정에서 악성 LNK 파일들은 동일한 실행 과정을 가진 것으로 확인되었으나, [표 2]의 사용하는 C2의 Port와 생성 파일의 차이와 [표 3]의 사용하는 Google Drive 정보의 차이를 근거로 Type A와 Type B로 분류
Type
LNK 파일
IP(C2)
PORT(C2)
생성 파일(C2)
A
20250201_388165727.eml.lnk 20250114_27263.docx.lnk
74[.]50[.]94[.]175
9992
t.zip
B
20250206_68013.docx.lnk
74[.]50[.]94[.]175
7648
k.zip
[표 2] 유형별 사용된 C2 정보
Type
LNK 파일
folderId (Google Drive)
client_id (Google Drive)
client_secret (Google Drive)
A
20250201_388165727.eml.lnk 20250114_27263.docx.lnk
1m3Z22KdkwaiW8VTeeGbARdCcfCmoBRCy
71532697854-ef1nlsl4cjn4scm57dsf1685leiunavu.apps.googleusercontent.com
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
B
20250206_68013.docx.lnk
1lvY-PLtOkcA8clrQABWUWUMhRkgAsMsa
159263970130-1gil63rpicrhtbo4he4qvnfiks351oc4.apps.googleusercontent.com
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
[표 3] 유형별 사용된 Google Drive 정보

4. 악성코드 상세분석

4.1. 문서 위장 LNK 파일 - 악성 .ps1 파일 드롭 및 실행

○ 파일명에 .docx와 .eml 문자열을 포함하고 MS Word와 MS Outlook 아이콘을 사용한 악성 LNK 파일로 정상 파일인 것처럼 위장해 사용자가 파일을 실행하도록 유도
[그림 2] 정상 파일로 위장한 LNK 파일
○ 각 파일의 링크 대상과 명령어 인수 확인 결과, 모두 시스템 프로세스 mshta.exe를 사용해 동일한 동작을 하는 악성 자바스크립트를 실행하는 것으로 분석
[그림 3] LNK 파일별 링크 대상 및 명령어 인수
○ 악성 자바스크립트 명령어는 결과적으로 파워셀 명령어를 실행해 [표 4]의 파일들을 생성하는 [표 5]의 동작을 수행하는 것으로 분석
“생성 파일 1”의 경우, 악성 행위가 확인되어 본 문서에서 상세분석 제공
“생성 파일 2”의 경우, 모든 파일의 내부 데이터가 [그림 6]과 같이 단순 및 동일하고 이번 분석에서 확보된 샘플에서는 악성행위에 활용되지 않는 것으로 확인
No
LNK 파일
생성 파일 1
생성 파일 2
1
20250201_388165727.eml.lnk
p.ps1
b224
2
20250114_27263.docx.lnk
p.ps1
a1149
3
20250206_68013.docx.lnk
d.ps1
b261
[표 4] LNK 파일별 생성 파일 정보
단계
행위
1
파일 크기 정보를 사용해 자기 자신을 검색
2
파일 끝부분 데이터를 획득하여 %PROGRAMDATA% 폴더에 “생성 파일 1“을 생성
3
%PROGRAMDATA% 폴더에 “생성 파일 2”을 생성
4
“생성 파일 1“를 실행
[표 5] 악성 자바스크립트에 의해 실행되는 파워쉘 코드 동작 과정
[그림 4] 악성 자바스크립트에 의해 실행되는 파워쉘 코드
[그림 5] 악성 LNK 파일들의 끝부분에 존재하는 “생성 파일 1” 데이터 일부
[그림 6] “생성 파일 2”의 내부 데이터

4.2. 생성된 .ps1 파일 - 파일 다운로드 및 지속성 확보

○ 각 LNK 파일은 [표 6]과 같이 PS1 파일을 생성 후 실행
LNK 파일
PS1 파일
MD5
20250201_388165727.eml.lnk
p.ps1
f792d1864e7e92fe25daa73fe964bdea
20250114_27263.docx.lnk
p.ps1
ca9b8df227469c7e6d745cc267db80ba
20250206_68013.docx.lnk
d.ps1
11a100d560ebee05dd8467e5eb790c49
[표 6] LNK 파일별 생성 파일 정보
○ 생성된 PS1 파일들은 Base64로 암호화된 데이터와 복호화 코드가 난독화되어 있는 파워셀 스크립트 파일로 확인
[그림 7] 난독화된 파워쉘 코드 일부
[그림 8] 난독화되어 있던 Base64 암호화 데이터 일부
[그림 9] 난독화되어 있던 복호화 코드
○ 각 PS1 파일의 해시 값들은 상이했으나 난독화 해제 및 Base64 복호화를 통해 확인한 결과, 다운로드 C2, 사용 변수명, 생성 파일명 등의 차이만 있을 뿐 [표 7]과 같이 2개의 ZIP 파일, 1개의 PS1 파일 다운로드해 처리하는 동일한 동작을 수행하는 코드
LNK 파일
PS1 파일
C2
생성 파일
20250201_388165727.eml.lnk
p.ps1
https://www.dropbox.com/scl/fi/icvpzbx4vn6lcthva168z/zzJG.zip?rlkey=kntc36792grkm64xriqputbdq&st=px51yl8u&dl=1
gs.zip
74[.]50[.]94[.]175[:]9992
t.zip
74[.]50[.]94[.]175[:]7032
tmps3.ps1
20250114_27263.docx.lnk
p.ps1
https://www.dropbox.com/scl/fi/lpgj7eek9jczsx2ey83tk/zzG.zip?rlkey=lngmcnnjatzijm02oex219ffy&st=lwe8y29g&dl=1
gs.zip
74[.]50[.]94[.]175[:]9992
t.zip
74[.]50[.]94[.]175[:]7032
tmps3.ps1
20250206_68013.docx.lnk
d.ps1
https://www.dropbox.com/scl/fi/qde76i5ppqjdom9goxy9b/zzJG_2.zip?rlkey=g3mwyqarn84w0g7lnjq6awvgo&st=b9z4ng6j&dl=1
gs.zip
74[.]50[.]94[.]175[:]7648
k.zip
74[.]50[.]94[.]175[:]7032
tmps2.ps1
[표 7] LNK 파일별 다운로드 및 생성 파일 정보
[그림 10] 각 PS1 파일에서 확인한 유사 코드 일부
○ Dropbox에서 다운로드되어 gs.zip으로 생성되는 파일들은 이미 삭제된 상태로 확인되었으나, VirusTotal에서 해당 파일들을 확보하여 분석을 진행
[그림 11] 삭제된 Dropbox 파일
○ 확보한 파일들은 [표 8]과 같이 동일한 파일명을 가진 파일들 압축되어 있고, 모두 [표 9]의 과정을 따라 지속성 확보 및 실행되는 것으로 분석
Dropbox 파일
내부 파일
MD5
zzJG.zip
83972.tmp
e96157d3b82008c5e3142a57584678cb
G3892.tmp
99f9419d756729bc97d687f845d77783
zzG.zip
83972.tmp
2af6fb5bc3137eb297c6560e267d8193
G3892.tmp
9f1c9fc7aa773e7a86a79180c42887e1
zzJG_2.zip
83972.tmp
5fca1117c0e5ee6de3c169eebc903227
G3892.tmp
1e9d94d88fdac3c4a0a47a3a1d07e329
[표 8] gs.zip 압축 파일 정보
단계
행위
1
Dropbox에서 %PROGRAMDATA% 폴더에 gs.zip 파일 다운로드
2
%PROGRAMDATA% 폴더에 압축 해제
3
CMD 명령어를 사용해 83972.tmp를 2분마다 실행되도록 작업 스케줄러에 등록
4
CMD 명령어를 사용해 83972.tmp를 Run 레지스트리에 등록
5
G3892.tmp 파일 실행
[표 9] gs.zip 파일 처리 과정 (모든 PS1 파일에서 동일)
[그림 12] gs.zip 처리 코드 일부 (모든 PS1 파일에서 동일)
○ d.ps1 파일에서 74[.]50[.]94[.]175의 7628번 포트로 다운로드되는 k.zip은 C2가 닫혀있어 VirtusTotal를 통해 파일을 확보하여 [표 10]의 파일들이 포함된 것으로 확인
다운로드
내부 파일
MD5
k.zip
N9371.js
ae6ebf3fcde78bb6da37e302a2a579ee
tt8.tmp
3126dfaee1fc0c05f62bafcbbc49782d
38243.tmp
d916a1648c2de4c4e5f10fdc3f64d40d
nD9327.tmp
245d729238809b580179b70b7347cf65
[표 10] k.zip에 포함된 파일 정보
○ p.ps1 파일들에서 74[.]50[.]94[.]175의 9992번 포트로 다운로드되는 t.zip은 직접적인 내부 파일 확인은 어려웠지만, 코드 상에서 t.zip 내부의 M3762.js와 29184.tmp 파일이 사용된 것이 확인되었고 d.ps1과 p.ps1 코드의 유사성으로 보아 k.zip과 내부 파일이 유사했을 것으로 추정
다운로드
내부 파일
정보
t.zip
M3762.js
코드 상으로 존재가 확인
(?)
확인은 불가하였으나 존재했을 것으로 추정
29184.tmp
코드 상으로 존재가 확인
(?)
확인은 불가하였으나 존재했을 것으로 추정
[표 11] t.zip에 포함된 파일 정보(추정)
[그림 13] 코드 상으로 확인된 t.zip 내부 파일 일부
○ k.zip과 t.zip은 각 PS1 파일에서 동일한 [표 12]의 과정에 의해 Run 레지스트리와 작업 스케줄러에 등록되어 지속성을 확보하는 것으로 분석
단계
행위
1
74[.]50[.]94[.]175에서 %PRAGRAMDATA% 폴더에 k.zip(t.zip) 파일 다운로드
2
%PROGRAMDATA% 폴더에 압축 해제 후 k.zip(t.zip) 삭제
3
CMD를 사용해 N9371.js(M3762.js)를 Run 레지스트리에 등록
4
CMD를 사용해 38243.tmp(29184.tmp)를 2분마다 실행되도록 스케줄러에 등록
[표 12] k.zip과 t.zip 파일의 지속성 확보 과정
[그림 14] k.zip과 t.zip의 동일한 지속성 확보 과정
○ 무한루프를 통해 74[.]50[.]94[.]175의 7032번 포트에서 데이터를 다운로드하여 tmps2.ps1 또는 tmps3.ps1으로 저장한 후 실행하는 원격 파워셀 코드실행 기능이 모든 PS1 파일에서 동일하게 확인
[그림 15] 무한루프를 통해 원격 파워쉘 명령어를 실행 (모든 PS1 파일 동일)

4.3. 83972.tmp(gs.zip) - G3892.tmp 실행

○ 확보된 gs.zip에서 확인 가능한 83972.tmp 파일 3건에 대한 분석을 진행
Dropbox
내부 파일
MD5
zzJG.zip
83972.tmp
e96157d3b82008c5e3142a57584678cb
G3892.tmp
99f9419d756729bc97d687f845d77783
zzG.zip
83972.tmp
2af6fb5bc3137eb297c6560e267d8193
G3892.tmp
9f1c9fc7aa773e7a86a79180c42887e1
zzJG_2.zip
83972.tmp
5fca1117c0e5ee6de3c169eebc903227
G3892.tmp
1e9d94d88fdac3c4a0a47a3a1d07e329
[표 13] 확보된 gs.zip 압축 파일 정보
○ 83972.tmp들은 모두 반복 횟수의 차이만 있을 뿐 동일한 방식의 난독화가 적용된 문자열과 난독화 해제 코드가 존재하는 악성 자바스크립트 파일로 확인
○ PS1 파일에서 설정된 Run 레지스트리와 작업 스케줄러에 의해서 2분마다 실행
[그림 16] 83972.tmp 파일 내의 난독화된 문자열
[그림 17] 83972.tmp 파일 내의 난독화 해제 코드 일부
○ 모든 83972.tmp 파일의 난독화 해제된 문자열에 gs.zip의 G3892.tmp 파일을 실행하는 동일한 파워셀 코드가 존재하는 것으로 보아, 83972.tmp은 작업 스케줄러 및 Run 레지스트리에 등록되어 G3892.tmp 파일을 실행시키는 로더 역할의 파일로 분석
[그림 18] 문자열 난독화 해제 결과
[그림 19] G3892.tmp를 실행시키는 코드 (모든 83972.tmp에서 동일)

4.4. G3892.tmp(gs.zip) - 시스템 정보 수집 및 전송

○ 확보된 gs.zip에서 확인 가능한 G3892.tmp 파일 3건에 대한 분석을 진행
Dropbox
내부 파일
MD5
zzJG.zip
83972.tmp
e96157d3b82008c5e3142a57584678cb
G3892.tmp
99f9419d756729bc97d687f845d77783
zzG.zip
83972.tmp
2af6fb5bc3137eb297c6560e267d8193
G3892.tmp
9f1c9fc7aa773e7a86a79180c42887e1
zzJG_2.zip
83972.tmp
5fca1117c0e5ee6de3c169eebc903227
G3892.tmp
1e9d94d88fdac3c4a0a47a3a1d07e329
[표 14] 확보된 gs.zip 압축 파일 정보
○ 모든 G3892.tmp 파일들은 Base64로 암호화된 데이터와 복호화 코드가 난독화된 파워셀 스크립트 파일로 83972.tmp 로더에 의해서 실행
[그림 20] G3892.tmp 내부의 난독화된 문자열
[그림 21] 난독화되어 있던 Base64 암호화 데이터 일부
[그림 22] 난독화되어 있던 확인된 복호화 코드
○ 난독화 해제 및 Base64 복호화를 통해 확인한 결과, 각 파일은 [표 15]의 정보를 사용해 Google Drive의 AccessToken을 발급 받아 로그 파일 업로드 및 추가 파일 다운로드를 수행하는 것으로 분석
zzJG.zip와 zzG.zip에서 사용된 토큰 정보는 동일한 것으로 확인
파일명
사용 정보
데이터
G3892.tmp (zzJG.zip)
client_id
71532697854-ef1nlsl4cjn4scm57dsf1685leiunavu.apps.googleusercontent.com
client_secret
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
G3892.tmp (zzG.zip)
client_id
71532697854-ef1nlsl4cjn4scm57dsf1685leiunavu.apps.googleusercontent.com
client_secret
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
G3892.tmp (zzJG_2.zip)
client_id
159263970130-1gil63rpicrhtbo4he4qvnfiks351oc4.apps.googleusercontent.com
client_secret
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
[표 15] Google Drive 토큰 발급 시 사용되는 정보
[그림 23] Google Drive 토큰 발급 코드
○ 모든 G3892.tmp 파일은 실행 시작 후 [표 14]의 정보를 사용해 현재 시간이 포함된 로그 파일 ($userObj)_($curTime)_Result_log.txt를 GoogleDrive에 업로드하여 악성코드 실행을 공지
zzJG.zip와 zzG.zip이 사용하는 folderId와 objName 정보는 동일한 것으로 확인
파일명
사용 정보
데이터
G3892.tmp (zzJG.zip)
folderId
1m3Z22KdkwaiW8VTeeGbARdCcfCmoBRCy
objName
ttt
G3892.tmp (zzG.zip)
folderId
1m3Z22KdkwaiW8VTeeGbARdCcfCmoBRCy
objName
ttt
G3892.tmp (zzJG_2.zip)
folderId
1lvY-PLtOkcA8clrQABWUWUMhRkgAsMsa
objName
uuu
[표 16] Google Drive 로그 업로드 시 사용되는 정보
[그림 24] 로그를 업로드하는 코드 일부 (모든 G3892.tmp 동일)
○ 이후 Google Drive에서 [표 17]의 과정을 따라 특정 파일들을 검색하여 tmps4.ps1으로 다운로드 후 실행한 결과를 ($userObj)_($curTime)_result.txt로 업로드하는 것으로 분석
단계
행위
1
Google Drive에서 검색한 파일을 %PROGRAMDATA% 폴더에 tmps4.ps1로 다운로드
2
다운로드한 파일은 Google Drive에서 삭제
3
tmps4.ps1 실행 후 결과를 현재 시간을 파일명으로 %PROGRAMDATA% 폴더에 저장
4
실행 결과를 ($userObj)_($curTime)_result.txt 파일로 업로드
5
업로드 후 로컬에 생성했던 파일은 삭제
[표 17] G3892.tmp 동작 과정
[그림 25] 파일 검색 코드
[그림 26] 추가 파일 다운로드 및 실행 코드 일부
[그림 27] 결과 파일 업로드 코드 일부
○ zzJG.zip과 zzG.zip에서 사용했던 Google Drive 폴더는 내부 확인이 가능했으나, 실행 시작 관련 로그 파일만 확인 가능했고 추가적으로 다운로드 및 실행하는 tmp4.ps1과 관련된 파일은 이미 삭제되어 확인이 불가능한 상태
[그림 28] zzJG.zip과 zzG.zip에서 사용하는 폴더 내부
[그림 29] 실행 시작 로그 파일 내용
○ 하지만 kimsuky 그룹이 이전에 사용했던 악성 파워셀 스크립트(MD5: 85cdfd80e45269c30948dc642f4070a5)를 살펴보면 [표 18]의 시스템 정보를 탈취 후 Dropbox를 통해 업로드했던 이력이 존재
탈취 정보
마지막 부팅 시간
OS 제품명
OS 빌드넘버
OS 아키텍처
OS 버전
OS 설치 날짜
설치된 Anti-Virus 리스트
프로세스 리스트
PC 종류 (노트북/데스크탑)
[표 18] Kimsuky 그룹이 이전에 탈취한 시스템 정보
○ G3892.tmp 파일에 로그 업로드 부분만 존재하고 시스템 정보 탈취 부분이 없는 것으로 보아 Google Drive에서 다운로드된 tmps4.ps1은 시스템 정보를 탈취하는 파워셀 스크립트로 추정
[그림 30] Kimsuky 그룹이 이전에 사용한 파워쉘 스크립트 일부

4.5. N9371.js(k.zip) - tt8.tmp 실행

○ 각 PS1 파일에서 다운로드된 ZIP 파일 중 확보된 k.zip 파일에 대한 분석을 진행
“4.3 83972.tmp(gs.zip)”에서 설명한 파일과 동일한 난독화 기법이 적용된 자바스크립트 파일로 d.ps1에서 설정된 Run 레지스트리에 의해서 시스템 시작 시 실행
[그림 31] N9371.js 내부의 난독화된 문자열
○ 난독화 해제를 통해 확인한 문자열에 k.zip의 tt8.tmp 파일을 실행하는 파워셀 코드가 존재하는 것으로 보아, N9371.js 파일은 Run 레지스트리에 등록되어 tt8.tmp 파일을 실행시키는 로더 역할의 파일로 분석
[그림 32] 문자열 난독화 해제 결과
[그림 33] tt8.tmp를 실행하는 파워쉘 코드

4.6. tt8.tmp(k.zip) - 원격 코드 실행(즉시)

“4.2 d.ps1”에서 설명한 파일과 동일한 난독화 기법이 적용된 파워셀 스크립트 파일로 N9371.js 로더에 의해서 실행
[그림 34] tt8.tmp 내부에 난독화된 문자열
[그림 35] 난독화되어 있던 Base64 암호화 데이터 및 복호화 코드
“4.2 d.ps1”에서 설명한 tmps2.ps1 원격 코드 실행 기능과 유사한 [표 19]의 동작을 수행
단계
행위
1
“Vndu677”이라는 이름의 뮤텍스 생성을 통해 중복 실행 체크
2
이미 실행 중이라면 종료
3
실행 중이 아니라면 뮤텍스를 생성
4
74[.]50[.]94[.]175[:]7032에서 데이터를 읽어 %PROGRAMDATA% 폴더에 tmps2.ps1로 저장
5
tmps2.ps1 실행 후 삭제
[표 19] tt8.tmp의 tmps2.ps1 실행 과정
[그림 36] Mutex 체크 코드
[그림 37] 원격 코드 실행

4.7. 38243.tmp(k.zip) - nD9327.tmp 실행

“4.3 83972.tmp(gs.zip)”에서 설명한 파일과 동일한 난독화 기법이 적용된 자바스크립트 파일로 d.ps1에서 설정된 작업 스케줄러에 의해서 2분마다 실행
[그림 38] 38243.tmp 내부에 난독화된 문자열
○ 난독화 해제를 통해 확인한 문자열에 k.zip의 nD9327.tmp 파일을 실행하는 파워셀 코드가 존재하는 것으로 보아, 38243.tmp 파일은 작업 스케줄러에 등록되어 nD9327.tmp 파일을 실행시키는 로더 역할의 파일로 분석
[그림 39] 자바스크립트 문자열 난독화 해제 결과
[그림 40] nD9327.tmp를 실행하는 파워쉘 코드

4.8. nD9327.tmp(k.zip) - 원격 코드 실행(반복)

“4.2 d.ps1”에서 설명한 파일과 동일한 난독화 기법이 적용된 파워셀 스크립트 파일로 38243.tmp 로더에 의해서 실행
[그림 41] nD9327.tmp 내부에 난독화된 문자열
[그림 42] 난독화 해제를 통해 확인된 Base64 암호화 데이터와 복호화 코드
○ Base64 복호화를 통해 확인한 결과, 74[.]50[.]94[.]175[:]7031에서 데이터를 읽어 qos.ps1 파일을 생성해 실행하는 원격 코드 실행 기능으로 분석
무한루프를 통해 즉시 원격 코드를 실행할 수 있는 tt8.tmp 파일과는 달리 작업 스케줄러에 등록된 nD9327.tmp 로더에 의해 주기적으로 실행된다는 차이점이 존재
[그림 43] 원격 코드 실행

4.9. 최종 악성 코드 - PebbleDash, RDP Wrapper

○ Kimsuky 그룹은 스피어피싱으로 LNK 파일을 유포하여 파워셀을 통한 원격 코드 실행으로 PebbleDash 백도어 악성코드와 Github에 공개된 오픈소스 원격 접속 도구 RDP Wrapper을 사용해 피해자의 시스템을 원격으로 제어하는 것으로 알려짐
[그림 44] 오픈소스 원격 접속 도구 RDP Wrapper
○ 분석 과정에서 Kimsuky 그룹이 사용했다고 알려진 PebbleDash 백도어 관련 IoC 정보인 [표 20]을 확인하여 본 문서에 IoC 정보를 추가
- 확인 과정에서 3번, 4번 샘플은 기문서 “[IG-25-4006-O] 북한발 PebbleDash 백도어 악성코드 분석 공유”에서 분석한 샘플과 동일한 코드가 존재하는 유사 샘플로 확인
No
MD5
악성코드 종류
1
15dc6a28b875b4706bcc0db4a026aeb0
PebbleDash
2
7349683077ce4fcac77580848182ead9
PebbleDash
3
31345cc286bfb2b3edcee6c960f11c3f
PebbleDash
4
a573b15586e4313832f269b162a04514
PebbleDash
5
2c98bfc9f76352c82dc57edd98dce9a8
PebbleDash
[표 20] PebbleDash 관련 IoC 정보
[그림 45] 기문서[IG-25-4006-O]에서 분석된 샘플과 동일한 코드
○ PebbleDash 백도어는 [표 21]의 기능을 하는 것으로 알려졌으며 상세분석은 기문서 “[IG-25-4006-O] 북한발 PebbleDash 백도어 악성코드 분석 공유” 참고
No
기능
No
기능
1
드라이브 정보 탈취
7
파일 업로드(탈취)
2
프로세스 정보 탈취
8
파일 다운로드
3
시스템 정보 탈취
9
파일 속성 변경
4
파일 정보 탈취
10
파일 삭제
5
파일 및 디렉토리 정보 탈취
11
프로세스 실행
6
커맨드라인 명령 수행 및 결과 탈취
12
프로세스 종료
[표 21] PebbleDash의 주요 기능

5. IoC 정보

NO
Type
Data
Info
1
MD5
8ac5d4d3a68ca82b190bceb8cf7cb07e
20250201_388165727.eml.lnk
2
MD5
8b541e4da55cb41e3304bda5ea568eb7
20250114_27263.docx.lnk
3
MD5
5e040663bbe55915a67f696a6aafb81a
20250206_68013.docx.lnk
4
MD5
f792d1864e7e92fe25daa73fe964bdea
p.ps1 (...388165727.eml.lnk)
5
MD5
ca9b8df227469c7e6d745cc267db80ba
p.ps1 (...27263.docx.lnk)
6
MD5
11a100d560ebee05dd8467e5eb790c49
d.ps1 (...68013.docx.lnk)
7
MD5
0d6f3ce0c314e611f4e933dd6c17f2e3
zzJG.zip
8
MD5
42f2dbc68c6a4844474c695bf8000420
zzG.zip
9
MD5
c0375790762356a5652719b97a7b5602
zzJG_2.zip
10
MD5
e96157d3b82008c5e3142a57584678cb
83972.tmp (zzJG.zip)
11
MD5
99f9419d756729bc97d687f845d77783
G3892.tmp (zzJG.zip)
12
MD5
2af6fb5bc3137eb297c6560e267d8193
83972.tmp (zzG.zip)
13
MD5
9f1c9fc7aa773e7a86a79180c42887e1
G3892.tmp (zzG.zip)
14
MD5
5fca1117c0e5ee6de3c169eebc903227
83972.tmp (zzJG_2.zip)
15
MD5
1e9d94d88fdac3c4a0a47a3a1d07e329
G3892.tmp (zzJG_2.zip)
16
MD5
ae6ebf3fcde78bb6da37e302a2a579ee
N9371.js
17
MD5
3126dfaee1fc0c05f62bafcbbc49782d
tt8.tmp
18
MD5
d916a1648c2de4c4e5f10fdc3f64d40d
38243.tmp
19
MD5
245d729238809b580179b70b7347cf65
nD9327.tmp
20
MD5
15dc6a28b875b4706bcc0db4a026aeb0
(PebbleDash)
21
MD5
7349683077ce4fcac77580848182ead9
(PebbleDash)
22
MD5
31345cc286bfb2b3edcee6c960f11c3f
(PebbleDash)
23
MD5
a573b15586e4313832f269b162a04514
(PebbleDash)
24
MD5
2c98bfc9f76352c82dc57edd98dce9a8
(PebbleDash)
25
C2
https://www.dropbox.com/scl/fi/icvpzbx4vn6lcthva168z/zzJG.zip?rlkey=kntc36792grkm64xriqputbdq&st=px51yl8u&dl=1
zzJG.zip 다운로드
26
C2
https://www.dropbox.com/scl/fi/lpgj7eek9jczsx2ey83tk/zzG.zip?rlkey=lngmcnnjatzijm02oex219ffy&st=lwe8y29g&dl=1
zzG.zip 다운로드
27
C2
https://www.dropbox.com/scl/fi/qde76i5ppqjdom9goxy9b/zzJG_2.zip?rlkey=g3mwyqarn84w0g7lnjq6awvgo&st=b9z4ng6j&dl=1
zzJG_2.zip 다운로드
28
C2
74[.]50[.]94[.]175[:]9992
t.zip 다운로드
29
C2
74[.]50[.]94[.]175[:]7628
k.zip 다운로드
30
C2
74[.]50[.]94[.]175[:]7032
tmps2.ps1(tmps3.ps1) 다운로드
31
C2
74[.]50[.]94[.]175[:]7031
qos.ps1 다운로드

6. 참고자료

IGLOO Corp. 2025. All rights reserved.