1. 개요

- 한국을 포함한 APAC 지역 기업을 대상으로 FatalRat을 배포하는 대규모 피싱 공격(SalmonSlalom 캠페인)이 발견 [1]

- 제조업, 건설업, 정보기술(IT), 통신, 의료, 에너지, 물류 운송 등 산업군을 대상으로 진행

- 중국의 정식 클라우드 서비스(Youdao Cloud Notes, myqcloud CDN)를 악용한 정교한 다단계 감염 기법을 사용

2. 주요 내용

[사진 1] 공격 체인 요약

2.1 초기 감염 (Initial Infection)

- APAC 지역 정부 기관 및 기업을 대상으로 피싱 메일, WeChat, Telegram을 통해 악성 ZIP 파일 유포

> ZIP 파일에는 세금 신고서나 송장 파일이 포함되어 있으며, 파일명은 중국어로 작성

> 또한, ZIP 파일에 1단계 로더가 포함되어 있으며, AsPacker, UPX, NSPack으로 패킹하여 탐지 회피

패킹 (Packing) : 악성코드가 보안 솔루션에 탐지되지 않도록 파일을 압축하거나 암호화하는 기술로, 악성코드의 구조 및 코드 흐름을 숨겨 정적 분석이나 시그니처 기반 탐지로는 악성코드를 쉽게 식별하지 못하도록 함

 

2.2 1단계 로더 (First-stage loader)

- ZIP 파일을 실행하면, 1단계 로더가 활성화

> AsPacker, UPX, NSPack으로 패킹

> 압축 해제 후, Microsoft Visual C++ 2010으로 컴파일

 

- 로더는 Youdao Cloud Notes에 HTTP 요청을 보내 구성기(Before.dll) 및 2단계 로더(Fangao.dll)에 대한 동적으로 업데이트된 링크 목록을 다운로드

> 링크 목록에서 첫 번째 링크부터 선택되며, 해당 링크가 작동하지 않으면 다음 링크가 선택됨

> 다운로드가 완료되면 Fangao.dll과 Before.dll이 1단계 로더에 의해 로드 및 실행

링크 목록이 저장된 URL : hxxp://note.youdao[.]com/yws/api/note/4b2eead06fc72ee2763ef1f653cdc4ae

 

[사진 2] 다음 단계 모듈에 대한 동적으로 업데이트된 링크 목록

2.2.1 Before.dll (구성기)

- 구성 정보를 다운로드하고 시스템 정보를 수집 및 공격자 서버로 전송

> Youdao Cloud Notes에서 JSON 데이터를 다운로드

> 노트에는 submit, dll, online의 세 가지 유형의 URL이 존재하며, 노트를 사용할 수 없을 경우를 대비한 추가적인 URL

구성 정보 다운 URL : hxxp[:]//note.youdao[.]com/yws/api/note/1eaac14f58d9eff03cf8b0c76dcce913

 

[사진 3] 동적으로 업데이트된 구성정보가 포함된 메모 내용

- 각 매개변수 값은 XOR(Key : 0x58)로 암호화되어 구성 파일인 C:\Users\Public\vanconfig.ini에 저장

> belong 매개변수는 작동한 URL과 관련된 노트 콘텐츠 블록 번호를 나타내며, 차단된 URL을 식별할 수 있도록 함

 

[사진 4] 구성 정보 암/복호화 비교

- 피해자 ID로 사용되는 6자리 난수 값을 생성해 C:\Users\Public\history.txt 파일에 저장

- 또한, DLL 파일이 있는 디렉토리에 사용자의 의심을 줄이기 위한 가짜 청구서가 작성된 텍스트 파일 추출

 

- 감염된 시스템의 이름과 Windows 버전을 수집공격자 서버로 GET 요청을 전송

공격자 서버 URL : hxxp://101.33.243[.]31:82/initialsubmission?windows_version=17134&computer_name=MYTEST:DESKTOP-CROB74D
공격자 서버로 POST 메서드가 아닌 GET 메서드를 사용하는 이유 (개인적인 궁금증 및 생각)
① 탐지 회피
> POST 메서드는 일반적으로 데이터 전송이나 인증에 사용되기 때문에 비정상적인 POST 요청은 보안 솔루션에 의해 탐지될 수 있음
② 전송 데이터의 작은 크기
> 단순히 감염된 시스템의 이름과 Windows 버전 정보만을 전송하기에 상대적으로 전송 데이터가 큰 POST 보다 효율적

③ 공격자 인프라 단순화
> 공격자 서버에 기록되는 로그를 활용해 정보를 수집할 수 있으므로 인프라를 단순화 시킬 수 있음
④ 서버 부하 감소
> Stateless 방식으로 서버의 자원 소모를 감소시켜 여러 피해자로부터 정보를 수집할 때 서버 부하를 감소시킬 수 있음 

2.2.2 2단계 로더 (Fangao.dll)

- Before.dll에 의해 생성된 C:\Users\Public\vanconfig.ini 구성 파일을 사용최종 페이로드 다운 및 실행

 

- 구성 파일에서 submit 매개변수를 사용해 네트워크 이름과 운영체제 버전을 공격자 서버로 전송

> Baidu.com에 접속을 시도해 인터넷 연결을 확인하고, 뮤텍스 UniqueMutexName 생성

뮤텍스 (Mutexex) : 악성코드의 중복 실행을 방지하기 위한 목적으로 사용

 

- 구성 파일에서 dll 매개변수를 사용해 FatalRAT 페이로드 다운

> 각 로더 샘플에 고유한 7Byte XOR키를 사용해 복호화하고 FatalRat 실행

 

- 사용자의 주의를 돌리기 위해 프로그램에 오류가 있다는 알림을 표시하고, 악성코드 실행 여부를 판별하기 위해 몇 가지 검사를 수행

> 검사에 통과할 경우 리소스를 압축 해제하는 프로세스를 시작

> 압축 해제 유틸리티(unrar.dll)은 악성 프로그램의 실행 파일이 있는 디렉토리의 리소스 103에 저장되고 숨김 및 시스템 속성이 할당

> C:\ProgramData\KnGoe와 C:\ProgramData\8877이라는 두 개의 새 폴더 생성하고 리소스를 추출해 파일에 저장

 

- 아카이브가 저장되면 unrar.dll과 비밀번호 by2022를 사용해 아카이브에서 파일 추출 및 압축 해제

> 압축 해제 후 아카이브 파일 삭제 및 실행 중인 프로그램 중에서 mmc.exe 프로세스의 인스턴스를 찾아 종료

아카이브 저장 경로 파일 설명
PO520.rar C:\ProgramData\KnGoe\e.dll 합법적인 DriverAssistant 유틸리티의 일부인 DDUtility.dll
C:\ProgramData\KnGoe\r.dll 합법적인 DriverAssistant 유틸리티의 일부인 DMMUtility.dll
C:\ProgramData\KnGoe\t.dll wke.dll : 사이드로드된 악성 DLL
C:\ProgramData\KnGoe\t.ini 텍스트 파일 내에 저장된 "MZ" 헤더
C:\ProgramData\KnGoe\w.dll acvb.exe : DLL 사이드로딩에 사용되는 실행 파일(DriverAssistant 프로세스로)
QD.rar C:\ProgramData\KnGoe\0user.exe PureCodec의 일부인 합법적인 소프트웨어
C:\ProgramData\KnGoe\update.ini PureCodec 구성 파일
C:\ProgramData\KnGoe\YX.vbs 악성 VBS 스크립트
C:\ProgramData\KnGoe\user.bat 악성 CMD script
MMC.rar C:\ProgramData\8877\Local Group Policy Editor.msc 중국어 그룹 정책 편집기

 

2.3 지속성 확보 (Persistence)

- 시스템 재부팅 후에도 자동으로 재실행되도록 Fangao.dll를 활용해 그룹 정책 로그온 스크립트 (Group Policy Logon Script)를 악용

그룹 정책 로그온 스크립트 (Group Policy Logon Script) : 사용자가 로그온할 때 실행되는 스크립트 파일

 

- 가장 먼저 레지스트리 키의 존재 유무 확인

> 존재 시 이미 지속성이 확보되었다고 판단하고 추가 작업을 수행하지 않음

> 존재하지 않을 시 GUI 자동화 기법을 활용해 다음 과정으로 자동 실행 등록 작업 수행

레지스트리 키 : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Logon

 

자동 실행 등록 작업
① DriverUtility 도구 실행 - DriverUtility 도구 (합법적이고 서명됨)를 실행해 UAC를 우회해 관리자 권한 획득
사용자 계정 컨트롤 (User Account Control, UAC)
> 윈도우 비스타 이상의 운영체제에서 제공하는 보안기능
> 권한이 없는 프로그램이나 악성코드가 바로 실행되지 않도록 사용자에게 실행 여부를 묻는 기능
② Windows Explorer 창 
열기 및 숨기기
- Windows Explorer를 사용하여 C:\ProgramData\8877 디렉토리를 엶
> 해당 디렉토리에는 그룹 정책 편집기의 중국어 버전이 압축 해제된 파일을 포함
> SetWindowPos 및 EnableWindow API 함수를 사용해 사용자에게 보이지 않도록 숨겨진 창 상태로 전환
③ GUI 상호작용 시뮬레이션 - GUI 작업을 WM_KEYDOWN 및 WM_KEYUP API 메시지로 마우스 클릭과 키보드 입력을 자동화
> 과정 : Windows 설정 > 스크립트 (로그온/로그오프) > 로그온 스크립트 추가
※ 윈도우 메시지
> 프로그램에서 변화가 생겼을 때 Windows가 프로그램에게 알려주는 정보
> WM_KEYDOWN : 키보드의 특정 키가 눌린 순간 발생
> WM_KEYUP : 키가 떼어질 때 발생
④ 악성 프로그램 등록 - 로그온 스크립트에 C:\ProgramData\KnGoe\0user.exe 등록
> 해당 실행 파일은 PureCodec의 설치 프로그램으로 위장

 

- 자동 실행 절차의 성공 여부를 확인하기 위해 레지스트리 키를 다시 한 번 확인

> 키가 존재하지 않으면 "RegRunError" 메시지를 전송하여 오류 로그 생성

 

2.4 FatalRAT

[사진 5] FatalRAT 동작 과정

- 0user.exe는 update.ini 구성 파일을 로드(정상적인 과정)하고 path 매개변수로 지정된 바이너리를 호출 및 실행

> update.ini 파일 내용을 조작해 path 매개변수를 XY.vbs로 변경

 

- XY.vbs는 wscript.shell을 사용하여 user.bat 실행

> user.bat 동작 과정

C:\user0 디렉토리를 생성

C:\test 디렉토리를 제거

③ user0.exe가 이미 실행 중인지 확인 및 실행 중일 경우 taskill.exe를 사용하여 종료

C:\ProgramData\KnGoe\w.dll 파일 존재 여부 확인

존재 시 - C:\ProgramData\KnGoe\t.ini에 저장된 MZ 헤더를 4개의 파일에 추가 후 C:\user0 폴더에 저장
> C:\ProgramData\KnGoe\w.dll (저장 파일명 : C:\user0\acvb.exe)
> C:\ProgramData\KnGoe\e.dll (저장 파일명 : C:\user0\DDUtility.dll)
> C:\ProgramData\KnGoe\r.dll (저장 파일명 : C:\user0\DMMUtility.dll)
> C:\ProgramData\KnGoe\t.dll (저장 파일명 : C:\user0\wke.dll)

C:\user0 폴더에 read only, system, hidden and archived 속성 설정

⑥ Ping 127.0.0.1 (스크립트 실행을 일시 중지하는 데 사용됨)

⑦ C:\user0\acvb.exe (DriverAssistant 도구)를 실행

⑧ Ping 127.0.0.1 (스크립트 실행을 일시 중지하는 데 사용됨)

C:\test 폴더에 있는 모든 파일에 read only, system, hidden and archived 속성 설정

⑩ tasklist를 사용하여 실행 중인 프로세스 목록 검색 및 findstr을 사용하여 acvb.exe를 실행하는 프로세스 검색

> 프로세스를 찾을 수 없으면 4단계로 복귀

C:\ProgramData\KnGoe\YX.vbs에 read only, system, hidden and archived 속성 설정

C:\user0 폴더의 파일에 read only, system, hidden and archived 속성 설정

 

[사진 6] user.bat의 내용

- acvb.exeDriverAssistant 유틸리티로 DLL 사이드로딩에 취약함을 악용

> DMMUtility.dll, DDUtility.dll, wke.dll 중 하나를 DLL 사이드로딩 시도

 

- wke.dll

> ASPacker로 패킹

> 파일 끝에 다수의 널 바이트를 추가하여  파일 크기를 부풀리고, 런타임 때 메모리에서 압축 해제

> wkeInit 함수 호출 시 하드코딩된 URL로 HTTP GET 요청을 전송

> DLL.dll은 FatalRAT 페이로드로, XOR 연산을 사용해 복호화되고 메모리에서 실행됨

하드코딩된 URL : hxxp://mytodesktest-1257538800.cos.ap-nanjing.myqcloud[.]com/DLL.dll

 

- FatalRAT

> 악성코드가 가상머신이나 샌드박스 환경에서 실행되는지 확인하기 위해 17가지 검사 수행 및 검사 중 하나라도 실패할 경우 실행 중지

> rundll32.exe 프로세스의 모든 인스턴스를 종료

> 레지스트리  키 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableLockWorkstation를 1로 설정 (화면 잠금 기능 차단)

> C:\Windows\Fatal.key에 키로깅 정보 저장

> C:\Users\Public\vanconfig.ini에서 online 값(C2 서버 주소:포트 정보)을 읽고, XOR (Key : 0x58)로 복호화

 

- 감염된 시스템에 대한 아래 정보가 모두 수집된 후 C2 서버로 암호화하여 전송

> 외부 IP 주소(hxxp://www.taobao.com/help/getip.php 서비스를 사용하여 얻음)

> 운영체제 설치 시간

> 운영 체제 아키텍처 및 버전

> 맬웨어 서비스/레지스트리 키에 대한 정보

> CPU에 대한 정보

> 사용자가 현재 유휴 상태인지 여부에 대한 정보 (180,000틱 이상 동안 입력 이벤트가 수신되지 않은 경우)

> 사용자 이름

> Tencent QQ 메신저가 시스템에서 실행 중인지 여부 (창 클래스 CTXOPConntion_Class로 검색)

> 시스템에서 실행되는 보안 솔루션 및 기타 소프트웨어에 대한 정보

 

- 이후 C2 서버로부터 명령이 도착할 때까지 대기

> 키로깅: 사용자의 키 입력을 기록해 민감한 정보를 탈취
> 시스템 조작: 마스터 부트 레코드 (MBR) 손상, 화면 켜기/끄기, 프로세스 종료
> 데이터 유출: 구글 크롬 (Google Chrome), 인터넷 익스플로러 (Internet Explorer) 등 브라우저에서 사용자 데이터 탈취
> 추가 악성 프로그램 설치: 애니데스크 (AnyDesk), 울트라뷰어 (UltraViewer) 등 원격 제어 도구 설치
> 프록시 관리: 프록시 서비스 시작/중지 및 네트워크 트래픽 조작

 

- 침해지표 참고 (Indicators of compromise) [1]

> 악성파일명 27개

> 악성 파일 MD5 145개

IP 60개

> URL 45개

> 레지스트리 키 1개

파일 경로 6개

> PDB 경로 5개

> 뮤텍스 명 1개

3. 참고

[1] https://ics-cert.kaspersky.com/publications/reports/2025/02/24/fatalrat-attacks-in-apac-backdoor-delivered-via-an-overly-long-infection-chain-to-chinese-speaking-targets/
[2] https://www.dailysecu.com/news/articleView.html?idxno=164002

'악성코드 > 분석' 카테고리의 다른 글

정적분석 (Static Analysis) #3  (1) 2025.03.07
정적분석 (Static Analysis) #2  (0) 2025.03.06
정적분석 (Static Analysis)  (1) 2025.02.25
악성코드 분석 개요  (1) 2025.02.18
Malvertising 기법  (0) 2024.12.16

+ Recent posts