꿈을꾸는 파랑새

오늘은 러시아-우크라이나 전쟁이 벌어지는 가운데 벨로루시 및 러시아 정부 정보기관(FSB)과 연계된 것으로 추정되는 해킹 그룹 즉 러시아 지원 또는 벨로루시 지원 그러면 지원을 받고 있다고 추정되는 Ghostwriter(UAC-0057)가 우크라이나 정부를 공격한 샘플입니다.
주요목표
러시아 연방보안국(FSB)의 지시 받고 있거나 연계됨
우크라이나의 정부 기관, 군사 및 국방 관련 조직, 중요 인프라, 법 집행 기관 등을 주요 공격 대상
해킹된 계정을 이용해 정부 기관에 피싱 이메일을 보내는 방식으로 악성코드를 뿌리고 있으며 OYSTERFRESH 이름의 자바스크립트 파일은 주의를 분산시키기 위해 미끼 문서를 표시하는 동시에 OYSTERBLUES라는 난독화 및 암호화된 페이로드를 윈도우 레지스트리에 몰래 기록하고 OYSTERBLUES를 해독하는 역할을 하는 OYSTERSHUCK을 다운로드 및 실행하도록 설계된 악성코드입니다.
파일명:Пропозиція по впровадженню лист.PDF.js
사이즈:1 MB
MD5:50a1d8649ba3e48d051801c45249cc43
SHA-1:cfd444aa12aa5bc629daa860cce239e54dedf541
SHA-256:8a7401444dd7c85b36ff7b1d0b36c5953692ef32dbeac7642fb7c1034bd8a726
Cobalt Strike 계열 악성코드입니다.크렘린의 지원을 받는 해킹 그룹들이 정보 수집과 침해된 네트워크에 장기적인 침투권을 확보하여 영향력 행사 작전을 지원하는 등 후속 공격을 하고 있으며 OpenAI ChatGPT와 Google Gemini 같은 인공지능(AI) 도구를 사용해서 공격자를 식별

Пропозиція по впровадженню лист 자바스크립트 내부 모습
Пропозиція по впровадженню лист 자바스크립트 내부 모습

악성코드 분석

JScript 1단계 로더->XOR로 Stage 2 복호화->eval->WMI로 숨김 PowerShell 실행->원격 PowerShell Stage 다운로드 메모리 실행 구조
앞부분의 함수들은 전부 난독화 해제를 위한 부분 그리고 Windows Script Host 환경에서 동작하는 JScript 코드가 들어 있음
수많은 랜덤 변수명과 의미를 알기 어려운 산술 연산, WMI 조회, 파일 시스템 접근 코드가 뒤섞여 있어 상당히 복잡해 보이는데..
1.문자열 이어 붙이기
스크립트 앞부분에 있는 코드는 여러 개로 나누어진 문자열을 하나로 이어 붙이며 뒤에서 암호화된 Payload가 여러 문자열 조각으로 나뉘어 저장되기 때문에 최종 복호화를 하기 전에 이 함수로 하나의 데이터로 합치는 역할을 합니다.
A->B,B->C,C->98 A에서 시작해서 최종적으로 98을 반환하는 구조로 되어 있음
문자열과 숫자를 직접 코드에 넣지 않고 여러 개의 Key를 거쳐 얻게 하여 정적 분석을 방해하기 위한 목적
2. 반복 XOR 복호화 함수
하나의 Key를 Payload 전체 길이만큼 반복해서 XOR 사용을 하고 함수가 존재한다는 것만으로도 뒤쪽에 있는 대형 문자열들이 단순한 정크 데이터 가 아니라 복호화 대상이 된다는 의미
3.문자열 순서 재조합
value이라고 직접 작성하지 않고 String.fromCharCode()를 사용한 것도 문자열 기반 탐지를 피하기 위한 난독화
2,c
0,a
1,b 가 들어오면 abc 가 되는 방식을 사용하고 있습니다.

난독화 해제 된 코드
난독화 해제 된 코드

4.XOR Key 복원
var Vt....
처음에는 아무 의미 없는 배열처럼 보이지만 실제로는 XOR Key를 숨기기 위한 구조
인덱스 순서대로 다시 배치하면 다음 문자열을 확인할 수가 있습니다.
실제 XOR Key:4kbKqyeWYXd0R4xgBx1MQ
5.eval 문자열 숨기기
var wHlIam....
복원되는 문자 코드는 다음과 같다.
101->e,118->v,97->a,108->l
따라서 결과는 eval
6.FileSystemObject와 WMI 코드 미끼
확인하는 경로
C:\Users\Public\Documents
C:\Windows\Temp\setup.log
%windir%
%TEMP%등의 환경변수를 읽어들임
난독화 해제
스크립트 실행 직후 3초 대기하고 나서 사용자가 파일을 실행한 직후 자연스럽게 보이도록 시간을 두는 역할을 하는 부분?
사용자에게 가짜 오류창 을 보여줌
에러 내용:Error opening document: ERRCODE 0xffffff16
문서를 열려고 했지만 실패한 것처럼 보이게 사용자를 속이는 행동을 함

악성코드 실행시 에러 메세지
악성코드 실행시 에러 메세지

16은 Windows MessageBox 스타일 기준으로 오류 아이콘을 의미합니다. 따라서 피해자로서는 정상적인 문서 오류처럼 보이게 하는 부분
WMI의 Win32_Process 클래스를 가져 와서 5초를 추가로 대기한 후 Win32_Process.Create()를 이용해서 새로운 프로세스를 실행
여기서도 당연하게 파웨셀이 실행이 되는 것을 숨기고 실행
그리고 다음 동작을 합니다.
PowerShell 실행->hxxps://highfleetenterprise(.)com/maintenance 접속->서버 응답을 문자열로 다운로드한 문자열을 ScriptBlock으로 변환->메모리에서 바로 Invoke 합니다.
즉 Net.WebClient.DownloadString()을 이용해 원격 서버에서 PowerShell 코드를 문자열 형태로 내려받고 [ScriptBlock]::Create()로 실행 가능한 ScriptBlock 객체를 생성
.Invoke()를 호출해 메모리에서 바로 실행
핵심 목적은 사용자를 가짜 문서 오류 메시지로 속이는 동시에 WMI를 이용해 숨겨진 PowerShell 프로세스를 생성하고 추가 Payload를 네트워크에서 내려받아 파일로 저장하지 않고 메모리에서 바로 실행을 하는 역할을 하고 있습니다.

완벽하게 난독화 해제
완벽하게 난독화 해제

이번 악성코드 조직인 Ghostwriter(UAC-0057)은 2026년 봄부터 우크라이나에 지속적으로 공격하고 있으며 PDF 문서 링크에서 zip 파일 다운로드 그리고 JScript 실행 및 Windows 레지스트리에 저장하고 다음 단계의 디코더 구성 요소로 작동하는 OYSTERSHUCK를 다운로드
여기서는 UAC-0057은 우크라이나 침해사고대응팀(CERT-UA)에서 부여한 공식 식별 코드

[생활/블로그 놀이] - Support Independent Malware & Phishing Analysis

 

Support Independent Malware & Phishing Analysis

안녕하세요.꿈을 꾸는 파랑새 블로그를 운영하고 있는 사카이(Sakai)입니다.이 블로그는 제가 관심을 가지고 공부하는 내용을 기록하고 그 과정에서 얻은 정보를 다른 분들과 공유하기 위해 운영

wezard4u.tistory.com

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band