Has deployed shellcode to check for Japanese Microsoft Office settings.1
System Language Discovery T1614.001
- Tactic
- Discovery
- Platforms
- Linux, macOS, Windows
- Version
- 1.1
- Created
- 18 August 2021
- Last modified
- 12 May 2026
- Contributor
- Harshal Tupsamudre, Qualys
Adversaries may attempt to gather information about the system language of a victim in order to infer the geographical location of that host. This information may be used to shape follow-on behaviors, including whether the adversary infects the target and/or attempts specific actions. This decision may be employed by malware developers and operators to reduce their risk of attracting the attention of specific law enforcement agencies or prosecution/scrutiny from other entities.[1]
System Language Discovery MITRE reference T1614.001
5 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.
Has identified system language codes on a compromised host to determine if the victim falls under a non-supported language code that is prohibited for targeting, including victims associated with Russia and other Commonwealth of Independent States (CIS) that may draw attention of law enforcement in countries where the ransomware operator or affiliates may reside/operate from.12
Identified system language settings to determine follow-on execution.1
Will terminate Mispadu's infection process if the language of the victim machine is not Spanish or Portuguese.1
Has used implants to collect the system language ID of a compromised machine.1
All 5 groups for this technique
2 campaigns have been recorded using this technique. Listed newest first; dates are year-granularity and attribution is MITRE’s.
During Operation Digital Eye, threat actors used the local language of targeted organizations to disguise file system activity.1
During Operation Dream Job, Lazarus Group deployed malware designed not to run on computers set to Korean, Japanese, or Chinese in Windows language preferences.1
All 2 campaigns for this technique
35 software entries are documented implementing this technique. MITRE files each as a tool or as malware; newest first, then by how many groups carry them.
Has the ability to check system details for its language configuration and terminates actions when the system is configured for the Russian language.12
Has checked the target system's timezone (/etc/timezone, timedatectl) for Asia/Tehran or Iran and the LANG environment variable for fa_IR to identify systems matching an Iranian locale prior to deploying its destructive wiper component.12
Can looks for the “en_US” locale on the victim’s machine.1
Has identified the system language settings by checking for ru_RU, ru-RU, ru, and Russian to prevent execution in a Russian associated device.1
Can retrieve system default language and time zone.1
Has checked supported languages on the compromised system.1
All 35 software entries for this technique · 6 newest in this preview
Offense vs defense T1614.001
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 Language Discovery detection strategy DET0565
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 Strategy for System Language Discovery
AN1561 · Windows
Registry access to system language keys (e.g., HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language) or suspicious processes invoking locale-related APIs (e.g., GetUserDefaultUILanguage, GetSystemDefaultUILanguage, GetKeyboardLayoutList). Defender visibility focuses on anomalous or non-standard processes issuing these queries, especially when run by unknown binaries or scripts.
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 |
|---|---|---|
| OS API ExecutionDC0021 | ETW | Calls to GetUserDefaultUILanguage, GetSystemDefaultUILanguage, GetKeyboardLayoutList |
| Process CreationDC0032 | WinEventLog:Sysmon | EventCode=1 |
| Windows Registry Key AccessDC0050 | WinEventLog:Security | EventCode=4657 |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| ParentProcessAllowList | Defines trusted processes allowed to query registry language keys or APIs. Unexpected parent-child process chains may indicate adversary use. |
| QueryThreshold | Frequency threshold for language registry or API calls within a set time window. |
AN1562 · Linux
Processes executing commands to query system locale and language settings, such as 'locale', 'echo $LANG', or parsing environment variables. Suspicious activity is indicated by these commands being run by unusual users, automation scripts, or non-administrative processes.
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 | linux:Sysmon | EventCode=1 |
| Command ExecutionDC0064 | auditd:SYSCALL | execve calls to /usr/bin/locale or shell execution of $LANG |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| UserContext | Unexpected or non-admin users executing locale commands may suggest malicious behavior. |
AN1563 · macOS
Execution of commands to query system locale and language settings, such as 'defaults read -g AppleLocale' or 'systemsetup -gettimezone'. Unusual parent processes or execution contexts of these commands may indicate adversarial discovery.
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:osquery | execve |
| Command ExecutionDC0064 | macos:unifiedlog | defaults read -g AppleLocale or systemsetup -gettimezone |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| ExecutionPath | Restrict or monitor processes outside of system utilities that query AppleLocale or system language settings. |
| # | Test | Platform | Executor | Elevation | Prereqs | Cleanup | Ref | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01 | Discover System Language by Registry Query | windows | cmd | — | — | — | ||||||||||||||
Identify System language by querying the registry on an endpoint. Upon successful execution, result in number format can be looked up to correlate the language. Attack command reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Language GUID1704d7cc-057a-43e5-bfaa-fd9333b2ec97 | ||||||||||||||||||||
| 02 | Discover System Language with chcp | windows | cmd | — | — | — | ||||||||||||||
Identify System language with the chcp command. Upon successful execution, result in number format can be looked up to correlate the language. Attack command chcp GUID4aeb0079-acb7-4a3c-a096-d3f194924d92 | ||||||||||||||||||||
| 03 | Discover System Language with locale | linux | sh | — | — | — | ||||||||||||||
Identify System language with the Attack command locale GUIDded60533-1b5d-4750-bec6-626a8fbc61ff | ||||||||||||||||||||
| 04 | Discover System Language with localectl | linux | sh | — | — | — | ||||||||||||||
Identify System language with the Attack command localectl status GUIDa5c0a812-0cd7-457c-a0c1-c3c2fe89d8ef | ||||||||||||||||||||
| 05 | Discover System Language by locale file | linux | sh | — | 1 | — | ||||||||||||||
Identify System language with the by reading the locale configuration file.
The locale configuration file contains the Attack command [ -f /etc/locale.conf ] && cat /etc/locale.conf || cat /etc/default/locale Prerequisite Check the location of the locale configuration file. Check [ -f /etc/locale.conf ] || [ -f /etc/default/locale ] && exit 0 || exit 1 Satisfy echo "Test only valid for systems that have locale file" GUIDdade0a8d-f2c7-4fd9-b0ff-376f0aedea40 | ||||||||||||||||||||
| 06 | Discover System Language by Environment Variable Query | linux | sh | — | 1 | — | ||||||||||||||
Identify System language by checking the environment variables
Upon successful execution, the 5 character locale result can be looked up to
correlate the language and territory. Environment query commands are likely
to run with a pattern match command e.g. Attack command env | grep LANG printenv LANG set | grep LANG Prerequisite Check if printenv command exists on the machine Check [ -x "$(command -v printenv)" ] && exit 0 || exit 1 Satisfy echo "printenv command does not exist" exit 1 GUIDabf20173-e881-4d5b-95d5-15288a88f31d | ||||||||||||||||||||
| 07 | Discover System Language with dism.exe | windows | cmd | Required | — | — | ||||||||||||||
The Windows utility DISM (Deployment Image Servicing and Management) can be used to display information about international settings and languages on the currently installed Windows image using an elevated terminal. Attack command dism.exe /online /Get-Intl GUID830dd064-6d43-442d-8030-2ae81dce549f | ||||||||||||||||||||
| 08 | Discover System Language by Windows API Query | windows | cmd | — | 1 | — | ||||||||||||||
This test executes a custom script called LanguageKeyboardLayout.exe which outputs the values of the following Windows API functions to the user terminal:
Attack command PathToAtomicsFolder\..\ExternalPayloads\LanguageKeyboardLayout.exe Prerequisite LanguageKeyboardLayout.exe must exist on disk (default location: PathToAtomicsFolder\..\ExternalPayloads\LanguageKeyboardLayout.exe) Check if (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\LanguageKeyboardLayout.exe") {exit 0} else {exit 1}
Satisfy New-Item -Type Directory (split-path "PathToAtomicsFolder\..\ExternalPayloads\LanguageKeyboardLayout.exe") -ErrorAction Ignore | Out-Null Invoke-WebRequest -Uri "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1614.001/bin/LanguageKeyboardLayout.exe" -OutFile "PathToAtomicsFolder\..\ExternalPayloads\LanguageKeyboardLayout.exe" GUID77c8a780-2a7f-4e48-a148-09c7c00e332a | ||||||||||||||||||||
| 09 | Discover System Language with WMIC | windows | cmd | — | — | — | ||||||||||||||
WMIC (Windows Management Instrumentation Command-line) is a command-line tool that provides a simplified interface to query and manage Windows system configurations, processes, and hardware information using WMI. The command in this test retrieves information about the system's locale, operating system language, and multilingual user interface (MUI) languages. Input arguments
Attack command wmic /node:#{target_host} os get Locale,OSLanguage,MUILanguages /format:#{format_style}
GUID4af57ef9-79eb-467c-9c46-2679e2d88153 | ||||||||||||||||||||
| 10 | Discover System Language with Powershell | windows | PowerShell | — | — | — | ||||||||||||||
This PowerShell script collects key system settings, such as the UI language, user language preferences, system locale, current culture, UI culture, and time zone, into a hash table. It then outputs these settings in a readable key-value format directly to the terminal. The script is simple and efficient for quickly displaying system configuration details. Attack command $info = @{
UILanguage = Get-WinUILanguageOverride
UserLanguages = (Get-WinUserLanguageList).LanguageTag -join ', '
SystemLocale = Get-WinSystemLocale
CurrentCulture = [System.Globalization.CultureInfo]::CurrentCulture.Name
CurrentUICulture = [System.Globalization.CultureInfo]::CurrentUICulture.Name
TimeZone = (Get-TimeZone).Id
}
$info.GetEnumerator() | ForEach-Object { "$($_.Name): $($_.Value)" }GUID02be47fa-85bc-4370-b45c-9e0f85fa0646 | ||||||||||||||||||||
Tests from Atomic Red Team (MIT licence) · technique definition