Back to Intelligence

ValleyRAT Backdoor Disguised as QN Wallpaper Adware: Void Arachne DLL Sideloading Campaign — OTX Detection Pack

SA
Security Arsenal Team
August 31, 2026
9 min read

Classification: TLP:WHITE | Pulse Date: 2026-08-31 | Severity: HIGH


Threat Summary

A single high-fidelity OTX pulse from AlienVault confirms an active campaign attributed to Void Arachne, a China-nexus threat actor, distributing the ValleyRAT backdoor under the guise of a legitimate Chinese wallpaper utility called QN Wallpaper. The campaign targets users in China, India, and the British Indian Ocean Territory, with the lure language and software masquerade strongly indicating a focus on Chinese-speaking end users and enterprises operating in the APAC region.

The attack chain is deceptively simple but engineered for stealth: victims download what appears to be a benign wallpaper management application. The installer deploys a modified, still-functional version of the QN Wallpaper tool alongside a malicious DLL, then leverages DLL sideloading — placing a weaponized library next to a legitimately signed executable so the operating system loads the attacker's code under the trust umbrella of a valid signature. This technique defeats naive application allowlisting and makes the malicious process appear as trusted software in endpoint telemetry.

The objective is long-term espionage and surveillance. ValleyRAT is a full-featured backdoor providing keylogging, clipboard monitoring, screenshot capture, and secondary payload delivery — the tooling profile of an intelligence-collection operation, not a smash-and-grab criminal campaign.

Threat Actor / Malware Profile

Void Arachne

Void Arachne is an APT-aligned actor cluster known for campaigns targeting Chinese-speaking users, frequently abusing popular localized software (messaging apps, VPN clients, utilities) as trojanized lures. Their tradecraft consistently favors signed-binary abuse and sideloading over noisy exploit delivery, reflecting an operator preference for persistence and low detection rates.

ValleyRAT Backdoor

AttributeDetail
DistributionTrojanized QN Wallpaper adware installer
ExecutionDLL sideloading via signed, legitimate wallpaper process
CapabilitiesKeylogging, clipboard monitoring, screenshot capture, ad/payload delivery, remote command execution
C2Direct IPv4-based command-and-control (103.45.66.18, 192.253.225.173)
PersistenceSurvives via the legitimately installed (modified) wallpaper application; sideloaded DLL reloads on each signed-process launch
Anti-analysisExecution only under signed parent process; benign wallpaper functionality preserved to deflect user and analyst suspicion; MD5-based sample rotation (3 distinct hashes observed)

The critical detection insight: the malicious code never appears as its own process. It lives inside a trusted, signed binary's memory space. Signature-based AV scanning the executable will find nothing — the payload is in the adjacent DLL and in the process's runtime behavior.

IOC Analysis

The pulse delivers 5 indicators across 2 types:

  • IPv4 (2): 103.45.66.18, 192.253.225.173 — ValleyRAT C2 infrastructure. These are direct-IP C2 endpoints, meaning no domain resolution telemetry will exist; detection must happen at the NetFlow/firewall/EDR network layer.
  • FileHash-MD5 (3): c24e99f9437feacaa63766a3cde3fe3d, 07ddbbe2c71c45577a7a4fbcdba0df91, 8a626d844943da3456b044f38deae3a2 — samples of the malicious installer and/or sideloaded DLL. Note: MD5s are brittle; a single recompile breaks them. Treat hashes as retrospective hunt indicators, not forward-looking blocks.

Operationalization guidance for SOC teams:

  1. Push both IPs to perimeter block lists (firewall, proxy, DNS-sinkhole is not applicable for raw-IP C2 — use egress filtering).
  2. Import hashes into your EDR's blocklist, but prioritize behavioral detection (sideloading patterns) since hash rotation is trivial for this actor.
  3. Retro-hunt 90 days of network telemetry for connections to the C2 IPs — sideloaded implants are quiet, and infections may predate the pulse publication.
  4. Pivot tooling: run hashes through VirusTotal/Hybrid Analysis for config extraction; query the IPs against Shodan/Censys for co-hosted infrastructure and certificate reuse.

Detection Engineering

The following detections target the core behavioral signature: a signed process loading an unsigned/untrusted DLL from its own directory, plus egress to known C2.

YAML
---
title: DLL Sideloading via Signed Process - ValleyRAT / QN Wallpaper Masquerade
id: 9f2a4c11-7b3e-4d8a-a1c5-3e6f9b2d1a07
status: experimental
description: Detects a signed executable loading an unsigned DLL from its own directory, consistent with Void Arachne ValleyRAT sideloading via trojanized QN Wallpaper installer
references:
  - https://securelist.com/valleyrat-backdoor-adware/121175/
author: Security Arsenal Threat Intelligence
date: 2026/08/31
logsource:
  category: image_load
  product: windows
detection:
  selection_signed_parent:
    Signed: 'true'
  selection_unsigned_dll:
    ImageLoaded|endswith: '.dll'
    SignatureStatus|contains:
      - 'unsigned'
      - 'invalid'
  filter_system_paths:
    ImageLoaded|startswith:
      - 'C:\Windows\'
      - 'C:\Program Files\Common Files\'
  condition: selection_signed_parent and selection_unsigned_dll and not filter_system_paths
falsepositives:
  - Legitimate software shipping unsigned plugins
  - Developer machines with custom DLL builds
level: high
tags:
  - attack.defense_evasion
  - attack.t1574.002
---
title: ValleyRAT C2 Network Connection - Void Arachne
id: 2c8e1b44-9a5f-4c2d-b3e7-8d1f6a4c9e02
status: experimental
description: Detects outbound connections to known ValleyRAT command-and-control infrastructure attributed to Void Arachne
references:
  - https://securelist.com/valleyrat-backdoor-adware/121175/
author: Security Arsenal Threat Intelligence
date: 2026/08/31
logsource:
  category: network_connection
  product: windows
detection:
  selection:
    DestinationIp:
      - '103.45.66.18'
      - '192.253.225.173'
  condition: selection
falsepositives:
  - Unlikely; these IPs are confirmed C2
level: critical
tags:
  - attack.command_and_control
  - attack.t1071
---
title: ValleyRAT Known Sample Hash Execution
id: 5d7f3a92-1c8b-4e6d-92a4-6b3c8f1e5d09
status: experimental
description: Detects execution of known ValleyRAT trojanized QN Wallpaper installer samples by MD5 hash
references:
  - https://securelist.com/valleyrat-backdoor-adware/121175/
author: Security Arsenal Threat Intelligence
date: 2026/08/31
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Hashes|contains:
      - 'c24e99f9437feacaa63766a3cde3fe3d'
      - '07ddbbe2c71c45577a7a4fbcdba0df91'
      - '8a626d844943da3456b044f38deae3a2'
  condition: selection
falsepositives:
  - None expected
level: critical
tags:
  - attack.execution
  - attack.t1204.002
KQL — Microsoft Sentinel / Defender
// ValleyRAT / Void Arachne hunt: C2 connections + suspicious DLL loads from user-writable paths
// Microsoft Sentinel / Microsoft 365 Defender
let C2IPs = dynamic(["103.45.66.18", "192.253.225.173"]);
let KnownHashes = dynamic(["c24e99f9437feacaa63766a3cde3fe3d", "07ddbbe2c71c45577a7a4fbcdba0df91", "8a626d844943da3456b044f38deae3a2"]);
union isfuzzy=true
    (
    DeviceNetworkEvents
    | where TimeGenerated > ago(90d)
    | where RemoteIP in (C2IPs)
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessFolderPath, RemoteIP, RemotePort, ActionType, HuntStage="C2 Connection"
    ),
    (
    DeviceImageLoadEvents
    | where TimeGenerated > ago(90d)
    | where MD5 in (KnownHashes) or SHA1 in (KnownHashes) or SHA256 in (KnownHashes)
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, FileName, FolderPath, MD5, HuntStage="Known Hash Load"
    ),
    (
    DeviceImageLoadEvents
    | where TimeGenerated > ago(30d)
    // Sideloading heuristic: DLL loaded from AppData/Temp/Public alongside wallpaper-themed installers
    | where FolderPath has_any ("\\AppData\\", "\\Temp\\", "\\Public\\", "\\Downloads\\")
    | where FileName endswith ".dll"
    | where InitiatingProcessFileName has_any ("wallpaper", "qn", "wp", "desk") or InitiatingProcessFolderPath has "wallpaper"
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessFolderPath, FileName, FolderPath, MD5, HuntStage="Sideload Heuristic"
    ),
    (
    DeviceProcessEvents
    | where TimeGenerated > ago(30d)
    | where FileName has_any ("wallpaper", "qnwallpaper") or ProcessCommandLine has_any ("wallpaper", "qn ")
    | project TimeGenerated, DeviceName, FileName, FolderPath, ProcessCommandLine, InitiatingProcessFileName, MD5, HuntStage="Installer Execution"
    )
| order by TimeGenerated desc
PowerShell
# ValleyRAT / Void Arachne endpoint IOC hunt script
# Run elevated on suspected hosts. Checks C2 connections, known hashes, sideload artifacts, and persistence.

$c2Ips = @("103.45.66.18", "192.253.225.173")
$knownMd5 = @("c24e99f9437feacaa63766a3cde3fe3d", "07ddbbe2c71c45577a7a4fbcdba0df91", "8a626d844943da3456b044f38deae3a2")
$findings = @()

Write-Host "[1/5] Checking active and recent TCP connections to ValleyRAT C2..." -ForegroundColor Cyan
$conns = Get-NetTCPConnection -ErrorAction SilentlyContinue | Where-Object { $c2Ips -contains $_.RemoteAddress }
foreach ($c in $conns) {
    $proc = Get-Process -Id $c.OwningProcess -ErrorAction SilentlyContinue
    $findings += "[C2 CONNECTION] $($c.RemoteAddress):$($c.RemotePort) <- PID $($c.OwningProcess) ($($proc.ProcessName)) [$($c.State)]"
}

Write-Host "[2/5] Checking DNS cache and netstat history artifacts..." -ForegroundColor Cyan
$dnsCache = Get-DnsClientCache -ErrorAction SilentlyContinue | Where-Object { $c2Ips -contains $_.Data }
foreach ($d in $dnsCache) { $findings += "[DNS CACHE] $($d.Entry) -> $($d.Data)" }

Write-Host "[3/5] Scanning user-writable paths for known ValleyRAT hashes..." -ForegroundColor Cyan
$scanPaths = @("$env:APPDATA", "$env:LOCALAPPDATA", "$env:TEMP", "C:\Users\Public", "C:\ProgramData")
foreach ($path in $scanPaths) {
    if (Test-Path $path) {
        Get-ChildItem -Path $path -Recurse -Include *.dll,*.exe -ErrorAction SilentlyContinue | ForEach-Object {
            $h = (Get-FileHash -Algorithm MD5 -Path $_.FullName -ErrorAction SilentlyContinue).Hash
            if ($knownMd5 -contains $h.ToLower()) { $findings += "[HASH MATCH] $($_.FullName) MD5=$h" }
        }
    }
}

Write-Host "[4/5] Hunting wallpaper-themed executables with adjacent DLLs (sideload indicator)..." -ForegroundColor Cyan
Get-ChildItem -Path "C:\Users\","C:\Program Files","C:\Program Files (x86)","C:\ProgramData" -Recurse -Include *.exe -ErrorAction SilentlyContinue |
    Where-Object { $_.Name -match "wallpaper|^qn" } | ForEach-Object {
        $adjacent = Get-ChildItem -Path $_.DirectoryName -Filter *.dll -ErrorAction SilentlyContinue
        foreach ($dll in $adjacent) {
            $sig = Get-AuthenticodeSignature -FilePath $dll.FullName -ErrorAction SilentlyContinue
            if ($sig.Status -ne "Valid") { $findings += "[SIDELOAD SUSPECT] Signed EXE: $($_.FullName) | Unsigned DLL: $($dll.FullName)" }
        }
    }

Write-Host "[5/5] Checking Run keys and scheduled tasks for wallpaper-themed persistence..." -ForegroundColor Cyan
$runKeys = @("HKCU:\Software\Microsoft\Windows\CurrentVersion\Run", "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run")
foreach ($rk in $runKeys) {
    if (Test-Path $rk) {
        (Get-ItemProperty $rk).PSObject.Properties | Where-Object { $_.Value -match "wallpaper|qn" } |
            ForEach-Object { $findings += "[RUN KEY] $rk\$($_.Name) = $($_.Value)" }
    }
}
Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object { $_.TaskName -match "wallpaper|qn" -or $_.Actions.Execute -match "wallpaper|qn" } |
    ForEach-Object { $findings += "[SCHEDULED TASK] $($_.TaskName) -> $($_.Actions.Execute) $($_.Actions.Arguments)" }

Write-Host "`n===== FINDINGS =====" -ForegroundColor Yellow
if ($findings.Count -eq 0) { Write-Host "No ValleyRAT indicators found on this host." -ForegroundColor Green }
else { $findings | ForEach-Object { Write-Host $_ -ForegroundColor Red }; $findings | Out-File "$env:TEMP\valleyrat_hunt_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt" }

Response Priorities

Immediate (0–4 hours)

  • Block both C2 IPs (103.45.66.18, 192.253.225.173) at egress firewall, proxy, and EDR network control layers. Raw-IP C2 means egress filtering is your only network control — DNS controls are irrelevant here.
  • Push the three MD5s to EDR blocklists and email/web gateway file-detention rules.
  • Deploy the Sigma rules and run the KQL hunt across the full 90-day retrospective window; sideloaded implants are quiet and infections likely predate this pulse.
  • Run the PowerShell hunt script on any endpoint with QN Wallpaper or similar wallpaper utilities installed.

24 Hours

  • Credential exposure assessment is mandatory. ValleyRAT performs keylogging and clipboard monitoring — treat every confirmed infection as a full credential compromise for any account used on that host. Force resets for domain credentials, browser-stored passwords, and any credentials copied via clipboard (password manager usage windows, RDP, VPN).
  • Review clipboard-adjacent risk: cryptocurrency addresses, session tokens, and MFA recovery codes entered on infected hosts.
  • Isolate confirmed hosts and capture memory before remediation — sideloaded payloads may exist only in the signed process's memory space.
  • Interview affected users on download source: identify the distribution vector (malvertising, SEO poisoning, third-party app stores) to scope exposure.

1 Week

  • Attack surface hardening: block or restrict installation of non-business software, particularly localized utility/freeware installers, via application control (WDAC/AppLocker) with publisher-based rules that still verify DLL directory trust — publisher trust alone is exactly what this campaign abuses.
  • Enable Microsoft Defender ASR rules for untrusted/unsigned process spawning and Office/script abuse; enable Attack Surface Reduction rule "Block executable files from running unless they meet a prevalence, age, or trusted list criterion."
  • Implement egress policy review: alert on any workstation establishing direct-to-IP (non-DNS-resolved) outbound connections — a strong generic signal for this class of implant.
  • Feed sideloading-behavior detections into your detections-as-code pipeline; Void Arachne rotates hashes and lures, but the signed-binary + adjacent-unsigned-DLL pattern is durable tradecraft.
  • Brief APAC-region business units and IT on the trojanized-software lure; enforce approved-software catalogs for Chinese-language utility tools.

This briefing is based on AlienVault OTX pulse data published 2026-08-31. TLP:WHITE — may be distributed without restriction.

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.