Back to Intelligence

VectraRAT MaaS Platform + APT36 Operation RapidRust: OTX Pulse Analysis — Infostealer & Espionage Detection Pack

SA
Security Arsenal Team
September 17, 2026
9 min read

Threat Summary

Two concurrent threat intelligence pulses published to AlienVault OTX on 2026-09-17 reveal a dual-front escalation in credential theft and espionage tradecraft.

Front one — criminal MaaS ecosystem. VectraRAT is a previously undocumented, full-stack Malware-as-a-Service platform built entirely from scratch: a Go-based control server (VectraHub) paired with a native C++ Windows implant, rented to affiliates from $250/month. The operator, active since August 2022 under the handle 'Vectra' (formerly 'Nyxel'), has operated for nearly four years without public documentation — an unusually long dwell time for a commercial offering. Affiliates are deploying VectraRAT alongside Amadey loader, Vidar infostealer, and NetSupport RAT, with ClickFix social-engineering lures and UAC bypass techniques as the initial-access vector. Finance and government organizations across the US, Germany, India, Switzerland, and Russia are in scope.

Front two — nation-state espionage. APT36 (Operation C-Major, Pakistan-nexus) launched Operation RapidRust in August 2026 against government and defense targets in India and Afghanistan. The campaign deploys four new custom tools: RUSTYSHADE (Rust backdoor using private GitHub repositories as C2 with AES-256-GCM encryption), RUSTYMOVE (USB-based lateral movement), PSNATCH (PowerShell credential stealer), and BASHNATCH (Linux/Unix credential harvester), plus GITSHELLPAD and GOSHELL auxiliary tooling.

Collectively, these pulses confirm two converging trends: (1) commodity credential theft is consolidating into professionalized, vertically integrated MaaS stacks, and (2) state actors are migrating to Rust-based implants and abusing legitimate developer infrastructure (GitHub) for C2, defeating legacy domain-reputation controls.

Threat Actor / Malware Profile

VectraRAT (Criminal MaaS — 'Vectra'/'Nyxel')

  • Distribution: ClickFix-style social engineering (fake CAPTCHA / 'fix this error' clipboard paste lures) delivering Amadey loader, which stages VectraRAT, Vidar, and NetSupport RAT payloads.
  • Payload behavior: Native C++ Windows implant providing hidden desktop control (HVNC-style), keylogging, clipboard hijacking (crypto-wallet substitution), and full remote administration. Vidar co-deployment indicates bulk credential, cookie, and crypto-wallet exfiltration.
  • C2 communication: Custom Go-based VectraHub panel; known C2 nodes include 91.92.242.236 and 178.16.54.148 (AS40999, dus.net gmbh, Germany).
  • Persistence: Registry Run keys and scheduled tasks typical of the Amadey/NetSupport delivery chain.
  • Anti-analysis: UAC bypass for elevated execution; native (non-.NET) implant evades common managed-code sandboxes; four-year operational silence suggests active OPSEC and panel access vetting.

APT36 — Operation RapidRust (Pakistan-nexus, Operation C-Major)

  • Distribution: Spearphishing against government/defense entities in India and Afghanistan; RUSTYMOVE enables USB-borne lateral movement across air-gapped or segmented networks.
  • Payload behavior: RUSTYSHADE Rust backdoor; PSNATCH PowerShell-based credential theft; BASHNATCH Bash-based credential theft for Linux estates; GITSHELLPAD/GOSHELL Go tooling for secondary access.
  • C2 communication: Private GitHub repositories abused as dead-drop C2 channels; tasking and exfiltration payloads encrypted with AES-256-GCM — blending into legitimate developer traffic.
  • Persistence: Platform-appropriate mechanisms (scheduled tasks/services on Windows, cron/systemd on Linux).
  • Anti-analysis: Rust compilation defeats signature-based AV and complicates reverse engineering; encryption-in-transit and legitimate-infrastructure C2 defeat network IOC matching.

IOC Analysis

The pulses contain 38 and 20 indicators respectively, dominated by:

  • IPv4 C2 addresses91.92.242.236 and 178.16.54.148 (the latter enriched with CC=DE, AS40999 dus.net gmbh). These are VectraHub/VectraRAT infrastructure. Enriched ASN/GeoIP metadata enables rapid pivot analysis: query your telemetry for any traffic to AS40999-hosted ranges, not just the two published IPs.
  • FileHash-MD5 / FileHash-SHA1 — implant and loader samples across both campaigns. Note the absence of SHA256 in the sample set; pull the full pulse from OTX to retrieve complete hash sets before building blocklists.

Operationalization guidance for SOC teams:

  1. Ingest both pulses into your TIP (OpenCTI, MISP, ThreatConnect) via the OTX DirectConnect API — indicators auto-expire poorly, so set a 90-day relevance window for IPs and permanent retention for hashes.
  2. Push IPv4 indicators to egress firewall/proxy blocklists AND retrospective DNS/proxy log hunts — blocking alone misses pre-publication compromise.
  3. Load MD5/SHA1 hashes into EDR reputation (Defender, CrowdStrike, SentinelOne custom IOC lists). Cross-reference hashes against VirusTotal to obtain SHA256 equivalents and parent/child relationships.
  4. For APT36's GitHub-based C2, IP/hash blocking is insufficient — deploy behavioral detections (below) and audit outbound HTTPS to github.com/api.github.com/raw.githubusercontent.com from non-developer endpoints and server workloads.

Detection Engineering

YAML
---
title: VectraRAT / Amadey ClickFix Execution Chain
description: Detects ClickFix-style social engineering leading to Amadey loader or VectraRAT execution — child processes spawned from mshta/rundll32/powershell following clipboard-paste lures
id: 9f3a2b71-vec4-4rat-a001-vectrahub001
status: experimental
author: Security Arsenal Threat Intel
logsource:
    category: process_creation
    product: windows
detection:
    selection_parent:
        ParentImage|endswith:
            - '\mshta.exe'
            - '\rundll32.exe'
            - '\powershell.exe'
            - '\pwsh.exe'
    selection_child:
        Image|endswith:
            - '\cmd.exe'
            - '\powershell.exe'
            - '\wscript.exe'
            - '\cscript.exe'
            - '\regsvr32.exe'
    selection_suspicious_cmd:
        CommandLine|contains:
            - 'curl'
            - 'Invoke-WebRequest'
            - 'iex'
            - 'DownloadString'
            - 'Start-BitsTransfer'
    condition: selection_parent and selection_child and selection_suspicious_cmd
falsepositives:
    - Enterprise software distribution scripts
level: high
tags:
    - attack.execution
    - attack.t1059
    - attack.t1204
    - malware.vectrarat
    - malware.amadey
date: 2026/09/17
---
title: APT36 RUSTYSHADE GitHub Repository C2 Communication
description: Detects non-browser, non-git process making HTTPS connections to GitHub API/raw endpoints — consistent with RUSTYSHADE dead-drop C2 over private repositories
id: 8e2b1c63-apt3-6rap-rust-rustyshade01
status: experimental
author: Security Arsenal Threat Intel
logsource:
    category: network_connection
    product: windows
detection:
    selection_domain:
        DestinationHostname|contains:
            - 'api.github.com'
            - 'raw.githubusercontent.com'
            - 'gist.githubusercontent.com'
    filter_legit:
        Image|endswith:
            - '\git.exe'
            - '\githubdesktop.exe'
            - '\code.exe'
            - '\chrome.exe'
            - '\msedge.exe'
            - '\firefox.exe'
            - '\devenv.exe'
    condition: selection_domain and not filter_legit
falsepositives:
    - Package managers (winget, npm, pip) and CI/CD agents
    - Developer tooling auto-updaters
level: high
tags:
    - attack.command_and_control
    - attack.t1102
    - attack.t1071.001
    - apt.apt36
    - malware.rustyshade
date: 2026/09/17
---
title: Credential Stealer Execution — PSNATCH / Vidar Artifact Access
description: Detects PowerShell or script processes accessing browser credential stores, LSASS memory, or crypto wallet paths — matching PSNATCH and Vidar infostealer collection behavior
id: 7d1a0b42-cred-4stl-psnt-vidar00001
status: experimental
author: Security Arsenal Threat Intel
logsource:
    category: process_creation
    product: windows
detection:
    selection_creds:
        CommandLine|contains:
            - 'Login Data'
            - 'Local State'
            - '\Web Data'
            - 'os_crypt'
            - 'DPAPI'
            - 'CryptUnprotectData'
            - 'wallet.dat'
            - 'Exodus'
            - 'Electrum'
            - 'lsass'
            - 'comsvcs.dll'
            - 'MiniDump'
    selection_script:
        Image|endswith:
            - '\powershell.exe'
            - '\pwsh.exe'
            - '\wscript.exe'
            - '\cscript.exe'
            - '\rundll32.exe'
            - '\cmd.exe'
    condition: selection_creds and selection_script
falsepositives:
    - Legitimate password vault migrations
    - Forensic/IR tooling (authorize by process lineage)
level: critical
tags:
    - attack.credential_access
    - attack.t1555.003
    - attack.t1003.001
    - malware.psnatch
    - malware.vidar
date: 2026/09/17
KQL — Microsoft Sentinel / Defender
// Sentinel hunt: VectraRAT C2 + APT36 GitHub-abuse C2 + stealer process lineage
let VectraC2 = dynamic(["91.92.242.236", "178.16.54.148"]);
let GitC2 = dynamic(["api.github.com", "raw.githubusercontent.com", "gist.githubusercontent.com"]);
union isfuzzy=true
    (DeviceNetworkEvents
    | where TimeGenerated > ago(7d)
    | where RemoteIP in (VectraC2)
    | project TimeGenerated, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName, InitiatingProcessCommandLine, IndicatorType="VectraRAT_C2_IP"),
    (DeviceNetworkEvents
    | where TimeGenerated > ago(7d)
    | where RemoteUrl has_any (GitC2)
    | where InitiatingProcessFileName !in~ ("git.exe","code.exe","chrome.exe","msedge.exe","firefox.exe","GitHubDesktop.exe","devenv.exe","node.exe")
    | project TimeGenerated, DeviceName, RemoteUrl, InitiatingProcessFileName, InitiatingProcessCommandLine, IndicatorType="APT36_GitHub_C2"),
    (DeviceProcessEvents
    | where TimeGenerated > ago(7d)
    | where ProcessCommandLine has_any ("Login Data","Local State","os_crypt","CryptUnprotectData","wallet.dat","MiniDump","comsvcs.dll")
    | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, AccountName, IndicatorType="Credential_Theft_Behavior")
| order by TimeGenerated desc
PowerShell
# VectraRAT / APT36 RapidRust — Host IOC Hunt Script
# Run elevated via your RMM/EDR across the fleet; export results centrally.

$report = @()

# 1. Network connections to VectraRAT C2 infrastructure
$c2 = @('91.92.242.236','178.16.54.148')
$conns = Get-NetTCPConnection -ErrorAction SilentlyContinue | Where-Object { $c2 -contains $_.RemoteAddress }
foreach ($c in $conns) { $report += [pscustomobject]@{Check='VectraRAT_C2_Connection'; Detail="$($c.LocalAddress):$($c.LocalPort) -> $($c.RemoteAddress):$($c.RemotePort) State=$($c.State) PID=$($c.OwningProcess)"} }

# 2. Persistence: suspicious Run keys (Amadey/VectraRAT commonly land here)
$runPaths = @('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run')
foreach ($p in $runPaths) {
    Get-ItemProperty -Path $p -ErrorAction SilentlyContinue | ForEach-Object {
        $_.PSObject.Properties | Where-Object { $_.Value -match 'AppData|Temp|ProgramData' -and $_.Value -match '&|powershell|mshta|rundll32|regsvr32' } |
            ForEach-Object { $report += [pscustomobject]@{Check='Suspicious_RunKey'; Detail="$p :: $($_.Name) = $($_.Value)"} }
    }
}

# 3. Persistence: recently created scheduled tasks launching from user-writable paths
Get-ScheduledTask -ErrorAction SilentlyContinue | ForEach-Object {
    $act = $_.Actions | Where-Object { $_.Execute -match 'AppData|Temp|ProgramData' }
    if ($act) { $report += [pscustomobject]@{Check='Suspicious_ScheduledTask'; Detail="$($_.TaskName) -> $($act.Execute) $($act.Arguments)"} }
}

# 4. Hash sweep: known VectraRAT / RapidRust sample hashes in common staging dirs
$badHashes = @('2ed675d3342f069b6ebb090ee8085f43','7899b3e9e899acc932c7839d37ef0c74','89706fa83374ddd3d52ac569d876ac6a','a3dc3ee464737dd74c20ec771deaac4d','a8619784bfe927e551e831d4adaf8ba5','40a75f87f1e52c33df9ca733aaf8ebbb','aade06ec611d69f1553035f22356ccf4','ae77f1834ccde53258bc27a779102af2','f16f507a8ed515663a4f07050cd97a74')
$scanDirs = @("$env:TEMP","$env:APPDATA","$env:LOCALAPPDATA","$env:ProgramData")
foreach ($dir in $scanDirs) {
    Get-ChildItem -Path $dir -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {
        $h = (Get-FileHash $_.FullName -Algorithm MD5 -ErrorAction SilentlyContinue).Hash
        if ($h -and ($badHashes -contains $h.ToLower())) { $report += [pscustomobject]@{Check='Malicious_FileHash'; Detail="$($_.FullName) MD5=$h"} }
    }
}

# 5. Non-git processes with recent GitHub API connections (RUSTYSHADE-style C2)
Get-NetTCPConnection -State Established -RemotePort 443 -ErrorAction SilentlyContinue | ForEach-Object {
    $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
    if ($proc -and $proc.Name -notmatch '^(git|chrome|msedge|firefox|Code|GitHubDesktop|node|devenv)$') {
        try { $dns = (Resolve-DnsName $_.RemoteAddress -ErrorAction Stop).NameHost } catch { $dns = '' }
        if ($dns -match 'github') { $report += [pscustomobject]@{Check='Possible_GitHub_C2'; Detail="$($proc.Name) (PID $($proc.Id)) -> $($_.RemoteAddress) [$dns]"} }
    }
}

$report | Format-Table -AutoSize
if ($report.Count -gt 0) { $report | Export-Csv -Path "C:\IR\ioc_hunt_$env:COMPUTERNAME.csv" -NoTypeInformation }

Response Priorities

Immediate (0–4 hours)

  • Block 91.92.242.236 and 178.16.54.148 at egress firewalls, proxies, and DNS layers; add both pulses' full hash sets to EDR blocklists.
  • Run the KQL hunt and PowerShell sweep across all endpoints; prioritize finance, government, and defense-adjacent business units.
  • Alert on any established GitHub API connections from non-developer processes — treat as suspected RUSTYSHADE beaconing pending triage.

24 Hours

  • Credential exposure response is mandatory. Both campaigns deliver credential-stealing payloads (Vidar, PSNATCH, BASHNATCH). For any host with confirmed execution artifacts: force password resets for all users of that host, revoke active sessions and refresh tokens, and rotate any credentials stored in local browsers.
  • Audit privileged-account sign-in logs for anomalies originating from affected endpoints; verify MFA enforcement — session-token theft bypasses MFA at the cookie level, so revoke tokens rather than relying on re-prompts.
  • For defense/government constituencies: check for USB device insertion events correlating with RUSTYMOVE lateral movement windows.

1 Week

  • Harden the ClickFix attack surface: deploy browser-isolation policies and user awareness for clipboard-paste lures; restrict mshta/rundll32/regsvr32 child-process spawning via WDAC or AppLocker rules.
  • Segment developer traffic: route legitimate GitHub access through an authenticated proxy with allowlisting, so raw endpoint-to-GitHub API flows become high-fidelity alerts.
  • Disable or constrain PowerShell for standard users (Constrained Language Mode), enable Script Block Logging and AMSI integration to catch PSNATCH-class theft.
  • For Linux estates in scope of APT36: audit cron/systemd persistence and deploy BASHNATCH-targeted EDR coverage — Windows-only visibility is a gap this actor explicitly exploits.

Related Resources

Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.