Back to Intelligence

SynkLoader Malware via Microsoft Teams Phishing: Detection, Hunting, and Hardening Guide

SA
Security Arsenal Team
August 22, 2026
14 min read

A previously undocumented malware family tracked as SynkLoader is being actively distributed through Microsoft Teams social engineering campaigns. The endgame is credential theft: once the loader establishes a foothold, it presents victims with a convincing fake lock screen that harvests their Windows credentials as they "re-authenticate."

This campaign matters to every organization running Teams with external collaboration enabled — which is most of you. The attack doesn't exploit a software vulnerability in Microsoft Teams itself. It exploits the trust model of enterprise collaboration platforms: users have been conditioned to accept chat messages and calls from "IT support" inside Teams, and attackers are abusing that conditioned trust at scale. This is the same playbook we saw mature through 2024–2025 with vishing-driven ransomware intrusions (help desk impersonation leading to Quick Assist sessions and payload delivery), and SynkLoader shows the tradecraft continuing to evolve into 2026 with a dedicated loader family and a novel credential-harvesting mechanism.

If your SOC isn't hunting for Teams-initiated social engineering and the execution artifacts these campaigns leave behind, you are likely blind to this intrusion vector.


Technical Analysis

Attack Chain (Defender's View)

Based on the reported campaign, the intrusion follows this general sequence:

  1. Initial contact via Microsoft Teams. The threat actor initiates contact with target employees through Teams chat or calls, typically impersonating internal IT support or help desk staff. These campaigns rely on Teams' external collaboration features — the attacker operates from an external tenant and either messages users directly (if external access is permissive) or lures users via meeting invites and follow-on chat.
  2. Social engineering into execution. The victim is convinced to run a payload — commonly under the pretext of installing a "fix," "update," or support tool. In comparable Teams campaigns we've responded to, this involves scripted PowerShell, a dropped DLL, or a remote support tool abused for payload delivery.
  3. SynkLoader staging. The loader executes, establishes persistence, and pulls down or decrypts its credential-harvesting component. Loader families of this class typically favor living-off-the-land execution (rundll32, regsvr32, mshta) or DLL sideloading to minimize the on-disk footprint.
  4. Fake lock screen credential theft. The malware renders a full-screen fake Windows lock screen. The victim, believing their session locked, types their password — which is captured and exfiltrated to attacker-controlled infrastructure. This is a high-yield technique: it harvests domain credentials in plaintext without touching LSASS, neatly sidestepping Credential Guard and most EDR credential-theft detections that focus on memory access.

Why the Fake Lock Screen Technique Is Dangerous

From a detection-engineering standpoint, this is the most interesting part of the campaign. Traditional credential-theft detection focuses on LSASS access ( Mimikatz-style), comsvcs.dll dumps, and SAM/SECURITY hive access. A fake lock screen requires none of that. It's pure UI deception — a full-screen, topmost window that mimics the Windows lock screen. Observable artifacts are limited to:

  • The loader's process execution and persistence mechanism
  • An unusual process creating a full-screen topmost window
  • Outbound network connections from the loader process when harvested credentials are exfiltrated

This means your detection strategy must concentrate on the delivery and staging stages, not the credential capture itself. By the time the lock screen renders, the payload is already resident.

Exploitation Status

  • Active, in-the-wild distribution via Teams social engineering campaigns.
  • No CVE is associated with this campaign — it abuses legitimate platform functionality and user trust, not a software flaw. There is nothing to patch in the traditional sense; mitigation is configuration and detection-driven.
  • Loader families like SynkLoader are frequently precursors to follow-on payloads (infostealers, RATs, ransomware staging). Treat any confirmed SynkLoader execution as a full incident, not a malware cleanup ticket.

Blast Radius Assumptions for IR

If you confirm SynkLoader execution on an endpoint, assume:

  • The user's domain credentials are compromised (they typed them into the fake lock screen).
  • Any credentials stored in the browser or reachable session tokens on that host may also be exposed.
  • The attacker may have established persistence and secondary payloads — loader families rarely operate alone.

Detection & Response

The detections below target the observable behaviors of this campaign: Teams processes spawning script interpreters or unsigned payloads, persistence created by loader-type processes, and suspicious full-screen overlay processes with outbound connections. Tune thresholds to your environment before production deployment.

Sigma Rules

YAML
---
title: Microsoft Teams Spawning Script Interpreter or LOLBIN
id: 4c1f8e2a-7b3d-4e5f-9a6c-2d8b1f4e7a9c
status: experimental
description: Detects Microsoft Teams or Teams-related processes spawning PowerShell, cmd, mshta, rundll32, or regsvr32. Teams social engineering campaigns such as SynkLoader frequently trick users into executing payloads that chain off the Teams process or a browser/support-tool child process spawned during the interaction.
references:
  - https://www.bleepingcomputer.com/news/security/new-synkloader-malware-pushed-in-microsoft-teams-phishing-campaign/
  - https://attack.mitre.org/techniques/T1566/
  - https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/02/14
tags:
  - attack.initial_access
  - attack.execution
  - attack.t1566
  - attack.t1059
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\ms-teams.exe'
      - '\Teams.exe'
      - '\msedgewebview2.exe'
  selection_child:
    Image|endswith:
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\cmd.exe'
      - '\mshta.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\wscript.exe'
      - '\cscript.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Rare legitimate Teams update or diagnostics activity; validate against signed parent/child pairs and software inventory
level: high
---
title: Loader-Style Persistence via Run Key from User-Writable Path
id: 8e2b5d1f-3c7a-4f9e-b6d2-1a5c8e4f7b3d
status: experimental
description: Detects registry Run key persistence entries pointing to executables in user-writable locations (AppData, Temp, Public, ProgramData with unusual subpaths). SynkLoader-class loaders commonly establish persistence from these paths to survive reboot before rendering the credential-harvesting lock screen.
references:
  - https://www.bleepingcomputer.com/news/security/new-synkloader-malware-pushed-in-microsoft-teams-phishing-campaign/
  - https://attack.mitre.org/techniques/T1547/001/
author: Security Arsenal
date: 2026/02/14
tags:
  - attack.persistence
  - attack.t1547.001
logsource:
  category: registry_set
  product: windows
detection:
  selection_key:
    TargetObject|contains:
      - '\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
      - '\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
  selection_path:
    Details|contains:
      - '\AppData\Local\'
      - '\AppData\Roaming\'
      - '\Temp\'
      - '\Users\Public\'
      - '\ProgramData\'
  filter_known_good:
    Image|endswith:
      - '\OneDrive.exe'
      - '\Teams.exe'
      - '\ms-teams.exe'
      - '\Spotify.exe'
      - '\Discord.exe'
      - '\slack.exe'
  condition: selection_key and selection_path and not filter_known_good
falsepositives:
  - Legitimate per-user applications that self-register in Run keys; maintain an allowlist of signed, approved per-user software
level: medium
---
title: Unsigned Process Making Outbound Connection Shortly After User Context Execution
id: 6f3a9c2e-5d1b-4a8f-9e7c-3b2d6f1a8e5c
status: experimental
description: Detects network connections from unsigned or newly observed executables running from user-writable directories. Loader families such as SynkLoader beacon and exfiltrate harvested credentials from processes residing in AppData or similar paths.
references:
  - https://www.bleepingcomputer.com/news/security/new-synkloader-malware-pushed-in-microsoft-teams-phishing-campaign/
  - https://attack.mitre.org/techniques/T1071/001/
  - https://attack.mitre.org/techniques/T1041/
author: Security Arsenal
date: 2026/02/14
tags:
  - attack.command_and_control
  - attack.exfiltration
  - attack.t1071.001
  - attack.t1041
logsource:
  category: network_connection
  product: windows
detection:
  selection:
    Image|contains:
      - '\AppData\'
      - '\Users\Public\'
      - '\ProgramData\'
      - '\Temp\'
    DestinationPort:
      - 443
      - 80
      - 8443
      - 8080
  filter_browsers:
    Image|endswith:
      - '\chrome.exe'
      - '\msedge.exe'
      - '\firefox.exe'
      - '\brave.exe'
      - '\ms-teams.exe'
      - '\Teams.exe'
  condition: selection and not filter_browsers
falsepositives:
  - Per-user installed legitimate applications (Slack, Discord, game launchers); enrich with file signature status and prevalence before triage
level: medium

KQL — Microsoft Sentinel / Defender Hunting

This query hunts the core delivery pattern: Teams processes spawning scripting engines or LOLBINs, correlated with subsequent persistence and network activity. Run it across your fleet over the past 14 days.

KQL — Microsoft Sentinel / Defender
let Lookback = 14d;
// Stage 1: Teams process spawning script interpreters or LOLBINs
let SuspiciousTeamsChildren = DeviceProcessEvents
| where Timestamp > ago(Lookback)
| where InitiatingProcessFileName has_any ("ms-teams.exe", "Teams.exe", "msedgewebview2.exe")
| where FileName has_any ("powershell.exe", "pwsh.exe", "cmd.exe", "mshta.exe", "rundll32.exe", "regsvr32.exe", "wscript.exe", "cscript.exe")
| project TeamsChildTime = Timestamp, DeviceName, DeviceId, AccountName, ChildProcess = FileName, ChildCmd = ProcessCommandLine, ChildSHA256 = SHA256, FolderPath;
// Stage 2: Persistence created on the same device within 4 hours
let PersistenceEvents = DeviceRegistryEvents
| where Timestamp > ago(Lookback)
| where RegistryKey has_any ("\\CurrentVersion\\Run", "\\CurrentVersion\\RunOnce")
| where RegistryValueData has_any ("\\AppData\\", "\\Users\\Public\\", "\\Temp\\", "\\ProgramData\\")
| project PersistTime = Timestamp, DeviceName, RegistryKey, RegistryValueName, RegistryValueData, InitiatingProcessFileName, InitiatingProcessCommandLine;
SuspiciousTeamsChildren
| join kind=inner PersistenceEvents on DeviceName
| where PersistTime between (TeamsChildTime .. (TeamsChildTime + 4h))
| project DeviceName, AccountName, TeamsChildTime, ChildProcess, ChildCmd, ChildSHA256, PersistTime, RegistryKey, RegistryValueName, RegistryValueData
| order by TeamsChildTime desc

Supplement with a network exfiltration hunt for processes running out of user-writable paths:

KQL — Microsoft Sentinel / Defender
let Lookback = 7d;
DeviceNetworkEvents
| where Timestamp > ago(Lookback)
| where InitiatingProcessFolderPath has_any ("\\AppData\\", "\\Users\\Public\\", "\\Temp\\")
| where InitiatingProcessFileName !in~ ("chrome.exe", "msedge.exe", "firefox.exe", "ms-teams.exe", "teams.exe", "onedrive.exe", "spotify.exe", "slack.exe", "discord.exe")
| where RemotePort in (443, 80, 8443, 8080)
| summarize Connections = count(), RemoteIPs = make_set(RemoteIP, 20), FirstSeen = min(Timestamp), LastSeen = max(Timestamp)
    by DeviceName, InitiatingProcessFileName, InitiatingProcessFolderPath, InitiatingProcessSHA256
| where Connections > 5
| order by FirstSeen desc

Velociraptor VQL

This artifact hunts for processes executing from user-writable paths with active network connections — the classic loader residency pattern — and enumerates Run-key persistence pointing to the same locations.

VQL — Velociraptor
-- SynkLoader-style hunt: suspicious processes + persistence from user-writable paths
LET procs = SELECT Pid, Name, CommandLine, Exe, Username, CreateTime
FROM pslist()
WHERE Exe =~ '(?i)\\\\(AppData|Users\\\\Public|Temp|ProgramData)\\\\'
  AND Name !~ '(?i)(onedrive|teams|ms-teams|spotify|slack|discord|chrome|msedge|firefox)\\.exe'

LET conns = SELECT Pid, Name, RemoteAddr, RemotePort, Status
FROM netstat()
WHERE Status = 'ESTABLISHED' AND RemotePort IN (80, 443, 8080, 8443)

LET suspicious_net = SELECT * FROM conns
WHERE Pid IN (SELECT Pid FROM procs)

LET runkeys = SELECT Name, Data, KeyPath
FROM glob(globs='HKEY_USERS\\*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run*', accessor='registry')
WHERE Data =~ '(?i)(AppData|Users\\\\Public|Temp)'

SELECT * FROM procs
UNION ALL
SELECT NULL AS Pid, 'RUNKEY: ' + Name AS Name, Data AS CommandLine, KeyPath AS Exe, NULL AS Username, NULL AS CreateTime FROM runkeys

Remediation and Hardening Script

This PowerShell script (1) reports Teams external access configuration so you can validate federation is scoped to approved domains, (2) sweeps endpoints for Run-key persistence in user-writable paths, and (3) flags recently created executables in those paths. Run the audit portions via your RMM or as a scheduled task; run the Teams tenant configuration with the MicrosoftTeams PowerShell module as a Teams admin.

PowerShell
# =============================================
# SynkLoader / Teams Social Engineering Hardening & Sweep
# Run SECTION 1 as Teams Admin | SECTIONS 2-3 on endpoints (elevated)
# =============================================

# ---------- SECTION 1: Teams External Access Audit (Tenant Admin) ----------
# Requires: Install-Module MicrosoftTeams; Connect-MicrosoftTeams
# Goal: confirm external chat is restricted to an allowlist, not open federation.

Get-CsTenantFederationConfiguration | Select-Object AllowFederatedUsers, AllowedDomains, AllowPublicUsers | Format-List

# HARDENING: If AllowFederatedUsers is $true with no allowlist, restrict to approved partner domains.
# Replace 'partnerdomain.com' with your actual approved external domains.
# $allowed = New-CsEdgeAllowList -AllowedDomain @(New-CsEdgeDomainPattern -Domain "partnerdomain.com")
# Set-CsTenantFederationConfiguration -AllowFederatedUsers $true -AllowedDomains $allowed
# Disable communication with consumer (public) Teams/Skype users:
# Set-CsTenantFederationConfiguration -AllowPublicUsers $false

# OPTIONAL STRONGER CONTROL: Block all inbound external chat at the user-policy layer
# and require external collaboration to happen in shared channels only.
# Set-CsExternalAccessPolicy -Identity "Global" -EnableFederationAccess $false

# ---------- SECTION 2: Endpoint Persistence Sweep ----------
# Flags Run/RunOnce entries pointing to user-writable paths (loader-style persistence).

$suspiciousPaths = 'AppData|Users\\Public|\\Temp\\|ProgramData'
$runKeyLocations = @(
    'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
    'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce',
    'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
    'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
)
$allowlist = 'OneDrive|Teams|Spotify|Slack|Discord'  # tune per environment

foreach ($key in $runKeyLocations) {
    if (Test-Path $key) {
        Get-ItemProperty -Path $key | Get-Member -MemberType NoteProperty | ForEach-Object {
            $value = (Get-ItemProperty -Path $key -Name $_.Name).($_.Name)
            if ($value -match $suspiciousPaths -and $value -notmatch $allowlist) {
                Write-Host "[SUSPICIOUS PERSISTENCE] $key :: $($_.Name) = $value" -ForegroundColor Red
            }
        }
    }
}

# Also enumerate per-user hives for non-interactive coverage
Get-ChildItem 'Registry::HKEY_USERS' | Where-Object { $_.Name -match 'S-1-5-21' } | ForEach-Object {
    $userRun = "Registry::$($_.Name)\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
    if (Test-Path $userRun) {
        Get-ItemProperty -Path $userRun | Get-Member -MemberType NoteProperty | ForEach-Object {
            $value = (Get-ItemProperty -Path $userRun -Name $_.Name).($_.Name)
            if ($value -match $suspiciousPaths -and $value -notmatch $allowlist) {
                Write-Host "[SUSPICIOUS USER PERSISTENCE] $userRun :: $($_.Name) = $value" -ForegroundColor Red
            }
        }
    }
}

# ---------- SECTION 3: Recently Created Executables in User-Writable Paths ----------
# Loader payloads typically land within the last 14 days before execution.

$cutoff = (Get-Date).AddDays(-14)
$scanPaths = @("$env:LOCALAPPDATA", "$env:APPDATA", "C:\Users\Public", "C:\ProgramData")
foreach ($path in $scanPaths) {
    if (Test-Path $path) {
        Get-ChildItem -Path $path -Recurse -Include *.exe, *.dll, *.ps1, *.hta, *.js -ErrorAction SilentlyContinue |
            Where-Object { $_.CreationTime -gt $cutoff } |
            ForEach-Object {
                $sig = Get-AuthenticodeSignature $_.FullName
                if ($sig.Status -ne 'Valid') {
                    Write-Host "[UNSIGNED NEW FILE] $($_.FullName) | Created: $($_.CreationTime) | Sig: $($sig.Status)" -ForegroundColor Yellow
                }
            }
    }
}

# ---------- SECTION 4: Quick Win — Alert on the Sweep ----------
# Pipe output to your SIEM: wrap sections 2-3 in a scheduled task that logs to the
# Windows Event Log (or forward stdout to your RMM) so SOC gets findings centrally.

Remediation

Because SynkLoader abuses legitimate Teams functionality and user trust rather than a patchable vulnerability, remediation is a combination of tenant configuration, user controls, and incident response discipline.

1. Lock Down Teams External Access (Highest Priority)

  • Restrict external federation to an allowlist of approved partner domains (Set-CsTenantFederationConfiguration -AllowedDomains). Open federation with "any external tenant" is the single biggest enabler of this campaign class.
  • Disable communication with consumer Teams accounts (-AllowPublicUsers $false). There is almost never a business case for employees receiving chat from consumer accounts.
  • Prefer Teams shared channels for partner collaboration over ad-hoc external chat — shared channels give you auditability and scoped membership.
  • Audit which users have been contacted by external tenants in the past 90 days (Teams admin center → external access reports, or Microsoft 365 audit logs filtered on external chat events) and prioritize those users for awareness outreach and endpoint sweeps.

2. Disrupt the Delivery Stage

  • Block or heavily restrict remote support tooling (Quick Assist, AnyDesk, TeamViewer, ScreenConnect) except for explicitly authorized IT use. Teams vishing campaigns routinely chain these tools for payload delivery. Use AppLocker or WDAC policies to enforce this.
  • Constrain PowerShell and script execution for standard users: enforce Constrained Language Mode via WDAC/AppLocker, enable Script Block Logging and Module Logging, and alert on -enc, -w hidden, and IEX-style invocations.
  • Mark-of-the-Web enforcement: ensure SmartScreen and MOTW propagation are enabled so downloaded executables carry zone identifiers your EDR and users can evaluate.

3. Contain the Credential-Theft Impact

  • The fake lock screen bypasses LSASS-focused protections — but phishing-resistant MFA (FIDO2/passkeys) blunts the value of stolen passwords for anything beyond local/domain auth. Accelerate FIDO2 rollout for remote access, VPN, and M365.
  • Enforce Windows Hello for Business so users rarely type domain passwords at all — a fake lock screen prompt becomes anomalous behavior in a Hello-for-Business environment.
  • If SynkLoader execution is confirmed: immediately reset the affected user's credentials, revoke all session tokens (M365, VPN, IdP), and review sign-in logs for the window between execution and reset. Do not treat this as a simple malware remediation — treat it as confirmed credential compromise.

4. IR Playbook Additions

  • For any endpoint with confirmed loader execution: collect memory and triage for secondary payloads before reimaging. Loaders are delivery vehicles; assume follow-on tooling.
  • Pull Teams chat/call logs for the affected user to identify the impersonating account and external tenant — report the tenant to Microsoft and add it to your federation blocklist.
  • Hunt fleet-wide using the KQL and VQL above; one successful lure usually means dozens of attempted contacts.

5. User Awareness — Targeted, Not Generic

Generic phishing training won't move the needle here. Brief your workforce specifically: internal IT will never initiate contact through Teams chat from an "external" account, and no legitimate support process requires you to run scripts or install tools from a chat link. Give users a one-click path to report suspicious Teams messages and make sure the SOC actually triages those reports quickly.


Bottom Line

SynkLoader is a reminder that the most effective intrusion vector in 2026 remains a well-crafted conversation. The fake lock screen is clever because it harvests credentials without triggering the telemetry most SOCs rely on — which means your defense has to live at the delivery and staging layers: Teams tenant configuration, execution control, persistence monitoring, and phishing-resistant authentication. Deploy the detections above, audit your external access posture this week, and treat any confirmed execution as full credential compromise.

Related Resources

Security Arsenal Incident Response Services AlertMonitor Platform Book a SOC Assessment incident-response Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.