A 64-bit Go loader (program.exe) carries the Remus infostealer embedded inside it, maps it into its own memory at the payload's preferred base, wires up its imports by hand, and hands over execution. Remus then fingerprints the host over WMI and exits silently about seven seconds after launch, without reaching C2 or the stealing stage.
CAPE YARA hit on the memory-mapped payload.
Payload embedded; no payload file is ever written or read.
ExitProcess(0) from payload code after AV enumeration.
winhttp.dll loaded; no request issued. Contract/C2 not recovered.
ROOT\SecurityCenter2 AntiVirusProduct and Win32_VideoController within seconds of starting. Hunt on that behaviour pair. Don't rely on the hashes, which rotate per build.
Times are UTC offsets within the CAPE run (T0 = 03:36:28.714). Solid steps were observed in the trace. Dashed steps are Remus-family behaviour this run never reached.
program.exe on the guest Desktop, with no parent chain captured. Earlier waves of this cluster used ClickFix (paste-and-run) delivery, but this run contains no evidence of how the file arrived.0x00B00000. Several threads share one start routine (0x00B6F8A0), heap arenas sit at 0xC000xxxxxx, and there are repeated NtSuspendThread → NtGetContextThread → NtResumeThread cycles from Go's async preemption. All of these are Go-runtime fingerprints. Hundreds of zero-length NtWriteFile calls to a NULL handle are Go stdout writes in a GUI process with no console.NtAllocateVirtualMemory(BaseAddress=0x140000000, RegionSize=0x3F000, PAGE_EXECUTE_READWRITE). The 0x3F000 size exactly matches the payload's SizeOfImage (.reloc ends at 0x3D000 + 0x2000), and 0x140000000 is its preferred ImageBase, so no relocation is needed. No file read precedes the allocation, which means the payload bytes come from inside the loader.LoadLibraryExW(…, LOAD_LIBRARY_SEARCH_SYSTEM32) + GetProcAddress once per import, in the payload's IAT order: KERNEL32 (ExitProcess, GetComputerName*, Global(Un)Lock, LocalFree), ole32 (Co*), USER32 (CreateDesktopW, OpenDesktopW, GetKeyboardLayout*, GetDC…), ADVAPI32 (GetUserNameA, LookupPrivilegeValueW), GDI32 (BitBlt, GetDIBits…), OLEAUT32 (Sys*/Variant*). This is the mapped PE's import table being populated, not normal loader activity.0x14000216, 0x14000829, 0x1400082D). Remus loads winhttp.dll and calls IsDebuggerPresent (returns FALSE). It performs COM/OLE activation set-up (CoInitializeSecurity, AppID look-ups for program.exe) and checks Wow64 machine type through RtlWow64GetCurrentMachine.NtQuerySystemTime. Remus is documented as issuing direct syscalls, which user-mode hooks do not see. The most likely reading is a syscall-level sleep followed by a time-delta check that detects sleep-skipping. The trace does not prove this.IWbemLocator::ConnectServer("ROOT\CIMV2"), which loads amsi.dll and Defender's MpOav.dll into the process (normal for WMI client start-up), then:
SELECT * FROM Win32_OperatingSystem → Caption Windows 10 Pro, LocalDateTime, CurrentTimeZone, InstallDate 2024-02-14SELECT * FROM Win32_VideoController → Name NVIDIA GTX 1650. GPU name is a classic VM tell, since virtual adapters are obvious.GetComputerNameA, GetUserNameA, GetComputerNameExW (NetBIOS, DNS, physical domain)ConnectServer("ROOT\SecurityCenter2") + SELECT * FROM AntiVirusProduct → Windows Defender, productState 397568 (0x61100: enabled, signatures up to date)WmiPrvSE.exe -secured -Embedding (PID 5816), started by svchost -k DcomLaunch.NtTerminateProcess(ExitCode=0) is called from payload code (0x1400021A, i.e. the imported ExitProcess). Process teardown completes at 03:36:37.761. No child processes, files, registry writes, persistence or network activity were recorded. The pattern fits Remus's documented silent ExitProcess(0) bail-out when it decides it is being analysed. A failed C2 lookup is an alternative explanation that can't be ruled out.eth_call JSON-RPC request to a hard-coded smart contract on a public RPC endpoint, then decodes the hex result into the C2 URL. The winhttp.dll load at step 4 is the groundwork for this request, which never happened in this run.LookupPrivilegeValueW is imported, with shellcode injection as the fallback); a browser launched on a hidden random 16-character desktop (CreateDesktopW); screenshots (BitBlt/GetDIBits); clipboard capture (GlobalLock); crypto wallets, Discord/Telegram/Steam session tokens; upload to C2 as an archive.services.exe (660) ├─ program.exe (5808) PPID 3616 · C:\Users\Bruno\Desktop\program.exe · Go loader + in-memory Remus ├─ svchost.exe (796) -k DcomLaunch -p │ └─ WmiPrvSE.exe (5816) -secured -Embedding · serves CIMV2 / SecurityCenter2 queries └─ svchost.exe (2676) -k netsvcs -p -s Winmgmt · WMI repository (INDEX.BTR)
The WMI service processes only do provider work for the malware's queries: cimwin32, dxgi for the GPU query, the srvsvc/wkssvc/lsarpc pipes for domain data. They are expected side effects and are not compromised.
The loader is a reflective PE loader written in Go. It never starts a second process and never hollows another one: all execution stays inside program.exe. Because it allocates at the payload's own preferred base, it needs no relocation fixups. That explains why only a single RWX region appears and no later NtProtectVirtualMemory tightens it to RX. A memory scanner will find a private, RWX, unbacked 252 KB region holding a full PE header at 0x140000000 inside a process whose own image sits at 0x00B00000.
IsDebuggerPresent called directly from payload code.The mapped image's import table shows what the payload is equipped for, even though this run stopped before using any of it: hidden-desktop creation (CreateDesktopW/OpenDesktopW), full-screen capture (GetDC → CreateCompatibleDC/Bitmap → BitBlt → GetDIBits), clipboard reads (GlobalLock), keyboard-layout lookup (GetKeyboardLayout*, commonly a CIS-locale kill switch), and privilege look-up for token work (LookupPrivilegeValueW). The table is small: only 39 imports. Remus resolves most sensitive APIs at runtime by CRC32 hash and issues direct syscalls, so the IAT understates what it can do.
| ID | Technique | Tactic | Status | Evidence |
|---|---|---|---|---|
| T1027.009 | Embedded Payloads | Defense Evasion | observed | Remus PE carried inside the Go loader; mapped without a file read. |
| T1620 | Reflective Code Loading | Defense Evasion | observed | RWX 0x3F000 at 0x140000000 = payload SizeOfImage / ImageBase. |
| T1106 | Native API | Execution | observed | Per-import LoadLibraryExW + GetProcAddress to build the IAT. |
| T1622 | Debugger Evasion | Defense Evasion | observed | IsDebuggerPresent from caller 0x14000829. |
| T1497.003 | Time Based Evasion | Defense Evasion | assessed | ~4.2 s hook-silent gap, then 30× NtQuerySystemTime. |
| T1497.001 | System Checks | Defense Evasion | assessed | GPU name + OS InstallDate collection, then immediate clean exit. |
| T1047 | Windows Management Instrumentation | Execution | observed | ConnectServer ROOT\CIMV2 and ROOT\SecurityCenter2; WQL via WmiPrvSE. |
| T1082 | System Information Discovery | Discovery | observed | Win32_OperatingSystem, Win32_VideoController. |
| T1124 | System Time Discovery | Discovery | observed | LocalDateTime, CurrentTimeZone. |
| T1518.001 | Security Software Discovery | Discovery | observed | AntiVirusProduct → Windows Defender, productState 397568. |
| T1033 | System Owner/User Discovery | Discovery | observed | GetUserNameA, GetComputerNameA/ExW. |
| T1614.001 | System Language Discovery | Discovery | capability | GetKeyboardLayout / GetKeyboardLayoutNameA/W imported. |
| T1113 | Screen Capture | Collection | capability | BitBlt, GetDIBits, CreateCompatibleBitmap imported. |
| T1115 | Clipboard Data | Collection | capability | GlobalLock/GlobalUnlock imported; family writes Clipboard.txt. |
| T1564.003 | Hidden Window (hidden desktop) | Defense Evasion | capability | CreateDesktopW/OpenDesktopW imported. |
| T1134 | Access Token Manipulation | Privilege Escalation | capability | LookupPrivilegeValueW; family's SYSTEM-impersonation ABE bypass. |
| T1555.003 | Credentials from Web Browsers | Credential Access | family | Core Remus function incl. ABE v20 master-key recovery. |
| T1539 | Steal Web Session Cookie | Credential Access | family | Session/cookie theft; MaaS "restore-token" feature. |
| T1102.001 | Dead Drop Resolver | Command and Control | family | EtherHiding eth_call; winhttp.dll loaded but unused here. |
| Type | Value | Context |
|---|---|---|
| SHA-256 | 9020bd5cde920fb3b59488af8926c26ffd703bf7d570af62f7b96fe3d7110ace | Remus inner stage, CAPE memory dump |
| SHA-1 | 3d5e3c0f75511b1cdc1ee92154476c783aa39927 | ″ |
| MD5 | aa46a8f4320426fd434e33fc63701bf1 | ″ |
| Imphash | 56be24246517d20cf4bfe1b911b90ec3 | Mapped PE import table |
| SSDEEP | 3072:XxhvRFqgr17r/fL4sgtlThnumvLlnoHk7aosL1rzvsUbj4+vBsyin:XV76l1+kud9XZ | Fuzzy |
| TLSH | T108343B27D25335FCD952C078926A2322B771BA3C47349DF702D2D7359E22EC0AE79A25 | Fuzzy |
| PE metadata | PE32+ GUI x64 · 247,296 B · ImageBase 0x140000000 · EP 0x2070 · compiled 2026-10-08 03:11:59 UTC · .rdata entropy 7.41 | High .rdata entropy is consistent with the ChaCha20 config blob |
| Loader | program.exe · Go x64 · image 0x350000 | Carrier hash not present in the supplied PDFs |
No network indicators: the run recovered no RPC endpoint, contract address or C2.
PAGE_EXECUTE_READWRITE region at 0x140000000 beginning with MZ, inside a process whose main image is elsewhere (Go binaries load low, e.g. 0x00B00000). Scan running processes with the CAPE Remus YARA rule.SELECT * FROM AntiVirusProduct in ROOT\SecurityCenter2 and SELECT * FROM Win32_VideoController within ~10 s of process start.winhttp.dll, wbemprox.dll and fastprox.dll in its first seconds and exits with code 0 shortly after.eth_call to public Ethereum/BSC/Polygon RPC endpoints. This is the EtherHiding resolution step and a strong, low-noise signal on endpoints.honey@pot.com.pst), and patch or skip the sleep at T+0.8 s.Companion file: SecureLeaf_Remus_GoLoader_CAPE_2026-10-11.stix.json (STIX 2.1, 57 objects, deterministic UUIDv5 IDs).