2025년 7월, IBM X-Force는 중국과 연계된 위협 행위자 Hive0154에 기인하는 새로운 멀웨어를 발견했습니다. 여기에는 탐지를 회피하고 몇 가지 새로운 기능을 지원하는 업데이트된 ToneShell 변종과 8월 중순에 발견된 SnakeDisk라는 새로운 USB 웜이 포함됩니다. 이 웜은 태국 기반 IP 주소를 가진 디바이스에서만 실행되며 2024년 12월 Netskope가 발견한 Yokai 백도어를 삭제합니다.
Hive0154는 대규모 멀웨어 무장, 일관된 기술, 지난 몇 년간 잘 문서화된 활동을 통해 중국과 연계된 것으로 잘 알려진 위협 행위자입니다. 이 그룹은 여러 하위 클러스터로 구성되며 싱크탱크, 정책 그룹, 정부 기관 및 개인을 포함한 공공 및 민간 조직을 대상으로 하는 사이버 공격에 참여합니다. X-Force가 그룹이 여러 사용자 정의 멀웨어 로더, 백도어 및 USB 웜 제품군을 사용하는 것을 관찰한 결과는 그들의 고급 개발 기능을 보여줍니다. Hive0154 활동은 Mustang Panda, Stately Taurus, Camaro Dragon, Twill Typhoon, Polaris 및 Earth Preta로 공개적으로 보고된 위협 행위자와 겹칩니다.
2025년 중반 내내 X-Force는 싱가포르와 태국에서 VirusTotal에 업로드된 여러 무기화된 아카이브를 관찰했습니다.
파일명 | 악성 DLL | C2 서버 | 날짜 |
Meeting Venue Request Information.zip | Pubload 셸코드를 주입하는 로더 | 188.208.141[.] | 5월 21일 |
Hotel Booking Request.7z | Toneshell8 | 146.70.29[.] | 7월 3일 |
Cyber_Safety_ | Toneshell8 | 146.70.29[.] | 7월 30일 |
TNLA နှင့် အခြားတော်လှန်ရေးအင်အားစုများ.rar (미얀마 번역: "TNLA 및 기타 혁명 세력") | Toneshell8 | 146.70.29[.] | 7월 30일 |
Scan(08-02-205).zip | Toneshell8 | 146.70.29[.] | 8월 5일 |
Notes.rar | Pubload 셸코드를 주입하는 로더 | 188.208.141[.] | 8월 21일 |
CallNotes.zip | ToneShell7 셸코드를 주입하는 로더 | 146.70.29[.] | 9월 4일 |
Hive0154는 새로운 로더를 사용하여 Pubload 또는 ToneShell7을 반사적으로 주입하고 더 난독화된 ToneShell8 변종을 직접 배포하는 것이 관찰되었습니다. 가장 최근의 Pubload 변종은 사소한 변경을 거쳤으며 이제 TLS 트래픽을 모방하는 원시 TCP 외에도 HTTP POST를 통해 미끼 C2 서버와 셸코드 페이로드 다운로드를 지원합니다.
9월에 발견된 아카이브 "CallNotes.zip" 은 미얀마 외무부를 사칭한 PDF 미끼 링크를 통해 Box 클라우드 스토리지에서 다운로드되었습니다.
8월 중순, X-Force는 이전 Tonedisk 변종과 겹치는 새로운 USB 웜인 SnakeDisk도 발견했습니다. 이 웜은 공개 IP 주소로 확인된 태국에 위치한 디바이스에서만 실행됩니다. SnakeDisk는 2024년 12월 Netskope가 태국을 대상으로 하는 다른 여러 캠페인과 공개적으로 연결한 Yokai 백도어를 배포합니다.
태국에 대해 Yokai 백도어가 사용된 이전의 역사를 고려할 때, 최신 USB 웜의 발견은 태국을 둘러싼 최근의 지정학적 사건과 일치하는 것으로 보였습니다.
전통적으로 중국은 캄보디아에 무기를 공급하고 인프라 프로젝트에 수십억 달러를 투자하는 등 캄보디아의 후원자 역할을 해왔습니다. 최근의 지정학적 사건으로 인해 Hive0154는 태국에 대한 작전을 개시할 수 있었습니다. 태국 기반 시스템에서만 실행되도록 구성된 SnakeDisk USB 웜의 배포는 Hive0154가 정부 네트워크에서 자주 사용되는 에어 갭 시스템에 침투하려고 할 수 있음을 시사하는 것으로 보입니다.
X-Force는 2025년 3월에 Toneshell 버전 8을 처음으로 선보였습니다. 이전 버전 7과 동작이 매우 유사하지만 정적 탐지를 회피하고 분석을 방해하기 위한 사소한 업데이트가 포함되어 있습니다. 가장 눈에 띄는 변화는 멀웨어의 기능에 정크 코드가 포함되었다는 점입니다. 이러한 정크 코드 섹션은 다음과 같은 동작을 구현합니다.
예를 들어 이 세 가지 코드 예제는 모든 API를 해결하는 함수에서 찾을 수 있습니다.
ToneShell8 개발자는 또한 의사 난수 생성기(PRNG)를 다양한 상수를 사용하는 맞춤형 선형 합동 생성기(LCG) 구현으로 대체하기로 결정했습니다. 예를 들면 다음과 같습니다.
PRNG는 Toneshell에서 피해자 ID, C2 트래픽 암호화 키를 생성하고 C2 비콘 진위 여부를 확인하는 데 사용됩니다. ToneShell8 샘플의 구현은 품질이 크게 다릅니다. 예를 들어 위의 생성기는 위에 나열된 4개의 샘플에서 사용되며 대부분의 시드에 대해 11개의 서로 다른 상태만 생성합니다.
마지막으로, 운영자에게 특정 명령의 상태를 알리는 C2 서버로 전송되는 하드코딩된 응답 코드는 이제 샘플의 다른 하드코딩된 정수에서 계산하여 난독화됩니다.
지난 7월, X-Force는 새로운 Toneshell 변종을 발견했는데, 이를 Toneshell9이라고 부릅니다. 중요한 업데이트가 포함되어 있으며 작성 당시 VirusTotal에 대한 탐지 기능이 없습니다(318a1ebc0692d1d012d20d306d6634b196cc387b1f4bc38f97dd437f117c7e20).
새로운 ToneShell 변종은 "USB Safely 제거" 소프트웨어가 포함된 트로이 목마 RAR 아카이브에서 처음 관찰되었습니다. 코드 구조는 2024년 12월의 포크된 변형을 기반으로 한 것으로 보이며, 동일한 C2 구성이 포함되어 있습니다.
이전 변종과 유사하게 ToneShell9는 사이드로드된 DLL로 실행됩니다. 무기화된 RAR 아카이브에는 합법적인 실행 파일인 " USBSRService.exe"를 실행하는 BAT 파일이 포함되어 있습니다. "-Embedding" 명령줄 인수와 함께 사용할 수 있습니다. ToneShell DLL "EasyFuncs.exe"가 메모리에 로드되고 FS_RegActiveX 내보내기가 실행되면 초기화에 필요한 첫 번째 API 세트를 확인하는 것으로 시작됩니다. "-Embedding" 명령줄 인수를 구문 분석한 후 ToneShell은 "EvtSys" 인수를 사용하여 새 프로세스에서 상위 실행 파일을 시작합니다. 후자의 인수는 악성 DLL의 주요 동작을 트리거합니다.
ToneShell은 다음 값을 포함하는 새 클라이언트 객체를 초기화하는 것으로 시작합니다.
그런 다음 사용자 지정 해싱 함수를 통해 필요한 나머지 API를 확인하고 함수 포인터를 별도의 구조체에 저장합니다. 다음으로 동일한 시스템에서 여러 인스턴스가 실행되지 않도록 하는 뮤텍스 역할을 하는 새로운 이벤트 "Windows 외부 모듈"을 만듭니다.
ToneShell9은 현재 CPU 틱 수를 검색하고 결과를 문자열로 저장하고 다시 할당을 취소하는 여러 정크 코드 섹션으로 가득 차 있습니다.
C2 통신, 프록시 서버, 비콘 및 페이로드를 메모리에서 관리하고 저장하기 위해 ToneShell은 129KB의 대형 객체를 인스턴스화합니다.
이전 변형과 달리 ToneShell9은 HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER 및 HKEY_USERS\.DEFAULT 레지스트리 하이브를 열거하여 로컬로 구성된 프록시 서버를 검색합니다.
서버가 발견되면 URL의 프로토콜(http, https, ftp또는 socks)과 전체 URL이 객체 목록에 문자열로 저장됩니다.
다음으로 ToneShell은 C2 서버 도메인과 IP 주소를 문자열 벡터에 저장합니다. 하드코딩된 동일한 IP 및 포트가 SOCKADDR_IN 구조의 배열에 직접 저장됩니다. 그런 다음 멀웨어는 C2 서버 문자열을 반복하여 각 문자열의 IP 주소를 확인하고 이를 동일한 SOCKADDR_IN 구조 배열에 추가합니다.
이전 버전에서 볼 수 있듯이 Toneshell은 Windows_rand() 함수를 통해 생성된 임의의 16바이트 피해자 GUID를 포함하는 파일을 삭제합니다.
GUID는 파일 경로 및 피해자의 NetBIOS 이름과 함께 구조체에도 저장됩니다.
위 데이터는 메모리에 비콘 객체를 구성하는 데 사용됩니다. 특히 ToneShell9은 위에서 설명한 주요 초기화 동작 전후의 CPU 틱 수의 차이를 계산합니다. 이 값은 정규화되며 샌드박스 실행 또는 디버깅이 지연되었음을 나타낼 수 있는 실행 시간의 이상 징후를 감지하는 데 사용됩니다.
0x300바이트 XOR 키는 _rand()를 통해 생성되며 오프셋 0x300에서 시작하여 101바이트의 데이터를 암호화하는 데 사용됩니다. 위 데이터는 다음 형식의 가짜 TLS 1.2 애플리케이션 데이터 패킷에 패키징되어 있습니다.
메인 루프 중에 ToneShell9은 C2 서버에 대한 소켓 연결을 설정하는 기능을 실행합니다. 첫 번째 SOCKADDR_IN 구조를 통해 연결을 시도하는 것으로 시작됩니다. 실패하면 멀웨어는 레지스트리에서 수집한 프록시 서버를 통해 소켓 연결을 설정하려고 시도합니다. 이는 각 C2 주소 문자열, 즉 위에서 분석된 샘플의 IP 주소 및 도메인에 대해 시도됩니다.
프록시 서버의 IP 주소를 확인하고 TCP 소켓을 통해 연결한 후 먼저 전송 및 수신 시간 초과를 1분으로 설정합니다. 다음으로 다음 연결 요청을 보냅니다.
프록시 서버가 2xx 상태 코드를 반환하면 연결이 성공적으로 설정된 것이며 원시 TCP 터널링을 사용할 준비가 된 것입니다. ToneShell9은 C2 서버와의 연결을 확인하기 위해 짧은 핸드셰이크 프로토콜을 사용하며 이 과정에서 서버의 IP와 포트도 전송합니다. 핸드셰이크에 성공하면 소켓에 대한 핸들이 C2_CONNECTION 구조체에 저장되고 소켓 시간 초과가 2분으로 설정됩니다. 그런 다음 ToneShell은 소켓을 통해 첫 번째 알림 비콘을 보냅니다.
처음 5바이트는 이전에 전송된 XOR 키를 통해 암호화된다는 점을 제외하고는 서버에서 유사한 응답을 다시 받을 것으로 예상합니다.
ToneShell은 감염된 디바이스에 이미 구성된 프록시를 사용하여 다른 네트워크 트래픽과 효과적으로 혼합할 수 있습니다. 대규모 엔터프라이즈 환경에서는 송신 필터링을 적용하여 신뢰할 수 있는 게이트웨이를 통한 트래픽만 허용하는 경우가 많으며, 이로 인해 직접적인 C2 통신이 차단됩니다. 이러한 필터링을 우회할 수 있는 Toneshell의 추가 기능으로 보안이 철저한 네트워크 환경에서 작동할 수 있습니다.
첫 번째 C2 응답을 받으면 ToneShell은 0x1 응답 코드와 임의의 Shell_id 값을 사용하여 30초마다 하트비트와 유사한 응답 비콘을 보내는 새 스레드를 시작합니다. 응답 비콘은 매우 유사한 형식을 가지고 있습니다.
ToneShell9은 다음 명령 코드를 지원합니다.
코드 | 설명 |
2 | 이 비콘을 건너뛰고 다음 비콘이 처리할 때까지 립니다. |
3 | 새 리버스 셸을 생성하고 shell_id에 할당합니다. |
4 | shell_id로 식별되는 역셸에 명령 문자열을 작성합니다. |
5 | Shell_id로 식별되는 리버스 셸을 닫습니다. |
이전 변형과 마찬가지로 리버스 셸은 새 cmd.exe 프로세스의 stdin 및 stdout 핸들에 연결된 익명 파이프를 사용하여 설정됩니다. ToneShell9은 두 개의 활성 리버스 셸을 병렬로 지원하며 아래 구조를 사용하여 셸 연결을 관리합니다.
각 리버스 셸에 대해 새 스레드가 생성되어 stdout 파이프에서 새 데이터를 정기적으로 확인하고 응답 코드 0x4와 함께 비콘의 C2 서버로 다시 보냅니다. ToneShell 운영자는 올바른 Shell_id를 사용하여 파이프에 문자열 데이터를 쓰고 시스템에서 임의의 명령을 실행할 수 있습니다. 리버스 셸을 닫으면 parent_pid로 식별되는 conhost.exe 프로세스도 시스템에서 종료됩니다.
2025년 8월, X-Force는 이전에 알려지지 않은 USB 웜을 발견했는데, 이 웜은 Hive0154의 원인이었습니다. 32비트 DLL이 VirusTotal에 "01.dat"로 업로드되었습니다. 태국에서 개발되었으며 Toneshell9와 유사한 기능을 제공합니다. 둘 다 DLL 사이드로딩을 통해 실행되며, DllEntryPoint와 멀웨어의 진입점을 제외한 모든 내보내기가 동일한 함수를 가리키며 즉시 반환됩니다. 또한 둘 다 거의 모든 ToneShell 관련 멀웨어와 일치하는 거의 동일한 API 확인 메커니즘을 갖추고 있습니다. ToneShell9 샘플과 마찬가지로 SnakeDisk는 명령줄 인수를 읽고 두 가지 가능한 실행 경로 중 하나를 선택합니다.
USB 감염 기능을 실행하려면 SnakeDisk에 구성 파일이 필요하며, 상위 실행 파일의 현재 디렉토리에서 이를 검색합니다. 이름이 "System Volume Information"인 경우를 제외하고 해당 디렉토리에서 발견된 모든 파일은 잠재적 구성 파일 목록에 추가됩니다. Tonedisk는 계속해서 각 파일을 열고 읽으며, 암호 해독을 진행하기 전에 다음 조건을 확인하여 파일을 확인합니다.
SnakeDisk는 사용자 지정 2단계 XOR 알고리즘과 330바이트 헤더에 저장된 320바이트 키를 사용하여 데이터를 해독하는 방식으로 진행됩니다.
마지막으로 멀웨어는 멀웨어의 구성을 정의하는 18개의 문자열 값을 구문 분석합니다. X-Force는 구성 파일을 복구할 수 없었지만 SnakeDisk를 분석한 결과 다음과 같은 값의 용도가 있는 것으로 나타났습니다.
구성 필드 | 목적 |
버전 | 이미 감염된 클라이언트를 업데이트된 변종으로 다시 감염시켜야 하는지 결정하는 데 사용되는 멀웨어 버전입니다. |
mutx | 뮤텍스 문자열. |
psd | 분석된 샘플에서는 사용되지 않습니다. "usd "와 동일한 로컬 값일 수 있습니다. 모든 "u*" 값은 무기화 후 USB에 있는 파일/디렉토리 이름입니다. |
urd | "USB 루트 디렉토리"일 수 있습니다. 하위 디렉토리가 포함된 USB에 생성된 디렉토리 이름입니다. |
uud | "USB 사용자 디렉토리"일 수 있습니다. USB의 사용자 원본 파일이 포함된 <urd> 아래의 디렉토리 이름입니다. |
usd | "USB 스테이징 디렉토리"일 수 있습니다. SnakeDisk의 다양한 악성 구성 요소를 저장하는 <urd> 아래의 디렉토리 이름입니다. |
pnex | "상위 이름 실행 가능"일 수도 있습니다. 실행 중에 SnakeDisk의 현재 디렉토리에 존재하는 파일의 파일 이름입니다. |
pndl | "상위 이름 DLL"일 수 있습니다. 실행 중에 SnakeDisk의 현재 디렉토리에 존재하는 파일의 파일 이름입니다. |
pnen | "상위 이름 암호화됨"일 수 있습니다. 실행 중에 SnakeDisk의 현재 디렉토리에 존재하는 파일의 파일 이름입니다. |
pnendl | "상위 이름 암호화된 DLL"일 수 있습니다. 실행 중에 SnakeDisk의 현재 디렉토리에 존재하는 파일의 파일 이름입니다. |
unex | "USB 이름 실행 가능"일 수 있습니다. <pnex>에서 USB로 복사된 파일의 파일 이름입니다. |
undl | "USB 이름 DLL"일 수 있습니다. <pndl>에서 USB로 복사된 파일의 파일 이름입니다. |
unen | "USB 이름 암호화됨"일 수 있습니다. <pnen>에서 USB로 복사된 파일의 파일 이름입니다. |
unendl | "USB 이름 암호화된 DLL"일 수 있습니다. <pnendl>에서 USB로 복사된 파일의 파일 이름입니다. |
unendl_org | <pnendl>에서 USB의 루트 디렉토리로 복사되고 파일 속성을 통해 숨겨진 파일(아마도 DLL)의 파일 이름입니다. |
unconf | USB에 저장된 SnakeDisk 구성의 파일 이름입니다. |
regkey | 이는 레지스트리 지속성 메커니즘과 관련이 있을 가능성이 있습니다. 분석된 샘플에서는 사용되지 않습니다. |
schkey | 잠재적으로 예약된 작업 지속성 메커니즘과 관련이 있습니다. 분석된 샘플에서는 사용되지 않습니다. |
구성 파일을 성공적으로 읽은 후 SnakeDisk는 현재 태국 기반 시스템에서 실행되고 있는지 확인합니다. http://ipinfo[.]io/json으로 HTTP GET 요청을 보내고 "국가" 필드가 "THA" 또는 "TH"와 일치하는지 확인합니다. 이 경우 실행이 계속됩니다.
특히 API를 확인하거나 네트워크 통신 중에 오류가 발생하더라도 실행은 계속됩니다.
그런 다음 SnakeDisk는 뮤텍스 "Global\\<mutx config value>"을 열려고 시도하여 단일 인스턴스에서만 실행되도록 합니다. 뮤텍스가 이미 존재하는 경우 멀웨어가 종료됩니다. 그렇지 않으면 CreateMutexW를 통해 뮤텍스를 만듭니다.
이미 연결된 USB 드라이브를 감염시키기 위해 SnakeDisk는 AZ에서 가능한 모든 드라이브 문자를 반복하기 시작합니다. 물리적 볼륨에 대한 핸들(예: "\\.\A:" )을 열고 IO 제어 코드 IOCTL_STORAGE_GET_HOTPLUG_INFO(0x2D0C14)를 디바이스로 전송합니다. 디바이스가 반환된 STORAGE_HOTPLUG_INFO 구조에 따라 핫플러그 디바이스인 경우 새 스레드를 시작하여 해당 드라이브를 감염시킵니다.
모든 드라이브 문자를 검토한 후 SnakeDisk는 5초 동안 휴면한 다음 새 창 클래스 "TestClassName"을 등록하고 해당 창 "TestWindowsName"을 만듭니다. 이 함수는 운영 체제에서 메시지를 검색하기 위해 GetMessageW를 사용하여 Windows 메시지 루프를 생성하고 TranslateMessage 및 DispatchMessageW를 통해 멀웨어의 창 프로시저에 메시지를 전달합니다. WM_CAP_PAL_OPEN(0x450) 메시지를 수신할 때만 루프를 종료합니다. 악성 윈도우 클래스는 WM_DEVICECHANGE(0x219) 메시지, 특히 DBT_DEVICEARRIVAL(0x8000) 및 DBT_DEVICEREMOVECOMPLETE(0x8004) 이벤트를 수신 대기하는 사용자 지정 프로시저를 참조합니다.
예를 들어, USB 디바이스가 감염된 시스템에 연결되어 있을 때 이러한 메시지가 수신되면 함수는 DEV_BROADCAST_VOLUME 구조의 "dbcv_unit Mask" 필드를 사용하여 해당 디바이스의 드라이브 문자를 확인합니다. 새로 연결된 디바이스의 경우 드라이브를 감염시키기 위해 새 스레드가 시작됩니다. SnakeDisk가 디바이스 제거를 감지하면 스레드를 시작하여 임베디드 페이로드를 삭제하고 실행하며, "-hope" 명령줄 인수를 사용한 SnakeDisk DLL의 실행으로 인해 발생한 것과 동일한 실행 경로가 시작됩니다.
감지된 USB 디바이스를 감염시키는 스레드는 드라이브에서 기존 구성 파일을 검색하여 이미 감염되었는지 확인하는 것으로 시작합니다. 확장자가 .dat 또는 .cd인 모든 파일에서 구성을 해독하고 구문 분석을 시도합니다. 구성이 구문 분석되면 멀웨어는 이미 감염된 드라이브의 버전 번호를 자체 구성의 버전과 비교하여 이전 버전의 SnakeDisk가 설치된 드라이브만 다시 감염시킵니다.
그런 다음 SnakeDisk는 다른 스레드를 시작하여 USB에 있는 기존 파일을 새 하위 디렉토리로 이동합니다. 멀웨어는 기본적으로 사용자가 예상하는 파일을 USB에 숨겨 피해자가 USB가 아직 열리지 않았다고 믿고 디바이스와 이름이 같은 새 머신에서 무기화된 실행 파일을 실수로 클릭할 가능성을 높입니다. 실행 후 악성 런처는 의심을 피하기 위해 사용자의 파일을 다시 복사합니다. 감염된 디바이스의 사용자 데이터가 포함된 경로는 다음과 같은 구성 값으로 구축됩니다.
멀웨어는 작업을 위해 각각 고유한 스레드에서 실행되는 두 가지 다른 메커니즘을 사용할 수 있습니다. 첫 번째는 SHFIleOperationW를 사용하여 각 파일을 이동하고 모든 작업 중에 "C:\\Windows\\Tmp\\msd.log" 파일에서 32바이트를 읽어서 "C:\\ProgramData\\app.log" 파일에 기록한 후 삭제합니다. 이러한 행동의 목적은 명확하지 않습니다.
스레드가 실행되는 동안 멀웨어는 두 번째 스레드를 실행하기 전에 30초 동안 성공적으로 완료되었는지 정기적으로 확인합니다. 두 번째 스레드는 robocopy를 사용하여 파일을 이동하고 새 프로세스에서 다음 명령을 실행합니다.
두 파일 이동 모두 SnakeDisk의 무기화된 파일과 USB 디스크의 루트 디렉토리에 남아 있어야 하는 "시스템 볼륨 정보" 파일은 제외됩니다. 위의 명령을 실행한 후 동일한 파일을 포함하고 대상보다 오래된 소스 디렉토리 파일을 제외하기 위해 두 개의 추가 플래그 "/IS" 및 "/XO"와 함께 동일한 명령이 다시 실행됩니다.
USB에 이미 존재하는 파일을 이동한 후, SnakeDisk는 현재 디렉토리에서 USB 드라이브로 자체 페이로드를 복사합니다. 구성에 지정된 다음 파일은 CopyFileW를 통해 각각 새 스레드에 복사됩니다.
USB 드라이브의 루트에 있는 EXE 파일 이름은 USB 디바이스의 볼륨 이름으로 설정하거나, 비어 있는 경우 "USB.exe"로 설정합니다. SnakeDisk는 또한 "<drive_letter>:\<unendl_org>"로 복사된 파일의 SYSTEM 및 HIDDEN 속성을 설정합니다. USB의 모든 디렉토리에는 이러한 속성도 포함되어 있어 실행 파일과 별도로 모든 것을 효과적으로 숨깁니다. X-Force는 다른 파일을 검색하지 못했지만, 이전의 USB 웜은 동일한 기술을 사용하여 피해자가 실행 파일을 클릭하도록 유도했습니다. 그러면 DLL이 사이드로드되어 감염이 시작됩니다. 해당 악성 DLL의 파일 이름은 "unendl_org" 구성 값에 저장되어 있을 가능성이 높습니다. 마지막으로 SnakeDisk는 "unconf" 값의 이름을 사용하여 USB의 새 파일에 구성을 기록합니다.
임베디드 페이로드를 삭제하고 실행하는 SnakeDisk 스레드는 USB 디바이스 제거가 감지되거나 "-hope" 명령줄 인수를 통해 SnakeDisk 실행이 시작될 때 시작됩니다.
먼저 스레드는 디렉토리에서 마커 파일 "vm.ini"를 읽고 콘텐츠를 자체 현재 경로와 비교합니다. 이 파일은 페이로드를 성공적으로 삭제하고 실행한 후에도 작성되며 피해자가 이미 SnakeDisk의 내장된 페이로드에 감염되었는지 여부를 나타냅니다. 경로가 일치하면 페이로드가 삭제되지 않고 스레드가 종료됩니다.
첫 번째 검사 후 SnakeDisk는 일련의 페이로드를 "C:\Users\Public\" 디렉토리에 드롭하기 시작합니다. 각 파일은 0.6MB에서 3.3MB 사이의 큰 함수에서 즉시 값으로 메모리에서 구성됩니다.
그런 다음 페이로드는 파일로 삭제되기 전에 간단한 XOR 연산을 통해 암호를 해독하여 다음을 수행합니다.
이러한 파일은 3개 그룹으로 연결되어 다음 명령을 통해 두 개의 최종 페이로드를 생성합니다.
EXE의 파일 이름은 10개의 임의의 대문자와 숫자로 만들어집니다. 연결 후에는 파일이 삭제됩니다.
마지막으로, 실행 파일은 하드코딩된 명령줄 인수를 사용하여 새 프로세스에서 시작됩니다.
놀랍지 않게도, EXE(bb5bb82e5caf7d4dbbe878b75b23f793a5f3c5ca6dba70d8be447e8c004d26ce)는 실행 중에 악성 libcef.dll을 사이드 로드하는 합법적이고 서명된 실행 파일(acwebbrowser.exe)이었습니다.
DLL 페이로드는 Yokai 백도어로 식별되었으며, Netskope는 2024년 12월에 보고했습니다. 실행 시 멀웨어는 먼저 "-project-mod" 인수를 확인한 다음 사용자가 관리자 그룹의 구성원이 아닌 경우 예약된 작업을 통해 지속성을 설정합니다.
계속해서 새 뮤텍스 "k1tpddvivh74fo1et725okr1c1"을 만들고 내부 구성 구조를 초기화합니다. SnakeDisk가 삭제한 변형에는 버전 문자열 "1.0.0"이 포함되어 있으며 HTTP POST 요청을 통해 하드코딩된 C2 서버에 도달합니다.
Netskope의 분석에 설명된 바와 같이, Yokai는 익명 파이프를 통해 리버스 셸을 생성하여 운영자가 감염된 시스템에서 임의의 명령을 실행할 수 있도록 하는 데 사용됩니다.
흥미롭게도 Yokai는 Pubload/PubShell 및 ToneShell과 같은 Hive0154에 기인한 다른 백도어 제품군과 겹침을 보여줍니다. 이러한 제품군은 분명히 별개의 멀웨어이지만, 대략 동일한 구조를 따르고 유사한 기술을 사용하여 C2 서버와 리버스 셸을 설정합니다.
또한 X-Force 분석 결과, SnakeDisk와 Tonedisk 사이에 강력한 중복성이 있는 것으로 나타났습니다. 수년에 걸쳐 Hive0154와 관련된 여러 USB 웜 제품군이 있었습니다. X-Force는 구현 시 Toneshell 제품군과 밀접하게 관련된 변종을 Tonedisk로 추적합니다. 지금까지 3개의 주요 Tonedisk 버전(A, B, C)이 확인되었습니다. 각 Tonedisk 버전은 USB 웜의 전체 기능을 구성하는 다양한 악성 구성 요소의 모음입니다. 이 구성 요소에는 런처, 로더, 스프레더, 암호화된 파일, 설치 프로그램, 백도어 등이 포함됩니다.
SnakeDisk는 2023년 중반에 Checkpoint에서 WispRider로 보고한 ToneDisk A 변종과 특히 겹칩니다. 멀웨어의 USB 전파 메커니즘, API 해싱 및 구성 파일은 모두 Hive0154 하위 클러스터가 서로 멀웨어를 공유하고 용도를 변경하는 것으로 알려진 경향과 일치하는 몇 가지 유사점을 보여줍니다.
X-Force는 Hive0154 우산 클러스터에서 이 보고서의 활동을 추적하며, 이는 Mustang Panda, Stately Taurus, Camaro Dragon, Twill Typhoon, Polaris, TEMP.Hex 및 Earth Preta로 게시된 활동과 부분적으로 겹칩니다. 이 그룹은 상당히 큰 규모의 멀웨어 생태계를 유지하고 있는 것으로 보이며, 악성 코드, 공격 시 사용된 기술, 타겟팅 공격 모두에서 자주 중복되는 경우가 많습니다. X-Force는 더 큰 상위 클러스터 내에서 최소 3개의 하위 클러스터를 낮은 신뢰도로 분리하며, 각 클러스터는 중앙 멀웨어 변종 PlugX, Toneshell 및 Pubload 중 하나와 연결되어 있습니다. 특히, 각 멀웨어 변종은 서로 다른 USB 웜 프레임워크 및 하나 이상의 관련 로더 멀웨어 변종과 짝을 이루며 더 자주 변경됩니다. 동일한 로더가 동일한 기간 내에 ToneShell 또는 Pubload와 같은 다른 페이로드에 사용될 수 있습니다. 그러나 활동의 클러스터링이 별도의 하위 그룹으로 운영되고 있음을 자동으로 나타내는 것은 아니라는 점에 유의해야 합니다.
SnakeDisk 및 Yokai 백도어의 사용과 관련된 활동은 Hive0154의 추가 하위 클러스터를 나타낼 수 있습니다. SnakeDisk 및 Netskope 보고의 IP 지리적 위치 확인에서 알 수 있듯이 현재 주로 태국을 대상으로 하는 것으로 보입니다.
Hive0154는 활성 하위 클러스터가 여러 개 있고 개발 주기가 빈번하여 여전히 유능한 위협 행위자입니다. X-Force는 Hive0154와 같이 중국과 연계된 그룹이 대규모 멀웨어 무기를 계속 개선하고 전 세계 공공 및 민간 조직을 표적으로 삼을 것이라고 높은 확신을 가지고 평가합니다. 위의 보고서에서 논의된 멀웨어는 아직 개발 초기 단계일 가능성이 높기 때문에 방어자는 널리 사용되기 전에 탐지 메커니즘을 채택할 수 있습니다. Hive0154 스파이 활동의 위험에 처한 기업은 강화된 방어 보안 상태를 유지하고 이 보고서에 언급된 기술에 대해 경계를 늦추지 않고 다음 권장 사항을 검토해야 합니다.
지표 | 지표 유형 | 컨텍스트 |
f8b28cae687bd55a148d363d58f1 | SHA256 | ToneShell8을 제공하는 무기화된 아카이브 |
8132beeb25ce7baed0b561922d26 | SHA256 | ToneShell8을 제공하는 무기화된 아카이브 |
d1466dca25e28f0b7fae71d5c2abc0 | SHA256 | ToneShell8을 제공하는 무기화된 아카이브 |
1272a0853651069ed4dc505007e85 | SHA256 | ToneShell8을 제공하는 무기화된 아카이브 |
b8c31b8d8af9e6eae15f30019e39c | SHA256 | ToneShell7을 제공하는 무기화된 아카이브 |
7087e84f69c47910fd39c3869a70 | SHA256 | Pubload를 제공하는 무기화된 아카이브 |
38fcd10100f1bfd75f8dc0883b0c | SHA256 | Pubload를 제공하는 무기화된 아카이브 |
69cb87b2d8ee50f46dae791b5a0 | SHA256 | 무기화된 아카이브의 다운로드 URL이 포함된 PDF |
564a03763879aaed4da8a8c1d60 | SHA256 | ToneShell7을 주입하는 로더 |
e4bb60d899699fd84126f9fa0df | SHA256 | Pubload를 주입하는 로더 |
c2d1ff85e9bb8feb14fd015dceee1 | SHA256 | Pubload를 주입하는 로더 |
188.208.141[.]196 | IPv4 | Pubload C2 서버 |
bdbc936ddc9234385317c4ee83 | SHA256 | ToneShell8 백도어 |
f0fec3b271b83e23ed7965198f3b | SHA256 | ToneShell8 백도어 |
e7b29611c789a6225aebbc9fee37 | SHA256 | ToneShell8 백도어 |
9ca5b2cbc3677a5967c448d9d21 | SHA256 | ToneShell8 백도어 |
146.70.29[.]229 | IPv4 | ToneShell7/ToneShell8 C2 서버 |
318a1ebc0692d1d012d20d306 | SHA256 | ToneShell9 백도어 |
0d632a8f6dd69566ad98db56 | SHA256 | ToneShell9을 제공하는 무기화된 아카이브 |
39e7bbcceddd16f6c4f2fc2335a | SHA256 | ToneShell9을 제공하는 무기화된 아카이브 |
05eb6a06b404b6340960d7a6 | SHA256 | ToneShell9의 기반이 된 ToneShell 포크가 포함된 로더 |
123.253.34[.]44 | IPv4 | Toneshell9 C2 서버 |
www.slickvpn[.]com | 도메인 | Toneshell9 C2 서버 |
dd694aaf44731da313e4594d | SHA256 | SnakeDisk USB 웜 |
bb5bb82e5caf7d4dbbe878b7 | SHA256 | Yokai DLL 사이드로드에 사용되는 SnakeDisk의 악성 EXE 페이로드 |
35bec1d8699d29c27b66e564 | SHA256 | Yokai 백도어 DLL |
http://118.174.183[.]89/kptinfo | URL | Yokai C2 서버 |
이제 Filigran의 OpenCTI와 IBM X-Force 프리미어 위협 인텔리전스를 통합하여 이 위협 활동 등에 대한 실행 가능한 위협 인텔리전스를 제공합니다. 위협 행위자, 멀웨어 및 산업 위험에 대한 인사이트에 액세스하세요. 탐지 및 대응 능력을 강화하고 IBM X-Force의 전문 역량으로 사이버 보안을 강화하기 위해 X-Force OpenCTI Connector를 설치하세요. 지금 X-Force Premier Threat Intelligence 30일 평가판을 이용해 보세요!