Back to Intelligence

Lua Loader Infostealer Campaign + GoSerpent APT Backdoor: OTX Pulse Analysis — Agent Tesla, XWorm & Southeast Asia Government Targeting Detection Pack

SA
Security Arsenal Team
August 15, 2026
11 min read

Two concurrent threat streams demand attention this week: a high-volume, low-detection phishing campaign abusing Lua and AutoIt loaders to deliver commodity infostealers and RATs at global scale, and a sustained APT operation by TetrisPhantom deploying the GoSerpent backdoor against Southeast Asian government and diplomatic entities. Both campaigns converge on the same objective — credential theft and long-term access — and both monetize or operationalize stolen identity material that inevitably surfaces in dark web marketplaces and initial-access broker channels.


Threat Summary

Pulse 1 — "The TTF Trap" documents a phishing wave active since late March 2026 that impersonates legitimate companies with business-cooperation lures. Malicious archives contain obfuscated JavaScript that chains into either AutoIt or LuaJIT-based loaders (often embedded in or masquerading as TTF font files), which then decrypt and inject Donut-generated shellcode entirely in memory. Final payloads are a multi-family rotation: Agent Tesla, Remcos RAT, XWorm, Best Private LOGGER, and Snake Keylogger. The use of Lua loaders and fileless injection keeps static detection rates near zero on many engines — a deliberate evasion investment. Infrastructure includes attacker-controlled mail exfiltration hosts (mail.taikei-rmc-co.biz, mail.allportcargoservice.com — classic Agent Tesla SMTP exfil) and dynamic DNS C2 (newremupdate.duckdns.org — typical Remcos/XWorm pattern).

Pulse 2 — GoSerpent tracks TetrisPhantom operations against government and diplomatic entities in Southeast Asia since late 2025. GoSerpent is a Go-based RAT with proxy/pivot capabilities, delivered with encrypted command-line arguments, and paired with a full post-exploitation toolkit: Mimikatz, QuarksDumpLocalHash (local SAM hash dumping), Stowaway (multi-level proxy tunneling), TmcLoader/TmcPayload, and ThumbcacheService for persistence. Newer variants encrypt C2 traffic with AES-CBC and ChaCha20. The credential-dumping toolchain confirms the objective: harvesting government credentials and maintaining covert proxied access — material of high value on dark web espionage-adjacent markets.

Collective read: Both campaigns industrialize credential theft — one via commodity scale, one via targeted APT tradecraft. SOC teams should treat any detection of either chain as a full identity-compromise event, not a malware containment event.


Threat Actor / Malware Profile

Lua/AutoIt Loader Chain (Agent Tesla / Remcos / XWorm / Snake Keylogger)

  • Distribution: Phishing emails with business-cooperation lures impersonating known companies; malicious archives (ZIP/RAR) containing obfuscated JavaScript.
  • Payload behavior: JS stager invokes AutoIt or LuaJIT interpreter; Lua loader (frequently packed inside a .ttf-named resource) decrypts Donut shellcode; shellcode performs in-memory injection of the final .NET RAT/keylogger — no final payload touches disk in cleartext.
  • C2 communication: Agent Tesla primarily exfiltrates via SMTP to attacker mail hosts; XWorm and Remcos use TCP C2, frequently behind dynamic DNS (DuckDNS). Credentials, keystrokes, screenshots, and browser stores are the exfil payload.
  • Persistence: Run-key registry entries and scheduled tasks under innocuous names; XWorm additionally installs via startup folder and can enable its own Windows Defender exclusions.
  • Anti-analysis: Multi-layer obfuscation (JS → AutoIt/Lua → shellcode → .NET), string encryption, sandbox checks, AMSI bypass via in-memory patching, low VT detection on the Lua loader stage.

GoSerpent (TetrisPhantom)

  • Distribution: Targeted delivery against government/diplomatic entities; loader receives encrypted arguments to decrypt and execute the embedded payload, frustrating static and sandbox analysis.
  • Payload behavior: Go-based RAT supporting command execution, file operations, data collection, and built-in proxy capability to pivot through compromised hosts.
  • C2 communication: Encrypted channels using AES-CBC (newer variants) and ChaCha20; tooling staged post-compromise includes Stowaway for multi-hop SOCKS proxying.
  • Persistence: Service-based persistence masquerading as legitimate components (ThumbcacheService) plus TmcLoader-staged payloads.
  • Credential theft: Deploys Mimikatz and QuarksDumpLocalHash to extract LSASS secrets and local SAM hashes — enabling lateral movement across government networks.

IOC Analysis

The indicators break into three operational classes:

  • Hostnames (SMTP exfil): mail.taikei-rmc-co.biz, mail.allportcargoservice.com — these are Agent Tesla credential-exfil endpoints. Block at the email gateway and DNS layer; any outbound SMTP (TCP 25/465/587) from endpoints to non-corporate mail servers is inherently suspicious and should be alerted regardless of IOC match.
  • Dynamic DNS C2: newremupdate.duckdns.org — Remcos/XWorm pattern. Block and retro-search DNS logs; note that DuckDNS domains rotate, so behavior-based detection (beacon interval, process lineage) matters more than the exact FQDN.
  • File hashes (MD5/SHA1/SHA256): 3 hashes from the Lua-loader campaign (archives, JS stagers, Lua/loader binaries) and 8 MD5s from GoSerpent tooling. MD5-heavy indicator sets indicate the GoSerpent pulse is tooling/sample-centric — push these into EDR blocklists and VTI/hash-reputation lookups, but prioritize behavioral detections since recompiles trivially invalidate hashes.

Operationalization: Ingest into your TIP with expiry dates; push hashes to EDR block policy; push domains to DNS sinkhole/proxy block; run retro-hunts across proxy, DNS, and SMTP logs for at least 90 days. Tools that decode the layers: CyberChef (XOR/AES chains), dnSpy/ILSpy (Agent Tesla/XWorm .NET configs), AutoIt decompilers (Exe2Aut), and sandbox detonation (ANY.RUN, Joe Sandbox) for the Lua stage.


Detection Engineering

YAML
---
title: Lua or AutoIt Loader Execution from Archive Phishing Stager
id: 7f3a1c2e-9b4d-4e1a-8c5f-20260815lualdr
status: experimental
description: Detects obfuscated JavaScript phishing stagers spawning AutoIt or LuaJIT interpreters, matching the TTF Trap campaign chain delivering Agent Tesla, Remcos, XWorm, and Snake Keylogger.
references:
    - https://www.fortinet.com/blog/threat-research/the-ttf-trap-a-global-campaign-of-a-low-detection-lua-loader
author: Security Arsenal Threat Intelligence
date: 2026/08/15
tags:
    - attack.execution
    - attack.t1059.007
    - attack.t1059.005
    - attack.defense_evasion
    - attack.t1027
logsource:
    category: process_creation
    product: windows
    definition: 'Requires Sysmon or equivalent command-line auditing'
detection:
    selection_parent:
        ParentImage|endswith:
            - '\wscript.exe'
            - '\cscript.exe'
            - '\mshta.exe'
    selection_child:
        Image|endswith:
            - '\autoit3.exe'
            - '\autoit3_x64.exe'
            - '\luajit.exe'
            - '\lua.exe'
            - '\lua51.exe'
    condition: selection_parent and selection_child
falsepositives:
    - Rare legitimate software deployment scripts using AutoIt launched by script hosts
level: high
---
title: Agent Tesla SMTP Credential Exfiltration to Suspicious Mail Host
id: 2b8d4f6a-1c7e-4a3b-9d2e-20260815smtpex
status: experimental
description: Detects outbound SMTP connections from non-mail-server processes, consistent with Agent Tesla / Snake Keylogger SMTP exfiltration to attacker-controlled mail hosts (e.g. mail.taikei-rmc-co.biz, mail.allportcargoservice.com).
references:
    - https://www.fortinet.com/blog/threat-research/the-ttf-trap-a-global-campaign-of-a-low-detection-lua-loader
author: Security Arsenal Threat Intelligence
date: 2026/08/15
tags:
    - attack.exfiltration
    - attack.t1048.003
    - attack.collection
    - attack.t1119
logsource:
    category: network_connection
    product: windows
    definition: 'Requires Sysmon Event ID 3 or equivalent network telemetry'
detection:
    selection_port:
        DestinationPort:
            - 25
            - 465
            - 587
    selection_image_exclude:
        Image|endswith:
            - '\outlook.exe'
            - '\thunderbird.exe'
            - '\msedge.exe'
            - '\chrome.exe'
            - '\firefox.exe'
            - '\svchost.exe'
    selection_host:
        DestinationHostname|contains:
            - 'taikei-rmc-co.biz'
            - 'allportcargoservice.com'
    condition: selection_port and not selection_image_exclude or selection_host
falsepositives:
    - Legacy line-of-business applications with hard-coded SMTP reporting
level: high
---
title: GoSerpent Post-Exploitation Credential Dumping Tool Execution
id: 5c1e9a3d-6f2b-4d8c-b7a1-20260815goserp
status: experimental
description: Detects execution of QuarksDumpLocalHash, Mimikatz variants, and Stowaway proxy tooling associated with TetrisPhantom GoSerpent intrusions, including renamed binary detection via command-line and hash indicators.
references:
    - https://securelist.com/goserpent-backdoor-in-southeast-asia/120687/
author: Security Arsenal Threat Intelligence
date: 2026/08/15
tags:
    - attack.credential_access
    - attack.t1003.001
    - attack.t1003.002
    - attack.command_and_control
    - attack.t1090
logsource:
    category: process_creation
    product: windows
    definition: 'Requires Sysmon or equivalent command-line auditing'
detection:
    selection_img:
        Image|contains:
            - '\QuarksPwDump'
            - '\mimikatz'
            - '\stowaway'
            - '\TmcLoader'
            - '\ThumbcacheService'
    selection_cli:
        CommandLine|contains:
            - 'sekurlsa::'
            - 'lsadump::'
            - 'QuarksDumpLocalHash'
    selection_hashes:
        Hashes|contains:
            - 'MD5=ebffd5a76aaa690bcdb922f82e0bacc5'
            - 'MD5=dc506ff7bb72735444fb3703a6bee6d8'
            - 'MD5=d6e86bf8a90e9b632add5fa495f97fbc'
            - 'MD5=cb6c4c70a3b171fa3404b8e1a3382116'
            - 'MD5=64e9d1950e42bc98486dfd9919463d1c'
            - 'MD5=cbbb6d483737ea3566726e51752dff40'
            - 'MD5=7f223ee0716ce2ad56f55d3744419449'
            - 'MD5=19f8befcb035f52bf70094e6b4f5779a'
    condition: 1 of selection_*
falsepositives:
    - Authorized red team operations; validate against approved testing windows
level: critical
KQL — Microsoft Sentinel / Defender
// OTX Hunt: Lua Loader Infostealer Chain + GoSerpent C2 — Sentinel
// Hunt window: 90 days recommended for retro-sweep
let ExfilHosts = dynamic(["mail.taikei-rmc-co.biz", "mail.allportcargoservice.com", "newremupdate.duckdns.org"]);
let LuaLoaderHashes = dynamic(["41ad1f28134f4b4a443b53af04aeb3fa57a2f72a3cc58a6466e84fc3225f38be",
    "2b1248d89fd9a7c716816f9688402942827fc1bfa89d5dccd741521725104279",
    "417fc4d6119dac40f276b563498a0ad3f9bf42262ec650a4463cbdbe78da388b"]);
let GoSerpentMD5 = dynamic(["ebffd5a76aaa690bcdb922f82e0bacc5","dc506ff7bb72735444fb3703a6bee6d8",
    "d6e86bf8a90e9b632add5fa495f97fbc","cb6c4c70a3b171fa3404b8e1a3382116",
    "64e9d1950e42bc98486dfd9919463d1c","cbbb6d483737ea3566726e51752dff40",
    "7f223ee0716ce2ad56f55d3744419449","19f8befcb035f52bf70094e6b4f5779a"]);
let NetworkHits = DeviceNetworkEvents
| where TimeGenerated > ago(90d)
| where RemoteUrl has_any (ExfilHosts)
   or (RemotePort in (25, 465, 587) and InitiatingProcessFileName !in~ ("outlook.exe","thunderbird.exe","svchost.exe","MsMpEng.exe"))
| project TimeGenerated, DeviceName, RemoteUrl, RemoteIP, RemotePort, InitiatingProcessFileName, InitiatingProcessCommandLine
| extend HitType = "Network";
let ProcessHits = DeviceProcessEvents
| where TimeGenerated > ago(90d)
| where (FileName in~ ("autoit3.exe","luajit.exe","lua.exe") and InitiatingProcessFileName in~ ("wscript.exe","cscript.exe","mshta.exe"))
   or ProcessCommandLine has_any ("sekurlsa::","lsadump::","QuarksDumpLocalHash","stowaway")
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, SHA256, MD5
| extend HitType = "Process";
let HashHits = DeviceProcessEvents
| where TimeGenerated > ago(90d)
| where SHA256 in~ (LuaLoaderHashes) or MD5 in~ (GoSerpentMD5)
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, SHA256, MD5
| extend HitType = "HashMatch";
union NetworkHits, ProcessHits, HashHits
| summarize FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), Hits=count() by DeviceName, HitType, FileName, RemoteUrl, SHA256
| order by LastSeen desc
PowerShell
# Security Arsenal - OTX IOC Hunt: Lua Loader Infostealer + GoSerpent
# Run elevated on suspect endpoints. Outputs to $env:TEMP\otx_hunt_results.txt

$out = "$env:TEMP\otx_hunt_results.txt"
"=== OTX HUNT - $(Get-Date) - $env:COMPUTERNAME ===" | Out-File $out

# 1. Lua/AutoIt loader artifacts - suspicious Run key persistence
"`n[1] Persistence - Run Keys (AutoIt/Lua/JS stagers):" | Out-File $out -Append
$runPaths = @('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
              'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
              'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce')
foreach ($p in $runPaths) {
    if (Test-Path $p) {
        Get-ItemProperty $p | Get-Member -MemberType NoteProperty | ForEach-Object {
            $val = (Get-ItemProperty $p).($_.Name)
            if ($val -match 'autoit|luajit|lua|wscript|cscript|\.ttf|appdata.*\.js') {
                "  [$p] $($_.Name) = $val" | Out-File $out -Append
            }
        }
    }
}

# 2. Scheduled tasks referencing script hosts or Lua/AutoIt
"`n[2] Scheduled Tasks referencing script hosts/loaders:" | Out-File $out -Append
Get-ScheduledTask | ForEach-Object {
    $actions = $_.Actions | Out-String
    if ($actions -match 'autoit|luajit|lua\.exe|wscript|cscript|mshta') {
        "  TASK: $($_.TaskName) | $($_.TaskPath) | $actions" | Out-File $out -Append
    }
}

# 3. GoSerpent artifacts - ThumbcacheService masquerade + suspicious services
"`n[3] Suspicious Services (ThumbcacheService / TmcLoader masquerade):" | Out-File $out -Append
Get-CimInstance Win32_Service | Where-Object {
    $_.PathName -match 'thumbcache|tmcloader|tmcpayload' -or
    ($_.Name -match 'thumbcache' -and $_.PathName -notmatch 'system32')
} | ForEach-Object { "  SVC: $($_.Name) | $($_.PathName) | $($_.State)" | Out-File $out -Append }

# 4. Known IOC hashes on disk (common staging paths)
"`n[4] File Hash Sweep (staging paths):" | Out-File $out -Append
$md5s = @('ebffd5a76aaa690bcdb922f82e0bacc5','dc506ff7bb72735444fb3703a6bee6d8',
          'd6e86bf8a90e9b632add5fa495f97fbc','cb6c4c70a3b171fa3404b8e1a3382116',
          '64e9d1950e42bc98486dfd9919463d1c','cbbb6d483737ea3566726e51752dff40',
          '7f223ee0716ce2ad56f55d3744419449','19f8befcb035f52bf70094e6b4f5779a')
$sha256s = @('41ad1f28134f4b4a443b53af04aeb3fa57a2f72a3cc58a6466e84fc3225f38be',
             '2b1248d89fd9a7c716816f9688402942827fc1bfa89d5dccd741521725104279',
             '417fc4d6119dac40f276b563498a0ad3f9bf42262ec650a4463cbdbe78da388b')
$paths = @("$env:TEMP", "$env:APPDATA", "$env:LOCALAPPDATA\Temp", "$env:ProgramData")
foreach ($dir in $paths) {
    Get-ChildItem $dir -Recurse -File -ErrorAction SilentlyContinue -Depth 2 | ForEach-Object {
        try {
            $m = (Get-FileHash $_.FullName -Algorithm MD5 -ErrorAction Stop).Hash.ToLower()
            $s = (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction Stop).Hash.ToLower()
            if ($md5s -contains $m -or $sha256s -contains $s) {
                "  *** HIT: $($_.FullName) | MD5=$m | SHA256=$s" | Out-File $out -Append
            }
        } catch {}
    }
}

# 5. Active/recent network connections to exfil + C2 infrastructure
"`n[5] Network Connections to IOC hosts:" | Out-File $out -Append
$iocs = @('taikei-rmc-co.biz','allportcargoservice.com','newremupdate.duckdns.org')
foreach ($ioc in $iocs) {
    $resolved = Resolve-DnsName $ioc -ErrorAction SilentlyContinue | Where-Object { $_.IPAddress }
    foreach ($r in $resolved) {
        $conn = Get-NetTCPConnection -ErrorAction SilentlyContinue | Where-Object { $_.RemoteAddress -eq $r.IPAddress }
        foreach ($c in $conn) {
            $proc = (Get-Process -Id $c.OwningProcess -ErrorAction SilentlyContinue).ProcessName
            "  *** CONN: $($c.LocalAddress):$($c.LocalPort) -> $($c.RemoteAddress):$($c.RemotePort) [$ioc] PID=$($c.OwningProcess) ($proc)" | Out-File $out -Append
        }
    }
}

# 6. Outbound SMTP from non-mail processes (Agent Tesla exfil pattern)
"`n[6] Outbound SMTP connections (ports 25/465/587):" | Out-File $out -Append
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
    Where-Object { $_.RemotePort -in 25,465,587 } | ForEach-Object {
        $proc = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue)
        if ($proc.ProcessName -notin @('OUTLOOK','thunderbird','svchost')) {
            "  *** SMTP: $($proc.ProcessName) (PID $($_.OwningProcess)) -> $($_.RemoteAddress):$($_.RemotePort)" | Out-File $out -Append
        }
    }

"`n=== HUNT COMPLETE ===" | Out-File $out -Append
Write-Host "Hunt complete. Results: $out" -ForegroundColor Cyan

Response Priorities

Immediate (0–4 hours)

  • Block mail.taikei-rmc-co.biz, mail.allportcargoservice.com, and newremupdate.duckdns.org at DNS, proxy, and email gateway layers; sinkhole where possible.
  • Push all file-hash IOCs into EDR block policy; validate the hash hits did not execute.
  • Hunt for wscript/cscript → autoit3/luajit process lineage and any outbound SMTP from endpoints using the KQL query above (90-day retro-sweep).
  • Quarantine any host with a confirmed loader-chain detection — treat as fully compromised, not "cleaned."

24 Hours (Identity Containment)

  • Any host that executed Agent Tesla, XWorm, Snake Keylogger, or Best Private LOGGER payloads: force password resets for every credential used on that machine, including browser-saved, VPN, and service accounts. Assume browser cookie/session theft — revoke active sessions and OAuth tokens.
  • For GoSerpent-relevant environments (government/diplomatic): audit LSASS access events, review new local/domain admin creation, and invalidate Kerberos tickets (double-reset krbtgt if dumping is confirmed).
  • Sweep identity providers for anomalous sign-ins from DuckDNS-adjacent infrastructure or unexpected geographies following any positive detection.

1 Week (Architecture Hardening)

  • Block or constrain script interpreters: disable WSH (wscript/cscript) for standard users; restrict AutoIt and Lua interpreters via AppLocker/WDAC — there is near-zero legitimate business need for luajit.exe on endpoints.
  • Enforce outbound SMTP restrictions: only approved mail servers may egress TCP 25/465/587 — this single control breaks Agent Tesla's primary exfil channel.
  • Deploy LSASS protection (Credential Guard, PPL) and restrict debug privileges to blunt Mimikatz/QuarksDumpLocalHash in APT scenarios.
  • Add detections for Go binaries spawned with encrypted argument blobs and for unexpected services registering outside System32 (ThumbcacheService masquerade).
  • Brief the SOC on DuckDNS-style dynamic DNS C2 patterns and establish alerting for non-browser processes resolving dynamic DNS providers.

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.