本文章为Atomic Red Team系列文章,本篇文章内容为T1016-系统网络配置发现。本文的目的旨在帮助安全团队开展安全测试,发现安全问题,切勿将本文中提到的技术用作攻击行为,请切实遵守国家法律法规。
重要声明: 本文档中的信息和工具仅用于授权的安全测试和研究目的。未经授权使用这些工具进行攻击或数据提取是非法的,并可能导致严重的法律后果。使用本文档中的任何内容时,请确保您遵守所有适用的法律法规,并获得适当的授权。
在渗透测试及网络攻击活动中,“系统网络配置发现”具有极其重要的作用,具体如下:
- 对于渗透测试:
- 确定测试范围和目标
通过了解目标系统的网络拓扑信息,包括主机、路由器、交换机、防火墙等设备的地址、端口和服务等信息,可以明确渗透测试的范围和目标。知道哪些设备是关键的、哪些端口是开放的、哪些服务正在运行,有助于测试人员更有针对性地进行后续的测试工作,避免盲目测试,提高测试效率。 - 规划攻击路径
网络配置信息能够帮助渗透测试人员识别目标系统的潜在弱点和漏洞所在的位置。例如,发现某些设备的安全配置较弱、某些端口开放了不必要的服务等,这些都可能成为攻击的切入点。测试人员可以根据这些信息规划最优的攻击路径,选择最容易突破的环节进行测试,增加成功发现漏洞的可能性。 - 了解安全防护机制
有助于了解目标系统的安全防护机制,如防火墙的规则、入侵检测系统的部署等。这样测试人员可以在测试过程中更好地规避或突破这些防护措施,或者发现防护机制中存在的漏洞和不足,为客户提供更准确的安全建议,帮助其完善安全防护体系。 - 对于网络攻击活动:
- 寻找攻击入口
攻击者可以通过探测目标系统的网络配置,找到可以利用的漏洞和薄弱环节作为攻击的入口。例如,发现某个服务器的特定端口存在漏洞,或者某个用户的账号密码设置过于简单等,这些都可以成为攻击者入侵系统的途径。 - 实现横向移动
在攻击者已经进入到目标网络的一部分后,系统网络配置发现可以帮助他们了解网络中其他设备的连接关系和访问权限,从而实现横向移动,扩大攻击范围,获取更多的敏感信息或控制更多的系统资源。 - 隐藏攻击痕迹
了解目标系统的网络配置后,攻击者可以利用其中的一些特性来隐藏自己的攻击痕迹。例如,利用网络中的冗余链路或代理服务器来转发攻击流量,使追踪攻击来源变得更加困难。 - 制定攻击策略
根据目标系统的网络配置情况,攻击者可以制定相应的攻击策略。例如,如果目标系统的网络带宽较小,攻击者可以采用消耗带宽的攻击方式;如果目标系统的安全防护主要集中在外部网络,攻击者可以尝试从内部网络发起攻击等。
以下为T1016-系统网络配置发现正文正文
T1016 - 系统网络配置发现
来自ATT&CK的描述
攻击者可能会查找他们所访问系统的网络配置和设置的详细信息,如IP地址和/或MAC地址,也可能通过远程系统的信息发现来获取这些内容。有多种操作系统管理工具可用于收集此类信息,例如Arp
、ipconfig
/ifconfig
、nbtstat
以及route
。
攻击者还可能利用网络设备上的网络设备命令行界面(Network Device CLI)来收集有关配置和设置的信息,例如已配置接口的IP地址和静态/动态路由(例如show ip route
、show ip interface
)。(引用:美国计算机应急准备小组 - TA18 - 106A;曼迪昂特APT41全球入侵报告 )
在自动发现过程中,攻击者可能会利用从系统网络配置发现中获取的信息来规划后续行为,包括确定在目标网络内的特定访问权限以及下一步行动。
原子测试
-
原子测试#1 - 在Windows上进行系统网络配置发现 -
原子测试#2 - 列出Windows防火墙规则 -
原子测试#3 - 系统网络配置发现 -
原子测试#4 - 系统网络配置发现(TrickBot风格) -
原子测试#5 - 列出开放的出站端口 -
原子测试#6 - 使用Adfind枚举活动目录子网对象 -
原子测试#7 - Qakbot侦察 -
原子测试#8 - 列出macOS防火墙规则 -
原子测试#9 - 使用nslookup进行DNS服务器发现
原子测试#1 - 在Windows上进行系统网络配置发现
识别网络配置信息。
执行成功后,cmd.exe将生成多个命令以列出网络配置设置,输出将通过标准输出呈现。
- 支持的平台
Windows - 自动生成的GUID
970ab6a1 - 0157 - 4f3f - 9a73 - ec4166754b23 - 攻击命令
使用 command_prompt
运行!
ipconfig /all
netsh interface show interface
arp -a
nbtstat -n
net config
原子测试#2 - 列出Windows防火墙规则
使用netsh枚举Windows防火墙规则。
执行成功后,cmd.exe将调用netsh.exe列出防火墙规则,输出将通过标准输出呈现。
- 支持的平台
Windows - 自动生成的GUID
038263cb - 00f4 - 4b0a - 98ae - 0696c67e1752 - 攻击命令
使用 command_prompt
运行!
netsh advfirewall firewall show rule name=all
原子测试#3 - 系统网络配置发现
识别网络配置信息。执行成功后,sh将生成多个命令,输出将通过标准输出呈现。
- 支持的平台
macOS、Linux - 自动生成的GUID
c141bbdb - 7fca - 4254 - 9fd6 - f47e79447e17 - 攻击命令
使用 sh
运行!
if [ "$(uname)" = 'FreeBSD' ]; then cmd="netstat -Sp tcp"; else cmd="netstat -ant"; fi;
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 $cmd | awk '{print $NF}' | grep -v '[[:lower:]]' | sort | uniq -c; else echo "netstat is missing from the machine. skipping..."; fi;
- 依赖项
使用 sh
运行! - 描述
检查机器上是否存在arp命令 - 检查先决条件命令
if [ -x "$(command -v arp)" ]; then exit 0; else exit 1; fi;
- 获取先决条件命令
(which yum && yum -y install net-tools)||(which apt-get && DEBIAN_FRONTEND=noninteractive apt-get install -y net-tools)
原子测试#4 - 系统网络配置发现(TrickBot风格)
按照Trickbot的方式识别网络配置信息,详情可参考https://www.sneakymonkey.net/2019/10/29/trickbot-analysis-part-ii/。
执行成功后,cmd.exe将调用ipconfig /all
、net config workstation
、net view /all /domain
、nltest /domain_trusts
,输出将通过标准输出呈现。
- 支持的平台
Windows - 自动生成的GUID
dafaf052 - 5508 - 402d - bf77 - 51e0700c02e2 - 攻击命令
使用 command_prompt
运行!
ipconfig /all
net config workstation
net view /all /domain
nltest /domain_trusts
原子测试#5 - 列出开放的出站端口
此测试用于检测哪些出站端口是开放的。所使用的技术源自以下博客:https://www.blackhillsinfosec.com/poking-holes-in-the-firewall-egress-testing-with-allports-exposed/。
执行成功后,powershell将读取top - 128.txt(端口列表)并连接每个端口,以确认其是否开放,输出将保存到Desktopopen - ports.txt文件中。
- 支持的平台
Windows - 自动生成的GUID
4b467538 - f102 - 491d - ace7 - ed487b853bf5 - 输入参数
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
- 攻击命令
使用 powershell
运行!
$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
- 清理命令
Remove-Item -ErrorAction ignore "#{output_file}"
- 依赖项
使用 powershell
运行! - 描述
测试需要#{port_file}文件存在 - 检查先决条件命令
if (Test-Path "#{port_file}") {exit 0} else {exit 1}
- 获取先决条件命令
New-Item -Type Directory (split-path "#{port_file}") -ErrorAction ignore | Out-Null
Invoke-WebRequest "#{portfile_url}" -OutFile "#{port_file}"
原子测试#6 - 使用Adfind枚举活动目录子网对象
Adfind工具可用于在活动目录环境中进行侦察。勒索软件攻击者曾使用此工具枚举活动目录子网对象,参考资料:
-
http://www.joeware.net/freetools/tools/adfind/ -
https://www.fireeye.com/blog/threat-research/2019/04/pick-six-intercepting-a-fin6-intrusion.html - 支持的平台
Windows - 自动生成的GUID
9bb45dd7 - c466 - 4f93 - 83a1 - be30e56033ee - 输入参数
|
|
|
|
---|---|---|---|
|
|
|
|
- 攻击命令
使用 command_prompt
运行!
"PathToAtomicsFolder..ExternalPayloadsAdFind.exe" -f (objectcategory=subnet) #{optional_args}
- 依赖项
使用 powershell
运行! - 描述
AdFind.exe必须存在于指定位置的磁盘上(PathToAtomicsFolder..ExternalPayloadsAdFind.exe) - 检查先决条件命令
if (Test-Path "PathToAtomicsFolder..ExternalPayloadsAdFind.exe") {exit 0} else {exit 1}
- 获取先决条件命令
New-Item -Type Directory (split-path "PathToAtomicsFolder..ExternalPayloadsAdFind.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..ExternalPayloadsAdFind.exe"
原子测试#7 - Qakbot侦察
这是一组已知的Qakbot用于侦察目的的命令。
- 支持的平台
Windows - 自动生成的GUID
121de5c6 - 5818 - 4868 - b8a7 - 8fd07c455c1b - 输入参数
|
|
|
|
---|---|---|---|
|
|
|
|
- 攻击命令
使用 command_prompt
运行!
"#{recon_commands}"
- 依赖项
使用 powershell
运行! - 描述
要复制的文件必须存在于指定位置的磁盘上(#{recon_commands}) - 检查先决条件命令
if (Test-Path "#{recon_commands}") {exit 0} else {exit 1}
- 获取先决条件命令
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}"
原子测试#8 - 列出macOS防火墙规则
此测试用于检查macOS防火墙是否启用,以及展示已配置的规则。必须以提升的权限运行。执行成功后,这些命令将输出有关防火墙配置的各种信息,包括状态以及特定端口/协议的阻止或允许情况。
使用defaults
命令时,可以添加其他参数以查看筛选后的详细信息,例如使用globalstate
查看全局配置(“是否开启?”),使用firewall
查看常见应用程序的允许规则,使用explicitauths
查看用户配置的特定规则。
使用socketfilterfw
命令时,诸如--getglobalstate
或--listapps
等标志可用于类似的筛选。至少需要一个标志才能将可解析的输出发送到标准输出。
- 支持的平台
macOS - 自动生成的GUID
ff1d8c25 - 2aa4 - 4f18 - a425 - fede4a41ee88 - 攻击命令
使用 bash
运行!需要提升权限(例如root或管理员权限)
sudo defaults read /Library/Preferences/com.apple.alf
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
原子测试#9 - 使用nslookup进行DNS服务器发现
使用nslookup的ldap查询识别端点上的系统域DNS控制器。Qakbot恶意软件曾滥用此工具来收集目标或受感染主机的域控制器信息,参考资料:https://securelist.com/qakbot-technical-analysis/103931/。
- 支持的平台
Windows - 自动生成的GUID
34557863 - 344a - 468f - 808b - a1bfb89b4fa9 - 攻击命令
使用 command_prompt
运行!
nslookup -querytype=ALL -timeout=12 _ldap._tcp.dc._msdcs.%USERDNSDOMAIN%
原文始发于微信公众号(网空安全手札):T1016 - 系统网络配置发现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论