NetSupport Manager — Abused Remote-Access Tool

A legitimate commercial RMM (NetSupport Manager) weaponized as a RAT via fake browser updates, ClickFix, malvertising, and phishing (LNK/PDF). The tell-tale signal: client32.exe + client32.ini running from %ProgramData%/%AppData% instead of Program Files. Defensive hunt & harden pack — no malicious code.
Threat
NetSupport Manager RAT (NetSupport RAT / "FakeBat"-delivered)
Severity
ACTIVE · HANDS-ON RAT
Type
Abused legitimate RMM / remote control
Delivery
Fake update · ClickFix · malvertising · LNK/PDF phishing
Dropped by
Scarlet Goldfinch · SocGholish-adjacent clusters
Version
v0.3 · 2026-06-12
Author
HuntPack
01

Executive Summary

NetSupport Manager is a legitimate commercial remote-administration product that attackers routinely repurpose as a RAT ("NetSupport RAT"). Because the binary is signed and commercial, it sails past naïve allow-lists — which is exactly why multiple activity clusters (Scarlet Goldfinch, SocGholish-adjacent operators, and various malvertising crews) deliver it. Delivery is via fake browser-update lures, ClickFix paste-and-run, malvertising/SEO, and phishing emails carrying LNK or PDF files, often through a first-stage loader that drops the NetSupport client into a user-writable directory.

The single most reliable detection is a path anomaly: under normal use, NetSupport runs from \Program Files\; when abused it executes from %ProgramData% or %AppData%. The client (client32.exe) reads its config (client32.ini) for a "gateway"/control address, persists via Run keys or scheduled tasks, and beacons over HTTP/HTTPS to blend with normal traffic. Hands-on operators then use it for follow-on activity — credential theft, lateral movement, and ransomware staging.

Defender priority: Q1 — NetSupport client32.exe running outside Program Files — is the decisive signal. If NetSupport is not a sanctioned tool in your environment, any execution is suspicious. If it is sanctioned, allow-list its managed install path and alert on every other location. Treat a hit as a live hands-on RAT.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry
1 · Vendor researchRed Canary — NetSupport Manager (Threat Detection Report)Install-path detection (ProgramData anomaly), binary metadata, naming conventions; delivery clustersyes
1 · Vendor researchPicus — How NetSupport RAT Abuses a Legit Admin Toolclient32.exe/client32.ini, persistence (Run/task), HTTP/HTTPS C2, gateway configyes
2 · VendorDarktrace / SOC Prime — NetSupport ClickFix deliveryFake-update & ClickFix delivery; persistent remote controlyes
2 · VendorGoogle/Mandiant — Fake software update abuses NetSupportDrive-by → loader → NetSupport; redirect chainspartial

Decisions: payload-anchored detection (the path anomaly is delivery-agnostic, so it covers every cluster that drops NetSupport); cross-references the Scarlet Goldfinch and SocGholish packs for the upstream lures; behavior over atomic IOCs since C2/gateway addresses rotate.

03

Hunt Brief & Attack Chain

Working hypothesis: A loader (from a fake update / ClickFix / malvertising / LNK) drops the NetSupport client into %ProgramData%/%AppData%, writes a client32.ini with a control gateway, persists, and beacons — giving an operator hands-on access.

StepBehaviorTelemetryHunt Angle
1 · DeliveryFake update / ClickFix / malvertising / LNK-PDF phishingProcessRollup2; proxyN1 (see sibling packs)
2 · DropNetSupport binaries written to %ProgramData%/%AppData%file writeQ2; N2
3 · Executeclient32.exe runs outside Program Files; reads client32.iniProcessRollup2Q1
4 · PersistRun key / scheduled task / Startup → the clientregistry / task eventsQ3; N3
5 · C2HTTP/HTTPS beacon to the gateway/control serverNetworkConnectIP4Q5; N4
6 · Hands-onOperator recon / lateral / stagingProcessRollup2Q6

Affected surface & telemetry

SurfaceRequired TelemetryPriorityGap Risk
Windows user endpointsProcess lineage + image path (ProcessRollup2)CriticalLow — standard sensor
RAT install pathsFile writes to %ProgramData%/%AppData%; binary metadataHighLow — reliable
PersistenceRun keys / scheduled tasks / StartupHighLow — covered
C2 egressNetworkConnectIP4; proxyMediumMedium — HTTP/HTTPS blends in
04

Consolidated IOC Table

NetSupport binaries are legitimate signed software — never block by hash alone. The durable signal is the install-path anomaly + persistence + gateway config. Copy-ready blocks in §9.
TypeValueConfActionContext
Behaviorclient32.exe running from %ProgramData%/%AppData%/TemphighdetectRAT install-path anomaly — flagship
Fileclient32.ini / client32u.ini (gateway/control address)highhuntNetSupport config with C2 gateway
Filepcicapi.dll · nskbfltr.inf · HTCTL32.DLL · PCICHEK.DLLmediumhuntNetSupport component DLLs (in user path)
PersistenceRun key / task → %ProgramData%/%AppData% client32.exemediumhuntRAT auto-start
Behaviorclient32.exe outbound HTTP/HTTPS to a non-corporate hostmediumhuntNetSupport C2 beacon
05

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Initial AccessT1189 / T1566 — Drive-by / phishingFake update, ClickFix, malvertising, LNK/PDFN1 (sibling packs)
Command & ControlT1219 — Remote Access SoftwareNetSupport client32.exe used for remote controlQ1, Q5
PersistenceT1547.001 / T1053.005 — Run key / Startup / taskAuto-start of the clientQ3; N3
Defense EvasionT1036.005 — Masquerading (legit signed tool)Signed RMM run from a user-writable pathQ1, Q4
Discovery / Lateral (hands-on)T1087 / T1021 — recon & lateral movementOperator activity via the RATQ6
06

Native Audit-Log Hunts

HuntSourceLogicResponse
N1 · Delivery (loader)Proxy / EID 4688Fake-update ZIP / ClickFix paste-and-run / LNK execution preceding the NetSupport dropSweep host; see Scarlet Goldfinch / SocGholish packs
N2 · NetSupport binary inventorySoftware/binary inventoryclient32.exe / NetSupport component DLLs present outside \Program Files\Investigate; uninstall if unsanctioned
N3 · PersistenceRegistry Run keys / Task SchedulerAuto-start entries pointing at NetSupport in %ProgramData%/%AppData%Remove; isolate host
N4 · Gateway C2Proxy / firewallBeacon to the gateway/control address in client32.ini (often non-corporate HTTP/HTTPS)Block; identify the source host
07

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Field names validated against the Falcon event reference; process hunts include SyntheticProcessRollup2. Env edit: if NetSupport is a sanctioned tool, allow-list its managed \Program Files\ install path in Q1.
Q1 · NetSupport client32.exe running outside Program Files
CONF HIGHFP LOWCOST LOW

Looks for: NetSupport client binaries executing from %ProgramData%/%AppData%/Temp. Accomplishes: the decisive RAT signal — delivery-agnostic. FP: sanctioned NetSupport in its managed path (allow-list).

// HUNT: NetSupport RAT install-path anomaly
// MITRE: T1219, T1036.005 | CONF: high  FP: low  COST: low
// TUNING: if NetSupport is sanctioned, allow-list its managed \Program Files\ path
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(client32|client32u|pcicfgui|runscript32)\.exe$/i
| ImageFileName=/\\(ProgramData|Users\\[^\\]+\\AppData|Temp)\\/i
| table([@timestamp, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData], limit=200)
Q2 · NetSupport components dropped into a user-writable path
CONF HIGHFP LOW-MEDCOST LOW

Looks for: NetSupport files (client32.ini, pcicapi.dll, HTCTL32.DLL, etc.) written to %ProgramData%/%AppData%. Accomplishes: catches the drop before execution.

// HUNT: NetSupport component files dropped to a user-writable path
// MITRE: T1219 | CONF: high  FP: low-med  COST: low
// FP NOTES: legit NetSupport installs to Program Files, not ProgramData/AppData
#event_simpleName=/PeFileWritten|NewExecutableWritten/
| TargetFileName=/\\(client32u?\.ini|pcicapi\.dll|HTCTL32\.DLL|PCICHEK\.DLL|nskbfltr\.inf|client32\.exe)$/i
| TargetFileName=/\\(ProgramData|AppData|Temp)\\/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName], limit=200)
Q3 · NetSupport persistence (Run key / Startup / scheduled task)
CONF MED-HIGHFP LOW-MEDCOST LOW

Looks for: auto-start entries referencing a NetSupport binary in a user-writable path. Accomplishes: catches RAT persistence. FP: sanctioned managed-path NetSupport (allow-list).

// HUNT: NetSupport RAT persistence
// MITRE: T1547.001, T1053.005 | CONF: med-high  FP: low-med  COST: low
// TUNING: correlate to Q1/Q2; allow-list sanctioned managed-path NetSupport
#event_simpleName=/AsepValueUpdate|ScheduledTaskRegistered/
| (RegStringValue=/\\(ProgramData|AppData)\\.+client32|client32\.exe/i or CommandLine=/client32\.exe/i)
| table([@timestamp, ComputerName, UserName, RegObjectName, RegStringValue, CommandLine], limit=200)
Q4 · NetSupport binary renamed / masquerading
CONF MEDFP MEDCOST LOW

Looks for: the NetSupport original-filename metadata (client32) on a process whose on-disk name differs (renamed to evade). Accomplishes: catches masquerading. FP: depends on PE-metadata telemetry availability.

// HUNT: NetSupport binary renamed (original-filename vs on-disk name mismatch)
// MITRE: T1036.005 | CONF: medium  FP: medium  COST: low
// REQUIRES: PE original-filename / internal-name telemetry (field availability varies)
// TUNING: confirm OriginalFilename is actually populated in your tenant first -- where the field is empty this returns nothing and the clean result is meaningless. If you license NetSupport, allow-list the sanctioned deployment path and signer; site-branded rollouts rename client32.exe legitimately.
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| OriginalFilename=/client32/i
| FileName!=/^client32(u)?\.exe$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, OriginalFilename, SHA256HashData], limit=200)
Q5 · NetSupport C2 beacon from a user-path binary
CONF MEDFP MEDCOST MED

Looks for: client32.exe (from a user-writable path) making outbound connections. Accomplishes: surfaces gateway C2. FP: sanctioned NetSupport — correlate with Q1.

// HUNT: NetSupport gateway C2 beacon
// MITRE: T1219, T1071.001 | CONF: medium  FP: medium  COST: medium
// TUNING: correlate to Q1; exclude sanctioned NetSupport gateways
#event_simpleName=NetworkConnectIP4
| ContextBaseFileName=/^client32(u)?\.exe$/i
| RemoteAddressIP4!=/^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|169\.254\.|127\.)/
| table([@timestamp, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
Q6 · Hands-on activity spawned by NetSupport
CONF HIGHFP LOWCOST LOW

Looks for: shells / recon / admin tooling parented by client32.exe. Accomplishes: catches operator hands-on-keyboard activity through the RAT. FP: low for an unsanctioned-path client.

// HUNT: Hands-on activity through NetSupport RAT
// MITRE: T1219, T1059 | CONF: high  FP: low  COST: low
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^client32(u)?\.exe$/i
| FileName=/^(cmd|powershell|pwsh|net|net1|nltest|whoami|systeminfo|reg|wmic|rundll32|mshta)\.exe$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
08

CrowdStrike Custom IOA Recommendations

IOA NameField PatternsBenign ExclusionsDeployment Path
NetSupport — client32 outside Program FilesImage *\client32.exe from *\ProgramData\*/*\AppData\*/*\Temp\*Sanctioned NetSupport in its managed pathEndpoint Security → Custom IOA → Process Creation, Detect+Block
NetSupport — hands-on shell from client32Parent *\client32.exe; Child cmd/powershell/net/nltest.exeSanctioned remote-admin sessions (rare)Custom IOA → Process Creation
Q1 is the strongest promotion (path anomaly, delivery-agnostic). Q6 is a high-value hands-on signal. Q2–Q5 stay correlated hunts.
09

Machine-Readable IOC Appendix

Grouped IOC Quick-Copy

One-click blocks for detection and inventory. NetSupport is signed legitimate software — never block by hash; key on the path anomaly + persistence + gateway.

Component Filenamesinventory sweep
client32.exe       # NetSupport client (the RAT process)
client32u.exe      # NetSupport client (UI variant)
client32.ini       # config — contains the GatewayAddress / control server (C2)
HTCTL32.DLL        # NetSupport control DLL
PCICHEK.DLL        # NetSupport component
PCICL32.DLL        # NetSupport client DLL
pcicapi.dll        # NetSupport API DLL
nskbfltr.inf       # keyboard filter driver inf
# Sweep for ANY of these outside \Program Files\ (esp. %ProgramData% / %AppData%)
Behavioral Signaturesdetection logic
client32.exe running from %ProgramData%/%AppData%/Temp (not Program Files) — flagship
NetSupport component DLLs / client32.ini dropped to a user-writable path
Run key / scheduled task / Startup pointing at a user-path client32.exe
client32.exe outbound HTTP/HTTPS to a non-corporate gateway (client32.ini GatewayAddress)
client32.exe spawning cmd/powershell/net/nltest (operator hands-on)
NetSupport PE metadata (OriginalFilename client32) on a renamed binary (masquerade)
Config / Gateway Extractionfind the C2
# Pull the C2 from any recovered client32.ini:
#   [GatewayConfig] -> GatewayAddress=<host:port>  (the control/C2 server)
#   SecondaryGateway / Port entries
# PowerShell triage on a suspect host:
Get-ChildItem -Path C:\ProgramData,$env:APPDATA -Recurse -Filter client32.ini -ErrorAction SilentlyContinue |
  ForEach-Object { Write-Host $_.FullName; Select-String -Path $_.FullName -Pattern 'Gateway|Address|Port' }
Hardening / Blockdeny unsanctioned RMM
# WDAC/AppLocker: deny NetSupport (client32.exe + component DLLs) anywhere except a
#   single sanctioned \Program Files\ path (or deny entirely if NetSupport is not used).
# Block outbound to unknown HTTP/HTTPS gateways; enforce egress proxy.
# Upstream lures (see sibling packs): change .js handler; block mshta; ASR; web filtering.
# RMM governance: maintain an allow-list of sanctioned remote-admin tools; alert on all others.
10

Hardening — Tiered & Deployable

The whole abuse hinges on running a signed RMM from the wrong place — deny unsanctioned RMM and the rest follows.

Immediate — Deny unsanctioned NetSupport
  • WDAC/AppLocker: allow NetSupport only from a single sanctioned path (or deny entirely)M1038. Directly blocks Q1. If NetSupport isn't used, block client32.exe + component DLLs outright.
  • RMM governance: allow-list sanctioned remote-admin tools; alert on all othersM1042.
  • Block the upstream luresM1042. Change the .js handler, block mshta, enable script ASR (see Scarlet Goldfinch / SocGholish packs).
  • Egress proxy; block unknown HTTP/HTTPS gatewaysM1037. Disrupts NetSupport C2.
Near term — Observe & constrain (pilot first)
  • Inventory + alert on NetSupport component DLLs / client32.ini in user pathsM1042. Feeds Q2/N2.
  • Monitor Run keys / scheduled tasks pointing at user-writable binariesM1018. Feeds Q3/N3.
  • Web filtering; managed browser-update channels onlyM1021. Cuts fake-update delivery.
Strategic — Default-deny
  • Application allowlisting enterprise-wideM1038. Unsigned loaders & misplaced signed tools both denied.
  • Least privilege; restrict who can install/run remote-admin toolingM1026.
  • User training on fake-update / "support tool" luresM1017.
11

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host; preserve client32.ini (extract the gateway/C2) and the binariesSOC L2Containment timestamp; Q1 event; client32.ini
TriagePull the delivery → drop → execute tree; identify the gateway; check for hands-on activity (Q6) and lateral movementSOC L2Process tree; gateway address
EradicateRemove the client + persistence; block the gateway; reset creds used on the hostIRRemoval log; C2 block; cred reset
RecoverRebuild if the operator had hands-on time; verify no lateral foothold; restore from clean stateIR + ITRebuild ticket; lateral review
HardenDeny unsanctioned NetSupport via WDAC/AppLocker; promote Q1/Q6 IOAs; block upstream luresDetection EngControl status; IOA enabled
12

Detection Coverage Map & Validation

TechniqueBehaviorCQLIOACoverage
T1219 / T1036.005client32.exe install-path anomalyQ1IOA-1Good
T1219NetSupport component dropQ2Good
T1547.001 / T1053.005RAT persistenceQ3Good
T1036.005Renamed / masquerading binaryQ4Partial needs PE-metadata telemetry
T1219 / T1071.001Gateway C2 beaconQ5Partial correlate to Q1
T1219 / T1059Hands-on through the RATQ6IOA-2Good
T1189 (delivery)Fake-update / ClickFix lureGAP see sibling packs / proxy (N1)

Validation gates: (1) confirm process + file telemetry fleet-wide; (2) determine whether NetSupport is sanctioned and capture its managed path (allow-list for Q1/Q3); (3) lab-test a benign binary run from %ProgramData% (Q1 logic) and a benign auto-start from a user path (Q3); (4) promote Q1/Q6 to Custom IOA Detect+Block; keep Q2–Q5 correlated.

13

Hunt Summary Ticket

TITLE:        Hunt — NetSupport Manager RAT abuse
SEVERITY:     High (hands-on RAT; ransomware/lateral precursor)
SCOPE:        Windows user endpoints; sanctioned-RMM environments need allow-list
HYPOTHESIS:   Loader (fake update / ClickFix / malvertising / LNK) drops NetSupport to
              %ProgramData%/%AppData% -> client32.exe runs outside Program Files ->
              persists -> gateway C2 -> operator hands-on.
QUERIES RUN:  Q1 client32 outside Program Files (IOA) | Q2 component drop | Q3 persistence |
              Q4 renamed binary | Q5 gateway C2 | Q6 hands-on via client32 (IOA)
              + Native N1-N4 (delivery, inventory, persistence, gateway C2)
DO FIRST:     Q1 (path anomaly), Q6 (hands-on) — isolate on any hit
FINDINGS:     <pending analyst execution>
GAPS:         Delivery lure (see sibling packs); renamed-binary needs PE-metadata
ACTIONS:      Deny unsanctioned NetSupport via WDAC/AppLocker; block gateway egress; promote Q1/Q6
OWNER:        HuntPack
VERSION:      v0.3 - 2026-06-12
14

Changelog

v0.52026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.42026-06-29CQL syntax review (crowdstrike-logscale-v3): removed invalid FileCreateInfo event (Q2).
v0.32026-06-12Re-hunt + reformatted to the review-v2 gold layout (fixed left-sidebar scrollspy TOC, collapsible, cloud selector inside the CQL section, per-card Copy/Open-in-Falcon, Grouped IOC Quick-Copy grid, coverage+validation, .ticket). Refreshed from Red Canary/Picus/Darktrace: install-path anomaly detection, component-DLL inventory, client32.ini gateway extraction, ClickFix delivery, hands-on lineage. 6 CQL + 4 native hunts, 2 IOA candidates.
v0.12026-05-26Initial pack: NetSupport Manager RAT overview + hunts. Pre-gold top-bar layout.
15

References

TierSourceUsed For
1Red Canary — NetSupport Manager (Threat Detection Report)Install-path anomaly, metadata, delivery clusters
1Picus — How NetSupport RAT Abuses a Legit Admin Toolclient32 components, persistence, gateway C2
2SOC Prime — NetSupport ClickFix delivery · Darktrace — NetSupport RATClickFix delivery; legit-tool abuse
2Google/Mandiant — Fake update abuses NetSupportDrive-by → loader → NetSupport

HuntPack v0.3 · NetSupport Manager RAT abuse · Generated 2026-06-12 · Defensive use only. NetSupport is legitimate signed software — never block by hash; the install-path anomaly + persistence + gateway are the durable signals. If NetSupport is sanctioned, allow-list its managed path before promoting Q1.