System Binary Proxy Execution
Adversaries may bypass process and/or signature-based defenses by proxying execution of malicious content with signed, or otherwise trusted, binaries. Binaries used in this technique are often Microsoft-signed files, indicating that they have been either downloaded from Microsoft or are already native in the operating system. Several Microsoft-signed binaries that are default on Windows installations can be used to proxy execution of other files or commands. Sub-techniques include abuse of mshta.exe, rundll32.exe, regsvr32.exe, msiexec.exe, cmstp.exe, installutil.exe, regsvcs.exe, regasm.exe, odbcconf.exe, verclsid.exe, mavinject.exe, control.exe (Control Panel), compiled HTML files (hh.exe), MMC snap-ins, Electron applications, and wuauclt.exe. On Linux, trusted binaries such as split may be abused similarly. Real-world usage includes Lazarus Group abusing wuauclt.exe to execute malicious DLLs and Volt Typhoon broadly leveraging LOLBins to maintain and expand network access.
let LOLBins = dynamic([
"mshta.exe", "rundll32.exe", "regsvr32.exe", "msiexec.exe",
"cmstp.exe", "installutil.exe", "regsvcs.exe", "regasm.exe",
"odbcconf.exe", "verclsid.exe", "mavinject.exe",
"hh.exe", "wuauclt.exe", "mmc.exe", "xwizard.exe",
"syncappvpublishingserver.exe", "appsyncpublishingserver.exe"
]);
let SuspiciousParents = dynamic([
"winword.exe", "excel.exe", "powerpnt.exe", "outlook.exe",
"onenote.exe", "msaccess.exe", "mspub.exe", "visio.exe",
"wscript.exe", "cscript.exe", "mshta.exe", "cmd.exe",
"powershell.exe", "pwsh.exe", "explorer.exe"
]);
let SuspiciousNetworkLOLBins = dynamic([
"mshta.exe", "regsvr32.exe", "rundll32.exe", "msiexec.exe", "cmstp.exe"
]);
DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName in~ (LOLBins)
| extend IsOfficeParent = InitiatingProcessFileName in~ (SuspiciousParents)
| extend HasRemoteURL = ProcessCommandLine has_any ("http://", "https://", "ftp://", "\\\\")
| extend HasComScript = ProcessCommandLine has_any (".sct", ".hta", ".vbs", ".js", ".wsf", ".dll,", ".ocx")
| extend RegSvr32Bypass = (FileName =~ "regsvr32.exe" and ProcessCommandLine has_any ("/s", "/u", "/i:", "scrobj"))
| extend MshtaHta = (FileName =~ "mshta.exe" and ProcessCommandLine has_any (".hta", "javascript:", "vbscript:"))
| extend RunDll32Sus = (FileName =~ "rundll32.exe" and (ProcessCommandLine has_any ("javascript:", "shell32.dll", "advpack.dll", "ieadvpack.dll", "syssetup.dll") or ProcessCommandLine matches regex @"rundll32\.exe\s+[^,]+,(\w+)"))
| extend CMSTPInf = (FileName =~ "cmstp.exe" and ProcessCommandLine has_any ("/s", "/ns", ".inf"))
| extend InstallUtilBypass = (FileName =~ "installutil.exe" and ProcessCommandLine has_any ("/logfile=", "/LogToConsole=", "/U"))
| extend WuaucltDll = (FileName =~ "wuauclt.exe" and ProcessCommandLine has_any ("UpdateDeploymentProvider", "/UpdateDeploymentProvider"))
| extend OdbcConfRSP = (FileName =~ "odbcconf.exe" and ProcessCommandLine has_any ("/a", "-a", "regsvr", ".rsp"))
| extend SuspicionScore = toint(IsOfficeParent) + toint(HasRemoteURL) + toint(HasComScript)
+ toint(RegSvr32Bypass) + toint(MshtaHta) + toint(RunDll32Sus)
+ toint(CMSTPInf) + toint(InstallUtilBypass) + toint(WuaucltDll) + toint(OdbcConfRSP)
| where SuspicionScore > 0
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine,
IsOfficeParent, HasRemoteURL, HasComScript, RegSvr32Bypass,
MshtaHta, RunDll32Sus, CMSTPInf, InstallUtilBypass, WuaucltDll, OdbcConfRSP,
SuspicionScore
| sort by SuspicionScore desc, Timestamp desc Data Sources
Required Tables
False Positives
- Legitimate software installers using msiexec.exe or installutil.exe during application deployment
- Administrative scripts and IT management tools (SCCM, PDQ Deploy) invoking rundll32.exe or regsvr32.exe for component registration
- Corporate HTA-based applications (legacy web apps, admin dashboards) legitimately executed via mshta.exe
- VPN and security software installers using cmstp.exe to configure connection profiles during initial setup
- Windows Update processes legitimately invoking wuauclt.exe as part of the update delivery mechanism
References (11)
- https://attack.mitre.org/techniques/T1218/
- https://github.com/LOLBAS-Project/LOLBAS
- https://gtfobins.github.io/gtfobins/split/
- https://learn.microsoft.com/en-us/defender-endpoint/attack-surface-reduction-rules-reference
- https://github.com/redcanaryco/atomic-red-team/tree/master/atomics/T1218
- https://github.com/SigmaHQ/sigma/tree/master/rules/windows/process_creation
- https://posts.specterops.io/documenting-and-attacking-a-windows-defender-application-control-feature-the-hard-way-a-case-study-in-applocker-bypass-8e0a5b9c89a1
- https://www.mandiant.com/resources/blog/the-risks-of-bypassing-uac-with-cmstp
- https://pentestlab.blog/2017/05/11/applocker-bypass-regsvr32/
- https://attack.mitre.org/groups/G0032/
- https://www.cisa.gov/sites/default/files/2024-02/aa24-038a-prc-state-sponsored-actors-compromise-us-critical-infrastructure_0.pdf
Unlock Pro Content
Get the full detection package for T1218 including response playbook, investigation guide, and atomic red team tests.