Amber Albatross — PUP-Bundled → PyInstaller Stealer

Red Canary-tracked activity cluster: installers masquerading as free utilities (PcAppStore, Bit Driver Updater, Malware Crusher) drop an InnoSetup payload that, through an obfuscated, anti-analysis chain, unpacks a Pyarmor-protected PyInstaller executable launched via cmd.exe/powershell.exe — a stealer that runs a familiar reconnaissance burst. Defensive hunt & harden pack.
Threat
Amber Albatross (Red Canary activity cluster)
Severity
STEALER · PUP DELIVERY
Type
PUP → InnoSetup → Pyarmor PyInstaller stealer
Delivery
PcAppStore · Bit Driver Updater · Malware Crusher
Adjacent
HijackLoader / IDAT · dllFake · Arechclient2
Version
v0.3 · 2026-06-12
Author
HuntPack
01

Executive Summary

Amber Albatross is a Red Canary-named activity cluster (tracked since January 2024) that starts from a potentially-unwanted program (PUP) bundle and ends in a stealer. Victims install free "utility" software — observed bundled in downloads from PcAppStore, Bit Guardian's Bit Driver Updater, and Malware Crusher — which executes an installer (often InnoSetup) that drops and runs a binary. A complex, obfuscated, anti-analysis chain eventually unpacks a Pyarmor-obfuscated PyInstaller executable, launched via cmd.exe and powershell.exe, which then fires a sequence of reconnaissance commands typical of infostealers.

The PUP/installer framing gives it a veneer of legitimacy that defeats reputation-only defenses, and the Pyarmor+PyInstaller packaging frustrates static analysis. The durable detection targets are therefore the PyInstaller-from-temp execution (the unpacked stealer), the installer → shell → packed-exe lineage, and the stealer recon burst. The cluster sits in the same loader/stealer ecosystem as HijackLoader (IDAT/GHOSTPULSE), Arechclient2, and dllFake.

Defender priority: Hunt the unpacked stealer, not the PUP veneer. Highest-fidelity signals: Q1 (a PyInstaller-packed executable running from a user/temp path — note the _MEI extraction directory) and Q3 (a recon burst from that process). Treat any hit as a credential-stealer infection — rotate browser-stored creds.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry
1 · Vendor researchRed Canary — Amber Albatross (Threat Detection Report)PUP → InnoSetup → Pyarmor PyInstaller stealer; cmd/powershell launch; recon burstyes
1 · Vendor researchRed Canary — Intelligence Insights (Apr/May 2025)Amber Albatross alongside HijackLoader/Arechclient2; bundled-PUP sourcesyes
2 · VendorRed Canary — HijackLoader / Field GuideLoader ecosystem (IDAT/GHOSTPULSE), adjacent stealers (Arechclient2, dllFake)partial

Decisions: payload-anchored on the unpacked Pyarmor PyInstaller + recon burst (the PUP/installer front is varied and looks legitimate); cross-references the SocGholish / Scarlet Goldfinch loader-ecosystem packs and the HijackLoader adjacency; behavior over atomic IOCs since the bundles/installers rotate.

03

Hunt Brief & Attack Chain

Working hypothesis: A user installs a bundled "utility"; an InnoSetup installer drops a payload that, through an obfuscated chain, unpacks a Pyarmor PyInstaller stealer launched via cmd/powershell, which profiles the host and steals credentials.

StepBehaviorTelemetryHunt Angle
1 · PUP installBundled "utility" (PcAppStore / Bit Driver Updater / Malware Crusher)ProcessRollup2; installN1; N2
2 · InnoSetupInnoSetup installer drops & runs a binaryProcessRollup2Q2
3 · Obfuscated chainAnti-analysis stages unpack the payload (Pyarmor)ProcessRollup2Q4
4 · Stealer execPyInstaller exe (_MEI temp extraction) launched via cmd/powershellProcessRollup2; file writeQ1 / Q5
5 · Reconwhoami / systeminfo / ipconfig / tasklist burstProcessRollup2Q3
6 · Theft / C2Browser-credential theft; exfilfile read; networkQ6

Affected surface & telemetry

SurfaceRequired TelemetryPriorityGap Risk
Windows user endpointsProcess lineage + command line (ProcessRollup2)CriticalLow — standard sensor
PyInstaller extractionFile writes to _MEI* temp dirsHighLow — reliable marker
Browser credential theftFile read on browser profile DBsMediumHigh — file reads weak; pivot
PUP deliveryProxy / software inventoryMediumMedium — bundled installers
04

Consolidated IOC Table

Bundles and installers rotate and look legitimate — the durable signals are the unpacked PyInstaller stealer and the recon burst. Copy-ready blocks in §9.
TypeValueConfActionContext
BehaviorPyInstaller exe (_MEI temp extraction) from a user path via cmd/powershellhighdetectUnpacked stealer — flagship
Behaviorrecon burst (whoami/systeminfo/ipconfig/tasklist) from the packed exehighdetectStealer profiling
SoftwarePcAppStore · Bit Driver Updater · Malware Crusher (PUP bundlers)mediumhuntDelivery vehicles
BehaviorInnoSetup installer dropping & executing a binarymediumhuntInstaller stage
PackerPyarmor-obfuscated PyInstallermediumhuntAnti-analysis packaging
05

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Initial Access / ExecutionT1204.002 — User Execution (bundled PUP installer)Free-utility install → InnoSetupQ2; N1
ExecutionT1059.006 / T1059.001 / .003 — Python / PowerShell / cmdPyInstaller stealer launched via cmd/powershellQ1, Q5
Defense EvasionT1027.002 — Software packing (Pyarmor)Obfuscated, anti-analysis chainQ4
DiscoveryT1087 / T1082 / T1016 — Account / system / networkRecon burstQ3
Credential AccessT1555.003 — Credentials from Web BrowsersBrowser-credential theftQ6; pivot
C2 / ExfilT1071.001 / T1041 — Web C2 / exfilStealer beacon / data exfilQ6
06

Native Audit-Log Hunts

HuntSourceLogicResponse
N1 · PUP bundler inventorySoftware inventory / Add-Remove ProgramsPresence of PcAppStore / Bit Driver Updater / Malware CrusherUninstall; sweep host for the stealer
N2 · InnoSetup installEID 4688 / Sysmon EID 1InnoSetup installer dropping & running a binary from a download/temp pathInvestigate the dropped binary (pairs with Q2)
N3 · _MEI extractionSysmon EID 11 (FileCreate)PyInstaller _MEI* temp directory creation by a user-path exePull the binary; isolate (pairs with Q1)
N4 · Stealer C2Proxy / firewallOutbound from the PyInstaller exe to unknown HTTP/HTTPSBlock; identify the host; rotate creds
07

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Field names validated against the Falcon event reference; process hunts include SyntheticProcessRollup2. Q1 (PyInstaller-from-temp) is the strongest payload keeper and generalizes across many Python-packed stealers.
Q1 · PyInstaller-packed exe running from a user path (_MEI marker)
CONF HIGHFP LOW-MEDCOST LOW

Looks for: a process extracting/running from a PyInstaller _MEI temp directory in a user path. Accomplishes: catches the unpacked stealer. FP: some legit PyInstaller apps — flag user/temp paths + a non-vendor parent.

// HUNT: Amber Albatross PyInstaller stealer (_MEI extraction from a user path)
// MITRE: T1059.006, T1027.002 | CONF: high  FP: low-med  COST: low
// FP NOTES: some legit PyInstaller apps; flag %TEMP%/%AppData% + installer/shell parent
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| (ImageFileName=/\\(Temp|AppData\\Local\\Temp)\\_MEI[0-9]+\\/i or CommandLine=/_MEI[0-9]+/i)
| table([@timestamp, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData], limit=200)
Q2 · InnoSetup installer dropping & running a binary
CONF MEDFP MEDCOST LOW

Looks for: an InnoSetup installer (or *tmp\is-* path) spawning a child binary from a temp path. Accomplishes: the installer stage. FP: legit InnoSetup apps — correlate with a following Q1/Q3.

// HUNT: Amber Albatross InnoSetup installer chain
// MITRE: T1204.002 | CONF: medium  FP: medium  COST: low
// TUNING: InnoSetup is legit; correlate to a following Q1 (_MEI) or Q3 (recon)
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| (ParentBaseFileName=/setup.*\.exe$|.*installer.*\.exe$/i or ParentImageFileName=/\\Temp\\is-[A-Za-z0-9]+/i)
| FileName=/\.exe$/i
| ImageFileName=/\\(Temp|AppData)\\/i
| table([@timestamp, ComputerName, UserName, ParentImageFileName, ImageFileName, CommandLine], limit=200)
Q3 · Reconnaissance burst from a user-path executable
CONF MED-HIGHFP MEDCOST LOW

Looks for: a burst of discovery commands parented by a binary in a user/temp path. Accomplishes: the stealer recon stage. FP: admin scripts — scope to user-path parents + breadth.

// HUNT: Amber Albatross stealer recon burst
// MITRE: T1087, T1082, T1016 | CONF: med-high  FP: medium  COST: low
// TUNING: scope to a user/temp-path parent; require breadth (>=4 distinct recon binaries)
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentImageFileName=/\\(Temp|AppData|Users\\[^\\]+\\Downloads)\\/i
| FileName=/^(whoami|systeminfo|ipconfig|tasklist|net|net1|nltest|wmic|reg|hostname)\.exe$/i
| groupBy([aid, ComputerName, ParentImageFileName], function=[count(field=FileName, distinct=true, as=cmds), collect([FileName, CommandLine], limit=20)])
| cmds>=4
| sort(cmds, order=desc)
Q4 · cmd/powershell launching a user-path packed exe
CONF MEDFP MEDCOST LOW

Looks for: cmd/powershell launching an executable from a user/temp path (the obfuscated-chain → stealer handoff). FP: legit tooling — correlate with Q1/Q3.

// HUNT: Amber Albatross shell -> user-path packed exe handoff
// MITRE: T1059.001/.003 | CONF: medium  FP: medium  COST: low
// TUNING: correlate to Q1 (_MEI) / Q3 (recon); exclude sanctioned installers
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(cmd|powershell|pwsh)\.exe$/i
| ImageFileName=/\\(Temp|AppData\\Local\\Temp|Users\\[^\\]+\\AppData)\\.+\.exe$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine], limit=200)
Q5 · _MEI directory file writes (extraction)
CONF HIGHFP LOW-MEDCOST LOW

Looks for: writes into a _MEI* temp directory (PyInstaller self-extraction). Accomplishes: catches the unpack at file-write time. FP: legit PyInstaller apps — pair with Q2 (installer) or Q3 (recon).

// HUNT: PyInstaller _MEI self-extraction
// MITRE: T1027.002 | CONF: high  FP: low-med  COST: low
// TUNING: pair with Q2/Q3; legit PyInstaller apps also extract to _MEI
#event_simpleName=/PeFileWritten|NewExecutableWritten/
| TargetFileName=/\\(Temp|AppData\\Local\\Temp)\\_MEI[0-9]+\\/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName], limit=200)
Q6 · Stealer outbound C2 from a user-path exe
CONF MEDFP MEDCOST MED

Looks for: outbound connections from a binary in a user/temp path (the stealer beacon/exfil). FP: some apps run from there — correlate with Q1/Q3.

// HUNT: Amber Albatross stealer C2 / exfil from a user-path exe
// MITRE: T1071.001, T1041 | CONF: medium  FP: medium  COST: med
// TUNING: correlate to Q1/Q3; exclude sanctioned apps that run from AppData
#event_simpleName=NetworkConnectIP4
| ContextImageFileName=/\\(Temp|AppData\\Local\\Temp|Users\\[^\\]+\\AppData)\\.+\.exe$/i
| RemoteAddressIP4!=/^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|169\.254\.|127\.)/
| table([@timestamp, ComputerName, ContextImageFileName, RemoteAddressIP4, RemotePort], limit=200)
08

CrowdStrike Custom IOA Recommendations

IOA NameField PatternsBenign ExclusionsDeployment Path
Amber Albatross — PyInstaller from temp + reconImage from *\Temp\_MEI*\; spawns whoami/systeminfo/net.exeSanctioned PyInstaller apps (allow-list)Endpoint Security → Custom IOA → Process Creation
Amber Albatross — shell → user-path packed exeParent *\cmd.exe/powershell.exe; Child from *\AppData\Local\Temp\*Sanctioned installers/toolingCustom IOA → Process Creation
Q1 + Q3 together (PyInstaller-from-temp that runs recon) is a strong, low-FP promotion. Q2/Q4/Q6 stay correlated hunts.
09

Machine-Readable IOC Appendix

Grouped IOC Quick-Copy

One-click blocks for detection and PUP inventory. Bundles/installers rotate — behavior (PyInstaller-from-temp + recon) is the durable signal.

Behavioral Signaturesdetection logic
Process extracting/running from %TEMP%\_MEI<digits>\ (PyInstaller self-extraction)
PyInstaller exe in %TEMP%/%AppData% launched by an installer or cmd/powershell
Recon burst (>=4 of whoami/systeminfo/ipconfig/tasklist/net/nltest) from a user-path exe
InnoSetup installer (\Temp\is-XXXX) dropping & running a binary
cmd/powershell launching an exe from %TEMP%/%AppData% (obfuscated-chain handoff)
Outbound C2 from a user-path exe (stealer beacon / browser-cred exfil)
Delivery / LineagePUP bundlers
# PUP bundlers observed delivering Amber Albatross:
PcAppStore
Bit Guardian - Bit Driver Updater
Malware Crusher
# Packaging: InnoSetup installer -> obfuscated chain -> Pyarmor-obfuscated PyInstaller stealer
# Loader-ecosystem adjacency: HijackLoader (IDAT / GHOSTPULSE / SHADOWLADDER), Arechclient2, dllFake
# Inventory Add/Remove Programs for the PUP bundlers; flag unknown "utility/updater/cleaner" apps
Recon Commandsstealer profiling
# Typical Amber Albatross / stealer recon (parented by the PyInstaller exe):
whoami /all
systeminfo
ipconfig /all
tasklist
net user / net group
nltest /domain_trusts
# A burst of these from a %TEMP%/%AppData% binary == high-confidence stealer activity
Hardening / Blockcut PUP + stealer
# Block the delivery + the payload:
WDAC/AppLocker: deny execution from %TEMP%/%AppData% for standard users
Block/uninstall PUP bundlers (PcAppStore/Bit Driver Updater/Malware Crusher); web filtering
Restrict user software installs; software-acquisition governance (approved sources only)
PowerShell CLM + ScriptBlock logging; browser app-bound credential encryption
On hit: rotate browser-stored creds/cookies; reset SSO sessions
10

Hardening — Tiered & Deployable

Deny execution from user-writable paths and cut the PUP delivery channel.

Immediate — Deny temp execution & PUP delivery
  • WDAC/AppLocker: deny execution from %TEMP%/%AppData% for standard usersM1038. Blocks the unpacked stealer (Q1).
  • Block/uninstall PUP bundlers; web + download filteringM1021. Cuts delivery (PcAppStore/Bit Driver Updater/Malware Crusher).
  • Restrict user software installsM1026. Removes the "install a free utility" path.
  • PowerShell CLM + ScriptBlock loggingM1038 / M1040. Feeds Q4.
Near term — Protect secrets & observe (pilot first)
  • Browser app-bound credential/cookie encryptionM1027. Limits the stealer's prize.
  • Inventory + alert on unknown "utility/updater/cleaner" appsM1042. Feeds N1.
  • Monitor _MEI extraction + recon bursts from user pathsM1047. Feeds Q1/Q3/N3.
Strategic — Default-deny & awareness
  • Application allowlisting enterprise-wideM1038. Denies PUPs & packed stealers.
  • Software-acquisition governance: approved sources onlyM1033.
  • User training on "free utility / driver updater / PC cleaner" luresM1017.
11

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host; preserve the PyInstaller exe + _MEI contents and the PUP installerSOC L2Containment timestamp; Q1/Q3 events
TriagePull the PUP → installer → PyInstaller → recon tree; identify what was stolen (browser creds/cookies); find C2SOC L2Process tree; recon output; C2
EradicateRemove the stealer + PUP bundlers + persistence; block C2IRRemoval log; C2 block
RecoverRotate browser-stored creds/cookies + SSO sessions; verify no follow-on payload (HijackLoader-style)IR + ITCred rotation; payload review
HardenDeny temp execution; block PUP bundlers; promote Q1+Q3 IOADetection EngControl status; IOA enabled
12

Detection Coverage Map & Validation

TechniqueBehaviorCQLIOACoverage
T1204.002PUP / InnoSetup deliveryQ2Partial + inventory (N1/N2)
T1059.006 / T1027.002PyInstaller stealer (_MEI)Q1, Q5IOA-1Good
T1059.001/.003Shell → packed-exe handoffQ4IOA-2Partial correlate
T1087 / T1082 / T1016Recon burstQ3IOA-1Good
T1555.003 / T1041Browser-cred theft / C2Q6Partial correlate; file-read weak
T1204 (delivery infra)PUP bundler sourcesGAP proxy/web filtering (N1)

Validation gates: (1) confirm process + file telemetry fleet-wide; (2) baseline legit PyInstaller apps (allow-list for Q1); (3) lab-test a benign PyInstaller exe from %TEMP% (Q1/Q5) and a benign user-path binary running a recon burst (Q3); (4) promote Q1+Q3 (PyInstaller-from-temp that runs recon) to Custom IOA Detect+Block; keep Q2/Q4/Q6 correlated.

13

Hunt Summary Ticket

TITLE:        Hunt — Amber Albatross (PUP -> InnoSetup -> Pyarmor PyInstaller stealer)
SEVERITY:     High (credential stealer; legitimate-looking PUP delivery)
SCOPE:        Windows user endpoints installing free "utility" software
HYPOTHESIS:   PUP bundle (PcAppStore/Bit Driver Updater/Malware Crusher) -> InnoSetup ->
              obfuscated chain -> Pyarmor PyInstaller stealer (_MEI temp) via cmd/powershell
              -> recon burst -> browser-cred theft.
QUERIES RUN:  Q1 PyInstaller _MEI from temp (IOA) | Q2 InnoSetup chain | Q3 recon burst (IOA) |
              Q4 shell -> packed exe | Q5 _MEI file writes | Q6 stealer C2
              + Native N1-N4 (PUP inventory, InnoSetup, _MEI extraction, stealer C2)
DO FIRST:     Q1 + Q3 — isolate on any hit; rotate browser creds
FINDINGS:     <pending analyst execution>
GAPS:         PUP delivery needs proxy/web filtering; browser-theft file-read weak
ACTIONS:      Deny %TEMP%/%AppData% execution; block PUP bundlers; PowerShell CLM; promote Q1+Q3
OWNER:        HuntPack
VERSION:      v0.3 - 2026-06-12
14

Changelog

v0.52026-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.42026-06-29CQL syntax review (crowdstrike-logscale-v3): removed invalid FileCreateInfo event name from the PyInstaller _MEI file-write hunt.
v0.32026-06-12Re-hunt + reformatted to the review-v2 gold layout (fixed left-sidebar scrollspy TOC, collapsible, cloud selector inside the CQL section, per-card Copy/Open-in-Falcon, Grouped IOC Quick-Copy grid, coverage+validation, .ticket). Refreshed from Red Canary: PUP bundlers (PcAppStore/Bit Driver Updater/Malware Crusher), InnoSetup → Pyarmor PyInstaller (_MEI) chain, recon-burst detection, HijackLoader/Arechclient2/dllFake adjacency. 6 CQL + 4 native hunts, 2 IOA candidates.
v0.12026-05-26Initial pack: Amber Albatross PUP→stealer overview + hunts. Pre-gold top-bar layout.
15

References

TierSourceUsed For
1Red Canary — Amber Albatross (Threat Detection Report)Full chain: PUP → InnoSetup → Pyarmor PyInstaller → recon
1Red Canary — Intelligence Insights (HijackLoader, Arechclient2, Amber Albatross)Ecosystem adjacency; bundled-PUP sources
2Red Canary — Intelligence Insights (May 2025) · Red Canary — HijackLoaderLoader ecosystem; adjacent stealers

HuntPack v0.3 · Amber Albatross · Generated 2026-06-12 · Defensive use only. The PUP/installer front varies and looks legitimate — the durable signals are the PyInstaller-from-temp stealer and the recon burst. Validate field names + any sanctioned PyInstaller allow-list in your tenant before promoting any query.