External Access and Proxy-Based Command and Control
An adversary exploits unpatched internet-facing vulnerabilities or phishes users to establish multi-hop proxy C2, banking on reduced holiday staffing to delay detection and response.
Based on research by Huntress 2026-09-20 11 steps · 3 queries T1090.003 T1190 T1566
Brief
Why this hunt
Recent analysis by Huntress in their article Operational Resilience: IT Security Risks with Reduced Staffing (https://www.huntress.com/blog/operational-resilience-reduced-staffing-risks) highlights how adversaries capitalize on holiday windows. When fewer analysts are on the clock, dwell times often increase. This hunt addresses that gap by proactively looking for the intersection of high-risk vulnerabilities and suspicious outbound command-and-control traffic.
How the hunt flows
The hunt begins by scoping the environment for unpatched critical vulnerabilities. The first query checks the vulnerability surface for any active findings with a high severity rating. An agent then evaluates these results to determine if the exposure warrants further investigation, focusing on internet-facing or widely distributed assets that represent the most significant risk.
If the agent identifies high-risk exposure, the hunt moves into a parallel behavioral analysis phase. One branch monitors the process surface for phishing execution patterns, specifically looking for productivity applications that spawn command interpreters like PowerShell or cmd.exe. Simultaneously, a second branch examines the network surface for rare outbound connections to known proxy and Tor ports. This two-pronged approach catches both the initial delivery and the subsequent C2 establishment.
In the final phase, an agent correlates the vulnerability findings with the behavioral evidence. If a host shows both a critical exposure and suspicious activity, the playbook can trigger an automated isolation action. This provides immediate containment during periods when a human analyst might not be available to respond instantly to every alert.
Beyond Detection
Standard detection rules fire on specific Tor domains or ngrok indicators. This hunt goes further by pivoting across three distinct data surfaces—vulnerabilities, process execution, and network egress—to find intrusions that individual rules often miss. By weighting behavioral alerts based on the underlying vulnerability exposure of the host, we reduce noise and find the true signals of compromise that require immediate attention.
What the hunt cannot see
This hunt relies on recent vulnerability scan data. If a scan failed or the data is stale, the initial scoping might miss new exposures. On the network side, the hunt focuses on explicit proxy ports such as 9050 or 8080. If an adversary tunnels C2 traffic over port 443 using standard HTTPS, this hunt will not identify that traffic without additional TLS fingerprinting or deep packet analysis.
Steps
-
Identify critical vulnerabilities
Query · scopingIdentify active critical vulnerabilities that could serve as initial access points during reduced staffing periods.
reads hb_vulnerability_findingsqlSELECT device_uid, cve_uid, title, severity_id, affected_package_name, last_seen FROM hb_vulnerability_finding WHERE severity_id >= {{critical_severity_threshold}} AND status != 'suppressed' AND last_seen >= datetime('now', '-{{lookback_days}} days')What a hit looks like. A list of hostnames with unpatched critical flaws. Silence means no critical vulnerabilities were reported in the window.
-
Evaluate exposure and impact
Agent triageDetermine if the identified vulnerabilities warrant the expense of a behavioral hunt based on current organizational risk appetite.
-
Gate: Proceed to behavior?
DecisionHalt the hunt if no high-risk exposure is identified, preserving analyst and agent resources.
-
Detect phishing execution patterns
Query · detection candidateFind instances where common productivity apps spawn interpreters, indicating potential phishing execution.
reads hb_process_activitysqlSELECT device_hostname, process_name, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND instr(',' || '{{phishing_parents}}' || ',', ',' || LOWER(parent_process_name) || ',') > 0 AND instr(',' || '{{interpreter_children}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. A parent-child process match. Silence indicates no common phishing execution chains were detected.
-
Detect anomalous proxy connections
Query · baselineIdentify hosts connecting to common proxy or Tor infrastructure, which may indicate multi-hop C2.
reads hb_network_connectionsqlSELECT device_hostname, dst_endpoint_ip, dst_endpoint_port, COUNT(*) AS connections, MIN(time) AS first_seen FROM hb_network_connection WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND activity_id = 1 AND instr(',' || '{{proxy_ports}}' || ',', ',' || CAST(dst_endpoint_port AS TEXT) || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY 1, 2, 3 HAVING connections < 50What a hit looks like. Rare connections to proxy-associated ports. Silence means no direct proxy traffic was observed on those ports.
-
Triage intrusion risk
Agent triageCorrelate exposure risk with behavioral evidence to identify confirmed threats requiring immediate response.
-
Route response
DecisionAutomatically isolate high-confidence threats to mitigate impact during reduced staffing periods.
-
Isolate endpoint
Response actionNeutralize the threat immediately when the security team is at reduced capacity.
-
Analyst review
Analyst taskManually validate suspicious findings and confirm isolation actions.
-
Close out
Analyst taskFinalize the hunt and record exposure findings for patching.
Coverage
Scenario coverage
| Stage | Covered | How, or why not |
|---|---|---|
| Initial Access via Phishing T1566 |
Yes | detect-phishing-patterns |
| Exploitation of Public-Facing Application T1190 |
Yes | identify-vulnerabilities, evaluate-risk |
| Command and Control via Multi-hop Proxy T1090.003 |
Yes | detect-proxy-connections |
Blind spots
- Needs hb_vulnerability_finding last_seen. A scan that failed recently would show old data, leading the lead query to miss new exposures. It would answer Are the vulnerability findings current or did a recent scan fail?.
- Needs hb_network_connection destination_hostname. Adversaries often use HTTPS for proxy traffic. This hunt focuses on explicit proxy ports; traffic on 443 remains a blind spot without TLS fingerprinting. It would answer Is C2 traffic being hidden behind common ports like 443?.
Parameters & data
Parameters
| Parameter | Type | Default | What it is |
|---|---|---|---|
critical_severity_threshold | number | 4 | Minimum severity_id (4=High, 5=Critical) to trigger the hunt. |
interpreter_children | list[string] | powershell.exe, cmd.exe, mshta.exe, cscript.exe, wscript.exe, scrcons.exe | Common interpreters spawned by phishing entry points. |
lookback_days | number | 14 | Days of history to examine. |
phishing_parents | list[string] | outlook.exe, chrome.exe, msedge.exe, winword.exe, excel.exe, powerpnt.exe | Common parent processes for phishing delivery. |
proxy_ports | list[string] | 1080, 3128, 8080, 9001, 9050, 9150 | Common proxy and Tor bridge ports. |
scope_hosts | list[host] | — | List of hostnames to narrow behavioral queries. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
| Network telemetry | network | network |
Source
---
analysis: Standard rules fire on specific Tor domains or ngrok indicators. This hunt
pivots across vulnerability exposure (surface 1), rare phishing-style execution
(surface 2), and anomalous proxy port egress (surface 3) to find intrusions that
individual rules miss.
blind_spots:
- id: vulnerability-scan-staleness
question: Are the vulnerability findings current or did a recent scan fail?
requires: hb_vulnerability_finding last_seen
risk: A scan that failed recently would show old data, leading the lead query to
miss new exposures.
stage: initial-access-exploit-public-app
- id: proxy-obfuscation
question: Is C2 traffic being hidden behind common ports like 443?
requires: hb_network_connection destination_hostname
risk: Adversaries often use HTTPS for proxy traffic. This hunt focuses on explicit
proxy ports; traffic on 443 remains a blind spot without TLS fingerprinting.
stage: c2-multi-hop-proxy
coverage:
- stage: initial-access-phishing
status: covered
steps:
- detect-phishing-patterns
- stage: initial-access-exploit-public-app
status: covered
steps:
- identify-vulnerabilities
- evaluate-risk
- stage: c2-multi-hop-proxy
status: covered
steps:
- detect-proxy-connections
guardrails:
claims: no_unsupported
evidence: citation_required
missing_data: not_benign
telemetry: untrusted
hunt:
applicability: campaign-specific
handoff: keep-as-periodic-hunt
justification: Reduced staffing during holiday periods increases the time from detection
to response. This hunt proactively identifies the most dangerous access paths
and enables immediate containment to maintain resilience.
methodology: model-assisted
trigger: intel-report
hypothesis: An adversary exploits unpatched internet-facing vulnerabilities or phishes
users to establish multi-hop proxy C2, banking on reduced holiday staffing to delay
detection and response.
labels:
- hunt
- attack.t1090.003
- attack.t1190
- attack.t1566
name: External Access and Proxy-Based Command and Control
parameters:
critical_severity_threshold:
default: '4'
description: Minimum severity_id (4=High, 5=Critical) to trigger the hunt.
type: number
interpreter_children:
default:
- powershell.exe
- cmd.exe
- mshta.exe
- cscript.exe
- wscript.exe
- scrcons.exe
description: Common interpreters spawned by phishing entry points.
type: list[string]
lookback_days:
default: '14'
description: Days of history to examine.
type: number
phishing_parents:
default:
- outlook.exe
- chrome.exe
- msedge.exe
- winword.exe
- excel.exe
- powerpnt.exe
description: Common parent processes for phishing delivery.
type: list[string]
proxy_ports:
default:
- '1080'
- '3128'
- '8080'
- '9001'
- '9050'
- '9150'
description: Common proxy and Tor bridge ports.
type: list[string]
scope_hosts:
default: []
description: List of hostnames to narrow behavioral queries.
type: list[host]
provenance:
authors:
- name: Huntbase hunt generation
org: huntbase.io
generated:
by: huntbase-hunt-generation
from: https://www.huntress.com/blog/operational-resilience-reduced-staffing-risks
gates:
- dry-run
- lint
model: hb_google/gemini-3-flash-preview
rationale: The lead query identifies any host with a critical vulnerability. The gate
ensures that deep behavioral queries only run when the organization's current operational
capacity necessitates proactive intervention on high-risk assets.
references:
- name: 'Operational Resilience: IT Security Risks with Reduced Staffing'
url: https://www.huntress.com/blog/operational-resilience-reduced-staffing-risks
related:
- hunt: suspicious-cloud-access-holiday-anomalies
reason: This hunt focuses on endpoints and vulnerabilities; a sibling hunt is needed
for anomalous cloud console logins.
relation: sibling
scenario:
stages:
- name: Initial Access via Phishing
observables:
- phishing email
- malicious links
- email attachments
- social engineering
- OAuth spam
slug: initial-access-phishing
tactic: initial-access
techniques:
- T1566
- name: Exploitation of Public-Facing Application
observables:
- critical vulnerability
- unpatched internet-facing host
- web server exploitation
- open sockets
- exposed OpenSLP services
slug: initial-access-exploit-public-app
tactic: initial-access
techniques:
- T1190
- name: Command and Control via Multi-hop Proxy
observables:
- Tor traffic
- onion routing
- multi-hop proxies
- operational relay box (ORB) networks
- C2 traffic obfuscation
slug: c2-multi-hop-proxy
tactic: command-and-control
techniques:
- T1090.003
summary: Organizations face increased risk during periods of reduced staffing when
capacity for incident response and change management is limited. Adversaries exploit
these windows using phishing or vulnerability exploitation, often masking their
presence with multi-hop proxies to complicate detection and eviction.
severity: medium
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
---
# External Access and Proxy-Based Command and Control
Adversaries exploit reduced staffing levels during holidays to conduct stealthy intrusions. This hunt identifies critical unpatched vulnerabilities and uses an agent to evaluate their impact on the organization's external attack surface. If exposure is confirmed, it fans out to look for behavioral indicators of phishing execution and multi-hop proxy connections (Tor/ORBs) that bypass standard detection rules. An agent weighs the combined risk of exposure and suspicious activity to identify hosts that require immediate isolation during periods of reduced operational capacity.
## identify-vulnerabilities
<!-- Identify critical vulnerabilities -->
Identify active critical vulnerabilities that could serve as initial access points during reduced staffing periods.
```sqlite target=endpoint role=scoping params=(critical_severity_threshold=critical_severity_threshold, lookback_days=lookback_days)
~~~yaml
expected: A list of hostnames with unpatched critical flaws. Silence means no critical
vulnerabilities were reported in the window.
reads:
- device_uid
- cve_uid
- title
- severity_id
- status
- last_seen
silence: not_evidence_of_absence
source: hb_vulnerability_finding
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_uid, cve_uid, title, severity_id, affected_package_name, last_seen FROM hb_vulnerability_finding WHERE severity_id >= {{critical_severity_threshold}} AND status != 'suppressed' AND last_seen >= datetime('now', '-{{lookback_days}} days')
```
## evaluate-risk
<!-- Evaluate exposure and impact -->
```agent target=hunter
cite: required
context:
- identify-vulnerabilities
max_iterations: 3
objective: Review the identified vulnerabilities and decide if they represent a high-risk
exposure path (e.g. exploitable, internet-facing, or widely distributed) that justifies
running behavioral checks.
success_criteria: A clear recommendation to continue to behavior analysis or end the
hunt.
tools:
- endpoint
- network
```
## gate-on-lead
<!-- Gate: Proceed to behavior? -->
if~: "the evaluate-risk verdict identifies high-impact exposure or unmitigated critical vulnerabilities" (confidence: high, judge=hunter)
then: → behavioral-fanout
indeterminate: → analyst-review
unavailable: → analyst-review (blind_spot: vulnerability-scan-staleness)
else: → close-out
## behavioral-fanout
<!-- Behavioral fan-out -->
parallel:
- → detect-phishing-patterns
- → detect-proxy-connections
join: → triage-intrusion
## detect-phishing-patterns
<!-- Detect phishing execution patterns -->
Find instances where common productivity apps spawn interpreters, indicating potential phishing execution.
```sqlite target=endpoint role=detection-candidate params=(scope_hosts=scope_hosts, phishing_parents=phishing_parents, interpreter_children=interpreter_children, lookback_days=lookback_days)
~~~yaml
expected: A parent-child process match. Silence indicates no common phishing execution
chains were detected.
reads:
- device_hostname
- process_name
- process_cmd_line
- parent_process_name
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, process_name, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND instr(',' || '{{phishing_parents}}' || ',', ',' || LOWER(parent_process_name) || ',') > 0 AND instr(',' || '{{interpreter_children}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days')
```
## detect-proxy-connections
<!-- Detect anomalous proxy connections -->
Identify hosts connecting to common proxy or Tor infrastructure, which may indicate multi-hop C2.
```sqlite target=network role=baseline params=(scope_hosts=scope_hosts, proxy_ports=proxy_ports, lookback_days=lookback_days)
~~~yaml
baseline:
compare: first_seen
window: '{{lookback_days}}d'
expected: Rare connections to proxy-associated ports. Silence means no direct proxy
traffic was observed on those ports.
prevalence:
by: device_hostname
key:
- dst_endpoint_ip
- dst_endpoint_port
rare_below: 3
reads:
- device_hostname
- dst_endpoint_ip
- dst_endpoint_port
- time
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, dst_endpoint_ip, dst_endpoint_port, COUNT(*) AS connections, MIN(time) AS first_seen FROM hb_network_connection WHERE ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND activity_id = 1 AND instr(',' || '{{proxy_ports}}' || ',', ',' || CAST(dst_endpoint_port AS TEXT) || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY 1, 2, 3 HAVING connections < 50
```
## triage-intrusion
<!-- Triage intrusion risk -->
```agent target=hunter
cite: required
context:
- evaluate-risk
- detect-phishing-patterns
- detect-proxy-connections
max_iterations: 5
objective: Determine if any host with a critical vulnerability is also showing signs
of phishing execution or multi-hop proxy C2. Use the first agent's assessment of
exposure to weight the behavioral findings.
success_criteria: A per-host verdict citing specific rows from the process and network
surfaces.
tools:
- endpoint
- network
```
## route-response
<!-- Route response -->
if~: "the triage-intrusion verdict is malicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-endpoint
indeterminate: → analyst-review
unavailable: → analyst-review (blind_spot: proxy-obfuscation)
else: → close-out
## isolate-endpoint
<!-- Isolate endpoint -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host to prevent lateral movement and further C2 communication while the analyst completes the investigation.
```
→ analyst-review
## analyst-review
<!-- Analyst review -->
```manual target=analyst
Review the agent triage findings; prioritize hosts where critical vulnerabilities intersect with rare behavioral alerts. Confirm or revert isolation actions.
```
→ close-out
## close-out
<!-- Close out -->
```manual target=analyst
Document findings, update the risk profile for the remaining holiday period, and ensure vulnerable hosts identified in the lead are scheduled for patching.
```
→ 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.