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

주의! 중국 연계 추정 위협 행위자, 심각한 Ivanti Connect Secure 취약점 (CVE-2025-22457) 활발히 악용 중

2025년 4월 3일
Mandiant

Mandiant Incident Response

Investigate, contain, and remediate security incidents.

Learn more

* 해당 블로그의 원문은 2025년 4월 3일 Google Cloud 블로그(영문)에 게재되었습니다. 


작성자: John Wolfram, Michael Edie, Jacob Thompson, Matt Lin, Josh Murchie


2025년 4월 3일 목요일, Ivanti는 Ivanti Connect Secure("ICS") VPN 어플라이언스 버전 22.7R2.5 및 이전 버전에 영향을 미치는 심각한 보안 취약점 CVE-2025-22457을 공개했습니다. CVE-2025-22457은 버퍼 오버플로우 취약점으로, 성공적으로 악용될 경우 원격 코드 실행이 가능합니다. Mandiant와 Ivanti는 ICS 9.X(단종) 및 22.7R2.5 이전 버전에서 실제 공격이 발생한 증거를 확인했습니다. Ivanti와 Mandiant는 모든 고객에게 가능한 한 빨리 업그레이드를 권장합니다.

CVE-2025-22457 악용의 가장 오래된 증거는 2025년 3월 중순에 관찰되었습니다. 성공적인 악용 이후, TRAILBLAZE 인메모리 전용 드로퍼와 BRUSHFIRE 수동 백도어라는 두 가지 새롭게 식별된 악성코드 계열의 배포가 관찰되었습니다. 또한 이전에 UNC5221로 알려진 SPAWN 악성코드 생태계의 배포도 관찰되었습니다. UNC5221은 2023년부터 에지 장치에 대한 제로데이 공격을 수행한 것으로 알려진 중국 연계 추정 스파이 행위자입니다.

CVE-2025-22457에 대한 패치는 2025년 2월 11일에 ICS 22.7R2.6에 릴리스되었습니다. 이 취약점은 제한된 문자 공간을 가진 버퍼 오버플로우였기 때문에 초기에는 낮은 위험의 서비스 거부 취약점으로 여겨졌습니다. 위협 행위자가 ICS 22.7R2.6의 취약점 패치를 분석하여 복잡한 과정을 통해 22.7R2.5 이전 버전에서 원격 코드 실행이 가능하다는 것을 발견했을 가능성이 높다고 평가합니다.

Ivanti는 악용된 취약점에 대한 패치를 릴리스했으며, Ivanti 고객은 시스템을 가능한 한 빨리 보호하기 위해 보안 권고의 조치를 따르도록 강력히 권장됩니다.

공격 후 전술, 기술 및 절차

CVE-2025-22457의 성공적인 악용 후, Mandiant는 쉘 스크립트 드로퍼를 통해 TRAILBLAZE 및 BRUSHFIRE로 추적되는 두 가지 새롭게 식별된 악성코드 계열의 배포를 관찰했습니다. Mandiant는 SPAWN 악성코드 생태계의 배포도 관찰했습니다. 또한 이전의 관찰된 동작과 유사하게, 공격자는 탐지를 회피하기 위해 무결성 검사 도구(ICT)를 수정하려고 시도했습니다.

쉘 스크립트 드로퍼

CVE-2025-22457의 성공적인 악용 후, Mandiant는 TRAILBLAZE 드로퍼를 실행하는 데 활용되는 쉘 스크립트를 관찰했습니다. 이 드로퍼는 BRUSHFIRE 수동 백도어를 실행 중인 /home/bin/web 프로세스에 삽입합니다. 첫 번째 단계는 다른 /home/bin/web 프로세스의 자식 프로세스인 /home/bin/web 프로세스를 검색하는 것으로 시작됩니다 (이것의 요점은 실제로 연결을 수신하는 웹 프로세스에 삽입하는 것으로 보입니다). 그런 다음 다음 파일과 관련 콘텐츠를 생성합니다.

  • /tmp/.p: /home/bin/web 프로세스의 PID를 포함합니다.
  • /tmp/.m: 해당 프로세스의 메모리 맵(사람이 읽을 수 있는 형식)을 포함합니다.
  • /tmp/.w: 해당 프로세스의 웹 바이너리 기본 주소를 포함합니다.
  • /tmp/.s: 해당 프로세스의 libssl.so 기본 주소를 포함합니다.
  • /tmp/.r: BRUSHFIRE 수동 백도어를 포함합니다.
  • /tmp/.i: TRAILBLAZE 드로퍼를 포함합니다.

그런 다음 쉘 스크립트는 TRAILBLAZE로 추적되는 두 번째 단계의 인메모리 전용 드로퍼인 /tmp/.i를 실행합니다. 그런 다음 이전에 생성된 모든 임시 파일(/tmp/.p 제외)과 /data/var/cores 디렉터리의 내용을 삭제합니다. 다음으로 /home/bin/web 프로세스의 모든 자식 프로세스가 종료되고 /tmp/.p 파일이 삭제됩니다. 이 모든 동작은 영구적이지 않으며 시스템 또는 프로세스가 재부팅되면 드로퍼를 다시 실행해야 합니다.

TRAILBLAZE

TRAILBLAZE는 원시 시스템 호출을 사용하고 가능한 한 최소화되도록 설계된 베어 C로 작성된 인메모리 전용 드로퍼로, 쉘 스크립트 내에 Base64로 포함될 수 있도록 하기 위함으로 보입니다. TRAILBLAZE는 식별된 /home/bin/web 프로세스에 후크를 삽입합니다. 그런 다음 해당 프로세스 내부의 코드 케이브에 BRUSHFIRE 수동 백도어를 삽입합니다.

BRUSHFIRE

BRUSHFIRE는 SSL_read 후크 역할을 하는 베어 C로 작성된 수동 백도어입니다. 먼저 원래의 SSL_read 함수를 실행하고 반환된 데이터가 특정 문자열로 시작하는지 확인합니다. 데이터가 해당 문자열로 시작하면 데이터에 포함된 쉘코드를 XOR 복호화하여 실행합니다. 수신된 쉘코드가 값을 반환하면 백도어는 SSL_write를 호출하여 해당 값을 다시 보냅니다.

SPAWNSLOTH

이전 블로그 게시물에서 자세히 설명된 바와 같이, SPAWNSLOTH는 SPAWNSNAIL 백도어와 관련된 로그 변조 구성 요소 역할을 합니다. 로컬 로깅과 원격 syslog 전달을 모두 비활성화하기 위해 dslogserver 프로세스를 대상으로 합니다.

SPAWNSNARE

SPAWNSNARE는 C로 작성되었으며 Linux를 대상으로 하는 유틸리티입니다. 명령줄 도구 없이 압축되지 않은 Linux 커널 이미지(vmlinux)를 파일로 추출하고 AES를 사용하여 암호화하는 데 사용할 수 있습니다.

SPAWNWAVE

SPAWNWAVE는 SPAWNANT의 진화된 버전으로, SPAWN* 악성코드 생태계의 다른 구성 요소의 기능을 결합합니다. SPAWNWAVE는 공개적으로 보고된 SPAWNCHIMERARESURGE 악성코드 계열과 겹칩니다.

속성

Google Threat Intelligence Group(GTIG)은 CVE-2025-22457 악용 및 후속 SPAWN 악성코드 생태계 배포를 중국 연계 추정 스파이 행위자인 UNC5221의 소행으로 판단합니다. GTIG는 이전에 UNC5221이 CVE-2025-0282 제로데이 공격과 CVE-2023-46805 및 CVE-2024-21887 악용을 수행한 것을 보고했습니다.

또한 GTIG는 이전에 UNC5221이 NetScaler ADC 및 NetScaler Gateway 어플라이언스에 영향을 미치는 CVE-2023-4966 제로데이 공격을 수행한 것도 관찰했습니다. UNC5221은 운영 과정에서 광범위한 국가 및 산업 분야를 대상으로 삼았으며, 다양한 에지 어플라이언스에서 수동 백도어부터 트로이 목마화된 합법적인 구성 요소에 이르기까지 광범위한 도구 세트를 활용했습니다.

GTIG는 UNC5221이 성공적인 과거 사례와 공격적인 운영 속도를 바탕으로 에지 장치에 대한 제로데이 공격을 계속 추구할 가능성이 높다고 평가합니다. 또한 CVE-2025-0282 악용을 자세히 설명한 이전 블로그 게시물에서 언급했듯이, GTIG는 UNC5221이 침입 작전 중 실제 출처를 숨기기 위해 손상된 Cyberoam 어플라이언스, QNAP 장치 및 ASUS 라우터의 난독화 네트워크를 활용하는 것을 관찰했습니다.

결론

UNC5221의 이번 최신 활동은 전 세계적으로 에지 장치를 대상으로 하는 지속적인 정교한 위협을 강조합니다. n-day 취약점 CVE-2025-22457을 악용하는 이번 캠페인은 에지 장치에 대한 행위자(예: UNC5221)의 지속적인 집중을 보여주며, 깊이 있는 장치 지식을 활용하고 제로데이 및 이제는 n-day 취약점을 사용하는 그들의 역사에 추가됩니다. 이러한 활동은 중요한 에지 인프라에 대한 익스플로잇 및 맞춤형 악성코드에 상당한 투자를 하는 중국 연계 추정 스파이 그룹 사이에서 GTIG가 관찰한 광범위한 전략과 일치합니다.

권장사항 

Mandiant는 조직이 CVE-2025-22457을 해결하기 위해 Ivanti Connect Secure (ICS) 어플라이언스를 버전 22.7R2.6 이상으로 즉시 업그레이드하여 사용 가능한 패치를 적용할 것을 권장합니다. 또한 조직은 외부 및 내부 무결성 검사 도구("ICT")를 사용하고 의심스러운 활동이 발견되면 Ivanti 지원팀에 문의해야 합니다. 이를 보완하기 위해 방어자는 웹 프로세스와 관련된 코어 덤프를 적극적으로 모니터링하고, ICT 상태 덤프 파일을 조사하고, 어플라이언스에 제시된 클라이언트 TLS 인증서의 이상 징후를 탐지해야 합니다.

감사의 말씀

이번 조사에 대한 지속적인 파트너십과 지원에 대해 Ivanti의 Daniel Spicer 및 팀 전체에 감사드립니다. 또한 Google Threat Intelligence Group 및 Mandiant의 FLARE 분석가들의 도움이 없었다면 이번 분석은 불가능했을 것입니다. 특히 FLARE의 Christopher Gardner와 Dhanesh Kizhakkinan에게 지원에 감사드립니다.

침해 지표 (IOC)

보안 커뮤니티가 이 블로그 게시물에 설명된 활동을 검색하고 식별하는 데 도움이 되도록 등록된 사용자를 위한 GTI 컬렉션에 침해 지표(IOC)를 포함했습니다.

악성코드 계열

MD5

파일명

설명

TRAILBLAZE

4628a501088c31f53b5c9ddf6788e835

/tmp/.i

인메모리 드로퍼

BRUSHFIRE

e5192258c27e712c7acf80303e68980b

/tmp/.r

수동 백도어

SPAWNSNARE

6e01ef1367ea81994578526b3bd331d6

/bin/dsmain

커널 추출 및 암호화 도구

SPAWNWAVE

ce2b6a554ae46b5eb7d79ca5e7f440da

/lib/libdsupgrade.so

임플란트 유틸리티 

SPAWNSLOTH

10659b392e7f5b30b375b94cae4fdca0

/tmp/.liblogblock.so

로그 변조 유틸리티

YARA 룰

rule M_APT_Installer_SPAWNANT_1
{ 
    meta: 
        author = "Mandiant" 
        description = "Detects SPAWNANT. SPAWNANT is an 
Installer targeting Ivanti devices. Its purpose is to persistently 
install other malware from the SPAWN family (SPAWNSNAIL, 
SPAWNMOLE) as well as drop additional webshells on the box." 
  
    strings: 
        $s1 = "dspkginstall" ascii fullword
        $s2 = "vsnprintf" ascii fullword
        $s3 = "bom_files" ascii fullword
        $s4 = "do-install" ascii
        $s5 = "ld.so.preload" ascii
        $s6 = "LD_PRELOAD" ascii
        $s7 = "scanner.py" ascii
        
    condition: 
        uint32(0) == 0x464c457f and 5 of ($s*)
}
rule M_Utility_SPAWNSNARE_1 {
    meta:
    	 author = "Mandiant"
        description = "SPAWNSNARE is a utility written in C that targets 
Linux systems by extracting the uncompressed Linux kernel image 
into a file and encrypting it with AES."

    strings:
        $s1 = "\x00extract_vmlinux\x00"
        $s2 = "\x00encrypt_file\x00"
        $s3 = "\x00decrypt_file\x00"
        $s4 = "\x00lbb_main\x00"
        $s5 = "\x00busybox\x00"
        $s6 = "\x00/etc/busybox.conf\x00"

    condition:
        uint32(0) == 0x464c457f
        and all of them
                  
}
rule M_APT_Utility_SPAWNSLOTH_2
{ 
    meta: 
        author = "Mandiant" 
        description = "Hunting rule to identify strings found in SPAWNSLOTH"
  
    strings: 
        $dslog = "dslogserver" ascii fullword
        $hook1 = "g_do_syslog_servers_exist" ascii fullword
        $hook2 = "ZN5DSLog4File3addEPKci" ascii fullword
        $hook3 = "funchook" ascii fullword
    
    condition: 
        uint32(0) == 0x464c457f and all of them
}
게시 위치