Adversaries may use hidden windows to conceal malicious activity from the plain sight of users. In some cases, windows that would typically be displayed when an application carries out an operation can be hidden. This may be utilized by system administrators to avoid disrupting user work environments when carrying out administrative tasks.
Adversaries may abuse these functionalities to hide otherwise visible windows from users so as not to alert the user to adversary activity on the system.[1]
On macOS, the configurations for how applications run are listed in property list (plist) files. One of the tags in these files can be apple.awt.UIElement, which allows for Java applications to prevent the application's icon from appearing in the Dock. A common use for this is when applications run in the system tray, but don't also want to show up in the Dock.
Similarly, on Windows there are a variety of features in scripting languages, such as PowerShell, Jscript, and Visual Basic to make windows hidden. One example of this is powershell.exe -WindowStyle Hidden.[2]
The Windows Registry can also be edited to hide application windows from the current user. For example, by setting the WindowPosition subkey in the HKEY_CURRENT_USER\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_PowerShell.exe Registry key to a maximum value, PowerShell windows will open off screen and be hidden.[3]
In addition, Windows supports the CreateDesktop() API that can create a hidden desktop window with its own corresponding explorer.exe process.[4][5] All applications running on the hidden desktop window, such as a hidden VNC (hVNC) session,[4] will be invisible to other desktops windows.
Adversaries may also leverage cmd.exe[6] as a parent process, and then utilize a LOLBin, such as DeviceCredentialDeployment.exe,[7][8] to hide windows.
| ID | Name | Description |
|---|---|---|
| S0331 | Agent Tesla |
Agent Tesla has used |
| G0073 | APT19 |
APT19 used |
| G0007 | APT28 |
APT28 has used the WindowStyle parameter to conceal PowerShell windows.[11] [12] |
| G0022 | APT3 |
APT3 has been known to use |
| G0050 | APT32 |
APT32 has used the WindowStyle parameter to conceal PowerShell windows. [14] [15] |
| S0373 | Astaroth |
Astaroth loads its module with the XSL script parameter |
| S1087 | AsyncRAT |
AsyncRAT can hide the execution of scheduled tasks using |
| S1053 | AvosLocker |
AvosLocker has hidden its console window by using the |
| S0360 | BONDUPDATER |
BONDUPDATER uses |
| S1226 | BOOKWORM |
BOOKWORM has created a hidden window when conducting key logging and clipboard theft through its KBLogger.dll module.[20] |
| S1237 | CANONSTAGER |
CANONSTAGER has created a new window with a height and width of zero to remain hidden on the screen.[21] |
| G0052 | CopyKittens |
CopyKittens has used |
| S0625 | Cuba | |
| G0079 | DarkHydrus |
DarkHydrus has used |
| G0009 | Deep Panda |
Deep Panda has used |
| G0046 | FIN7 |
FIN7 has used .txt files to conceal PowerShell commands.[26] |
| G0047 | Gamaredon Group |
Gamaredon Group has used |
| G0078 | Gorgon Group |
Gorgon Group has used |
| S0037 | HAMMERTOSS |
HAMMERTOSS has used |
| G0126 | Higaisa | |
| S0431 | HotCroissant |
HotCroissant has the ability to hide the window for operations performed on a given file.[32] |
| S1152 | IMAPLoader |
IMAPLoader hides the Windows Console window created by its execution by directly importing the |
| S1245 | InvisibleFerret |
InvisibleFerret has executed Python instances of the browser module ".n2/bow" utilizing the |
| S0260 | InvisiMole |
InvisiMole has executed legitimate tools in hidden windows.[35] |
| S1020 | Kevin |
Kevin can hide the current window from the targeted user via the |
| S0387 | KeyBoy |
KeyBoy uses |
| G0094 | Kimsuky |
Kimsuky has used an information gathering module that will hide an AV software window from the victim.[38] Kimsuky has also been known to use |
| S0437 | Kivars |
Kivars has the ability to conceal its activity through hiding active windows.[40] |
| S0250 | Koadic |
Koadic has used the command |
| S0669 | KOCTOPUS |
KOCTOPUS has used |
| S1199 | LockBit 2.0 |
LockBit 2.0 can execute command line arguments in a hidden window.[42] |
| S1213 | Lumma Stealer |
Lumma Stealer has utilized the .NET |
| G0059 | Magic Hound |
Magic Hound malware has a function to determine whether the C2 server wishes to execute the newly dropped file in a hidden window.[44] |
| S0500 | MCMD |
MCMD can modify processes to prevent them from being visible on the desktop.[45] |
| G1051 | Medusa Group |
Medusa Group has utilized the |
| S1244 | Medusa Ransomware |
Medusa Ransomware has utilized the |
| S0455 | Metamorfo |
Metamorfo has hidden its GUI using the ShowWindow() WINAPI call.[47] |
| S0688 | Meteor |
Meteor can hide its console window upon execution to decrease its visibility to a victim.[48] |
| G0133 | Nomadic Octopus |
Nomadic Octopus executed PowerShell in a hidden window.[49] |
| S1172 | OilBooster |
OilBooster can hide its console window upon execution through the |
| S0013 | PlugX |
PlugX has the ability to execute a command on a hidden desktop.[51] |
| S0441 | PowerShower |
PowerShower has added a registry key so future powershell.exe instances are spawned with coordinates for a window position off-screen by default.[52] |
| S0262 | QuasarRAT |
QuasarRAT can hide process windows and make web requests invisible to the compromised user. Requests marked as invisible have been sent with user-agent string |
| S1076 | QUIETCANARY |
QUIETCANARY can execute processes in a hidden window.[54] |
| S0686 | QuietSieve |
QuietSieve has the ability to execute payloads in a hidden window.[55] |
| S1089 | SharpDisco |
SharpDisco can hide windows using |
| S0692 | SILENTTRINITY |
SILENTTRINITY has the ability to set its window state to hidden.[57] |
| S1086 | Snip3 |
Snip3 can execute PowerShell scripts in a hidden window.[58] |
| S0491 | StrongPity |
StrongPity has the ability to hide the console window for its document search module from the user.[59] |
| G1022 | ToddyCat |
ToddyCat has hidden malicious scripts using |
| S0266 | TrickBot |
TrickBot has used a hidden VNC (hVNC) window to monitor the victim and collect information stealthily.[61] |
| S0386 | Ursnif |
Ursnif droppers have used COM properties to execute malware in hidden windows.[62] |
| S0670 | WarzoneRAT |
WarzoneRAT has the ability of performing remote desktop access via a hVNC window for decreased visibility.[63] |
| S0466 | WindTail |
WindTail can instruct the OS to execute an application without a dock icon or menu.[64] |
| ID | Mitigation | Description |
|---|---|---|
| M1038 | Execution Prevention |
Limit or restrict program execution using anti-virus software. On MacOS, allowlist programs that are allowed to have the plist tag. All other programs should be considered suspicious. |
| M1033 | Limit Software Installation |
Restrict the installation of software that may be abused to create hidden desktops, such as hVNC, to user groups that require it. |
| ID | Name | Analytic ID | Analytic Description |
|---|---|---|---|
| DET0128 | Detection Strategy for Hidden Windows | AN0360 |
Suspicious use of scripting parameters or registry edits to hide process windows (e.g., powershell.exe -WindowStyle Hidden, or registry modifications pushing window positions off screen). Defender view: correlation of hidden execution with anomalous process lineage or hVNC-like CreateDesktop API calls. |
| AN0361 |
Suspicious invocation of GUI utilities or scripts with suppressed or redirected windowing options. Defender view: detection of X11 or Wayland calls to spawn windows that do not appear on active displays, or use of nohup/screen/tmux to mask interactive shells. |
||
| AN0362 |
Modification of plist files to set apple.awt.UIElement or similar flags hiding app icons and windows, and dscl/command-line activity that suppresses visibility. Defender view: correlation of plist modifications with unexpected hidden user applications. |