SloppyRAT

ClickFix → finger.exe → CastleLoader/CastleRAT → reflectively-loaded backdoor for ransomware recon and lateral movement
Threat
SloppyRAT
Type
Windows RAT / backdoor (final-stage payload)
Severity
High
Version
v0.1 Draft · 2026-09-12
Author
HuntPack
Confidence
High core-IOC confidence (multi-source corroborated); tenant unverified
STATIC REVIEW PASSED
01

Executive Summary

What it is: SloppyRAT is a Windows RAT/backdoor first documented by Zscaler ThreatLabz on 2026-09-10 (samples first observed by ThreatLabz in June 2026) and assessed as likely leveraged by a ransomware-related threat actor for host reconnaissance, credential/config harvesting, Defender tampering, and lateral movement. It arrives as the final stage of a longer chain — ClickFix lure → finger.exe retrieval → batch script → renamed curl.exe → IronPython → CastleLoader → CastleRAT → a second Python interpreter → config.py → SloppyRAT DLL reflectively loaded in memory. The CastleLoader/CastleRAT delivery mechanics are already covered by the library's CastleRAT Multi-Stage RAT pack; this pack is scoped to SloppyRAT's own distinct C2 infrastructure, protocol, and on-host behaviors.

Why it's notable: SloppyRAT ships 47 built-in commands that mimic PowerShell cmdlets but are implemented natively in C++ against Win32 APIs (no PowerShell process required), three command-execution handlers of increasing noisiness (native built-ins → in-process PowerShell via CLR/COM → PPID-spoofed powershell.exe), certificate pinning against a hardcoded SHA256, RC4-encrypted request/response bodies, a reverse-SOCKS proxy for internal pivoting, and an EtherHiding fallback that can resolve C2 from the Polygon blockchain. ThreatLabz explicitly flags the Polygon/EtherHiding path as likely still in development — no sample has shipped an embedded smart-contract address, only the function selector 0xd6bd8727 has been observed. Treat EtherHiding as an emerging, unconfirmed capability, not a live TTP to hunt today.

Why the IOCs are unusually solid for a fresh disclosure: The primary Zscaler ThreatLabz post publishes 22 SHA256 values (21 SloppyRAT DLL samples + 1 config.py stager), 5 C2/delivery domains, 1 C2 IP:port, 7 HTTP API paths, and 4 payload URLs. This pack independently re-extracted every hash and network indicator directly from the live Zscaler page (not from an AI summary of it) and cross-confirmed the full set against the Security Boulevard syndication (byte-identical) plus partial corroboration from cybersecuritynews.com (22/22 hashes, all 5 domains, the C2 IP) and gbhackers.com (5/22 hashes, 2 domains). All four hashes supplied in the initial tasking were verified character-for-character against the live source and are correct as given.

Operational limit: Endpoint telemetry cannot prove RC4 protocol semantics, reflective in-memory DLL loading, certificate-pinning bypass attempts, keystroke-level content, or blockchain-resolver contract state — those require memory acquisition, TLS-terminating proxy content, or on-chain lookups. No Falcon tenant was contacted; every CQL card below is STATIC-ONLY.

Defender priority: Run Q01–Q04 for the ClickFix-through-IronPython delivery chain and Q05–Q06 for the confirmed C2 domains/IP/hashes over 30 days first; correlate hits on the same host before escalation. Preserve process tree, dropped files, registry values, and network evidence. Do not resolve, browse to, or otherwise contact any listed C2 domain, IP, or blob-storage URL.
PriorityWhy nowCoverage deliveredKey limitation
Hunt the delivery chain and the confirmed C2/IOC setFresh (2026-09-10) disclosure, multi-source corroborated hashes and infrastructure, in-the-wild ransomware-adjacent use9 CQL designs, IOC quick-copy grid, tiered hardeningStatic-only; tenant parsing, positive/benign testing, memory and TLS-content evidence are absent
02

Source and Claim Review

Current-run plain-text snapshots were pulled directly from each live page (HTML-stripped, not AI-summarized) so that hashes and IOCs could be regex-verified byte-for-byte rather than trusted to a paraphrase. Every source was treated as untrusted data; no embedded instruction, command, exploit code, payload, or destination was executed or contacted.

IDPublisherTierIndependenceAccessedStatus
S01Zscaler ThreatLabzT1zscaler2026-09-13successful direct-HTML extraction; primary technical source
S02Security BoulevardT2security-boulevard2026-09-13successful direct-HTML extraction; full syndication of S01, byte-identical IOC set
S03Cyber Security NewsT2cybersecuritynews2026-09-13successful direct-HTML extraction; independently reproduced the full 22-hash set and all 5 domains
S04GBHackersT2gbhackers2026-09-13successful direct-HTML extraction; partial corroboration (5 of 22 hashes, 2 of 5 domains)
ClaimStatementSourcesConfidence
C01SloppyRAT is delivered via a ClickFix lure that runs a finger.exe command against finger.linked4x[.]com to retrieve a batch script.S01,S02,S03,S04high
C02The batch script copies native curl.exe to a numerically-named file with a .com extension in AppData and uses it to download IronPython 3.4.2 from GitHub.S01,S02high
C03The renamed IronPython interpreter executes a zlib-compressed, Base64-encoded Python one-liner that stages CastleLoader and CastleRAT, downloaded from skipraid[.]com with User-Agent K8VGmQTrzX.S01,S02high
C04A second Python interpreter downloads and runs config.py from hxxps://stro7121[.]blob[.]core[.]windows[.]net/dpp1/config.py, which reflectively loads a SloppyRAT DLL fetched from the same host (hostfxr.dll) using User-Agent Mozilla/5.0 (compatible; DLLMemLoader/1.0), invoking export f3b980dea.S01,S02high
C05SloppyRAT communicates over HTTPS/JSON to api[.]telephoneip[.]net and api[.]truesmart[.]org, and to IP 62.106.66[.]148:443, via 7 documented API paths; command results and system info are RC4-encrypted then Base64-encoded.S01,S02,S03high
C06SloppyRAT implements 47 built-in commands resembling PowerShell cmdlets but backed by native Win32 API calls, plus two escalation handlers (PSInline via CLR/COM, PSSpoof via PPID-spoofed powershell.exe) and WMI-based cmd execution.S01,S02,S03,S04high
C07Anti-analysis: three XOR/affine string-obfuscation schemes, 13 runtime-decrypted encrypted code blocks, junk code, DJB2 API hashing over 21 NTDLL functions (10 actually used) resolved via a Hell's-Gate-style indirect-syscall technique, and SHA256 certificate pinning on the DER-encoded server cert.S01,S02,S03,S04high
C08Both persistence mechanisms (Run-key value named rundll32; COM hijack via an FNV-1a-derived CLSID) are implemented incorrectly by the malware author and do not function as intended.S01,S02high
C09SloppyRAT can retrieve C2 configuration from the Polygon blockchain (EtherHiding) as a resilience mechanism, but this capability is likely still in development — no sample carries an embedded smart-contract address, only the function selector 0xd6bd8727 has been observed.S01,S02,S03medium — capability partially unconfirmed
C1022 SHA256 hashes (21 SloppyRAT DLL samples, 1 config.py script) were independently re-extracted from the live S01 HTML and matched byte-for-byte against S02; S03 reproduces all 22, S04 reproduces 5 of the 22.S01,S02,S03,S04high
Contradictions and gaps: No contradictions were found across the four sources — S02 is a verbatim syndication of S01, and S03/S04 are independent extractions that reproduce a strict subset of the same IOC set with no conflicting values. The EtherHiding/Polygon path (C09) is explicitly flagged by the primary source itself as likely incomplete; do not build blocking controls around it. Infrastructure (domains, the C2 IP, and the Azure blob/S3 hosting) can rotate; the hash set is the most durable indicator today.
03

Hunt Brief and Attack Chain

The scaffold separates queryable endpoint/network behaviors from content-, memory-, and blockchain-level gaps. Each hypothesis retains its evidence basis and a safe validation plan.

StepClaimsBehaviorPlatformGoal
1C01a user runs a ClickFix command that invokes finger.exe against finger.linked4x[.]comWindowsFind finger.exe retrieval and Finger-protocol (TCP/79) egress
2C02a batch script copies curl.exe to a numerically-named .com file and downloads IronPython from GitHubWindowsFind the renamed-curl download signature
3C03the renamed IronPython interpreter executes an obfuscated zlib/Base64 Python one-liner, staging CastleLoader/CastleRAT from skipraid[.]comWindowsFind the IronPython execution signature
4C04a second Python interpreter fetches and runs config.py, which reflectively loads the SloppyRAT DLL from Azure Blob/S3WindowsFind DNS/network activity to the blob-storage hosts
5C05SloppyRAT authenticates and polls api[.]telephoneip[.]net / api[.]truesmart[.]org / 62.106.66[.]148:443WindowsFind DNS/network activity to confirmed C2
6C10a dropped or loaded file matches one of the 22 confirmed SHA256 hashesWindowsMatch process/file hash telemetry against the IOC set
7C06SloppyRAT escalates to PPID-spoofed powershell.exe (PSSpoof) when the in-process CLR handler failsWindowsFind anomalous explorer.exe-parented PowerShell
8C08SloppyRAT attempts (broken) persistence via a bare rundll32 Run-key valueWindowsFind the malformed Run-key write
9C07,C09in-memory code decryption, RC4 protocol content, and Polygon C2 resolution occur but leave no portable endpoint signatureWindowsAcquire memory / proxy content; treat EtherHiding as unconfirmed
IDBehaviorTelemetryUseLookbackValidation
H01finger.exe retrieves a ClickFix batch script over TCP/79ProcessRollup2 / SyntheticProcessRollup2 / NetworkConnectIP4alert-candidate30dExercise finger.exe only against an analyst-controlled inert lab service; baseline any legitimate legacy Finger use before enabling a block.
H02native curl.exe is copied to a numerically-named .com file and used to fetch IronPython from GitHubProcessRollup2 / SyntheticProcessRollup2alert-candidate30dReproduce the copy+rename pattern with an inert binary in a lab path; confirm no legitimate deployment tooling renames curl this way.
H03a renamed IronPython interpreter runs a zlib/Base64-encoded one-linerProcessRollup2 / SyntheticProcessRollup2alert-candidate30dBaseline legitimate IronPython/embedded-Python tooling before enforcing; the command-line signature is distinctive but not unique.
H04DNS/network activity reaches stro7121[.]blob[.]core[.]windows[.]net, backup-ubt[.]s3[.]us-east-1[.]amazonaws[.]com, or skipraid[.]comDnsRequest / SuspiciousDnsRequest / NetworkConnectIP4alert-candidate30dConfirm process attribution before blocking; Azure Blob/S3 are multi-tenant services and the specific hostnames, not the parent domains, are the indicator.
H05DNS/network activity reaches api[.]telephoneip[.]net, api[.]truesmart[.]org, or 62.106.66[.]148:443DnsRequest / SuspiciousDnsRequest / NetworkConnectIP4alert-candidate30dTreat any hit as high-confidence given single-purpose registered infrastructure; still confirm host/process attribution before isolation.
H06a process or written file matches one of the 22 confirmed SloppyRAT SHA256 hashesProcessRollup2 / PeFileWritten / NewExecutableWrittenalert-candidate30dNo live-fire test needed for exact-hash matches; validate field availability (SHA256HashData) against a benign sample.
H07powershell.exe is spawned with explorer.exe as parent but with minimal/absent command-line arguments (PSSpoof signature)ProcessRollup2 / SyntheticProcessRollup2hunt30dHigh false-positive risk — baseline shell-extension and Explorer-launched PowerShell shortcuts before treating as high confidence.
H08a Run-key value named rundll32 is written with a bare rundll32(.exe) string (no path, no export)AsepValueUpdate / RegGenericValueUpdatehunt30dReproduce in a lab VM by manually writing the malformed value; confirm no legitimate installer uses an unqualified rundll32 Run value.
H09in-memory code decryption, RC4 C2 body content, reverse-SOCKS pivot traffic, and Polygon/EtherHiding resolution occurmemory acquisition, TLS-terminating proxy content, on-chain lookupgap30dRequires memory forensics and approved network content inspection; EtherHiding additionally requires on-chain monitoring the source itself calls unconfirmed.

Affected surface and telemetry

Windows Falcon process, file, DNS, network (IPv4), and registry telemetry. Memory content, TLS/proxy body inspection, and blockchain-resolver monitoring remain out of scope for portable endpoint CQL and are called out as gaps rather than papered over.

04

Consolidated IOC Table

Provenance: every row below was re-extracted directly from the live S01 (Zscaler) HTML by regex against the stripped page text, then diffed against S02–S04. Nothing here was taken from an AI-generated summary of a source.

Network and delivery infrastructure

TypeValueContextConfAction
domainfinger.linked4x[.]comClickFix stage-1 batch-script host, retrieved via finger.exe over TCP/79Highdetect
domainskipraid[.]comCastleLoader/CastleRAT download host, User-Agent K8VGmQTrzXHighdetect
domainstro7121[.]blob[.]core[.]windows[.]netAzure Blob Storage host serving config.py and the SloppyRAT DLL (hostfxr.dll)Highdetect
domainbackup-ubt[.]s3[.]us-east-1[.]amazonaws[.]comS3 backup host serving the same SloppyRAT DLLHighdetect
domainapi[.]telephoneip[.]netSloppyRAT C2 domainHighdetect
domainapi[.]truesmart[.]orgSloppyRAT C2 domainHighdetect
ipv462.106.66[.]148:443SloppyRAT C2 IPHighdetect
urlhxxps[://]skipraid[.]com/dsVGmQTrzX/default2CastleLoader payload URLHighhunt
urlhxxps[://]stro7121[.]blob[.]core[.]windows[.]net/dpp1/config.pyPython loader/stager URLHighhunt
urlhxxps[://]stro7121[.]blob[.]core[.]windows[.]net/dpp1/hostfxr.dllSloppyRAT DLL download URLHighhunt
urlhxxps[://]backup-ubt[.]s3[.]us-east-1[.]amazonaws[.]com/hostfxr.dllSloppyRAT DLL backup download URLHighhunt
user-agentK8VGmQTrzXCastleLoader retrieval from skipraid[.]comMediumhunt
user-agentMozilla/5.0 (compatible; DLLMemLoader/1.0)config.py Python-loader retrievalMediumhunt
user-agentCommandExecutor/1.0SloppyRAT C2 HTTP client identifierMediumhunt
uri-patternPOST /api/auth · POST /api/systeminfo · POST /api/av_edr · GET /api/poll · GET /api/command/get · POST /api/command/result · POST /api/proxy/ackSloppyRAT C2 API surface (see §9 for the full table)Mediumhunt
dll-exportf3b980deaExport name invoked on the reflectively-loaded SloppyRAT DLLMediumhunt

File hashes — SHA256 (22 confirmed, re-verified against live source)

TypeValueContextConfAction
sha2569f84cfcf988530941555d1cb7780a091743cf567396201eff7731f5475768f9aSloppyRAT DLLHighdetect
sha2568774533134d9d1514106c4090a0c5bccab4550facdcfe03f4e02b9764343a990SloppyRAT DLLHighdetect
sha256ff142fc192daa2a83bc565e5b38ebbe05561f3a19c7fc2d08e38c97e1986bbc5SloppyRAT DLLHighdetect
sha256680c3a9f5fdddfcc34856c7a67d21bbdd2b47d70bdfb829ff59cfa0e3bc72d21SloppyRAT DLLHighdetect
sha256bdcf8fe230e23692b658b62b6547374e2234f2a497b19d26637018a1839e6dfdSloppyRAT DLLHighdetect
sha256607212cfe73c5c84b2dd95b2c0ff37a47f4c8aad08e6d5cbb7c19a62c6b765f9SloppyRAT DLLHighdetect
sha2567bb025b426ae6ccbc170fbca58634b8dd77a61447e48dabe9c2e2fb0d339d8b7SloppyRAT DLLHighdetect
sha2566d50bb50d4e7d6ac36ca6d2761f382be8e1ddbebf3cdf4733cf989ba291f9013SloppyRAT DLLHighdetect
sha25600c116e498799dc831c8aeb602349296c4b9325535d674fe2b6e2e091878dcecSloppyRAT DLLHighdetect
sha25693273ea09bd9df881a594db8cfe1b1bbc54f40f623f44427278ae96fb9b46490SloppyRAT DLLHighdetect
sha256971f25f84be88c4fd304d555b5e3da12f6b368e4b9ba0943961ff21ba6fa4d4dSloppyRAT DLLHighdetect
sha256a13fcbb0870f2fabb7e0a8c757ee3b763bd4a4b0cdf59eeff981d8e307fcf316SloppyRAT DLLHighdetect
sha256518cd57a303ff7ac2b5c4c8439aa5bcbf9a287d4653de7b76051bde73a94d064SloppyRAT DLLHighdetect
sha2563a8994928f512fffcb32e117ac45e0ee093541d99a9dba5f69a264f7f3054b19SloppyRAT DLLHighdetect
sha2562f3d95de716f330fad2330d8787ebdbecb3322453bdc41b2113427f9f92d32d2SloppyRAT DLLHighdetect
sha2561439990ff65364a0f608a322aa3a493bc1683cb5fc30cffc44948da29623fffdSloppyRAT DLLHighdetect
sha256eaa52d2d6d4daf29157e8e813247fb2e92797324230ee42c79f7861b2f5c341dSloppyRAT DLLHighdetect
sha256cb9930d0cde5bf8e8a7ad08fe2c60b937c7beaf9ab51b03191dfcaba40b7b189SloppyRAT DLLHighdetect
sha256c0ef62a2d5ca11c2eedad3561d5d1d8b6e9847aa6b8613493e5bc233ece3d189SloppyRAT DLLHighdetect
sha2564ecb2d06510dfee1b67f5d9a68c60f6d09ddb5be36cc1766a41d77c5b89d3a56SloppyRAT DLLHighdetect
sha256466f9b8dce77b3a026fe4f833aa4949784fb854bea4137e52609e857d439dec8SloppyRAT DLLHighdetect
sha256f534a957edec74d69081665309311b791b6d11a3221fffa67744812d73ad98ebconfig.py Python stager scriptHighdetect

Host artifacts (behavioral — durable, survive infrastructure rotation)

TypeValueContextConfAction
registryHKCU\Software\Microsoft\Windows\CurrentVersion\Run \ rundll32 = rundll32.exe (bare, no path/export)Broken persistence attempt — the malformed value itself is the signatureHighhunt
registryHKLM\Software\Classes\CLSID\{FNV-1a(computer name)}\InprocServer32Broken COM-hijack persistence attempt — CLSID is generated, not an existing one, so it is host-specific and not directly matchable, but the pattern (a newly-created CLSID key under this path with a missing/incorrect DLL path) is huntableMediumhunt
file-pattern%TEMP%\*.png (PNG-header-prefixed, XOR-encrypted, non-image content)PSInline command-result cache file, disguised with a PNG extensionMediumhunt
Not promoted to atomic IOC: the documented example X-API-KEY header value (af4c426b8c4b3b4957875206948eedae09b670f349f2ffb70df7b7a6b06cd588) is shown in the primary source as a single sample HTTP request and may be per-build rather than universal; it is retained in §9 as a hunt-context value, not shipped as a confirmed network IOC.
05

ATT&CK Mapping

Technique rows marked "source-stated" reflect ThreatLabz's own technical description; rows marked "analyst inference" are this pack's mapping of a described behavior onto the closest ATT&CK technique.

TacticTechniqueNameBehaviorBasisSources
ExecutionT1204.004Malicious Copy and PasteClickFix lure runs the initial finger.exe commandanalyst inferenceS01,S02,S03,S04
Command and ControlT1105Ingress Tool Transferfinger.exe/curl.exe/IronPython/CastleLoader/CastleRAT/config.py/hostfxr.dll download chainsource-statedS01,S02
Defense EvasionT1036.003Rename Legitimate Utilitiesnative curl.exe copied to a numerically-named .com fileanalyst inferenceS01,S02
ExecutionT1059.006PythonIronPython and staged Python interpreter execute obfuscated payload codesource-statedS01,S02
Defense EvasionT1620Reflective Code Loadingconfig.py reflectively loads the SloppyRAT DLL in memorysource-statedS01,S02
Defense EvasionT1027Obfuscated Files or Informationstack/global XOR string obfuscation, affine-cipher Polygon strings, 13 runtime-decrypted code blocks, junk codesource-statedS01,S02,S03,S04
Defense EvasionT1027.007Dynamic API ResolutionDJB2 hashing of 21 NTDLL functions before resolving them at runtimeanalyst inferenceS01,S02
Defense EvasionT1106Native APIHell's-Gate-style indirect syscalls (parses B8/mov eax to extract syscall numbers)source-statedS01,S02
Command and ControlT1071.001Application Layer Protocol: Web ProtocolsHTTPS/JSON C2 over 7 documented API pathssource-statedS01,S02,S03
Command and ControlT1573.001Encrypted Channel: Symmetric CryptographyRC4-encrypted request/response bodies, Base64-encodedsource-statedS01,S02
Command and ControlT1090.001Proxy: Internal Proxyreverse SOCKS proxy for internal lateral pivoting via /api/pollanalyst inferenceS01,S02
Command and ControlT1102.002Web Service: Bidirectional CommunicationEtherHiding — C2 resolution via Polygon blockchain (unconfirmed / in development)analyst inference, flagged unconfirmedS01,S02,S03
DiscoveryT1082System Information Discovery/api/systeminfo, Get-ComputerInfo, whoami, hostname, and related built-inssource-statedS01,S02
DiscoveryT1057Process DiscoveryGet-Process/tasklist/ps built-inssource-statedS01,S02
DiscoveryT1087.001Account Discovery: Local AccountGet-LocalUser/Get-LocalGroupMember built-inssource-statedS01,S02
DiscoveryT1518.001Security Software Discovery/api/av_edr AV/EDR enumeration endpointsource-statedS01,S02,S03
Defense EvasionT1562.001Impair Defenses: Disable or Modify ToolsSet-MpPreference/Add-MpPreference Microsoft Defender tampering built-inssource-statedS01,S02
ExecutionT1047Windows Management Instrumentationcmd shell_type executes via Win32_Process::Createsource-statedS01,S02
ExecutionT1059.001PowerShellPSInline handler loads CLR/COM and calls PowerShell.Create().AddScript().Invoke()source-statedS01,S02
Privilege EscalationT1134.004Access Token Manipulation: Parent PID SpoofingPSSpoof handler spawns powershell.exe with explorer.exe as spoofed parentsource-statedS01,S02
PersistenceT1547.001Registry Run Keys / Startup Folder(broken) Run-key value rundll32source-statedS01,S02
PersistenceT1546.015Component Object Model Hijacking(broken) CLSID-based COM hijack fallbacksource-statedS01,S02
Defense EvasionT1036.008Masquerading: Masquerade File TypePSInline command-result cache written with a .png extensionanalyst inferenceS01,S02
06

Native / Non-CQL Hunts

HuntLog sourceLogicResponse
ClickFix lure reconstructionbrowser history, proxy logs, clipboard policy, user interviewReconstruct the site visit and pasted finger.exe command without re-executing it; preserve original page and timestamps.Scope the delivery window; brief users on this exact lure pattern only after evidence capture.
HTTP User-Agent / header pivotweb proxy or TLS-inspecting gateway logsSearch proxy logs (not endpoint EDR telemetry, which does not carry HTTP headers) for the User-Agents K8VGmQTrzX, Mozilla/5.0 (compatible; DLLMemLoader/1.0), and CommandExecutor/1.0, and for the header name X-API-KEY on outbound HTTPS to unfamiliar hosts.Escalate any hit combined with a matching internal process/host from §7.
Memory acquisition and RC4/TLS content reviewEDR process tree plus approved memory capture and TLS-terminating proxy contentOn a host already corroborated by Q05/Q06, acquire memory to confirm reflective loading and decrypted code blocks; inspect approved TLS-terminated content for the RC4-encrypted JSON body shape. Do not contact or replay any C2 destination.Confirm active C2 before isolation; preserve volatile memory ahead of remediation.
Polygon/EtherHiding on-chain check (low priority — source flags as unconfirmed)public Polygon block explorer / RPC queryOnly if C2 domains are unreachable and a sample is suspected to use the fallback: look up whether any observed contract address responds to selector 0xd6bd8727. ThreatLabz has not observed a populated contract as of publication.Document and monitor only; do not build blocking automation on an unconfirmed capability.
07

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Query strategy: Q01–Q04 cover the delivery chain in order; Q05–Q06 hunt the confirmed C2 infrastructure and hash set directly (highest confidence in this pack); Q07–Q09 cover on-host execution/persistence behaviors. Every card remains STATIC-ONLY — no tenant was contacted, no field was validated against a live schema.
Q01 · finger.exe ClickFix retrieval over the Finger protocol
CONF highFP lowCOST low

Looks for: finger.exe launched with the caret-obfuscated, for /f "delims=@"-style command line documented by ThreatLabz, optionally referencing the linked4x[.]com delivery host. Accomplishes: catches the very first observable step of the chain before CastleLoader/CastleRAT/SloppyRAT ever touch disk.

Trace: H01 · A01

// HUNT: finger.exe ClickFix retrieval over the Finger protocol
// HYPOTHESIS: H01
// USE: alert-candidate
// MITRE: T1204.004, T1105
// CONF: high
// FP: low
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2; FileName, CommandLine, ParentBaseFileName, aid
// FALSE POSITIVES: legacy Finger diagnostics, network engineers, compatibility/interoperability testing
// TUNING: inventory legitimate finger.exe owners and exclude by managed host plus approved parent/path, never by filename alone
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName = /^finger\.exe$/i
| CommandLine = /(?:\^.{0,4}\^|delims=@|linked4x)/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, TargetProcessId, aid])
| sort(@timestamp, order=desc, limit=1000)
Q02 · Renamed curl.exe staging IronPython from GitHub
CONF highFP mediumCOST low

Looks for: a process whose image path ends in .com (curl.exe copied and renamed to a numeric filename) invoked with curl-specific flags and a GitHub IronPython release URL. Accomplishes: targets the documented stage-2 downloader signature, which is unusual regardless of campaign.

Trace: H02 · A02

// HUNT: Renamed curl.exe staging IronPython from GitHub
// HYPOTHESIS: H02
// USE: alert-candidate
// MITRE: T1036.003, T1105
// CONF: high
// FP: medium
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2; FileName, ImageFileName, CommandLine, aid
// FALSE POSITIVES: legitimate automation that renames curl for portability, rare packaging tools
// TUNING: scope to hosts with a preceding Q01 hit; exclude approved deployment-tooling paths and signers
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName = /\.com$/i
| CommandLine = /--ssl-no-revoke/i
| CommandLine = /ironpython/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData, TargetProcessId, aid])
| sort(@timestamp, order=desc, limit=1000)
Q03 · Renamed IronPython executing an obfuscated zlib/Base64 loader
CONF highFP mediumCOST low

Looks for: a process running the documented -c "import base64,zlib,sys,subprocess ... zlib.decompress(base64.b64decode(...))" shape, typically from a numerically-named executable under IronPython.3.4.2\net462. Accomplishes: catches stage-3 execution before CastleLoader/CastleRAT are dropped.

Trace: H03 · A03

// HUNT: Renamed IronPython executing an obfuscated zlib/Base64 loader
// HYPOTHESIS: H03
// USE: alert-candidate
// MITRE: T1059.006, T1027
// CONF: high
// FP: medium
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2; ImageFileName, CommandLine, aid
// FALSE POSITIVES: legitimate embedded-Python build/deploy tooling that decompresses payloads at runtime
// TUNING: scope to hosts with a preceding Q01/Q02 hit; exclude approved CI/build-agent paths
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine = /base64/i
| CommandLine = /zlib\.decompress/i
| CommandLine = /subprocess/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData, TargetProcessId, aid])
| sort(@timestamp, order=desc, limit=1000)
Q04 · DNS/network activity to the SloppyRAT delivery/staging hosts
CONF highFP lowCOST low

Looks for: DNS resolution of the confirmed delivery/staging hostnames (Finger-protocol host, CastleLoader host, and the Azure Blob/S3 hosts serving config.py/hostfxr.dll). Accomplishes: catches the chain from stage 1 through the SloppyRAT DLL fetch, independent of process-level obfuscation.

Trace: H01,H04 · A04

// HUNT: DNS/network activity to the SloppyRAT delivery/staging hosts
// HYPOTHESIS: H01, H04
// USE: alert-candidate
// MITRE: T1105, T1071.001
// CONF: high
// FP: low
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: DnsRequest or SuspiciousDnsRequest; DomainName, ContextBaseFileName, aid
// FALSE POSITIVES: none expected — these are single-purpose registered hostnames, not shared cloud front-doors
// TUNING: none required; escalate any hit directly, then correlate with Q01-Q03 process context
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(DnsRequest|SuspiciousDnsRequest)$/
| DomainName = /^(finger\.linked4x\.com|skipraid\.com|stro7121\.blob\.core\.windows\.net|backup-ubt\.s3\.us-east-1\.amazonaws\.com)$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, ContextProcessId_decimal, DomainName, aid])
| sort(@timestamp, order=desc, limit=1000)
Q05 · DNS/network activity to confirmed SloppyRAT C2 (domains + IP)
CONF highFP lowCOST low

Looks for: DNS resolution of api[.]telephoneip[.]net/api[.]truesmart[.]org, or a direct network connection to 62.106.66.148:443. Accomplishes: the single highest-confidence detection in this pack — live C2 contact.

Trace: H05 · A05

// HUNT: DNS/network activity to confirmed SloppyRAT C2 (domains + IP)
// HYPOTHESIS: H05
// USE: alert-candidate
// MITRE: T1071.001, T1573.001
// CONF: high
// FP: low
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: DnsRequest, SuspiciousDnsRequest, or NetworkConnectIP4; DomainName / RemoteAddressIP4, RemotePort, ContextBaseFileName, aid
// FALSE POSITIVES: none expected — dedicated C2 domain and IP, not shared infrastructure
// TUNING: none required; treat any hit as high-confidence C2 contact and proceed directly to containment
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(DnsRequest|SuspiciousDnsRequest|NetworkConnectIP4)$/
| (DomainName = /^(api\.telephoneip\.net|api\.truesmart\.org)$/i or RemoteAddressIP4 = "62.106.66.148")
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, ContextProcessId_decimal, DomainName, RemoteAddressIP4, RemotePort, aid])
| sort(@timestamp, order=desc, limit=1000)
Q06 · Process/file hash match against confirmed SloppyRAT SHA256 set
CONF highFP lowCOST low

Looks for: a process execution or written file whose SHA256 matches one of the 22 confirmed hashes in §4/§9. Accomplishes: a direct, exact-match hunt independent of any behavioral heuristic; the highest-confidence card in the pack.

Trace: H06 · A06

// HUNT: Process/file hash match against confirmed SloppyRAT SHA256 set
// HYPOTHESIS: H06
// USE: alert-candidate
// MITRE: T1105, T1620
// CONF: high
// FP: low
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: ProcessRollup2, PeFileWritten, or NewExecutableWritten; SHA256HashData, aid
// FALSE POSITIVES: none expected for an exact hash match; confirm SHA256HashData is populated for the event type in your tenant
// TUNING: none required; refresh this hash list as new samples are published
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(SHA256HashData, values=["9f84cfcf988530941555d1cb7780a091743cf567396201eff7731f5475768f9a","8774533134d9d1514106c4090a0c5bccab4550facdcfe03f4e02b9764343a990","ff142fc192daa2a83bc565e5b38ebbe05561f3a19c7fc2d08e38c97e1986bbc5","680c3a9f5fdddfcc34856c7a67d21bbdd2b47d70bdfb829ff59cfa0e3bc72d21","bdcf8fe230e23692b658b62b6547374e2234f2a497b19d26637018a1839e6dfd","607212cfe73c5c84b2dd95b2c0ff37a47f4c8aad08e6d5cbb7c19a62c6b765f9","7bb025b426ae6ccbc170fbca58634b8dd77a61447e48dabe9c2e2fb0d339d8b7","6d50bb50d4e7d6ac36ca6d2761f382be8e1ddbebf3cdf4733cf989ba291f9013","00c116e498799dc831c8aeb602349296c4b9325535d674fe2b6e2e091878dcec","93273ea09bd9df881a594db8cfe1b1bbc54f40f623f44427278ae96fb9b46490","971f25f84be88c4fd304d555b5e3da12f6b368e4b9ba0943961ff21ba6fa4d4d","a13fcbb0870f2fabb7e0a8c757ee3b763bd4a4b0cdf59eeff981d8e307fcf316","518cd57a303ff7ac2b5c4c8439aa5bcbf9a287d4653de7b76051bde73a94d064","3a8994928f512fffcb32e117ac45e0ee093541d99a9dba5f69a264f7f3054b19","2f3d95de716f330fad2330d8787ebdbecb3322453bdc41b2113427f9f92d32d2","1439990ff65364a0f608a322aa3a493bc1683cb5fc30cffc44948da29623fffd","eaa52d2d6d4daf29157e8e813247fb2e92797324230ee42c79f7861b2f5c341d","cb9930d0cde5bf8e8a7ad08fe2c60b937c7beaf9ab51b03191dfcaba40b7b189","c0ef62a2d5ca11c2eedad3561d5d1d8b6e9847aa6b8613493e5bc233ece3d189","4ecb2d06510dfee1b67f5d9a68c60f6d09ddb5be36cc1766a41d77c5b89d3a56","466f9b8dce77b3a026fe4f833aa4949784fb854bea4137e52609e857d439dec8","f534a957edec74d69081665309311b791b6d11a3221fffa67744812d73ad98eb"])
| table([@timestamp, ComputerName, UserName, ImageFileName, FileName, SHA256HashData, TargetProcessId, aid])
| sort(@timestamp, order=desc, limit=1000)
Q07 · PPID-spoofed powershell.exe (PSSpoof handler)
CONF mediumFP highCOST low

Looks for: powershell.exe reporting explorer.exe as its parent with an empty or near-empty command line — the documented STARTUPINFOEX / PROC_THREAD_ATTRIBUTE_PARENT_PROCESS PPID-spoofing fallback used when the in-process CLR handler fails. Accomplishes: a narrow behavioral pivot for the noisiest of SloppyRAT's three command handlers.

Trace: H07 · hunt-only

// HUNT: PPID-spoofed powershell.exe (PSSpoof handler)
// HYPOTHESIS: H07
// USE: hunt
// MITRE: T1134.004
// CONF: medium
// FP: high
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: ProcessRollup2 or SyntheticProcessRollup2; FileName, ParentBaseFileName, CommandLine, aid
// FALSE POSITIVES: legitimate Explorer shell extensions, shortcuts, and context-menu handlers that launch PowerShell with minimal arguments
// TUNING: scope to hosts with a Q01-Q06 hit; exclude known shell-extension GUIDs/paths after owner review
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName = /^powershell\.exe$/i
| ParentBaseFileName = /^explorer\.exe$/i
| CommandLine = /^\s*(powershell(\.exe)?)?\s*$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, TargetProcessId, aid])
| sort(@timestamp, order=desc, limit=1000)
Q08 · Malformed SloppyRAT Run-key persistence write
CONF mediumFP mediumCOST low

Looks for: a Run-key value literally named rundll32 whose data is the bare string rundll32.exe (no DLL path, no export) — the documented broken persistence attempt. Accomplishes: the malformed value is itself distinctive; no legitimate installer writes a Run entry this way.

Trace: H08 · hunt-only

// HUNT: Malformed SloppyRAT Run-key persistence write
// HYPOTHESIS: H08
// USE: hunt
// MITRE: T1547.001
// CONF: medium
// FP: medium
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: AsepValueUpdate or RegGenericValueUpdate; RegObjectName, RegValueName, RegStringValue, aid
// FALSE POSITIVES: none expected for the exact bare-value match; a broader RegValueName-only search would need scoping
// TUNING: none required for the exact-match form below; widen only with an owner-reviewed baseline
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(AsepValueUpdate|RegGenericValueUpdate)$/
| RegObjectName = /\\Software\\Microsoft\\Windows\\CurrentVersion\\Run$/i
| RegValueName = /^rundll32$/i
| RegStringValue = /^rundll32(\.exe)?$/i
| table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue, aid])
| sort(@timestamp, order=desc, limit=1000)
Q09 · PSInline command-result cache disguised as a PNG
CONF lowFP highCOST low

Looks for: a file written under %TEMP% with a .png extension by powershell.exe, rundll32.exe, or an unsigned process — the documented XOR-encrypted, PNG-header-prefixed command-result cache used by the PSInline handler. Accomplishes: a weak but cheap pivot; genuine PE-file write telemetry does not cover arbitrary non-PE content, so this is necessarily approximate and marked low confidence.

Trace: H09 · hunt-only

// HUNT: PSInline command-result cache disguised as a PNG
// HYPOTHESIS: H09
// USE: hunt
// MITRE: T1036.008
// CONF: low
// FP: high
// COST: low
// TIMEFRAME: 30d — bounded analyst review window
// REQUIRES: TargetFileName and ContextBaseFileName on typed file-write events; coverage of non-PE writes is tenant-dependent
// FALSE POSITIVES: genuine screenshot/cache utilities, browsers, and legitimate PowerShell scripts that write PNGs to %TEMP%
// TUNING: scope strictly to hosts already flagged by Q01-Q07; treat as corroborating evidence only, never as a standalone alert
// FIELD_NOTE: ⚠ validate in tenant — Falcon exposes no generic untyped file-write event; this checks the closest typed write events as a best-effort, low-yield pivot since the PNG-disguised cache is arbitrary non-PE content
// VALIDATION: STATIC-ONLY
#event_simpleName = /^(PeFileWritten|NewExecutableWritten|ZipFileWritten)$/
| TargetFileName = /\\Temp\\[^\\]+\.png$/i
| ContextBaseFileName = /^(powershell|rundll32)\.exe$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName, aid])
| sort(@timestamp, order=desc, limit=1000)
08

Operationalization and IOA Candidates

Every query has an explicit operational decision. Alert-candidate rows have complete design-only packages; no schedule, notification, IOA, or prevention rule was created.

QueryUseDecisionReadinessRationale
Q01alert-candidatealert-packagedesign-onlyTenant parsing, positive testing, and benign baseline are not recorded.
Q02alert-candidatealert-packagedesign-onlySame as above.
Q03alert-candidatealert-packagedesign-onlySame as above.
Q04alert-candidatealert-packagedesign-onlySame as above.
Q05alert-candidatealert-packagedesign-onlyHighest-priority candidate for a scheduled search once tenant-validated; still design-only here.
Q06alert-candidatealert-packagedesign-onlyExact-hash match; strongest candidate for prevention once field coverage is confirmed.
Q07hunthunt-onlydesign-onlyHigh FP; needs an owner-reviewed shell-extension baseline before any alerting.
Q08hunthunt-onlydesign-onlyRegistry field availability and exact-match behavior unverified against a live tenant.
Q09hunthunt-onlydesign-onlyLow confidence, corroborating-evidence use only.
Readiness gate: every benign baseline is unknown and every positive/benign test is planned-not-run. No alert package is deployable as shipped.
09

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,9f84cfcf988530941555d1cb7780a091743cf567396201eff7731f5475768f9a,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,8774533134d9d1514106c4090a0c5bccab4550facdcfe03f4e02b9764343a990,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,ff142fc192daa2a83bc565e5b38ebbe05561f3a19c7fc2d08e38c97e1986bbc5,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,680c3a9f5fdddfcc34856c7a67d21bbdd2b47d70bdfb829ff59cfa0e3bc72d21,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,bdcf8fe230e23692b658b62b6547374e2234f2a497b19d26637018a1839e6dfd,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,607212cfe73c5c84b2dd95b2c0ff37a47f4c8aad08e6d5cbb7c19a62c6b765f9,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,7bb025b426ae6ccbc170fbca58634b8dd77a61447e48dabe9c2e2fb0d339d8b7,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,6d50bb50d4e7d6ac36ca6d2761f382be8e1ddbebf3cdf4733cf989ba291f9013,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,00c116e498799dc831c8aeb602349296c4b9325535d674fe2b6e2e091878dcec,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,93273ea09bd9df881a594db8cfe1b1bbc54f40f623f44427278ae96fb9b46490,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,971f25f84be88c4fd304d555b5e3da12f6b368e4b9ba0943961ff21ba6fa4d4d,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,a13fcbb0870f2fabb7e0a8c757ee3b763bd4a4b0cdf59eeff981d8e307fcf316,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,518cd57a303ff7ac2b5c4c8439aa5bcbf9a287d4653de7b76051bde73a94d064,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,3a8994928f512fffcb32e117ac45e0ee093541d99a9dba5f69a264f7f3054b19,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,2f3d95de716f330fad2330d8787ebdbecb3322453bdc41b2113427f9f92d32d2,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,1439990ff65364a0f608a322aa3a493bc1683cb5fc30cffc44948da29623fffd,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,eaa52d2d6d4daf29157e8e813247fb2e92797324230ee42c79f7861b2f5c341d,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,cb9930d0cde5bf8e8a7ad08fe2c60b937c7beaf9ab51b03191dfcaba40b7b189,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,c0ef62a2d5ca11c2eedad3561d5d1d8b6e9847aa6b8613493e5bc233ece3d189,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,4ecb2d06510dfee1b67f5d9a68c60f6d09ddb5be36cc1766a41d77c5b89d3a56,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,466f9b8dce77b3a026fe4f833aa4949784fb854bea4137e52609e857d439dec8,detect,high,2027-03-12,SloppyRAT DLL,campaign:SloppyRAT
sha256,f534a957edec74d69081665309311b791b6d11a3221fffa67744812d73ad98eb,detect,high,2027-03-12,SloppyRAT config.py stager script,campaign:SloppyRAT
domain,finger.linked4x.com,detect,high,2026-12-12,ClickFix stage-1 batch script host,campaign:SloppyRAT
domain,skipraid.com,detect,high,2026-12-12,CastleLoader/CastleRAT download host,campaign:SloppyRAT
domain,stro7121.blob.core.windows.net,detect,high,2026-12-12,Azure Blob host serving config.py and SloppyRAT DLL,campaign:SloppyRAT
domain,backup-ubt.s3.us-east-1.amazonaws.com,detect,high,2026-12-12,S3 backup host for SloppyRAT DLL,campaign:SloppyRAT
domain,api.telephoneip.net,detect,high,2026-12-12,SloppyRAT C2 domain,campaign:SloppyRAT
domain,api.truesmart.org,detect,high,2026-12-12,SloppyRAT C2 domain,campaign:SloppyRAT
ipv4,62.106.66.148,detect,high,2026-12-12,SloppyRAT C2 IP (port 443),campaign:SloppyRAT
Behavioral Signaturesdurable — survives rotation
# Delivery chain
finger.exe with caret-obfuscated command line ("f^i^n^g^e^r"), for /f "delims=@" ... do %o
curl.exe copied to AppData under a numeric filename with a .com extension
--ssl-no-revoke plus an IronPython GitHub release URL on the command line
-c "import base64,zlib,sys,subprocess ... zlib.decompress(base64.b64decode(...))"

# C2 and network
HTTPS JSON POST/GET to /api/auth, /api/systeminfo, /api/av_edr, /api/poll, /api/command/get,
  /api/command/result, /api/proxy/ack
Authorization: Bearer <session_token> on requests after /api/auth
X-CSRF-Token header on /api/proxy/ack requests
RC4-then-Base64 encoded request/response bodies ({"...":"[Base64(RC4(...))]","encrypted":true})
reverse SOCKS proxy broker initiated via the /api/poll response

# Execution and evasion
powershell.exe with explorer.exe parent and an empty/near-empty command line (PSSpoof)
System.Management.Automation.dll loaded via CLR/COM without a visible powershell.exe process (PSInline)
Win32_Process::Create WMI execution for the "cmd" shell_type
XOR-encrypted, PNG-header-prefixed file written to %TEMP% with a .png extension

# Persistence (both broken/malformed as shipped)
HKCU\Software\Microsoft\Windows\CurrentVersion\Run \ rundll32 = "rundll32.exe" (bare, no path/export)
HKLM\Software\Classes\CLSID\{FNV-1a(computer name)}\InprocServer32 with a missing/incorrect DLL path
Named Tooling & Infrastructurepivot / enrich
# Malware chain
SloppyRAT       final-stage RAT/backdoor analyzed in this pack
CastleLoader    intermediate loader (delivery precursor — see the CastleRAT pack for its own hunt content)
CastleRAT       intermediate RAT stage (delivery precursor — see the CastleRAT pack for its own hunt content)

# DLL export invoked on the reflectively-loaded SloppyRAT DLL
f3b980dea

# User-Agents observed across the chain
K8VGmQTrzX                                CastleLoader retrieval from skipraid.com
Mozilla/5.0 (compatible; DLLMemLoader/1.0)   config.py Python-loader retrieval
CommandExecutor/1.0                       SloppyRAT C2 HTTP client identifier

# Documented example X-API-KEY value (hunt-context only — see callout in section 4)
af4c426b8c4b3b4957875206948eedae09b670f349f2ffb70df7b7a6b06cd588

# EtherHiding / Polygon (source-flagged as likely still in development — do not action as live C2)
contract function selector: 0xd6bd8727
build-time / environment override: LOADER_POLYGON_RESOLVER
no smart-contract address has been observed in any sample as of 2026-09-10

# Zscaler product detections
Win64.Loader.PSInlineLoader
Win64.Rat.SloppyRAT
MDR analytic: WIN-PYTHON-REMOTE-CODE-EXEC
SloppyRAT C2 API Surfacereference — proxy/TLS hunt only
POST /api/auth            {"machine_id":"...","version":"1.0"}                     -> {"token":"..."}
POST /api/systeminfo      {"systeminfo":"[Base64(RC4(...))]","encrypted":true}      -> N/A
POST /api/av_edr          {"...":"[Base64(RC4(av_list))]","encrypted":true}         -> {"success":true|false}
GET  /api/poll?machine_id=<mid>                                                     -> {} or {"action":"close|open","request_id":"..."}
GET  /api/command/get                                                               -> {"command":{...|null,"id":N},"shell_type":"cmd|powershell|auto|inline"}
POST /api/command/result  {"id":N,"status":"...","result":"[Base64(RC4(stdout))]","error":"[Base64(RC4(stderr))]","exit_code":N,"encrypted":true} -> N/A
POST /api/proxy/ack       {"request_id":"..."}                                      -> N/A
10

Hardening — Tiered and Deployable

Immediate — block the delivery chain and known C2
  • Block egress on TCP/79 and restrict finger.exe execution (M1037, M1038; CTRL01) — deny outbound Finger-protocol traffic at the perimeter and constrain finger.exe execution via application control for hosts with no documented Finger use case deployable-design Verify: confirm no business-critical legacy service depends on Finger before blocking; run an inert lab test against a controlled Finger server Rollback: restore the prior egress rule and application-control policy from the exported baseline Authority: Zscaler ThreatLabz guidance accessed 2026-09-13.
  • Add the confirmed domains/IP/hashes to Falcon IOC Management as detect (then prevent after validation) (M1031; CTRL02) — import the §9 CSV, start in detect mode, and promote to prevent once a 7-day benign-baseline window shows no legitimate hits deployable-design Verify: confirm zero benign hits over the baseline window before promoting to prevent Rollback: revert the IOC action to detect via Falcon IOC Management Authority: Zscaler ThreatLabz IOC appendix accessed 2026-09-13.
Near-term — constrain the staging and execution surface
  • Pilot application-control coverage for renamed/copied system binaries (M1038, M1040; CTRL03) — audit for curl.exe (or any signed system binary) copied to a user-writable path under a different name/extension before a download, then pilot a blocking policy deployable-design Verify: approved packaging/deployment tooling continues to function under audit mode; an inert copy-and-rename test is flagged Rollback: return the cohort to audit mode via the exported policy Authority: Microsoft App Control for Business guidance.
  • Constrain unmanaged PowerShell escalation paths (M1042, M1026; CTRL04) — apply Constrained Language Mode / AppLocker-style controls to reduce the value of the PSInline (CLR/COM) and PSSpoof (PPID-spoofed powershell.exe) handlers, and alert on explorer.exe-parented PowerShell with empty command lines deployable-design Verify: approved shell-extension and admin workflows continue to pass under the pilot cohort Rollback: restore the previous PowerShell execution policy Authority: Microsoft PowerShell security guidance and Zscaler technical analysis.
Strategic — reduce structural exposure
  • Retire legacy Finger client where no business owner exists (M1042; CTRL05) — inventory finger.exe use across the estate, assign owners to any exception, and remove or deny execution where no supported dependency remains deployable-design Verify: approved exceptions continue to function; an unowned invocation is prevented or alerted Rollback: reinstall or re-allow only the reviewed signed binary for a time-bounded exception Authority: Zscaler ThreatLabz reporting accessed 2026-09-13.
  • Centralize process, DNS, network, and registry evidence with extended retention (M1047; CTRL06) — ensure Falcon telemetry (ProcessRollup2, DnsRequest, NetworkConnectIP4, AsepValueUpdate/RegGenericValueUpdate) is retained long enough to reconstruct the full multi-stage chain during an investigation deployable-design Verify: a tabletop reconstruction links ClickFix lure, finger.exe, curl.exe, IronPython, CastleLoader/CastleRAT, and SloppyRAT C2 contact across one test case Rollback: restore prior retention settings only after equivalent evidence capacity exists Authority: CrowdStrike Falcon logging guidance.

Deployable playbook · PB01 · guarded pilot and rollback

  1. Export current egress, application-control, PowerShell, IOC-management, and logging/retention state
  2. Import the §9 IOC set in detect mode
  3. Inventory approved finger.exe, curl-renaming, and IronPython/embedded-Python workflows
  4. Apply audit-mode controls to a limited pilot cohort
  5. Run inert lab fixtures without contacting source infrastructure
  6. Verify expected telemetry and business continuity for the pilot cohort
  7. Promote IOC actions to prevent and expand controls only when exceptions are owned
  8. Roll back through exported policies if a stop condition fires
  9. Retain configuration, events, decisions, and recovery evidence
Design state: no control was canary-tested or deployed. Complete platform, continuity, and approval checks before enforcement.
11

Containment Runbook

PhaseTriggerAuthorityOwnerEvidenceRecovery
1. Validate and preserveQ05/Q06 hit (confirmed C2 or hash match), or correlated Q01-Q04/Q07-Q09SOC leadSOC analystraw events, process tree, dropped files/hashes, DNS/network, registry valuesnone; preservation is read-only
2. Scope deliverychain corroborated from ClickFix lure through SloppyRAT C2 contactincident commanderendpoint and web/proxy respondersbrowser history, proxy logs, pasted command, related hosts/usersdocument approved test or continue
3. Isolate affected endpointactive C2 contact or command execution confirmedincident commander plus business ownerendpoint operationsisolation time, exceptions, active sessions, business impacttemporary access only under continuity plan
4. Address accounts, network, and lateral pivotDefender-tampering commands, reverse-SOCKS proxy activity, or lateral connections observedincident commander plus identity/network ownersidentity and network operationsrevocations, blocks, destination evidence, owner approvalsrestore access through clean reauthentication and reviewed rules
5. Eradicate, recover, re-huntscope stable and volatile evidence preservedincident commander and system ownerendpoint engineering and SOCrebuild/cleanup record, known-good hashes, fresh Q01-Q09 resultsreturn after no unexplained hits and owner sign-off

Preservation order: raw results, process tree, dropped files and hashes, network/DNS, registry values, memory (if approved), analyst notes, and tool logs. Closure: known-good recovery, explained re-hunt results, and incident-commander plus system-owner approval. Never resolve, browse to, or otherwise contact any C2 domain, IP, or blob-storage URL from this pack during investigation.

12

Detection Coverage and Validation Evidence

Validation state: STATIC REVIEW PASSED only after the complete local gate suite succeeds (structure/safety, field/event heuristic, CQL heuristic, IOC provenance). This is not Falcon parsing, canary success, schedule creation, or deployment evidence.

Technique / BehaviorCoverageQuery or handoffEvidenceLimitation
T1204.004 / T1105 (ClickFix + finger.exe retrieval)StaticQ01local structure, field, syntax, provenance, safety reviewtenant parser, positive test, benign baseline absent
T1036.003 / T1105 (renamed curl.exe / IronPython stage)StaticQ02local structure, field, syntax, provenance, safety reviewtenant parser, positive test, benign baseline absent
T1059.006 / T1027 (obfuscated Python loader)StaticQ03local structure, field, syntax, provenance, safety reviewtenant parser, positive test, benign baseline absent
T1105 / T1071.001 (delivery/staging hosts)StaticQ04local structure, field, syntax, provenance, safety reviewtenant parser, positive test, benign baseline absent
T1071.001 / T1573.001 (confirmed C2 domains/IP)StaticQ05local structure, field, syntax, provenance, safety reviewtenant parser, positive test, benign baseline absent
T1105 / T1620 (confirmed hash set)StaticQ06local structure, field, syntax, provenance, safety reviewtenant parser, positive test, benign baseline absent; field availability for SHA256HashData on write events is tenant-dependent
T1134.004 (PPID-spoofed PowerShell)StaticQ07local structure, field, syntax, provenance, safety reviewtenant parser, positive test, benign baseline absent; high expected FP
T1547.001 (malformed Run-key persistence)StaticQ08local structure, field, syntax, provenance, safety reviewtenant parser, positive test, benign baseline absent
T1036.008 (PNG-disguised result cache)Static or gapQ09local structure, field, syntax, provenance, safety reviewnon-PE file-write coverage is tenant-dependent; low confidence as shipped
T1573.001 content, T1620 memory proof, T1090.001 SOCKS contentGapnative/memory handoff (§6)none — requires memory acquisition and approved TLS contentnot observable from endpoint metadata alone
T1102.002 (EtherHiding / Polygon)Gap — unconfirmed capabilitynative on-chain check (§6)none — source itself reports no populated smart contract observeddo not build detection/blocking around an unconfirmed capability

Recorded evidence and next tests

  • Every CQL card retains VALIDATION: STATIC-ONLY; no Falcon tenant was contacted.
  • All 22 SHA256 hashes and all 5 core domains/1 IP were re-extracted directly from live source HTML by regex, not summarized, and cross-checked against 3 independent secondary sources with zero contradictions.
  • Content, memory, TLS/proxy-body, and blockchain-resolver gaps remain visible and are not papered over.
  • Next: parse Q05 and Q06 in the intended repository first (highest confidence, lowest FP), verify field availability, then run approved inert positive and 30-day benign tests before promoting any card to prevent.
13

Hunt Summary Ticket

TITLE:        SloppyRAT hunt — v0.1 Draft
SEVERITY:     high — RAT/backdoor with confirmed C2 infrastructure, likely leveraged by a ransomware-related actor for recon and lateral movement
SCOPE:        Windows Falcon process, file, DNS, IPv4 network, and registry telemetry
HYPOTHESIS:   H01 alert-candidate — finger.exe ClickFix retrieval over TCP/79; H02 alert-candidate — renamed curl.exe stages IronPython; H03 alert-candidate — IronPython executes an obfuscated zlib/Base64 loader; H04 alert-candidate — DNS/network to delivery/staging hosts; H05 alert-candidate — DNS/network to confirmed C2 domains/IP; H06 alert-candidate — hash match against 22 confirmed SHA256 values; H07 hunt — PPID-spoofed powershell.exe (PSSpoof); H08 hunt — malformed Run-key persistence write; H09 gap — in-memory decryption, RC4/TLS content, reverse-SOCKS content, and EtherHiding/Polygon resolution
QUERIES RUN:  Q01-Q06 alert-candidate; Q07-Q09 hunt
DO FIRST:     Q05 and Q06 over 30d, then Q01-Q04 for delivery-chain context
FINDINGS:
GAPS:         tenant parsing, native/memory/TLS-content evidence, positive and benign tests, EtherHiding/Polygon on-chain confirmation
ACTIONS:      SOC validates Q05/Q06 first; platform and endpoint owners preserve and scope evidence for any hit
OWNER:        Security Operations / Detection Engineering / Platform Owner
VERSION:      v0.1 Draft · 2026-09-12 · STATIC REVIEW PASSED
14

Changelog

v0.1 Draft2026-09-12Initial pack with 9 CQL queries (6 alert-candidate, 3 hunt), 22 source-verified SHA256 hashes plus 5 domains and 1 IP re-extracted directly from live source HTML, full 47-command and anti-analysis technical writeup, IOC quick-copy grid, tiered hardening, and a five-phase containment runbook. Tenant execution is not claimed. EtherHiding/Polygon flagged as an unconfirmed, likely-incomplete capability per the primary source.
15

References

IDPublisherVersion/statusAccessedUseURL
S01Zscaler ThreatLabzsuccessful direct-HTML extraction; primary technical source2026-09-13C01-C10https://www.zscaler.com/blogs/security-research/sloppyrat-new-tool-ransomware-attacks
S02Security Boulevardsuccessful direct-HTML extraction; full syndication of S012026-09-13C01-C10https://securityboulevard.com/2026/09/sloppyrat-a-new-tool-for-ransomware-attacks/
S03Cyber Security Newssuccessful direct-HTML extraction; independent full-hash corroboration2026-09-13C01,C05,C06,C07,C10https://cybersecuritynews.com/hackers-deploy-new-sloppyrat/
S04GBHackerssuccessful direct-HTML extraction; partial hash/domain corroboration2026-09-13C01,C06,C07,C10https://gbhackers.com/hackers-deploy-new-sloppyrat-via-clickfix-to-enable-ransomware-lateral-movement/
RELHuntPack libraryrelated pack — delivery precursorchain context onlyCastleRAT Multi-Stage RAT Hunt