Back to Intelligence

pepesoft.exe Infostealer + ZBT Firmware Implants + XenoRAT Spear-Phishing: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
August 28, 2026
12 min read

Classification: TLP:WHITE | Priority: HIGH | Pulse Count: 5 | Analyst: Security Arsenal Threat Intelligence


Threat Summary

Five concurrent OTX pulses paint a picture of a threat landscape dominated by credential theft and surveillance infrastructure delivered through trusted supply chains. The common thread across all five pulses is abuse of implicit trust — package registries, browser extension stores, router firmware, and legitimate cloud services — to deliver infostealers, implants, and RATs at scale.

Three distinct but converging threat clusters emerge:

  1. Software supply-chain infostealers — 11 malicious NuGet packages posing as game cheats (Albion Online, GTA5RP, GrandRP, Throne and Liberty) act as first-stage downloaders for pepesoft.exe, a PyInstaller-packaged Windows host-surveillance payload with screenshot exfiltration, hardware fingerprinting, Telegram bot control, and Google Sheets telemetry. In parallel, 19 Chrome/Edge extensions deliver a wallet-drainer framework with WebSocket C2, CSP stripping, and XSS injection targeting cryptocurrency secrets and browser credentials.

  2. State-aligned intrusion activity — Kimsuky's July 2026 campaigns against South Korean entities used seven distinct attack types (A–G) built on LNK-lure spear phishing, PowerShell, AutoIt, curl.exe staging, and DLL side-loading to deploy XenoRAT keylogging and infostealer capability, staged through GitHub, Google Drive, and Dropbox.

  3. Infrastructure-level compromise — Three firmware implants (SPEAKINGSTONE, DARKLANTERN, ENDLESSDOORS) embedded in ZBT router firmware create persistent, internet-facing root backdoors across 11 countries, while the Dysphoria botnet (200,000+ hosts) exploits legacy IoT CVEs and converts victims into relay/proxy nodes with blockchain-based (ENS/SNS) C2.

Collective objective: bulk credential harvesting, cryptocurrency theft, and long-term surveillance persistence — with compromised credentials and session data almost certainly feeding dark web credential marketplaces and initial-access broker ecosystems.


Threat Actor / Malware Profile

pepesoft.exe (NuGet Supply-Chain Infostealer)

  • Distribution: Malicious .NET CLI tools on NuGet masquerading as game cheats/utilities.
  • Payload behavior: First-stage downloader fetches a PyInstaller second stage (pepesoft.exe). Performs hardware fingerprinting, screenshot capture, and host surveillance.
  • C2: Telegram bot API for tasking; Google Sheets as a telemetry/dead-drop channel; DNS-over-HTTPS (DoH) for resolution to bypass local DNS controls.
  • Evasion: DoH evasion, requests UAC elevation to resync system time (timestamp manipulation defeats TLS/cert validation checks and log correlation), PyInstaller packing.
  • Persistence: UAC-elevated execution enables run keys / scheduled tasks (hunt accordingly).

XenoRAT (Kimsuky — DPRK-attributed APT)

  • Distribution: Spear-phishing with malicious LNK files; seven attack variants (A–G).
  • Payload behavior: Keylogging, infostealer modules, RAT functionality.
  • Delivery chain: LNK → PowerShell / AutoIt → curl.exe download from GitHub, Google Drive, Dropbox → DLL side-loading for execution.
  • Evasion: Living-off-the-land binaries (curl, PowerShell), legitimate cloud hosting for staging, side-loading into signed processes.

SPEAKINGSTONE / DARKLANTERN / ENDLESSDOORS (ZBT Firmware Implants)

  • Distribution: Embedded in router firmware at the supply-chain level; devices shipped globally (US, CA, AU, PH, DE, RU, and others).
  • Payload behavior: DARKLANTERN is an unauthenticated UDP backdoor on port 9992 providing root shell from the internet, with trivial MAC-address bypass. SPEAKINGSTONE is a phone-home implant; ENDLESSDOORS provides additional covert access.
  • C2: Hardcoded infrastructure including 47.107.224.89, 45.156.37.159, www.ac-link.com.
  • Persistence: Firmware-resident — survives reboots, factory resets, and most endpoint controls.

Dysphoria Botnet (jackskid / fbot variants)

  • Propagation: IoT exploitation — CVE-2017-17215, CVE-2018-14558, CVE-2017-5259, CVE-2020-8515, CVE-2013-3307, CVE-2016-20016, CVE-2022-35733, CVE-2020-25499.
  • C2: Blockchain-based resolution via ENS and SNS domains, making takedown-resistant infrastructure.
  • Architecture: Victims converted to relay/proxy nodes — likely monetized as proxyware and used to anonymize credential-stuffing and dark web traffic.

Chrome/Edge Wallet-Drainer Extensions

  • Distribution: 19 extensions (18 Chrome, 1 Edge) published over six months on official stores.
  • Payload behavior: Extendable framework that strips Content-Security-Policy headers, uses XSS injection to execute payloads, steals wallet secrets and browser credentials.
  • C2: WebSocket channels to domains such as cookie-whitelist.com, whale-alert.life, api.extensionanalyticspro.top, ggle-analytics.com (typosquat).

IOC Analysis

The indicator set spans five types, each requiring different operationalization:

TypeCount (pulses)ExamplesSOC Action
SHA256/SHA1/MD5 hashes49+d5385526f2f3e52c... (pepesoft), 7e2e036fec2fe7ab... (implants)Load into EDR blocklists; sweep with YARA/hash matching; note MD5s are for Kimsuky LNK/stagers
IPv4247.107.224.89, 45.156.37.159Block at egress firewall; retro-hunt NetFlow/proxy logs for router implant phone-home
Domains/hostnames8+cookie-whitelist.com, ggle-analytics.com, www.ac-link.comDNS sinkhole; alert on DoH queries bypassing internal resolvers
URLs2+http://api.active-enable-right-click.top/?uuid=Proxy block; hunt for UUID-patterned query strings in web logs
CVEs8CVE-2020-25499, CVE-2017-17215Attack-surface scan of IoT/network devices; patch or isolate vulnerable firmware

Tooling guidance: Hash IOCs decode directly into EDR/AV custom indicators (Defender, CrowdStrike, SentinelOne all accept CSV/STIX ingestion). Domain IOCs should be fed to DNS security (e.g., Cisco Umbrella, Infoblox) and DoH-aware controls — note pepesoft uses DoH specifically to blind passive DNS. The blockchain C2 (ENS/SNS) requires monitoring for outbound traffic to known ENS/SNS resolver endpoints rather than domain blocklists. For firmware implants, network-layer detection (unexpected UDP/9992 listeners, outbound beacons to the listed IPs) is the only reliable control — endpoint agents cannot see router firmware.


Detection Engineering

Sigma Rules

YAML
---
title: Malicious NuGet Tool Execution - pepesoft Infostealer Downloader
id: 7a3f1c2e-9b4d-4e5a-8c1f-2d6e7f8a9b0c
status: experimental
description: Detects execution of dotnet CLI tools or pepesoft.exe payload associated with malicious NuGet game-cheat packages delivering a PyInstaller surveillance infostealer
author: Security Arsenal Threat Intelligence
date: 2026/08/28
references:
    - https://socket.dev/blog/11-malicious-nuget-tools-pose-as-game-cheats
logsource:
    category: process_creation
    product: windows
level: high
tags:
    - attack.initial_access
    - attack.t1195_002
    - attack.execution
detection:
    selection_img:
        Image|endswith: 'pepesoft.exe'
    selection_dotnet:
        Image|endswith: 'dotnet.exe'
        CommandLine|contains:
            - 'tool install'
            - 'tool run'
    selection_cheat_lure:
        CommandLine|contains:
            - 'albion'
            - 'gta5rp'
            - 'grandrp'
            - 'throne and liberty'
            - 'cheat'
    condition: selection_img or (selection_dotnet and selection_cheat_lure)
falsepositives:
    - Legitimate game modding tools (rare in enterprise environments)
fields:
    - Image
    - CommandLine
    - ParentImage
    - User

---
title: DNS-over-HTTPS to Public Resolvers from Non-Browser Process
id: 8b4e2d3f-0c5e-5f6b-9d2e-3e7f8a9b0c1d
status: experimental
description: Detects non-browser processes making HTTPS connections to public DoH resolvers, a technique used by the pepesoft infostealer to bypass local DNS controls
author: Security Arsenal Threat Intelligence
date: 2026/08/28
references:
    - https://socket.dev/blog/11-malicious-nuget-tools-pose-as-game-cheats
logsource:
    category: network_connection
    product: windows
level: medium
tags:
    - attack.command_and_control
    - attack.t1071_001
    - attack.defense_evasion
detection:
    selection_dest:
        DestinationIp:
            - '1.1.1.1'
            - '1.0.0.1'
            - '8.8.8.8'
            - '8.8.4.4'
            - '9.9.9.9'
            - '94.140.14.14'
            - '94.140.15.15'
        DestinationPort: 443
    filter_browsers:
        Image|endswith:
            - 'chrome.exe'
            - 'msedge.exe'
            - 'firefox.exe'
            - 'brave.exe'
    condition: selection_dest and not filter_browsers
falsepositives:
    - VPN clients, some antivirus updaters using DoH
fields:
    - Image
    - DestinationIp
    - DestinationHostname
    - User

---
title: Kimsuky XenoRAT Delivery - LNK Spawning PowerShell or Curl Staging
id: 9c5f3e4a-1d6f-6a7c-0e3f-4f8a9b0c1d2e
status: experimental
description: Detects LNK-file execution chains spawning PowerShell, AutoIt, or curl.exe consistent with Kimsuky July 2026 spear-phishing campaigns delivering XenoRAT via cloud staging and DLL side-loading
author: Security Arsenal Threat Intelligence
date: 2026/08/28
references:
    - https://asec.ahnlab.com/en/95171
logsource:
    category: process_creation
    product: windows
level: high
tags:
    - attack.initial_access
    - attack.t1566_001
    - attack.t1204_002
    - attack.t1574_002
detection:
    selection_parent:
        ParentCommandLine|contains: '.lnk'
    selection_child:
        Image|endswith:
            - 'powershell.exe'
            - 'pwsh.exe'
            - 'curl.exe'
            - 'autoit3.exe'
            - 'rundll32.exe'
    selection_cloud:
        CommandLine|contains:
            - 'github.com'
            - 'raw.githubusercontent.com'
            - 'drive.google.com'
            - 'dropbox.com'
    condition: selection_parent and selection_child and selection_cloud
falsepositives:
    - IT admin shortcuts deploying scripts from repositories (rare)
fields:
    - Image
    - ParentCommandLine
    - CommandLine
    - User

KQL (Microsoft Sentinel)

KQL — Microsoft Sentinel / Defender
// Hunt: pepesoft infostealer, wallet-drainer C2, ZBT implant beacons, and Kimsuky staging
// Covers: network IOCs, DoH evasion, LNK->LOLBins chains, WebSocket C2 domains
let MaliciousDomains = dynamic(["cookie-whitelist.com", "cookie-whitelist.top", "whale-alert.life",
    "api.extensionanalyticspro.top", "api.active-enable-right-click.top", "ggle-analytics.com",
    "blockfolioaddressmonitor.pro", "cryptopricebadgequickglance.pro", "www.ac-link.com"]);
let MaliciousIPs = dynamic(["47.107.224.89", "45.156.37.159"]);
let DoHResolvers = dynamic(["1.1.1.1", "1.0.0.1", "8.8.8.8", "8.8.4.4", "9.9.9.9"]);
let Browsers = dynamic(["chrome.exe", "msedge.exe", "firefox.exe", "brave.exe"]);
let NetworkHits =
    DeviceNetworkEvents
    | where TimeGenerated > ago(7d)
    | where RemoteUrl has_any (MaliciousDomains)
       or RemoteIP in (MaliciousIPs)
       or (RemoteIP in (DoHResolvers) and not(InitiatingProcessFileName has_any (Browsers)))
    | extend DetectionType = case(
        RemoteIP in (MaliciousIPs), "ZBT Implant Beacon",
        RemoteUrl has_any (MaliciousDomains), "Wallet-Drainer/Implant C2",
        "DoH Evasion (pepesoft TTP)")
    | project DetectionType, TimeGenerated, DeviceName, InitiatingProcessFileName,
              InitiatingProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, AccountName;
let ProcessHits =
    DeviceProcessEvents
    | where TimeGenerated > ago(7d)
    | where FileName =~ "pepesoft.exe"
       or (ProcessCommandLine has ".lnk" and FileName in~ ("powershell.exe","curl.exe","autoit3.exe","rundll32.exe")
           and ProcessCommandLine has_any ("github.com","drive.google.com","dropbox.com"))
       or (FileName =~ "dotnet.exe" and ProcessCommandLine has_any ("cheat","albion","gta5rp","grandrp"))
    | extend DetectionType = case(
        FileName =~ "pepesoft.exe", "pepesoft Payload Execution",
        FileName =~ "dotnet.exe", "Malicious NuGet Tool",
        "Kimsuky LNK Staging Chain")
    | project DetectionType, TimeGenerated, DeviceName, FileName, ProcessCommandLine,
              InitiatingProcessCommandLine, AccountName, SHA256;
union NetworkHits, ProcessHits
| sort by TimeGenerated desc

PowerShell — IOC & Artifact Hunt Script

PowerShell
# Security Arsenal - OTX Pulse Hunt: pepesoft / XenoRAT / wallet-drainer artifacts
# Run elevated on suspect endpoints. Outputs findings to console + CSV.
$findings = @()

# --- 1. pepesoft payload & suspicious PyInstaller artifacts ---
$pepePaths = @("$env:TEMP\pepesoft.exe","$env:APPDATA\pepesoft.exe",
               "$env:LOCALAPPDATA\pepesoft.exe","$env:USERPROFILE\Downloads\pepesoft.exe")
foreach ($p in $pepePaths) {
    if (Test-Path $p) {
        $h = (Get-FileHash $p -Algorithm SHA256).Hash
        $findings += [PSCustomObject]@{Check="pepesoft payload file"; Path=$p; Detail=$h}
    }
}
# PyInstaller onefile extraction dirs (_MEIxxxxx) in TEMP
Get-ChildItem "$env:TEMP" -Directory -Filter "_MEI*" -ErrorAction SilentlyContinue | ForEach-Object {
    $findings += [PSCustomObject]@{Check="PyInstaller temp extraction dir"; Path=$_.FullName; Detail=$_.LastWriteTime}
}

# --- 2. Known malicious file hashes (OTX samples) ---
$badHashes = @("d5385526f2f3e52c7d96087611c6cd4e479bf61828400efdb3ca09406d981609",
               "9a2091e6625fc11cfd8f39c17aa271604e66322ee045028946274b988103e35b",
               "900ddb81d27e03967209fee4d17d13deb68eef0e1f10936eb520ca10575cb49e",
               "ab58a90eb3682c6dc3389cd700a64f68a19c0dac3d0fa8e3df97ae041f96d4e1",
               "e6e1049158ceb1971c61388349c81fa6047a7aecb4ff2089ef54a50dcc35dbc0")
foreach ($dir in @($env:TEMP,$env:APPDATA,"$env:USERPROFILE\Downloads")) {
    Get-ChildItem $dir -Recurse -File -Include *.exe,*.dll -ErrorAction SilentlyContinue |
        Where-Object {$_.Length -lt 100MB} | ForEach-Object {
            $h = (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
            if ($badHashes -contains $h) {
                $findings += [PSCustomObject]@{Check="KNOWN MALICIOUS HASH"; Path=$_.FullName; Detail=$h}
            }
        }
}

# --- 3. Persistence: Run keys & scheduled tasks referencing pepesoft/NuGet lures ---
$runKeys = @("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
             "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
foreach ($rk in $runKeys) {
    Get-ItemProperty $rk -ErrorAction SilentlyContinue | ForEach-Object {
        $_.PSObject.Properties | Where-Object {$_.Value -match "pepesoft|cheat|albion|gta5rp|grandrp"} | ForEach-Object {
            $findings += [PSCustomObject]@{Check="Suspicious Run key"; Path="$rk\$($_.Name)"; Detail=$_.Value}
        }
    }
}
Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object {
    ($_.Actions.Execute -match "pepesoft|dotnet") -or ($_.TaskName -match "cheat|albion|gta5rp")
} | ForEach-Object {
    $findings += [PSCustomObject]@{Check="Suspicious scheduled task"; Path=$_.TaskName; Detail=$_.Actions.Execute}
}

# --- 4. Network: connections to implant C2 IPs and drainer domains ---
$badIPs = @("47.107.224.89","45.156.37.159")
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
    Where-Object {$badIPs -contains $_.RemoteAddress} | ForEach-Object {
        $proc = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName
        $findings += [PSCustomObject]@{Check="ACTIVE connection to implant C2"; Path=$_.RemoteAddress; Detail="PID $($_.OwningProcess) ($proc)"}
    }

# --- 5. DoH evasion check: non-browser processes resolving via public DoH ---
Get-NetTCPConnection -RemotePort 443 -State Established -ErrorAction SilentlyContinue |
    Where-Object {@("1.1.1.1","8.8.8.8","9.9.9.9") -contains $_.RemoteAddress} | ForEach-Object {
        $proc = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName
        if ($proc -notmatch "chrome|msedge|firefox|brave") {
            $findings += [PSCustomObject]@{Check="Non-browser DoH connection"; Path=$_.RemoteAddress; Detail="$proc (PID $($_.OwningProcess))"}
        }
    }

# --- 6. Recent LNK files in user profile (Kimsuky delivery vector) ---
Get-ChildItem "$env:USERPROFILE\Desktop","$env:USERPROFILE\Downloads" -Filter *.lnk -ErrorAction SilentlyContinue |
    Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-30)} | ForEach-Object {
        $findings += [PSCustomObject]@{Check="Recent LNK file (review)"; Path=$_.FullName; Detail=$_.LastWriteTime}
    }

# --- Output ---
if ($findings.Count -gt 0) {
    $findings | Format-Table -AutoSize
    $findings | Export-Csv -Path "$env:TEMP\otx_hunt_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
    Write-Host "[!] $($findings.Count) findings - escalate to SOC for triage." -ForegroundColor Red
} else {
    Write-Host "[+] No indicators found on this host." -ForegroundColor Green
}

Response Priorities

Immediate (0–4 hours)

  • Block all network IOCs at egress firewall, DNS layer, and web proxy: 47.107.224.89, 45.156.37.159, cookie-whitelist.com/.top, whale-alert.life, api.extensionanalyticspro.top, api.active-enable-right-click.top, ggle-analytics.com, blockfolioaddressmonitor.pro, cryptopricebadgequickglance.pro, www.ac-link.com.
  • Push all file hashes (36 pepesoft SHA256s, Kimsuky MD5s, implant SHA256/SHA1s) to EDR blocklists and email gateway sandbox detonation.
  • Block or alert on outbound UDP/9992 — DARKLANTERN's unauthenticated backdoor port — and audit internet-facing ZBT routers in your asset inventory.
  • Run the PowerShell hunt script on endpoints used by developers (NuGet exposure) and finance/crypto-adjacent staff (extension exposure).
  • Remove the 19 malicious browser extensions via enterprise browser policy; audit installed extensions fleet-wide.

24 Hours (Identity & Credential Response)

  • pepesoft and the wallet-drainer are credential/secret stealers — assume compromise of any host with confirmed execution. Force password resets and revoke active sessions/tokens for affected users (Entra ID, Google Workspace, VPN, SSO).
  • Rotate any cryptocurrency wallet keys, API keys, or browser-stored credentials accessible from infected endpoints; check for unauthorized wallet transactions.
  • Review Telegram API and Google Sheets access from corporate egress — pepesoft abuses both as C2/telemetry channels; block Telegram bot API for non-approved processes.
  • Retro-hunt proxy, DNS, and NetFlow logs (7–30 days) for the KQL query patterns, especially DoH to public resolvers from non-browser processes.
  • If Kimsuky targeting is plausible (Korea-linked operations, government, academia, defense), review email gateway logs for LNK attachments and hunt DLL side-loading artifacts.

1 Week (Architecture Hardening)

  • NuGet/package registry governance: enforce private NuGet feeds with allow-listing (e.g., Artifactory/Nexus proxy), enable package signature verification, and block direct dotnet tool install from public NuGet on endpoints via AppLocker/WDAC.
  • DNS control: block outbound DoH (443 to known public resolvers) from non-browser processes at the firewall; force all resolution through internal resolvers with logging.
  • Firmware/supply chain: inventory and isolate ZBT routers; segment IoT/network devices into restricted VLANs with egress filtering; establish firmware provenance verification for network hardware procurement.
  • Patch the Dysphoria-exploited CVEs on all network/IoT devices (CVE-2020-25499, CVE-2017-17215, CVE-2022-35733, et al.) or decommission unpatchable hardware.
  • Browser extension governance: deploy extension allow-listing via Chrome/Edge enterprise policy; monitor for WebSocket connections from browser-extension service workers.
  • Block LNK attachments at the email gateway and enable Attack Surface Reduction rules for Office/script-child-process behaviors.

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.