Adversaries may use execution guardrails to constrain execution or actions based on adversary supplied and environment specific conditions that are expected to be present on the target. Guardrails ensure that a payload only executes against an intended target and reduces collateral damage from an adversary’s campaign.[1] Values an adversary can provide about a target system or environment to use as guardrails may include specific network share names, attached physical devices, files, joined Active Directory (AD) domains, and local/external IP addresses.[2]
Guardrails can be used to prevent exposure of capabilities in environments that are not intended to be compromised or operated within. This use of guardrails is distinct from typical Virtualization/Sandbox Evasion. While use of Virtualization/Sandbox Evasion may involve checking for known sandbox values and continuing with execution only if there is no match, the use of guardrails will involve checking for an expected target-specific value and only continuing with execution if there is such a match.
Adversaries may identify and block certain user-agents to evade defenses and narrow the scope of their attack to victims and platforms on which it will be most effective. A user-agent self-identifies data such as a user's software application, operating system, vendor, and version. Adversaries may check user-agents for operating system identification and then only serve malware for the exploitable software while ignoring all other operating systems.[3]
ID | Name | Description |
---|---|---|
S1194 | Akira _v2 |
Akira _v2 will fail to execute if the targeted |
S0504 | Anchor |
Anchor can terminate itself if specific execution flags are not present.[5] |
S1133 | Apostle |
Apostle's ransomware variant requires that a base64-encoded argument is passed when executed, that is used as the Public Key for subsequent encryption operations. If Apostle is executed without this argument, it automatically runs a self-delete function.[6] |
S0570 | BitPaymer |
BitPaymer compares file names and paths to a list of excluded names and directory names during encryption.[7] |
G1043 | BlackByte |
BlackByte stopped execution if identified language settings on victim machines was Russian or one of several language associated with former Soviet republics.[8] BlackByte has used ransomware variants requiring a key passed on the command line for the malware to execute.[9] |
S1180 | BlackByte Ransomware |
BlackByte Ransomware creates a mutex value with a hard-coded name, and terminates if that mutex already exists on the victim system. BlackByte Ransomware checks the system language to see if it matches one of a list of hard-coded values; if a match is found, the malware will terminate.[10] |
S1184 | BOLDMOVE |
BOLDMOVE verifies it is executing from a specific path during execution.[11] |
S0635 | BoomBox |
BoomBox can check its current working directory and for the presence of a specific file and terminate if specific values are not found.[12] |
S1161 | BPFDoor |
BPFDoor creates a zero byte PID file at |
S1149 | CHIMNEYSWEEP |
CHIMNEYSWEEP can execute a task which leads to execution if it finds a process name containing "creensaver."[14] |
S1111 | DarkGate |
DarkGate uses per-victim links for hosting malicious archives, such as ZIP files, in services such as SharePoint to prevent other entities from retrieving them.[15] |
S1052 | DEADEYE |
DEADEYE can ensure it executes only on intended systems by identifying the victim's volume serial number, hostname, and/or DNS domain.[16] |
S0634 | EnvyScout |
EnvyScout can call |
S1179 | Exbyte |
Exbyte checks for the presence of a configuration file before completing execution.[17] |
G0047 | Gamaredon Group |
Gamaredon Group has used geoblocking to limit downloads of the malicious file to specific geographic locations.[18] |
S1185 | LightSpy |
On macOS, LightSpy checks the existence of a process identification number (PID) file, |
S1199 | LockBit 2.0 |
LockBit 2.0 will not execute on hosts where the system language is set to a language spoken in the Commonwealth of Independent States region.[20][21] |
S1202 | LockBit 3.0 |
LockBit 3.0 can make execution dependent on specific parameters including a unique passphrase and the system language of the targeted host not being found on a set exclusion list. [22][23][24] |
S1143 | LunarLoader |
LunarLoader can use the DNS domain name of a compromised host to create a decryption key to ensure a malicious payload can only execute against the intended targets.[25] |
S0637 | NativeZone |
NativeZone can check for the presence of KM.EkeyAlmaz1C.dll and will halt execution unless it is in the same directory as the rest of the malware's components.[12][26] |
S1212 | RansomHub |
RansomHub will terminate without proceeding to encryption if the infected machine is on a list of allowlisted machines specified in its configuration.[27] |
S1130 | Raspberry Robin |
Raspberry Robin will check for the presence of several security products on victim machines and will avoid UAC bypass mechanisms if they are identified.[28] Raspberry Robin can use specific cookie values in HTTP requests to command and control infrastructure to validate that requests for second stage payloads originate from the initial downloader script.[29] |
C0047 | RedDelta Modified PlugX Infection Chain Operations |
Mustang Panda included the use of Cloudflare geofencing mechanisms to limit payload download activity during RedDelta Modified PlugX Infection Chain Operations.[30] |
S1150 | ROADSWEEP |
ROADSWEEP requires four command line arguments to execute correctly, otherwise it will produce a message box and halt execution.[14][31][32] |
S1210 | Sagerunex |
Sagerunex uses a "servicemain" function to verify its environment to ensure it can only be executed as a service, as well as the existence of a configuration file in a specified directory.[33] |
S1178 | ShrinkLocker |
ShrinkLocker will exit its "main" function if the victim domain name does not match provided criteria.[34] |
S1035 | Small Sieve |
Small Sieve can only execute correctly if the word |
S1200 | StealBit |
StealBit will execute an empty infinite loop if it detects it is being run in the context of a debugger.[36] |
S1183 | StrelaStealer |
StrelaStealer variants only execute if the keyboard layout or language matches a set list of variables.[37][38] |
S0603 | Stuxnet |
Stuxnet checks for specific operating systems on 32-bit machines, Registry keys, and dates for vulnerabilities, and will exit execution if the values are not met.[39] |
S0562 | SUNSPOT |
SUNSPOT only replaces SolarWinds Orion source code if the MD5 checksums of both the original source code file and backdoored replacement source code match hardcoded values.[40] |
S0678 | Torisma |
Torisma is only delivered to a compromised host if the victim's IP address is on an allow-list.[41] |
S0636 | VaporRage |
VaporRage has the ability to check for the presence of a specific DLL and terminate if it is not found.[12] |
ID | Mitigation | Description |
---|---|---|
M1055 | Do Not Mitigate |
Execution Guardrails likely should not be mitigated with preventative controls because it may protect unintended targets from being compromised. If targeted, efforts should be focused on preventing adversary tools from running earlier in the chain of activity and on identifying subsequent malicious behavior if compromised. |
ID | Data Source | Data Component | Detects |
---|---|---|---|
DS0017 | Command | Command Execution |
Monitor executed commands and arguments that may gather information about the victim's business relationships that can be used during targeting. Detecting the use of guardrails may be difficult depending on the implementation. |
DS0009 | Process | Process Creation |
Monitoring for suspicious processes being spawned that gather a variety of system information or perform other forms of Discovery, especially in a short period of time, may aid in detection. Detecting the use of guardrails may be difficult depending on the implementation. |