Virtual Cameras and Video-Call Obfuscation Tooling
WindowsmacOS
TTP Hunt low DPRK IT Worker FraudFamous Chollima
Software and hardware that lets an arbitrary video feed be presented to Zoom or Teams as a webcam, including real-time face-swap tooling, which is how an operator attends a call as somebody else.
What this hunt looks for
Operators avoid cameras where they can and substitute for them where they cannot. Mandiant records reluctance to turn cameras on; ReliaQuest describes deepfakes when live interaction is unavoidable; DTEX names OBS and ManyCam; Microsoft names face-swap and voice-changing software. Huntress found the hardware version, a Guermok USB capture card registered as a webcam.
The software half of this now has an open-source form that costs nothing and leaves traces of its own: Deep-Live-Cam swaps a face into a live video feed from a single still image, is fed to a conferencing client through a capture or virtual-camera tool, and pulls two named ONNX models before it can run at all.
This hunt looks for all of it on Windows and macOS: virtual-camera and face-swap software, the face-swap model files, and capture hardware in device telemetry, best correlated against the times the employee was on a call.
- Technique
- Impersonation during live video interaction through video-input manipulation, supporting fraudulently obtained employment (MITRE ATT&CK T1078) and identity masquerading (T1036).
- Data sources
- EDR process telemetry, EDR file telemetry, EDR USB device telemetry
- Last updated
- 2026-10-04
Indicators
The atomic values this hunt matches on, listed separately from the queries so they can be lifted into tooling that speaks none of the query languages below. Every value here is reported by one of the sources cited at the foot of this page.
| Type | Value | Note |
|---|---|---|
| Software | OBS Studio |
Named by DTEX in the DPRK IT-worker context; its virtual camera presents any composited scene as a webcam. |
| Software | ManyCam |
Virtual camera and video-switching software named by DTEX. |
| Hardware | VID_345F&PID_2130 |
Guermok USB3 Video capture card (VID_345F, PID_2130) that registered as a webcam, letting any video streamed through it be sent as camera input to Zoom (Huntress). The card also enumerates under its chipset vendors' names, UltraSemi and MacroSilicon, on some hosts; the query matches both (this site's observation, 18 September 2026). |
| Software | Deep-Live-Cam |
Open-source application that swaps a face into a live video feed from a single still image, paired with a screen-capture or virtual-camera tool to reach a conferencing client. Microsoft names face-swap software categorically in its Jasper Sleet reporting and Unit 42 demonstrated that a working real-time deepfake takes about an hour to assemble from tooling of this kind; neither report names this project, which is listed as one of the widely available implementations of the technique rather than as an indicator recovered from a case. |
| Repository | github.com/hacksider/Deep-Live-Cam |
Source repository for Deep-Live-Cam, which runs as python run.py from a working copy rather than under an executable name worth listing. |
| Filename | inswapper_128_fp16.onnx |
Face-swap model Deep-Live-Cam requires in its models folder; roughly 300 MB of model data is fetched on first run (project documentation). |
| Filename | gfpgan-1024.onnx |
Face-enhancement model Deep-Live-Cam requires alongside the swap model (project documentation). |
Logic
Every query below implements these steps, so the same hunt returns the same result in each product.
- Collect: process starts, file writes and USB enrolments on Windows and macOS, where the product records them
- Match: process is OBS, ManyCam or XSplit, or its command line names Deep-Live-Cam
- Match: or a file named inswapper_128* or gfpgan-1024* (.onnx) is written
- Match: or a USB device is the Guermok capture card (VID_345F PID_2130, or its UltraSemi and MacroSilicon names)
- Exclude: devices of media-production and training staff
- Report: devices with the signals seen, newest first; the models and the card are strong, a tool alone is weak
Queries
Defender / Sentinel KQL
Written for this siteDevices showing any virtual-camera, face-swap or capture-card signal, with the signals listed so the strong ones can be read first.
// Replace the placeholder with the devices of media-production and training staff.
let MediaDevices = dynamic(["media-workstation-01"]);
let VirtualCameraImages = dynamic(["obs64.exe", "obs32.exe", "manycam.exe", "xsplit.core.exe"]);
union
(DeviceProcessEvents
| where Timestamp > ago(90d)
| where ProcessCommandLine contains "Deep-Live-Cam"
// optional: OBS, ManyCam and XSplit are ordinary software, the weakest part of this hunt
or FileName in~ (VirtualCameraImages)
or FolderPath contains "/OBS.app/" or FolderPath contains "/ManyCam.app/"
| extend Signal = iff(ProcessCommandLine contains "Deep-Live-Cam", "deep-live-cam", "virtual-camera-tool"), Detail = FileName
| project Timestamp, DeviceName, Signal, Detail),
(DeviceFileEvents
| where Timestamp > ago(90d)
| where ActionType in ("FileCreated", "FileModified", "FileRenamed")
| where FileName startswith "inswapper_128" or FileName startswith "gfpgan-1024"
| project Timestamp, DeviceName, Signal = "deep-live-cam-model", Detail = FileName),
(DeviceEvents
| where Timestamp > ago(90d)
| where ActionType == "PnpDeviceConnected"
| extend Fields = parse_json(AdditionalFields)
| extend Description = tostring(Fields.DeviceDescription), UsbId = tostring(Fields.DeviceId)
| where Description has "Guermok" or UsbId contains "VID_345F&PID_2130"
// optional: chipset names shared by many generic capture cards
or Description has_any ("UltraSemi", "MacroSilicon", "USB3 Video")
| project Timestamp, DeviceName, Signal = "capture-card", Detail = Description)
| where DeviceName !in~ (MediaDevices)
| summarize Signals = make_set(Signal), Details = make_set(Detail, 10), LastSeen = max(Timestamp) by DeviceName
| sort by LastSeen desc
Lower-fidelity parts (2)
- the OBS, ManyCam and XSplit process matches — OBS is among the most installed free software, so these add every streamer and presenter. Remove: Delete the line beginning // optional: OBS and the two lines after it, leaving only the Deep-Live-Cam command-line condition.
- the UltraSemi, MacroSilicon and USB3 Video names — chipset names carried by many generic capture cards, not only the Guermok one. Remove: Delete the line beginning // optional: chipset and the line after it.
Splunk SPL
Written for this siteHosts with a Deep-Live-Cam command line, model file or virtual-camera process, from Sysmon or EDR events.
```sourcetype placeholders: index=endpoint with Sysmon or EDR process and file events (process_name, process, file_name, host); USB enrolment is not in this form```
```optional: the process_name IN clause matches OBS, ManyCam and XSplit, ordinary software and the weakest part of this hunt```
index=endpoint earliest=-90d (process="*Deep-Live-Cam*" OR file_name IN ("inswapper_128*", "gfpgan-1024*") OR process_name IN ("obs64.exe", "obs32.exe", "manycam.exe", "xsplit.core.exe", "OBS", "ManyCam"))
| search NOT host IN ("media-workstation-01")
| eval signal=case(like(process, "%Deep-Live-Cam%"), "deep-live-cam", isnotnull(file_name), "deep-live-cam-model", true(), "virtual-camera-tool")
| eval detail=coalesce(process_name, file_name)
| stats values(signal) AS signals values(detail) AS details max(_time) AS last_seen BY host
| sort 0 - last_seen
| convert ctime(last_seen)
Lower-fidelity parts (1)
- the OBS, ManyCam and XSplit image matches — OBS is among the most installed free software, so these add every streamer and presenter. Remove: Delete the optional comment and, on the index line, the text OR process_name IN (...) up to the closing parenthesis of the search group.
Sigma
Written for this siteTwo rules, one for the process start and one for the model files; USB enrolment has no Sigma category and is covered in the other languages.
title: Virtual Camera or Face-Swap Software Started
id: 0d6c2b9e-41f7-4c68-a3b5-2e8f91c7d604
status: experimental
description: >
Detects the start of OBS, ManyCam or XSplit, or any process whose command
line names Deep-Live-Cam, the open-source real-time face-swap application.
OBS and ManyCam are named by DTEX in the DPRK IT-worker context; the
Deep-Live-Cam project directory appears in the command line of the clone
and of python run.py.
references:
- https://www.dtex.ai/resources/i3-threat-advisory-inside-the-dprk/
- https://github.com/hacksider/Deep-Live-Cam
logsource:
category: process_creation
detection:
selection_cmd:
CommandLine|contains: 'Deep-Live-Cam'
# optional: OBS, ManyCam and XSplit are ordinary software, the weakest part of this rule
selection_tool:
Image|endswith:
- '\obs64.exe'
- '\obs32.exe'
- '\manycam.exe'
- '\xsplit.core.exe'
selection_tool_macos:
Image|contains:
- '/OBS.app/'
- '/ManyCam.app/'
condition: selection_cmd or selection_tool or selection_tool_macos
falsepositives:
- Streamers, trainers and presenters who use OBS or ManyCam for their work
level: low
---
title: Deep-Live-Cam Face-Swap Model Written to Disk
id: 8b14e7a0-5c39-4d12-9f6a-73a0c5e1b2d8
status: experimental
description: >
Detects the two ONNX models Deep-Live-Cam requires, the face-swap model
inswapper_128 and the face-enhancement model gfpgan-1024, being written to
disk. Roughly 300 MB of model data is fetched on first run.
references:
- https://github.com/hacksider/Deep-Live-Cam
logsource:
category: file_event
detection:
selection_name:
TargetFilename|contains:
- 'inswapper_128'
- 'gfpgan-1024'
selection_ext:
TargetFilename|endswith: '.onnx'
condition: selection_name and selection_ext
falsepositives:
- Researchers and developers who work with the same open face-swap models
level: medium
Lower-fidelity parts (1)
- the OBS, ManyCam and XSplit image matches — OBS is among the most installed free software, so these add every streamer and presenter. Remove: Delete the optional comment, selection_tool and selection_tool_macos, and change the condition to selection_cmd.
Elastic
Written for this siteHosts with a Deep-Live-Cam command line, model file or virtual-camera process in Elastic Defend events.
FROM logs-endpoint.events.process-*, logs-endpoint.events.file-*
| WHERE @timestamp > NOW() - 90 days
| WHERE NOT host.name IN ("media-workstation-01")
| EVAL signal = CASE(
process.command_line LIKE "*Deep-Live-Cam*", "deep-live-cam",
file.name LIKE "inswapper_128*" OR file.name LIKE "gfpgan-1024*", "deep-live-cam-model",
TO_LOWER(process.name) IN ("obs64.exe", "obs32.exe", "manycam.exe", "xsplit.core.exe") OR process.executable LIKE "*/OBS.app/*" OR process.executable LIKE "*/ManyCam.app/*", "virtual-camera-tool")
| WHERE signal IS NOT NULL
| EVAL detail = COALESCE(process.name, file.name)
| STATS signals = VALUES(signal), details = VALUES(detail), last_seen = MAX(@timestamp) BY host.name
| SORT last_seen DESC
| LIMIT 200
Lower-fidelity parts (1)
- the OBS, ManyCam and XSplit image matches — OBS is among the most installed free software, so these add every streamer and presenter. Remove: Delete the line beginning TO_LOWER(process.name) and the comma that ends the line above it.
CrowdStrike LogScale
Written for this siteHosts that started Deep-Live-Cam or a virtual-camera tool in Falcon process events.
// Falcon process events only; model files and USB enrolments are not in this form.
#event_simpleName=ProcessRollup2
| CommandLine=/Deep-Live-Cam/i
// optional: OBS, ManyCam and XSplit are ordinary software, the weakest part of this hunt
or in(field=FileName, values=["obs64.exe", "obs32.exe", "manycam.exe", "xsplit.core.exe"], ignoreCase=true)
or ImageFileName=/\/(OBS|ManyCam)\.app\//i
| !in(field=ComputerName, values=["media-workstation-01"])
| case { CommandLine=/Deep-Live-Cam/i | signal := "deep-live-cam"; * | signal := "virtual-camera-tool" }
| groupBy([aid, ComputerName], function=[collect(signal), collect(FileName), max(@timestamp, as=last_seen)])
| sort(last_seen, order=desc)
Lower-fidelity parts (1)
- the OBS, ManyCam and XSplit image matches — OBS is among the most installed free software, so these add every streamer and presenter. Remove: Delete the line beginning // optional: and the two or lines that follow it.
Cortex XQL
Written for this siteHosts with a Deep-Live-Cam command line, model file or virtual-camera process in Cortex events.
dataset = xdr_data
| filter event_type in (ENUM.PROCESS, ENUM.FILE)
| filter agent_hostname not in ("media-workstation-01")
| alter signal = if(lowercase(action_process_image_command_line) contains "deep-live-cam", "deep-live-cam", if(lowercase(action_file_name) ~= "^(inswapper_128|gfpgan-1024).*\.onnx$", "deep-live-cam-model", null))
// optional: OBS, ManyCam and XSplit are ordinary software, the weakest part of this hunt
| alter signal = if(signal = null and lowercase(action_process_image_name) in ("obs64.exe", "obs32.exe", "manycam.exe", "xsplit.core.exe", "obs", "manycam"), "virtual-camera-tool", signal)
| filter signal != null
| comp values(signal) as signals, max(_time) as last_seen by agent_hostname
| sort desc last_seen
Lower-fidelity parts (1)
- the OBS, ManyCam and XSplit image matches — OBS is among the most installed free software, so these add every streamer and presenter. Remove: Delete the line beginning // optional: and the alter line after it.
osquery
Written for this siteA point-in-time check of running processes, attached USB devices and model files under the user directories.
SELECT 'deep-live-cam' AS signal, name AS detail, cmdline AS location
FROM processes
WHERE cmdline LIKE '%Deep-Live-Cam%'
UNION ALL
SELECT 'capture-card', model, vendor
FROM usb_devices
WHERE (lower(vendor_id) = '345f' AND lower(model_id) = '2130')
OR vendor LIKE '%Guermok%' OR model LIKE '%Guermok%'
-- optional: chipset names shared by many generic capture cards
OR vendor LIKE '%UltraSemi%' OR vendor LIKE '%MacroSilicon%' OR model LIKE '%USB3 Video%'
UNION ALL
SELECT 'deep-live-cam-model', filename, path
FROM file
WHERE path LIKE '/Users/%%/inswapper_128%' OR path LIKE '/Users/%%/gfpgan-1024%'
OR path LIKE 'C:\Users\%%\inswapper_128%' OR path LIKE 'C:\Users\%%\gfpgan-1024%'
-- optional: OBS, ManyCam and XSplit are ordinary software, the weakest part of this hunt
UNION ALL
SELECT 'virtual-camera-tool', name, path
FROM processes
WHERE lower(name) IN ('obs', 'obs64.exe', 'obs32.exe', 'manycam', 'manycam.exe', 'xsplit.core.exe');
Lower-fidelity parts (3)
- the OBS, ManyCam and XSplit image matches — OBS is among the most installed free software, so these add every streamer and presenter. Remove: Delete everything from the -- optional: OBS line to the end of the query, and end the file select above it with a semicolon.
- the UltraSemi, MacroSilicon and USB3 Video names — chipset names carried by many generic capture cards, not only the Guermok one. Remove: Delete the -- optional: chipset line and the line after it.
- the file select over /Users and C:\Users — a recursive path wildcard that is slow on large profiles. Remove: Delete the file select and the UNION ALL above it if the scan is too slow.
False positives and tuning
OBS is among the most widely installed free software and virtual cameras are mainstream: anyone who streams, records training or presents runs one, and capture cards are standard for demonstrating hardware.
This is a lead generator whose value comes from correlation with reluctance to appear on camera, an IP-KVM on the same host, or mismatched identity documents. Alone it will return your marketing department.
The face-swap half is the exception: a real-time face-replacement application on a corporate endpoint has few business uses that survive being asked about, and its model files are not downloaded by accident.
Sources
- i3 Threat Advisory: Identifying North Korean IT Workers: Key Threat Indicators — DTEX Systems, 2025-05-14
- Insights into Suspected DPRK Workers: Red Flags to Look Out For — Huntress, 2026-08-26
- Jasper Sleet: North Korean remote IT workers' evolving tactics to infiltrate organizations — Microsoft Security Blog, 2025-06-30
- False Face: Unit 42 Demonstrates the Alarming Ease of Synthetic Identity Creation — Unit 42, Palo Alto Networks, 2025-04-21
- Staying a Step Ahead: Mitigating the DPRK IT Worker Threat — Google Cloud (Mandiant), 2024-09-23
- Threat Spotlight: Red Flags for Red Star Hackers: Hunting for North Korean Insiders — ReliaQuest, 2025-05-08
- Famous Chollima Threat Actor Profile — Huntress Threat Library
- Deep-Live-Cam project repository — Deep-Live-Cam