← All hunts high TLP:CLEAR Part 1 of 2

IT Support Impersonation and Remote Access

An attacker has gained interactive access by impersonating IT support via Microsoft Teams, coaxing a user into initiating an RMM session that bypasses standard perimeter controls.

Based on research by Microsoft 2026-09-24 9 steps · 3 queries T1059.001 T1071 T1218.011 T1566.003

Brief

Why this hunt?

In a recent report, Impersonating IT support: how threat actors turn a remote session into enterprise-wide access, Microsoft Threat Intelligence describes a shift in social engineering. Instead of email, adversaries use Microsoft Teams to contact users directly. They masquerade as internal helpdesk or security personnel to convince employees to launch Remote Monitoring and Management (RMM) tools. This bypasses many perimeter controls because the user initiates the outbound connection.

How the Hunt Flows

The first phase focuses on scoping through external collaboration logs. The query identifies successful sign-ins to Microsoft Teams from external domains. While many organizations allow guest access, the hunt filters for domains that do not belong to known partners. These events provide a list of users and timestamps for the initial contact.

The second phase runs two investigations in parallel. One query stacks RMM tool execution across the entire fleet to find rare software. Attackers often use tools like Quick Assist, AnyDesk, or ScreenConnect that might not be the corporate standard. The second query looks for shells like cmd.exe or PowerShell spawning directly from these RMM processes. A shell under an RMM parent almost always indicates hands-on-keyboard activity by a remote operator.

The final phase uses an automated triage agent to correlate these signals. The agent looks for a specific sequence: an external Teams authentication lead followed by the execution of a rare RMM tool and a shell spawn on the same host within a short window. This correlation reduces the noise of legitimate IT support activity and identifies the specific bridge the attacker is using.

Blind Spots

This hunt has two primary blind spots. First, if the attacker uses Teams voice calls (vishing) rather than chat, there is no text-based record of the lure. The hunt must then rely on the RMM and shell execution signals alone. Second, the hunt focuses on process execution. If an analyst cannot access network egress logs, they cannot confirm if the RMM tool successfully reached a controller, which might lead to investigating failed connection attempts.

Running the Hunt

This playbook is available as a hunt.md file. You can import it into Huntbase or any runtime that supports the hunt.md format. It uses SQLite-based queries against your authentication and process telemetry. Before running, configure your internal domains and standard RMM tool list to ensure the baseline correctly identifies anomalies in your specific environment.

In this series

Steps

  1. External Teams authentication leads

    Query · scoping

    Identify successful sign-ins to Microsoft Teams from external domains which may indicate the point of first contact from an impersonator.

    reads hb_auth_signinsql
    SELECT actor_user_name, actor_user_domain, src_endpoint_ip, dst_endpoint_name, time FROM hb_auth_signin WHERE provider = 'm365' AND status_id = 1 AND (LOWER(dst_endpoint_name) LIKE '%teams%' OR LOWER(activity_name) LIKE '%teams%') AND NOT instr(',' || '{{internal_domains}}' || ',', ',' || LOWER(actor_user_domain) || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Auth events from external domains. While many are legitimate guests, an event followed by RMM activity for that same user profile is a high-fidelity lead.

  2. Rare RMM tool execution

    Query · baseline

    Stack-count RMM tools to find specific instances that are anomalous for the environment or scoped hosts.

    reads hb_process_activitysql
    SELECT LOWER(process_name) AS rmm_tool, COUNT(DISTINCT device_hostname) AS host_count, GROUP_CONCAT(DISTINCT device_hostname) AS hosts FROM hb_process_activity WHERE instr(',' || '{{rmm_processes}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY LOWER(process_name) HAVING host_count <= 5 ORDER BY host_count ASC

    What a hit looks like. Rare RMM tools. Common corporate support tools will show many hosts; attacker-favored tools like Quick Assist on non-standard hosts will stand out.

  3. Shell spawns from RMM tools

    Query · detection candidate

    Identify administrative shells originating from RMM processes, signifying hands-on-keyboard activity.

    reads hb_process_activitysql
    SELECT device_hostname, user_name, process_name, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE instr(',' || '{{shell_processes}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND instr(',' || '{{rmm_processes}}' || ',', ',' || LOWER(parent_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. Shell processes whose parent is a legitimate RMM tool. This indicates an external operator is actively running commands on the endpoint.

  4. Triage session evidence

    Agent triage

    Correlate external auth leads with rare RMM usage and shell spawns to identify malicious interactive bridges.

  5. Route on verdict

    Decision

    Decide whether to isolate the host based on the risk of an active interactive session.

  6. Isolate host

    Response action

    Terminate the threat actor's interactive access by isolating the endpoint from the network.

  7. Review Teams chat and lure logs

    Analyst task

    Confirm the social engineering pretext through manual inspection of the collaboration record.

  8. Hunt summary and close-out

    Analyst task

    Document findings and update the RMM monitoring baseline.

Coverage

Scenario coverage

StageCoveredHow, or why not
IT Support Impersonation via Teams
T1566.003
Yes teams-external-auth, rare-rmm-execution, rmm-shell-spawns
Remote Session and MSI Delivery
T1059.001
Out of scope Belongs to the follow-on hunt focusing on MSI loaders and Node.js execution.
Node.js Implant Staging and Persistence
T1059.001
Out of scope Belongs to another part of the 'Impersonating IT support: how threat actors turn a remote session into enterprise-wide access' series.
C2 Communication and Reconnaissance
T1071 · T1041 · T1555
Out of scope Belongs to another part of the 'Impersonating IT support: how threat actors turn a remote session into enterprise-wide access' series.
Lateral Movement via WinRM
T1059.001
Out of scope Belongs to another part of the 'Impersonating IT support: how threat actors turn a remote session into enterprise-wide access' series.
Follow-on Payload Execution
T1218.011
Out of scope Belongs to another part of the 'Impersonating IT support: how threat actors turn a remote session into enterprise-wide access' series.

Blind spots

  • Needs Teams voice call recording or transcripts. Lures delivered through voice leave no text-based log of the impersonation attempt, making the initial link to the RMM session harder to prove. It would answer whether the lure was delivered entirely via voice rather than chat. Remediation: Enable recording for external tenant calls if corporate policy allows, or rely on user reporting.
  • Needs hb_network_connection with process mapping. A process that starts and fails to connect may look identical to a successful session in process logs; network telemetry confirms if hands-on activity actually occurred. It would answer whether an RMM tool successfully contacted a controller. Remediation: Ensure egress logs for RMM ports are retained and correctly attributed to process owners.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
internal_domainslist[domain]example.comThe organization's own domains; used to exclude internal collaboration from scoping.
lookback_daysnumber14Days of history to examine.
rmm_processeslist[string]quickassist.exe, remotehelp.exe, anydesk.exe, teamviewer.exe, connectwise.exe, screenconnect.exe, logmein.exe, aeroadmin.exeLegitimate remote management tool process names to monitor.
scope_hostslist[host]—List of hostnames to narrow the search; empty searches the whole estate.
shell_processeslist[string]cmd.exe, powershell.exe, pwsh.exe, wscript.exe, cscript.exeInterpreters used by attackers for hands-on activity.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Identity / sign-in telemetryidentityidentity

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A static rule for RMM tools triggers too many false positives. This hunt
  uses external collaboration as a lead and applies a prevalence baseline across the
  estate to find the specific tool instance an attacker selected, which a single rule
  cannot do.
blind_spots:
- id: vishing-audio-blindspot
  owner: Collaboration Engineering
  question: whether the lure was delivered entirely via voice rather than chat
  remediation: Enable recording for external tenant calls if corporate policy allows,
    or rely on user reporting.
  requires: Teams voice call recording or transcripts
  risk: Lures delivered through voice leave no text-based log of the impersonation
    attempt, making the initial link to the RMM session harder to prove.
  stage: initial-access-teams-vishing
- id: ephemeral-rmm-session
  owner: Network Engineering
  question: whether an RMM tool successfully contacted a controller
  remediation: Ensure egress logs for RMM ports are retained and correctly attributed
    to process owners.
  requires: hb_network_connection with process mapping
  risk: A process that starts and fails to connect may look identical to a successful
    session in process logs; network telemetry confirms if hands-on activity actually
    occurred.
coverage:
- stage: initial-access-teams-vishing
  status: covered
  steps:
  - teams-external-auth
  - rare-rmm-execution
  - rmm-shell-spawns
- reason: Belongs to the follow-on hunt focusing on MSI loaders and Node.js execution.
  stage: remote-session-msi-delivery
  status: out_of_scope
- reason: 'Belongs to another part of the ''Impersonating IT support: how threat actors
    turn a remote session into enterprise-wide access'' series.'
  stage: nodejs-implant-persistence
  status: out_of_scope
- reason: 'Belongs to another part of the ''Impersonating IT support: how threat actors
    turn a remote session into enterprise-wide access'' series.'
  stage: c2-recon-and-tasking
  status: out_of_scope
- reason: 'Belongs to another part of the ''Impersonating IT support: how threat actors
    turn a remote session into enterprise-wide access'' series.'
  stage: lateral-movement-winrm
  status: out_of_scope
- reason: 'Belongs to another part of the ''Impersonating IT support: how threat actors
    turn a remote session into enterprise-wide access'' series.'
  stage: execution-rundll32-dlls
  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: Threat actors are bypassing email security by using trusted collaboration
    platforms to bridge into interactive endpoint access. A negative result validates
    current external collaboration controls and user awareness.
  methodology: model-assisted
  trigger: intel-report
hypothesis: An attacker has gained interactive access by impersonating IT support
  via Microsoft Teams, coaxing a user into initiating an RMM session that bypasses
  standard perimeter controls.
labels:
- hunt
- attack.t1566.003
- attack.t1059.001
- attack.t1071
- attack.t1218.011
name: IT Support Impersonation and Remote Access
parameters:
  internal_domains:
    default:
    - example.com
    description: The organization's own domains; used to exclude internal collaboration
      from scoping.
    from:
      kind: manual
      observed: '2024-01-01'
      ref: analyst-scoping
    type: list[domain]
  lookback_days:
    default: '14'
    description: Days of history to examine.
    from:
      kind: manual
      observed: '2024-01-01'
      ref: standard-lookback
    type: number
  rmm_processes:
    default:
    - quickassist.exe
    - remotehelp.exe
    - anydesk.exe
    - teamviewer.exe
    - connectwise.exe
    - screenconnect.exe
    - logmein.exe
    - aeroadmin.exe
    description: Legitimate remote management tool process names to monitor.
    from:
      kind: article
      observed: '2026-09-02'
      ref: msrc-blog
    type: list[string]
  scope_hosts:
    default: []
    description: List of hostnames to narrow the search; empty searches the whole
      estate.
    from:
      kind: manual
      observed: '2024-01-01'
      ref: analyst-pivoting
    type: list[host]
  shell_processes:
    default:
    - cmd.exe
    - powershell.exe
    - pwsh.exe
    - wscript.exe
    - cscript.exe
    description: Interpreters used by attackers for hands-on activity.
    from:
      kind: manual
      observed: '2024-01-01'
      ref: general-threat-intelligence
    type: list[string]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://www.microsoft.com/en-us/security/blog/2026/09/02/impersonating-it-support-threat-actors-turn-remote-session-into-enterprise-wide-access/
    gates:
    - dry-run
    - lint
    - critic
    model: hb_google/gemini-3-flash-preview
rationale: Start with successful external Teams authentications (hb_auth_signin).
  Focus on users who do not normally collaborate with external technical tenants.
  Use identified hostnames to narrow the rmm_processes search.
references:
- name: "Microsoft Threat Intelligence \u2014 Impersonating IT support: how threat\
    \ actors turn a remote session into enterprise-wide access"
  url: https://www.microsoft.com/en-us/security/blog/2026/09/02/impersonating-it-support-threat-actors-turn-remote-session-into-enterprise-wide-access/
related:
- hunt: nodejs-implant-persistence
  reason: Once an interactive session is established, attackers deploy a Node.js implant
    for persistence; that behavior is out of scope here.
  relation: follows
scenario:
  stages:
  - name: IT Support Impersonation via Teams
    observables:
    - Microsoft Teams external tenant collaboration
    - Accept/Block prompts in Teams
    - Quick Assist connection code usage
    - 'Lures: ''Microsoft Security Update'', ''Spam Filter Update'', ''Account Verification'''
    - Vishing (voice phishing) used to layer trust
    slug: initial-access-teams-vishing
    tactic: initial-access
    techniques:
    - T1566.003
  - name: Remote Session and MSI Delivery
    observables:
    - Quick Assist or remote support tool process tree
    - PowerShell downloading MSI from cloud storage
    - msiexec.exe /qn (silent installation)
    - 'MSI filenames: ''devfix.msi'', ''Hotfix.msi'''
    slug: remote-session-msi-delivery
    tactic: execution
    techniques:
    - T1059.001
  - name: Node.js Implant Staging and Persistence
    observables:
    - Portable Node.js runtime downloaded from official distribution
    - Files staged in LocalAppData randomly named directories
    - 'Nonstandard file extensions: .tmp, .ini, .dat, .bin, .cfg'
    - HKCU Run key 'EdgeUpdate'
    - Startup folder shortcut 'EdgeUpdate.lnk'
    - Renamed Node.js binaries with original metadata 'node.exe'
    slug: nodejs-implant-persistence
    tactic: persistence
    techniques:
    - T1059.001
  - name: C2 Communication and Reconnaissance
    observables:
    - Randomized HTTPS long-polling to C2 server
    - Discovery of antivirus products and virtualization
    - ADSI (Active Directory Service Interfaces) queries
    - Screen captures encoded in Base64 and saved to temporary files
    - Host hardware and locale enumeration
    slug: c2-recon-and-tasking
    tactic: command-and-control
    techniques:
    - T1071
    - T1041
    - T1555
  - name: Lateral Movement via WinRM
    observables:
    - WinRM connections over TCP port 5985
    - Pivoting toward Domain Controllers and Certificate Authorities
    - Native Windows Remote Management execution
    slug: lateral-movement-winrm
    tactic: lateral-movement
    techniques:
    - T1059.001
  - name: Follow-on Payload Execution
    observables:
    - rundll32.exe loading threat actor-supplied DLLs
    - Short-lived cmd.exe and PowerShell child processes of Node.js
    slug: execution-rundll32-dlls
    tactic: defense-evasion
    techniques:
    - T1218.011
  summary: A human-operated campaign impersonates IT support via Microsoft Teams to
    trick users into granting remote access through tools like Quick Assist. Once
    access is established, the attackers deploy a persistent Node.js-based implant
    to perform extensive reconnaissance and move laterally via WinRM toward high-value
    infrastructure like domain controllers.
series:
  index: 1
  slug: impersonating-it-support-how-threat-actors-turn-a-remote-session-into-enterprise-wide-access
  title: 'Impersonating IT support: how threat actors turn a remote session into enterprise-wide
    access'
  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
  identity:
    category: identity
    name: Identity / sign-in telemetry
    telemetry:
    - identity
tlp: clear
type: investigation
---


# IT Support Impersonation and Remote Access

This hunt identifies the early stages of a social engineering campaign where threat actors abuse Microsoft Teams external collaboration to impersonate helpdesk personnel. The attack relies on the user voluntarily granting remote access through tools like Quick Assist or AnyDesk. The hunt begins by identifying anomalous external authentication events in Teams, then forks to identify rare RMM tool usage across the fleet and behavioral leads such as shells spawning directly from those support tools. An agent weighs the timing and prevalence of these events per host to identify the human-interactive bridge before persistent implants are deployed.

## teams-external-auth
<!-- External Teams authentication leads -->
Identify successful sign-ins to Microsoft Teams from external domains which may indicate the point of first contact from an impersonator.

```sqlite target=identity role=scoping params=(internal_domains=internal_domains, lookback_days=lookback_days)
~~~yaml
expected: Auth events from external domains. While many are legitimate guests, an
  event followed by RMM activity for that same user profile is a high-fidelity lead.
reads:
- actor_user_name
- actor_user_domain
- src_endpoint_ip
- dst_endpoint_name
- time
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-09-24'
~~~
SELECT actor_user_name, actor_user_domain, src_endpoint_ip, dst_endpoint_name, time FROM hb_auth_signin WHERE provider = 'm365' AND status_id = 1 AND (LOWER(dst_endpoint_name) LIKE '%teams%' OR LOWER(activity_name) LIKE '%teams%') AND NOT instr(',' || '{{internal_domains}}' || ',', ',' || LOWER(actor_user_domain) || ',') > 0 AND time >= datetime('now', '-{{lookback_days}} days')
```

## parallel-session-investigation
<!-- Parallel session investigation -->
parallel:
- → rare-rmm-execution
- → rmm-shell-spawns
join: → triage-agent

## rare-rmm-execution
<!-- Rare RMM tool execution -->
Stack-count RMM tools to find specific instances that are anomalous for the environment or scoped hosts.

```sqlite target=endpoint role=baseline params=(rmm_processes=rmm_processes, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Rare RMM tools. Common corporate support tools will show many hosts; attacker-favored
  tools like Quick Assist on non-standard hosts will stand out.
prevalence:
  by: device_hostname
  key:
  - process_name
  rare_below: 5
reads:
- process_name
- device_hostname
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-24'
~~~
SELECT LOWER(process_name) AS rmm_tool, COUNT(DISTINCT device_hostname) AS host_count, GROUP_CONCAT(DISTINCT device_hostname) AS hosts FROM hb_process_activity WHERE instr(',' || '{{rmm_processes}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY LOWER(process_name) HAVING host_count <= 5 ORDER BY host_count ASC
```

## rmm-shell-spawns
<!-- Shell spawns from RMM tools -->
Identify administrative shells originating from RMM processes, signifying hands-on-keyboard activity.

```sqlite target=endpoint role=detection-candidate params=(shell_processes=shell_processes, rmm_processes=rmm_processes, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Shell processes whose parent is a legitimate RMM tool. This indicates an
  external operator is actively running commands on the endpoint.
reads:
- device_hostname
- user_name
- 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-24'
~~~
SELECT device_hostname, user_name, process_name, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE instr(',' || '{{shell_processes}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND instr(',' || '{{rmm_processes}}' || ',', ',' || LOWER(parent_process_name) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## triage-agent
<!-- Triage session evidence -->
```agent target=hunter
cite: required
context:
- teams-external-auth
- rare-rmm-execution
- rmm-shell-spawns
max_iterations: 6
objective: Determine if any host shows a sequence of external Teams authentication
  followed by the execution of a rare RMM tool and subsequent shell activity within
  the same hour. Cite specific rows for all three steps.
success_criteria: A per-host verdict of malicious | suspicious | benign with cited
  times and command lines.
tools:
- endpoint
- identity
```

## route-on-verdict
<!-- Route on verdict -->
if~: "the triage verdict is malicious for at least one host based on the auth-to-RMM-to-shell chain" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → review-teams-logs
unavailable: → review-teams-logs (blind_spot: vishing-audio-blindspot)
else: → review-teams-logs

## isolate-host
<!-- Isolate host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host immediately. Revoke the user's M365/Teams session to prevent further external chat interaction.
```
→ review-teams-logs

## review-teams-logs
<!-- Review Teams chat and lure logs -->
```manual target=analyst
Examine Teams chat logs for messages from the identified external domain. Look for requests to run Quick Assist or instructions to read back codes. If vishing is suspected, interview the user to confirm if they received a voice call alongside the chat.
```
→ hunt-close-out

## hunt-close-out
<!-- Hunt summary and close-out -->
```manual target=analyst
Record the outcome. If a new RMM tool was used, update the rmm_processes parameter for future runs. Report any lack of Teams external-call logging to the platform team.
```
→ 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.