쉘터 이용: 야생에서 악용되는 상업적 회피 프레임워크 

Elastic Security Labs는 최근 불법적으로 획득한 상용 우회 프레임워크 버전인 SHELLTER를 사용해 익스플로잇 후 페이로드를 배포하는 인포스틸러의 출현을 탐지했습니다.

25분 읽기보안 연구
쉘터 이용: 야생에서 악용되는 상업적 회피 프레임워크

서문

Elastic Security Labs는 상용 AV/EDR 우회 프레임워크인 SHELLTER를 활용하여 멀웨어를 로드하는 것으로 보이는 여러 캠페인을 관찰하고 있습니다. SHELLTER는 공격 보안 업계에 판매되어 승인된 보안 평가를 통해 레드팀 운영자가 최신 안티멀웨어 솔루션에 대해 C2 프레임워크를 보다 효과적으로 배포할 수 있도록 지원합니다.

핵심 사항

  • 위협 그룹이 인수한 상업적 회피 프레임워크 SHELLTER
  • 라이선스 메타데이터에 기록된 바와 같이 쉘터는 2025년 4월부터 여러 인포스틸러 캠페인에 사용되었습니다.
  • 쉘터는 분석 및 탐지를 회피하는 고유한 기능을 사용합니다.
  • Elastic Security Labs, SHELLTER로 보호되는 바이너리를 위한 동적 언패커 출시
Throughout this document we will refer to different terms with “shellter” in them. We will try to 
maintain the following style to aid readability:
  *  “Shellter Project” - the organization that develops and sells the Shellter evasion framework
  *  “Shellter Pro Plus/Elite” - the commercial names for the tools sold by the Shellter Project
  *  “SHELLTER” - the loader we have observed in malicious usage and are detailing in this report
  *  “SHELLTER-protected” - a descriptor of final payloads that the SHELLTER loader delivers

쉘터 개요

쉘터는 10년 넘게 레드팀을 지원해 온 상업적 회피 프레임워크입니다. 공격적인 보안 서비스 제공업체가 안티바이러스 및 최근에는 EDR 도구를 우회하는 데 도움이 됩니다. 이를 통해 레드팀은 보안 벤더가 탐지 서명을 작성할 때 일반적으로 필요한 지속적인 개발 없이도 C2 프레임워크를 활용할 수 있습니다.

While the Shellter Project does offer a free version of the software, it has a limited feature-set, 
only 32-bit .exe support, and is generally better understood and detected by anti-malware 
products. The free version is not described in this article.

다른 많은 공격용 보안 도구(OST)와 마찬가지로 쉘터는 이중 용도의 제품입니다. 악의적인 공격자가 쉘터에 접근하면 쉘터를 사용하여 도구의 수명을 연장할 수 있습니다. 쉘터 프로젝트와 같이 평판이 좋은 공격용 보안 벤더는 제품이 악의적으로 사용될 위험을 완화하기 위해 안전 장치를 구현합니다. 이러한 조치에는 지리적 판매 제한, 조직 실사, 최종 사용자 라이선스 계약(EULA)이 포함됩니다. 이러한 노력에도 불구하고 동기 부여가 강한 악의적인 공격자들은 여전히 도전 과제입니다.

6월 중순, 저희는 2025년 4월 말부터 쉘터를 사용하여 페이로드를 패키징하는 금전적 동기를 가진 다수의 인포스틸러 캠페인을 발견했습니다. 증거에 따르면 이것은 4월에 출시된 쉘터 엘리트 버전 11.0입니다 16, 2025.

SHELLTER는 특정 운영 환경, 페이로드 전송 메커니즘, 암호화 패러다임에 맞춘 다양한 구성 설정을 제공하는 복잡한 프로젝트입니다. 이 보고서는 식별된 악성 캠페인에서 관찰된 특징에만 초점을 맞춥니다. 일부 기능은 일반적인 것처럼 보이지만 사용 가능한 모든 기능을 포괄적으로 검토하는 것은 이 문서의 범위를 벗어납니다.

쉘터 로더 - 기술 세부 정보

다음 섹션에서는 쉘터 프로젝트의 공개된 엘리트 독점 기능 중 일부와 유사한 기능에 대해 설명합니다. 쉘터 엘리트를 관찰하고 있다는 평가가 나왔습니다. 이러한 결론은 개발자의 공개 문서 검토, 코드 유사성이 높은 여러 빌드의 다양한 샘플 관찰, 거의 관찰되지 않는 회피 기능의 보급률 등을 바탕으로 내린 것입니다.

다형성 정크 코드

셸터로 보호되는 샘플은 일반적으로 다형성 난독화 기능을 갖춘 자체 수정 셸코드를 사용하여 합법적인 프로그램 내에 자신을 삽입합니다. 합법적인 명령어와 다형성 코드의 조합은 이러한 파일이 정적 탐지와 서명을 회피하여 탐지되지 않도록 도와줍니다.

쉘터로 보호되는 RHADAMANTHYS 샘플에서 VirtualAlloc 에 중단점을 설정하면 이 멀웨어 샘플의 호출 스택을 확인할 수 있습니다.

이러한 유형의 다형성 코드는 정적 디스어셈블러를 혼란스럽게 하고 에뮬레이션 작업을 방해합니다. 이러한 지침은 언패킹 단계에서 표시되며, 새 셸코드 스텁을 위한 메모리를 할당하기 위해 이러한 Windows API 함수 쌍 중 하나를 호출합니다:

  • GetModuleHandleA / GetProcAddress
  • CreateFileMappingW / MapViewOfFile

쉘터 기능은 새롭고 실질적인 기능에 포함되어 있습니다. 셸코드 스텁의 추가 언패킹 및 정크 인스트럭션 후에 도달합니다. IDA Pro 또는 Binary Ninja는 이 단계에서 코드를 성공적으로 디컴파일할 수 있습니다.

파일 매핑을 통한 시스템 모듈 연결 해제

AV/EDR 공급업체의 API 후킹 기술을 우회하기 위해 쉘터는 NtCreateSectionNtMapViewOfSection 을 통해 ntdll.dll 의 새 복사본을 매핑합니다.

NtOpenSectionNtMapViewOfSection 을 통해 KnownDLLs 디렉토리에서 깨끗한 ntll.dll 을 로드하여 연결을 해제하는 두 번째 옵션도 있습니다.

페이로드 암호화 및 압축

쉘터는 AES-128 CBC 모드를 사용하여 최종 사용자 정의 페이로드를 암호화합니다. 이 암호화는 두 가지 방법 중 하나로 이루어질 수 있습니다:

  • 임베디드 키/IV: 무작위로 생성된 키/IV 쌍이 SHELLTER 페이로드에 직접 임베드됩니다.
  • 서버에서 가져온 키/IV: 공격자가 제어하는 서버에서 키/IV 쌍을 가져옵니다.

임베디드 옵션을 사용한 샘플의 경우, 기본 페이로드를 성공적으로 복구했습니다.

암호화된 블롭은 각 쉘터 페이로드의 끝에 위치합니다.

AES 키와 IV는 초기화 루틴의 일부로 페이로드의 매우 초기 단계에서 스택 변수에 로드되는 상수로 찾을 수 있습니다.

쉘터 엘리트 v11.0에서는 기본적으로 페이로드가 암호화되기 전에 LZNT1 알고리즘을 사용하여 압축됩니다.

DLL 프리로딩 & 호출 스택 회피

'시스템 모듈 강제 사전 로드' 기능을 사용하면 기본 페이로드의 작업을 지원하기 위해 advapi32.dll, wininet.dll, crypt32.dll 와 같은 필수 Windows 하위 시스템 DLL을 사전 로드할 수 있습니다. 구성 가능한 세 가지 옵션은 다음과 같습니다:

  • --Force-PreloadModules-Basic (범용 모듈 16개)
  • --Force-PreloadModules-Networking (5개의 네트워크별 모듈)
  • --Force-PreloadModules-Custom (최대 16 사용자 정의 모듈)

이러한 모듈은 LoadLibraryExW 또는 LdrLoadDll 을 통해 로드되고 있습니다. 커스텀 벡터화된 예외 처리기(VEH)를 통한 API 프록시에 대한 자세한 내용은 다음 섹션에서 설명합니다.

아래는 일부 위협이 선호하는 흔하지 않은 접근 방식인 C2용 BITS(백그라운드 지능형 전송 서비스)를 악용하는 간단한 C++ 로더 클라이언트를 배포하는 샘플에서 --Force-PreloadModules-Basic 발견된 옵션과 일치하는 SHELLTER 보호 페이로드에 미리 로드된 모듈 목록의 예시입니다.

다음 예는 LUMMA를 로드하는 샘플에서 찾은 --Force-PreloadModules-Networking 옵션과 일치하는 목록입니다.

이 기능(쉘 터 프로 플러스 v10.x에서 출시) 은 호출 스택 회피 기능을 활용하여 LoadLibraryExW 네트워킹 및 암호화 관련 라이브러리를 로드하는 동안 호출의 소스를 숨깁니다.

다음은 wininet.dll 로딩 시 잘린 호출 스택을 보여주는 procmon 추적의 예입니다:

--Force-PreloadModules-Basic 플래그가 활성화된 동일한 샘플에서 미리 로드된 모듈의 종속성에도 호출 스택 손상이 발생하는 것을 관찰했습니다. 예를 들어 urlmon.dll 은 종속성 iertutil.dll, srvcli.dll, netutils.dll 에 대한 LoadLibraryExW 호출의 소스도 숨깁니다.

AV/EDR 모듈 연결 해제

셸터에는 프로세스 환경 블록(PEB) 내부에 배치된 디코이 DLL 모듈의 연결을 해제하는 기능이 포함되어 있습니다. 이러한 디코이 모듈은 일부 보안 공급업체에서 셸코드가 PEB LDR 목록을 수동으로 열거하려고 시도할 때 모니터링하는 카나리아로 사용됩니다. PEB LDR은 프로세스의 로드된 모듈에 대한 정보를 포함하는 Windows의 구조입니다.

해시를 기반으로 한 고유한 모듈 이름(샘플마다 다름)이 하나만 관찰되었으며, 결국 kern3l32.dll [원문]으로 확인되었습니다.

API 해싱 난독화

관찰된 샘플은 시간 기반 시딩을 사용하여 API 주소를 난독화합니다. 멀웨어는 먼저 0x7FFE0014 주소의 KUSER_SHARED_DATA 구조에서 SystemTime 값을 읽어 동적 XOR 키를 도출합니다.

그런 다음 API 이름에 시드된 ROR13 해싱 알고리즘을 사용하여 런타임에 함수 주소를 확인합니다.

일단 해결되면, 선택적으로 이러한 포인터는 조회 테이블에 저장되기 전에 시간 기반 키로 XOR을 하고 비트 단위 회전을 적용하여 난독화됩니다. 이 전술은 다른 함수 포인터, 시스템 호출 스텁, 로드된 모듈의 핸들 등 다양한 데이터를 숨기기 위해 바이너리 전체에 적용됩니다.

라이선스 확인 및 자가 무장 해제

각 셸터 페이로드에는 세 개의 FILETIME 구조가 포함됩니다. 예시 샘플에서는 다음과 같은 결과가 나타났습니다:

  • 라이선스 만료 날짜(2026-04-17 19:17:24.055000)
  • 자동 무장 해제 날짜 (2026-05-21 19:44:43.724952)
  • 감염 시작 날짜 (2025-05-21 19:44:43.724952)

라이선스 만료 확인은 현재 시간을 라이선스 만료 날짜와 비교하여 컨텍스트 구조에서 license_valid 플래그를 설정합니다. 라이선스 유효성 검사에는 28 고유 호출 사이트( 28 라이선스 기능일 가능성이 높음)가 있으며, 여기서 license_valid 플래그는 메인 코드 로직의 건너뛰기 여부를 결정하여 라이선스 만료 날짜가 킬 스위치로 작동하는지 확인합니다.

기본적으로 자동 해제 날짜는 최초 감염 시작일로부터 정확히 1년 후로 설정됩니다. 자체 무장 해제 플래그가 트리거되면 몇 가지 정리 루틴이 실행됩니다. 이러한 루틴 중 하나는 수동으로 로드된 ntdll 모듈(있는 경우)의 매핑을 해제하고 수동으로 매핑된 ntdll 모듈 또는 프로세스 초기화 중에 로드된 모듈을 참조하는 NTAPI 조회 테이블을 지우는 작업입니다.

자동 무장 해제 및 감염 시작 날짜는 샘플마다 다르지만, 라이선스 만료 날짜(2026-04-17 19:17:24.055000)는 동일합니다. 는 일정하게 유지됩니다.

이 시간은 쉘터 프로젝트에서 발급한 각 라이선스마다 고유하게 생성될 수 있습니다. 그렇다면 악의적인 용도로 쉘터 엘리트 사본이 단 한 개만 획득되었다는 가설을 뒷받침할 수 있습니다. 이 값은 정적 분석에는 나타나지 않지만 언패킹된 첫 번째 단계에는 표시됩니다.

SHA256라이선스 만료자기 무장 해제감염 시작가족
c865f24e4b9b0855b8b559fc3769239b0aa6e8d680406616a13d9a36fbbc2d302026-04-17 19:17:24.0550002026-05-27 19:57:42.9716942025-05-27 19:57:42.971694라다만티스
7d0c9855167e7c19a67f800892e974c4387e1004b40efb25a2a1d25a99b03a102026-04-17 19:17:24.0550002026-05-21 19:44:43.7249532025-05-21 19:44:43.724953알 수 없음
b3e93bfef12678294d9944e61d90ca4aa03b7e3dae5e909c3b2166f122a14dad2026-04-17 19:17:24.0550002026-05-24 11:42:52.9057262025-05-24 11:42:52.905726ARECHCLIENT2
da59d67ced88beae618b9d6c805f40385d0301d412b787e9f9c9559d00d2c8802026-04-17 19:17:24.0550002026-04-27 22:40:00.9540602025-04-27 22:40:00.954060LUMMA
70ec2e65f77a940fd0b2b5c0a78a83646dec17583611741521e0992c1bf974f12026-04-17 19:17:24.0550002026-05-16 16:12:09.7110572025-05-16 16:12:09.711057알 수 없음

아래는 저희가 조사한 불법 쉘터 샘플에서 이 하드코딩된 라이선스 만료 값을 식별하는 데 사용할 수 있는 YARA 규칙입니다:

rule SHELLTER_ILLICIT_LICENSE {  
    meta:  
        author = "Elastic Security"  
        last_modified = "2025-07-01"  
        os = "Windows"  
        family = "SHELLTER"  
        threat_name = "SHELLTER_ILLICIT_LICENSE"

    strings:

        // 2026-04-17 19:17:24.055000  
        $license_server = { c7 84 24 70 07 00 00 70 5e 2c d2 c7 84 24 74 07 00 00 9e ce dc 01}

    condition:  
        any of them  
}

메모리 스캔 회피

쉘터로 보호된 샘플은 탐지를 피하기 위해 런타임 회피 등 다양한 기법을 구현했습니다. 이러한 기술 유형에는 다음이 포함됩니다:

  • 런타임에 인스트럭션 디코딩 및 재인코딩하기
  • 비활성 메모리 페이지에 대한 실행 권한 제거
  • YARA를 사용하여 설치 공간 감소, 인메모리 서명에 미치는 영향
  • 임시 데이터 보관 장소로 PEB 와 같은 Windows 내부 구조 사용

쉘터는 운영 체제 버전에 따라 트램펄린 스타일의 스텁을 생성합니다. 이 스텁을 보관하는 4 KB 페이지가 있으며, 여기서 메모리 권한은 NtQueryVirtualMemoryNtProtectVirtualMemory 을 사용하여 변동됩니다.

페이지가 활성화되면 인코딩된 바이트는 이 주소( 0x7FF5FFCE0000)에서 확인할 수 있습니다.

쉘터는 KUSER_SHARED_DATA 구조에서 파생된 SystemTime 키를 사용하여 XOR 루프를 통해 활성화되면 이 페이지를 디코딩합니다.

아래는 동일한 메모리 페이지(0x7FF5FFCE0000)로, 시스템 호출(ntdll_NtOpenFile)에 대해 디코딩된 트램펄린 스텁을 보여줍니다.

해당 기능이 필요한 경우 메모리 페이지 권한은 읽기/실행(RX) 권한으로 설정됩니다. 실행 후에는 페이지가 비활성으로 설정됩니다.

런타임 동안 주요 기능을 지속적으로 보호하면 분석과 탐지 작업이 모두 복잡해집니다. 이 정도의 보호 수준은 일반적인 멀웨어 샘플에서는 흔하지 않습니다.

간접 시스템 호출/콜 스택 손상

이전 섹션에서 살펴본 것처럼 쉘터는 트램펄린 기반 간접 시스템 호출을 사용하여 사용자 모드 훅을 우회합니다. syscall 를 직접 호출하는 대신 ntdll.dll 에서 깨끗한 syscall 명령어 주소로 스택을 준비합니다. 그런 다음 ret 명령어는 이 주소를 RIP 레지스터에 표시하여 실행을 syscall 명령어로 은밀하게 전환합니다.

아래는 두 가지 회피(간접 시스템 호출 및 호출 스택 잘림)의 조합을 보여주는 Elastic Defend VirtualProtect 이벤트의 예입니다. 이 기술은 다양한 보안 탐지 메커니즘을 우회하거나 방해할 수 있습니다.

고급 VM/샌드박스 탐지

쉘터의 문서에는 하이퍼바이저 탐지 기능에 대한 언급이 있습니다. CPUID_bittest 지침을 사용하여 ZwQuerySystemInformationEx 으로 전화한 후 악성 샘플에서 유사한 기능이 관찰되었습니다. 이 기능은 하이퍼스레딩 기술(HTT) 플래그와 함께 다양한 CPU 정보를 반환합니다.

디버거 감지(UM/KM)

SHELLTER는 프로세스 힙 플래그를 사용하고 _KUSER_SHARED_DATA 구조를 통해 KdDebuggerEnabled 플래그를 확인하는 사용자 모드 및 커널 모드 디버깅 감지를 사용합니다.

AMSI 바이패스

AMSI 우회 방법에는 두 가지가 있습니다. 첫 번째 방법은 AMSI 기능의 인메모리 패치를 사용하는 것입니다. 이 기술은 함수에서 특정 바이트 패턴을 검색하고 이를 수정하여 함수의 로직을 변경합니다. 예를 들어, 4바이트 문자열 "AMSI" 을 널 바이트로 덮어쓰고 조건부 점프를 반대쪽으로 패치합니다.

두 번째 방법은 조금 더 정교한 방법입니다. 먼저, 선택적으로 amsi.dll 내에서 CLSID_Antimalware GUID 상수 {fdb00e52-a214-4aa1-8fba-4357bb0072ec} 를 찾아 쓰기 가능한 데이터 섹션에서 포인터를 찾은 다음 해당 포인터가 실제 GUID보다 8 바이트 앞을 가리키도록 손상시켜 COM(컴포넌트 객체 모델) 인터페이스 조회를 방해하려고 시도합니다.

대상 포인터는 DllGetClassObject 함수가 등록된 COM 클래스를 찾고 생성하는 데 사용하는 구조인 AMSI 모듈의 ATL(Active Template Library) 객체 맵 항목에 있는 CLSID 포인터입니다. 이 맵의 포인터가 손상되면 안티멀웨어 공급자에 대한 조회가 실패하여 생성되지 못하므로 CLASS_E_CLASSNOTAVAILABLE 예외와 함께 AmsiInitialize 가 실패하게 됩니다.

그런 다음 AmsiInitialize - 이전 패치가 수행되지 않았고 API 호출이 성공하면 폴백 메커니즘으로 vtable 패치를 수행합니다. AmsiInitialize 에서 가져온 HAMSICONTEXT 에는 IAntimalware COM 객체에 대한 포인터가 포함되어 있으며, 이 포인터는 다시 가상 함수 테이블에 대한 포인터를 포함합니다. 바이패스는 이 표의 IAntimalware::Scan 함수를 대상으로 합니다. 이를 무력화하기 위해 코드는 IAntimalware::Scan 함수가 포함된 메모리 페이지에서 ret 인스트럭션을 검색합니다.

적합한 가젯을 찾은 후 Scan 함수 포인터를 ret 가젯의 주소로 덮어씁니다. 그 결과 이후 AmsiScanBuffer 또는 AmsiScanString 으로 호출하면 패치된 vtable이 호출되고 ret 인스트럭션으로 바로 이동한 후 즉시 반환됩니다.

벡터화된 예외 처리기 API 프록시

제어 흐름 프록시 역할을 하는 사용자 지정 예외 처리기를 통해 호출을 확인된 API 및 제작된 시스템 호출 스텁으로 리디렉션하여 달성하는 정교한 API 프록시 메커니즘이 있습니다. 설정과 실행의 두 단계로 나눌 수 있습니다.

1 단계에서는 예외 처리기의 '트리거' 역할을 하는 두 개의 특수 메모리 페이지를 할당합니다. 이 페이지에 대한 보호는 PAGE_READONLY 로 설정되어 있으며, 이 페이지에서 코드를 실행하려고 하면 의도된 STATUS_ACCESS_VIOLATION 예외가 발생합니다. 이러한 트리거 페이지의 주소는 컨텍스트 구조에 저장됩니다:

  • api_call_trigger_page - 프록시를 시작하기 위해 호출할 페이지입니다.
  • api_return_trigger_page - 실제 API가 반환할 페이지입니다.

바이너리의 예외 처리기 템플릿을 할당된 영역에 복사하고 RtlAddVectoredExceptionHandler 을 사용하여 프로세스의 기본 처리기로 등록합니다. 그런 다음 핸들러에 하드코딩된 매직 플레이스홀더 값(0xe1e2e3e4e5e6e7e8)을 컨텍스트 구조 자체에 대한 포인터로 덮어씁니다.

콜사이트 예시를 살펴보면, VEH 프록시를 사용할 경우 GetCurrentDirectoryA 주소가 ctx_struct->target_API_function 에 저장되고 API 함수 포인터는 호출 트리거 페이지의 주소로 덮어씌워집니다. 그러면 이 트리거 페이지가 호출되어 STATUS_ACCESS_VIOLATION 예외가 트리거됩니다.

제어 흐름이 예외 처리기로 리디렉션됩니다. 예외 컨텍스트의 오류 주소가 확인되고 호출 트리거 페이지와 일치하면 수신 API 프록시 호출임을 알고 다음을 수행합니다:

  • 원래 반송 주소 저장
  • 스택의 반환 주소를 반환 트리거 페이지의 주소로 덮어씁니다.
  • RIP 등록을 이전에 ctx_struct->target_API_function 에 저장한 실제 API 주소로 설정합니다.

그러면 GetCurrentDirectoryA 호출이 실행됩니다. 완료되면 반환 트리거 페이지로 이동하여 두 번째 STATUS_ACCESS_VIOLATION 예외를 발생시키고 제어 흐름을 다시 예외 처리기로 리디렉션합니다. 결함이 있는 주소가 반환 트리거 페이지와 일치하는지 확인하고, 일치하는 경우 RIP 을 원래 반환 주소로 설정하고 제어 흐름이 원래 호출 사이트로 돌아갑니다.

캠페인

6월에 Elastic Security Labs는 각 바이너리에 존재하는 라이선스 정보에 의해 기록된 바와 같이 Shellter Elite로 보호되는 다양한 정보 도용자를 배포하는 여러 캠페인을 확인했습니다. 위의 툴을 활용하여 다양한 캠페인에서 위협 공격자들이 회피성이 뛰어난 로더를 자체 워크플로에 빠르게 통합하는 것을 관찰했습니다.

LUMMA

바이너리 내의 메타데이터를 통해 알 수 있듯이, 4월 말부터 LUMMA 인포스틸러가 SHELLTER와 함께 배포되기 시작했습니다. 초기 감염 경로는 명확하지 않지만, 관련 파일이 MediaFire 파일 호스팅 플랫폼에서 호스팅되고 있음을 (ANY.RUN을 사용하여)확인할 수 있었습니다.

판매 희망

5월 16일, 트위터/X 사용자 @darkwebinformer가 캡션과 함께 스크린샷을 올렸습니다:

인기 포럼에서 쉘터 엘리트 v11.0 판매 개시

이 경우 "익스플로잇 가란트"는 거래를 중개하는 에스크로와 같은 제3자를 의미합니다.

ARECHCLIENT2

5월경부터 스폰서십 기회를 미끼로 콘텐츠 크리에이터를 타깃으로 하는 캠페인이 관찰되었습니다. 이러한 피싱 이메일은 Udemy, 스킬셰어, 피나클 스튜디오, 듀오링고 등의 브랜드를 사칭하여 유튜브 채널을 운영하는 개인에게 발송되는 피싱 이메일인 것으로 보입니다. 이메일에는 아카이브 파일 다운로드 링크(.rar)가 포함되어 있으며, 이 파일에는 SHELLTER로 보호된 실행 파일로 패키징된 합법적인 홍보 콘텐츠가 포함되어 있습니다.

이 기본 실행 파일은 이전 쉘터 분석과 특징 및 동작을 공유합니다. 이 글을 쓰는 현재에도 VirusTotal에서 탐지율이 매우 낮은 샘플을 볼 수 있습니다. 이는 다형성 코드, 합법적인 애플리케이션에 대한 백도어 코드, 코드 서명 인증서 적용 등 정적 분석을 피하기 위해 사용자 정의된 기능과 관련된 여러 가지 요인 때문입니다.

이 파일에서 관찰된 임베디드 페이로드는 인포스틸러 ARECHCLIENT2(SECTOP RAT라고도 함)를 배포합니다. 이 도둑의 C2는 185.156.72[.]80:15847, 이전에 저희 팀이 6월 17일에 이 위협에 대해 논의할 때 확인했던 을 가리킵니다.

라다만티스

이러한 감염은 게임 해킹 및 게임 모드와 같은 주제를 대상으로 하는 YouTube 동영상에서 시작되며, 동영상 댓글은 MediaFire에서 호스팅되는 악성 파일로 연결됩니다.

이 방법을 사용하여 이전에 배포된 파일 중 하나는 이 게시 시점을 기준으로 다른 개인에 의해 126 고유한 횟수만큼 제출되었습니다.

이 파일은 이전 셸터 분석 섹션의 동일한 기본 코드와 동일한 동작 특성을 공유합니다. 이 샘플에 포함된 임베디드 페이로드는 RHADAMANTHYS 인포스틸러를 배포합니다.

쉘터 언패커

Elastic Security Labs는 SHELLTER로 보호되는 바이너리를 위한 동적 언패커를 출시합니다. 이 도구는 동적 및 정적 분석 기법의 조합을 활용하여 쉘터로 보호된 바이너리에서 여러 페이로드 단계를 자동으로 추출합니다.

쉘터는 다양한 옵션 기능을 제공하기 때문에 이 언패커는 테스트된 대부분의 샘플을 성공적으로 처리하지만 완전히 포괄적이지는 않습니다. 지원되지 않는 바이너리를 사용하더라도 일반적으로 적어도 하나의 페이로드 단계를 추출할 수 있습니다.

안전상의 이유로 이 도구는 격리된 가상 머신 내에서만 실행해야 합니다. 압축을 푸는 과정에서 잠재적으로 악성일 수 있는 실행 코드가 메모리에 매핑됩니다. 몇 가지 기본적인 안전장치가 구현되었지만 완벽한 것은 아닙니다.

결론

상업용 OST 커뮤니티가 합법적인 목적을 위해 도구를 유지하려는 최선의 노력에도 불구하고 완화 방법은 불완전합니다. 많은 고객과 마찬가지로 이들도 끈질기고 동기를 부여받은 공격자들과 맞서고 있습니다. 이번 사건에서 쉘터 프로젝트는 지적 재산 손실과 향후 개발 시간 손실로 인해 피해를 입었지만, 보안 분야의 다른 참여자들은 이제 더 강력한 도구를 사용하는 실제 위협에 맞서 싸워야 합니다.

기대합니다:

  • 이 불법 버전의 셸터는 범죄 커뮤니티를 통해 계속 유포될 것이며, 국가와 연계된 행위자에게로 옮겨갈 가능성이 있습니다.
  • 쉘터 프로젝트는 이 분석에서 확인된 탐지 기회를 완화하는 버전을 업데이트하여 출시할 예정입니다.
    • 새로운 툴링은 악의적인 공격자의 표적이 될 것입니다.
  • 더 지능적인 위협은 이러한 샘플을 분석하여 도구 세트에 기능을 통합합니다.

저희의 목표는 이러한 분석을 통해 방어자가 이러한 인포스틸러 캠페인을 조기에 탐지하고 이러한 기법이 다른 공격 영역으로 확장될 가능성에 대비할 수 있도록 돕는 것입니다.

멀웨어 및 MITRE ATT&CK

Elastic은 위협이 엔터프라이즈 네트워크에 대해 사용하는 일반적인 전술, 기술 및 절차를 문서화하기 위해 MITRE ATT& CK 프레임워크를 사용합니다.

전술

전술은 기술 또는 하위 기술의 이유를 나타냅니다. 이는 적의 전술적 목표, 즉 행동을 수행하는 이유입니다.

기술

기술은 공격자가 행동을 수행하여 전술적 목표를 달성하는 방법을 나타냅니다.

셸터 완화

예방

YARA

Elastic Security는 이 활동을 식별하기 위해 YARA 규칙을 만들었습니다.

rule Windows_Trojan_Shellter {  
    meta:  
        author = "Elastic Security"  
        creation_date = "2025-06-30"  
        last_modified = "2025-06-30"  
        os = "Windows"  
        arch = "x86"  
        category_type = "Trojan"  
        family = "Shellter"  
        threat_name = "Windows.Trojan.Shellter"  
        reference_sample = "c865f24e4b9b0855b8b559fc3769239b0aa6e8d680406616a13d9a36fbbc2d30"

    strings:  
        $seq_api_hashing = { 48 8B 44 24 ?? 0F BE 00 85 C0 74 ?? 48 8B 44 24 ?? 0F BE 00 89 44 24 ?? 48 8B 44 24 ?? 48 FF C0 48 89 44 24 ?? 8B 04 24 C1 E8 ?? 8B 0C 24 C1 E1 ?? 0B C1 }  
        $seq_debug = { 48 8B 49 30 8B 49 70 8B 40 74 0B C1 25 70 00 00 40 85 C0 75 22 B8 D4 02 00 00 48 05 00 00 FE 7F }  
        $seq_mem_marker = { 44 89 44 24 ?? 89 54 24 ?? 48 89 4C 24 ?? 33 C0 83 F8 ?? 74 ?? 48 8B 44 24 ?? 8B 4C 24 ?? 39 08 75 ?? EB ?? 48 63 44 24 ?? 48 8B 4C 24 }  
        $seq_check_jmp_rcx = { 48 89 4C 24 ?? B8 01 00 00 00 48 6B C0 00 48 8B 4C 24 ?? 0F B6 04 01 3D FF 00 00 00 75 ?? B8 01 00 00 00 48 6B C0 01 48 8B 4C 24 ?? 0F B6 04 01 3D E1 00 00 00 75 ?? B8 01 00 00 00 }  
        $seq_syscall_stub = { C6 84 24 98 00 00 00 4C C6 84 24 99 00 00 00 8B C6 84 24 9A 00 00 00 D1 C6 84 24 9B 00 00 00 B8 C6 84 24 9C 00 00 00 00 C6 84 24 9D 00 00 00 00 C6 84 24 9E 00 00 00 00 }  
        $seq_mem_xor = { 48 8B 4C 24 ?? 0F B6 04 01 0F B6 4C 24 ?? 3B C1 74 ?? 8B 44 24 ?? 0F B6 4C 24 ?? 48 8B 54 24 ?? 0F B6 04 02 33 C1 8B 4C 24 ?? 48 8B 54 24 ?? 88 04 0A }  
        $seq_excep_handler = { 48 89 4C 24 08 48 83 EC 18 48 B8 E8 E7 E6 E5 E4 E3 E2 E1 48 89 04 24 48 8B 44 24 20 48 8B 00 81 38 05 00 00 C0 }  
    condition:  
        3 of them  
}

관찰

모든 관측값은 ECS 및 STIX 형식으로도 다운로드할 수 있습니다.

이 연구에서는 다음과 같은 관찰 가능성에 대해 논의했습니다.

관측 가능합니다.유형이름참조
c865f24e4b9b0855b8b559fc3769239b0aa6e8d680406616a13d9a36fbbc2d30SHA-256Endorphin.exe쉘터 보호 라다만티스
7d0c9855167e7c19a67f800892e974c4387e1004b40efb25a2a1d25a99b03a10SHA-256SUPERAntiSpyware.exe쉘터로 보호되는 미지의 가족
b3e93bfef12678294d9944e61d90ca4aa03b7e3dae5e909c3b2166f122a14dadSHA-256Aac3572DramHal_x64.exe쉘터 보호 아레클라이언트2
da59d67ced88beae618b9d6c805f40385d0301d412b787e9f9c9559d00d2c880SHA-256Branster.exe쉘터 보호 루마
70ec2e65f77a940fd0b2b5c0a78a83646dec17583611741521e0992c1bf974f1SHA-256IMCCPHR.exe쉘터로 보호되는 미지의 가족
263ab8c9ec821ae573979ef2d5ad98cda5009a39e17398cd31b0fad98d862892SHA-256피나클 스튜디오 광고 자료.rar루어 아카이브
eaglekl[.]digital도메인LUMMA C&C 서버
185.156.72[.]80IPv4-addrARECHCLIENT2 C&C 서버
94.141.12[.]182IPv4-addrplotoraus[.]shop 서버RHADAMANTHYS C&C 서버

참고 자료

위의 조사에서 참조한 내용은 다음과 같습니다: