1. 개요
- 한국을 포함한 APAC 지역 기업을 대상으로 FatalRat을 배포하는 대규모 피싱 공격(SalmonSlalom 캠페인)이 발견 [1]
- 제조업, 건설업, 정보기술(IT), 통신, 의료, 에너지, 물류 운송 등 산업군을 대상으로 진행
- 중국의 정식 클라우드 서비스(Youdao Cloud Notes, myqcloud CDN)를 악용한 정교한 다단계 감염 기법을 사용
2. 주요 내용
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.1 Before.dll (구성기)
- 구성 정보를 다운로드하고 시스템 정보를 수집 및 공격자 서버로 전송
> Youdao Cloud Notes에서 JSON 데이터를 다운로드
> 노트에는 submit, dll, online의 세 가지 유형의 URL이 존재하며, 노트를 사용할 수 없을 경우를 대비한 추가적인 URL
구성 정보 다운 URL : hxxp[:]//note.youdao[.]com/yws/api/note/1eaac14f58d9eff03cf8b0c76dcce913
- 각 매개변수 값은 XOR(Key : 0x58)로 암호화되어 구성 파일인 C:\Users\Public\vanconfig.ini에 저장
> belong 매개변수는 작동한 URL과 관련된 노트 콘텐츠 블록 번호를 나타내며, 차단된 URL을 식별할 수 있도록 함
- 피해자 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
- 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 속성 설정
- acvb.exe는 DriverAssistant 유틸리티로 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 |