SynkLoader — Microsoft Teams IT-Helpdesk Impersonation Loader
Executive Summary
SynkLoader is a newly identified modular malware loader first compiled around 2026-07-28 and publicly reported by Expel, BleepingComputer, and others between 2026-08-19 and 2026-08-24. Expel states it discovered the family when EDR flagged a scheduled task in a customer environment on 2026-08-18, after attackers impersonating an "IT Service Desk" contacted the victim over Microsoft Teams and talked them into running an MSI hosted on Microsoft Azure Blob Storage.
The attacker's objective is broader than a single credential grab: the loader combines Python, PowerShell, C#, and C++ components into a toolkit that (1) profiles the host and Active Directory environment, (2) establishes COM-registered scheduled-task persistence, (3) phishes the user's plaintext Windows password with a fake full-screen lock screen, and (4) hands the operator a reverse-proxy pivot, a VNC-style remote-desktop module, and an interactive PowerShell shell — all reachable over a single ChaCha20-encrypted C2 channel that accepts and executes arbitrary Python code sent from the server. The heavy, unprompted AD-profiling focus (domain name, AD computer count, running services) combined with a full "hands-on-keyboard" toolkit is consistent with initial-access-as-a-service or a ransomware-precursor operation rather than a simple credential stealer.
The single highest-value defensive angle is the initial-access step itself: the entire chain requires a user to (a) accept an external Teams contact impersonating IT and (b) run an MSI they downloaded themselves. Teams external-access hardening and AppLocker/WDAC controls on unsigned executables launched from user-writable paths cut off the chain before any of the seven modules ever load. A close second is the fake lock screen's core weakness — it is a borderline GUI window, not a real Secure Desktop, so enforcing genuine Ctrl+Alt+Del (disabling the "do not require CTRL+ALT+DEL" policy) makes PhishLocker structurally unable to intercept the real credential prompt.
Defender priority: this chain is stoppable at initial access (Teams external-contact + unsigned-MSI/script execution controls) and again at the credential-phish step (mandatory Ctrl+Alt+Del) with two policy changes that ship in Section 13 as ready-to-deploy playbooks — treat both as this week's priority over building detections for every downstream module.Source Review & Web Hunter Notes
Eight sources were fetched this session; five were the task's named primary sources, three were supplementary corroboration pulled up during research. Full fetched text (or, where noted, the best-available reconstruction) is saved verbatim in SynkLoader-Hunt-sources/ for the provenance gate.
| Tier | Source | Key Finding | Carry Forward |
|---|---|---|---|
| Primary | Expel — "when you throw in everything but the kitchen sink" | Original research. Confirms 3 hardcoded C2 domains, ChaCha20 beacon protocol with modified Sigma constants, PDB path C:\Users\genry\...\pwshnewdll.pdb, and the caveat that per-infection hashes are low-value IOCs. Direct page fetch failed 5x (tool returned a truncated stub) — content reconstructed from search-engine snippet quotes; flagged incomplete. | Yes (partial) |
| Primary | BleepingComputer (Bill Toulas, 2026-08-21) | Names all 7 modules, confirms Alt+Tab bypass of the fake lock screen, MSI/Azure delivery mechanism. | Yes |
| Primary | GBHackers (Mayura Kathir, 2026-08-24) | Confirms the same 3 C2 domains as Expel; independently surfaces the "genry" developer-account artifact. | Yes |
| Secondary | dev.to (Anoymask, 2026-08-22, recap of Expel) | Confirms file names (cleaner.ps1, archive6.zip, ss.py) and filereserve.blob.core.windows.net. Reports 2 different C2 domains (dondermicapp.net, aroclenetapp.net) not seen in either primary source — see discrepancy note below. | Partial |
| Secondary | WindowsReport | Most specific source for the exact drop path (%LocalAppData%\PowershellCleaner\script) and the AES-CBC/hex/Base64 in-memory execution chain. Direct fetch returned HTTP 403 twice; reconstructed from search snippets. | Yes (partial) |
| Secondary | We Fix PC (reblog) | Corroborates module behavior list. Also surfaced an unverified researcher attribution — see anomaly note below. | Partial |
| Secondary | News4Hackers | Corroborates the "hashes are unique per infection" evasion note and defensive guidance. | Partial |
| Aggregator | OffSeq Threat Radar / AlienVault OTX pulse | Independently corroborates 2 of 4 user-supplied SHA256 hashes (331.msi, archive6.zip) exactly. Its MITRE ID list and 2 extra hashes were not independently validated and are not used in this pack. | Partial |
Discrepancy flagged during research
The dev.to recap lists C2 domains tripinupdate.net, dondermicapp.net, aroclenetapp.net, while both primary sources (Expel directly, and GBHackers independently) list neversoftmain[.]net, rootfarmapp[.]net, tripinupdate[.]net — matching only on tripinupdate.net. Per this pipeline's dedupe-before-blocking discipline, the two dev.to-only domains are not promoted to the hard Falcon IOC-Management CSV; they are documented here as single-secondary-source and unconfirmed against the primary research.
Anomalous / suspicious content encountered
No content in any fetched source contained text addressed to an AI assistant, prompt-injection attempts, or instructions trying to direct this pipeline's actions — all fetched text was analyzed strictly as threat intelligence.
One accuracy concern was found: a reblog (We Fix PC) attributed the research to "Security researcher Marcus Hutchins (Expel)." Marcus Hutchins is a real, well-known researcher, but no other source — including the reconstructed Expel snapshot itself — names him as author or affiliates him with Expel. This claim is not used anywhere in this pack; it is recorded here only as an anomaly encountered during research.
Two of five requested primary sources (Expel, WindowsReport) could not be directly fetched as full pages — Expel's page returned a truncated stub through the fetch tool on every attempt, and WindowsReport returned HTTP 403. Both were reconstructed from verbatim search-engine snippets and are flagged incomplete in their saved snapshot files. Every IOC in Section 10's hard blocklist is independently corroborated by at least one other source in the set.Hunt Brief & Attack Chain
Hunt hypothesis set (8), ordered by fidelity: H1 MSI/PowerShell delivery chain (high) · H2 randomized-AppData Python runtime launch (high) · H3 fake VC++ runtime DLL write (high) · H4 COM-registered scheduled task (medium) · H5 confirmed C2 domain resolution (high) · H6 ChaCha20 beacon cadence (medium) · H7 GUI-toolkit load as a PhishLocker proxy (low — documented telemetry gap) · H8 internal-host pivot fan-out (medium).
| Step | Telemetry | Hunt Angle |
|---|---|---|
| 1. Teams DM impersonating IT helpdesk from an external/spoofed tenant | Teams/M365 audit logs (not Falcon-visible) | Native audit hunt only — Section 7 |
| 2. Victim downloads & runs "PowershellCleaner" MSI from filereserve.blob.core.windows.net | ProcessRollup2 (msiexec.exe), network/proxy logs | Q1 |
| 3. MSI extracts archive6.zip + cleaner.ps1 to %LocalAppData%\PowershellCleaner\script; cleaner.ps1 runs via hidden PowerShell, Base64/AES-CBC/hex reconstruction, Invoke-Expression in-memory | ProcessRollup2 (powershell.exe) | Q1 |
| 4. cleaner.ps1 creates a random 16-char dir under %AppData% and launches bundled pythonw.exe | ProcessRollup2 (pythonw.exe) | Q2 |
| 5. ss.py Python loader chain-loads a second Python loader, which loads a C# module (pwshnewdll) from a DLL to run PowerShell commands | ImageHash / ProcessRollup2 | Q2, native pivot |
| 6. Profiling module masquerades as msvcp150.dll (CPython-loaded); gathers hostname, user, privilege, processes, services, AD domain name, AD computer count | PeFileWritten | Q3 |
| 7. Persistence module masquerades as msvcp160.dll; manually maps a native DLL into memory; registers a Task Scheduler COM task (logon + daily 10:00) | PeFileWritten, ScheduledTaskRegistered | Q3, Q4 |
| 8. Loader beacons every 90–120s with ChaCha20-encrypted JSON to 1 of 3 hardcoded C2 domains; server can send arbitrary Python for in-memory exec() | DnsRequest, NetworkConnectIP4 | Q5, Q6 |
| 9. PhishLocker deploys a fake full-screen Windows 11 lock screen (borderline GUI, not Secure Desktop) to capture the plaintext account password | No direct Falcon signal for "foreground fullscreen window" | Q7 (weak proxy) — documented gap |
| 10. TrafficRedirector turns the host into a reverse proxy for internal pivot / IP-allowlist bypass | NetworkConnectIP4 | Q8 |
| 11. StreamMaster (VNC) and Interactive Shell (RAT) give hands-on-keyboard control, riding the same C2 channel | Same channel as step 8; child-process pivot from Q2/Q5/Q6 hits | Covered indirectly — see Section 15 |
Consolidated IOC Table
| Type | Value | Confidence | Action | Context | Expiry |
|---|---|---|---|---|---|
| domain | neversoftmain[.]net | high | detect | Hardcoded C2, confirmed by Expel (primary) + GBHackers independently | 2027-02-24 |
| domain | rootfarmapp[.]net | high | detect | Hardcoded C2, confirmed by Expel (primary) + GBHackers independently | 2027-02-24 |
| domain | tripinupdate[.]net | high | detect | Hardcoded C2, confirmed by all sources incl. dev.to | 2027-02-24 |
| domain | dondermicapp.net | low | enrich | Unconfirmed — single secondary source (dev.to) only; contradicts primary source domain list. Not blocklisted; investigate-only if seen. | 2026-09-24 |
| domain | aroclenetapp.net | low | enrich | Unconfirmed — same caveat as above | 2026-09-24 |
| hosting | filereserve.blob.core.windows.net | medium | hunt | Observed hosting the "PowershellCleaner" MSI. Shared Azure infra — do not blanket-block *.blob.core.windows.net; hunt for this specific storage account/path in proxy logs | 2026-11-24 |
| sha256 | 151d2a7f52f047638ca8ad80c859c6bfe04d7510fb10933817fa0e3ba5d07a11 | high | detect | 331.msi installer; corroborated independently by a secondary OTX pulse mirroring Expel's research | 2027-02-24 |
| sha256 | 209f69a6ca859f05c954096b30391a43fda33c9ed264dfdccf806697f04b06a8 | high | detect | archive6.zip; corroborated independently by the same OTX pulse | 2027-02-24 |
| sha256 | 80f08360ba768b152b71abb1cab557f552a13de18c83fe8e6396a197feec9185 | medium | hunt | cleaner.ps1; single-source (research seed), not independently corroborated this session. Expel states module hashes are unique per infection — treat as reference/example only, not a durable blocklist entry | 2026-11-24 |
| sha256 | d150c70d2732df17aa77991b9ebf4c896f044445e900978581d9598dfa5dc98c | medium | hunt | ss.py; same caveat as cleaner.ps1 above | 2026-11-24 |
| file path | %LocalAppData%\PowershellCleaner\script\ (archive6.zip, cleaner.ps1) | high | hunt | MSI drop/extraction path | 2026-11-24 |
| file path pattern | %AppData%\(Roaming|Local)\<16 random alphanumeric chars>\ | high | hunt | Randomized staging directory for the Python runtime and modules | 2026-11-24 |
| file name | msvcp150.dll (fake VC++ runtime, profiling module) | high | hunt | Only suspicious when written/loaded outside System32/SysWOW64/legit redist paths | 2026-11-24 |
| file name | msvcp160.dll (fake VC++ runtime, persistence module) | high | hunt | Same caveat as above | 2026-11-24 |
| file name | ss.py (Python loader) | medium | hunt | Filename-only signal, low specificity alone; combine with path/parent | 2026-11-24 |
| PDB path / artifact | C:\Users\genry\source\repos\pwshnewdll\x64\Release\pwshnewdll.pdb | medium | pivot | Developer debug-path artifact left in the C# module; attribution lead, not a detection signal | 2026-09-24 |
| process | pythonw.exe launched from a randomized AppData subdirectory | high | hunt | Bundled Python runtime, allows execution without a system Python install | 2026-11-24 |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoint (process/file/network) | ProcessRollup2, SyntheticProcessRollup2, PeFileWritten, NewExecutableWritten, ImageHash, DnsRequest, NetworkConnectIP4, ScheduledTaskRegistered | Critical | Low — all standard Falcon sensor telemetry, no add-on module required |
| Microsoft Teams / M365 external access | Teams admin center message/access logs, Defender for Office 365 (if licensed) | Critical | High — Falcon has no visibility into Teams chat content; this is the entire initial-access vector and it is a native-log-only gap |
| Entra ID sign-in | Entra sign-in logs | High | Medium — needed to catch reuse of the phished plaintext password against cloud services |
| Active Directory | Directory Service Access auditing (LDAP query volume) | Medium | Medium — the AD-profiling module's actual LDAP/AD queries are not visible in standard Falcon endpoint telemetry |
| Network egress / proxy | DNS logs, web proxy logs (covers non-Falcon devices) | High | Low — the 3 confirmed C2 domains are cheap to hunt org-wide via DNS logs alone |
ATT&CK Mapping
| Tactic | Technique | Name | Observed Behavior |
|---|---|---|---|
| Initial Access | T1566.003 | Phishing: Spearphishing via Service | Attacker impersonates IT helpdesk over Microsoft Teams from a spoofed/external tenant |
| Execution | T1204.002 | User Execution: Malicious File | Victim manually downloads and runs the "PowershellCleaner" MSI |
| Defense Evasion | T1218.007 | System Binary Proxy Execution: Msiexec | MSI installer used to deliver and extract the next-stage payload |
| Defense Evasion | T1027 / T1140 | Obfuscated Files or Information / Deobfuscate-Decode | cleaner.ps1 uses Base64, AES-CBC, and hex reconstruction, executed in-memory via Invoke-Expression |
| Execution | T1059.001 / T1059.006 | PowerShell / Python | PowerShell stages a bundled Python runtime (pythonw.exe); Python loader chain executes arbitrary attacker-supplied code |
| Defense Evasion | T1036.005 | Masquerading: Match Legitimate Name or Location | msvcp150.dll / msvcp160.dll impersonate genuine VC++ runtime DLLs |
| Defense Evasion | T1620 | Reflective Code Loading | Persistence module manually maps a native DLL into memory rather than using the standard loader |
| Persistence | T1053.005 | Scheduled Task | COM-interface task registration (not schtasks.exe) triggers at logon and daily 10:00 |
| Discovery | T1082 / T1087.002 / T1018 | System Info / Domain Account / Remote System Discovery | Profiling module enumerates hostname, user, privilege, processes, services, AD domain name, and AD computer count |
| Command and Control | T1071.001 / T1573.001 | Web Protocols / Symmetric Cryptography | Beacons every 90–120s using ChaCha20-encrypted JSON to 1 of 3 hardcoded domains |
| Command and Control | T1105 | Ingress Tool Transfer | C2 exec() accepts and runs arbitrary attacker-supplied Python in-memory — effectively a fileless module-download channel |
| Credential Access | T1056.002 | GUI Input Capture | PhishLocker's fake full-screen Windows 11 lock screen captures the plaintext account password |
| Command and Control / Lateral Movement | T1090.001 | Proxy: Internal Proxy | TrafficRedirector turns the host into a reverse proxy for internal pivot / IP-allowlist bypass |
| Lateral Movement | T1021.005 | Remote Services: VNC | StreamMaster provides Python-based VNC-style remote desktop control |
| Execution | T1059.001 | PowerShell (Interactive Shell/RAT) | Operator issues remote PowerShell commands through the Interactive Shell module |
Native Audit-Log Hunts
These checks cover the two steps Falcon endpoint telemetry structurally cannot see — the Teams impersonation itself and any downstream cloud credential reuse.
Microsoft Teams admin center
- Review External Access reports for chats initiated by unfamiliar or newly-observed external tenants, especially messages referencing "IT," "helpdesk," "cleaner," or "PowerShell" tooling.
- If Defender for Office 365 / Teams protection is licensed, review its message-trace and URL-click reports for the same window.
- Check whether "Contact users in domains I haven't listed" is currently set to Allow-all (see Section 13 playbook PB3 if so).
Entra ID sign-in logs
- Pull sign-ins for any user whose host also produced a Q1/Q2 hit within the following 24 hours, watching for logons from unfamiliar IPs/ASNs — consistent with the phished plaintext password being reused externally.
- Cross-reference with Conditional Access sign-in risk flags if Identity Protection is licensed.
Windows Task Scheduler (manual pivot on flagged hosts)
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'AppData' }— the COM-registered task action path points into the randomized AppData directory, unlike a schtasks.exe-created task which is typically more conventionally named/pathed.
DNS / proxy logs (covers non-Falcon devices)
- Query org-wide DNS/proxy logs for the three confirmed C2 domains (Section 4) — this is the cheapest, highest-confidence sweep available and reaches contractor/unmanaged devices Falcon doesn't cover.
CrowdStrike LogScale CQL Hunt Queries
Looks for: msiexec.exe spawning powershell.exe with a command line referencing PowershellCleaner, cleaner.ps1, or archive6.zip — the SynkLoader Stage-1 delivery signature. FP: low — legitimate IT-deployed MSIs that also invoke PowerShell post-install exist but rarely reference these exact strings.
// HUNT: MSI-Delivered PowerShell Cleaner Payload Execution (SynkLoader Stage 1) // MITRE: T1218.007, T1204.002, T1027 // CONF: high // FP: low // COST: low // REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // FALSE POSITIVES: legitimate IT-deployed MSI packages that also invoke PowerShell post-install; the exact path/name match below narrows this sharply // TUNING: if your org ships a legitimate internal tool literally named PowershellCleaner, add a signer/hash exclusion rather than dropping this query // LOOKBACK: 14d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^msiexec\.exe$/i | FileName=/^powershell(_ise)?\.exe$/i | CommandLine=/PowershellCleaner|cleaner\.ps1|archive6\.zip/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc)
Looks for: pythonw.exe running from a 16-character random-looking AppData subdirectory with a powershell.exe parent — the SynkLoader Stage-2 loader launch. FP: medium — a handful of legitimate installers bundle a private pythonw.exe under AppData; the powershell.exe parent narrows this considerably.
// HUNT: Bundled Python Runtime Launched From Randomized AppData Path (SynkLoader Stage 2) // MITRE: T1204.002, T1027, T1140 // CONF: high // FP: medium // COST: low // REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // FALSE POSITIVES: some legitimate installers (certain dev tools, scientific/creative apps) bundle a private pythonw.exe under AppData; the powershell.exe parent condition removes most of these // TUNING: once identified, exclude known-good AppData python paths for signed vendor installers; require ParentBaseFileName=powershell.exe (already in this query) for the high-confidence variant before alerting // LOOKBACK: 14d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^pythonw\.exe$/i | ImageFileName=/\\AppData\\(Roaming|Local)\\[A-Za-z0-9]{16}\\/i | ParentBaseFileName=/^powershell(_ise)?\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine]) | sort(@timestamp, order=desc)
Looks for: msvcp150.dll or msvcp160.dll (the profiling and persistence modules' fake VC++ runtime names) written to AppData/Temp/ProgramData rather than a real System32/SysWOW64/redist path. FP: low — genuine VC++ redistributable installs write to Windows system paths, which this query explicitly excludes.
// HUNT: Fake VC++ Runtime DLL (msvcp150/160.dll) Written Outside System Runtime Paths // MITRE: T1036.005, T1620 // CONF: high // FP: low // COST: low // REQUIRES: PeFileWritten, NewExecutableWritten // FALSE POSITIVES: genuine VC++ redistributable repair/reinstall events write to System32/SysWOW64, which this query excludes // TUNING: add any internal software-distribution paths that legitimately stage VC++ redistributables before promoting to alerting #event_simpleName=/PeFileWritten|NewExecutableWritten/ | FileName=/^msvcp1(50|60)\.dll$/i | TargetFileName=/AppData|\\Temp\\|ProgramData/i | !TargetFileName=/\\Windows\\(System32|SysWOW64)\\/i | table([@timestamp, ComputerName, UserName, FileName, TargetFileName, SHA256HashData]) | sort(@timestamp, order=desc)
Looks for: a scheduled task registered by a process other than schtasks.exe (consistent with COM-interface registration) whose task action points into a randomized AppData directory or a python interpreter. FP: medium — many legitimate updaters register tasks via COM too; the AppData/python path condition is the real discriminator.
// HUNT: Scheduled Task Registered Outside schtasks.exe Pointing to Randomized AppData Payload // MITRE: T1053.005 // CONF: medium // FP: medium // COST: medium // REQUIRES: ScheduledTaskRegistered // FALSE POSITIVES: many legitimate installers/updaters (browsers, backup agents, security tools) register scheduled tasks via COM instead of schtasks.exe; the AppData random-directory / python path in TaskExecutable is what narrows this to SynkLoader-consistent behavior // TUNING: exclude your environment's known update-task executables (e.g. GoogleUpdate, OneDrive Standalone Update Task) by TaskName before promoting to alerting #event_simpleName=ScheduledTaskRegistered | !ImageFileName=/schtasks\.exe$/i | TaskExecutable=/\\AppData\\(Roaming|Local)\\[A-Za-z0-9]{16}\\|pythonw?\.exe/i | table([@timestamp, ComputerName, UserName, ImageFileName, TaskName, TaskExecutable]) | sort(@timestamp, order=desc)
Looks for: DNS resolution of the three hardcoded, primary-source-confirmed C2 domains. FP: low — attacker-registered infrastructure with no known legitimate use.
// HUNT: DNS Resolution of Confirmed SynkLoader C2 Domains // MITRE: T1071.001, T1573.001 // CONF: high // FP: low // COST: low // REQUIRES: DnsRequest // FALSE POSITIVES: none expected — attacker-registered domains with no known legitimate use; if a hit appears, confirm it is not a defanged/OSINT lookup performed by a security tool // TUNING: add any additional C2 domains confirmed by future reporting to this alternation list #event_simpleName=DnsRequest | DomainName=/^(neversoftmain\.net|rootfarmapp\.net|tripinupdate\.net)$/i | table([@timestamp, ComputerName, UserName, DomainName, ContextProcessId]) | sort(@timestamp, order=desc)
Looks for: a python.exe/pythonw.exe process making a high volume of outbound connections to the same external destination — a proxy for the 90–120s ChaCha20 beacon cadence, useful for catching SynkLoader builds using C2 infrastructure not yet in Section 4. FP: medium — legitimate python-based polling/telemetry agents exist; corroborate with Q2/Q5 hits on the same host.
// HUNT: High-Frequency Outbound Beaconing From Python-Family Process (SynkLoader C2 Cadence) // MITRE: T1071.001, T1090.001 // CONF: medium // FP: medium // COST: medium // REQUIRES: NetworkConnectIP4, ProcessRollup2 // FALSE POSITIVES: legitimate polling agents (telemetry/update clients, some monitoring agents) that also run as python.exe/pythonw.exe; corroborate with Q2/Q5 hits on the same host before escalating // TUNING: exclude your environment's known-legitimate python-based agents by ImageFileName; the SynkLoader 90-120s cadence means roughly >=20 connections/hour to the SAME destination is the meaningful threshold, not raw volume // LOOKBACK: 24h #event_simpleName=NetworkConnectIP4 | rename(field=ContextProcessId_decimal, as=TargetProcessId_decimal) | join(query={#event_simpleName=ProcessRollup2 | FileName=/^pythonw?\.exe$/i}, field=TargetProcessId_decimal, include=[ImageFileName, CommandLine, UserName]) | !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"]) | groupBy([ComputerName, ImageFileName, RemoteAddressIP4, RemotePort], function=count(as=ConnCount), limit=1000) | ConnCount >= 20 | sort(ConnCount, order=desc)
Looks for: a GUI-toolkit DLL (Qt/Tcl-Tk/wx) loaded by pythonw.exe/python.exe — the closest available proxy for the fake full-screen PhishLocker window, since Falcon has no native "foreground fullscreen window" event. FP: high — treat as a corroborating pivot only, never a standalone alert; documented telemetry gap, see Section 15.
// HUNT: GUI Toolkit DLL Loaded by Bundled Python Runtime (Fake Lock-Screen Candidate) // MITRE: T1056.002, T1027 // CONF: low // FP: high // COST: medium // REQUIRES: ProcessRollup2, ImageHash // FALSE POSITIVES: broad, low-confidence proxy — many legitimate internal python-based GUI tools use these same toolkits (tkinter/Qt/wx); use only as a corroborating pivot on hosts already flagged by Q1-Q4, never as a standalone alert // TUNING: scope review to hosts that already produced a Q2 hit (randomized-AppData pythonw.exe launch) in the same 24h window; do not action a Q7-only hit #event_simpleName=ImageHash | FileName=/^(qt5gui|qt5core|tcl86t?|tk86t?|wxmsw)\.dll$/i | join(query={#event_simpleName=ProcessRollup2 | FileName=/^pythonw?\.exe$/i}, field=TargetProcessId, include=[ImageFileName, CommandLine, UserName]) | table([@timestamp, ComputerName, UserName, ImageFileName, CommandLine, FileName]) | sort(@timestamp, order=desc)
Looks for: a python.exe/pythonw.exe process connecting to five or more distinct internal (RFC1918) hosts — consistent with the TrafficRedirector reverse-proxy pivot module. FP: medium — legitimate internal python-based proxy/scanning tools exist; corroborate with Q1-Q3.
// HUNT: Python-Family Process Connecting to Numerous Distinct Internal Hosts (TrafficRedirector Pivot Behavior) // MITRE: T1090.001, T1021 // CONF: medium // FP: medium // COST: medium // REQUIRES: NetworkConnectIP4, ProcessRollup2 // FALSE POSITIVES: legitimate internal python-based proxy/dev/scanning tools; corroborate with Q1-Q3 hits on the same host before escalating // TUNING: exclude hosts running approved python-based proxy or vulnerability-scanning tooling; raise the distinct-host threshold (currently 5) if your environment runs broad internal automation from python agents // LOOKBACK: 24h #event_simpleName=NetworkConnectIP4 | cidr(RemoteAddressIP4, subnet=["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"]) | rename(field=ContextProcessId_decimal, as=TargetProcessId_decimal) | join(query={#event_simpleName=ProcessRollup2 | FileName=/^pythonw?\.exe$/i}, field=TargetProcessId_decimal, include=[ImageFileName, CommandLine, UserName]) | groupBy([ComputerName, ImageFileName], function=count(RemoteAddressIP4, distinct=true, as=DistinctInternalHosts), limit=1000) | DistinctInternalHosts >= 5 | sort(DistinctInternalHosts, order=desc)
CrowdStrike Custom IOA Recommendations
Three queries are strong Custom IOA / Scheduled Search candidates (high CONF, low FP): Q1, Q3, and Q5. The remaining five (Q2, Q4, Q6, Q7, Q8) stay investigate-only hunt queries pending a clean baseline period — see Section 11.
IOA-1 · MSI-Delivered Cleaner Payload (from Q1)
Scheduled Search name: DETECT — MSI-Delivered PowerShell Cleaner Payload (SynkLoader)
Description: Fires when msiexec.exe spawns powershell.exe referencing PowershellCleaner/cleaner.ps1/archive6.zip — the SynkLoader Stage-1 delivery signature. Matters because it is the earliest reliable endpoint signal, before any of the seven downstream modules load.
Exclusions: signed internal software-distribution MSIs that happen to share the string "cleaner" in an unrelated context (verify by hash/signer before adding an exclusion).
Deployment path: promote directly to a Custom IOA in Prevention Policy (block) after a 7-day clean detect-only baseline; low FP makes this a reasonable near-term "detect and page" candidate even before the baseline completes.
Alert email subject: [HIGH] Detection: SynkLoader — MSI-delivered PowerShell cleaner executed
Alert body: A host ran a PowerShell process spawned by msiexec.exe referencing PowershellCleaner, cleaner.ps1, or archive6.zip. This matches the SynkLoader initial-execution chain (Teams IT-helpdesk phishing → fake MSI → PowerShell stager). Immediate actions: isolate the host in Falcon RTR, capture the full process tree and any child pythonw.exe processes, and check whether the logged-on user recently received an external Teams message from someone claiming to be IT support.
Triage checklist: (1) Confirm the msiexec.exe→powershell.exe lineage and full command line. (2) Pull the process tree for any pythonw.exe children (Q2). (3) Check for msvcp150/160.dll writes on the host (Q3). (4) Check DNS history for the three confirmed C2 domains (Q5). (5) Interview the user about the originating Teams message and identify the impersonated sender. (6) If any downstream module indicator is present, escalate to full containment (Section 14). (7) Preserve archive6.zip/cleaner.ps1 samples before remediation. (8) Force a password reset for the affected user regardless of confirmed PhishLocker activity, since the credential-phish step is hard to observe directly.
Pivot queries: host-scoped process tree from the flagged PID; environment-wide sweep of Q1 across all hosts for the same 7-day window to size the campaign.
IOA-2 · Fake VC++ Runtime DLL Write (from Q3)
Scheduled Search name: DETECT — Fake msvcp150/160.dll Written Outside System Path (SynkLoader)
Description: Fires when a file named msvcp150.dll or msvcp160.dll is written outside System32/SysWOW64/known redist paths. Matters because these are the profiling and persistence modules specifically — a hit here means AD reconnaissance and/or persistence are actively being staged.
Exclusions: add any internal software-distribution share that legitimately stages VC++ redistributables outside the standard system paths.
Deployment path: promote to Prevention Policy (block on write) once the exclusion list above is confirmed against a 7-day baseline.
Alert email subject: [HIGH] Detection: SynkLoader — fake VC++ runtime DLL written to non-system path
Alert body: A file masquerading as a Microsoft Visual C++ runtime library (msvcp150.dll or msvcp160.dll) was written outside its legitimate system location. This is the SynkLoader AD-profiling or persistence module. Immediate actions: isolate the host, capture the file and its SHA256, and check for an associated COM-registered scheduled task (Q4 / native pivot in Section 7).
Triage checklist: (1) Hash and quarantine the file for analysis. (2) Check Task Scheduler for a COM-registered task pointing into AppData (Section 7). (3) Review AD/domain-controller logs for unusual enumeration activity from this host around the write timestamp. (4) Check for pythonw.exe/Q2 activity on the same host. (5) Escalate to containment if persistence is confirmed.
Pivot queries: same-host Q4 (scheduled task) and Q2 (python launch); environment-wide Q3 sweep to find every host with the fake DLL.
IOA-3 · Confirmed C2 Domain Resolution (from Q5)
Scheduled Search name: DETECT — DNS Resolution of Confirmed SynkLoader C2 Domain
Description: Fires on any DNS resolution of neversoftmain[.]net, rootfarmapp[.]net, or tripinupdate[.]net. Matters because a hit here means an implant is live and actively beaconing, not merely staged.
Exclusions: none expected; if security-tooling OSINT lookups are a concern in your environment, exclude your threat-intel platform's egress IP/process.
Deployment path: promote immediately to a Falcon Custom IOC blocklist entry (network-containment / DNS-sinkhole action) in addition to the Scheduled Search — this is the highest-confidence, lowest-FP indicator in the pack.
Alert email subject: [CRITICAL] Detection: SynkLoader — active C2 beacon confirmed
Alert body: A host resolved a confirmed SynkLoader C2 domain. This indicates an active, beaconing implant rather than a staged-but-inert infection. Immediate actions: isolate the host in Falcon RTR immediately, do not wait for further triage, and begin the full containment runbook (Section 14).
Triage checklist: (1) Immediate network containment. (2) Identify the beaconing process (Q6) and its full parent chain back to Q1/Q2. (3) Check for TrafficRedirector-consistent internal pivot (Q8) — if present, widen the investigation to every internal host it contacted. (4) Assume credential compromise; force password reset. (5) Pull AD profiling evidence (Q3) to scope what the attacker learned about the domain. (6) Notify IT helpdesk leadership — the impersonation abuses their identity and they should warn staff org-wide. (7) Preserve full packet capture / connection metadata if available before isolation completes. (8) Open a formal incident if any RAT/interactive-shell command execution is confirmed post-beacon.
Pivot queries: Q6 (beacon cadence) and Q8 (internal pivot) scoped to the same host; environment-wide Q5 sweep for every other beaconing host.
Investigate-only queries (Q2, Q4, Q6, Q7, Q8)
These stay hunt/investigate-only pending a 7–14 day clean baseline in your tenant (Section 11). Each carries its own pivot guidance in its query card above; none should be wired to an automated block action yet given medium-or-higher FP.
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags domain,neversoftmain.net,detect,high,2027-02-24,SynkLoader hardcoded C2 domain,campaign:SynkLoader domain,rootfarmapp.net,detect,high,2027-02-24,SynkLoader hardcoded C2 domain,campaign:SynkLoader domain,tripinupdate.net,detect,high,2027-02-24,SynkLoader hardcoded C2 domain,campaign:SynkLoader sha256,151d2a7f52f047638ca8ad80c859c6bfe04d7510fb10933817fa0e3ba5d07a11,detect,high,2027-02-24,SynkLoader 331.msi installer,campaign:SynkLoader sha256,209f69a6ca859f05c954096b30391a43fda33c9ed264dfdccf806697f04b06a8,detect,high,2027-02-24,SynkLoader archive6.zip payload archive,campaign:SynkLoader sha256,80f08360ba768b152b71abb1cab557f552a13de18c83fe8e6396a197feec9185,hunt,medium,2026-11-24,SynkLoader cleaner.ps1 (per-infection hash — reference only),campaign:SynkLoader sha256,d150c70d2732df17aa77991b9ebf4c896f044445e900978581d9598dfa5dc98c,hunt,medium,2026-11-24,SynkLoader ss.py loader (per-infection hash — reference only),campaign:SynkLoader
MSI drop path: %LocalAppData%\PowershellCleaner\script\ (archive6.zip, cleaner.ps1) Staging path pattern: %AppData%\(Roaming|Local)\<16 random alnum chars>\ Loader process: pythonw.exe, parent=powershell.exe, path matches staging pattern above Fake runtime DLLs: msvcp150.dll (profiling), msvcp160.dll (persistence) — outside System32/SysWOW64 C2 beacon cadence: ~90-120 seconds, ChaCha20-encrypted JSON (modified Sigma constants) Persistence trigger: scheduled task at user logon AND daily 10:00 local time Attribution artifact: PDB path C:\Users\genry\source\repos\pwshnewdll\x64\Release\pwshnewdll.pdb
SynkLoader — root modular loader (Python/PowerShell/C#/C++) System Profiler — masquerades as msvcp150.dll; hostname/user/privilege/process/service/AD enumeration Persistence Module — masquerades as msvcp160.dll; COM-registered Task Scheduler persistence PhishLocker — fake full-screen Windows 11 lock screen; captures plaintext password; bypass via Alt+Tab / Ctrl+Alt+Del TrafficRedirector — reverse-proxy module for internal pivot / IP allow-list bypass StreamMaster — Python-based VNC module for remote desktop control Interactive Shell/RAT — remote PowerShell command execution pwshnewdll — C# module (DLL) that executes PowerShell commands from the Python loader chain
# Reported ONLY by a single secondary source (dev.to recap), contradicted by # both primary sources' domain list. Investigate if seen; do NOT auto-block. dondermicapp.net aroclenetapp.net
Detection Validation Gates
| Gate | Requirement |
|---|---|
| Telemetry ready | ProcessRollup2, SyntheticProcessRollup2, PeFileWritten, NewExecutableWritten, ImageHash, DnsRequest, NetworkConnectIP4, ScheduledTaskRegistered — all standard Falcon sensor telemetry, no Identity Protection or add-on module required for any query in this pack. |
| Benign baseline | Run Q2, Q4, Q6, Q7, and Q8 in detect-only/hunt mode for 7–14 days before considering any alerting action; Q1, Q3, and Q5 can move faster given their low measured FP. |
| Positive tests | Do not detonate the actual malware. Validate Q2 by launching a renamed benign Python interpreter as pythonw.exe from a synthetic 16-character AppData directory with a powershell.exe parent. Validate Q3 by placing a renamed benign DLL named msvcp150.dll under %Temp%. Validate Q5 by resolving one confirmed domain from an isolated test host (never from production). |
| Promotion | Q1, Q3, Q5 → Custom IOA / block action after a 7-day clean baseline (see Section 9). Q2, Q4, Q6, Q7, Q8 remain hunt-only; review weekly and re-evaluate FP after the baseline period. |
Hardening — Tiered
Require Ctrl+Alt+Del at unlock (M1028 — OS Configuration). PhishLocker is a borderline-window GUI application impersonating the Windows lock screen, not the real Secure Attention Sequence. Enforcing genuine Ctrl+Alt+Del via GPO makes any userland fake lock screen structurally unable to intercept the real credential prompt. Cite: Microsoft Security Baseline, "Interactive logon: Do not require CTRL+ALT+DEL" = Disabled. Verify: (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System').DisableCAD should be 0. See Playbook PB1.
Restrict unsigned execution from user-writable AppData/Temp paths (M1038 — Execution Prevention). Blocks the pythonw.exe stage and the extracted cleaner.ps1/archive6.zip payload regardless of how they were delivered. Cite: CIS Microsoft Windows Benchmark (AppLocker), MS Security Baseline. Verify: Get-AppLockerPolicy -Effective | Select -ExpandProperty RuleCollections. See Playbook PB2.
Restrict Microsoft Teams external access / unmanaged-tenant contact (M1017 — User Training combined with M1021-equivalent platform control). Cuts off the initial-access vector directly — the entire chain requires the "IT helpdesk" impersonation to reach the victim over Teams. Cite: Microsoft Learn, Teams admin center > External access. Verify: Teams admin center > Users > External access > confirm "Contact users in domains I haven't listed" is not set to allow-all. See Playbook PB3.
Enable PowerShell Script Block Logging + Module Logging (M1040 — Behavior Prevention on Endpoint). Gives responders visibility into the Base64/AES-CBC/hex-reconstructed in-memory execution even when the CQL process-lineage queries above miss a variant. Cite: MS Security Baseline. Verify: Get-WinEvent -LogName 'Microsoft-Windows-PowerShell/Operational' -MaxEvents 1 returns events.
Enable Network Protection / SmartScreen for newly-registered or uncategorized domains (M1021, M1037 — Filter Network Traffic). A generic, forward-looking control against the next SynkLoader C2 domain that hasn't been reported yet. Cite: Microsoft Defender for Endpoint Network Protection documentation.
Move to phishing-resistant authentication (FIDO2 / Windows Hello for Business) for privileged and high-value accounts (M1032 — Multi-factor Authentication). Reduces the value of any successfully-phished plaintext password, since a stolen password alone can no longer complete authentication. Cite: Microsoft Entra documentation, NIST SP 800-63B.
Enable Directory Service Access auditing for anomalous LDAP enumeration volume from workstations (M1047 — Audit). Detects the AD-profiling module's actual directory queries, which are invisible to standard endpoint process/file/network telemetry. Cite: Microsoft Learn, "Audit Directory Service Access." ⚠ best-practice, no single formal CIS control number covers workstation-originated LDAP-volume anomaly detection specifically — this is a SIEM/UEBA-pattern control, not a one-line GPO toggle.
Deployable Playbooks
PB1 · Enforce Ctrl+Alt+Del at Unlock (defeats PhishLocker's core weakness)
Prerequisites: Domain Admin or local admin rights on the target GPO/registry scope; test on a pilot OU before org-wide rollout.
Reboot required: No (policy applies at next Group Policy refresh / logon).
Rollback: Re-enable "Do not require CTRL+ALT+DEL" (set DisableCAD back to 1) if a business application depends on the legacy behavior — none typically do, since this is a Microsoft-default-secure setting.
1. Open Group Policy Management, edit the target GPO (or a new "SynkLoader Hardening" GPO):
Computer Configuration > Policies > Windows Settings > Security Settings >
Local Policies > Security Options >
"Interactive logon: Do not require CTRL+ALT+DEL" = Disabled
2. Equivalent direct registry path (for out-of-band/local application, e.g. via RTR):
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" ^
/v DisableCAD /t REG_DWORD /d 0 /f
3. Force policy refresh on a pilot host:
gpupdate /force
4. Verify:
(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System').DisableCAD
# Expected: 0 (or the value/key absent, which also means CAD IS required)
Rollback:
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" ^
/v DisableCAD /t REG_DWORD /d 1 /f
PB2 · AppLocker Deny Rule for Unsigned Execution From User-Writable Paths
Prerequisites: AppLocker (or WDAC) available on target Windows edition (Enterprise/Education, or Pro with limitations); pilot in Audit mode for at least one full business week before Enforce.
Reboot required: No (Application Identity service restart is sufficient, see step 4).
Rollback: Set the rule collection back to "Not Configured" / delete the deny rule, then restart the Application Identity service; no reboot needed.
1. Open Local Security Policy or GPO editor: Computer Configuration > Windows Settings > Security Settings > Application Control Policies > AppLocker 2. Create Executable Rule (deny) scoped to user-writable paths: Action: Deny User/Group: Everyone Path condition: %APPDATA%\* and %LOCALAPPDATA%\Temp\* (Apply the same deny to a Script Rule collection for .ps1/.vbs/.js if scripts are not otherwise controlled by Constrained Language Mode) 3. Keep the default AppLocker "Allow Everyone - All files located in Program Files" and "All files located in Windows folder" rules in place so legitimate software is unaffected. 4. Enable the Application Identity service (required for AppLocker enforcement): Set-Service -Name AppIDSvc -StartupType Automatic Start-Service -Name AppIDSvc 5. Deploy in Audit mode first, review Event ID 8003/8006 (AppLocker log) for one business week, add exclusions for legitimate line-of-business tools launching from AppData, THEN switch the collection to Enforce. Verify: Get-AppLockerPolicy -Effective | Select -ExpandProperty RuleCollections Rollback: Set-AppLockerPolicy -PolicyObject (New-Object -TypeName Microsoft.Security.ApplicationId.PolicyManagement.PolicyModel.AppLockerPolicy) -Merge:$false Stop-Service -Name AppIDSvc
PB3 · Restrict Teams External Access / Unmanaged-Tenant Contact
Prerequisites: Teams Administrator or Global Administrator role in the Microsoft 365 admin center; confirm with business stakeholders which external domains are legitimately needed before restricting to an allow-list (a default-deny can break real vendor/partner collaboration if rolled out without review).
Reboot required: No (cloud tenant setting, effective immediately to a few hours for client sync).
Rollback: Revert "Choose which domains your users have access to" back to "Allow all external domains" if the allow-list breaks legitimate business communication before the exception list is complete.
1. Microsoft 365 admin center > Teams admin center > Users > External access 2. Under "Choose which domains your users have access to," select: "Allow only specific external domains" and build the allow-list from your confirmed vendor/partner tenant domains (start from your current traffic, not a blank list, to avoid breaking real collaboration). 3. Alternatively, via PowerShell (Teams module): Connect-MicrosoftTeams Set-CsTenantFederationConfiguration -AllowedDomains (Get-CsAllowedDomain -Identity "vendor1.onmicrosoft.com"), (Get-CsAllowedDomain -Identity "vendor2.onmicrosoft.com") Set-CsTenantFederationConfiguration -AllowFederatedUsers $true -AllowTeamsConsumer $false 4. Publish organization-wide guidance: real IT support never asks staff to install software via an unsolicited Teams message from an external tenant. Verify: Get-CsTenantFederationConfiguration | Select AllowedDomains, AllowFederatedUsers Rollback: Set-CsTenantFederationConfiguration -AllowFederatedUsers $true # then remove the AllowedDomains restriction to return to prior (broader) access
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host via Falcon RTR immediately on any Q5/Q6 hit (confirmed or suspected active beacon). Do not wait for full triage on a confirmed-C2 hit. | SOC / IR | Falcon host timeline export, containment action log |
| Isolate | Kill the pythonw.exe/python.exe process tree and any child processes it spawned; suspend (do not yet delete) the COM-registered scheduled task. | SOC / IR | Process tree screenshot/export, task XML dump |
| Eradicate | Collect samples (archive6.zip, cleaner.ps1, ss.py, msvcp150.dll, msvcp160.dll) for forensic analysis before removal — hashes are per-infection, so each sample has standalone value. | IR / Forensics | Sample hashes, storage location |
| Eradicate | Remove the COM-registered scheduled task, the randomized %AppData% staging directory, and the fake VC++ runtime DLLs. Re-image if the Interactive Shell/RAT module is confirmed to have executed attacker commands. | IR / Endpoint | Pre/post remediation Falcon scan results |
| Eradicate | Assume the plaintext account password was captured. Force an immediate password reset for the affected user and review Entra sign-in logs for reuse. | Identity / IAM | Password reset ticket, sign-in log export |
| Eradicate | Block the confirmed C2 domains at DNS/proxy org-wide; if TrafficRedirector pivot (Q8) is confirmed, expand the hunt to every internal host the pivot reached. | Network / SOC | DNS block confirmation, Q8 hit list |
| Recover | Restore the host from a known-clean image if RAT/interactive-shell access reached privileged systems or the AD-profiling module confirmed domain-admin-adjacent reconnaissance; otherwise clean-and-monitor is acceptable. | IR / Endpoint | Rebuild ticket or clean-scan attestation |
| Recover | Notify the real IT helpdesk team — the attacker impersonates them directly, and a broad staff awareness message reduces re-victimization from the same campaign. | IT / Comms | Sent notification / awareness bulletin |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1566.003 | Teams IT-helpdesk impersonation | — | — | GAP Falcon has no Teams-content visibility; native audit hunt only (Section 7) |
| T1204.002 / T1218.007 | MSI-delivered PowerShell stager | Q1 | IOA-1 | Good |
| T1140 / T1059.006 | Python loader launch from randomized AppData | Q2 | — | Partial medium FP, hunt-only pending baseline |
| T1036.005 / T1620 | Fake VC++ runtime DLL (profiling + persistence) | Q3 | IOA-2 | Good |
| T1082 / T1087.002 / T1018 | AD/system profiling itself | — | — | Partial only the DLL-write carrier is directly visible (Q3); the LDAP/AD queries the module performs are not in standard endpoint telemetry — see Strategic hardening tier |
| T1053.005 | COM-registered scheduled task persistence | Q4 | — | Partial behavioral, medium FP |
| T1071.001 / T1573.001 | ChaCha20 C2 beacon to confirmed domains | Q5, Q6 | IOA-3 (Q5) | Good for known domains; Partial for unseen infrastructure via cadence-only Q6 |
| T1056.002 | PhishLocker fake lock-screen credential capture | Q7 | — | GAP no native "foreground fullscreen window" Falcon event; Q7 is a weak, high-FP proxy. Primary mitigation is the Ctrl+Alt+Del hardening control (Section 12), not detection. |
| T1090.001 / T1021 | TrafficRedirector internal pivot | Q8 | — | Partial |
| T1021.005 | StreamMaster VNC-style remote control | — | — | Partial rides the same encrypted C2 channel as Q5/Q6; no distinct network signature of its own — covered only indirectly |
| T1059.001 (RAT) | Interactive Shell / remote PowerShell commands | — | — | Partial any resulting child process is visible in standard ProcessRollup2 telemetry; pivot from any Q2/Q5/Q6 hit's process tree |
Every query passed the required validation gates in Section 11 before being written into this map; Q1/Q3/Q5 are ready for IOA promotion today, the rest need the baseline period noted there.
Hunt Summary Ticket
TITLE: Hunt for SynkLoader — Teams IT-Helpdesk Impersonation Loader
SEVERITY: HIGH (suspected ransomware precursor / initial-access-as-a-service)
SCOPE: All Windows endpoints; Microsoft Teams / M365 tenant; Entra ID sign-in logs
HYPOTHESIS: A modular Python/PowerShell/C#/C++ loader is being delivered via Teams
messages impersonating IT helpdesk, staging a fake "PowershellCleaner"
MSI from Azure Blob Storage, then loading AD-profiling, persistence,
credential-phishing, network-pivot, VNC, and RAT modules over a single
ChaCha20-encrypted C2 channel.
QUERIES: Q1-Q8 (Section 8); Q1/Q3/Q5 are IOA-ready, Q2/Q4/Q6/Q7/Q8 are hunt-only
DO FIRST: 1) Sweep DNS/proxy logs org-wide for the 3 confirmed C2 domains (Q5 /
Section 7) — cheapest, highest-confidence, covers non-Falcon devices.
2) Run Q1 and Q3 across the fleet for the last 14 days.
3) Deploy PB1 (Ctrl+Alt+Del enforcement) and PB3 (Teams external access
restriction) — both cut the chain off structurally, not just detect it.
FINDINGS: [populate after hunt execution]
GAPS: Teams-content visibility (T1566.003); PhishLocker foreground-window
detection (T1056.002); AD-profiling LDAP query visibility (T1087.002)
ACTIONS: See Section 14 Containment Runbook for isolate/eradicate/recover steps
OWNER: HuntPack
VERSION: v0.1 — 2026-08-24
Changelog
References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| Primary | Expel — "SynkLoader: when you throw in everything but the kitchen sink" | Original research; C2 domains, PDB attribution artifact, ChaCha20 protocol detail, hash-utility caveat | 2026-08-24 |
| Primary | BleepingComputer — "New SynkLoader malware pushed in Microsoft Teams phishing campaign" | Module inventory, lock-screen bypass, delivery mechanism | 2026-08-24 |
| Primary | GBHackers — "New SynkLoader Malware Uses Fake Windows Lock Screen to Steal Passwords and Pivot Networks" | C2 domain confirmation, PDB path independent corroboration | 2026-08-24 |
| Secondary | DEV Community — "SynkLoader Deploying Multi-Stage Modules via Teams Phishing" | File names, hosting infra confirmation; flagged domain discrepancy | 2026-08-24 |
| Secondary | WindowsReport — "New SynkLoader Malware Spreads Through Microsoft Teams Phishing" | Exact drop path, in-memory execution chain detail | 2026-08-24 |
| Secondary | We Fix PC | Module behavior corroboration (supplementary, not requested) | 2026-08-24 |
| Secondary | News4Hackers | Hash-evasion note corroboration (supplementary, not requested) | 2026-08-24 |
| Aggregator | OffSeq Threat Radar / AlienVault OTX pulse | Hash cross-corroboration only (supplementary, not requested) | 2026-08-24 |
Full fetched/reconstructed text for every source above is saved verbatim in SynkLoader-Hunt-sources/ alongside this file.