Try it using Invoke-Atomic

System Network Configuration Discovery

Description from ATT&CK

Adversaries may look for details about the network configuration and settings, such as IP and/or MAC addresses, of systems they access or through information discovery of remote systems. Several operating system administration utilities exist that can be used to gather this information. Examples include Arp, ipconfig/ifconfig, nbtstat, and route.

Adversaries may also leverage a Network Device CLI on network devices to gather information about configurations and settings, such as IP addresses of configured interfaces and static/dynamic routes (e.g. show ip route, show ip interface).(Citation: US-CERT-TA18-106A)(Citation: Mandiant APT41 Global Intrusion )

Adversaries may use the information from System Network Configuration Discovery during automated discovery to shape follow-on behaviors, including determining certain access within the target network and what actions to do next.

Atomic Tests

Atomic Test #1 - System Network Configuration Discovery on Windows

Identify network configuration information

Upon successful execution, cmd.exe will spawn multiple commands to list network configuration settings. Output will be via stdout.

Supported Platforms: windows

auto_generated_guid: 970ab6a1-0157-4f3f-9a73-ec4166754b23

Inputs:

None

Attack Commands: Run with command_prompt!

1
2
3
4
5
6
ipconfig /all
netsh interface show interface
arp -a
nbtstat -n
net config

Atomic Test #2 - List Windows Firewall Rules

Enumerates Windows Firewall Rules using netsh.

Upon successful execution, cmd.exe will spawn netsh.exe to list firewall rules. Output will be via stdout.

Supported Platforms: windows

auto_generated_guid: 038263cb-00f4-4b0a-98ae-0696c67e1752

Inputs:

None

Attack Commands: Run with command_prompt!

1
2
netsh advfirewall firewall show rule name=all

Atomic Test #3 - System Network Configuration Discovery

Identify network configuration information.

Upon successful execution, sh will spawn multiple commands and output will be via stdout.

Supported Platforms: macos,linux

auto_generated_guid: c141bbdb-7fca-4254-9fd6-f47e79447e17

Inputs:

None

Attack Commands: Run with sh!

1
2
3
4
5
if [ -x "$(command -v arp)" ]; then arp -a; else echo "arp is missing from the machine. skipping..."; fi;
if [ -x "$(command -v ifconfig)" ]; then ifconfig; else echo "ifconfig is missing from the machine. skipping..."; fi;
if [ -x "$(command -v ip)" ]; then ip addr; else echo "ip is missing from the machine. skipping..."; fi;
if [ -x "$(command -v netstat)" ]; then netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c; else echo "netstat is missing from the machine. skipping..."; fi;

Dependencies: Run with sh!

Description: Check if arp command exists on the machine

Check Prereq Commands:

1
2
if [ -x "$(command -v arp)" ]; then exit 0; else exit 1; fi;

Get Prereq Commands:

1
2
(which yum && yum -y install net-tools)||(which apt-get && DEBIAN_FRONTEND=noninteractive apt-get install -y net-tools)

Atomic Test #4 - System Network Configuration Discovery (freebsd)

Identify network configuration information.

Upon successful execution, sh will spawn multiple commands and output will be via stdout.

Supported Platforms: freebsd

auto_generated_guid: 7625b978-4efd-47de-8744-add270374bee

Inputs:

None

Attack Commands: Run with sh!

1
2
3
4
if [ -x "$(command -v arp)" ]; then arp -a; else echo "arp is missing from the machine. skipping..."; fi;
if [ -x "$(command -v ifconfig)" ]; then ifconfig; else echo "ifconfig is missing from the machine. skipping..."; fi;
if [ -x "$(command -v netstat)" ]; then netstat -Sp tcp | awk '{print $NF}' | grep -v '[[:lower:]]' | sort | uniq -c; else echo "netstat is missing from the machine. skipping..."; fi;

Atomic Test #5 - System Network Configuration Discovery (TrickBot Style)

Identify network configuration information as seen by Trickbot and described here https://www.sneakymonkey.net/2019/10/29/trickbot-analysis-part-ii/

Upon successful execution, cmd.exe will spawn

1
ipconfig /all
,
1
net config workstation
,
1
net view /all /domain
,
1
nltest /domain_trusts
. Output will be via stdout.

Supported Platforms: windows

auto_generated_guid: dafaf052-5508-402d-bf77-51e0700c02e2

Inputs:

None

Attack Commands: Run with command_prompt!

1
2
3
4
5
ipconfig /all
net config workstation
net view /all /domain
nltest /domain_trusts

Atomic Test #6 - List Open Egress Ports

This is to test for what ports are open outbound. The technique used was taken from the following blog: https://www.blackhillsinfosec.com/poking-holes-in-the-firewall-egress-testing-with-allports-exposed/

Upon successful execution, powershell will read top-128.txt (ports) and contact each port to confirm if open or not. Output will be to Desktop\open-ports.txt.

Supported Platforms: windows

auto_generated_guid: 4b467538-f102-491d-ace7-ed487b853bf5

Inputs:

Name Description Type Default Value
output_file Path of file to write port scan results path $env:USERPROFILE\Desktop\open-ports.txt
portfile_url URL to top-128.txt url https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1016/src/top-128.txt
port_file The path to a text file containing ports to be scanned, one port per line. The default list uses the top 128 ports as defined by Nmap. path PathToAtomicsFolder\T1016\src\top-128.txt

Attack Commands: Run with powershell!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ports = Get-content "#{port_file}"
$file = "#{output_file}"
$totalopen = 0
$totalports = 0
New-Item $file -Force
foreach ($port in $ports) {
    $test = new-object system.Net.Sockets.TcpClient
    $wait = $test.beginConnect("allports.exposed", $port, $null, $null)
    $wait.asyncwaithandle.waitone(250, $false) | Out-Null
    $totalports++ | Out-Null
    if ($test.Connected) {
        $result = "$port open" 
        Write-Host -ForegroundColor Green $result
        $result | Out-File -Encoding ASCII -append $file
        $totalopen++ | Out-Null
    }
    else {
        $result = "$port closed" 
        Write-Host -ForegroundColor Red $result
        $totalclosed++ | Out-Null
        $result | Out-File -Encoding ASCII -append $file
    }
}
$results = "There were a total of $totalopen open ports out of $totalports ports tested."
$results | Out-File -Encoding ASCII -append $file
Write-Host $results

Cleanup Commands:

1
2
Remove-Item -ErrorAction ignore "#{output_file}"

Dependencies: Run with powershell!

Description: Test requires #{port_file} to exist

Check Prereq Commands:

1
2
if (Test-Path "#{port_file}") {exit 0} else {exit 1}

Get Prereq Commands:

1
2
3
New-Item -Type Directory (split-path "#{port_file}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "#{portfile_url}" -OutFile "#{port_file}"

Atomic Test #7 - Adfind - Enumerate Active Directory Subnet Objects

Adfind tool can be used for reconnaissance in an Active directory environment. This example has been documented by ransomware actors enumerating Active Directory Subnet Objects reference- http://www.joeware.net/freetools/tools/adfind/, https://www.fireeye.com/blog/threat-research/2019/04/pick-six-intercepting-a-fin6-intrusion.html

Supported Platforms: windows

auto_generated_guid: 9bb45dd7-c466-4f93-83a1-be30e56033ee

Inputs:

None

Attack Commands: Run with command_prompt!

1
2
"PathToAtomicsFolder\..\ExternalPayloads\AdFind.exe" -f (objectcategory=subnet)

Dependencies: Run with powershell!

Description: AdFind.exe must exist on disk at specified location (PathToAtomicsFolder..\ExternalPayloads\AdFind.exe)

Check Prereq Commands:

1
2
if (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\AdFind.exe") {exit 0} else {exit 1}

Get Prereq Commands:

1
2
3
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"

Atomic Test #8 - Qakbot Recon

A list of commands known to be performed by Qakbot for recon purposes

Supported Platforms: windows

auto_generated_guid: 121de5c6-5818-4868-b8a7-8fd07c455c1b

Inputs:

Name Description Type Default Value
recon_commands File that houses list of commands to be executed path PathToAtomicsFolder\T1016\src\qakbot.bat

Attack Commands: Run with command_prompt!

1
2
"#{recon_commands}"

Dependencies: Run with powershell!

Description: File to copy must exist on disk at specified location (#{recon_commands})

Check Prereq Commands:

1
2
if (Test-Path "#{recon_commands}") {exit 0} else {exit 1}

Get Prereq Commands:

1
2
3
New-Item -Type Directory (split-path "#{recon_commands}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1016/src/qakbot.bat" -OutFile "#{recon_commands}"

Atomic Test #9 - List macOS Firewall Rules

"This will test if the macOS firewall is enabled and/or show what rules are configured. Must be run with elevated privileges. Upon successful execution, these commands will output various information about the firewall configuration, including status and specific port/protocol blocks or allows.

Using

1
defaults
, additional arguments can be added to see filtered details, such as
1
globalstate
for global configuration (\"Is it on or off?\"),
1
firewall
for common application allow rules, and
1
explicitauths
for specific rules configured by the user.

Using

1
socketfilterfw
, flags such as –getglobalstate or –listapps can be used for similar filtering. At least one flag is required to send parseable output to standard out.

Supported Platforms: macos

auto_generated_guid: ff1d8c25-2aa4-4f18-a425-fede4a41ee88

Inputs:

None

Attack Commands: Run with bash! Elevation Required (e.g. root or admin)

1
2
3
sudo defaults read /Library/Preferences/com.apple.alf
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

Atomic Test #10 - DNS Server Discovery Using nslookup

Identify System domain dns controller on an endpoint using nslookup ldap query. This tool is being abused by qakbot malware to gather information on the domain controller of the targeted or compromised host. reference https://securelist.com/qakbot-technical-analysis/103931/

Supported Platforms: windows

auto_generated_guid: 34557863-344a-468f-808b-a1bfb89b4fa9

Inputs:

None

Attack Commands: Run with command_prompt!

1
2
nslookup -querytype=ALL -timeout=12 _ldap._tcp.dc._msdcs.%USERDNSDOMAIN%

source