AvisLoader: Tox P2P Windows Loader

Windows loader with peer-to-peer C2, DocuSign-themed ClickFix lure via Cloudflare Quick Tunnels, UACMe method 41 helper, process-hiding DLL, shortcut persistence
Threat
AvisLoader
Severity
HIGH
Type
Loader / Malware-as-a-service
Initial Access
ClickFix (fake document signing)
Version
v0.1 · 2026-10-15
Author
HuntPack
Confidence
MEDIUM (single-origin research)
01

Executive Summary

AvisLoader is a Windows malware loader that Varonis Threat Labs found on an exposed staging server together with a ClickFix lure, supporting tools and an operator web panel. Its command channel runs over Tox, an encrypted peer-to-peer messaging network, so there is no fixed C2 domain or server address to take down. The lure seen with it posed as a DocuSign signing request, hosted on Cloudflare Workers, and told the visitor to paste a command that pulls code from a Cloudflare Quick Tunnel (trycloudflare.com).

The recovered Windows client is a 3.4 MB 64-bit executable that statically links c-toxcore. Alongside it were auto.exe, a helper that references UACMe method 41, and hmn_hook.dll, a library that hooks NtQuerySystemInformation to filter a process name from results. Persistence code targets desktop and taskbar-pinned shortcuts and a VBScript launcher tied to the name VLCAssistant. Varonis stresses that successful elevation, process hiding and file transfers were not confirmed, and no victim counts were reported.

Defensive angle: detect the host behaviour (the pasted command, script hosts and shells touching a tunnel host, shortcut and launcher artifacts, a dllhost-spawned elevated shell) and treat network indicators as weak, because Tox traffic is encrypted and decentralised. The three published hashes ship at detect, not prevent, because they have a single origin.

Defender priority: run Q3, Q6 and Q1 over 30 days first, then review any workstation that pasted a command from a document-signing page. Do not block trycloudflare.com or workers.dev wholesale: both host legitimate services.
02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
1 (primary)Varonis Threat Labs blog, Daniel KelleyOriginal research: ClickFix lure, c-toxcore client, auto.exe, hmn_hook.dll, shortcut persistence, three SHA-256 hashes, MITRE table. Page shows "Last updated September 23, 2026"Yes (snapshot 01)
2HackreadRe-reports Varonis; adds the clipboard and Run-dialog advice. No new indicatorsPartial (snapshot 03)
2Cyber Security NewsRe-reports Varonis; reproduces the Varonis IOC table including the shared-domain notes. Not independent of VaronisPartial (snapshot 04)
2SOC PrimeDetection aggregator; lists generic rules (numeric-name executables, trycloudflare DNS, Tox traffic). No new indicatorsPartial (snapshot 05)
n/aBleepingComputerFetch returned a Cloudflare bot challenge (HTTP 403), so nothing was read or saved. Not citedNo
Decisions: (1) Every secondary article republishes the Varonis findings, so the hashes have one origin. Rule: prevent needs two independent sources, so all three ship at detect. (2) The task brief gave a publication date of 2026-10-12; the saved sources are dated 2026-09-23 to 2026-09-25. The pack uses the dates on the pages. (3) Varonis lists trycloudflare.com and workers.dev as shared domains to investigate in context, not as indicators, so they are not in the import CSV. (4) The Varonis lure displayed a macOS command, but no macOS payload was found; this pack covers the Windows loader only.
03

Hunt Brief & Attack Chain

Hypotheses (highest fidelity first)

  1. H1: a host executed or wrote one of the three published artifacts (Q1, Q2). High confidence, low FP.
  2. H2: a shell or script host references a Cloudflare Quick Tunnel host (Q3, Q4). High to medium.
  3. H3: the VLCAssistant launcher or a shortcut-style script launch is present (Q6, Q7). High to medium.
  4. H4: a pasted download one-liner started from explorer or a terminal (Q5). Medium; generic ClickFix shape.
  5. H5: a COM-surrogate elevation hands off a shell (Q8) or a numeric-named binary runs from a profile folder (Q9). Medium.
  6. H6: a non-browser process behaves like a Tox peer (Q10, Q11). Weak, analyst-added; enrichment only.
StepBehaviourTelemetryHunt angle
1 LureDocuSign-themed page on Cloudflare Workers asks the user to paste a "verification code"Browser and proxy logs; outside endpoint telemetryProxy and DNS hunt for workers.dev lures (section 7)
2 ExecutionPasted command fetches and runs code from a Quick Tunnel; parent is not the browserProcess creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); DNS lookup with requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse, name inside AdditionalFields)Q3, Q4, Q5
3 Client3.4 MB 64-bit Tox client, build path C:\Users\dev\Desktop\c-toxcoreExecutable written to disk (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents FileCreated); Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Q1, Q2, Q9
4 Elevationauto.exe, UACMe method 41 via ICMLuaUtil; not confirmed to succeedProcess creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Q2, Q8
5 Stealthhmn_hook.dll hooks NtQuerySystemInformation; deployment not confirmedExecutable written to disk (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents FileCreated) (the hook itself is not visible)Q1, Q2
6 PersistenceModified desktop and taskbar-pinned shortcuts, .backup copies, VLCAssistant VBScript launcherProcess creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); shortcut file changes are not covered by a verified eventQ6, Q7; native sweep (section 7)
7 C2Tox P2P, no fixed domain; Command Center sends shell tasks and files over ToxOutbound network connection with owning process (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)Q10, Q11 (weak)
04

Consolidated IOC Table

TypeValueConfidenceActionContext
SHA-25635dd164a7f5d8b42b9870c7009f7425b1c8cb771280c9e6c525e09f3dd13c2ccHighDetect78324.exe, AvisLoader Windows client (Varonis)
SHA-256f0a6870cb774a55775eda15fd39e8a17eb3169d5b9365186dae8edff07ff3975HighDetectauto.exe, bundled elevation-bypass helper (Varonis)
SHA-256cd1e835f52e5f55279dcdf3857e11bc9298ea6caa88eb214ea2d40ff5d38b5f5HighDetecthmn_hook.dll, bundled process-hiding library (Varonis)
Filenamehmn_hook.dllMediumHuntExports HMN_HideStart, HMN_HideStatus, HMN_HideStop
Filenameauto.exeLowHuntGeneric name; confirm by hash
Launcher nameVLCAssistantMediumHuntPersistence-related VBScript launcher name
File extension.backupLowHuntShortcut backup extension, meaningful only beside modified shortcuts
Build pathC:\Users\dev\Desktop\c-toxcoreMediumHuntString inside the loader; useful for sample triage, not for endpoint telemetry
COM CLSID{3E5FC7F9-9A51-4367-9063-A120244FBEC7}MediumHuntReferenced by auto.exe for the elevation technique
Hooked APINtQuerySystemInformationLowEnrichLegitimate Windows function; not an indicator on its own
Domaintrycloudflare.comLowEnrichShared legitimate tunnel service; never block or prevent
Domainworkers.devLowEnrichShared legitimate hosting; investigate in context only

No C2 IP address or domain was published, which fits the Tox design. Nothing is invented to fill that gap.

05

Affected Surface & Telemetry Matrix

SurfaceTelemetryPriorityGap
Windows workstations (user pastes a command)Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)HighClipboard and the lure page are outside endpoint telemetry
Name resolution for tunnel hostsDNS lookup with requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse, name inside AdditionalFields)MediumBrowser lookups cannot always be attributed to a process
Executable and DLL dropsExecutable written to disk (CrowdStrike: PeFileWritten, NewExecutableWritten. SentinelOne: File Creation. Defender: DeviceFileEvents FileCreated)HighThe NtQuerySystemInformation hook happens in memory and is not visible
Desktop and taskbar shortcutsNo verified endpoint event is used in this packMediumShortcut edits are outside the telemetry used here; use the native sweep
Peer-to-peer C2Outbound network connection with owning process (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)LowTox is encrypted and decentralised; only heuristics are possible, and none was published by the sources
Web and proxyProxy, secure web gateway and DNS filter logsMediumOutside endpoint telemetry
06

ATT&CK Mapping

TacticTechniqueBehaviourQuery or control
ExecutionT1204.004 User Execution: Malicious Copy and PasteClickFix lureQ3, Q5; hardening tier 1
PersistenceT1547.009 Shortcut ModificationDesktop and taskbar shortcuts, VLCAssistant launcherQ6, Q7; native sweep
Privilege Escalation / Defense EvasionT1548.002 Bypass UACauto.exe, UACMe method 41 (not confirmed)Q2, Q8; UAC hardening
Defense EvasionT1014 Rootkithmn_hook.dll hooks NtQuerySystemInformation (not confirmed)Q1, Q2
Command and ControlT1071 Application Layer ProtocolTox via c-toxcoreQ10, Q11 (weak)
Command and ControlT1105 Ingress Tool TransferFiles over Tox; Quick Tunnel fetchQ3, Q4
Defense EvasionT1036 Masquerading (analyst-added)Numeric executable name, packer-like section namesQ9

The first six techniques are the ones in the Varonis MITRE table; T1036 is added by the pack author.

07

Native Audit-Log Hunts

Read-only checks that work without a Falcon sensor.

Shortcut and backup sweep (PowerShell, read-only)

# Lists desktop and taskbar-pinned shortcuts with their targets, plus any .backup files beside them.
$paths = @("$env:USERPROFILE\Desktop","$env:PUBLIC\Desktop","$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar")
$ws = New-Object -ComObject WScript.Shell
foreach ($p in $paths) { if (Test-Path $p) {
  Get-ChildItem $p -Filter *.lnk -ErrorAction SilentlyContinue | ForEach-Object {
    $l = $ws.CreateShortcut($_.FullName)
    [pscustomobject]@{Shortcut=$_.FullName; Target=$l.TargetPath; Args=$l.Arguments; Modified=$_.LastWriteTime}
  }
  Get-ChildItem $p -Filter *.backup -ErrorAction SilentlyContinue | Select-Object FullName, LastWriteTime
}}
# Review: targets that are wscript.exe/cscript.exe, a .vbs, or any argument mentioning VLCAssistant.

Other checks

  • RunMRU: inspect HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU on a suspect host; it records commands typed or pasted into the Run dialog.
  • Process creation auditing (Event ID 4688 with command line) and PowerShell Script Block Logging (4104): search for trycloudflare.com and VLCAssistant.
  • Sysmon (if deployed): Event ID 1 (process), 11 (file create for .lnk, .vbs, .backup), 22 (DNS query for trycloudflare.com).
  • Proxy, DNS filter and secure web gateway: hunt for workers.dev pages that resemble document-signing requests and for trycloudflare.com requests from non-browser user agents.
  • Network: if egress logs exist, look for workstation UDP traffic to many external hosts. Tox is encrypted; do not expect payload visibility.
08

Hunt Queries: CrowdStrike CQL, SentinelOne PowerQuery and Defender XDR KQL

Show all queries in
Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.

Run each over 7 to 30 days. Q10 and Q11 are analyst-added heuristics, not published indicators. None of these queries has been run against a live tenant.

Q1 · Published SHA-256 hashes: loader, UAC helper, process-hiding DLL
CONF HIGHFP LOWCOST LOW

Looks for: any execution or on-disk write of the three artifacts Varonis published. Hash coverage is brittle: a rebuilt loader will not match.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptions, telemetry-gapProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A payload modified in place after an earlier write is seen only if the hash matches at process start.
  • PowerQuery assumes: tgt.process.image.sha256 and tgt.file.sha256 are populated on the tenant and hold lowercase hex.
  • PowerQuery assumes: File Creation stands in for the CQL's executable-write events; File Modification is not queried.
  • KQL – Defender XDR: Files written but never executed are not covered: that needs DeviceFileEvents, a second table.
  • KQL – Defender XDR: SHA256 is documented as usually not populated in DeviceProcessEvents; the source publishes no SHA1 to pivot on, so an empty result is not a clean result until the readiness test shows SHA256 is populated.
  • KQL – Defender XDR: The query covers 30 days (Advanced Hunting retention); the CQL tab covers the full retention of the Falcon tenant.
  • KQL – Defender XDR assumes: SHA256 is populated for the created process on the tenant.
// HUNT: AvisLoader published SHA-256 hashes (78324.exe, auto.exe, hmn_hook.dll)
// MITRE: T1204.002, T1548.002, T1014
// CONF: high  FP: low  COST: low | REQUIRES: process creation and PE-write telemetry with SHA256HashData
// FALSE POSITIVES: none expected; the hashes are campaign specific (single origin: Varonis Threat Labs)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(field=SHA256HashData, values=["35dd164a7f5d8b42b9870c7009f7425b1c8cb771280c9e6c525e09f3dd13c2cc", "f0a6870cb774a55775eda15fd39e8a17eb3169d5b9365186dae8edff07ff3975", "cd1e835f52e5f55279dcdf3857e11bc9298ea6caa88eb214ea2d40ff5d38b5f5"])
| table([@timestamp, aid, ComputerName, #event_simpleName, UserName, FileName, CommandLine, ParentBaseFileName, SHA256HashData])
| sort(@timestamp, order=desc)
Q2 · Artifact filenames: auto.exe, hmn_hook.dll, 78324.exe
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: the three filenames from the Varonis report. The hmn_hook.dll name is distinctive; auto.exe is not. FP: auto.exe is common. Treat a filename hit as a lead until the hash or the parent chain confirms it.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analytic, equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: auto.exe is a generic name, so unrelated installers can match; the hash in Q1 is the confirming pivot.
  • PowerQuery assumes: tgt.file.path holds the full path of the written file, so a trailing-name regex isolates the file name.
  • PowerQuery assumes: File Creation stands in for the CQL's executable-write events; File Modification is not queried.
  • KQL – Defender XDR: A copy of auto.exe or 78324.exe that is started without the sensor having seen it written is not caught here; the CQL and PowerQuery tabs cover process names.
  • KQL – Defender XDR assumes: FileCreated and FileModified are the action types recorded for new and rewritten files on the tenant.
// HUNT: AvisLoader bundled filenames (execution or write)
// MITRE: T1548.002, T1014
// CONF: medium  FP: medium  COST: low | REQUIRES: process creation and PE-write telemetry
// FALSE POSITIVES: auto.exe is a generic name; unrelated software and installers use it
// TUNING: pair every auto.exe hit with Q1 (hash) or Q8 (dllhost child); exclude signed vendor installs with | ImageFileName!=/REPLACE_WITH_APPROVED_VENDOR_PATH/i
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| FileName=/^(auto\.exe|hmn_hook\.dll|78324\.exe)$/i
| table([@timestamp, aid, ComputerName, #event_simpleName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData])
| sort(@timestamp, order=desc)
Q3 · Shell or script host fetching from a Cloudflare Quick Tunnel
CONF HIGHFP LOWCOST LOW

Looks for: the pasted ClickFix command: Varonis says it pulls and runs code from a Cloudflare Quick Tunnel address. trycloudflare.com is shared legitimate infrastructure, so this keys on the process that references it, never on the domain alone.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A tunnel host split across variables or encoded in the command line is not matched.
  • PowerQuery assumes: tgt.process.name holds the executable file name including the .exe suffix on Windows.
  • KQL – Defender XDR: A tunnel host split across variables or encoded in the command line is not matched.
  • KQL – Defender XDR assumes: FileName holds the executable file name including the .exe suffix.
// HUNT: command shell or downloader whose command line references trycloudflare.com
// MITRE: T1204.004, T1105
// CONF: high  FP: low  COST: low | REQUIRES: process creation with command line
// FALSE POSITIVES: developers demoing a tunnel with curl or PowerShell
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/trycloudflare\.com/i
| FileName=/^(powershell|pwsh|cmd|mshta|curl|wget|certutil|bitsadmin|wscript|cscript|msiexec|rundll32|regsvr32)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData])
| sort(@timestamp, order=desc)
Q4 · DNS lookups of trycloudflare.com from non-browser processes
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: a script host, shell or downloader resolving a tunnel name. Browsers are excluded because the lure fetch itself is not the payload step. FP: cloudflared and developer tooling resolve this domain legitimately; baseline by host group first.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A lookup with no attributed process is included, because a null process name is not excluded by the negated list.
  • PowerQuery assumes: event.dns.request holds the queried name; some schema versions use dns.request instead, so confirm which is populated before trusting an empty result.
  • PowerQuery assumes: src.process.name is the requesting process on a DNS Resolved event.
  • KQL – Defender XDR: A DNS lookup whose initiating process the sensor could not attribute is included, not excluded.
  • KQL – Defender XDR assumes: The DnsQueryResponse action type is recorded on the tenant.
  • KQL – Defender XDR assumes: AdditionalFields carries the queried name under DnsQueryString or QueryName.
// HUNT: non-browser process resolving a Cloudflare Quick Tunnel host
// MITRE: T1105, T1071
// CONF: medium  FP: medium  COST: low | REQUIRES: DNS request telemetry with the requesting process
// FALSE POSITIVES: developers and IT staff using cloudflared or quick tunnels on purpose
// TUNING: exclude approved tunnel users by host group with | ComputerName!=/^REPLACE_WITH_DEV_HOST_PREFIX/i
#event_simpleName=DnsRequest
| DomainName=/(^|\.)trycloudflare\.com$/i
| ContextBaseFileName!=/^(chrome|msedge|firefox|brave|opera|vivaldi|cloudflared)\.exe$/i
| groupBy([aid, ComputerName, ContextBaseFileName, DomainName], function=[count(as=Lookups), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)])
| sort(Lookups, order=desc)
Q5 · ClickFix paste: explorer-launched shell with download-and-run content
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: the generic ClickFix shape Varonis describes: a pasted command that downloads and runs code without the browser as parent. Broader than Q3 and not specific to AvisLoader. FP: Run-dialog use by IT staff. The pasted-command shape is common to many ClickFix families, so a hit is not proof of AvisLoader.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The https? marker is broad, so any URL on the command line from an explorer-launched shell matches; expect admin and updater noise.
  • PowerQuery assumes: On a Process Creation event src.process.name is the creator and tgt.process.name the new process.
  • PowerQuery assumes: The marker alternation is matched as a case-insensitive substring, as in the CQL.
  • KQL – Defender XDR: The https? marker is broad, so any URL on the command line from an explorer-launched shell matches; expect admin and updater noise.
  • KQL – Defender XDR assumes: The marker alternation is matched as a case-insensitive substring, as in the CQL.
// HUNT: Run-dialog or terminal paste launching a downloader one-liner (ClickFix)
// MITRE: T1204.004, T1059.001
// CONF: medium  FP: medium  COST: medium | REQUIRES: process creation with command line and parent
// FALSE POSITIVES: admins running one-liners from the Run dialog; some software updaters
// TUNING: exclude known admin hosts and signed updater commands with | CommandLine!=/REPLACE_WITH_APPROVED_COMMAND_FRAGMENT/i
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^(explorer|WindowsTerminal|wt)\.exe$/i
| FileName=/^(powershell|pwsh|cmd|mshta)\.exe$/i
| CommandLine=/(iex|invoke-expression|irm |iwr |invoke-restmethod|invoke-webrequest|downloadstring|curl |mshta +https?:|-enc |-encodedcommand|https?:)/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=desc)
Q6 · VLCAssistant launcher or shortcut persistence string
CONF HIGHFP LOWCOST LOW

Looks for: the persistence-related launcher name from the Varonis IOC table. A modified shortcut that runs the launcher then the real application would surface as a script host with this name.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A shortcut that exists on disk but has not launched since the sensor was installed produces no process event.
  • PowerQuery assumes: tgt.process.image.path holds the full path of the created process image.
  • KQL – Defender XDR: A shortcut that exists on disk but has not launched since the sensor was installed produces no process event.
  • KQL – Defender XDR: The query covers 30 days (Advanced Hunting retention); the CQL tab covers the full retention of the Falcon tenant.
  • KQL – Defender XDR assumes: FolderPath holds the full path of the created process image.
// HUNT: VLCAssistant VBScript launcher / shortcut-persistence name in any command line
// MITRE: T1547.009, T1059.005
// CONF: high  FP: low  COST: low | REQUIRES: process creation with command line
// FALSE POSITIVES: a legitimately named VLC helper script, which Varonis does not describe
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/VLCAssistant/i or ImageFileName=/VLCAssistant/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine])
| sort(@timestamp, order=desc)
Q7 · Explorer-launched VBScript from a user-writable folder
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: what a hijacked desktop or taskbar shortcut would do when opened: explorer starts a script host on a VBScript. This is an inference from the Varonis description, not an observed victim chain. FP: Legacy logon scripts. Baseline per environment before alerting.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A script launched with a relative path, so the folder never appears on the command line, is not matched.
  • PowerQuery assumes: On a Process Creation event src.process.name is the creator and tgt.process.name the new process.
  • PowerQuery assumes: The folder test runs on the command line, as in the CQL, not on the script file's own path.
  • KQL – Defender XDR: A script launched with a relative path, so the folder never appears on the command line, is not matched.
  • KQL – Defender XDR assumes: The folder test runs on the command line, as in the CQL, not on the script file's own path.
// HUNT: wscript/cscript run a .vbs from a user-writable path with explorer as parent (shortcut-launcher shape)
// MITRE: T1547.009, T1059.005
// CONF: medium  FP: medium  COST: low | REQUIRES: process creation with command line and parent
// FALSE POSITIVES: logon scripts and IT tooling that launch .vbs from a profile or ProgramData
// TUNING: exclude known script paths with | CommandLine!=/REPLACE_WITH_APPROVED_SCRIPT_PATH/i
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^explorer\.exe$/i
| FileName=/^(wscript|cscript)\.exe$/i
| CommandLine=/\.vbs/i
| CommandLine=/\\(AppData|ProgramData|Users\\Public|Temp)\\/i
| table([@timestamp, aid, ComputerName, UserName, FileName, CommandLine])
| sort(@timestamp, order=desc)
Q8 · Elevated child of dllhost.exe (UACMe method 41 pattern)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: a command interpreter started by dllhost.exe, which is how a COM-elevation UAC bypass hands off an elevated process. Pair with Q2 for auto.exe. FP: COM-based installers. The pattern is shared by other UAC bypasses, so it is not AvisLoader-specific.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Elevation is not tested: the query finds the spawn, not whether the child holds a high integrity token.
  • PowerQuery assumes: On a Process Creation event src.process.name is the creator and tgt.process.name the new process.
  • PowerQuery assumes: tgt.process.image.sha256 is populated on the tenant.
  • KQL – Defender XDR: Elevation is not tested: the query finds the spawn, not whether the child holds a high integrity token.
  • KQL – Defender XDR assumes: InitiatingProcessFileName holds the creator's file name including the .exe suffix.
// HUNT: shell or script host spawned by dllhost.exe, the COM surrogate abused by ICMLuaUtil elevation
// MITRE: T1548.002
// CONF: medium  FP: medium  COST: low | REQUIRES: process creation with parent
// NOTE: Varonis ties auto.exe to COM class 3E5FC7F9-9A51-4367-9063-A120244FBEC7 and says successful elevation was not confirmed
// FALSE POSITIVES: installers and management tools that elevate through COM surrogates
// TUNING: exclude known management parents or signed installers with | ComputerName!=/^REPLACE_WITH_ADMIN_HOST_PREFIX/i
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^dllhost\.exe$/i
| FileName=/^(cmd|powershell|pwsh|wscript|cscript|mshta|rundll32|regsvr32|auto)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData])
| sort(@timestamp, order=desc)
Q9 · Numeric-only executable name from a user-writable path
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: the loader name shape: the Varonis sample is 78324.exe. A rebuilt sample with another digit string still fits. SOC Prime ships a similar generic rule. FP: Temp-named installers. Use the hash (Q1) to separate AvisLoader from benign numeric names.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Temp-named installers and updaters match; use Q1 or Q2 to confirm.
  • PowerQuery assumes: tgt.process.image.path holds the full path of the created process image, including drive and folder.
  • KQL – Defender XDR: Temp-named installers and updaters match; use Q1 or Q2 to confirm.
  • KQL – Defender XDR assumes: FolderPath holds the full path of the created process image, including drive and folder.
// HUNT: executable named only with digits (78324.exe pattern) running from a user-writable folder
// MITRE: T1204.002, T1036
// CONF: medium  FP: medium  COST: low | REQUIRES: process creation with image path
// FALSE POSITIVES: temp-named installers and updaters
// TUNING: exclude signed installer parents with | ParentBaseFileName!=/^(msiexec|setup)\.exe$/i
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^[0-9]{3,8}\.exe$/i
| ImageFileName=/\\(Users|ProgramData|Windows\\Temp)\\/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData])
| sort(@timestamp, order=desc)
Q10 · Default Tox bootstrap port from a non-browser process (analyst-added)
CONF MEDIUMFP LOWCOST LOW

Looks for: a process contacting the Tox default bootstrap port. This is a heuristic added by the pack author; the sources only say to look for unexpected Tox or P2P traffic.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: equivalent-with-schema-assumptionsProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Tox peers on other ports are not seen; this indicator is analyst knowledge and is not in the source report.
  • PowerQuery assumes: dst.port.number is numeric and holds the remote port of an outbound IP Connect event.
  • PowerQuery assumes: estimate_distinct returns an approximate count of distinct peers.
  • KQL – Defender XDR: Tox peers on other ports are not seen; this indicator is analyst knowledge and is not in the source report.
  • KQL – Defender XDR: RemoteIPType Public excludes link-local and carrier-grade NAT addresses, which the CQL treats as external.
  • KQL – Defender XDR assumes: RemoteIPType is Public for routable addresses and is populated on the tenant.
  • KQL – Defender XDR assumes: ConnectionSuccess, ConnectionFailed and ConnectionRequest are the outbound action types recorded on the tenant.
// HUNT: outbound connections to port 33445, the default Tox bootstrap port (analyst knowledge, NOT in the Varonis report)
// MITRE: T1071
// CONF: medium  FP: low  COST: low | REQUIRES: network connection telemetry with the owning process
// FALSE POSITIVES: people running a Tox chat client on purpose
// NOTE: Tox is encrypted P2P and can use other ports; absence of hits proves nothing
#event_simpleName=NetworkConnectIP4
| RemotePort=33445
| !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "127.0.0.0/8"])
| groupBy([aid, ComputerName, ContextBaseFileName, RemotePort], function=[count(as=Connections), count(RemoteAddressIP4, distinct=true, as=DistinctPeers), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)])
| sort(Connections, order=desc)
Q11 · One process fanning out to many distinct external peers (P2P shape)
CONF LOWFP HIGHCOST MEDIUM

Looks for: peer-to-peer behaviour in general, because Varonis says the Tox connections stay observable next to the loader activity. Expect noise; use it to enrich a host already flagged by another query. FP: Many legitimate P2P-style clients. Low confidence by design.

Validation: schema-aligned, static-reviewedAutomated: static-passedEquivalence: approximate-analyticProfiles: microsoft-defender-xdr, sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: estimate_distinct is approximate, so counts near fifteen can differ from the CQL's exact distinct count.
  • PowerQuery assumes: dst.port.number is numeric and holds the remote port of an outbound IP Connect event.
  • PowerQuery assumes: The fan-out threshold applies over the whole query window, as in the CQL.
  • KQL – Defender XDR: dcount is approximate, so counts near fifteen can differ from the CQL's exact distinct count.
  • KQL – Defender XDR: RemoteIPType Public excludes link-local and carrier-grade NAT addresses, which the CQL treats as external.
  • KQL – Defender XDR assumes: RemoteIPType is Public for routable addresses and is populated on the tenant.
  • KQL – Defender XDR assumes: ConnectionSuccess, ConnectionFailed and ConnectionRequest are the outbound action types recorded on the tenant.
// HUNT: single non-browser process connecting to many distinct public IPs on one port (P2P fan-out)
// MITRE: T1071
// CONF: low  FP: high  COST: medium | REQUIRES: network connection telemetry with the owning process
// FALSE POSITIVES: torrent, VoIP, game, backup and CDN clients; this is a weak heuristic
// TUNING: exclude known P2P-like software with | ContextBaseFileName!=/^(Teams|Zoom|Slack|OneDrive|Dropbox|Steam)\.exe$/i and baseline per host group
#event_simpleName=NetworkConnectIP4
| ContextBaseFileName!=/^(chrome|msedge|firefox|brave|opera|vivaldi|svchost)\.exe$/i
| !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "127.0.0.0/8", "169.254.0.0/16"])
| groupBy([aid, ComputerName, ContextBaseFileName, RemotePort], function=[count(RemoteAddressIP4, distinct=true, as=DistinctPeers), count(as=Connections)])
| test(DistinctPeers >= 15)
| sort(DistinctPeers, order=desc)
09

Detection Rules by Platform

CrowdStrike: Custom IOA

IOA namePattern (Process Creation)PromotesActionExclusions
Shell or downloader referencing a Quick TunnelImage matches powershell, pwsh, cmd, mshta, curl, certutil or bitsadmin; command line contains trycloudflare.comPromote Q3Detect, highApproved developer hosts
VLCAssistant launcherCommand line or image path contains VLCAssistantPromote Q6Detect, highNone known
dllhost.exe spawning a shell or script hostParent image dllhost.exe; child cmd, powershell, wscript, cscript, mshtaPromote Q8Detect, mediumManagement tooling parents
AvisLoader bundled filenamesImage file name hmn_hook.dll, 78324.exe, or auto.exe with other signalsPromote Q2Detect, mediumSigned vendor installs of auto.exe
Why none are Prevent: the hashes and names have a single origin (Varonis; the other articles republish it), and the process names in these patterns are stock Windows binaries. Prevent needs two independent sources and never applies to legitimate tools or to trycloudflare.com.

Alert package for Q3 and Q6

  • Scheduled search name: DETECT - AvisLoader Tunnel Fetch or Launcher
  • Description: Fires when a shell or script host references a Cloudflare Quick Tunnel, or when the VLCAssistant launcher name appears in a command line. Indicates a ClickFix-delivered loader.
  • Email subject: [HIGH] Detection: AvisLoader - tunnel fetch or launcher on <ComputerName>
  • Body: what fired (host, user, parent, command line); meaning: a user probably pasted a command from a fake signing page; immediate action: network-contain, keep powered on, start the triage list; escalate to IR if any of Q1, Q2 or Q8 also hits.

Triage checklist (L1)

  1. Confirm the hit: host, user, parent chain, full command line.
  2. Ask the user what page they were on and what they pasted.
  3. Run Q1 and Q2 for the same aid.
  4. Run Q6 and Q7, then the shortcut sweep (section 7).
  5. Run Q8 for an elevated child of dllhost.exe.
  6. Run Q10 and Q11 for peer-to-peer behaviour (weak signal).
  7. Isolate the host; do not power off.
  8. Escalate to IR; open credential-review tasks for the user.

Pivot queries

// host-scoped: process activity around the alert (replace the aid)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| aid=REPLACE_WITH_AID
| table([@timestamp, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=asc)

// environment-wide: which hosts resolved a Quick Tunnel name
#event_simpleName=DnsRequest
| DomainName=/(^|\.)trycloudflare\.com$/i
| groupBy([ComputerName, ContextBaseFileName], function=count(as=Lookups))
| sort(Lookups, order=desc)

SentinelOne: custom detection rules

RuleSource queryRun asNotes
Shell or downloader referencing a Quick TunnelQ3, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
VLCAssistant launcherQ6, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
dllhost.exe spawning a shell or script hostQ8, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"
AvisLoader bundled filenamesQ2, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device"

Create the rule with POST /web/api/v2.1/cloud-detection/rules, queryType: "scheduled" and queryLang: "2.0", with the query in data.scheduledParams.query. Use 2.0 operator spellings: a rule written with the 1.0 token ContainsCIS was accepted and never fired on a tenant. The API does not warn, so lint the body before deploying.

Microsoft Defender: custom detection rules

RuleSource queryRun asNotes
Shell or downloader referencing a Quick TunnelQ3, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
VLCAssistant launcherQ6, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
dllhost.exe spawning a shell or script hostQ8, KQL – Defender XDR tabCustom detection rule, alert only, every hourThe query returns Timestamp, ReportId and DeviceId, which Microsoft recommends for Defender for Endpoint tables so alerts carry the device group scope and the process tree. Remove the Timestamp filter and the final sort and take before saving the rule: the service applies the rule's lookback itself
AvisLoader bundled filenamesQ2, KQL – Defender XDR tabHunt only until the gap is closedQ2 is only an approximation here. Same three artifact names matched on written files in DeviceFileEvents. The CQL also matches the name of a started process, which needs DeviceProcessEvents, a second table.

Q1, Q4, Q5, Q7, Q9, Q10 and Q11 stay a hunt in this pack, not a rule. A rule can generate only 150 alerts per run. Continuous (NRT) frequency needs a single table and no comment lines, so delete the generated comment header from the query first.

10

Machine-Readable IOC Appendix

No C2 address or domain was published. trycloudflare.com and workers.dev are deliberately absent from the CSV: they are shared legitimate services. All rows ship at detect because the hashes have a single origin.

Falcon IOC Management CSVbulk import, 3 hashes
type,value,action,severity,expiration,description,tags
sha256,35dd164a7f5d8b42b9870c7009f7425b1c8cb771280c9e6c525e09f3dd13c2cc,detect,high,2027-04-15,AvisLoader Windows client 78324.exe (Varonis; single source),campaign:AvisLoader
sha256,f0a6870cb774a55775eda15fd39e8a17eb3169d5b9365186dae8edff07ff3975,detect,high,2027-04-15,AvisLoader bundled UAC helper auto.exe (Varonis; single source),campaign:AvisLoader
sha256,cd1e835f52e5f55279dcdf3857e11bc9298ea6caa88eb214ea2d40ff5d38b5f5,detect,high,2027-04-15,AvisLoader process-hiding DLL hmn_hook.dll (Varonis; single source),campaign:AvisLoader
Microsoft Defender indicators CSVSettings, Endpoints, Indicators, Import: audit only
indicatorType,indicatorValue,action,title,description,expirationTime,severity,recommendedActions,rbacGroups,category,mitretechniques,GenerateAlert
FileSha256,35dd164a7f5d8b42b9870c7009f7425b1c8cb771280c9e6c525e09f3dd13c2cc,Audit,AvisLoader Windows client 78324.exe,AvisLoader Windows client 78324.exe (Varonis; single source),2027-04-15T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,f0a6870cb774a55775eda15fd39e8a17eb3169d5b9365186dae8edff07ff3975,Audit,AvisLoader bundled UAC helper auto.exe,AvisLoader bundled UAC helper auto.exe (Varonis; single source),2027-04-15T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True
FileSha256,cd1e835f52e5f55279dcdf3857e11bc9298ea6caa88eb214ea2d40ff5d38b5f5,Audit,AvisLoader process-hiding DLL hmn_hook.dll,AvisLoader process-hiding DLL hmn_hook.dll (Varonis; single source),2027-04-15T00:00:00.0Z,High,Investigate the device and pivot into the pack's queries,,,,True

Column names and allowed values are from Microsoft's documented parameter table. Check each expirationTime before importing: an indicator whose date has passed is already expired. Download the sample CSV from the Import page to confirm the column order before a bulk import. Each file takes at most 500 indicators. Learn describes the import per entity type, so if a mixed file is rejected, split it by indicatorType. An imported indicator does nothing unless the matching Advanced features are on (for example Custom network indicators and Allow or block file).

SentinelOne IOC importnot included

This pack does not ship a SentinelOne import block: the import format could not be verified against SentinelOne's own documentation. Export a sample from your console and the block can be added with confidence.

Behavioral Signaturesstrings to hunt
VLCAssistant                     persistence launcher name
trycloudflare.com in a shell/downloader command line
dllhost.exe as parent of cmd/powershell/wscript (COM elevation shape)
numeric-only exe name (e.g. 78324.exe) from a profile folder
explorer.exe -> wscript/cscript -> .vbs in AppData/ProgramData/Temp
Named Malware / Toolingfrom Varonis
AvisLoader (Windows client, 78324.exe)
c-toxcore statically linked; build path C:\Users\dev\Desktop\c-toxcore
auto.exe  (UACMe method 41, ICMLuaUtil)
hmn_hook.dll  exports HMN_HideStart, HMN_HideStatus, HMN_HideStop
COM CLSID {3E5FC7F9-9A51-4367-9063-A120244FBEC7}
AvisLoader Command Center (operator web panel)
Hardening Auditread-only checks
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings' -Name Enabled -ErrorAction SilentlyContinue
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' | Select ConsentPromptBehaviorAdmin,EnableLUA
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer' -Name NoRun -ErrorAction SilentlyContinue
11

Detection Validation Gates

  • Telemetry ready: confirm process creation with command line and parent (Process creation with command line, image path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)), DNS lookups with the requesting process (DNS lookup with requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse, name inside AdditionalFields)) and network connections (Outbound network connection with owning process (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)) are collected for workstations.
  • Benign baseline: run Q4, Q5, Q7, Q8, Q9 and Q11 over 30 days and record the normal hits per host group before alerting. Q11 is expected to be noisy.
  • Positive tests (harmless, no malware): on a test host run powershell -NoProfile -Command "Write-Output trycloudflare.com" to exercise Q3, cmd /c echo VLCAssistant for Q6, and nslookup example.trycloudflare.com for Q4. There is no safe way to test Q1 or Q8 without the sample; keep them hash- and parent-based.
  • Promotion: promote Q3 and Q6 to IOAs after a clean baseline; keep Q4, Q5, Q7 to Q11 as hunts. Nothing here is promoted to prevent.
12

Hardening - Tiered & Deployable

Immediate (this week)
  • Block script and obfuscation abuse with ASR rules, audit first. Rules: Block JavaScript or VBScript from launching downloaded executable content; Block execution of potentially obfuscated scripts. MITRE M1049 (Antivirus/Antimalware), M1038 (Execution Prevention). Authority: Microsoft attack surface reduction rules reference. Verify: Get-MpPreference | Select AttackSurfaceReductionRules_Ids,AttackSurfaceReductionRules_Actions
  • Turn on PowerShell Script Block Logging and process-creation command-line auditing. M1047 (Audit). Authority: CIS Microsoft Windows benchmarks, Microsoft security baseline. Verify: Event ID 4104 and 4688 appear.
  • User training for ClickFix. M1017 (User Training): legitimate signing and verification pages never ask for a pasted command. Report, do not run. Best-practice, no formal benchmark.
Near term (1 to 4 weeks, pilot first)
  • Disable Windows Script Host for users who do not need it. M1042 (Disable or Remove Feature). Counters the VBScript launcher. Authority: Microsoft guidance; not in every CIS profile. Verify: Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings"
  • Harden UAC. Set ConsentPromptBehaviorAdmin to prompt for consent on the secure desktop and keep EnableLUA on; remove standing local admin (M1026 Privileged Account Management, M1052 UAC). Authority: CIS Windows benchmark UAC settings. Counters UAC-bypass helpers, which also need a split-token admin user.
  • Restrict the Run dialog where policy allows (NoRun) for standard users. M1038. Blunt control that breaks Win+R; pilot it. Best-practice, no formal benchmark. Does not stop a pasted command in a terminal.
  • Application control for user-writable paths (WDAC or AppLocker, audit mode first). M1038. Authority: Microsoft WDAC guidance; CIS AppLocker recommendations.
Strategic (1 to 3 months)
  • Egress control for tunnel services: allow-list trycloudflare.com and workers.dev by role at the proxy or DNS filter instead of allowing everything. M1037 (Filter Network Traffic). Do not block wholesale: both host legitimate services.
  • Default-deny outbound for workstations on non-standard UDP, so Tox-style peer traffic cannot leave. M1031 (Network Intrusion Prevention), M1037. Best-practice, no formal benchmark.
  • Protect shortcut locations: audit writes to Desktop and the pinned-taskbar folder (SACL) and baseline shortcut targets. M1022 (Restrict File and Directory Permissions). Best-practice, no formal benchmark.
  • PowerShell Constrained Language Mode with WDAC. M1045 (Code Signing), M1038.
13

Deployable Playbooks

Raw configuration only. Test on a pilot ring first. Every step lists its prerequisites, reboot need and rollback.

Step 1: ASR rules in audit mode, then block

Prerequisites: Microsoft Defender Antivirus active (not passive mode); local admin or Intune/GPO.
Reboot required: No

# Audit first. Rule IDs (Microsoft docs):
# D3E037E1-3EB8-44C8-A917-57927947596D  Block JavaScript or VBScript from launching downloaded executable content
# 5BEB7EFE-FD9A-4556-801D-275E5FFC04CC  Block execution of potentially obfuscated scripts
Add-MpPreference -AttackSurfaceReductionRules_Ids D3E037E1-3EB8-44C8-A917-57927947596D,5BEB7EFE-FD9A-4556-801D-275E5FFC04CC -AttackSurfaceReductionRules_Actions AuditMode,AuditMode
# After a clean audit period (review Defender event 1122), switch the Actions to Enabled.
Get-MpPreference | Select AttackSurfaceReductionRules_Ids,AttackSurfaceReductionRules_Actions

Rollback: Remove-MpPreference -AttackSurfaceReductionRules_Ids D3E037E1-3EB8-44C8-A917-57927947596D,5BEB7EFE-FD9A-4556-801D-275E5FFC04CC

Step 2: Disable Windows Script Host (pilot ring)

Prerequisites: Confirm no logon scripts or line-of-business tools use .vbs/.js (check Q7 baseline).
Reboot required: No (new script launches fail immediately)

New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings' -Name Enabled -Value 0 -Type DWord
# Verify
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings' -Name Enabled

Rollback: Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings' -Name Enabled (or set it to 1).

Step 3: UAC: consent on the secure desktop for admins

Prerequisites: Inventory admin workflows that rely on silent elevation.
Reboot required: No (applies at next elevation; a sign-out is advisable)

$k='HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
Set-ItemProperty $k -Name EnableLUA -Value 1 -Type DWord
Set-ItemProperty $k -Name ConsentPromptBehaviorAdmin -Value 2 -Type DWord   # 2 = prompt for consent on the secure desktop
Get-ItemProperty $k | Select EnableLUA,ConsentPromptBehaviorAdmin

Rollback: Set ConsentPromptBehaviorAdmin back to its previous value (record it first with the Get-ItemProperty line; the Windows default is 5).

Step 4: Restrict the Run dialog for standard users (optional, blunt)

Prerequisites: Confirm users do not rely on Win+R; pilot with a small group.
Reboot required: No (sign out and back in)

$k='HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'
New-Item $k -Force | Out-Null
Set-ItemProperty $k -Name NoRun -Value 1 -Type DWord
# Deploy to users through GPO: User Configuration > Administrative Templates > Start Menu and Taskbar > Remove Run menu from Start Menu

Rollback: Remove-ItemProperty -Path $k -Name NoRun (or disable the GPO setting). This does not stop a command pasted into a terminal.

Step 5: Audit writes to the pinned-taskbar and desktop shortcut folders

Prerequisites: Local admin; Audit File System policy enabled.
Reboot required: No

$t = "$env:APPDATA\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
$acl = Get-Acl $t
$rule = New-Object System.Security.AccessControl.FileSystemAuditRule('Everyone','Write,Delete','ContainerInherit,ObjectInherit','None','Success')
$acl.AddAuditRule($rule); Set-Acl $t $acl
# Events appear as Security 4663 once "Audit File System" (Success) is enabled.

Rollback: $acl.RemoveAuditRule($rule) | Out-Null; Set-Acl $t $acl

14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host from the EDR console; keep it powered on. Block nothing at the domain level for trycloudflare.com. Disable the affected user session if elevation is suspectedSOC / IRContainment record, aid, time
Isolate: by platformCrowdStrike: network-contain the host. SentinelOne: network quarantine (Disconnect from Network; confirm the label in your console version). Microsoft Defender: Isolate device (full network isolation). Keep the host powered on for memory capture on all of them.SOC / IRContainment record, aid, time
ScopeRun Q1 to Q11 environment-wide over 30 days; pull the user's browser history for the lure page; check RunMRUSOCQuery exports, RunMRU, proxy logs
EradicateRemove the loader, auto.exe, hmn_hook.dll and the VLCAssistant script; restore shortcuts from the .backup copies only after review; remove any run-key or task found; reimage if elevation or the DLL is confirmedIRFile list with hashes, shortcut before/after
CredentialsTreat the user as exposed: reset the password, revoke sessions and tokens, review MFA and mail rules. The loader can deliver additional payloads over Tox, so the scope of exposure is unknownIdentityReset and revoke log
RecoverReturn to service after a clean re-scan; keep enhanced logging 30 days; add confirmed hashes to the IOC listIR / ITSign-off
15

Detection Coverage Map

TechniqueBehaviorCQLIOACrowdStrike coverageGapSentinelOneDefender XDR
T1204.004ClickFix pasteQ3, Q5IOA 1PartialThe lure page and clipboard are outside endpoint telemetry; Q5 is genericGood, with assumptionsGood, with assumptions
T1105Quick Tunnel fetchQ3, Q4IOA 1GoodBrowser-originated lookups excluded; tunnel names rotateGood, with assumptionsGood, with assumptions
T1547.009Shortcut and launcher persistenceQ6, Q7IOA 2PartialShortcut file edits have no verified event here; use the native sweepGood, with assumptionsGood, with assumptions
T1548.002UACMe method 41Q2, Q8IOA 3, IOA 4PartialElevation success was not confirmed by Varonis; pattern is shared by other bypassesGood, with assumptionsPartial: Q2 approximate
T1014NtQuerySystemInformation hookQ1, Q2IOA 4GAPOnly the DLL file is visible; the in-memory hook is notGood, with assumptionsPartial: Q1 telemetry gap, Q2 approximate
T1071Tox P2P C2Q10, Q11noneGAPTox is encrypted and decentralised; no C2 address was published; Q10 and Q11 are weak, analyst-added heuristicsPartial: Q11 approximatePartial: Q11 approximate
T1036Numeric-named loaderQ1, Q9nonePartialRebuilt samples change hashes; names alone are noisyGood, with assumptionsPartial: Q1 telemetry gap

Honest limits: endpoint telemetry cannot see the lure page, the clipboard, Tox payloads or the in-memory hook. Network-indicator coverage is weak by design of the malware. Validation gates are in section 11; no query has been run against a live tenant.

16

Hunt Summary Ticket

TITLE: AvisLoader Windows loader (Tox P2P C2, ClickFix delivery)
SEVERITY: High (single-origin intelligence; capabilities not confirmed in victims)
DATE: 2026-10-15
VERSION: v0.1 Draft 2026-10-15
SCOPE: Windows workstations, especially users who handle document-signing links
HYPOTHESIS: A ClickFix paste fetches code from a Cloudflare Quick Tunnel, installs a Tox-based loader, and persists through shortcut and VBScript hijack.
QUERIES: Q1 hashes; Q2 filenames; Q3 tunnel in command line; Q4 tunnel DNS; Q5 paste shape; Q6 VLCAssistant; Q7 explorer-vbs; Q8 dllhost child; Q9 numeric exe; Q10 Tox port; Q11 P2P fan-out
DO FIRST: Run Q1, Q3, Q6 over 30 days; sweep desktop and taskbar shortcuts on suspect hosts.
FINDINGS: any published hash, VLCAssistant, a shell referencing trycloudflare.com, or a dllhost-spawned shell.
GAPS: the lure page, clipboard, Tox traffic and the in-memory API hook are outside endpoint telemetry.
ACTIONS: contain, run section 14, reset credentials, add shortcut auditing, pilot ASR and WSH hardening.
OWNER: SOC / Incident Response / Identity
FOLLOW-UP: Re-hunt after 7 and 30 days and on any new Varonis or vendor indicators.
17

Changelog

v0.12026-10-15Initial draft. 11 CQL queries, 3 hash indicators (detect), Windows hardening and playbooks. Sources: Varonis plus three republishing outlets; BleepingComputer was not readable. SentinelOne PowerQuery and Microsoft Defender KQL tabs added to Q1-Q11: SIEM Query Rosetta release 0.1.0 (public-beta; static-reviewed translations).
18

References

TierSourceUsed forAccess date
1Varonis Threat Labs: Meet AvisLoaderPrimary: behaviour, hashes, MITRE table2026-10-15
2HackreadCorroboration, user guidance2026-10-15
2Cyber Security NewsCorroboration, IOC table copy2026-10-15
2SOC PrimeCorroboration, generic detection ideas2026-10-15
refMicrosoft: attack surface reduction rules reference; MITRE ATT&CK mitigations; CIS Microsoft Windows benchmarksHardening authority2026-10-15

Generated 2026-10-15 by HuntPack. Defensive content only.