Back to Intelligence

AgentTesla FTP Exfiltration + Storm-2561 Fake WatchGuard VPN Credential Phishing: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
October 14, 2026
9 min read

Two concurrent OTX pulses published on 2026-10-14 reveal a common operational objective across unrelated threat actors: bulk harvesting of enterprise credentials, using two distinctly different delivery models.

The first campaign distributes AgentTesla, a long-standing .NET infostealer sold as malware-as-a-service, through phishing emails masquerading as business proposal requests. Victims are socially engineered into opening a ZIP attachment that purports to contain a product list but instead delivers an executable disguised as a Chinese-language café management application. A multi-stage obfuscated loader then deploys the AgentTesla payload, which exfiltrates stolen data over FTP to attacker infrastructure at anmarinee.it.com — an increasingly rare but still effective exfiltration channel that bypasses organizations focused exclusively on HTTP/S inspection.

The second campaign, attributed to Storm-2561, targets WatchGuard Mobile VPN users via a fake download portal (watchguard-vpn.net) promoted through SEO poisoning. The operation uses a distinctive deception technique: after harvesting victim credentials twice through browser pop-ups (likely to validate accuracy against typos), the site downloads the genuine, validly signed WatchGuard installer directly from WatchGuard's own servers. The victim walks away with working VPN software and no indication their credentials were stolen — while the attacker holds valid VPN credentials that provide direct initial access to the corporate network perimeter.

Collectively, these pulses underscore a shift toward identity-centric intrusion: rather than deploying noisy ransomware or commodity RATs immediately, adversaries are investing in credential acquisition as the primary payload, knowing that valid accounts neutralize most perimeter controls.

Threat Actor / Malware Profile

AgentTesla Infostealer

  • Classification: .NET-based infostealer/RAT, sold as malware-as-a-service since 2014. Continuously updated and widely used by low-to-mid sophistication actors targeting SMBs and enterprises alike.
  • Distribution: Phishing emails themed as business proposals, quotations, or purchase orders. This wave uses a ZIP archive containing a malicious EXE disguised with Chinese-language descriptions and UI elements mimicking a café management program — a social engineering tactic designed to make the executable appear benign and business-relevant.
  • Loader Behavior: Multi-stage loading chain with heavy obfuscation to defeat static analysis and sandbox detonation. The loader unpacks and injects the final payload in memory.
  • Payload Capabilities: Keylogging, credential extraction from browsers (Chrome, Edge, Firefox), email clients (Outlook, Thunderbird), FTP clients (FileZilla), and VPN clients; clipboard capture; periodic screenshots.
  • C2 / Exfiltration: This campaign uses FTP exfiltration to anmarinee.it.com. AgentTesla variants also support SMTP, HTTP, and Telegram API exfiltration — defenders must not assume HTTP-only channels.
  • Persistence: Commonly establishes persistence via HKCU\Software\Microsoft\Windows\CurrentVersion\Run registry keys or scheduled tasks.
  • Anti-Analysis: Obfuscated .NET assemblies, string encryption, packing, and sandbox-evasion checks.

Storm-2561 — Fake WatchGuard VPN Campaign

  • Attribution: Tracked as Storm-2561; documented by Huntress in early October.
  • Delivery Vector: SEO poisoning to surface watchguard-vpn[.]net in search results for WatchGuard Mobile VPN downloads, exploiting user trust in organic search rankings.
  • Credential Capture: Browser pop-up dialogs prompt victims for credentials twice — a validation technique to ensure captured credentials are functional before the victim exits the flow.
  • Evasion Hallmark: After credential capture, the site delivers the authentic, validly signed WatchGuard installer fetched directly from WatchGuard infrastructure. Because no malware touches disk, signature-based endpoint tools see nothing malicious. The only malicious artifact is the credential theft itself.
  • Strategic Impact: Compromised VPN credentials enable direct authenticated access past the firewall — bypassing MFA-less VPN configurations entirely. This is an initial-access play with high conversion potential into ransomware or espionage operations.

IOC Analysis

The pulses contain four indicator classes, each requiring different operationalization:

  • Hostnames/Domains (anmarinee.it.com, watchguard-vpn.net, watchguard-vpn.com, watchguard-ssl.online, www.watchguard-vpn.net): Block at DNS (RPZ), secure web gateway, and firewall egress. The WatchGuard-lookalike domains should also be submitted for registrar takedown and added to brand-monitoring watchlists — Storm-2561-style campaigns rotate lookalike domains rapidly.
  • URLs (http://watchguard-vpn.net/index.php, https://www.watchguard-vpn.net/): Feed into proxy/URL filtering and retro-hunt web logs for prior visits. Any user who visited these pages must be treated as credential-compromised, regardless of whether malware was detected on their endpoint — the payload in this campaign is the stolen password, not a binary.
  • File Hashes (MD5/SHA1/SHA256): The AgentTesla loader and payload hashes should be imported into EDR blocklists and retro-hunted across email gateway and file-creation telemetry. MD5s (8777a9b0533660fddc2a73b819638c18, cbcc4ba1a1485cb01a4b65fc7915e629) are useful for legacy tooling, but SHA256 values (6e89b13f..., 9d5ca4e4...) are the authoritative match keys.

Tooling: enrich indicators via AlienVault OTX lookup and VirusTotal for hash reputation; use urlscan.io and WHOIS history for infrastructure pivoting on the impersonation domains; decode obfuscated AgentTesla configs with .NET decompilers (dnSpy) and extract FTP credentials from memory dumps for infrastructure attribution.

Detection Engineering

YAML
---
title: AgentTesla FTP Exfiltration from Suspicious Process Path
id: 7a3f1c2e-9b4d-4e1a-8c5f-2d6e9a1b3f47
status: experimental
description: Detects outbound FTP (port 21) connections from processes executing in user-writable directories, consistent with AgentTesla infostealer FTP exfiltration observed in OTX pulse (anmarinee.it.com).
author: Security Arsenal
date: 2026/10/14
references:
    - https://asec.ahnlab.com/en/95840/
logsource:
    category: network_connection
    product: windows
detection:
    selection_port:
        DestinationPort: 21
    selection_path:
        Image|contains:
            - '\AppData\'
            - '\Temp\'
            - '\Downloads\'
            - '\Users\Public\'
    filter_legit:
        Image|endswith:
            - '\ftp.exe'
            - '\FileZilla.exe'
            - '\WinSCP.exe'
    condition: selection_port and selection_path and not filter_legit
falsepositives:
    - Legitimate portable FTP clients run from user directories
level: high
tags:
    - attack.exfiltration
    - attack.t1048.003
    - attack.t1567
---
title: Executable Launched from Email Client or Archive Utility (Phishing Dropper)
id: 2b8e4d1f-6c3a-4f2b-9d7e-5a1c8e3b6d29
status: experimental
description: Detects executables spawned by email clients or archive utilities from temp/download locations, matching the AgentTesla business-proposal phishing delivery chain (ZIP attachment containing disguised EXE).
author: Security Arsenal
date: 2026/10/14
references:
    - https://asec.ahnlab.com/en/95840/
logsource:
    category: process_creation
    product: windows
detection:
    selection_parent:
        ParentImage|endswith:
            - '\outlook.exe'
            - '\thunderbird.exe'
            - '\winrar.exe'
            - '\7zFM.exe'
            - '\explorer.exe'
    selection_child:
        Image|contains:
            - '\Temp\'
            - '\Downloads\'
            - '\AppData\Local\'
        Image|endswith: '.exe'
    filter_known:
        Image|contains:
            - '\AppData\Local\Microsoft\'
            - '\AppData\Local\Google\'
            - '\AppData\Local\Mozilla\'
    condition: selection_parent and selection_child and not filter_known
falsepositives:
    - Software updaters launched from user directories
    - Legitimate installer execution from Downloads
level: medium
tags:
    - attack.initial_access
    - attack.t1566.001
    - attack.execution
    - attack.t1204.002
---
title: DNS Query to WatchGuard Impersonation or AgentTesla C2 Infrastructure
id: 4c9d2e6a-1f7b-4a3c-8e2d-7b5f9c1a4e38
status: experimental
description: Detects DNS resolution of known fake WatchGuard VPN phishing domains (Storm-2561) and the AgentTesla FTP exfiltration hostname from OTX pulses dated 2026-10-14.
author: Security Arsenal
date: 2026/10/14
references:
    - https://www.huntress.com/blog/fake-watchguard-vpn-credential-phishing
logsource:
    category: dns
    product: windows
detection:
    selection:
        query|contains:
            - 'watchguard-vpn.net'
            - 'watchguard-vpn.com'
            - 'watchguard-ssl.online'
            - 'anmarinee.it.com'
    condition: selection
falsepositives:
    - None expected; these are confirmed malicious impersonation/C2 domains
level: critical
tags:
    - attack.command_and_control
    - attack.t1071
    - attack.credential_access
    - attack.t1656
KQL — Microsoft Sentinel / Defender
let MaliciousDomains = dynamic(["watchguard-vpn.net", "watchguard-vpn.com", "watchguard-ssl.online", "anmarinee.it.com"]);
let AgentTeslaHashes = dynamic(["6e89b13fea49ba2b98eb22fe59e16904e3225304c0a56546bb0c08b6959a8790", "9d5ca4e40dedfcdc58612e741433e571e82151ae9cade617250727b5ad3f7a49"]);
let NetworkHits =
    DeviceNetworkEvents
    | where TimeGenerated > ago(14d)
    | where RemoteUrl has_any (MaliciousDomains)
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteUrl, RemoteIP, RemotePort, ActionType;
let DnsHits =
    DeviceEvents
    | where TimeGenerated > ago(14d)
    | where ActionType == "DnsQueryResponse"
    | extend AdditionalFields = parse_json(AdditionalFields)
    | where tostring(AdditionalFields.DnsQueryString) has_any (MaliciousDomains)
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, DnsQuery = tostring(AdditionalFields.DnsQueryString);
let HashHits =
    DeviceProcessEvents
    | where TimeGenerated > ago(14d)
    | where SHA256 has_any (AgentTeslaHashes) or InitiatingProcessSHA256 has_any (AgentTeslaHashes)
    | project TimeGenerated, DeviceName, FileName, FolderPath, SHA256, ProcessCommandLine, AccountName;
union NetworkHits, DnsHits, HashHits
| sort by TimeGenerated desc
PowerShell
# Security Arsenal - IOC Hunt: AgentTesla + Storm-2561 Fake WatchGuard Campaign
# Run elevated on endpoints or via remote execution (WinRM/Intune)

$MaliciousHosts = @("watchguard-vpn.net","watchguard-vpn.com","watchguard-ssl.online","anmarinee.it.com")
$MaliciousHashes = @("6e89b13fea49ba2b98eb22fe59e16904e3225304c0a56546bb0c08b6959a8790","9d5ca4e40dedfcdc58612e741433e571e82151ae9cade617250727b5ad3f7a49")

Write-Host "[1] Checking DNS client cache for malicious domains..." -ForegroundColor Cyan
Get-DnsClientCache | Where-Object { $n = $_.Name; $MaliciousHosts | Where-Object { $n -like "*$_*" } } | Format-Table Name, Entry, Data -AutoSize

Write-Host "[2] Checking active TCP/UDP connections (incl. FTP port 21 from user paths)..." -ForegroundColor Cyan
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue | Where-Object { $_.RemotePort -eq 21 } | ForEach-Object {
    $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
    [PSCustomObject]@{ RemoteIP = $_.RemoteAddress; Port = $_.RemotePort; Process = $proc.ProcessName; Path = $proc.Path }
} | Format-Table -AutoSize

Write-Host "[3] Hunting AgentTesla payload hashes in user-writable paths..." -ForegroundColor Cyan
$SearchPaths = @("$env:USERPROFILE\Downloads","$env:TEMP","$env:PUBLIC","$env:APPDATA")
foreach ($path in $SearchPaths) {
    Get-ChildItem -Path $path -Recurse -Include *.exe -ErrorAction SilentlyContinue | ForEach-Object {
        $hash = (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
        if ($MaliciousHashes -contains $hash.ToLower()) {
            Write-Host "  [!] MALICIOUS FILE FOUND: $($_.FullName) - $hash" -ForegroundColor Red
        }
    }
}

Write-Host "[4] Checking persistence locations (Run keys / suspicious scheduled tasks)..." -ForegroundColor Cyan
$RunKeys = @("HKCU:\Software\Microsoft\Windows\CurrentVersion\Run","HKLM:\Software\Microsoft\Windows\CurrentVersion\Run")
foreach ($key in $RunKeys) {
    Get-ItemProperty -Path $key -ErrorAction SilentlyContinue | Get-Member -MemberType NoteProperty | ForEach-Object {
        $val = (Get-ItemProperty -Path $key -Name $_.Name -ErrorAction SilentlyContinue).($_.Name)
        if ($val -match "Temp|AppData|Public") { Write-Host "  [?] Suspicious Run key: $($_.Name) = $val" -ForegroundColor Yellow }
    }
}
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match "Temp|AppData|Public" } | Select-Object TaskName, TaskPath | Format-Table -AutoSize

Write-Host "[5] Checking for WatchGuard installs from untrusted sources (Storm-2561 lure)..." -ForegroundColor Cyan
Get-ChildItem "$env:USERPROFILE\Downloads" -Filter "*watchguard*" -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
    $sig = Get-AuthenticodeSignature $_.FullName
    [PSCustomObject]@{ File = $_.FullName; Signed = $sig.Status; Signer = $sig.SignerCertificate.Subject }
} | Format-Table -AutoSize

Write-Host "[6] Reviewing recent outbound connections to impersonation IPs via DNS resolution..." -ForegroundColor Cyan
foreach ($h in $MaliciousHosts) {
    try { $ips = (Resolve-DnsName $h -ErrorAction Stop).IPAddress; Write-Host "  [RESOLVED] $h -> $($ips -join ', ')  (ACTIVE INFRASTRUCTURE - alert!)" -ForegroundColor Red } catch {}
}
Write-Host "Hunt complete. Escalate any DNS cache hits, port-21 connections from user paths, or hash matches to IR immediately." -ForegroundColor Green

Response Priorities

Immediate (0-4 hours)

  • Block all listed domains/hostnames at DNS, proxy, and egress firewall: watchguard-vpn.net, watchguard-vpn.com, watchguard-ssl.online, anmarinee.it.com.
  • Import AgentTesla SHA256 hashes into EDR blocklists; retro-hunt email gateway logs for ZIP attachments matching the business-proposal lure.
  • Block outbound FTP (TCP 21) from non-server segments — there is rarely a legitimate business need for endpoint FTP egress.

24 Hours

  • Treat any user with telemetry hits to the WatchGuard impersonation domains as credential-compromised, even with zero malware detections — the theft occurred in the browser. Force immediate password resets and MFA re-enrollment for WatchGuard VPN accounts.
  • Audit VPN authentication logs for anomalous logins (impossible travel, off-hours, new ASN sources) using credentials that may have been harvested in early October.
  • Verify MFA enforcement on all VPN concentrators; credentials alone must not grant access.

1 Week

  • Restrict executable launches from ZIP attachments and user-writable directories via application control (WDAC/AppLocker), targeting the phishing-dropper execution chain.
  • Deploy DNS-layer protection with newly-registered-domain (NRD) blocking to blunt SEO-poisoning campaigns.
  • Conduct targeted user awareness on software download hygiene: obtain VPN clients only from vendor-verified portals, and treat search-ad/search-result download links as untrusted by default.

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.