SOCLIFE
SOCLIFE

Evidence-led security analysis

Published knowledge

Search SOC//LIFE

HuntsHUNT-008

Hypothesis-led threat hunting

Hunt for Helpdesk Impersonation to Remote Access and Exfiltration

Expands external Teams support contact into remote-assistance activity, hands-on-keyboard reconnaissance, trusted application abuse, WinRM lateral movement, alternate RMM, and Rclone exfiltration.

Question

Hunt goal

One or more users may have been socially engineered by external Teams helpdesk personas into launching legitimate remote-support tooling, after which human-operated intrusion activity expanded into internal remote management and data exfiltration.

Why this hunt

Microsoft documented this intrusion chain in April 2026 and separately reported another Teams support-call compromise in March 2026, making collaboration-led remote-access abuse a current defensive problem rather than a hypothetical technique.

Data sources

Where to look

  • SaaS AuditMicrosoft Defender XDR MessageEvents representing Microsoft Teams collaboration events with sender and recipient identity context.
  • ProcessMicrosoft Defender for Endpoint process creation telemetry with user, stable process identity, parent context, path, command line, and hashes.
  • NetworkMicrosoft Defender for Endpoint network telemetry with destination, port, protocol, initiating process, device, and user context.

Search path

Hunt steps

Each search broadens the view from patient zero to related users, devices, infrastructure, and follow-on activity.
  1. Step 1First search

    Correlate external Teams support contact with remote-assistance launches

    Finding

    The first search identifies users who receive suspicious external support contact and then launch remote-assistance tools.

    This cross-domain correlation is more useful than hunting Teams messages or Quick Assist in isolation.

    View query
    Q-01First search

    Correlate external Teams support contact with remote-assistance launches

    What this checks

    Find users who received external support-themed Teams contact and then launched remote-assistance software within thirty minutes.

    KQL
    let correlation_window = 30m;
    let organization_domains = dynamic(["example.com"]);
    let support_terms = dynamic([
        "helpdesk",
        "help desk",
        "it support",
        "microsoft support",
        "security",
        "service desk"
    ]);
    
    let teams =
        MessageEvents
        | where Timestamp >= ago(1d)
        | extend Recipient=parse_json(RecipientDetails)
        | mv-expand Recipient
        | extend
            VictimAccountObjectId=tostring(Recipient.RecipientObjectId),
            VictimRecipientDisplayName=tostring(Recipient.RecipientDisplayName),
            SenderDomain=tolower(extract(@"@([^>]+)$", 1, SenderEmailAddress))
        | where isnotempty(VictimAccountObjectId)
        | where isnotempty(SenderDomain) and SenderDomain !in~ (organization_domains)
        | where SenderDisplayName has_any (support_terms)
        | project
            TeamTime=Timestamp,
            SenderEmailAddress,
            SenderDisplayName,
            SenderDomain,
            VictimRecipientDisplayName,
            VictimAccountObjectId,
            NetworkMessageId;
    
    let remote_assist =
        DeviceProcessEvents
        | where Timestamp >= ago(1d)
        | where FileName in~ ("QuickAssist.exe","AnyDesk.exe","TeamViewer.exe")
        | where isnotempty(AccountObjectId)
        | project
            AssistTime=Timestamp,
            DeviceId,
            DeviceName,
            AccountUpn,
            UserObjectId=AccountObjectId,
            AssistProcess=FileName,
            AssistCommandLine=ProcessCommandLine,
            AssistProcessUniqueId=ProcessUniqueId;
    
    
    remote_assist
    | join kind=inner teams on $left.UserObjectId == $right.VictimAccountObjectId
    | where AssistTime between (TeamTime .. TeamTime + correlation_window)
    | project TeamTime,AssistTime,DeviceName,AccountUpn,SenderEmailAddress,SenderDisplayName,SenderDomain,AssistProcess,AssistCommandLine,NetworkMessageId
    | order by AssistTime desc
    SPL
    (
        index=<teams_message_index> sourcetype=<defender_messageevents_sourcetype> earliest=-7d
    )
    OR
    (
        index=<endpoint_process_index> sourcetype=<process_events_sourcetype> earliest=-7d
    )
    | eval
        user_object_id=coalesce(user_object_id,AccountObjectId,RecipientObjectId),
        sender=lower(coalesce(sender,SenderEmailAddress)),
        sender_display=lower(coalesce(sender_display,SenderDisplayName)),
        sender_domain=lower(replace(sender,"^.*@","")),
        device=coalesce(device,DeviceName,host),
        process_name=lower(coalesce(process_name,FileName)),
        event_type=case(
            isnotnull(SenderEmailAddress),"teams",
            process_name IN ("quickassist.exe","anydesk.exe","teamviewer.exe"),"remote_assist",
            true(),"other"
        ),
        external_support=if(
            event_type="teams"
            AND sender_domain!="example.com"
            AND (
                like(sender_display,"%helpdesk%")
                OR like(sender_display,"%help desk%")
                OR like(sender_display,"%it support%")
                OR like(sender_display,"%microsoft support%")
                OR like(sender_display,"%security%")
                OR like(sender_display,"%service desk%")
            ),1,0
        )
    | where event_type!="other"
    | sort 0 user_object_id _time
    | streamstats current=f
        last(eval(if(event_type="teams" AND external_support=1,_time,null()))) as teams_time
        last(eval(if(event_type="teams" AND external_support=1,sender,null()))) as teams_sender
        last(eval(if(event_type="teams" AND external_support=1,sender_display,null()))) as teams_sender_display
        by user_object_id
    | where event_type="remote_assist" AND isnotnull(teams_time) AND _time>=teams_time AND _time<=teams_time+1800
    | table _time teams_time user_object_id device teams_sender teams_sender_display process_name ProcessCommandLine
    | sort - _time
    What to look for

    A population of collaboration-to-remote-access candidates requiring shell and endpoint review.

    Technical details
    Tested signal

    External support pretext followed by Quick Assist / AnyDesk / TeamViewer.

    Assumptions
    • MessageEvents and DeviceProcessEvents can be linked through recipient/account object ID.
    • Local organization domains are known.
    Data requirements and relevant fields
    saas audit

    Microsoft Defender XDR MessageEvents representing Microsoft Teams collaboration events with sender and recipient identity context.

    • Timestamp
    • SenderEmailAddress
    • SenderDisplayName
    • RecipientDetails
    • NetworkMessageId
    • ThreatTypes
    • DeliveryAction
    process

    Microsoft Defender for Endpoint process creation telemetry with user, stable process identity, parent context, path, command line, and hashes.

    • Timestamp
    • DeviceId
    • DeviceName
    • FileName
    • FolderPath
    • ProcessId
    • ProcessUniqueId
    • ProcessCommandLine
    • ProcessVersionInfoOriginalFileName
    • AccountUpn
    • AccountObjectId
    • AccountName
    • SHA1
    • SHA256
    • InitiatingProcessFileName
    • InitiatingProcessCommandLine
    • InitiatingProcessId
    • InitiatingProcessUniqueId
    • InitiatingProcessAccountUpn
    • InitiatingProcessAccountObjectId
    KQL schema

    Validate Microsoft Defender for Office 365 / Teams message coverage, Defender for Endpoint deployment, field population, and local retention.

    SPL schema

    Replace index/sourcetype placeholders and normalize collaboration, process, network, and account fields to the local data model.

    Limitations
    • Approved outsourced support can produce the same pattern.

    KQL uses Microsoft Defender XDR collaboration and endpoint telemetry. SPL is a normalized raw-event scaffold and requires local field mapping.

  2. Step 2Pivot

    Find remote-assistance anchored shell and reconnaissance

    Finding

    Shell and discovery commands shortly after remote assistance identify sessions that became hands-on-keyboard rather than routine user guidance.

    Support engineers can run similar commands, so ticket/provider/user verification remains essential.

    View query
    Q-02Pivot

    Find remote-assistance anchored shell and reconnaissance

    What this checks

    Search remote-assistance sessions for shells and rapid discovery within ten minutes.

    KQL
    let assist =
        DeviceProcessEvents
        | where Timestamp >= ago(14d)
        | where FileName in~ ("QuickAssist.exe","AnyDesk.exe","TeamViewer.exe")
        | project DeviceId,DeviceName,AssistTime=Timestamp,AccountObjectId,AccountUpn,AssistTool=FileName;
    let activity =
        DeviceProcessEvents
        | where Timestamp >= ago(14d)
        | where FileName in~ (
            "cmd.exe","powershell.exe","pwsh.exe","whoami.exe","hostname.exe",
            "ipconfig.exe","systeminfo.exe","nltest.exe","net.exe","net1.exe",
            "quser.exe","query.exe","tasklist.exe","sc.exe"
        )
        | project DeviceId,ActivityTime=Timestamp,AccountObjectId,FileName,ProcessCommandLine,InitiatingProcessFileName,InitiatingProcessCommandLine;
    assist
    | join kind=inner activity on DeviceId,AccountObjectId
    | where ActivityTime between (AssistTime .. AssistTime + 10m)
    | summarize
        Commands=make_set(ProcessCommandLine,50),
        Processes=make_set(FileName,30),
        FirstActivity=min(ActivityTime),
        LastActivity=max(ActivityTime)
        by DeviceName,AccountUpn,AssistTool,AssistTime
    | order by AssistTime desc
    SPL
    index=<endpoint_process_index> sourcetype=<process_events_sourcetype>
    earliest=-14d
    | eval
        device=coalesce(device,DeviceName,host),
        user_object_id=coalesce(user_object_id,AccountObjectId),
        user=lower(coalesce(user,AccountUpn)),
        process_name=lower(coalesce(process_name,FileName)),
        process_command_line=coalesce(process_command_line,ProcessCommandLine),
        event_type=case(
            process_name IN ("quickassist.exe","anydesk.exe","teamviewer.exe"),"assist",
            process_name IN (
                "cmd.exe","powershell.exe","pwsh.exe","whoami.exe","hostname.exe",
                "ipconfig.exe","systeminfo.exe","nltest.exe","net.exe","net1.exe",
                "quser.exe","query.exe","tasklist.exe","sc.exe"
            ),"activity",
            true(),"other"
        )
    | where event_type!="other"
    | sort 0 device user_object_id _time
    | streamstats current=f
        last(eval(if(event_type="assist",_time,null()))) as assist_time
        last(eval(if(event_type="assist",process_name,null()))) as assist_tool
        by device user_object_id
    | where event_type="activity" AND isnotnull(assist_time) AND _time>=assist_time AND _time<=assist_time+600
    | stats min(_time) as first_activity max(_time) as last_activity values(process_name) as processes values(process_command_line) as commands by device user assist_tool assist_time
    | convert ctime(assist_time) ctime(first_activity) ctime(last_activity)
    | sort - assist_time
    What to look for

    Remote-assistance sessions that transition rapidly into hands-on-keyboard discovery.

    Technical details
    Tested signal

    Quick Assist or RMM launch followed by command shells or common discovery utilities.

    Assumptions
    • Endpoint process telemetry covers the candidate devices.
    Data requirements and relevant fields
    process

    Microsoft Defender for Endpoint process creation telemetry with user, stable process identity, parent context, path, command line, and hashes.

    • Timestamp
    • DeviceId
    • DeviceName
    • FileName
    • FolderPath
    • ProcessId
    • ProcessUniqueId
    • ProcessCommandLine
    • ProcessVersionInfoOriginalFileName
    • AccountUpn
    • AccountObjectId
    • AccountName
    • SHA1
    • SHA256
    • InitiatingProcessFileName
    • InitiatingProcessCommandLine
    • InitiatingProcessId
    • InitiatingProcessUniqueId
    • InitiatingProcessAccountUpn
    • InitiatingProcessAccountObjectId
    KQL schema

    Validate Microsoft Defender for Office 365 / Teams message coverage, Defender for Endpoint deployment, field population, and local retention.

    SPL schema

    Replace index/sourcetype placeholders and normalize collaboration, process, network, and account fields to the local data model.

    Limitations
    • Legitimate technical support can run the same commands.

    KQL uses Microsoft Defender XDR collaboration and endpoint telemetry. SPL is a normalized raw-event scaffold and requires local field mapping.

  3. Step 3Pivot

    Sweep trusted application hosts used for side-loading

    Finding

    Unexpected execution of source-reported vendor-signed hosts can reveal side-loaded implant stages or adjacent suspicious file/network behavior.

    The filenames are source-scoped pivots and should not become global block rules.

    View query
    Q-03Pivot

    Sweep trusted application hosts used for side-loading

    What this checks

    Search the source-reported signed host executables and compare path, parent, user, hashes, and adjacent behavior.

    KQL
    DeviceProcessEvents
    | where Timestamp >= ago(7d)
    | where FileName in~ (
        "AcroServicesUpdater2_x64.exe",
        "ADNotificationManager.exe",
        "DlpUserAgent.exe"
    )
    | project
        Timestamp,
        DeviceId,
        DeviceName,
        AccountUpn,
        FileName,
        FolderPath,
        ProcessCommandLine,
        ProcessUniqueId,
        SHA1,
        SHA256,
        InitiatingProcessFileName,
        InitiatingProcessCommandLine,
        InitiatingProcessUniqueId
    | order by Timestamp asc
    SPL
    index=<endpoint_process_index> sourcetype=<process_events_sourcetype>
    earliest=-7d
    | eval
        process_name=lower(coalesce(process_name,FileName)),
        device=coalesce(device,DeviceName,host),
        user=lower(coalesce(user,AccountUpn)),
        process_path=coalesce(process_path,FolderPath),
        process_command_line=coalesce(process_command_line,ProcessCommandLine),
        process_uid=coalesce(process_uid,ProcessUniqueId),
        parent_process_name=coalesce(parent_process_name,InitiatingProcessFileName),
        parent_command_line=coalesce(parent_command_line,InitiatingProcessCommandLine)
    | where process_name IN (
        "acroservicesupdater2_x64.exe",
        "adnotificationmanager.exe",
        "dlpuseragent.exe"
    )
    | fields _time device user process_name process_path process_command_line process_uid SHA1 SHA256 parent_process_name parent_command_line
    | sort 0 _time
    What to look for

    Unexpected source-reported trusted hosts on user endpoints or unusual paths.

    Technical details
    Tested signal

    Execution of trusted application names Microsoft observed in side-loading stages.

    Assumptions
    • Source filenames are used for retrospective scoping only.
    Data requirements and relevant fields
    process

    Microsoft Defender for Endpoint process creation telemetry with user, stable process identity, parent context, path, command line, and hashes.

    • Timestamp
    • DeviceId
    • DeviceName
    • FileName
    • FolderPath
    • ProcessId
    • ProcessUniqueId
    • ProcessCommandLine
    • ProcessVersionInfoOriginalFileName
    • AccountUpn
    • AccountObjectId
    • AccountName
    • SHA1
    • SHA256
    • InitiatingProcessFileName
    • InitiatingProcessCommandLine
    • InitiatingProcessId
    • InitiatingProcessUniqueId
    • InitiatingProcessAccountUpn
    • InitiatingProcessAccountObjectId
    KQL schema

    Validate Microsoft Defender for Office 365 / Teams message coverage, Defender for Endpoint deployment, field population, and local retention.

    SPL schema

    Replace index/sourcetype placeholders and normalize collaboration, process, network, and account fields to the local data model.

    Limitations
    • Legitimate vendor installations can use these executables.

    KQL uses Microsoft Defender XDR collaboration and endpoint telemetry. SPL is a normalized raw-event scaffold and requires local field mapping.

  4. Step 4Pivot

    Find WinRM originating from ordinary user endpoints

    Finding

    WinRM from non-management endpoints toward servers or high-value systems identifies credential-backed lateral movement.

    Approved management hosts must be separated from user workstations before alerting broadly.

    View query
    Q-04Pivot

    Find WinRM originating from ordinary user endpoints

    What this checks

    Identify TCP 5985 connections where the source device is not an approved management host and the initiating context is user-driven or unusual.

    KQL
    let approved_management_devices=dynamic(["<MGMT-DEVICE-01>","<MGMT-DEVICE-02>"]);
    DeviceNetworkEvents
    | where Timestamp >= ago(14d)
    | where RemotePort == 5985
    | where DeviceName !in~ (approved_management_devices)
    | summarize
        FirstSeen=min(Timestamp),
        LastSeen=max(Timestamp),
        Targets=make_set(RemoteIP,100),
        TargetCount=dcount(RemoteIP),
        Processes=make_set(InitiatingProcessFileName,30),
        Commands=make_set(InitiatingProcessCommandLine,50),
        Users=make_set(InitiatingProcessAccountUpn,30)
        by DeviceId,DeviceName
    | order by TargetCount desc,LastSeen desc
    SPL
    index=<endpoint_network_index> sourcetype=<endpoint_network_events_sourcetype>
    earliest=-14d
    | eval
        device=coalesce(device,DeviceName,host),
        remote_ip=coalesce(remote_ip,RemoteIP,dest_ip),
        remote_port=coalesce(remote_port,RemotePort,dest_port),
        process_name=lower(coalesce(process_name,InitiatingProcessFileName)),
        process_command_line=coalesce(process_command_line,InitiatingProcessCommandLine),
        user=lower(coalesce(user,InitiatingProcessAccountUpn))
    | where remote_port=5985 AND NOT device IN ("<MGMT-DEVICE-01>","<MGMT-DEVICE-02>")
    | stats min(_time) as first_seen max(_time) as last_seen dc(remote_ip) as target_count values(remote_ip) as targets values(process_name) as processes values(process_command_line) as commands values(user) as users by device
    | convert ctime(first_seen) ctime(last_seen)
    | sort - target_count - last_seen
    What to look for

    User workstations or unexpected processes initiating WinRM toward servers, domain controllers, or other high-value assets.

    Technical details
    Tested signal

    WinRM from non-management endpoints toward internal systems.

    Assumptions
    • Approved management workstation/server populations can be defined locally.
    • DeviceNetworkEvents includes source device and initiating process.
    Data requirements and relevant fields
    network

    Microsoft Defender for Endpoint network telemetry with destination, port, protocol, initiating process, device, and user context.

    • Timestamp
    • DeviceId
    • DeviceName
    • RemoteUrl
    • RemoteIP
    • RemotePort
    • Protocol
    • LocalIP
    • LocalPort
    • InitiatingProcessFileName
    • InitiatingProcessCommandLine
    • InitiatingProcessAccountUpn
    • InitiatingProcessAccountObjectId
    • InitiatingProcessUniqueId
    KQL schema

    Validate Microsoft Defender for Office 365 / Teams message coverage, Defender for Endpoint deployment, field population, and local retention.

    SPL schema

    Replace index/sourcetype placeholders and normalize collaboration, process, network, and account fields to the local data model.

    Limitations
    • Developers and automation hosts can legitimately use WinRM.

    KQL uses Microsoft Defender XDR collaboration and endpoint telemetry. SPL is a normalized raw-event scaffold and requires local field mapping.

  5. Step 5Pivot

    Find RMM installation and uncommon remote-control tooling

    Finding

    New remote-management software or installer-backed RMM activity can establish an alternate control channel independent of the original Quick Assist session.

    RMM legitimacy depends on exact software, owner, deployment path, and target population.

    View query
    Q-05Pivot

    Find RMM installation and uncommon remote-control tooling

    What this checks

    Search for remote-management software installation or execution on systems that do not normally host it.

    KQL
    let known_remote_tools=dynamic([
        "QuickAssist.exe","AnyDesk.exe","TeamViewer.exe",
        "level.exe","level-rmm.exe"
    ]);
    DeviceProcessEvents
    | where Timestamp >= ago(14d)
    | where
        FileName in~ (known_remote_tools)
        or
        (
            FileName =~ "msiexec.exe"
            and ProcessCommandLine has_any ("http://","https://",".msi")
        )
    | summarize
        FirstSeen=min(Timestamp),
        LastSeen=max(Timestamp),
        Executions=count(),
        Devices=make_set(DeviceName,100),
        Users=make_set(AccountUpn,50),
        Commands=make_set(ProcessCommandLine,100),
        Hashes=make_set(SHA256,50)
        by FileName,ProcessVersionInfoOriginalFileName
    | order by FirstSeen desc
    SPL
    index=<endpoint_process_index> sourcetype=<process_events_sourcetype>
    earliest=-14d
    | eval
        process_name=lower(coalesce(process_name,FileName)),
        original_name=lower(coalesce(original_name,ProcessVersionInfoOriginalFileName)),
        process_command_line=coalesce(process_command_line,ProcessCommandLine),
        device=coalesce(device,DeviceName,host),
        user=lower(coalesce(user,AccountUpn))
    | where
        process_name IN ("quickassist.exe","anydesk.exe","teamviewer.exe","level.exe","level-rmm.exe")
        OR (
            process_name="msiexec.exe"
            AND (
                like(lower(process_command_line),"%http://%")
                OR like(lower(process_command_line),"%https://%")
                OR like(lower(process_command_line),"%.msi%")
            )
        )
    | stats min(_time) as first_seen max(_time) as last_seen count as executions values(device) as devices values(user) as users values(process_command_line) as commands values(SHA256) as hashes by process_name original_name
    | convert ctime(first_seen) ctime(last_seen)
    | sort - first_seen
    What to look for

    AnyDesk, TeamViewer, Level RMM, or other remote-control tooling appearing outside approved management populations.

    Technical details
    Tested signal

    Remote-management process or msiexec-driven installer on a new device population.

    Assumptions
    • The organization maintains an approved RMM inventory.
    • Process telemetry contains executable and original file names.
    Data requirements and relevant fields
    process

    Microsoft Defender for Endpoint process creation telemetry with user, stable process identity, parent context, path, command line, and hashes.

    • Timestamp
    • DeviceId
    • DeviceName
    • FileName
    • FolderPath
    • ProcessId
    • ProcessUniqueId
    • ProcessCommandLine
    • ProcessVersionInfoOriginalFileName
    • AccountUpn
    • AccountObjectId
    • AccountName
    • SHA1
    • SHA256
    • InitiatingProcessFileName
    • InitiatingProcessCommandLine
    • InitiatingProcessId
    • InitiatingProcessUniqueId
    • InitiatingProcessAccountUpn
    • InitiatingProcessAccountObjectId
    KQL schema

    Validate Microsoft Defender for Office 365 / Teams message coverage, Defender for Endpoint deployment, field population, and local retention.

    SPL schema

    Replace index/sourcetype placeholders and normalize collaboration, process, network, and account fields to the local data model.

    Limitations
    • Organizations can legitimately deploy several RMM products.

    KQL uses Microsoft Defender XDR collaboration and endpoint telemetry. SPL is a normalized raw-event scaffold and requires local field mapping.

  6. Step 6Pivot

    Hunt Rclone and cloud-sync exfiltration

    Finding

    Unapproved Rclone copy activity confirms the chain's data-transfer objective and defines the data-exposure investigation.

    Rclone should be treated as dual-use software; destination, source paths, and business owner decide the finding.

    View query
    Q-06Pivot

    Hunt Rclone and cloud-sync exfiltration

    What this checks

    Find Rclone use across the environment and prioritize copy operations with explicit config and parallel-transfer options.

    KQL
    DeviceProcessEvents
    | where Timestamp >= ago(7d)
    | where FileName =~ "rclone.exe" or ProcessVersionInfoOriginalFileName =~ "rclone.exe"
    | extend SourceReportedPattern =
        ProcessCommandLine has "copy "
        and ProcessCommandLine has "--config"
        and ProcessCommandLine has "--transfers"
        and ProcessCommandLine has "--checkers"
        and ProcessCommandLine has "--buffer-size"
    | project Timestamp,DeviceName,AccountUpn,FileName,ProcessVersionInfoOriginalFileName,FolderPath,ProcessCommandLine,SourceReportedPattern,SHA1,SHA256,InitiatingProcessFileName,InitiatingProcessCommandLine
    | order by Timestamp desc
    SPL
    index=<endpoint_process_index> sourcetype=<process_events_sourcetype>
    earliest=-7d
    | eval
        process_name=lower(coalesce(process_name,FileName)),
        original_name=lower(coalesce(original_name,ProcessVersionInfoOriginalFileName)),
        process_command_line=coalesce(process_command_line,ProcessCommandLine),
        device=coalesce(device,DeviceName,host),
        user=lower(coalesce(user,AccountUpn))
    | where process_name="rclone.exe" OR original_name="rclone.exe"
    | eval source_reported_pattern=if(
        like(lower(process_command_line),"%copy %")
        AND like(lower(process_command_line),"%--config%")
        AND like(lower(process_command_line),"%--transfers%")
        AND like(lower(process_command_line),"%--checkers%")
        AND like(lower(process_command_line),"%--buffer-size%"),
        1,0
    )
    | fields _time device user process_name original_name process_command_line source_reported_pattern SHA1 SHA256 InitiatingProcessFileName InitiatingProcessCommandLine
    | sort - _time
    What to look for

    Rclone execution by users/devices without an approved backup, migration, or synchronization role.

    Technical details
    Tested signal

    Uncommon synchronization tooling used to copy internal data toward an external remote.

    Assumptions
    • Endpoint process telemetry contains command lines and original file names.
    Data requirements and relevant fields
    process

    Microsoft Defender for Endpoint process creation telemetry with user, stable process identity, parent context, path, command line, and hashes.

    • Timestamp
    • DeviceId
    • DeviceName
    • FileName
    • FolderPath
    • ProcessId
    • ProcessUniqueId
    • ProcessCommandLine
    • ProcessVersionInfoOriginalFileName
    • AccountUpn
    • AccountObjectId
    • AccountName
    • SHA1
    • SHA256
    • InitiatingProcessFileName
    • InitiatingProcessCommandLine
    • InitiatingProcessId
    • InitiatingProcessUniqueId
    • InitiatingProcessAccountUpn
    • InitiatingProcessAccountObjectId
    KQL schema

    Validate Microsoft Defender for Office 365 / Teams message coverage, Defender for Endpoint deployment, field population, and local retention.

    SPL schema

    Replace index/sourcetype placeholders and normalize collaboration, process, network, and account fields to the local data model.

    Limitations
    • Rclone is legitimate in backup and data-engineering workflows.

    KQL uses Microsoft Defender XDR collaboration and endpoint telemetry. SPL is a normalized raw-event scaffold and requires local field mapping.

Blast radius

Wider-compromise pivots

  • Review Teams tenants/domains that repeatedly use internal IT/helpdesk display names.
  • Measure Quick Assist and RMM usage by department, user role, support provider, and ticket context.
  • Search for Consent.exe and UAC-elevation timing around remote-assistance sessions.
  • Inspect suspicious trusted-host processes for adjacent DLL creation/loading telemetry.
  • Review outbound C2 from the source-reported trusted hosts and remote-assistance foothold.
  • Pivot WinRM target hosts for wsmprovhost.exe, remote shell, service, scheduled task, or installer activity.
  • Inventory RMM products and prevent unmanaged remote-control software where possible.
  • Search other dual-use synchronization tools for unusual data-transfer behavior.
  • Harden external Teams collaboration and define a trusted internal helpdesk verification phrase/process.

Evidence threshold

What would increase confidence

  • Teams sender is external and impersonates internal support/helpdesk.
  • User did not expect or independently verify the support interaction.
  • Quick Assist or another remote tool starts shortly after the message/call.
  • cmd.exe or PowerShell follows within minutes.
  • Rapid recon begins in the first remote-access minutes.
  • Trusted vendor application runs from unexpected path/context or exhibits suspicious module/network behavior.
  • WinRM originates from the compromised user endpoint toward internal high-value systems.
  • New RMM software appears without deployment approval.
  • Rclone or similar tooling transfers business data to an unapproved external remote.

Conclusion

Result and next action

The hunt demonstrates how to connect collaboration phishing with legitimate remote-support tooling and then follow the attacker through native administration, alternate RMM, and cloud exfiltration without relying on one malware family or IOC set.

  • Contain affected endpoints and identities.
  • Terminate unauthorized remote access and lateral-movement sessions.
  • Remove attacker-deployed RMM, modules, loader state, and persistence.
  • Reset/revoke credentials used during the intrusion.
  • Scope every WinRM target and downstream execution event.
  • Identify Rclone source paths, remote storage, and transferred data.
  • Block confirmed malicious infrastructure and enforce approved remote-support tooling.
  • Restrict WinRM to management workstations and authorized administrators.
  • Review Teams external access and train users to independently verify unsolicited IT support.

The hunt follows the attacker from a collaboration platform into endpoint and network administration.

It begins with external support impersonation and remote-assistance launches, then measures the first shell/recon activity, source-reported trusted application hosts, WinRM from ordinary endpoints, new RMM software, and Rclone.

The point is not to classify Quick Assist, WinRM, msiexec, RMM, or Rclone as malicious software. The defensive value comes from when those legitimate tools appear, who initiated them, where they run, and what they do next.

Context

ATT&CK and limits

Behavior mapping

MITRE ATT&CK

This mapping describes the valid-account behavior examined by the Hunt. It does not prove token theft, attribution, or technique-wide coverage.

Review boundary

Sources and limits

The conclusion stays bounded to the stated scope and available logs.