SharkLoader / StrikeShark — Multi-Stage Cobalt Strike Loader
Executive Summary
SharkLoader is a previously undocumented, multi-stage loader whose only job is to stand up a Cobalt Strike Beacon on a compromised host. Kaspersky tracks the campaign as StrikeShark and assesses the operator as a Chinese-speaking actor with low confidence (no code/infra overlap with known groups). Targeting is broad — a diplomatic organization in Indonesia, government bodies in Taiwan, and software-development firms plus other entities across Hong Kong, Lebanon, Syria, Colombia, North Macedonia, Nepal, and Serbia — consistent with espionage/information-gathering.
Initial access is primarily exploitation of internet-facing applications (ProxyLogon Exchange, SharePoint, Openfire, GeoServer, F5 BIG-IP, FortiOS, Zimbra, Apache Shiro) dropping a webshell, plus malicious droppers masquerading as installers (GoogleUpdateStepup.exe, AnyConnect…predeploy, AutoUpdate.exe). The loader uses DLL side-loading — a legitimate SystemSettings.exe loads a malicious SystemSettings.dll — then "perfect DLL hijacking" against loader internals, Blowfish/AES decryption of staged modules (DscCoreR.mui, SyncRes.dat), reflective in-memory PE loading, Microsoft Detours/MinHook API hooking (PPID spoofing to svchost.exe, ETW patching, direct NT syscall stubs), and a zlib-compressed Beacon executed in memory.
Persistence is multi-pronged: COM-created scheduled tasks masquerading as OneDrive Standalone Update Task / MicrosoftUpdateTask… / Edgeupdate, and a CurrentVersion\Run value named MFUpdate pointing at a copied SystemSettings.exe. Hands-on-keyboard follows: AD/privileged-group enumeration and credential theft via procdump on LSASS and ntdsutil "ifm".
Defender priority: The cleanest catches are SystemSettings.exe running anywhere other than System32\ImmersiveControlPanel (side-load tell), web-server processes (w3wp/java/tomcat) spawning shells/recon (T1190), the MFUpdate Run-key and masqueraded SYSTEM scheduled tasks, and the LSASS/NTDS dumping commands. Virtual-patch the exposed edge apps first — that closes the front door the whole chain depends on.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 · Vendor | Kaspersky / Securelist — "StrikeShark: a new campaign involving a custom SharkLoader and Cobalt Strike Beacon" | Primary analysis: full loader chain, DLL side-load, API hooking, persistence, exploited CVEs, IOCs (MD5, C2), recon/cred-dump commands, ATT&CK | yes |
| 2 · Press | The Hacker News — "New SharkLoader Malware Deploys Cobalt Strike in StrikeShark" | Victimology, delivery via internet-facing apps + droppers, low-confidence Chinese-speaking attribution | partial |
| 2 · Press | Help Net Security — "Mystery hackers use novel SharkLoader dropper…" | Targeting of governments / software developers; espionage assessment | partial |
Atomic IOCs below (MD5 hashes, four C2 domains) are from the Securelist indicator set. The exploited CVEs are the actor's known entry vectors — confirm patch state on any matching internet-facing service. Behavioral tells (SystemSettings side-load, scheduled-task masquerade, MFUpdate Run-key) are the durable detections; hashes/domains will rotate.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
- H1 (high):
SystemSettings.exeis running from a path other than...\ImmersiveControlPanel\→ DLL side-load. T1574.002. - H2 (high): A web-server / app process (w3wp, java, tomcat, openfire) spawned a shell or recon binary → public-facing-app exploitation. T1190.
- H3 (high): A
CurrentVersion\Runvalue namedMFUpdateexists → StrikeShark persistence. T1547.001. - H4 (high): A file matching a Securelist hash executed/was written. Atomic.
- H5 (high): A host resolved a known StrikeShark C2 domain. T1071.001.
- H6 (medium): A SYSTEM scheduled task was created masquerading as Edge/OneDrive/Update and runs
SystemSettings.exe. T1053.005 + T1036.004. - H7 (medium): LSASS or NTDS credential theft via procdump/comsvcs/ntdsutil ifm. T1003.
- H8 (medium): Privileged-group / AD enumeration burst. T1087.002 + T1069.002.
- H9 (medium): SharkLoader encrypted-module artifacts (
DscCoreR.mui,SyncRes.dat) written to disk. T1027.
Attack chain
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Initial Access | Exploit internet-facing app (ProxyLogon/Openfire/etc.) → webshell, or dropper masq. installer | ProcessRollup2 (web-svc children) | Q2 |
| 2 · Deploy | Copy SystemSettings.exe out of ImmersiveControlPanel; stage encrypted modules | ProcessRollup2, FileCreateInfo | Q3, Q10 |
| 3 · Side-load | SystemSettings.exe loads malicious SystemSettings.dll; reflective Beacon in memory | ProcessRollup2 (anomalous path) | Q1 |
| 4 · Persistence | MFUpdate Run-key + masqueraded SYSTEM scheduled tasks | AsepValueUpdate, ProcessRollup2 (schtasks) | Q9, Q8 |
| 5 · C2 | Cobalt Strike Beacon → C2 domains (ETW patched, PPID spoof) | DnsRequest, NetworkConnectIP4 | Q5 |
| 6 · Actions | AD recon, LSASS/NTDS credential theft, lateral movement | ProcessRollup2 | Q6, Q7 |
Consolidated IOC Table
All values published by Kaspersky/Securelist. Hashes are MD5 as published; C2 domains rotate — treat as perishable. Behavioral tells are the durable layer.
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| domain | connect-microsoft.com | high | detect | Beacon C2 |
| domain | ms-record.com | high | detect | Beacon C2 |
| domain | ms-record.top | high | detect | Beacon C2 |
| domain | ms-tray.top | high | detect | Beacon C2 |
| md5 | 9c872a0d5d5a38950e8b9ac9b488be3f | high | detect | SharkLoader DLL |
| md5 | aa3086be652c8b20b0b29b2730d57119 | high | detect | SharkLoader DLL |
| md5 | a514d1bb62d7916475946fe7c07ac0aa | high | hunt | Encrypted DscCoreR.mui (Beacon) |
| md5 | 9cbd560f820c95d7c38342cd558cb5c6 | high | hunt | Encrypted SyncRes.dat (hooking) |
| md5 | c559cc68986933200fd5d9e4388e2f58 | high | detect | Installer |
| md5 | b3352b42432dedc4a519f011dc8b5d5a | high | detect | Dropper |
| md5 | 24fcebdeecba65004fdb0923763d74fd | high | detect | Dropper |
| md5 | 1f65544978b8ea0e745e573b8ee9684b | high | detect | Lebanon dropper |
| filename | SystemSettings.dll / DscCoreR.mui / SyncRes.dat | high | hunt | side-load + encrypted modules |
| regkey | ...\CurrentVersion\Run → "MFUpdate" | high | hunt | persistence value name |
| task | Edge\Edgeupdate / OneDrive Standalone Update Task / MicrosoftUpdateTaskUser… | high | hunt | masqueraded SYSTEM tasks |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Internet-facing servers (Exchange/SharePoint/Openfire/GeoServer/F5/FortiOS/Zimbra) | ProcessRollup2 on the host; appliance logs for non-Windows edge | Critical | High — appliances (F5/FortiOS) have no Falcon sensor |
| Windows servers / workstations | ProcessRollup2 / SyntheticProcessRollup2 | Critical | Low |
| Registry autorun | AsepValueUpdate / RegGenericValueUpdate | High | Low |
| Domain Controllers (NTDS theft) | ProcessRollup2 (ntdsutil) | High | Low |
| DNS / egress | DnsRequest, NetworkConnectIP4 | Med | Med — Beacon may use IP-only / DoH |
| In-memory Beacon (reflective PE, ETW patched) | EDR memory/behavioral detections | Med | High — ETW patching defeats some sensors; rely on side-load/persistence tells |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Coverage |
|---|---|---|---|
| Initial Access | T1190 Exploit Public-Facing Application | ProxyLogon / Openfire / GeoServer / F5 / FortiOS / Zimbra / Shiro | Q2 |
| Initial Access | T1566 Phishing (dropper w/ decoy PDF) | Masq. installers | Q4 |
| Defense Evasion | T1574.002 DLL Side-Loading | SystemSettings.exe loads malicious SystemSettings.dll | Q1 |
| Defense Evasion | T1036.005 / T1036.004 Masquerading | Legit names + masqueraded task names | Q1, Q8 |
| Defense Evasion | T1027 / T1140 Obfusc. / Deobfusc. | Blowfish/AES modules, MZ header removal | Q10 |
| Defense Evasion | T1562.006 Indicator Blocking (ETW) | EtwEventWrite stubbed | Gap (memory) |
| Defense Evasion | T1055.001 / T1134 Injection / PPID Spoof | Reflective PE, PPID → svchost | Gap (memory) |
| Persistence | T1547.001 Run Keys (MFUpdate) | HKCU\...\Run | Q9 |
| Persistence | T1053.005 Scheduled Task | Edge/OneDrive/Update masquerade tasks | Q8 |
| Credential Access | T1003.001 / T1003.003 LSASS / NTDS | procdump lsass, ntdsutil ifm | Q6 |
| Discovery | T1087.002 / T1069.002 Account / Group Enum | net group, dsquery, Get-ADGroupMember | Q7 |
| Command & Control | T1071.001 Web Protocols (Beacon) | Cobalt Strike → C2 domains | Q5 |
Native Audit-Log Hunts (non-CQL)
- Edge-app patch state: Inventory internet-facing Exchange/SharePoint/Openfire/GeoServer/F5/FortiOS/Zimbra/Shiro for the CVEs in §1; any unpatched, internet-exposed instance is an open door. (Playbook P1.)
- IIS / web logs: Hunt for webshell access patterns and POSTs to anomalous
.aspx/.jspunderwwwroot/custerr; correlate withw3wp.exespawningcmd. - Windows Security 4698 (task created): Review scheduled tasks named like Edge/OneDrive/MicrosoftUpdate that execute a binary outside
System32. - Windows Security 4688 / Sysmon 1:
SystemSettings.exewith a parent that is not the shell, or running fromProgramData/AppData. - DC event 4662 / NTDS: Watch for
ntdsutil"ifm" outside sanctioned backup windows. - Proxy/NGFW: Beacon callbacks to the four C2 domains and look-alike
ms-*/connect-microsoftdomains.
CrowdStrike LogScale CQL Hunt Queries
Looks for: the legitimate SystemSettings.exe running from anywhere other than its real home (...\ImmersiveControlPanel\) — the SharkLoader DLL side-load signature.
// HUNT: SystemSettings.exe executing outside ImmersiveControlPanel (SharkLoader side-load) // MITRE: T1574.002, T1036.005 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: none expected — legit SystemSettings runs only from ImmersiveControlPanel #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^SystemSettings\.exe$/i | FilePath!=/\\ImmersiveControlPanel\\/i | table([@timestamp, aid, ComputerName, UserName, FileName, FilePath, CommandLine, ParentBaseFileName, SHA256HashData], limit=200)
Looks for: an internet-facing app process (IIS/Java/Tomcat/Openfire) spawning a shell or recon tool — classic post-exploitation of a public-facing app. FP: legit deployment/monitoring scripts run by app-pool identities — exclude sanctioned service accounts and maintenance windows.
// HUNT: Web-server process spawning recon/shell (public-facing-app exploitation) // MITRE: T1190, T1059 // CONF: medium FP: medium COST: medium | REQUIRES: ProcessRollup2 // FALSE POSITIVES: legit admin scripts run by app pools / monitoring agents // TUNING: exclude sanctioned deployment/monitoring accounts and known maintenance jobs #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(w3wp|httpd|java|javaw|tomcat\d*|openfire-service|sharepoint)\.exe$/i | FileName=/^(cmd|powershell|whoami|systeminfo|ipconfig|net|net1|tasklist|nltest|quser|query|schtasks)\.exe$/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: a shell copying SystemSettings.exe into ProgramData/Identities/ADriveLogs — the observed deploy step.
// HUNT: SystemSettings.exe copied/staged via shell to a non-default dir // MITRE: T1036.005, T1574.002 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^(cmd|powershell)\.exe$/i | CommandLine=/(copy.{0,60}SystemSettings\.exe|SystemSettings\.exe.{0,60}(ProgramData|Identities|ADriveLogs))/i | table([@timestamp, aid, ComputerName, UserName, CommandLine, ParentBaseFileName], limit=200)
Looks for: execution or write of any Kaspersky-published SharkLoader/dropper MD5. Atomic — promote to Custom IOC (see §10).
// HUNT: SharkLoader / StrikeShark known-bad hashes (Securelist MD5) // MITRE: T1574.002 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 / PeFileWritten #event_simpleName=/ProcessRollup2|PeFileWritten|NewExecutableWritten/ | in(MD5HashData, values=["9c872a0d5d5a38950e8b9ac9b488be3f", "aa3086be652c8b20b0b29b2730d57119", "c559cc68986933200fd5d9e4388e2f58", "b3352b42432dedc4a519f011dc8b5d5a", "24fcebdeecba65004fdb0923763d74fd", "d98f568496512e4f98670c61c97cb07a", "1f65544978b8ea0e745e573b8ee9684b", "a514d1bb62d7916475946fe7c07ac0aa", "9cbd560f820c95d7c38342cd558cb5c6"]) | table([@timestamp, aid, ComputerName, FileName, FilePath, MD5HashData, SHA256HashData], limit=max)
Looks for: a host resolving one of the four published Beacon C2 domains. High-fidelity while infrastructure is live.
// HUNT: StrikeShark Cobalt Strike C2 domains // MITRE: T1071.001 // CONF: high FP: low COST: low | REQUIRES: DnsRequest #event_simpleName=DnsRequest | DomainName=/^(connect-microsoft\.com|ms-record\.com|ms-record\.top|ms-tray\.top)$/i | table([@timestamp, aid, ComputerName, DomainName, ContextBaseFileName], limit=200)
Looks for: procdump/comsvcs against LSASS, or ntdsutil "ifm" NTDS extraction. FP: legit DC backups (ntdsutil) and admin crash-dump collection — exclude sanctioned backup hosts/windows and review the parent process.
// HUNT: LSASS/NTDS credential theft (procdump / comsvcs / ntdsutil ifm) // MITRE: T1003.001, T1003.003 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: legit DC backups (ntdsutil), admin procdump for debugging // TUNING: exclude sanctioned backup windows / known admin hosts #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/(procdump.{0,40}lsass|comsvcs\.dll.{0,20}MiniDump|ntdsutil.{0,30}ifm|ntds.{0,12}create full)/i | table([@timestamp, aid, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName], limit=200)
Looks for: enumeration of Domain/Enterprise Admins and AD groups via net group, dsquery, or Get-ADGroupMember. FP: IT/AD admins and security tooling — scope to non-IT users or a webshell/Beacon parent; exclude admin jump hosts.
// HUNT: Privileged-group / AD enumeration burst (StrikeShark recon) // MITRE: T1087.002, T1069.002 // CONF: medium FP: medium COST: medium | REQUIRES: ProcessRollup2 // FALSE POSITIVES: admin / IT discovery, security tooling // TUNING: scope to non-IT users or webshell/Beacon parent; exclude admin jump hosts #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | CommandLine=/(net\s+group\s+.{0,30}(domain admins|enterprise admins|domain controllers|organization management)|dsquery\s+group|Get-ADGroupMember)/i | table([@timestamp, aid, ComputerName, UserName, CommandLine, ParentBaseFileName], limit=200)
Looks for: schtasks /create registering an Edge/OneDrive/MicrosoftUpdate-named task that runs SystemSettings.exe. FP: genuine Microsoft updater tasks — those are created by TrustedInstaller/SYSTEM installers, not interactive shells; review the parent.
// HUNT: SYSTEM scheduled task masquerading as Edge/OneDrive/Update (StrikeShark persistence) // MITRE: T1053.005, T1036.004 // CONF: medium FP: low COST: low | REQUIRES: ProcessRollup2 // TUNING: exclude genuine updater-task creation by TrustedInstaller/SYSTEM installers #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^schtasks\.exe$/i | CommandLine=/(Edgeupdate|OneDrive Standalone Update|MicrosoftUpdateTask|SystemSettings\.exe)/i | table([@timestamp, aid, ComputerName, UserName, CommandLine, ParentBaseFileName], limit=200)
Looks for: a CurrentVersion\Run value named MFUpdate — the StrikeShark autorun.
// HUNT: Run-key "MFUpdate" persistence (-> SystemSettings.exe) // MITRE: T1547.001 // CONF: high FP: low COST: low | REQUIRES: AsepValueUpdate / RegGenericValueUpdate #event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/ | RegObjectName=/\\CurrentVersion\\Run$/i | RegValueName=/^MFUpdate$/i | table([@timestamp, aid, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue], limit=200)
Looks for: the distinctive encrypted-module / side-load DLL filenames being written to disk.
// HUNT: SharkLoader encrypted-module / side-load artifacts written // MITRE: T1027, T1574.002 // CONF: medium FP: low COST: low | REQUIRES: FileCreateInfo / PeFileWritten // TUNING: pair with a SystemSettings.exe in the same directory #event_simpleName=/PeFileWritten/ | TargetFileName=/\\(DscCoreR\.mui|SyncRes\.dat|GameInputInboxs32\.mui|SystemSettings\.dll)$/i | table([@timestamp, aid, ComputerName, TargetFileName, ContextBaseFileName], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA Name | Pattern | Action | Exclusions |
|---|---|---|---|
| SharkLoader — SystemSettings Side-Load | SystemSettings.exe image path not under \ImmersiveControlPanel\ (Q1) | Detect → Block | None — legit binary only runs from System32 |
| StrikeShark — MFUpdate Run-Key | Run-key value name = MFUpdate (Q9) | Detect | None expected |
| Web-Server Shell Spawn | w3wp/java/tomcat/openfire spawning cmd/powershell/recon (Q2) | Detect (high) | Sanctioned deploy/monitoring accounts |
| LSASS/NTDS Dump | procdump-lsass / ntdsutil ifm cmdline (Q6) | Detect (high) | Approved DC backup jobs / admin hosts |
Promotion path: Q1 and Q9 are low-FP and structural — validate over 7–14 days, then promote to detect, escalate Q1 to block. Q4 hashes → Custom IOC Management (block). Q2/Q6/Q7 stay investigate-led until tuned against your baseline.
Machine-Readable IOC Appendix
One-click blocks for SOC tooling. Hashes (MD5) and C2 domains are Securelist-published; swap expirations to fit your policy.
type,value,action,severity,expiration,description,tags md5,9c872a0d5d5a38950e8b9ac9b488be3f,prevent,critical,2026-12-29,SharkLoader DLL,campaign:StrikeShark md5,aa3086be652c8b20b0b29b2730d57119,prevent,critical,2026-12-29,SharkLoader DLL,campaign:StrikeShark md5,c559cc68986933200fd5d9e4388e2f58,prevent,high,2026-12-29,StrikeShark installer,campaign:StrikeShark md5,b3352b42432dedc4a519f011dc8b5d5a,prevent,high,2026-12-29,StrikeShark dropper,campaign:StrikeShark md5,24fcebdeecba65004fdb0923763d74fd,prevent,high,2026-12-29,StrikeShark dropper,campaign:StrikeShark md5,1f65544978b8ea0e745e573b8ee9684b,prevent,high,2026-12-29,StrikeShark dropper,campaign:StrikeShark domain,connect-microsoft.com,detect,high,2026-09-29,StrikeShark Beacon C2,campaign:StrikeShark domain,ms-record.com,detect,high,2026-09-29,StrikeShark Beacon C2,campaign:StrikeShark domain,ms-record.top,detect,high,2026-09-29,StrikeShark Beacon C2,campaign:StrikeShark domain,ms-tray.top,detect,high,2026-09-29,StrikeShark Beacon C2,campaign:StrikeShark
[ SharkLoader / StrikeShark behaviors ] - SystemSettings.exe running outside ...\ImmersiveControlPanel\ - SystemSettings.dll side-loaded next to a copied SystemSettings.exe - w3wp/java/tomcat/openfire spawning cmd/powershell/recon (T1190) - CurrentVersion\Run value named "MFUpdate" - schtasks /create: Edgeupdate / OneDrive Standalone Update / MicrosoftUpdateTaskUser... running SystemSettings.exe as SYSTEM - Encrypted modules on disk: DscCoreR.mui, SyncRes.dat, GameInputInboxs32.mui - procdump -ma lsass / ntdsutil "ac i ntds" "ifm" - Beacon: ETW patched (EtwEventWrite stub), PPID spoof to svchost
Campaign: StrikeShark (Kaspersky)
Actor: Chinese-speaking (LOW confidence; no known overlap)
Loader: SharkLoader (DLL side-load via SystemSettings.exe)
Payload: Cobalt Strike Beacon (zlib shellcode, reflective PE)
Modules: DscCoreR.mui (Beacon+MinHook), SyncRes.dat (API hooks)
Evasion: Microsoft Detours + MinHook, ETW patch, NT syscall stubs,
PPID spoof -> svchost.exe
Droppers: GoogleUpdateStepup.exe, AnyConnect...predeploy, AutoUpdate.exe
[ ] Exchange patched (CVE-2021-26855 ProxyLogon) & not EOL [ ] SharePoint patched (CVE-2021-27076) [ ] Openfire >= 4.7.5 (CVE-2023-32315) [ ] GeoServer patched (CVE-2024-36401) [ ] F5 BIG-IP patched (CVE-2023-46747) [ ] FortiOS patched (CVE-2024-21762, CVE-2022-40684) [ ] Zimbra patched (CVE-2022-27925); Shiro patched (CVE-2016-4437) [ ] LSASS RunAsPPL / Credential Guard enabled [ ] ASR "Block credential stealing from lsass.exe" enforced [ ] Egress: block/alert C2 domains + look-alike ms-* / connect-microsoft
Detection Validation Gates
- Telemetry ready: Confirm ProcessRollup2, AsepValueUpdate/RegGenericValueUpdate, DnsRequest, and FileCreateInfo/PeFileWritten flow from servers (incl. internet-facing) and DCs.
- Benign baseline: Run Q2 (web-server children), Q6 (cred dump), and Q7 (AD recon) over 7–14 days; record sanctioned admin/backup/monitoring activity for exclusions before alerting.
- Positive test: In a lab, copy
SystemSettings.exetoC:\ProgramDataand run it — confirm Q1 fires; add anMFUpdateRun value — confirm Q9 fires. - Promotion: Promote Q1/Q9 to detect (Q1 → block) only after a clean baseline. Hashes (Q4) → IOC Management block immediately.
Hardening — Tiered & Deployable
- Patch / virtual-patch the exposed edge apps for the CVEs in §1 (ProxyLogon, Openfire, GeoServer, F5, FortiOS, Zimbra, Shiro, SharePoint) — this closes the actor's primary entry. (MITRE M1051 Update Software / M1050 Exploit Protection.)
- Enable LSASS protection — RunAsPPL and/or Credential Guard. (M1043 Credential Access Protection.)
- ASR rule "Block credential stealing from lsass.exe" in enforce mode. (M1040 Behavior Prevention on Endpoint.)
- WDAC/AppLocker: block
SystemSettings.exefrom running outsideSystem32\ImmersiveControlPanel, and unsigned DLLs loading beside it. (M1038 Execution Prevention.) - Audit/alert scheduled-task creation (event 4698) for Edge/OneDrive/Update-named tasks; restrict who can create SYSTEM tasks. (M1028 / M1047 Audit.)
- Egress filtering from the server tier; block/alert the C2 domains and look-alike
ms-*domains. (M1037 Filter Network Traffic.) - Tiered admin model + LAPS to limit credential-theft blast radius. (M1026 Privileged Account Management.)
- DMZ segmentation + WAF / reverse-proxy in front of all internet-facing apps; minimize direct exposure. (M1030 Network Segmentation / M1050.)
- Reduce attack surface: retire EOL/legacy edge services (Shiro, old Zimbra/Openfire) and consolidate remote access behind phishing-resistant MFA. (M1042 / M1032.)
- Disable/limit NTLM and enforce SMB signing to blunt post-dump lateral movement. (M1037 / M1027.)
Deployable Playbooks
P1 · Enable LSASS protection (RunAsPPL)
# Requires reboot. Validate on a pilot ring first. New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' ` -Name 'RunAsPPL' -Value 1 -PropertyType DWord -Force # Verify after reboot (expect event 12 in System log, WPP / LSASS protected): Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name RunAsPPL
P2 · ASR — block credential stealing from LSASS (enforce)
Add-MpPreference -AttackSurfaceReductionRules_Ids ` 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 -AttackSurfaceReductionRules_Actions Enabled Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
P3 · Audit MFUpdate Run-key and masqueraded tasks fleet-wide
# Run-key check
$rk = 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
if (Test-Path $rk) {
(Get-ItemProperty $rk).PSObject.Properties |
Where-Object { $_.Name -eq 'MFUpdate' -or $_.Value -match 'SystemSettings\.exe' } |
Select-Object Name, Value
}
# Suspicious tasks running SystemSettings.exe outside System32
Get-ScheduledTask | ForEach-Object {
$act = $_.Actions.Execute -join ';'
if ($act -match 'SystemSettings\.exe' -and $act -notmatch 'System32') {
[pscustomobject]@{ Task=$_.TaskName; Path=$_.TaskPath; Exec=$act }
}
}
P4 · AppLocker — constrain SystemSettings.exe location
# Concept rule (deploy via GPO, pilot in Audit first): # ALLOW SystemSettings.exe ONLY from %SYSTEM32%\ImmersiveControlPanel\ # DENY SystemSettings.exe from any other path # Review AppLocker 8003/8004 events for 14 days before switching to Enforce.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host in Falcon; for internet-facing servers, pull from the load balancer and preserve the webshell + SystemSettings directory. Do not reboot (in-memory Beacon). | SOC | RTR capture, process tree, loaded modules |
| Eradicate | Remove MFUpdate Run-key and masqueraded tasks; delete side-load dir + encrypted modules; block Securelist hashes (Q4) and C2 domains; remove webshells; patch the exploited app. | IR | Registry/task diff, deleted-file hashes |
| Credential reset | Assume LSASS/NTDS theft if Q6 fired or a DC was touched: force enterprise-wide password reset incl. krbtgt (twice), reset affected service accounts. | IAM + IR | krbtgt reset log, account audit |
| Hunt-back | Sweep fleet with Q1–Q10; pivot on any host that resolved a C2 domain or ran SystemSettings outside System32; review web logs for the initial webshell + other exploited services. | Threat Hunt | Fleet query results, web logs |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1574.002 | SystemSettings side-load | Q1, Q10 | Yes | Good |
| T1190 | Public-facing-app exploitation | Q2 | Yes | Partial (Windows hosts only) |
| T1036.005 | SystemSettings staged/copied | Q3 | — | Good |
| Atomic hashes | Known-bad files | Q4 | IOC | Good |
| T1071.001 | Beacon C2 DNS | Q5 | — | Good (while live) |
| T1003.001/.003 | LSASS / NTDS theft | Q6 | Yes | Partial (FP-tuned) |
| T1087.002 | AD / group enumeration | Q7 | — | Partial |
| T1053.005 / T1036.004 | Masqueraded SYSTEM task | Q8 | — | Good |
| T1547.001 | MFUpdate Run-key | Q9 | Yes | Good |
| T1055.001 / T1134 | Reflective PE, PPID spoof | — | — | Gap — in-memory; rely on side-load/persistence tells + EDR behavioral |
| T1562.006 | ETW patching | — | — | Gap — defeats some log-based detection; catch upstream at side-load |
| Edge appliances (F5/FortiOS) | Exploitation on non-Windows edge | — | — | Gap — no Falcon sensor; use appliance logs + patch (§7, §12) |
Coverage is strongest at the side-load, staging, persistence, and atomic-hash layers (low-FP, structural). Post-exploitation recon/cred-theft need environment tuning. The in-memory Beacon (reflective PE, ETW patch, PPID spoof) and non-Windows edge appliances are genuine gaps — defended by catching the side-load/persistence upstream, EDR memory detections, and patching/segmenting the edge.
Hunt Summary Ticket
TITLE: SharkLoader / StrikeShark Cobalt Strike loader hunt
SEVERITY: Critical — active espionage C2 (edge-app exploitation)
SCOPE: Internet-facing servers, Windows servers/workstations, DCs
HYPOTHESIS: Actor exploits a public-facing app, side-loads SharkLoader
via SystemSettings.exe, persists (MFUpdate Run-key +
masquerade tasks), runs Cobalt Strike, dumps creds.
QUERIES: Q1 side-load | Q2 web-svc shell | Q3 staging | Q4 hashes
Q5 C2 DNS | Q6 LSASS/NTDS | Q7 AD recon | Q8 sched-task
Q9 MFUpdate | Q10 modules
DO FIRST: Q1, Q9, Q4 (lowest FP, structural/atomic) then Q5, Q8.
FINDINGS: <record hosts / hashes / C2 hits / dumped creds here>
GAPS: In-memory Beacon, ETW patch, non-Windows edge appliances.
ACTIONS: Patch/virtual-patch edge apps; enable RunAsPPL + LSASS ASR;
block Q4 hashes + C2; reset creds incl. krbtgt if DC touched.
OWNER: HuntPack
VERSION: v0.1 · 2026-06-29
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 · Vendor | Kaspersky Securelist — StrikeShark / SharkLoader | Loader chain, IOCs, exploited CVEs, persistence, recon/cred-dump TTPs, ATT&CK | 2026-06-29 |
| 2 · Press | The Hacker News — SharkLoader deploys Cobalt Strike | Victimology, delivery, attribution | 2026-06-29 |
| 2 · Press | Help Net Security — SharkLoader dropper vs governments / devs | Targeting, espionage assessment | 2026-06-29 |
| Ref | MITRE ATT&CK — T1574.002 DLL Side-Loading | Technique mapping, mitigations | 2026-06-29 |