APT38 is a North Korean state-sponsored threat group that specializes in financial cyber operations; it has been attributed to the Reconnaissance General Bureau.[1] Active since at least 2014, APT38 has targeted banks, financial institutions, casinos, cryptocurrency exchanges, SWIFT system endpoints, and ATMs in at least 38 countries worldwide. Significant operations include the 2016 Bank of Bangladesh heist, Bancomext [2] and Banco de Chile [2], along with software supply chain compromises and destructive malware attacks.[1][2][3][4][5][6][7]
North Korean group definitions are known to have significant overlap, and some security researchers report all North Korean state-sponsored cyber activity under the name Lazarus Group instead of tracking clusters or subgroups.
| Name | Description |
|---|---|
| NICKEL GLADSTONE | |
| BeagleBoyz | |
| Bluenoroff | |
| Stardust Chollima | |
| Sapphire Sleet | |
| COPERNICIUM |
| Domain | ID | Name | Use | |
|---|---|---|---|---|
| Enterprise | T1548 | .002 | Abuse Elevation Control Mechanism: Bypass User Account Control |
APT38 has used the legitimate application |
| .003 | Abuse Elevation Control Mechanism: Sudo and Sudo Caching |
APT38 has executed persistence actions using |
||
| .006 | Abuse Elevation Control Mechanism: TCC Manipulation |
APT38 has used Finder, a macOS native app with FDA permissions, to rename the folder |
||
| Enterprise | T1583 | .001 | Acquire Infrastructure: Domains |
APT38 has created fake domains to imitate legitimate venture capital or bank domains.[12] APT38 has acquired domains to host fake skill assessments leading to malware download.[13] APT38 has registered domains that masquerade as financial institutions and resemble legitimate services.[5] APT38 has also obtained C2 domains to host second-stage malicious payloads.[5][7] |
| .003 | Acquire Infrastructure: Virtual Private Server |
APT38 has used virtual private server (VPS) providers to host C2 infrastructure including Hostwinds.[7] |
||
| .006 | Acquire Infrastructure: Web Services |
APT38 has used OneDrive and GoogleDrive to host malicious files.[5][7] |
||
| Enterprise | T1071 | .001 | Application Layer Protocol: Web Protocols |
APT38 used a backdoor, QUICKRIDE, to communicate to the C2 server over HTTP and HTTPS.[2] APT38 has also configured malicious payloads to communicate with C2 using HTTP POST requests that blend in with common traffic.[5][6] |
| Enterprise | T1560 | .001 | Archive Collected Data: Archive via Utility |
APT38 has archived collected data within ZIP files prior to exfiltration.[6] |
| Enterprise | T1547 | .001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder |
APT38 has also added registry run keys within |
| Enterprise | T1217 | Browser Information Discovery |
APT38 has collected browser bookmark information to learn more about compromised hosts, obtain personal information about users, and acquire details about internal network resources.[1] APT38 has also used malware capable of enumerating 166 unique cryptocurrency wallets, browser extensions, and browser history.[7] |
|
| Enterprise | T1110 | Brute Force |
APT38 has used brute force techniques to attempt account access when passwords are unknown or when password hashes are unavailable.[1] |
|
| Enterprise | T1115 | Clipboard Data |
APT38 used a Trojan called KEYLIME to collect data from the clipboard.[2] |
|
| Enterprise | T1059 | .001 | Command and Scripting Interpreter: PowerShell |
APT38 has used PowerShell to execute commands and other operational tasks.[1][5] |
| .002 | Command and Scripting Interpreter: AppleScript |
APT38 has sent Mac users.scpt files to trigger malicious downloads.[13] APT38 has targeted macOS uses with native script stagers leading to malicious paylaods.[5] APT38 has also used an AppleScript-based credential harvesting component.[6] |
||
| .003 | Command and Scripting Interpreter: Windows Command Shell |
APT38 has used a command-line tunneler, NACHOCHEESE, to give them shell access to a victim’s machine.[2] Additionally, APT38 has used batch scripts.[12][7] APT38 has also executed scripts to launch |
||
| .004 | Command and Scripting Interpreter: Unix Shell |
APT38 has run malicious payloads using Linux and Unix shells. APT38 has also executed Unix commands sequentially using |
||
| .005 | Command and Scripting Interpreter: Visual Basic |
APT38 has used VBScript to execute commands and other operational tasks.[1][12] APT38 has sent Windows victims Visual Basic script stagers leading to malicious downloads.[13][5] APT38 has also used VBScript to execute scripts for data exfiltration.[5] |
||
| .006 | Command and Scripting Interpreter: Python |
APT38 has used Python versions of its remote access tools on Linux targets.[5] |
||
| .007 | Command and Scripting Interpreter: JavaScript |
APT38 has utilized malicious JavaScript payloads to compromise victims.[5][7] |
||
| Enterprise | T1586 | .003 | Compromise Accounts: Cloud Accounts |
APT38 has used virtual private server (VPS) providers to host C2 infrastructure including Hostwinds.[5][7] |
| Enterprise | T1543 | .001 | Create or Modify System Process: Launch Agent |
APT38 has executed a multiplatform implant that placed launch agents in ~/Library/NodePackages/ to establish persistence on macOS.[7] |
| .003 | Create or Modify System Process: Windows Service |
APT38 has installed a new Windows service to establish persistence.[1] APT38 has gained persistence on compromised systems independent of user logon by creating a background service using `sc create scdev binPath= "c:\windows\system32\svchost.exe -k scdev".[7] |
||
| .004 | Create or Modify System Process: Launch Daemon |
APT38 has established persistence through storing the malicious plist files in |
||
| Enterprise | T1555 | Credentials from Password Stores |
APT38 has stolen credentials from the compromised device to include those used to access cryptocurrency wallets.[13][6] |
|
| .001 | Keychain | |||
| .003 | Credentials from Web Browsers |
APT38 has gathered Web browser data to include saved credentials, cookies, bookmarks, autofill data, and extension-specific storage. APT38 has also sought cryptocurrency wallet extensions.[6][7] |
||
| Enterprise | T1485 | Data Destruction |
APT38 has used a custom secure delete function to make deleted files unrecoverable.[2] |
|
| Enterprise | T1132 | .001 | Data Encoding: Standard Encoding |
APT38 has utilized Base64 encoded HTTP POST communications to C2.[7] |
| Enterprise | T1486 | Data Encrypted for Impact |
APT38 has used Hermes ransomware to encrypt files with AES256.[2] |
|
| Enterprise | T1213 | .005 | Data from Information Repositories: Messaging Applications |
APT38 has gathered Telegram Desktop messaging data from the applications data directories stored on the victim device to include cryptographic key material, and session mapping files that can recreate a compromised user’s Telegram session on another system.[6] |
| .006 | Data from Information Repositories: Databases |
APT38 has copied Apple Notes database from its application container and staged for upload.[6] |
||
| Enterprise | T1005 | Data from Local System | ||
| Enterprise | T1565 | .001 | Data Manipulation: Stored Data Manipulation |
APT38 has used DYEPACK to create, delete, and alter records in databases used for SWIFT transactions.[2] |
| .002 | Data Manipulation: Transmitted Data Manipulation |
APT38 has used DYEPACK to manipulate SWIFT messages en route to a printer.[2] |
||
| .003 | Data Manipulation: Runtime Data Manipulation |
APT38 has used DYEPACK.FOX to manipulate PDF data as it is accessed to remove traces of fraudulent SWIFT transactions from the data displayed to the end user.[2] |
||
| Enterprise | T1074 | .001 | Data Staged: Local Data Staging |
APT38 has staged files in a central location prior to exfiltration.[6][7] |
| Enterprise | T1678 | Delay Execution |
APT38 has delayed C2 beaconing to longer intervals on network failures.[7] |
|
| Enterprise | T1140 | Deobfuscate/Decode Files or Information |
APT38 has used the RC4 algorithm to decrypt configuration data. [12] APT38 has decocoded Base64 encoded PowerShell scripts prior to execution.[7] |
|
| Enterprise | T1686 | Disable or Modify System Firewall |
APT38 have created firewall exemptions on specific ports, including ports 443, 6443, 8443, and 9443.[1] |
|
| .002 | Network Device Firewall |
APT38 have created firewall exemptions on specific ports, including ports 443, 6443, 8443, and 9443. [1] |
||
| Enterprise | T1685 | Disable or Modify Tools |
APT38 has unhooked DLLs to disable endpoint detection and response (EDR) or anti-virus (AV) tools.[12] |
|
| .003 | Modify or Spoof Tool UI |
APT38 has displayed a fake "system update complete" dialog to the user following successful deployment of malicious payloads.[6] |
||
| .005 | Clear Windows Event Logs |
APT38 clears Window Event logs and Sysmon logs from the system.[2] |
||
| Enterprise | T1561 | .002 | Disk Wipe: Disk Structure Wipe |
APT38 has used a custom MBR wiper named BOOTWRECK to render systems inoperable.[2] |
| Enterprise | T1189 | Drive-by Compromise |
APT38 has conducted watering holes schemes to gain initial access to victims.[2][1] |
|
| Enterprise | T1585 | .001 | Establish Accounts: Social Media Accounts |
APT38 has used professional platforms such as LinkedIn to contact potential victims.[13][5][6][7] |
| .002 | Establish Accounts: Email Accounts |
APT38 has set up anonymous emails to use in publishing poisoned software packages such as sergey2016@tutamail[.]com.[7] |
||
| Enterprise | T1546 | .016 | Event Triggered Execution: Installer Packages |
APT38 has poisoned Axios and Mastra npm packages with malicious post-install hooks.[5][7] |
| Enterprise | T1480 | Execution Guardrails |
APT38 has leveraged file discovery actions to determine if a predetermined file is present prior to execution to prevent redundant execution on a compromised device.[6] |
|
| .002 | Mutual Exclusion | |||
| Enterprise | T1048 | .002 | Exfiltration Over Alternative Protocol: Exfiltration Over Asymmetric Encrypted Non-C2 Protocol |
APT38 has used malware to exfiltrate stolen data with a custom ICAP-style protocol over HTTPS.[7] |
| Enterprise | T1041 | Exfiltration Over C2 Channel |
APT38 has exfiltrated victim device and user details contained in a POST request to register the compromised system with C2 infrastructure.[6][7] |
|
| Enterprise | T1567 | Exfiltration Over Web Service |
APT38 has exfiltrated stolen credentials to actor-controlled infrastructure leveraging Telegram Bot API.[7] |
|
| Enterprise | T1083 | File and Directory Discovery |
APT38 has enumerated files and directories, or searched in specific locations within a compromised host.[1][5][6] |
|
| Enterprise | T1222 | .002 | File and Directory Permissions Modification: Linux and Mac Permissions |
APT38 has changed file and directory permissions using |
| Enterprise | T1657 | Financial Theft | ||
| Enterprise | T1683 | .001 | Generate Content: Written Content |
APT38 has created decoy content that resembles legitimate guidance for support to victims that contain hidden malicious actions.[6] |
| .002 | Generate Content: Audio-Visual Content |
APT38 has created fictitious profiles on social media utilizing fake photos and personas to entice users to engage in the schemes.[13] |
||
| Enterprise | T1564 | .003 | Hide Artifacts: Hidden Window |
APT38 has configured malicious scripts to execute in hidden windows.[5][7] |
| .011 | Hide Artifacts: Ignore Process Interrupts |
APT38 has used remote access tools that run AppleScript using |
||
| .012 | Hide Artifacts: File/Path Exclusions |
APT38 has added Microsoft Defender exclusions to include |
||
| Enterprise | T1070 | .003 | Indicator Removal: Clear Command History |
APT38 has executed scripts to delete the PowerShell command history file.[7] |
| .004 | Indicator Removal: File Deletion |
APT38 has used a utility called CLOSESHAVE that can securely delete a file from the system. APT38 has also removed malware, tools, scripts, or other non-native files used during the intrusion to reduce their footprint or as part of the post-intrusion cleanup process.[2][1][6][5] |
||
| .006 | Indicator Removal: Timestomp |
APT38 has modified data timestamps to mimic files that are in the same folder on a compromised host.[1] |
||
| Enterprise | T1105 | Ingress Tool Transfer |
APT38 used a backdoor, NESTEGG, that has the capability to download and upload files to and from a victim’s machine.[2] Additionally, APT38 has downloaded other payloads onto a victim’s machine.[12] APT38 has also injected npm packages with malicious dependencies that download second-stage payloads to victim machines.[5][7] |
|
| Enterprise | T1056 | .001 | Input Capture: Keylogging |
APT38 used a Trojan called KEYLIME to capture keystrokes from the victim’s machine.[2] |
| .002 | Input Capture: GUI Input Capture |
APT38 has leveraged a fictitious native macOS password dialog prompt to entice victims to enter credentials.[7] |
||
| Enterprise | T1036 | .003 | Masquerading: Rename Legitimate Utilities |
APT38 has renamed system utilities, such as |
| .005 | Masquerading: Match Legitimate Resource Name or Location |
APT38 has named malicious payloads as benign-looking executables to blend in the environment including Run keys, npm packages, and JavaScript utilities often using names mirroring Apple, Windows, or other native system files.[5][7][6] |
||
| .006 | Masquerading: Space after Filename |
APT38 has put several spaces before a file extension to avoid detection and suspicion.[12] |
||
| .008 | Masquerading: Masquerade File Type |
APT38 has configured malware to rename malicious payloads with naming conventions that reduce a chance of detection to include renaming "package.md" to "package.json".[5] |
||
| Enterprise | T1112 | Modify Registry |
APT38 uses a tool called CLEANTOAD that has the capability to modify Registry keys.[2] |
|
| Enterprise | T1106 | Native API |
APT38 has used the Windows API to execute code within a victim's system.[1] |
|
| Enterprise | T1135 | Network Share Discovery |
APT38 has enumerated network shares on a compromised host.[1][6] |
|
| Enterprise | T1571 | Non-Standard Port |
APT38 has leveraged unique non-standard ports for communications with actor-controlled C2 infrastructure to include Port 8000.[5][7][6] |
|
| Enterprise | T1027 | .002 | Obfuscated Files or Information: Software Packing |
APT38 has used several code packing methods such as Themida, Enigma, VMProtect, and Obsidium, to pack their implants.[2] |
| .010 | Obfuscated Files or Information: Command Obfuscation | |||
| .015 | Obfuscated Files or Information: Compression |
APT38 has compressed its malicious payloads in ZIP files for delivery to victims.[6] |
||
| .016 | Obfuscated Files or Information: Junk Code Insertion |
APT38 has added thousands of blank lines to scripts to push malicious logic past the scrollable view of the script editor.[6] |
||
| Enterprise | T1588 | .002 | Obtain Capabilities: Tool |
APT38 has obtained and used open-source tools such as Mimikatz.[14] |
| Enterprise | T1566 | .001 | Phishing: Spearphishing Attachment |
APT38 has conducted spearphishing campaigns using malicious email attachments.[1] APT38 has sent fake Zoom support emails with malicious attachments.[6] |
| .002 | Phishing: Spearphishing Link |
APT38 has sent phishing emails with invite links to fictitious meetings.[6] |
||
| .003 | Phishing: Spearphishing via Service |
APT38 has used social media sites such as LinkedIn to send malicious links to potential vicitims.[5][7] |
||
| Enterprise | T1677 | Poisoned Pipeline Execution |
APT38 has poisoned npm packages with fake runtime dependencies to trigger execution of malicious payloads on developer endpoints or continuous integration and continuous delivery (CI/CD) systems during npm installation or update.[5][7] |
|
| Enterprise | T1690 | Prevent Command History Logging |
APT38 has prepended a space to all of their terminal commands to operate without leaving traces in the HISTCONTROL environment.[1] |
|
| Enterprise | T1057 | Process Discovery |
APT38 leveraged Sysmon to understand the processes, services in the organization.[2] APT38 has used Python versions of its remote access tools on Linux targets.[5] APT38 has also configured malicious payloads to gather running processes using |
|
| Enterprise | T1055 | Process Injection |
APT38 has injected malicious payloads into the |
|
| Enterprise | T1012 | Query Registry |
APT38 has run node.js malware to query the Registry to discover installed software.[7] |
|
| Enterprise | T1620 | Reflective Code Loading |
APT38 has configured malicious payloads to reflectively load using the macOS |
|
| Enterprise | T1053 | .003 | Scheduled Task/Job: Cron |
APT38 has used cron to create pre-scheduled and periodic background jobs on a Linux system.[1] |
| .005 | Scheduled Task/Job: Scheduled Task |
APT38 has used Task Scheduler to run programs at system startup or on a scheduled basis for persistence.[1] Additionally, APT38 has used living-off-the-land scripts to execute a malicious script via a scheduled task.[12] |
||
| .006 | Scheduled Task/Job: Systemd Timers |
APT38 has used a multiplatform implant that can write to |
||
| Enterprise | T1505 | .003 | Server Software Component: Web Shell |
APT38 has used web shells for persistence or to ensure redundant access.[1] |
| Enterprise | T1684 | .001 | Social Engineering: Impersonation |
APT38 has impersonated recruiters and venture capitalists to lure victims into connecting to malicious skills assessments or online business meetings.[13] |
| Enterprise | T1518 | Software Discovery |
APT38 has enumerated installed applications to build an inventory of the system’s software environment.[6][7] |
|
| .001 | Security Software Discovery |
APT38 has identified security software, configurations, defensive tools, and sensors installed on a compromised system.[1][12] APT38 has also executed malware implants to enumerate all installed applications on Windows hosts including installed security products.[7] |
||
| Enterprise | T1608 | .001 | Stage Capabilities: Upload Malware |
APT38 has uploaded malware to cloud storage services for download by targeted victims.[7] |
| Enterprise | T1553 | .005 | Subvert Trust Controls: Mark-of-the-Web Bypass |
APT38 has used ISO and VHD files to deploy malware and to bypass Mark-of-the-Web (MOTW) security measures.[12] |
| Enterprise | T1195 | .001 | Supply Chain Compromise: Compromise Software Dependencies and Development Tools |
APT38 has injected malicious dependencies into software packages such as Axios and Mastra npm packages.[5][7] |
| Enterprise | T1218 | .001 | System Binary Proxy Execution: Compiled HTML File | |
| .005 | System Binary Proxy Execution: Mshta |
APT38 has used a renamed version of |
||
| .007 | System Binary Proxy Execution: Msiexec | |||
| .011 | System Binary Proxy Execution: Rundll32 |
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.[1][12] |
||
| Enterprise | T1082 | System Information Discovery |
APT38 has attempted to get detailed information about a compromised host, including the operating system, version, patches, hotfixes, and service packs.[1] APT38 has executed malware to collect current user, host name, system time, and operating system install date from targeted systems.[5][6][7] |
|
| Enterprise | T1049 | System Network Connections Discovery |
APT38 installed a port monitoring tool, MAPMAKER, to print the active TCP connections on the local system.[2] |
|
| Enterprise | T1033 | System Owner/User Discovery |
APT38 has identified primary users, currently logged in users, sets of users that commonly use a system, or inactive users.[1] APT38 has run malware to enumerate the current user on compromised hosts.[6][7] |
|
| Enterprise | T1569 | .002 | System Services: Service Execution |
APT38 has created new services or modified existing ones to run executables, commands, or scripts.[1] APT38 has also installed a persistent service on targeted hosts to load malicious DLLs at boot.[7] |
| Enterprise | T1529 | System Shutdown/Reboot |
APT38 has used a custom MBR wiper named BOOTWRECK, which will initiate a system reboot after wiping the victim's MBR.[2] |
|
| Enterprise | T1124 | System Time Discovery |
APT38 has run malware to discover the system time on compromised hosts.[6] |
|
| Enterprise | T1552 | .003 | Unsecured Credentials: Shell History |
APT38 has gathered data and credentials stored in Shell History.[7] |
| .004 | Unsecured Credentials: Private Keys |
APT38 has gathered cryptographic key data related to cryptocurrency wallets, SSH keys, and messaging applications to include Telegram.[6] |
||
| Enterprise | T1204 | .001 | User Execution: Malicious Link |
APT38 has used links to execute a malicious Visual Basic script.[12] APT38 has directed users to navigate to a website under adversary control through the sharing of links in messages.[13][7][5] |
| .002 | User Execution: Malicious File |
APT38 has attempted to lure victims into enabling malicious macros within email attachments.[1] Additionally, APT38 has used malicious Word documents and shortcut files.[12] APT38 has lured victims into opening malicious .scpt or .vbs files to fix fake connection issues with online meetings.[13][6] APT38 has used social media invites to lure victims into opening malicious files hosted on cloud infrastructure.[5] |
||
| Enterprise | T1078 | .003 | Valid Accounts: Local Accounts |
APT38 has validated stolen credentials against the local macOS authentication database using directory services prior to exfiltration.[6] |
| .004 | Valid Accounts: Cloud Accounts |
APT38 has used victim maintainer accounts for the npm Registry to publish malicious packages.[7] |
||