Has enumerated existing network connections on victim devices.1
System Network Connections Discovery T1049
- Tactic
- Discovery
- Platforms
- ESXi, IaaS, Linux, macOS, Network Devices, Windows
- Version
- 2.5
- Created
- 31 May 2017
- Last modified
- 12 May 2026
- Contributors
- Praetorian; Austin Clark, @c2defense
Adversaries may attempt to get a listing of network connections to or from the compromised system they are currently accessing or from remote systems by querying for information over the network.
System Network Connections Discovery MITRE reference T1049
32 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 used RDP to test network connections.1
Has used the BLOODMINE utility to collect data on web requests from Pulse Secure Connect logs.1
Has used netstat -anop tcp to discover TCP connections to compromised hosts.1
Has used netstat -ano on compromised hosts to enumerate network connections.12
Has used netstat and other net commands for network reconnaissance efforts.1
All 32 groups for this technique · 6 newest in this preview
5 campaigns have been recorded using this technique. Listed newest first; dates are year-granularity and attribution is MITRE’s.
During the Anthropic AI-orchestrated Campaign, the adversary used Claude Code to map internal network architecture and access relationships.1
During the 2025 Poland Wiper Attacks, the adversaries identified network connections utilizing netstat -nao and netstat -r.1
During Operation CuckooBees, the threat actors used the net session, net use, and netstat commands as part of their advanced reconnaissance.1
During FunnyDream, the threat actors used netstat to discover network connections on remote systems.1
During Operation Wocao, threat actors collected a list of open connections on the infected system using netstat and checks whether it has an internet connection.1
All 5 campaigns for this technique
61 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 search compromised systems for webhook URLs connecting to Slack and Discord.1
Has used several commands executed in sequence via cmd in a short interval to gather information on network connections.1
Can use a dashboard and U/I to display the status of connections from the FRP client and server.1
Can enumerate system network connections.1
Once inside a Virtual Private Cloud, Pacu can attempt to identify DirectConnect, VPN, or VPC Peering.1
Has the ability to execute the netstat command.1
All 61 software entries for this technique · 6 newest in this preview
Offense vs defense T1049
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 Network Connections Discovery detection strategy DET0320
MITRE names one behaviour worth catching for this technique and breaks it into 6 analytics, one per platform. Each carries the log sources it needs and the fields you tune per environment.
Detection of System Network Connections Discovery Across Platforms
AN0903 · Windows
Detects usage of commands or binaries (e.g., netstat, PowerShell Get-NetTCPConnection) and WMI or API calls to enumerate local or remote network connections.
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:Sysmon | EventCode=1 |
| 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 |
|---|---|
| SuspiciousParentProcesses | Non-standard binaries launching PowerShell or netstat (e.g., winword.exe spawning powershell.exe). |
| TimeWindow | Correlates discovery behavior before lateral movement or credential access. |
| CommandPatternList | Regex or keyword patterns to match discovery utilities (e.g., netstat, Get-NetTCPConnection). |
AN0904 · Linux
Detects use of netstat, ss, lsof, or custom shell scripts to list current network connections. Often paired with privilege escalation or staging.
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:cli | command logging |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| UtilityNameList | List of binaries used for discovery (e.g., netstat, ss, lsof). |
| UserContextScope | Limit detection to non-administrative or service accounts performing enumeration. |
| ExecutionFrequencyThreshold | Unusual number of executions within a short time window. |
AN0905 · macOS
Detects shell-based enumeration of active connections using netstat, lsof -i, or AppleScript-based system 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 | 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 |
|---|---|
| ShellCommandWatchlist | Matches terminal commands like lsof -i, netstat, or scripts issued via Automator or AppleScript. |
| TerminalBinaryDenylist | Tracks execution of networking discovery tools by apps outside Terminal.app or iTerm. |
AN0906 · ESXi
Detects shell or API usage of esxcli network ip connection list or netstat to enumerate ESXi host connections.
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 |
|---|---|---|
| Command ExecutionDC0064 | esxi:hostd | command 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 |
|---|---|
| ExecutionOriginCheck | Detect commands executed outside normal management interfaces (e.g., SSH or root shell). |
| ExpectedAdminAccessWindow | Timeframe when host connection audits are expected (e.g., maintenance windows). |
AN0907 · Network Devices
Detects interactive or automated use of CLI commands like show ip sockets, show tcp brief, or SNMP queries for active sessions on routers/switches.
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 | snmp:trap | management queries |
| Command ExecutionDC0064 | networkdevice:cli | command logs |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| CommandPatternList | Monitors for known socket/session query strings. |
| PrivilegedUserCheck | Restrict detections to non-admin roles executing advanced queries. |
AN0908 · IaaS
Detects enumeration of cloud network interfaces, VPCs, subnets, or peer connections using CLI or SDKs (e.g., AWS CLI, Azure CLI, GCloud CLI).
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 | AWS:CloudTrail | Describe* or List* API calls |
| Network Traffic ContentDC0085 | azure:activity | networkInsightsLogs |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| ServicePrincipalAllowlist | Allow certain automation roles to perform discovery during provisioning. |
| BurstQueryThreshold | Unusual number of Describe* or List* network API calls in a short timeframe. |
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"]
Tests from Atomic Red Team (MIT licence) · technique definition