The FBI has publicly attributed more than $400 million in cryptocurrency theft over the past 18 months to Democratic People's Republic of Korea (DPRK) threat actors operating a social engineering campaign tracked as FaceStealer. The operation's defining characteristic is its use of deepfake video calls — synthetic, real-time impersonation of executives, recruiters, investors, or colleagues — to build trust with victims before delivering malware or manipulating them into authorizing fraudulent transactions.
This is not a phishing-email problem with a new coat of paint. DPRK's revenue-generation apparatus (historically overlapping with activity clusters such as Lazarus Group, TraderTraitor, and UNC4736) has industrialized the human-layer attack: multi-week relationship building, AI-generated faces and voices that survive live video scrutiny, and malware delivery disguised as meeting software fixes. If your organization touches cryptocurrency — treasury, custody, trading, DeFi development, or venture funding — you are in the target pool. If you are a software engineer with access to signing keys, cloud credentials, or CI/CD pipelines, you are a vector into someone who is.
Every SOC and IR team should treat unsolicited video-call-initiated technical requests as a potential nation-state intrusion attempt until proven otherwise.
Technical Analysis: How FaceStealer Works
Attack Chain (Defender's View)
Based on the FBI's findings and consistent DPRK tradecraft observed across this campaign's 18-month window, the kill chain breaks down as follows:
- Target reconnaissance and persona fabrication. Operators identify employees at crypto exchanges, Web3 firms, venture funds, and fintech companies via LinkedIn, Telegram, and Discord. Deepfake personas are constructed — sometimes impersonating real executives or recruiters, sometimes entirely synthetic identities with fabricated employment histories.
- Trust building via live deepfake video. The actor initiates a video call (frequently impersonating platforms such as Zoom, Microsoft Teams, or Google Meet) using real-time face-swap and voice-cloning models. The live, interactive video defeats the victim's intuition that "a real person on camera = a real person."
- Malware delivery disguised as meeting troubleshooting. A hallmark of these campaigns is the fake technical fault: the victim is told their audio/video driver, SDK, or meeting client is out of date and is directed to download an "update" or run a provided command/script. This payload is typically a loader (often Python or Node.js-based, or a trojanized installer) that establishes persistence and begins harvesting credentials, browser sessions, and cryptocurrency wallet data.
- Credential and wallet exfiltration. The malware targets browser-stored credentials, session cookies (enabling MFA bypass via session hijacking), crypto wallet browser extensions (MetaMask and similar), seed phrases, and SSH/API keys.
- Monetization and laundering. Stolen assets are moved through mixer services, chain-hopping, and OTC brokers — consistent with DPRK's established laundering pipelines.
Why This Defeats Conventional Controls
- No vulnerability is exploited. There is no CVE here — the attack surface is human trust plus legitimate software execution paths. Endpoint telemetry shows a user voluntarily running an installer, which is why behavioral detection (who spawned what, and why) matters more than signature-based AV.
- Deepfakes defeat visual verification. "I saw them on video" is no longer an authentication factor. Verification must shift to out-of-band channels and cryptographic identity.
- Payloads are often living-off-the-land. Download cradles via
curl,powershell.exe, or Node.js invoked directly by the user blend into developer workstations.
Exploitation Status
- Confirmed active exploitation at scale: FBI attribution, $400M+ in losses over 18 months, coordinated U.S. government response announced.
- Targeting: Cryptocurrency exchanges, Web3/DeFi firms, fintech, venture capital, and individual high-net-worth holders; software developers at these organizations are priority targets.
- Trend: Active and escalating. Assume continued operations through 2026.
Detection & Response
The detections below target the observable behaviors that survive regardless of which loader variant FaceStealer operators deploy: unusual child processes of browsers and meeting clients, user-invoked download cradles, tampering with crypto wallet browser extensions, and script interpreters executing from user-writable staging directories.
Sigma Rules
---
title: Browser or Meeting Client Spawning Script Interpreter or Downloader
id: 3f8a1c92-6d4e-4b7a-9c51-2e7d8f0a1b34
status: experimental
description: Detects browsers and video conferencing clients spawning curl, PowerShell, Python, or Node processes, consistent with FaceStealer-style fake meeting-update malware delivery where users are instructed to run commands or download payloads during a call.
references:
- https://thehackernews.com/2026/11/fbi-says-north-korean-hackers-stole.html
- https://attack.mitre.org/techniques/T1204/
- https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/11/15
tags:
- attack.execution
- attack.t1204.002
- attack.t1059
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
- '\brave.exe'
- '\Zoom.exe'
- '\Teams.exe'
- '\msedgewebview2.exe'
selection_child:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
- '\curl.exe'
- '\python.exe'
- '\pythonw.exe'
- '\node.exe'
- '\cmd.exe'
- '\wscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
condition: selection_parent and selection_child
falsepositives:
- Browser extensions or enterprise meeting add-ins invoking helpers
- Developer workflows launching local servers from browser-based IDEs
level: high
---
title: Download Cradle Executing Payload From User Staging Directory
id: 8b2e5d14-3a9f-4c68-b7d2-5f1a9e0c6d83
status: experimental
description: Detects download-and-execute patterns where a payload is fetched to Downloads, Temp, or AppData and immediately executed, matching the fake audio/video driver or SDK update lure used in DPRK FaceStealer social engineering.
references:
- https://thehackernews.com/2026/11/fbi-says-north-korean-hackers-stole.html
- https://attack.mitre.org/techniques/T1105/
author: Security Arsenal
date: 2026/11/15
tags:
- attack.command_and_control
- attack.t1105
- attack.t1059
logsource:
category: process_creation
product: windows
detection:
selection_img:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
- '\curl.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
selection_cli_download:
CommandLine|contains:
- 'Invoke-WebRequest'
- 'Invoke-RestMethod'
- 'wget '
- 'curl.exe '
- 'Start-BitsTransfer'
- '-urlcache'
selection_cli_path:
CommandLine|contains:
- '\Downloads\'
- '\AppData\Local\Temp\'
- '\AppData\Roaming\'
- '$env:TEMP'
- '$env:APPDATA'
condition: selection_img and selection_cli_download and selection_cli_path
falsepositives:
- Software deployment tooling (SCCM, Intune) — filter on known admin service accounts
- Developer package managers
level: high
---
title: Crypto Wallet Browser Extension Data Access or Modification
id: c41d7f26-8e3b-4a59-9d06-7c2b5e8f3a19
status: experimental
description: Detects non-browser processes reading or modifying browser extension storage associated with cryptocurrency wallets (e.g., MetaMask), consistent with FaceStealer wallet credential and seed phrase theft.
references:
- https://thehackernews.com/2026/11/fbi-says-north-korean-hackers-stole.html
- https://attack.mitre.org/techniques/T1552/
author: Security Arsenal
date: 2026/11/15
tags:
- attack.credential_access
- attack.t1552.001
- attack.t1539
logsource:
category: file_event
product: windows
detection:
selection_path:
TargetFilename|contains:
- '\nkbihfbeogaeaoehlefnkodbefgpgknn\'
- '\ejbalbakoplchlghecdalmeeeajnimhm\'
- '\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn'
filter_browser:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\brave.exe'
- '\firefox.exe'
condition: selection_path and not filter_browser
falsepositives:
- Backup and sync agents (OneDrive, backup software) touching profile directories
- Endpoint DLP scanning
level: high
KQL (Microsoft Sentinel / Defender)
This hunt surfaces the two most reliable FaceStealer behaviors: browsers/meeting clients spawning interpreters or downloaders, and interpreter processes launched from user staging directories (the fake "meeting fix" execution path). It also joins with recent file downloads to give analysts the full delivery-to-execution chain.
// FaceStealer hunt: browsers/meeting clients spawning script interpreters or downloaders,
// plus interpreters executing from user staging directories, joined to recent downloads.
let suspiciousChildren = dynamic(["powershell.exe","pwsh.exe","curl.exe","python.exe","pythonw.exe","node.exe","cmd.exe","wscript.exe","mshta.exe","rundll32.exe"]);
let parentApps = dynamic(["chrome.exe","msedge.exe","firefox.exe","brave.exe","Zoom.exe","Teams.exe","msedgewebview2.exe"]);
let stagingPaths = dynamic([@"\Downloads\", @"\AppData\Local\Temp\", @"\AppData\Roaming\", @"\AppData\Local\"]);
let procHits =
DeviceProcessEvents
| where TimeGenerated > ago(30d)
| where (InitiatingProcessFileName in~ (parentApps) and FileName in~ (suspiciousChildren))
or (FileName in~ (suspiciousChildren)
and ProcessCommandLine has_any (stagingPaths)
and ProcessCommandLine has_any ("http://","https://","Invoke-WebRequest","Invoke-RestMethod","Start-BitsTransfer","wget","curl"))
| project DeviceId, DeviceName, AccountName, TimeGenerated,
ChildProc = FileName, ChildCmdLine = ProcessCommandLine,
ParentProc = InitiatingProcessFileName, ParentCmdLine = InitiatingProcessCommandLine,
SHA256, ReportId;
procHits
| join kind=leftouter (
DeviceFileEvents
| where TimeGenerated > ago(30d)
| where ActionType == "FileCreated" and FolderPath has_any (stagingPaths)
| project DeviceId, FileCreatedTime = TimeGenerated, FileName, FolderPath, SHA256
) on DeviceId, SHA256
| project-away DeviceId1, SHA256_1
| sort by TimeGenerated desc
For environments ingesting Syslog from Linux/macOS developer workstations (a common DPRK target for wallet theft), hunt for equivalent download-and-pipe patterns:
// Linux/macOS developer workstations: curl/wget piped to shell or python from user dirs
Syslog
| where TimeGenerated > ago(30d)
| where ProcessName in~ ("bash","sh","zsh","python","python3","curl","wget")
| where SyslogMessage has_any ("curl", "wget")
and SyslogMessage has_any ("| sh", "| bash", "| python", "/tmp/", "/Downloads/", "chmod +x")
and SyslogMessage has_any ("http://", "https://")
| project TimeGenerated, Computer, HostName, ProcessName, SyslogMessage
| sort by TimeGenerated desc
Velociraptor VQL
Use this hunt to sweep endpoints for recently executed files staged in user-writable directories — the artifact left behind when a victim runs the fake "meeting update" — enriched with signer status so analysts can immediately spot unsigned or untrusted binaries.
-- FaceStealer hunt: executables and scripts staged in user directories and recently executed
LET staging_globs = "C:/Users/*/{Downloads,AppData/Local/Temp,AppData/Roaming}/**/*.{exe,msi,dll,ps1,js,py,jar,sh,pkg,command}"
LET staged = SELECT FullPath, Size, Mtime, Btime
FROM glob(globs=staging_globs)
WHERE Mtime > now() - 60*86400
LET running = SELECT Pid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE Exe =~ '(Downloads|AppData\\(Local\\Temp|Roaming|Local))'
SELECT * FROM staged
UNION ALL
SELECT Exe AS FullPath, NULL AS Size, CreateTime AS Mtime, NULL AS Btime FROM running
-- Enumerate Chrome/Edge wallet extensions (MetaMask et al.) and flag unexpected extension IDs
SELECT FullPath, Mtime,
basename(path=dirname(path=FullPath)) AS ExtensionID
FROM glob(globs='C:/Users/*/AppData/Local/{Google/Chrome,Microsoft/Edge}/User Data/*/Local Extension Settings/*')
WHERE ExtensionID !~ '^(nkbihfbeogaeaoehlefnkodbefgpgknn|ejbalbakoplchlghecdalmeeeajnimhm)$'
OR Mtime > now() - 14*86400
Endpoint Hardening and Verification Script
Run this on user endpoints (especially developer and finance workstations) to enumerate installed browser extensions for unexpected wallet-like IDs, flag unsigned executables in staging directories, and verify script execution controls.
# FaceStealer endpoint audit: browser extensions, staged unsigned binaries, script policy
# Requires: local admin. Safe to run read-only; makes no changes.
$report = @()
# 1. Enumerate Chromium extension IDs across all user profiles
$extRoots = @(
"$env:SystemDrive\Users\*\AppData\Local\Google\Chrome\User Data\*\Extensions",
"$env:SystemDrive\Users\*\AppData\Local\Microsoft\Edge\User Data\*\Extensions"
)
foreach ($root in $extRoots) {
Get-ChildItem $root -ErrorAction SilentlyContinue -Directory | ForEach-Object {
$report += [pscustomobject]@{
Check = 'BrowserExtension'
Path = $_.FullName
Value = $_.Name
Note = 'Verify this extension ID is approved by IT; wallet extensions are prime theft targets'
}
}
}
# 2. Flag unsigned executables/scripts staged in user-writable directories (last 60 days)
$staging = @("$env:SystemDrive\Users\*\Downloads", "$env:SystemDrive\Users\*\AppData\Local\Temp")
foreach ($dir in $staging) {
Get-ChildItem $dir -Recurse -Include *.exe,*.msi,*.ps1,*.js,*.dll -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-60) } | ForEach-Object {
$sig = Get-AuthenticodeSignature $_.FullName
if ($sig.Status -ne 'Valid') {
$report += [pscustomobject]@{
Check = 'UnsignedStagedBinary'
Path = $_.FullName
Value = $sig.Status
Note = 'Unsigned payload in staging dir — investigate delivery source (meeting lure?)'
}
}
}
}
# 3. Verify PowerShell execution policy and script block logging
$policy = Get-ExecutionPolicy -List
$sbl = Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging' -ErrorAction SilentlyContinue
$report += [pscustomobject]@{
Check = 'ScriptControls'
Path = 'HKLM PowerShell policy'
Value = "ScriptBlockLogging=$($sbl.EnableScriptBlockLogging)"
Note = 'ScriptBlockLogging should be 1; enforce Constrained Language or AppLocker where possible'
}
$report | Format-Table -AutoSize
$report | Export-Csv "$env:TEMP\facestealer_audit.csv" -NoTypeInformation
Write-Output "Audit complete: $($report.Count) findings -> $env:TEMP\facestealer_audit.csv"
Remediation and Hardening Guidance
There is no patch for a social engineering campaign — remediation is architectural and procedural. Prioritize the following:
Identity and verification controls (highest priority)
- Kill video-call trust as an authentication factor. Codify a policy that any request for fund transfers, credential resets, software installs, or key material made over a video call must be verified out-of-band via a pre-registered channel (signed message, hardware-token push to a known device, or call-back to a number on file). Treat "I saw them on camera" as zero evidentiary value in 2026.
- Challenge phrases and cryptographic verification for finance operations. Require dual approval with hardware-backed keys (FIDO2) for any crypto movement. DPRK operators can deepfake a face; they cannot sign with a stolen hardware key they don't physically possess.
- Brief executive staff specifically. FaceStealer impersonates executives and targets them. Executives should assume their likeness is being cloned from public footage and should expect verification challenges from their own teams.
Endpoint and application controls
- Block user-initiated script execution from browsers. Deploy AppLocker/WDAC rules preventing browsers and meeting clients from spawning script interpreters (the first Sigma rule above doubles as an AppLocker audit policy). Enable PowerShell Script Block Logging and Constrained Language Mode on developer workstations.
- Browser extension allowlisting. Enforce managed-browser extension policies. Inventory MetaMask and other wallet extensions; move corporate crypto operations to dedicated, hardened machines or hardware wallets — never on a general-purpose browsing workstation.
- Restrict download-and-execute from user staging directories. WDAC/AppLocker path rules blocking execution from
DownloadsandAppData\Local\Tempbreak the fake-update lure outright.
Process and awareness
- Rewrite security awareness training content now. If your phishing program still teaches "hover over the link," it is obsolete. Train staff on the fake-meeting-fix lure: no legitimate meeting platform will ever ask you to run a command or download a driver mid-call. Simulate this scenario in your next tabletop.
- Vetting for inbound contacts. Treat unsolicited recruiter/investor outreach — especially involving video calls and any software installation — as a reportable security event. DPRK IT-worker and social engineering operations routinely run for weeks before payload delivery.
- Pre-stage IR playbooks for wallet compromise. Time-to-containment determines loss magnitude. Have exchange freeze contacts, on-chain tracing retainer (Chainalysis/TRM), and FBI/USSS reporting channels documented before you need them. Report suspected DPRK theft to the FBI's IC3 (ic3.gov) immediately — attribution-linked seizures and sanctions actions depend on timely victim reporting.
Monitoring
- Deploy the detections above and alert on parent-child anomalies for browsers and meeting clients. This single telemetry pivot catches the delivery mechanism regardless of payload variant.
Related Resources
Security Arsenal Red Team Services AlertMonitor Platform Book a SOC Assessment pen-testing Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.