← All hunts high TLP:CLEAR Part 2 of 2

UNK_DeadDrop Credential and Crypto Wallet Theft

A developer has cloned a malicious repository that executed an Overlord-derived RAT to steal browser credentials and cryptocurrency wallets before cleaning up its own files.

Based on research by Proofpoint 2026-09-20 12 steps · 5 queries T1041 T1070.004 T1071.001 T1090.003 T1555

Brief

Why Now

Recent research from Proofpoint (https://www.proofpoint.com/us/blog/threat-insight/dont-fear-repo-unkdeaddrop-phishing-campaign-targets-developers-steal) details a targeted campaign against developers. The UNK_DeadDrop campaign uses social engineering to trick developers into cloning repositories that execute the Overlord RAT. This malware specifically targets browser credentials and cryptocurrency wallets. Because developers often handle sensitive API keys and financial assets, identifying this activity early is a priority.

How the Hunt Flows

The first phase identifies the relevant population within the estate. A query against process activity surfaces hosts running IDEs like VS Code or Cursor. This narrows the scope of the hunt to the high-value developer workstations most likely to be targeted by the UNK_DeadDrop campaign.

The hunt then launches a parallel search for initial infection markers. It looks for the execution of platform-specific Go binaries associated with the Overlord framework while simultaneously checking DNS activity for known C2 domains. This stage provides the first indicators of an active RAT on the identified workstations.

Next, the hunt pivots to behavioral evidence of successful compromise. It searches for outbound network connections with high aggregate traffic volume, representing the potential exfiltration of browser profiles or wallet files. In parallel, it monitors file activity for the automated deletion of directories like .vscode and vendor, which the malware uses as an anti-forensic measure to hide its presence.

In the final phase, an analyst or automated agent evaluates the relationship between these signals. A confirmed intrusion verdict depends on seeing the full chain: the execution of the RAT binary followed by significant data transfer and workspace cleanup.

Blind Spots

This hunt has two primary blind spots. First, it cannot inspect the encrypted WebSocket traffic used by the Overlord framework to see specific commands. We can see that a connection exists, but not which modules the adversary activates. Second, it relies on file deletion telemetry to identify cleanup. If a developer manually cleans their workspace after a project, it may create a false positive without process context for the deletion events.

Steps

  1. Identify developer hosts

    Query · scoping

    Narrow the scope to hosts running developer tools like VS Code or Cursor to prioritize high-value targets.

    reads hb_process_activitysql
    SELECT DISTINCT device_hostname FROM hb_process_activity WHERE (LOWER(process_name) LIKE '%code%' OR LOWER(process_name) LIKE '%cursor%') AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. A list of hostnames belonging to developers. Silence suggests no developer IDE activity was captured in the window.

  2. Suspicious Overlord processes

    Query · detection candidate

    Find the execution of the specific Go-based Overlord binaries named in the research on developer hosts.

    reads hb_process_activitysql
    SELECT device_hostname, process_name, process_path, process_cmd_line, time FROM hb_process_activity WHERE instr(',' || '{{malicious_binaries}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND (('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Specific binary names running from unexpected paths like /tmp/ or cloned repository folders.

  3. C2 infrastructure lookup

    Query · enrichment

    Detect DNS queries to the hardcoded C2 domains used by the Overlord RAT from developer workstations.

    reads hb_dns_activitysql
    SELECT device_hostname, query_hostname, process_name, time FROM hb_dns_activity WHERE instr(',' || '{{c2_domains}}' || ',', ',' || LOWER(query_hostname) || ',') > 0 AND (('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. The Overlord binary or a related process resolving the runoptions.runon domain.

  4. Evaluate initial infection

    Agent triage

    Analyze whether the process and DNS hits confirm the Overlord RAT is active.

  5. Exfiltration traffic patterns

    Query · baseline

    Find high-volume outbound network activity representing the exfiltration of wallet and credential data.

    reads hb_network_connectionsql
    SELECT device_hostname, process_name, dst_endpoint_ip, SUM(traffic_bytes) as total_bytes FROM hb_network_connection WHERE (('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, process_name, dst_endpoint_ip HAVING total_bytes > 10000000

    What a hit looks like. Outbound connections with significant aggregate traffic volume (ZIP uploads) from unexpected binaries.

  6. Malicious cleanup actions

    Query · enrichment

    Identify the malware's attempts to hide its presence by deleting the .vscode and vendor directories on Windows, Linux, and macOS.

    reads hb_file_activitysql
    SELECT device_hostname, file_path, process_name, time FROM hb_file_activity WHERE activity_id = 4 AND (LOWER(file_path) LIKE '%.vscode%' OR LOWER(file_path) LIKE '%\\.vscode%' OR LOWER(file_path) LIKE '%/vendor/%') AND (('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Deletions of configuration directories by non-IDE processes or the identified Overlord binary.

  7. Confirm exfiltration and cleanup

    Agent triage

    Synthesize early infection signals with exfiltration and cleanup evidence to confirm the full attack chain.

  8. Remediation route

    Decision

    Route the hunt results based on the agent's confirmed intrusion verdict.

  9. Isolate host

    Response action

    Isolate the compromised developer workstation to prevent further data loss of crypto assets.

  10. Manual incident response

    Analyst task

    Provide a manual review task for cases where automation is insufficient.

  11. Close hunt

    Analyst task

    Log the findings and document any visibility gaps for future tuning.

Coverage

Scenario coverage

StageCoveredHow, or why not
Browser and Wallet Credential Theft
T1555 · T1539
Yes suspicious-overlord-processes, evaluate-initial-infection
C2 over Overlord Framework
T1071.001 · T1090.003
Yes c2-infrastructure-lookup, evaluate-initial-infection
Exfiltration over C2
T1041
Yes exfiltration-traffic-patterns, confirm-exfiltration-and-cleanup
Anti-Forensic Artifact Cleanup
T1070.004
Yes malicious-cleanup-actions, confirm-exfiltration-and-cleanup
Phishing via Malicious GitHub Repository
T1566.002 · T1195.002
Out of scope Belongs to another part of the 'UNK_DeadDrop phishing campaign targets developers' series.
Automated IDE Task Execution
T1204.002 · T1059.004 · T1059.003
Out of scope Belongs to another part of the 'UNK_DeadDrop phishing campaign targets developers' series.
Malicious VSIX Extension Persistence
T1546
Out of scope Belongs to another part of the 'UNK_DeadDrop phishing campaign targets developers' series.

Blind spots

  • Needs comprehensive hb_file_activity with delete events. Normal developer cleanup of old repositories could be mistaken for malware activity without process context for the deletion. It would answer Whether the .vscode directory was deleted by the malware or the user..
  • Needs deep packet inspection or WebSocket-aware network logs. The hunt can see that a connection exists, but not the specific modules (browserlogin/companywallet) being activated in real-time. It would answer What commands were sent over the Overlord WebSocket connection..

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
c2_domainslist[domain]runoptions.runonC2 domains identified in the research.
lookback_daysnumber14Days of history to examine.
malicious_binarieslist[string]google-update-support-linux-amd64, google-update-support-darwin-amd64, google-update-support-darwin-arm64Overlord framework binaries used in the campaign.
scope_hostslist[host]Restrict the detection phase to the identified developer population.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Network telemetrynetworknetwork

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A simple detection rule might fire on the Overlord binary name, but this
  hunt uses a phased approach to connect initial execution with later behavioral evidence
  of data exfiltration and anti-forensic cleanup, which provides the context necessary
  to distinguish a real intrusion from a lone suspicious file.
blind_spots:
- id: limited-file-telemetry
  question: Whether the .vscode directory was deleted by the malware or the user.
  requires: comprehensive hb_file_activity with delete events
  risk: Normal developer cleanup of old repositories could be mistaken for malware
    activity without process context for the deletion.
  stage: evasion-artifact-cleanup
- id: websocket-blindness
  question: What commands were sent over the Overlord WebSocket connection.
  requires: deep packet inspection or WebSocket-aware network logs
  risk: The hunt can see that a connection exists, but not the specific modules (browserlogin/companywallet)
    being activated in real-time.
  stage: c2-overlord-framework
coverage:
- stage: credential-access-wallet-theft
  status: covered
  steps:
  - suspicious-overlord-processes
  - evaluate-initial-infection
- stage: c2-overlord-framework
  status: covered
  steps:
  - c2-infrastructure-lookup
  - evaluate-initial-infection
- stage: exfiltration-c2-channel
  status: covered
  steps:
  - exfiltration-traffic-patterns
  - confirm-exfiltration-and-cleanup
- stage: evasion-artifact-cleanup
  status: covered
  steps:
  - malicious-cleanup-actions
  - confirm-exfiltration-and-cleanup
- reason: Belongs to another part of the 'UNK_DeadDrop phishing campaign targets developers'
    series.
  stage: initial-access-phishing-repo
  status: out_of_scope
- reason: Belongs to another part of the 'UNK_DeadDrop phishing campaign targets developers'
    series.
  stage: execution-ide-task-automation
  status: out_of_scope
- reason: Belongs to another part of the 'UNK_DeadDrop phishing campaign targets developers'
    series.
  stage: persistence-malicious-vsix
  status: out_of_scope
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: promote-to-detection
  justification: Developer workstations contain sensitive assets like API tokens and
    crypto wallets that are not protected by standard identity controls. A North Korean
    actor-led campaign specifically targeting these assets makes a negative result
    across the estate highly valuable.
  methodology: model-assisted
  trigger: intel-report
hypothesis: A developer has cloned a malicious repository that executed an Overlord-derived
  RAT to steal browser credentials and cryptocurrency wallets before cleaning up its
  own files.
labels:
- hunt
- attack.t1041
- attack.t1071.001
- attack.t1090.003
- attack.t1555
- attack.t1070.004
name: UNK_DeadDrop Credential and Crypto Wallet Theft
parameters:
  c2_domains:
    default:
    - runoptions.runon
    description: C2 domains identified in the research.
    from:
      kind: article
      observed: '2026-05-30'
      ref: proofpoint-unk-deaddrop
    type: list[domain]
  lookback_days:
    default: '14'
    description: Days of history to examine.
    from:
      kind: manual
      observed: '2026-05-30'
      ref: hunt-standard
    type: number
  malicious_binaries:
    default:
    - google-update-support-linux-amd64
    - google-update-support-darwin-amd64
    - google-update-support-darwin-arm64
    description: Overlord framework binaries used in the campaign.
    from:
      kind: article
      observed: '2026-05-30'
      ref: proofpoint-unk-deaddrop
    type: list[string]
  scope_hosts:
    default: []
    description: Restrict the detection phase to the identified developer population.
    from:
      kind: manual
      observed: '2026-05-30'
      ref: analyst-scoping
    type: list[host]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://www.proofpoint.com/us/blog/threat-insight/dont-fear-repo-unkdeaddrop-phishing-campaign-targets-developers-steal
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: Start with developer-heavy segments, particularly targeting DeFi or cryptocurrency-related
  projects. Use the identify-developer-hosts query to prioritize workstations with
  VS Code or Cursor IDEs installed.
references:
- name: "Proofpoint \u2014 UNK_DeadDrop phishing campaign targets developers"
  url: https://www.proofpoint.com/us/blog/threat-insight/dont-fear-repo-unkdeaddrop-phishing-campaign-targets-developers-steal
related:
- hunt: malicious-vsix-extension-persistence
  reason: This hunt focuses on the post-infection actions of the RAT, while VSIX persistence
    is a separate mechanism needing module load analysis.
  relation: out-of-scope-alternative
scenario:
  stages:
  - name: Phishing via Malicious GitHub Repository
    observables:
    - github.com/Pulsynk/pulsynk
    - github.com/Trixauvex-org/trixauvex
    - github.com/sr-werney/forge-4626-invariants
    - github.com/skyjum/x402-kit
    - 'Themes: DeFi recruitment, code reviews, technical assignments'
    slug: initial-access-phishing-repo
    tactic: initial-access
    techniques:
    - T1566.002
    - T1195.002
  - name: Automated IDE Task Execution
    observables:
    - tasks.json
    - 'runoptions.runon: folderOpen'
    - vendor/run-update.sh
    - vendor/run-update-hidden-launch.vbs
    - wscript.exe //B //Nologo vendor/run-update-hidden-launch.vbs
    - /bin/bash vendor/run-update.sh
    slug: execution-ide-task-automation
    tactic: execution
    techniques:
    - T1204.002
    - T1059.004
    - T1059.003
  - name: Malicious VSIX Extension Persistence
    observables:
    - google-update-support VSIX extension
    - google-update-support-darwin-arm64
    - google-update-support-linux-amd64
    slug: persistence-malicious-vsix
    tactic: persistence
    techniques:
    - T1546
  - name: Browser and Wallet Credential Theft
    observables:
    - 'Module: browserlogin'
    - 'Module: companywallet'
    - Accessing Chrome/Firefox profile data
    - Targeting browser crypto wallet extensions
    slug: credential-access-wallet-theft
    tactic: credential-access
    techniques:
    - T1555
    - T1539
  - name: C2 over Overlord Framework
    observables:
    - WebSocket persistent connectivity
    - Hardcoded C&C servers
    - Overlord C&C framework (Go-based)
    slug: c2-overlord-framework
    tactic: command-and-control
    techniques:
    - T1071.001
    - T1090.003
  - name: Exfiltration over C2
    observables:
    - ZIP and upload of wallet data
    - Exfiltration of browser credentials
    slug: exfiltration-c2-channel
    tactic: exfiltration
    techniques:
    - T1041
  - name: Anti-Forensic Artifact Cleanup
    observables:
    - 'Module: cleanup'
    - Deletion of .vscode directory
    - Deletion of vendor/ directory from cloned repo
    slug: evasion-artifact-cleanup
    tactic: defense-evasion
    techniques:
    - T1070.004
  summary: The UNK_DeadDrop campaign by North Korean actors targets developers via
    phishing emails containing links to malicious GitHub repositories. When victims
    open these repositories in IDEs like VS Code or Cursor, automated tasks execute
    platform-specific loaders that install malicious extensions and Go-based or Node.js
    malware designed to steal cryptocurrency wallets and browser credentials.
series:
  index: 2
  slug: unk-deaddrop-phishing-campaign-targets-developers
  title: UNK_DeadDrop phishing campaign targets developers
  total: 2
severity: high
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
  network:
    category: network
    name: Network telemetry
    telemetry:
    - network
tlp: clear
type: investigation
---


# UNK_DeadDrop Credential and Crypto Wallet Theft

This hunt targets the final stages of the UNK_DeadDrop campaign, an operation attributed to North Korean threat actors. It identifies developer workstations using VS Code or Cursor, then searches for the execution of platform-specific Go binaries from the Overlord framework. The hunt pivots to find evidence of large data transfers and the automated deletion of workspace directories like .vscode and vendor, which the malware uses to hide its tracks. A phased approach ensures that early infection evidence is evaluated before weighing the high-volume exfiltration and cleanup activity to confirm a successful intrusion.

## identify-developer-hosts
<!-- Identify developer hosts -->
Narrow the scope to hosts running developer tools like VS Code or Cursor to prioritize high-value targets.

```sqlite target=endpoint role=scoping params=(lookback_days=lookback_days)
~~~yaml
expected: A list of hostnames belonging to developers. Silence suggests no developer
  IDE activity was captured in the window.
reads:
- device_hostname
- process_name
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT DISTINCT device_hostname FROM hb_process_activity WHERE (LOWER(process_name) LIKE '%code%' OR LOWER(process_name) LIKE '%cursor%') AND time >= datetime('now', '-{{lookback_days}} days')
```

## early-infection-parallel
<!-- Early infection parallel search -->
parallel:
- → suspicious-overlord-processes
- → c2-infrastructure-lookup
join: → evaluate-initial-infection

## suspicious-overlord-processes
<!-- Suspicious Overlord processes -->
Find the execution of the specific Go-based Overlord binaries named in the research on developer hosts.

```sqlite target=endpoint role=detection-candidate params=(lookback_days=lookback_days, malicious_binaries=malicious_binaries, scope_hosts=scope_hosts)
~~~yaml
expected: Specific binary names running from unexpected paths like /tmp/ or cloned
  repository folders.
reads:
- device_hostname
- process_name
- process_path
- process_cmd_line
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, process_name, process_path, process_cmd_line, time FROM hb_process_activity WHERE instr(',' || '{{malicious_binaries}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND (('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)) AND time >= datetime('now', '-{{lookback_days}} days')
```

## c2-infrastructure-lookup
<!-- C2 infrastructure lookup -->
Detect DNS queries to the hardcoded C2 domains used by the Overlord RAT from developer workstations.

```sqlite target=endpoint role=enrichment params=(lookback_days=lookback_days, c2_domains=c2_domains, scope_hosts=scope_hosts)
~~~yaml
expected: The Overlord binary or a related process resolving the runoptions.runon
  domain.
reads:
- device_hostname
- query_hostname
- process_name
- time
silence: not_evidence_of_absence
source: hb_dns_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, query_hostname, process_name, time FROM hb_dns_activity WHERE instr(',' || '{{c2_domains}}' || ',', ',' || LOWER(query_hostname) || ',') > 0 AND (('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)) AND time >= datetime('now', '-{{lookback_days}} days')
```

## evaluate-initial-infection
<!-- Evaluate initial infection -->
```agent target=hunter
cite: required
context:
- suspicious-overlord-processes
- c2-infrastructure-lookup
max_iterations: 4
objective: Determine if any host shows evidence of the Overlord RAT based on binary
  names and DNS traffic.
success_criteria: A suspicious or malicious verdict citing specific rows for at least
  one host.
tools:
- endpoint
- network
```

## follow-on-activity-parallel
<!-- Follow-on activity parallel search -->
parallel:
- → exfiltration-traffic-patterns
- → malicious-cleanup-actions
join: → confirm-exfiltration-and-cleanup

## exfiltration-traffic-patterns
<!-- Exfiltration traffic patterns -->
Find high-volume outbound network activity representing the exfiltration of wallet and credential data.

```sqlite target=network role=baseline params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Outbound connections with significant aggregate traffic volume (ZIP uploads)
  from unexpected binaries.
prevalence:
  by: device_hostname
  key:
  - dst_endpoint_ip
  rare_below: 3
reads:
- device_hostname
- process_name
- dst_endpoint_ip
- traffic_bytes
- time
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, process_name, dst_endpoint_ip, SUM(traffic_bytes) as total_bytes FROM hb_network_connection WHERE (('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, process_name, dst_endpoint_ip HAVING total_bytes > 10000000
```

## malicious-cleanup-actions
<!-- Malicious cleanup actions -->
Identify the malware's attempts to hide its presence by deleting the .vscode and vendor directories on Windows, Linux, and macOS.

```sqlite target=endpoint role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Deletions of configuration directories by non-IDE processes or the identified
  Overlord binary.
reads:
- device_hostname
- file_path
- process_name
- time
- activity_id
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, file_path, process_name, time FROM hb_file_activity WHERE activity_id = 4 AND (LOWER(file_path) LIKE '%.vscode%' OR LOWER(file_path) LIKE '%\\.vscode%' OR LOWER(file_path) LIKE '%/vendor/%') AND (('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)) AND time >= datetime('now', '-{{lookback_days}} days')
```

## confirm-exfiltration-and-cleanup
<!-- Confirm exfiltration and cleanup -->
```agent target=hunter
cite: required
context:
- evaluate-initial-infection
- exfiltration-traffic-patterns
- malicious-cleanup-actions
max_iterations: 6
objective: Analyze the relationship between the Overlord RAT signals and the subsequent
  high-volume network traffic and workspace cleanup.
success_criteria: A malicious verdict for any host that shows infection followed by
  exfiltration or automated workspace deletion.
tools:
- endpoint
- network
```

## remediation-route
<!-- Remediation route -->
if~: "the confirm-exfiltration-and-cleanup verdict is malicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → manual-incident-response
unavailable: → manual-incident-response (blind_spot: limited-file-telemetry)
else: → close-hunt

## isolate-host
<!-- Isolate host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the identified host and collect memory and browser profile artifacts for forensic analysis.
```
→ manual-incident-response

## manual-incident-response
<!-- Manual incident response -->
```manual target=analyst
Review the cited rows from the Overlord binaries, C2 DNS traffic, and exfiltration logs. Confirm the malicious nature of the IDE workspace cleanup.
```
→ close-hunt

## close-hunt
<!-- Close hunt -->
```manual target=analyst
Document the hosts found with UNK_DeadDrop indicators. Update the malicious_binaries and c2_domains lists with any new findings.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.