콘텐츠로 이동하기
위협 인텔리전스

BRICKSTORM에서 GRIMBOLT로: UNC6201의 Dell RecoverPoint for Virtual Machines 제로데이 취약점 악용

2026년 2월 17일
Mandiant

Google Threat Intelligence Group

Mandiant Services

Stop attacks, reduce risk, and advance your security.

Contact Mandiant

해당 블로그의 원문은 2026년 2월 18일 Google Cloud 블로그(영문)에 게재되었습니다. 


작성자: Peter Ukhanov, Daniel Sislo, Nick Harbour, John Scarbrough, Fernando Tomlinson, Jr., Rich Reece


소개 

맨디언트와 구글 위협 인텔리전스 그룹(GTIG)은 CVSSv3.1 점수 10.0의 고위험 취약점인 CVE-2026-22769가 Dell RecoverPoint for Virtual Machines에서 제로데이로 악용된 것을 확인했습니다. 사고 대응 분석 결과, 중국 연계 의심 위협 그룹인 UNC6201이 최소 2024년 중반부터 이 취약점을 악용하여 수평 이동, 지속성 유지, 그리고 SLAYSTYLE, BRICKSTORM, GRIMBOLT라는 새로운 백도어 등 악성코드를 배포해 온 사실이 드러났습니다. 이러한 사고의 초기 침투 경로는 확인되지 않았지만, UNC6201은 초기 침투를 위해 엣지 어플라이언스(예: VPN 집중 장치)를 표적으로 삼는 것으로 알려져 있습니다. UNC6201은 Silk Typhoon으로 공개적으로 보고된 공격자와 동의어로 사용되어 온 UNC5221과 상당한 중복점이 있지만, 현재 GTIG는 두 그룹을 동일하다고 간주하지는 않습니다.

이 보고서는 BRICKSTORM 첩보 활동에 대한 이전 GTIG 연구를 기반으로, CVE-2026-22769 악용 및 GRIMBOLT 악성코드의 기능에 대한 기술적 심층 분석을 제공합니다. 맨디언트는 2025년 9월, 기존 BRICKSTORM 바이너리를 GRIMBOLT로 교체하는 캠페인을 확인했습니다. GRIMBOLT는 공격 기술의 변화를 보여줍니다. C#으로 작성되고 네이티브 AOT(Ahead-Of-Time) 컴파일을 사용하여 컴파일된 이 새로운 악성코드는 정적 분석을 복잡하게 하고 리소스가 제한된 어플라이언스에서 성능을 향상시키도록 설계되었습니다.

Dell 어플라이언스 악용 외에도, 맨디언트는 공격자가 은밀한 네트워크 피벗을 위한 '고스트 NIC' 생성과 단일 패킷 인증(SPA)을 위한 iptables 사용 등 VMware 가상 인프라로 침투하기 위해 새로운 전술을 사용하는 것을 관찰했습니다.

Dell은 CVE-2026-22769에 대한 해결책을 발표했으며, 고객들은 공식 보안 권고의 지침을 따를 것을 강력히 권장합니다. 이 게시물은 실행 가능한 강화 지침, 탐지 기회, 그리고 UNC6201의 전술, 기술 및 절차(TTP)에 대한 기술적 분석을 제공합니다.

GRIMBOLT

침해된 Dell RecoverPoint for Virtual Machines를 분석하는 동안, 맨디언트는 BRICKSTORM 바이너리의 존재와 2025년 9월에 이 바이너리가 GRIMBOLT로 교체된 것을 발견했습니다. GRIMBOLT는 C#으로 작성되고 네이티브 AOT(Ahead-Of-Time) 컴파일을 사용하며 UPX로 패킹된 발판용 백도어입니다. 이는 원격 셸 기능을 제공하며, 이전에 배포된 BRICKSTORM 페이로드와 동일한 명령 및 제어(C2)를 사용합니다. 공격자가 BRICKSTORM을 GRIMBOLT로 교체한 것이 사전에 계획된 수명 주기 반복의 일부였는지, 아니면 맨디언트와 다른 업계 파트너가 주도한 사고 대응 노력에 대한 반응이었는지는 불분명합니다. 런타임에 JIT(Just-In-Time) 컴파일을 사용하는 기존 .NET 소프트웨어와 달리, 2022년에 .NET에 도입된 네이티브 AOT 컴파일 바이너리는 컴파일 중에 직접 기계 네이티브 코드로 변환됩니다. 이 접근 방식은 리소스가 제한된 어플라이언스에서 소프트웨어 성능을 향상시키고, 필요한 라이브러리가 파일에 이미 포함되도록 보장하며, 일반적으로 C# 샘플과 관련된 공통 중간 언어(CIL) 메타데이터를 제거하여 정적 분석을 복잡하게 만듭니다.

UNC6201은 convert_hosts.sh라는 합법적인 셸 스크립트를 수정하여 백도어 경로를 포함시키는 방식으로 Dell RecoverPoint for Virtual Machines에서 BRICKSTORM 및 GRIMBOLT의 지속성을 확보했습니다. 이 셸 스크립트는 rc.local을 통해 부팅 시 어플라이언스에서 실행됩니다.

CVE-2026-22769

맨디언트는 BRICKSTORM 및 GRIMBOLT 백도어와 관련된 활성 C2가 있는 피해자 환경 내에서 여러 Dell RecoverPoint for Virtual Machines를 조사하던 중 CVE-2026-22769를 발견했습니다. 어플라이언스를 분석하는 동안, 분석가들은 침해 이전에 admin 사용자 이름을 사용하여 어플라이언스로 향하는 여러 웹 요청을 확인했습니다. 이 요청들은 Dell RecoverPoint 소프트웨어의 다양한 구성 요소를 배포하는 데 사용되는 설치된 Apache Tomcat Manager로 보내졌으며, SLAYSTYLE 웹 셸을 포함하는 악성 WAR 파일 배포로 이어졌습니다.

다양한 구성 파일을 분석한 후, /home/kos/tomcat9/tomcat-users.xml에서 admin 사용자에 대한 하드코딩된 기본 자격 증명 세트를 확인했습니다. 공격자는 이 자격 증명을 사용하여 Dell RecoverPoint Tomcat Manager에 인증하고, /manager/text/deploy 엔드포인트를 사용하여 악성 WAR 파일을 업로드한 다음, 어플라이언스에서 root 권한으로 명령을 실행할 수 있었습니다.

이 취약점에 대한 최초의 악용 활동은 2024년 중반에 발생했습니다.

새롭게 관찰된 VMware 활동

최근 조사 과정에서 맨디언트는 맨디언트CrowdStrikeCISA가 이전에 보고한 바와 같이 공격자에 의한 VMware 가상 인프라의 지속적인 침해를 관찰했습니다. 또한, 이전에 보고되지 않은 몇 가지 새로운 TTP가 발견되었습니다.

고스트 NIC (Ghost NICs)

맨디언트는 공격자가 ESXi 서버에서 실행 중인 기존 가상 머신에 새로운 임시 네트워크 포트를 생성하는 것을 발견했습니다. 공격자는 이 네트워크 포트를 사용하여 영향을 받는 조직이 사용하는 다양한 내부 및 SaaS(Software-as-a-Service) 인프라로 피벗했습니다.

iptables 프록시 (iptables proxying)

침해된 vCenter 어플라이언스를 분석하는 동안, 맨디언트는 배포된 SLAYSTYLE 웹 셸을 사용하여 공격자가 실행한 여러 명령을 Systemd 저널에서 복구했습니다. 이 iptable 명령들은 단일 패킷 인증(Single Packet Authorization)에 사용되었으며 다음으로 구성됩니다:

  • 443 포트로 들어오는 트래픽에서 특정 HEX 문자열을 모니터링

  • 해당 트래픽의 소스 IP를 목록에 추가하고, IP가 목록에 있으면서 10443 포트로 연결하면 연결을 수락(ACCEPT)

  • 승인된 초기 트래픽이 10443 포트로 들어오면, 이후의 모든 트래픽은 자동으로 리디렉션됨

  • 이후 300초(5분) 동안, IP가 승인 목록에 있는 경우 443 포트로의 모든 트래픽은 조용히 10443 포트로 리디렉션

iptables -I INPUT -i eth0 -p tcp --dport 443 -m string --hex-string <HEX_STRING>
iptables -A port_filter -i eth0 -p tcp --dport 10443 --syn -m recent --rcheck --name ipt -j ACCEPT
iptables -t nat -N IPT
iptables -t nat -A IPT -p tcp -j REDIRECT --to-ports 10443
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 --syn -m recent --rcheck --name ipt --seconds 300 -j IPT

해결 방안

다음 조사 가이드는 방어 담당자가 Dell RecoverPoint for Virtual Machines를 분석하는 데 도움이 될 수 있습니다.

Dell RecoverPoint 디스크 이미지 포렌식 분석

다음 아티팩트는 Dell RecoverPoint for Virtual Machines의 전체 디스크 이미지 분석을 수행하는 사고 대응 담당자에게 매우 중요한 증거 자료입니다.

  • Tomcat Manager의 웹 로그는 /home/kos/auditlog/fapi_cl_audit_log.log에 저장됩니다. 로그 파일에서 /manager에 대한 요청 인스턴스가 있는지 확인하십시오. 해당 요청의 모든 인스턴스는 의심스러운 것으로 간주해야 합니다.

    • PUT /manager/text/deploy?path=/<MAL_PATH>&update=true에 대한 모든 요청은 잠재적으로 악의적일 수 있습니다. MAL_PATH는 잠재적으로 악성인 WAR 파일이 업로드된 경로가 됩니다.

  • 업로드된 WAR 파일은 일반적으로 /var/lib/tomcat9에 저장됩니다.

  • 업로드된 WAR 파일에 대한 컴파일된 아티팩트는 /var/cache/tomcat9/Catalina에 위치합니다.

  • Tomcat 애플리케이션 로그는 /var/log/tomcat9/에 위치합니다.

    • Catalina - org.apache.catalina.startup.HostConfig.deployWAR 및 org.apache.catalina.startup.HostConfig.deployWAR 이벤트를 조사하십시오.

    • Localhost - WAR 배포와 관련된 추가 이벤트 및 악성 WAR 및 내장 파일에 의해 생성된 모든 예외를 포함합니다.

  • Dell RecoverPoint for Virtual Machines에서 BRICKSTORM 및 GRIMBOLT 백도어의 지속성은 백도어 경로를 포함하도록 /home/kos/kbox/src/installation/distribution/convert_hosts.sh를 수정하여 설정되었습니다.

침해 지표 (IOCs)

이 블로그 게시물에 설명된 활동을 더 넓은 커뮤니티가 추적하고 식별하는 데 도움이 되도록, 등록된 사용자를 위해 무료 GTI 컬렉션에 IOC를 포함했습니다.

파일 지표

패밀리

파일 이름

SHA256

GRIMBOLT 

support

24a11a26a2586f4fba7bfe89df2e21a0809ad85069e442da98c37c4add369a0c

GRIMBOLT

out_elf_2

dfb37247d12351ef9708cb6631ce2d7017897503657c6b882a711c0da8a9a591

SLAYSTYLE

default_jsp.java

92fb4ad6dee9362d0596fda7bbcfe1ba353f812ea801d1870e37bfc6376e624a

BRICKSTORM

해당 없음

aa688682d44f0c6b0ed7f30b981a609100107f2d414a3a6e5808671b112d1878

BRICKSTORM

splisten

2388ed7aee0b6b392778e8f9e98871c06499f476c9e7eae6ca0916f827fe65df

BRICKSTORM

해당 없음

320a0b5d4900697e125cebb5ff03dee7368f8f087db1c1570b0b62f5a986d759

BRICKSTORM

해당 없음

90b760ed1d0dcb3ef0f2b6d6195c9d852bcb65eca293578982a8c4b64f51b035

BRICKSTORM

해당 없음

45313a6745803a7f57ff35f5397fdf117eaec008a76417e6e2ac8a6280f7d830

네트워크 지표

패밀리

지표

유형

GRIMBOLT

wss://149.248.11.71/rest/apisession

C2 Endpoint

GRIMBOLT

149.248.11.71

C2 IP

YARA Rules

G_APT_BackdoorToehold_GRIMBOLT_1
rule G_APT_BackdoorToehold_GRIMBOLT_1
{
  meta:
    author = "Google Threat Intelligence Group (GTIG)"
  strings:
    $s1 = { 40 00 00 00 41 18 00 00 00 4B 21 20 C2 2C 08 23 02 }
    $s2 = { B3 C3 BB 41 0D ?? ?? ?? 00 81 02 0C ?? ?? ?? 00 }
    $s3 = { 39 08 01 49 30 A0 52 30 00 00 00 DB 40 09 00 02 00 80 65 BC 98 }
    $s4 = { 2F 00 72 00 6F 00 75 00 74 00 65 79 23 E8 03 0E 00 00 00 2F 00 70 00 72 00 6F 00 63 00 2F 00 73 00 65 00 6C 00 66 00 2F 00 65 00 78 00 65 }
  condition:
    (uint32(0) == 0x464c457f) //linux
    and all of ($s*)
}
G_Hunting_BackdoorToehold_GRIMBOLT_1
rule G_Hunting_BackdoorToehold_GRIMBOLT_1
{
    meta:
        author = "Google Threat Intelligence Group (GTIG)"

    strings:
        $s1 = "[!] Error : Plexor is nul" ascii wide
        $s2 = "port must within 0~6553" ascii wide
        $s3 = "[*] Disposing.." ascii wide
        $s4 = "[!] Connection error. Kill Pty" ascii wide
        $s5 = "[!] Unkown message type" ascii wide
        $s6 = "[!] Bad dat" ascii wide
    condition:
        (  
            (uint16(0) == 0x5a4d and uint32(uint32(0x3C)) == 0x00004550) or
            uint32(0) == 0x464c457f or
            uint32(0) == 0xfeedface or
            uint32(0) == 0xcefaedfe or
            uint32(0) == 0xfeedfacf or
            uint32(0) == 0xcffaedfe or
            uint32(0) == 0xcafebabe or
            uint32(0) == 0xbebafeca or
            uint32(0) == 0xcafebabf or
            uint32(0) == 0xbfbafeca
        ) and any of them
}
G_APT_BackdoorWebshell_SLAYSTYLE_4
rule G_APT_BackdoorWebshell_SLAYSTYLE_4
{
	meta:
		author = "Google Threat Intelligence Group (GTIG)"
	strings:
		$str1 = "<%@page import=\"java.io" ascii wide
		$str2 = "Base64.getDecoder().decode(c.substring(1)" ascii wide
		$str3 = "{\"/bin/sh\",\"-c\"" ascii wide
		$str4 = "Runtime.getRuntime().exec(" ascii wide
		$str5 = "ByteArrayOutputStream();" ascii wide
		$str6 = ".printStackTrace(" ascii wide
	condition:
		$str1 at 0 and all of them
}

Google Security Operations (SecOps)

Google Security Operations(SecOps) 고객은 'Mandiant Frontline Threats' 및 'Mandiant Hunting Rules' 규칙 팩에서 이러한 광범위한 범주 규칙 등을 사용할 수 있습니다. 블로그 게시물에서 논의된 활동은 Google SecOps에서 다음 규칙 이름으로 탐지됩니다.

  • Web Archive File Write To Tomcat Directory (Tomcat 디렉터리에 웹 아카이브 파일 쓰기)

  • Remote Application Deployment via Tomcat Manager (Tomcat Manager를 통한 원격 애플리케이션 배포)

  • Suspicious File Write To Tomcat Cache Directory (Tomcat 캐시 디렉터리에 의심스러운 파일 쓰기)

  • Kbox Distribution Script Modification (Kbox 배포 스크립트 수정)

  • Multiple DNS-over-HTTPS Services Queried (여러 DNS-over-HTTPS 서비스 쿼리)

  • Unknown Endpoint Generating DNS-over-HTTPS and Web Application Development Services Communication (알 수 없는 엔드포인트에서 DNS-over-HTTPS 및 웹 애플리케이션 개발 서비스 통신 생성)

  • Unknown Endpoint Generating Google DNS-over-HTTPS and Cloudflare Hosted IP Communication (알 수 없는 엔드포인트에서 Google DNS-over-HTTPS 및 Cloudflare 호스팅 IP 통신 생성)

  • Unknown Endpoint Generating Google DNS-over-HTTPS and Amazon Hosted IP Communication (알 수 없는 엔드포인트에서 Google DNS-over-HTTPS 및 Amazon 호스팅 IP 통신 생성)

감사의 말

이 위협에 맞서 협력해 준 Dell에 감사드립니다. 이 분석은 Google 위협 인텔리전스 그룹, 맨디언트 컨설팅 및 FLARE의 도움이 없었다면 불가능했을 것입니다. 특히 GTIG 연구 및 발견(RAD)의 Jakub Jozwiak과 Allan Sepillo에게 감사의 말씀을 전합니다.

게시 위치