오늘은 북한 Kimsuky(김수키)에서 .NET·Angular 채용 담당자 노린 악성코드인 doc_2026-03-26_08-58-03.NetAngular.pdf.lnk 에 대한 악성코드를 분석을 해보겠습니다.
파일명:doc_2026-03-26_08-58-03.NetAngular.pdf.lnk
사이즈:1 MB
MD5:4d87fef16790cbe1df72007d99149665
SHA-1:6bd211981540cd167615e916847e383c5ddb4fbd
SHA-256:4d37b4ccd6e4c0c9de82e66e40dfb6412b92ea33bcf10442a290b0732eeadae0
해당 악성코드는 Coty Bertoglio의 .NET,Angular 중심 풀스택 개발자 이력서를 탈취했는지 만들었는지 모르겠지만, Angular+ASP.NET Core를 중심으로 React, SQL, AWS/Azure, CI/CD까지 폭넓게 경험한 시니어급 풀 스택 개발자 이력서를 미끼파일로 출력하는 악성코드입니다.
개발자인 것을 확인할 수가 있었습니다.

악성코드 분석
Type: Hangul Document 을 사용을 하지만 Google Chrome처럼 보임 이유 구글 크롬 이 설치 돼 있으며 아이콘 부분을 구글 크롬으로 지정해놓아서 이기 때문에….
1. 복호화
132 70 48 같은 숫자가 보일 것인데 해당 부분은 키 문자의 ASCII 값+103-암호화 정수=복원된 ASCII 코드
key[i] + 103부분 키 문자의 ASCII 값에 103을 더한 오프셋 가산(+103) 및 조건문 분기(if-else)를 혼합하여 보안 솔루션의 정적 패턴 탐지를 최대한 피하기 위함임
2. 악성 PowerShell 로드
A=65
65+103=168
168-132=36
ASCII 36=$
B=66
66+103=169
169-70=99
ASCII 99=c
이런 식으로 해서 PowerShell 코드가 나오게 돼 있으려 해서 PowerShell 스크립트의 은폐(Hidden Execution) 및 재실행을 하는 목적임 즉 악성코드가 실행되면 사용자 눈에 띄지 않도록 백그라운드 모드로 자신을 재실행하거나 창을 강제로 숨기기 위한 사전 검사 역할을 하는데 왜 버추얼박스에서 실행을 했을 때 관리자 권한을 요구했는지…….
3.복호화 후 파일 생성
복호화가 끝나면 바이트 배열을 문자열로 변경하고 경로를 생성하고 저장
예를 들면 %APPDATA%\firefox.ps1 같은 것임
복호화에 사용되는 키:AB59097(*^zxcvbn
이것도 정적 탐지 목적임
4.Google Chrome Firefox 위장
ProgramFiles%\Google\Chrome\Application\chrome(.)exe를 통해서 아이콘 사용

악성 스크립트를 저장할 때에는 firefox.ps1 저장
firefox.ps1 분석
미끼 문서 표시+관리자 권한 확보+지속성 등록+즉시 실행용 주기 실행용 페이로드 분리+자기 삭제까지 포함하고 있어 앞서 버추얼박스에서 실행 시 관리자권한 허용이 되는 이유를 알 수가 있습니다.
1.PowerShell 창을 숨긴 상태로 자기 자신을 다시 실행
현재 스크립트가 -WindowStyle Hidden 또는 축약형 -w Hidden으로 실행됐는지를 검사 그리고 자기 자신을 다시 실행하고 원래 프로세스를 종료합니다.
2.정상적인 관리자 권한 상승 요청
[Security.Principal.WindowsPrincipal]
[Security.Principal.WindowsIdentity]::GetCurrent()
관리자 권한 여부를 검사하고 Start-Process -Verb RunAs를 사용하여 UAC 권한 상승을 요청
3.GitHub 악용
복원 시
hxxps://raw(.)githubusercontent(.)com/TrungVo-dev/pdf1/main
보임
문자열이 그대로 노출되는 것을 피하려는 난독화c
사용자에게 보여줄 부분
view.pdf:%TEMP%\doc_2026-03-26_08-58-03.NetAngular.pdf->사용자에게 표시할 미끼
1.txt:%APPDATA%\bpvme.ps1->최초 감염 직후 실행
2.txt:%APPDATA%\coks.ps1->Scheduled Task를 통해 반복 다운로드/실행
GitHub Repository는 여기서 Payload staging 서버 역할을 하면 $tkf="ghp_...으로 GitHub Personal Access Token 형식으로 보이는 것이 보임
4.미끼 파일 사용자에게 노출
doc_2026-03-26_08-58-03(.)NetAngular.pdf 를 만들고 실제 PDF를 내려받아서 사용자에게 보여줍니다.

5.wale.ps1+whale.vbs를 활용한 지속성 확보
악성코드는 다음 부분에 파일을 생성
%APPDATA%\wale.ps1
%APPDATA%\whale.vbs
PowerShell 자체의 Hidden 옵션+WScript의 숨김 실행을 동시에 사용
6.wale.ps1 역할
wale.ps1 자체에 최종 기능을 넣지 않고, 매번 서버에서 2.txt를 다시 다운로드 하게 만들어 놓음
7. 작업 스케줄러 등록
OneDrive Reporting Task-WORD-1-4-21-53529385-53453634-535436459-55601 이름으로 등록 이 되면 등록 5분 후 첫 실행 이후 60분마다 whale.vbs 부분을 반복 실행되게 설정돼 있음
8. 첫 감염자에게 bpvme.ps1 실행 및 삭제
1.txt->bpvme.ps1:최초 감염 시 즉시 실행
2.txt->coks.ps1:Scheduled Task를 통한 반복 실행

bpvme 분석
해당 코드는 호스트 정찰(Host Reconnaissance)+GitHub를 이용한 정보 유출+흔적 삭제를 통한 증거 없애는 코드입니다.
1.수집 파일 된 AppData의 Microsoft 디렉터리에 저장
일반적인 경로 C:\Users\(USER)\AppData\Roaming\Microsoft
공격자가 임의의 이상한 디렉터리를 만들지 않고 정상 Windows 환경에서 흔히 존재하는 Microsoft 디렉터리를 사용한다는 점
2. 피해자 식별에 IP와 현재 시각을 사용
192(.)168(.)0(.)1-0708_1305-0956_info.txt 형태가 됩니다.
즉 별도의 UUID나 Bot ID 대신 IP+감염, 실행 시간+고정값 0956 을 보고서 식별자로 사용하는 단순한 구조로 사용을 하고 있습니다.
0956 은 코드에서 계산되지 않는 고정값
캠페인 ID, 제조 번호, 작성자가 멋대로 붙인 표식 등의 가능성
첫 번째 IP만 사용하기 때문에 VPN,VMware,Hyper-V,다중 NIC 환경에서는 공격자가 원한 주소가 아닌 값이 수집됩니다.
3. 마지막 부팅 시각
최초로 파일을 생성 -Append 가 없기 때문에 기존에 같은 이름의 파일이 있다면 내용을 새로 쓰게 됩니다.
공격자가 얻는 정보 LastBootUpTime 입니다. 즉 컴퓨터 장시간 실제 사용 중인 PC인지 최근 부팅된 시스템인지 등을 판단하는 정찰 목적
4.Windows 버전과 아키텍처 확인

수집되는 항목
Caption:Windows Edition
Version:OS Version
BuildNumber:Windows Build
OSArchitecture:32,64비트
공격자는 후속 페이로드의 OS 호환성이나 x86,x64 여부 등을 판단
5.Win32_ComputerSystem 까지 수집
WMI 객체를 그대로 출력
PowerShell의 기본 포맷에 따라 시스템 이름, 제조사, 모델, 도메인/작업 그룹, 메모리, 사용자 관련 정보 등이 보고서에 포함
6.노트북 인지 확인
PCSystemType == 2 는 Mobile 계열
공격자는 이를
Note->Notebook/Mobile
Desk->그 외처럼 구분하고 해서 정보 수집
2가 아닌 모든 값을 Desk로 처리하기 때문에 Workstation이나 Server 등의 시스템을 정확히 분류하지는 못함
공격 코드가 매우 정교하게 작성된 것은 아닌 방구석에서 만들었을 가능성이 큼
7.Windows 설치 날짜 수집
Windows가 설치된 시각도 보고서에 포함 새롭게 만들어진 분석 VM이나 테스트 환경은 설치 날짜가 최근일 수 있기 때문에 공격자에게는 참고 자료가 될 수 있습니다.

8.가장 핵심 백신 제품 탐색
피해 시스템에 설치된 AV 제품명을 확인
공격자 수집된 정보를 통해서
Microsoft Defender,AhnLab,ESET,Kaspersky
등을 구분할 수 있으며 이후 사용할 공격 방법을 결정하는 참고 정보로 사용
9. 실행 중인 프로세스를 통째로 수집
현재 실행 중인 프로세스 목록 전체를 기록
공격자는 Process List만으로도 간접적으로 다음을 확인 가능합니다.
AV/EDR
VPN
디버거
Process Explorer
Sysinternals 도구
브라우저
원격관리 솔루션
보안 에이전트
개발 도구 등이 실행 중인지 파악해서 피해 시스템을 후속 공격 전에 프로파일링 하려는 목적
10.GitHub API 주소 문자열 분할
다음 URL:
htt"(+)"(p)s"(+)":/"(+0"/(a0" (+) "pi(.)g" (+) "i(t)h" (+) "ub(.)com/re"
를 합치면
hxxps://api(.)github(.)com/re 이 되며 가 됩니다.
최종 URI
hxxps://api(.)github(.)com/repos/TrungVo-dev/pdf1/contents/report/(파일명)
11.보고서를 Base64로 변환
Base64는 단순히 내용을 숨기기 위한 것이 아니고 GitHub Contents API를 통해 파일 콘텐츠를 전송하기 위한 목적
12.GitHub Contents API를 Exfiltration 채널로 사용
HTTP PUT 으로 GitHub Repository에 새로운 파일을 생성하는 방식을 사용하고 흔적을 남기지 않으려고 삭제 처리해버림
수집 정보
Network IP
Windows Version,Build,Architecture
Last Boot Time
OS Install Date
Computer System information
Mobile/Desktop
Installed Antivirus
Running Processes
분석된 PowerShell은 감염 시스템의 IP 주소를 식별자로 사용해 운영체제 버전과 빌드,시스템 아키텍처, 마지막 부팅 시각, Windows 설치 시각, 시스템 유형, 설치된 백신 제품 및 실행 프로세스를 수집하며 수집 결과는 %APPDATA%\Microsoft 디렉터리에 일시적으로 저장되고 Base64로 변환 하드코딩된 GitHub 인증 정보를 이용해 GitHub Contents API의 PUT 요청으로 Repository의 report 경로에 업로드
전송이 끝나고 수집 파일과 현재 실행 중인 PowerShell 스크립트를 삭제하며 해당 스크립트는 후속 공격을 위한 Host Profiling과 GitHub 기반 정보 유출을 담당하는 정찰 목적으로 사용
결론은 정보 수집 후 나중에 해당 감염된 사용자 맞춤 악성코드
악성코드 실행 시 랜던으로 한국 사이트 중 무작위 로 접속하는 것은 덤
[생활/블로그 놀이] - Support Independent Malware & Phishing Analysis
Support Independent Malware & Phishing Analysis
안녕하세요.꿈을 꾸는 파랑새 블로그를 운영하고 있는 사카이(Sakai)입니다.이 블로그는 제가 관심을 가지고 공부하는 내용을 기록하고 그 과정에서 얻은 정보를 다른 분들과 공유하기 위해 운영
wezard4u.tistory.com
'소프트웨어 팁 > 보안 및 분석' 카테고리의 다른 글
| 정상 VS Code 원격제어 도구로 악용한 북한 연계 공격 JSE 악성 스크립트 분석-bB5x.l5tICo1UA9g.jse (0) | 2026.09.18 |
|---|---|
| 일본인을 노린 악성코드 분석-仮送り状 9907344-FIN0002026.bz2 (0) | 2026.09.17 |
| 김수키(Kimsuky) 만든 악성코드-2026 엔지니어링업체 임금실태조사결과 공표.pdf (0) | 2026.09.14 |
| 윈도우 10 KB5122878 윈도우 11 KB5124008 & KB5122880 보안 업데이트 및 Microsoft Defender ShieldCrash SYSTEM 접근 권한 제로데이 (0) | 2026.09.10 |
| 우크라이나 정부를 노린 Ghostwriter 만든 악성코드-Пропозиція по впровадженню лист.pdf.js (0) | 2026.09.09 |
| Kimsuky(김수키)에서 만든 악성코드-인피닛블록 하나은행 협력 제안서 상세.pdf.lnk (0) | 2026.09.07 |
| 発注書および在庫確認のお願い 으로 위장한 악성코드 PDF-発注書.pdf (0) | 2026.09.04 |
| 김수키(Kimsuky) 원전 분야 종사자를 노린것을 추측 되는 악성코드-한국의 사용후핵연료 저장 위기와 2030년의 경고.pdf.lnk (0) | 2026.08.31 |





