Stealers are frequently delivered by loaders, some sold as pay-per-install services, through cracked software, malvertising, email and fake updates. The loader downloads an encrypted payload and runs it inside a trusted process, often a .NET host from the framework directory. Detecting the hand-off finds the stealer before the theft, and finds the loader even when the stealer is new.
Signals at a Glance
| Signal | Where | ATT&CK |
|---|---|---|
| Script, document or installer downloads a PE or encrypted blob to a user-writable path | Process creation, proxy, Sysmon 11 | T1105 |
| RegAsm, MSBuild, InstallUtil, AppLaunch or jsc started by a user-writable parent | Process creation | T1055.012 |
| Framework .NET host making outbound network connections | Sysmon 3, EDR network | T1055 |
| Suspended process creation followed by remote memory writes | Sysmon 8/10, EDR | T1055.012 |
| AutoIt or script-interpreter loader executing from an extracted archive | Process creation | T1059 |
Trusted Hosts That Should Be Quiet
The .NET command-line tools used for builds and registration rarely make network connections on a normal endpoint. When a stealer is hollowed into one, that is its first visible act. This rule is cheap and high value:
title: Network Connection from .NET Utility Often Used as Injection Host
logsource:
category: network_connection
product: windows
detection:
selection:
Initiated: 'true'
Image|endswith:
- '\RegAsm.exe'
- '\RegSvcs.exe'
- '\MSBuild.exe'
- '\InstallUtil.exe'
- '\AppLaunch.exe'
- '\jsc.exe'
- '\vbc.exe'
filter_internal:
DestinationIp|cidr:
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
condition: selection and not filter_internal
level: high
# tune/validate: build servers and developer machines run MSBuild with network access
Hunting the Hand-Off
Look at lineage as well as the connection. A utility spawned by a binary in a user-writable path, with no meaningful command line, is the hollowing pattern:
// Microsoft Defender (KQL) - .NET utilities launched by user-writable parents
DeviceProcessEvents
| where FileName in~ ("RegAsm.exe","RegSvcs.exe","MSBuild.exe","InstallUtil.exe","AppLaunch.exe","jsc.exe","vbc.exe")
| where InitiatingProcessFolderPath has_any ("\\AppData\\","\\Temp\\","\\ProgramData\\","\\Users\\Public\\","\\Downloads\\")
| where ProcessCommandLine endswith FileName or ProcessCommandLine endswith strcat(FileName, "\"")
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessFolderPath, InitiatingProcessCommandLine
// tune/validate: developer workstations and CI agents need a scoped exclusion
- Block execution from user-writable paths and from extracted archives with application control; it breaks most commodity loader chains at the first step.
- Alert on the loader, not just the stealer: a loader that fetched one payload will fetch the next, so scope the host for other families.
- Check the loader’s persistence; see the persistence page, because the loader is usually what survives cleanup.
Use SigmaHQ process-hollowing and suspicious .NET utility rules, Elastic detections for process injection and suspicious RegAsm or MSBuild activity, Splunk ESCU analytics and MITRE CAR injection analytics. Baseline build servers and developer endpoints first; MSBuild and RegAsm are legitimate tools there.
Build Detections That Fire
Mjolnir Security helps blue teams turn threat intelligence into high-fidelity detections across endpoint, network, identity and cloud telemetry.
- Detection Engineering We build and tune detections mapped to ATT&CK from your own telemetry.
- Threat Hunting as a Service Hypothesis-driven hunts for the behaviours on this page.
- 24/7 Incident Response Containment when a detection fires. Call +1 833 403 5875.
Stay ahead of emerging threats. Get notified when we publish new intelligence reports and advisories.
Subscribe to Alerts