Salt Typhoon / UAT-9244 — TernDoor · PeerTime · BruteEntry

China-nexus telecom espionage toolkit. Windows backdoor (TernDoor), cross-arch ELF P2P backdoor (PeerTime), and a GoLang edge-device brute-force ORB (BruteEntry). Defensive hunt & harden pack — no offensive tradecraft.
Actor
UAT-9244 (Talos)
Severity
HIGH
Type
Nation-state espionage · telecom
Platforms
Windows · Linux · ARM/MIPS edge
Disclosed
2026-03-05 (Cisco Talos)
Version
v0.3 (Draft)
Author
HuntPack
Confidence
HIGH
01

Executive Summary

Since 2024, UAT-9244 — a China-nexus APT that Cisco Talos assesses with high confidence as closely overlapping FamousSparrow and Tropic Trooper — has been compromising telecommunications infrastructure (Windows endpoints, Linux servers, and edge/embedded devices) in South America for long-term espionage. The cluster proliferates access with three custom implants that together cover the IT estate end-to-end.

  • TernDoor — a Windows backdoor descended from CrowDoor → SparrowDoor. Delivered by DLL side-loading (wsprint.exeBugSplatRc64.dll → encrypted WSPrint.dll), decrypted in memory and injected into msiexec.exe. Ships a kernel driver (WSPrint.sys, device \Device\VMTool) that suspends/terminates processes for defense evasion. Persists via the WSPrint scheduled task and/or a Run key, hiding the task by editing the TaskCache registry tree.
  • PeerTime — a cross-architecture (ARM, AArch64, MIPS, PPC) ELF backdoor that uses the BitTorrent protocol for resilient peer-based C2 and payload delivery. Loader runs the payload in memory and renames its process; uses Docker and BusyBox as living-off-the-land helpers. C/C++ and newer Rust variants exist; tracked in VirusTotal as angrypeer.
  • BruteEntry — a GoLang brute-force agent dropped on Linux edge devices to make them Operational Relay Boxes (ORBs). Registers with a C2, pulls target lists, and brute-forces SSH, Postgres (5432), and Tomcat (/manager/html) with embedded credentials, reporting cracks back.
Defender priority: CrowdStrike telemetry is richest on the Windows TernDoor chain — the WSPrint scheduled-task/Run-key persistence, msiexec injection, and rogue driver are the highest-fidelity, lowest-FP catches. Treat the Linux/edge implants as a coverage problem first: PeerTime and BruteEntry live on routers, embedded systems, and appliances that frequently carry no EDR sensor — pair the host queries with network egress controls and perimeter IOC blocking.
Attribution caveat: This hunt was requested as "Salt Typhoon." Talos explicitly states that while UAT-9244 and Salt Typhoon both target telecom providers, it could not verify a solid connection between the two clusters. This pack hunts the concrete, Talos-attributed UAT-9244 toolkit; the Salt Typhoon label is retained only as the requested entry point.
02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Fwd
PrimaryCisco Talos — UAT-9244Full technical breakdown of all three implants, attack chain, persistence, driver, complete IOC set, ClamAV/Snort coverage (SID 65551)Yes
PrimaryESET — FamousSparrow / SparrowDoorTernDoor lineage CrowDoor → SparrowDoor; cluster overlapYes
PrimaryTrend Micro — Earth EstriesCrowDoor context; shared China-nexus toolingPartial
SecondaryThe Hacker NewsCorroborates targeting, implant roles, ORB tradecraft; no new IOCsPartial
SecondaryBleepingComputerCorroborates campaign scope and severityPartial
TertiaryMalpedia — UAT-9244Actor tracking, cross-referencesPartial

Confidence: HIGH — anchored on a single authoritative vendor primary (Talos) with full reverse-engineered behavior and atomic IOCs; trade press corroborates without adding indicators. "Salt Typhoon" link to UAT-9244 is unconfirmed per Talos and is retained only as the requested label.

03

Hunt Brief & Attack Chain

Working hypothesis: If UAT-9244 is present, we expect (a) a side-loaded wsprint.exe/msiexec.exe chain executing from C:\ProgramData\WSPrint\, (b) a WSPrint onstart-SYSTEM scheduled task and/or Run key with matching TaskCache hiding, (c) a rogue kernel driver exposing \Device\VMTool, (d) TLS beacons to the shared self-signed-cert C2 set on 443, and on Linux/edge (e) Docker/BusyBox-assisted ELF execution and outbound brute-force scanning to SSH/Postgres/Tomcat.

Attack Chain

#StepTelemetryHunt Angle
1Initial access via brute-forced edge service or side-loaded deliveryLinux auth logs, NetworkConnectFailed→success auth burst; new ORB outbound scanning
2TernDoor delivery: wsprint.exe side-loads BugSplatRc64.dll → decodes WSPrint.dll in memoryProcessRollup2, PeFileWrittenImplant filenames written outside System32; exec from ProgramData (Q1/Q2)
3Inject final payload into msiexec.exeProcessRollup2, NetworkConnectIP4msiexec with no MSI making 443 egress (Q3)
4Persistence: WSPrint onstart SYSTEM task + Run keyProcessRollup2, AsepValueUpdateschtasks /create … WSPrint … onstart; Run → ProgramData\WSPrint (Q4/Q4b)
5Hide task by editing TaskCache tree (delete SD, Index 1→0)RegGenericValueUpdateSD/Index writes under Schedule\TaskCache\Tree\ (Q5)
6Load process-killer driver WSPrint.sys (device \Device\VMTool)Registry service, driver loadService ImagePath → WSPrint.sys; rogue VMTool device (Q6)
7TernDoor C2 over TLS/443 (shared self-signed cert, CN=8.8.8.8)NetworkConnectIP4Connections to the 22-IP C2/infra set; cert pivot (Q7)
8PeerTime on Linux/embedded: Docker+BusyBox staging, BitTorrent C2Linux ProcessRollup2, DnsRequestdocker running ELF from /tmp; busybox cp; angrypeer (Q8/Q10)
9BruteEntry ORB: register with C2, brute SSH/Postgres/TomcatLinux ProcessRollup2, NetworkConnectOutbound 22/5432/8080 fan-out; /tasks polling (Q9)

Hunt Hypotheses (Priority Order)

#HypothesisMITREConf.FP Risk
H1TernDoor implant files (loader/payload/driver) written to a Windows hostT1574.002, T1014HIGHLOW
H2WSPrint onstart-SYSTEM scheduled task / Run-key persistence presentT1053.005, T1547.001HIGHLOW
H3Rogue driver service (WSPrint.sys / \Device\VMTool) installedT1543.003, T1014HIGHLOW
H4Host beaconing to confirmed UAT-9244 C2 IPs / PeerTime domainsT1071.001, T1573HIGHLOW
H5msiexec.exe with no MSI argument making 443 egress (injection)T1055, T1071.001MEDMED
H6TaskCache SD/Index manipulation hiding a scheduled taskT1562.001, T1564MEDMED
H7Linux edge host fan-out brute-forcing SSH/Postgres/Tomcat (ORB)T1110, T1090MEDMED
H8PeerTime/BruteEntry Docker+BusyBox staging from temp pathsT1059.004, T1610MEDMED
04

Consolidated IOC Table

Talos-attributed indicators. Bulk quick-copy blocks and full JSON are in §10.

TypeValueConf.ActionContext
IP (C2)154.205.154.82:443HIGHDetectTernDoor C2
IP (C2)207.148.121.95:443HIGHDetectTernDoor C2
IP (C2)207.148.120.52:443HIGHDetectTernDoor C2
IP (C2/host)212.11.64.105HIGHDetectTernDoor C2; loader + PeerTime/BruteEntry host
Domainbloopencil.netHIGHDetectPeerTime C2
IP (C2)185.196.10.38HIGHDetectPeerTime C2
IP (infra)185.196.10.247HIGHDetectPeerTime remote + BruteEntry infra
Domainxtibh.com · xcit76.comHIGHDetectPeerTime remote locations
TLS cert (SHA256)0c7e3668…fdbdecc8HIGHHuntSelf-signed cert shared across TernDoor C2 (CN=8.8.8.8)
IP set (18)149.28.25.33 + 17 more (cert pivot)MEDHuntSuspected UAT-9244 infra — corroborate before blocking
File pathC:\ProgramData\WSPrint\WSPrint.exeHIGHHuntTernDoor persistence path
File namesBugSplatRc64.dll · WSPrint.dll · WSPrint.sysHIGHHuntSide-load loader / payload / driver
Sched taskWSPrint (onstart, /ru SYSTEM)HIGHDetectTernDoor persistence
Device\Device\VMToolHIGHHuntRogue driver device object
Decode keyqwiozpVngruhg123MEDEnrichWSPrint.dll payload decode key
Hash (driver)2d2ca7d2…dc8f0538HIGHDetectWSPrint.sys process-killer driver
VT config tagmalware_config:angrypeerHIGHHuntPeerTime VirusTotal pivot
Perishability: espionage ORB infrastructure rotates fast — treat network IOCs as detect +6mo but re-validate against Talos/VT monthly. The 18-IP suspected set is a cert pivot: hunt and enrich, do not auto-block without corroboration (some may be shared hosting).
05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk if Missing
Windows endpoints/servers (TernDoor)Falcon ProcessRollup2, PeFileWritten, AsepValueUpdate, RegGenericValueUpdate, NetworkConnectIP4CRITICALLow — strong native coverage
Linux servers (PeerTime/BruteEntry)Falcon Linux sensor: ProcessRollup2, ElfFileWritten, NetworkConnect, DnsRequestHIGHMedium — only if sensor deployed
Routers / embedded / appliances (PeerTime ARM/MIPS, BruteEntry ORB)NetFlow, firewall egress logs, appliance syslog, NDRHIGHHigh — typically NO EDR sensor
Network egress (all C2)Firewall / proxy logs, TLS metadata (JA3/cert), DNS logsHIGHMedium — depends on egress visibility
BitTorrent C2 (PeerTime)NDR / flow analytics for P2P patternsMEDIUMHigh — peer-based, no fixed domain
06

ATT&CK Mapping

TacticTechnique IDTechnique NameObserved Behavior
Initial Access / Cred AccessT1110 / T1133Brute Force / External Remote ServicesBruteEntry hits SSH/Postgres/Tomcat with embedded creds
ExecutionT1059.004 / T1610Unix Shell / Deploy ContainerShell scripts stage ELF; Docker runs PeerTime loader
Defense EvasionT1574.002DLL Side-Loadingwsprint.exe loads BugSplatRc64.dll
Defense EvasionT1055Process InjectionPayload injected into msiexec.exe
Defense EvasionT1036MasqueradingWSPrint mimics print spooler; PeerTime renames process
Defense EvasionT1014 / T1543.003Rootkit / Windows ServiceWSPrint.sys driver suspends/terminates processes via \Device\VMTool
Defense EvasionT1562.001 / T1564Impair Defenses / Hide ArtifactsTaskCache SD deletion / Index 1→0 to hide task
PersistenceT1053.005Scheduled TaskWSPrint onstart SYSTEM task
PersistenceT1547.001Registry Run KeyHKCU…\Run → ProgramData\WSPrint
Command & ControlT1071.001 / T1573Web Protocols / Encrypted ChannelTLS/443 to shared self-signed cert C2
Command & ControlT1095Non-Application Layer (P2P)PeerTime BitTorrent C2
Resource DevelopmentT1584.005Botnet / ORBEdge devices converted to relay boxes
DiscoveryT1082System Information DiscoveryTernDoor collects host/user/IP/OS bitness
07

Native Audit-Log Hunts (Non-CQL)

For surfaces where EDR is blind (edge/embedded devices, appliances) — run these in SIEM, firewall, and NDR logs.

HuntSourceLogicResponse
Edge brute-force inboundSSH (auth.log), Postgres, Tomcat access logsHigh-rate auth failures from one source then a success; Tomcat /manager/html POST burstsLock account, reset creds, isolate source
ORB outbound scanningFirewall / NetFlowInternal edge host initiating wide fan-out to external 22/5432/8080Block egress, image device, treat as compromised relay
C2 beacon to IOC setFirewall / proxy / DNSAny traffic to §4 IPs/domains; resolution of bloopencil.net / xtibh.com / xcit76.comBlock, pivot on all hosts that touched it
Self-signed cert pivotTLS metadata / Zeek x509Cert SHA256 0c7e3668… or CN=8.8.8.8 / O=Internet Widgits on 443 egressHunt all peers presenting the cert
BitTorrent from serversNDR / flowBitTorrent handshake/DHT from telecom servers or edge devices (no business reason)Investigate as PeerTime C2
08

CrowdStrike LogScale CQL Hunt Queries

https://falcon.crowdstrike.com Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
10 queries, high-fidelity first. Field names validated against the Falcon event reference. Q9/Q10 require the Linux sensor; on unmanaged edge/embedded devices use the §7 native hunts instead.
Q1 · TernDoor loader/payload/driver file write
CONF HIGHFP LOWCOST LOW

Looks for: the TernDoor loader, payload, and driver filenames being written outside System32. Accomplishes: catches delivery/staging at step 2 before execution.

// HUNT: TernDoor loader/payload/driver file write
// MITRE: T1574.002, T1014 | CONF: high  FP: low  COST: low
// REQUIRES: PeFileWritten / NewExecutableWritten telemetry
// FALSE POSITIVES: none expected (filenames are implant-specific)
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\(WSPrint\.(exe|dll|sys)|BugSplatRc64\.dll)$/i
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, SHA256HashData, ContextBaseFileName], limit=200)
Q2 · TernDoor known-bad hashes (loader · payload · driver)
CONF HIGHFP LOWCOST LOW

Looks for: any execution or write of the seven Talos Windows hashes. Accomplishes: deterministic confirmation of TernDoor presence.

// HUNT: TernDoor hash match (Windows set)
// MITRE: T1574.002, T1055, T1014 | CONF: high  FP: low  COST: low
// REQUIRES: SHA256HashData on process/file events
#event_simpleName=/^(ProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(SHA256HashData, values=[
    "711d9427ee43bc2186b9124f31cba2db5f54ec9a0d56dc2948e1a4377bada289",
    "3c098a687947938e36ab34b9f09a11ebd82d50089cbfe6e237d810faa729f8ff",
    "f36913607356a32ea106103387105c635fa923f8ed98ad0194b66ec79e379a02",
    "a5e413456ce9fc60bb44d442b72546e9e4118a61894fbe4b5c56e4dfad6055e3",
    "075b20a21ea6a0d2201a12a049f332ecc61348fc0ad3cfee038c6ad6aa44e744",
    "1f5635a512a923e98a90cdc1b2fb988a2da78706e07e419dae9e1a54dd4d682b",
    "2d2ca7d21310b14f5f5641bbf4a9ff4c3e566b1fbbd370034c6844cedc8f0538"])
| table([@timestamp, aid, ComputerName, UserName, #event_simpleName, ImageFileName, SHA256HashData], limit=max)
Q3 · msiexec.exe beaconing without an MSI (injection target)
CONF MEDFP MEDCOST LOW-MED

Looks for: msiexec.exe making outbound 443 connections with no install package on the command line. Accomplishes: catches TernDoor's injected payload (step 3) when the C2 IP is unknown.

Common FP: legitimate installs/repairs occasionally have msiexec reach the internet. Tuning scopes to msiexec started with no .msi//i//x argument, which is abnormal; exclude software-deployment hosts.
// HUNT: msiexec outbound 443 with no MSI argument
// MITRE: T1055, T1071.001 | CONF: medium  FP: medium  COST: low-medium
// REQUIRES: NetworkConnectIP4 + ProcessRollup2 command line
// TUNING: exclude msiexec with .msi // /i // /x // /update; exclude deployment hosts
#event_simpleName=NetworkConnectIP4
| ContextBaseFileName=/^msiexec\.exe$/i
| RemotePort=443
| join(query={
    #event_simpleName=ProcessRollup2
    | ImageFileName=/\\msiexec\.exe$/i
    | CommandLine!=/(\.msi|\s\/i\b|\s\/x\b|\s\/update)/i
  }, field=[aid, ContextProcessId_decimal], key=[aid, TargetProcessId_decimal], include=[CommandLine, ParentBaseFileName])
| table([@timestamp, aid, ComputerName, RemoteAddressIP4, RemotePort, CommandLine, ParentBaseFileName], limit=200)
Q4 · WSPrint scheduled-task persistence (onstart / SYSTEM)
CONF HIGHFP LOWCOST LOW

Looks for: schtasks /create registering the WSPrint task to run from ProgramData as SYSTEM at startup. Accomplishes: catches persistence (step 4) — one of the highest-fidelity signals.

// HUNT: WSPrint onstart SYSTEM scheduled task creation
// MITRE: T1053.005 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 command line
#event_simpleName=ProcessRollup2
| ImageFileName=/\\schtasks\.exe$/i
| CommandLine=/\/create/i
| CommandLine=/WSPrint/i
| CommandLine=/(onstart|ProgramData\\WSPrint)/i
| table([@timestamp, aid, ComputerName, UserName, CommandLine, ParentBaseFileName], limit=200)
Q4b · Run-key persistence pointing to ProgramData\WSPrint
CONF HIGHFP LOWCOST LOW

Looks for: a Run key whose value resolves into ProgramData\WSPrint. Accomplishes: catches the secondary login persistence the actor sets alongside the task.

// HUNT: Run-key persistence -> ProgramData\WSPrint
// MITRE: T1547.001 | CONF: high  FP: low  COST: low
// REQUIRES: AsepValueUpdate / RegGenericValueUpdate
#event_simpleName=/^(AsepValueUpdate|RegGenericValueUpdate)$/
| RegObjectName=/\\CurrentVersion\\Run$/i
| RegStringValue=/ProgramData\\WSPrint/i
| table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue], limit=200)
Q5 · Scheduled-task hiding via TaskCache tree edit
CONF MEDFP MEDCOST LOW

Looks for: writes to SD / Index under Schedule\TaskCache\Tree\. Accomplishes: catches the task-hiding evasion (step 5), including for renamed variants of the WSPrint task.

Common FP: Windows itself and some management tooling touch TaskCache. Tuning scopes to SD value deletions + Index set to 0 and lets you exclude sanctioned RMM/MDM agents.
// HUNT: TaskCache SD/Index manipulation (hidden task)
// MITRE: T1562.001, T1564 | CONF: medium  FP: medium  COST: low
// REQUIRES: RegGenericValueUpdate
// TUNING: exclude sanctioned RMM/MDM parents; focus on SD deletions + Index=0
#event_simpleName=/^Reg.*Update$/
| RegObjectName=/\\Schedule\\TaskCache\\Tree\\/i
| RegValueName=/^(SD|Index)$/
| table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue], limit=200)
Q6 · Rogue driver / service (WSPrint.sys · \Device\VMTool)
CONF HIGHFP LOWCOST LOW

Looks for: a service whose image path references WSPrint.sys, or registry artifacts of the VMTool device. Accomplishes: catches the process-killer driver (step 6) used for defense evasion.

// HUNT: TernDoor driver service install
// MITRE: T1543.003, T1014 | CONF: high  FP: low  COST: low
// REQUIRES: registry service-key telemetry
// FALSE POSITIVES: none expected (driver name is implant-specific)
#event_simpleName=/^(RegGenericValueUpdate|RegSystemConfigValueUpdate)$/
| RegObjectName=/\\Services\\/i
| RegStringValue=/(WSPrint\.sys|\\Device\\VMTool)/i
| table([@timestamp, aid, ComputerName, RegObjectName, RegValueName, RegStringValue], limit=200)
Q7 · Outbound to UAT-9244 C2 / infrastructure
CONF HIGHFP LOWCOST LOW

Looks for: any host connecting to the confirmed C2 IPs and the suspected-infra set. Accomplishes: catches C2 (steps 3/7) across all three implants.

Common FP: the 18 "suspected" IPs are a cert pivot and may include shared hosting — confirmed IPs → alert; suspected IPs → investigate only.
// HUNT: UAT-9244 C2 / infra outbound
// MITRE: T1071.001, T1573 | CONF: high (confirmed) / medium (suspected)  FP: low  COST: low
// REQUIRES: NetworkConnectIP4
// TUNING: confirmed IPs -> alert; suspected IPs -> investigate only
#event_simpleName=NetworkConnectIP4
| in(RemoteAddressIP4, values=[
    "154.205.154.82","207.148.121.95","207.148.120.52","212.11.64.105",
    "185.196.10.38","185.196.10.247",
    "149.28.25.33","154.205.154.194","154.205.154.65","154.205.154.70",
    "154.223.21.130","154.223.21.194","158.247.238.240","216.238.112.222",
    "216.238.123.242","216.238.94.37","38.54.125.134","38.60.199.34",
    "45.32.106.94","45.77.34.194","45.77.41.141","47.76.100.159",
    "64.190.113.170","64.95.10.253"])
| table([@timestamp, aid, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=max)
Q8 · PeerTime C2 domain resolution (DNS)
CONF HIGHFP LOWCOST LOW

Looks for: resolution of the PeerTime C2 / remote-location domains. Accomplishes: catches PeerTime hosts that still use DNS bootstrap before falling back to BitTorrent peers.

// HUNT: PeerTime C2 domain resolution
// MITRE: T1071.001, T1095 | CONF: high  FP: low  COST: low
// REQUIRES: DnsRequest
#event_simpleName=DnsRequest
| DomainName=/^(bloopencil\.net|xtibh\.com|xcit76\.com)$/i
| table([@timestamp, aid, ComputerName, DomainName, ContextBaseFileName], limit=200)
Q9 · BruteEntry ORB fan-out (Linux outbound 22/5432/8080)
CONF MEDFP MEDCOST MED

Looks for: a single Linux host opening many outbound connections to SSH/Postgres/Tomcat ports across many distinct destinations. Accomplishes: catches a host turned into a BruteEntry relay (step 9). Requires the Linux sensor.

Common FP: sanctioned vuln scanners / config-management fan out similarly. Exclude known scanner hosts and tune the distinct-destination threshold to your environment.
// HUNT: BruteEntry ORB outbound scanning
// MITRE: T1110, T1090, T1584.005 | CONF: medium  FP: medium  COST: medium
// REQUIRES: Linux NetworkConnectIP4
// TUNING: exclude known scanner aids; raise distinct-IP threshold to fit environment
#event_simpleName=NetworkConnectIP4
| event_platform=Lin
| in(RemotePort, values=["22","5432","8080","8443"])
| groupBy([aid, ComputerName, RemotePort], function=count(RemoteAddressIP4, distinct=true, as=distinct_targets))
| distinct_targets >= 50
| sort(distinct_targets, order=desc)
Q10 · PeerTime/BruteEntry Linux staging (docker · busybox · pgrep)
CONF MEDFP MEDCOST MED

Looks for: Docker or BusyBox being used to launch/copy an ELF from a temp/world-writable path. Accomplishes: catches PeerTime/BruteEntry living-off-the-land staging (step 8). Requires the Linux sensor.

Common FP: legitimate container/build automation uses docker from scripts. Tuning narrows to execution out of /tmp, /dev/shm, /var/tmp and busybox cp into system paths; exclude CI/build hosts.
// HUNT: PeerTime/BruteEntry Linux LOLbin staging
// MITRE: T1059.004, T1610, T1036 | CONF: medium  FP: medium  COST: medium
// REQUIRES: Linux ProcessRollup2 command line
// TUNING: exclude CI/build hosts; require temp-path execution
#event_simpleName=ProcessRollup2
| event_platform=Lin
| CommandLine=/((\bdocker\b\s+[^\s]*\/(tmp|dev\/shm|var\/tmp)\/)|(\bbusybox\b\s+cp\b)|(\bpgrep\b\s+\/(tmp|var)\/))/i
| table([@timestamp, aid, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName], limit=200)
09

CrowdStrike Custom IOA Recommendations

IOA NameField PatternsBenign ExclusionsDeployment Path
DETECT — WSPrint onstart SYSTEM taskProcess schtasks.exe; CommandLine /create.*WSPrint.*(onstart|ProgramData\WSPrint)None expectedCustom IOA → Process Creation; Detect/Block, Critical (Q4)
DETECT — Run key → ProgramData\WSPrintRegistry value write; data contains ProgramData\WSPrint under a Run keyNone expectedCustom IOA → Registry Operation; Detect/Block (Q4b)
DETECT — WSPrint.sys driver serviceService/registry ImagePath contains WSPrint.sys or device VMToolNone expectedCustom IOA → Registry; pair with Vulnerable Driver Blocklist (Q6)
DETECT — msiexec no-MSI 443 egressmsiexec.exe network 443 with no .msi//i//x argSoftware-deployment servers (exclude by host group)Custom IOA → Network Connection; Detect→tune→Block (Q3)
BLOCK — TernDoor/driver hashSHA256 in the 7-hash Windows set (§10)NoneIOC Management → Hashes → Block + Detect (Q2)
Q1/Q2/Q4/Q4b/Q6/Q7(confirmed)/Q8 are strong promotion candidates (low FP). Start every IOA in Detect for one baseline cycle, confirm zero benign hits, then promote to Block. The msiexec network IOA (Q3) is the only one needing real tuning first. Keep Q5/Q9/Q10 as investigate-only scheduled searches until baselined.
10

Machine-Readable IOC Appendix

Grouped IOC Quick-Copy

One-click plaintext blocks for Falcon IOC ingestion, firewall/proxy blocklists, or TIP watchlists.

C2 IPs — confirmed6 · block
154.205.154.82
207.148.121.95
207.148.120.52
212.11.64.105
185.196.10.38
185.196.10.247
Suspected infra (cert pivot)18 · hunt only
149.28.25.33
154.205.154.194
154.205.154.65
154.205.154.70
154.223.21.130
154.223.21.194
158.247.238.240
216.238.112.222
216.238.123.242
216.238.94.37
38.54.125.134
38.60.199.34
45.32.106.94
45.77.34.194
45.77.41.141
47.76.100.159
64.190.113.170
64.95.10.253
Domains3 · block
bloopencil.net
xtibh.com
xcit76.com
Windows hashes (TernDoor)7 · loader/payload/driver
711d9427ee43bc2186b9124f31cba2db5f54ec9a0d56dc2948e1a4377bada289
3c098a687947938e36ab34b9f09a11ebd82d50089cbfe6e237d810faa729f8ff
f36913607356a32ea106103387105c635fa923f8ed98ad0194b66ec79e379a02
a5e413456ce9fc60bb44d442b72546e9e4118a61894fbe4b5c56e4dfad6055e3
075b20a21ea6a0d2201a12a049f332ecc61348fc0ad3cfee038c6ad6aa44e744
1f5635a512a923e98a90cdc1b2fb988a2da78706e07e419dae9e1a54dd4d682b
2d2ca7d21310b14f5f5641bbf4a9ff4c3e566b1fbbd370034c6844cedc8f0538
Linux hashes (PeerTime + BruteEntry)ELF / instrumentor / agent
# PeerTime instrumentor
c9fc2af30f769d856b88b3051f19fdb663b3e0a0916279df9bbcba93c6a110c9
# PeerTime malware (16)
34d64b3cd9430e85edefcb883973a086dd5de9917e05fabec89b1f4ab9627e91
1cedf01dd4b7e50181d0e781825c66957b862941395d77c8bd7705114f319c80
bfc35f12d00fa4b40c5fbce9e37d704e12a52262709bcbdf09f97890bc40cad5
f3e899789b56429f483e5096e1f473335024f1f763e2d428132338e30352b89e
6ec070457d1f6f239cb02c5e1576a3660cca98f3a07eec6e4e107f698d7fe555
15d937803f90c2b9e277ff94d3e98ff30015ecc7f4623a158e3c98861e5cb278
7b70cd956f082b1029d02b4cb7608893f2de7fa9c500d7d7febdd0f745ac3cb6
d78b3c6df8f3756a7e310cf7435fdba201dd03ec9f97420a0db683489a01a7c9
3fcadde4b414a18b2fed56c1ec59d97977123615fbbf411a1c78425445a6e71c
3d9fbfc2c056eac857ba54e5ed134aa45a4b8322ee9f9353ba32e5b2ca71b0e3
c9a42423ef08bd7f183915780d39530eba5e4e25968c51965ff8bb3026965a28
38eeaa4eaad72feb3f8e6993565fcc548d8e7bb93642590f00fa24aacc0e2862
56bead2933e91366e4a0d5761daf5b238a7f2c22e597664ef67b3ecae20ab326
6a2d23cc8746a83e9a3b974788fce0e414706b8e75ff390426dd7e10b19967b3
9a7225c17e4bad3ffe7f080530d36f4f8aca5c116b913caa91ab9b0cee85638e
870e791af14caaf395c56028176a9c3f4c1ff0318ef3112d57ecd3d4a1be2ef9
# BruteEntry instrumentor + agent + install script
66ce42258062e902bd7f9e90ad5453a901cfc424f0ea497c4d14f063f3acd329
d5eb979cb8a72706bfa591fa57d4ebf7d13cecdc9377b0192375e2f570f796df
66adeedfb739774fcc09aa7426c8fad29f8047ab4caee8040d07c0e84d011611
66bdce93de3b02cf9cdadad18ca1504ac83e379a752d51f60deae6dcbafe4e31
1fcdd5a417db31e5e07d32cecfa69e53f0dce95b7130ad9c03b92249f001801d
Host artifacts & pivotstriage
C:\ProgramData\WSPrint\WSPrint.exe   # persistence path
BugSplatRc64.dll / WSPrint.dll / WSPrint.sys   # loader/payload/driver
Scheduled task: WSPrint (onstart, /ru SYSTEM)
Device: \Device\VMTool   # rogue driver
Decode key: qwiozpVngruhg123
TLS cert SHA256: 0c7e36683a100a96f695a952cf07052af9a47f5898e1078311fd58c5fdbdecc8
VT pivot: malware_config:angrypeer
Snort SID: 65551

Structured JSON

{
  "actor": "UAT-9244 (Talos) ~ FamousSparrow / Tropic Trooper; telecom overlap with Salt Typhoon (unconfirmed)",
  "source": "Cisco Talos, 2026-03-05",
  "generated": "2026-06-10",
  "indicators": [
    {"type":"ipv4","value":"154.205.154.82","port":443,"confidence":"high","action":"detect","context":"TernDoor C2"},
    {"type":"ipv4","value":"207.148.121.95","port":443,"confidence":"high","action":"detect","context":"TernDoor C2"},
    {"type":"ipv4","value":"207.148.120.52","port":443,"confidence":"high","action":"detect","context":"TernDoor C2"},
    {"type":"ipv4","value":"212.11.64.105","confidence":"high","action":"detect","context":"TernDoor C2 + loader/PeerTime/BruteEntry host"},
    {"type":"ipv4","value":"185.196.10.38","confidence":"high","action":"detect","context":"PeerTime C2"},
    {"type":"ipv4","value":"185.196.10.247","confidence":"high","action":"detect","context":"PeerTime remote + BruteEntry infra"},
    {"type":"domain","value":"bloopencil.net","confidence":"high","action":"detect","context":"PeerTime C2"},
    {"type":"domain","value":"xtibh.com","confidence":"high","action":"detect","context":"PeerTime remote location"},
    {"type":"domain","value":"xcit76.com","confidence":"high","action":"detect","context":"PeerTime remote location"},
    {"type":"x509_sha256","value":"0c7e36683a100a96f695a952cf07052af9a47f5898e1078311fd58c5fdbdecc8","confidence":"high","action":"hunt","context":"Shared self-signed TernDoor C2 cert (CN=8.8.8.8)"},
    {"type":"ipv4_suspected","value":["149.28.25.33","154.205.154.194","154.205.154.65","154.205.154.70","154.223.21.130","154.223.21.194","158.247.238.240","216.238.112.222","216.238.123.242","216.238.94.37","38.54.125.134","38.60.199.34","45.32.106.94","45.77.34.194","45.77.41.141","47.76.100.159","64.190.113.170","64.95.10.253"],"confidence":"medium","action":"hunt","context":"Cert-pivot suspected infra — corroborate before blocking"},
    {"type":"sha256_windows","value":["711d9427ee43bc2186b9124f31cba2db5f54ec9a0d56dc2948e1a4377bada289","3c098a687947938e36ab34b9f09a11ebd82d50089cbfe6e237d810faa729f8ff","f36913607356a32ea106103387105c635fa923f8ed98ad0194b66ec79e379a02","a5e413456ce9fc60bb44d442b72546e9e4118a61894fbe4b5c56e4dfad6055e3","075b20a21ea6a0d2201a12a049f332ecc61348fc0ad3cfee038c6ad6aa44e744","1f5635a512a923e98a90cdc1b2fb988a2da78706e07e419dae9e1a54dd4d682b","2d2ca7d21310b14f5f5641bbf4a9ff4c3e566b1fbbd370034c6844cedc8f0538"],"confidence":"high","action":"detect","context":"TernDoor loader/payload/driver"},
    {"type":"sha256_linux","value":["c9fc2af30f769d856b88b3051f19fdb663b3e0a0916279df9bbcba93c6a110c9","34d64b3cd9430e85edefcb883973a086dd5de9917e05fabec89b1f4ab9627e91","66adeedfb739774fcc09aa7426c8fad29f8047ab4caee8040d07c0e84d011611","1fcdd5a417db31e5e07d32cecfa69e53f0dce95b7130ad9c03b92249f001801d"],"confidence":"high","action":"detect","context":"PeerTime/BruteEntry — full set in quick-copy block + Talos report"},
    {"type":"filepath","value":"C:\\ProgramData\\WSPrint\\WSPrint.exe","confidence":"high","action":"hunt","context":"TernDoor persistence path"},
    {"type":"scheduled_task","value":"WSPrint","confidence":"high","action":"hunt","context":"onstart /ru SYSTEM"},
    {"type":"device_object","value":"\\Device\\VMTool","confidence":"high","action":"hunt","context":"Rogue driver device"},
    {"type":"vt_config","value":"malware_config:angrypeer","confidence":"high","action":"hunt","context":"PeerTime VirusTotal pivot"},
    {"type":"snort_sid","value":"65551","confidence":"high","action":"detect","context":"Talos Snort coverage"}
  ]
}
The full PeerTime install-script / additional-script hash set lives in the Talos report — pull it into your TIP from the §18 source link for complete ELF/script coverage.
11

Detection Validation Gates

GateRequirementEvidence
1 — Telemetry readyFalcon sensor on Windows + Linux servers; registry/network events flowing; SIEM ingesting edge/appliance logsEvent volume for ProcessRollup2, AsepValueUpdate, NetworkConnectIP4, DnsRequest (Win+Linux)
2 — Benign baselineRun Q3/Q5/Q9/Q10 for one cycle; record FP rate and build exclusionsExclusion lists for deployment hosts, RMM agents, sanctioned scanners, CI/build boxes
3 — Positive testsLab-simulate WSPrint task creation, a Run-key write to ProgramData, and 443 egress to a test IOC IPQ4/Q4b/Q7 fire on the simulated activity
4 — PromotionConvert Q1/Q2/Q4/Q4b/Q6/Q7(confirmed)/Q8 to scheduled detections + IOAs; keep Q3/Q5/Q9/Q10 as tuned huntsScheduled searches live; IOAs in Detect→Block; IOCs ingested
12

Hardening — Tiered & Deployable

The prevent half. Controls anchored to MITRE mitigations + platform authority. Telecom touches Windows/AD, Linux, and network/embedded — all three are first-class.

Immediate · this week — low risk, no user-visible change
  • Block all confirmed IOCs (§10 IPs, domains, 7 Windows + ELF hashes, Snort SID 65551) at EDR, firewall, proxy, and DNS. M1031 / M1037
  • Enable the Microsoft Vulnerable Driver Blocklist + HVCI / Memory Integrity on all Windows hosts to blunt the WSPrint.sys process-killer driver and BYOVD. M1051 · MS Baseline · CIS Win 18.x
  • Restrict internet exposure of SSH / Postgres / Tomcat-manager; bind management to internal/VPN and disable the Tomcat /manager app where unused. M1035
  • Enforce account lockout + kill embedded/default credentials on SSH/Postgres/Tomcat (BruteEntry relies on credential brute-force). M1027 · M1032 · CIS Linux 5.x
  • Deploy the §8 detections + §9 IOAs in Detect mode immediately.
Near term · 1–4 weeks — pilot on a ring first
  • WDAC / AppLocker to block DLL/EXE execution from user-writable paths (C:\ProgramData\*, %TEMP%) — breaks the WSPrint side-load chain. M1038
  • Enable ASR rules: block executable content from email/webmail, block credential stealing, block persistence via WMI/registry; turn on tamper protection. M1040 · MS Baseline
  • Centralize scheduled-task + driver-load + 4688 auditing to SIEM so TaskCache hiding and service installs are visible even where IOAs miss. M1047
  • SSH hardening on Linux/edge: keys-only auth, fail2ban, restrict source IPs; TLS/IP allow-listing for Postgres; remove default Tomcat manager roles. CIS Linux · DISA STIG
  • Egress default-deny from server/edge segments — denies ORB outbound scanning and unknown C2. M1037
  • Rotate all credentials on any host that touched an IOC; assume edge devices that brute-forced out are fully compromised.
Strategic · 1–3 months — architectural / budget
  • Extend EDR / NDR coverage to Linux servers and supported edge; where embedded devices can't run a sensor, wrap them in NetFlow + flow analytics. ⚠ best-practice, no formal benchmark
  • Segment the management plane of telecom edge/embedded devices off the user/server network; zero-trust access to management interfaces. M1030
  • Firmware lifecycle program for routers/appliances (signed firmware, patch cadence, integrity monitoring) — PeerTime's preferred home. M1051 · vendor guidance
  • NDR for P2P/BitTorrent detection from server segments, since PeerTime's peer-based C2 has no stable domain to block. ⚠ best-practice, no formal benchmark
13

Deployable Playbooks

P1 · Enable HVCI + Vulnerable Driver Blocklist (PowerShell)
# 1) Microsoft Vulnerable Driver Blocklist ON
reg add "HKLM\SYSTEM\CurrentControlSet\Control\CI\Config" /v VulnerableDriverBlocklistEnable /t REG_DWORD /d 1 /f
# 2) HVCI / Memory Integrity ON (requires reboot)
# HVCI needs VBS enabled as well -- the scenario key alone is inert and the
# control silently never activates. All three values are required.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v RequirePlatformSecurityFeatures /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v Enabled /t REG_DWORD /d 1 /f
# Prereqs: UEFI + Secure Boot + virtualization extensions. Reboot required.
# PILOT FIRST -- incompatible legacy drivers can block boot under HVCI.
# Verify AFTER reboot (SecurityServicesRunning must contain 2):
#   (Get-CimInstance Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard).SecurityServicesRunning
# Rollback: set both DeviceGuard values and the scenario Enabled back to 0, then reboot.
#   If the host will not boot, revert from Safe Mode or WinRE.
# 3) Verify after reboot
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard |
  Select-Object -ExpandProperty SecurityServicesRunning   # expect 2 (HVCI) present
P2 · Find & remove TernDoor persistence (PowerShell triage)
# Scheduled task
Get-ScheduledTask -TaskName "WSPrint" -ErrorAction SilentlyContinue | Format-List *
# Run key
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -ErrorAction SilentlyContinue |
  Select-Object * | Where-Object { $_ -match "WSPrint" }
# Artifacts + driver service
Get-ChildItem "C:\ProgramData\WSPrint" -Force -ErrorAction SilentlyContinue
Get-CimInstance Win32_SystemDriver | Where-Object { $_.PathName -match "WSPrint\.sys" }

# --- Eradicate (only after confirmation + IR sign-off) ---
# Unregister-ScheduledTask -TaskName "WSPrint" -Confirm:$false
# Remove-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Default" -Force
# sc.exe stop WSPrint ; sc.exe delete WSPrint
# Remove-Item "C:\ProgramData\WSPrint" -Recurse -Force
P3 · Harden SSH + Tomcat + Postgres exposure (Linux/edge)
# SSH: keys only, no root
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd
apt-get install -y fail2ban && systemctl enable --now fail2ban
# Postgres: do not listen on the world
sed -i "s/^#\?listen_addresses.*/listen_addresses = 'localhost'/" /etc/postgresql/*/main/postgresql.conf
systemctl restart postgresql
# Tomcat: remove manager app if unused
rm -rf $CATALINA_HOME/webapps/manager $CATALINA_HOME/webapps/host-manager
P4 · Bulk-block IOCs in Falcon (falconpy / IOC v2)
from falconpy import IOC
falcon = IOC(client_id="...", client_secret="...", base_url="https://api.crowdstrike.com")  # set per cloud
indicators = (
  [{"type":"sha256","value":h,"action":"prevent","severity":"high","platforms":["windows","linux"],
    "applied_globally":True,"description":"UAT-9244 (Talos)"} for h in [
      "711d9427ee43bc2186b9124f31cba2db5f54ec9a0d56dc2948e1a4377bada289",
      "2d2ca7d21310b14f5f5641bbf4a9ff4c3e566b1fbbd370034c6844cedc8f0538"]]   # extend with §10 set
  + [{"type":"domain","value":d,"action":"detect","severity":"high","applied_globally":True,
      "description":"UAT-9244 C2"} for d in ["bloopencil.net","xtibh.com","xcit76.com"]]
  + [{"type":"ipv4","value":ip,"action":"detect","severity":"high","applied_globally":True,
      "description":"UAT-9244 C2"} for ip in ["154.205.154.82","207.148.121.95","207.148.120.52","212.11.64.105","185.196.10.38","185.196.10.247"]]
)
print(falcon.indicator_create(body={"indicators":indicators,"comment":"UAT-9244 hunt pack"}))
14

Containment Runbook

A confirmed UAT-9244 foothold is a nation-state espionage incident. Assume long-dwell access and credential theft until disproven; coordinate with IR leadership before isolating telecom-critical edge devices — abrupt isolation has service impact.
Phase 0 · Triage

Confirm a hit (Q1/Q2/Q4/Q6/Q7). Scope blast radius: every host that touched an IOC IP/domain or ran a matching hash/task. Owner: SOC L2. Evidence: query results, host list, timeline.

Phase 1 · Isolate

Network-contain affected Windows/Linux hosts in Falcon. For edge/embedded devices with no sensor: block at firewall, pull from routing, treat as compromised ORB. Block all IOCs globally. Owner: SOC + Network. Evidence: containment tickets, firewall rules.

Phase 2 · Eradicate

Remove WSPrint task/Run key/driver/files (P2). Reimage edge devices and rebuild from trusted firmware. Hunt for PeerTime ELF + BruteEntry agents on all Linux hosts (hashes §10). Kill msiexec-injected sessions. Owner: IR. Evidence: removal logs, reimage records.

Phase 3 · Credentials

Rotate every credential reachable from compromised hosts — SSH keys, Postgres, Tomcat, service + domain accounts. Assume embedded creds harvested by BruteEntry are burned. Owner: IAM + IR. Evidence: rotation evidence.

Phase 4 · Recover

Restore from known-good, re-enable services behind hardened config (§12). Deploy detections/IOAs in Block mode. Monitor for re-entry on the same TTPs for 30 days. If a regulated telecom, evaluate breach-notification obligations. Owner: IT + SOC / IR lead. Evidence: restore validation, monitoring dashboard, final IR report.

15

Detection Coverage Map

Attack-chain behaviorPrimary DetectionFallbackKnown Gap
TernDoor delivery / side-loadQ1 (file write), Q2 (hash)WDAC block (§12)Covered
msiexec injection + C2Q3, Q7Q2 hashQ3 needs tuning; unknown C2 only via Q3
Persistence (task / Run key)Q4, Q4b, IOANative task audit (§7)Covered
Task hiding (TaskCache)Q5Audit logsFP-prone; medium conf
Process-killer driverQ6 + Driver BlocklistHVCIDriver-load event detail varies by sensor config
C2 (TernDoor TLS)Q7, cert pivot (§7)Firewall IOC blockCovered
PeerTime C2 (BitTorrent)Q8 (DNS bootstrap)NDR P2P detectionGAP — peer C2 has no fixed domain; needs NDR
PeerTime on embedded (ARM/MIPS)Q10 (if sensor)NetFlow, firmware integrityGAP — no EDR on routers/embedded
BruteEntry ORB scanningQ9 (if Linux sensor)NetFlow fan-out (§7)GAP — edge devices often unmanaged
16

Hunt Summary Ticket

TITLE:        Hunt — UAT-9244 (TernDoor / PeerTime / BruteEntry) telecom espionage toolkit
SEVERITY:     High (nation-state espionage; long-dwell access)
SCOPE:        Windows endpoints/servers, Linux servers, network edge/embedded; egress
HYPOTHESIS:   UAT-9244 implants present: WSPrint side-load + msiexec injection + task/Run-key
              persistence + rogue driver (Windows); BitTorrent-C2 ELF backdoor (Linux/embedded);
              GoLang brute-force ORB on edge (SSH/Postgres/Tomcat).
QUERIES RUN:  Q1-Q10 (see §8). Promote Q1/Q2/Q4/Q4b/Q6/Q7(confirmed)/Q8; keep Q3/Q5/Q9/Q10 tuned.
DATA SOURCES: Falcon ProcessRollup2, PeFileWritten, AsepValueUpdate, RegGenericValueUpdate,
              NetworkConnectIP4, DnsRequest (Win+Linux); SIEM edge/appliance logs; NetFlow/NDR.
FINDINGS:     <pending analyst execution>
GAPS:         BitTorrent C2 (PeerTime) and unmanaged edge/embedded devices — covered by network
              controls + NDR, not EDR. Q3/Q5/Q9/Q10 require environment tuning.
ACTIONS:      Block IOCs (§10); deploy IOAs (§9); apply Immediate hardening (§12); see Containment (§14).
ATTRIBUTION:  Talos UAT-9244 ~ FamousSparrow / Tropic Trooper. "Salt Typhoon" link unconfirmed.
OWNER:        HuntPack
VERSION:      v0.3 (Draft) - 2026-06-10
17

Changelog

v0.32026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.22026-06-10Reformatted to fixed left-sidebar layout with scrollspy nav, a collapsible (hide/show) TOC, and grouped IOC quick-copy grid (§10). Cloud selector moved into the CQL section. Detection content unchanged from v0.1.
v0.12026-06-10Initial HuntPack from Cisco Talos UAT-9244 report: 10 CQL queries, 5 IOA candidates, full IOC set, tiered hardening + 4 playbooks + containment runbook. Salt Typhoon attribution flagged as unconfirmed.
18

References

TierSourceUsed ForAccessed
1Cisco Talos — UAT-9244Primary intel: behavior, attack chain, IOCs, coverage (SID 65551)2026-06-10
1ESET — FamousSparrow / SparrowDoorLineage and cluster overlap2026-06-10
1Trend Micro — Earth EstriesCrowDoor context2026-06-10
2The Hacker NewsCorroboration2026-06-10
2BleepingComputerCorroboration2026-06-10
2Malpedia — UAT-9244Actor tracking2026-06-10

HuntPack v0.2 (Draft) · UAT-9244 (Salt Typhoon entry point) · Generated 2026-06-10 · Defensive use only. Validate field names and tune FP exclusions in your own tenant before promoting any query to Block. Indicators sourced from Cisco Talos; re-validate network IOCs monthly.