【THM】The Lay of the Land(企业网络环境)-红队

本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/thelayoftheland

本文相关内容:了解并体验在企业网络环境中使用的常用技术和安全产品, 介绍目标企业网络中基于主机和基于网络的安全解决方案。

img

简介

在红队演练期间,熟悉你已经获得初始访问权限的被控机器所处的网络环境是非常重要的,因此,我们要对目标企业的网络环境执行侦察和枚举操作,我们的主要目标是收集尽可能多的信息,以便在后渗透阶段使用。

本文主要将介绍关于企业网络环境的一些常用概念、常用技术和安全产品,我们将假设当前已经获得了一个目标机器的初始访问权限,并且将通过了解以下内容来扩展对目标企业的网络环境的认知:

  • Network infrastrucutre:网络基础设施;
  • Active Directory Environment:Active Directory 环境;
  • Users and Groups:用户和组;
  • Host-based security solutions:基于主机的安全解决方案;
  • Network-based security solutions:基于网络的安全解决方案;
  • Applications and services:应用和服务。

部署目标虚拟机

在本文相关的TryHackMe实验房间中部署目标虚拟机,部署成功之后可以直接通过TryHackMe提供的浏览器界面访问,也可以通过RDP远程访问。

使用RDP进行远程访问的前提是本地攻击机已经连接到TryHackMe平台的VPN(或者通过TryHackMe部署在线攻击机AttackBox),使用以下凭据可以通过RDP访问目标虚拟机:

  • 用户:kkidd
  • 密码:Pass123321@
user@machine$ xfreerdp /v:MACHINE_IP /u:kkidd
#password:Pass123321@

tips:建议直接通过TryHackMe附加的浏览器页面访问即可,无需通过RDP。

目标网络的基础设施

一旦到达一个未知的网络,我们首先要确定我们在哪里、我们可以得到什么。在红队行动期间,我们需要了解我们正在处理的目标系统是什么,以及目标机器会提供什么服务,还有我们所处的网络类型是什么;因此,在获得初始访问之后我们要对受害机器进行信息枚举,这是回答以上这些问题的关键。本小节将讨论我们在红队演练过程中可能面临的常见类型的网络。

网络划分是保护网络安全的一个额外层面,一个企业网络通常会被划分为多个子网,这能用于提高整体网络的安全性和管理水平;例如,这种对网络的划分可用于防止第三方未经授权去访问公司最有价值的资产,如客户数据、财务记录等。

虚拟局域网(VLAN-Virtual Local Area Networks)是一种用于网络分割并可控制相关网络问题的网络技术,例如,VLAN(虚拟局域网)可用于控制局域网中的广播问题;此外,使用VLAN也能够提高网络的安全性,处于VLAN中的主机只能与同一VLAN网络中的其他主机进行通信。

如果你想了解更多关于网络的基础知识,可以参考以下历史博客:

内部网络

内部网络是基于企业内部计算机设备的重要性或者其数据可访问的重要性而分割和分离的子网络,划分内部网络的主要目的是在组织内部共享信息、共享更快以及更容易的通信、共享协作工具、共享操作系统和网络服务资源等。

在企业网络中,网络管理员可能会出于各种原因而打算使用网络分段方案,这些原因包括控制网络流量、优化网络性能和改善企业的网络安全态势等。

image-20230504071314093

上图是一个简单的网络分割概念的例子,我们可以看到公司网络被分成两个子网络:第一个子网络是针对员工工作站和个人设备的;第二个子网络将针对用于提供内部服务的私有和内部网络设备,这些服务包括DNS服务、内部web服务、电子邮件服务等。

隔离区(DMZ-Demilitarized Zone)

DMZ(隔离区)网络是一种边缘网络,它保护企业内部局域网免受不可信流量的影响,并能为企业内网增加额外的安全层。设计DMZ(隔离区)网络的一个常见方案是:划分一个位于公共互联网和企业内部网络之间的子网络作为DMZ(隔离区)。

在公司内部设计一个网络取决于它的实际需求和现实需要。例如,假设一家公司会提供诸如网站(website)、DNS、FTP、代理(Proxy)、VPN等公共服务,在这种情况下,该公司可能会设计一个DMZ网络来隔离和启用对公共网络流量、不可信流量的访问控制。

image-20230504073559454

在上面的示意图中,我们用红色表示到达DMZ网络的网络流量,这是不可信的流量(直接来自Internet);而用绿色表示的内部网络之间的流量,则是可以通过一个或多个网络安全设备的受控流量。

枚举目标网络

枚举目标系统及其内部网络是后渗透中的信息收集阶段,这将允许攻击者尽量了解目标系统和目标内部网络,而且通过利用基于枚举操作获得的信息,我们可以更好地处理横向移动或权限提升过程,从而能够在目标系统或目标的AD环境中获得更多的权限。

我们需要检查与目标网络方面相关的各种事情,例如 TCP 和 UDP 端口以及已建立的连接、路由表、 ARP表等。

让我们开始检查当前目标机器的 TCP 和 UDP 开放端口,这可以通过在目标机器上使用netstat命令来完成:

PS C:\Users\thm> netstat -na

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:88             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:389            0.0.0.0:0              LISTENING

以上输出结果会显示当前目标机器已打开的端口以及已建立的连接。

接下来,让我们列出 ARP 表,其中会包含与内部网络中的当前目标机器进行通信的计算机的 IP 地址和物理地址,这可能有助于我们查看目标网络中的通信情况,能够发现目标内网中的其他机器,从而使我们能够针对性地扫描其他目标计算机的开放端口和漏洞。

PS C:\Users\thm> arp -a

Interface: 10.10.141.51 --- 0xa
  Internet Address      Physical Address      Type
  10.10.0.1             02-c8-85-b5-5a-aa     dynamic
  10.10.255.255         ff-ff-ff-ff-ff-ff     static

内部网络服务

企业内网中的服务将会为其他内部网络设备提供私有和内部网络通信访问权限,这些网络服务包括内部DNS服务、web服务、自定义应用程序等。内部网络服务通常不能在企业网络之外进行访问,然而,一旦我们获得目标网络的其中一个子网络的初始访问权限,我们就能够访问与这个子网络权限相关的内部网络服务,即这些服务将变得可访问以及可通信。

Active Directory(AD)环境

什么是Active Directory(AD)环境?

image-20230504084815640

Active Directory(活动目录)是一种基于Windows的目录服务,它能存储数据并可为内部网络环境提供数据对象,它允许使用者对身份验证和授权情况进行集中管理。AD包含了关于网络和环境的基本信息,包括用户、计算机、打印机等;例如,AD可能包含以下用户信息:职位名称、电话号码、地址、密码、组、权限......

image-20230504090457073

上面的关系图是如何设计Active Directory(活动目录)的一个可能示例,我们可以看到AD域控制器被放置在服务器子网(上图所显示的服务器网络)中,而AD客户端则被放置在另外一个独立的子网络中,用户需要发送流量通过防火墙来选择加入AD域并使用AD服务。

下面是我们需要熟悉的Active Directory(活动目录)组件列表:

  • Domain Controllers(域控制器)
  • Organizational Units(组织单元)
  • AD objects(AD对象)
  • AD Domains(AD域)
  • Forest(森林)
  • AD Service Accounts(AD服务帐户):Built-in local users(内置的本地用户)、Domain users(域用户)、Managed service accounts(托管服务帐户)。
  • Domain Administrators(域管理员)

域控制器:域控制器是一种能够提供Active Directory(活动目录)服务并可控制整个AD域的Windows服务器,它是一种集中的用户管理形式,可以提供用户数据加密以及控制用户对网络的访问,它能管理用户、组、策略和计算机等,域控制器还支持域中用户之间的资源访问和共享。以上这些都是攻击者瞄准AD域中的域控制器的原因,因为域控制器包含了目标企业的大量高价值信息。

image-20230504171420889

组织单元(OU's-Organizational Units):组织单元是AD域中具有层次结构的容器。

AD对象:Active Directory对象可以是域中的单个用户或组,也可以是域中的硬件组件,如计算机或打印机等;每个域都拥有一个数据库,其中包含创建 AD 环境的对象标识信息,包括:

  • Users(用户) - 允许对域中的机器进行身份验证以获得对应权限的安全主体。
  • Computers(计算机) - 代表加入域的计算机系统。
  • GPOs(组策略对象) - 应用于其他 AD 对象的策略集合。

AD域:Active Directory域是AD网络中 Microsoft 组件的集合。

AD森林:Active Directory森林是相互信任的域的集合。

image-20230504173833989

有关Active Directory基础的详细信息,请参阅往期博客:【THM】Active Directory Basics(AD基础)-学习

一旦我们实现了对目标机的初始访问,那么在目标企业网络中查找AD环境就非常重要,因为Active Directory(活动目录)环境能够为加入域的用户提供关于该环境的大量信息;作为红队队员,我们能够利用这一点来枚举目标AD环境,并获得各种信息细节,这些信息能够被我们用于后继的横向移动阶段。

答题

为了检查一台Windows机器是否是目标AD环境的一部分,我们可以尝试使用systeminfo命令,systeminfo的输出结果将为我们提供关于当前机器的信息,包括操作系统名称和版本、主机名、其他硬件信息以及关联的AD域信息等。

PS C:\Users\thm> systeminfo | findstr Domain
OS Configuration:          Primary Domain Controller
Domain:                    thmdomain.com

从以上输出结果中,我们可以知道与当前计算机相关的AD域名称为thmdomain.com,这证明它是AD环境的一部分。

注意:如果我们在上述输出结果中的domain部分看到WORKGROUP,那么这意味着此台机器是本地工作组的一部分。

接下来让我们在已部署的目标虚拟机上使用systeminfo命令,并查看命令的输出结果,然后回答本小节的问题。

#在systeminfo的输出结果中查找Domain部分
systeminfo | findstr Domain

image-20230504182747253

image-20230504182829113

用户和组管理

在本小节中,我们将了解更多关于用户和组的信息,特别是在Active Directory环境中。

收集关于已被我们控制的受害计算机的信息非常重要,这些信息可以在红队行动的下一阶段中使用;帐户发现是收集目标机器信息的第一步,一旦我们获得了目标计算机的初始访问权限,我们就可以尝试了解在当前系统中有哪些帐户。

image-20230504194458971

在Active Directory环境中包含各种帐户,这些帐户有些具有必要的权限、有些具有特定的访问权限、有些是出于不同目的而被设置的角色。

常见的Active Directory(活动目录)服务帐户包括内置的本地用户帐户、域用户帐户、托管服务帐户和虚拟帐户。

  • 系统内置的本地用户帐户可用于管理本地系统,这不是AD环境的一部分。
  • 域用户帐户可以访问Active Directory(活动目录)环境,也可以使用AD服务(由AD管理)。
  • AD托管服务帐户是有限的域用户帐户,具有较高的权限来管理AD服务。
  • 域管理员是可以在Active Directory环境中管理信息的用户帐户,能管理AD配置、用户、组、权限、角色、服务等;红队演练的目标之一就是枚举信息并获得域管理员权限,从而实现对目标AD环境的完全控制。

以下是Active Directory管理员帐户:

image-20230504213209794

现在我们了解了AD环境中的各种帐户类型,接下来让我们枚举一下我们已经获得初始访问权限的受害Windows计算机;作为当前机器的用户,我们有特定的权限来查看或管理该计算机的内容以及相关的AD环境中的内容。

Active Directory(AD)枚举

在AD环境中进行枚举需要不同的工具和技术,一旦我们确认当前机器是企业AD环境的一部分,我们就可以开始寻找任何可能在后继阶段中使用的变量信息。在进行枚举时,我们可以使用PowerShell来获取关于用户和组的信息。

下面的PowerShell命令可用于获取所有AD(活动目录)用户帐户。注意,我们需要使用-Filter参数。

PS C:\Users\thm> Get-ADUser  -Filter *
DistinguishedName : CN=Administrator,CN=Users,DC=thmredteam,DC=com
Enabled           : True
GivenName         :
Name              : Administrator
ObjectClass       : user
ObjectGUID        : 4094d220-fb71-4de1-b5b2-ba18f6583c65
SamAccountName    : Administrator
SID               : S-1-5-21-1966530601-3185510712-10604624-500
Surname           :
UserPrincipalName :
PS C:\Users\thm>

我们还可以使用LDAP分层树结构在AD环境中查找用户。首先,我们要知道标识名称(DN-Distinguished Name)的概念,它是用逗号分隔的键值对的集合,可用于标识目录中的唯一记录。DN通常由域组件(DC-Domain Component)、组织单元名(OU-OrganizationalUnitName)、通用名称(CN-Common Name)等组成。

例如"CN=User1,CN=Users,DC=thmredteam,DC=com"就是DN的一个示例,这个示例可以被可视化如下:

image-20230504221600301

通过使用SearchBase命令选项,我们可以在AD(活动目录)中指定查询一个特定的通用名称(CN-Common Name);例如,我们可以指定列出Users的任何部分。

PS C:\Users\thm> Get-ADUser -Filter * -SearchBase "CN=Users,DC=THMREDTEAM,DC=COM"


DistinguishedName : CN=Administrator,CN=Users,DC=thmredteam,DC=com
Enabled           : True
GivenName         :
Name              : Administrator
ObjectClass       : user
ObjectGUID        : 4094d220-fb71-4de1-b5b2-ba18f6583c65
SamAccountName    : Administrator
SID               : S-1-5-21-1966530601-3185510712-10604624-500
Surname           :
UserPrincipalName :

注意:根据CN的具体配置,实际查询结果中可能会包含多个用户的信息。

答题

使用部署好的目标虚拟机,在thmredteam.com域中列出THM OU的可用用户帐户。

Get-ADUser -Filter * -SearchBase "OU=THM,DC=THMREDTEAM,DC=COM"

image-20230504225726102

查看上述命令的输出结果,找到管理员帐户的UserPrincipalName(用户主体名称)。

image-20230504225809876

image-20230504225837681

基于主机的安全解决方案1

在执行进一步红队操作之前,我们需要先了解有关安全解决方案的一般知识。请记住,枚举目标端点上正在使用的反病毒程序和安全检测方法非常重要,这样可以尽可能保证我们的红队操作不被检测,并能减少被蓝队捕获到恶意流量的机会。

tips:在企业网络中常用的安全解决方案可划分为基于主机的安全解决方案、基于网络的安全解决方案,我们将用几个小节来讨论相关的主题。

主机安全解决方案介绍

image-20230504231742517

主机安全解决方案是一套用于监控和检测主机内异常和恶意活动的软件应用程序,包括:

  1. Antivirus software:杀毒软件;
  2. Microsoft Windows Defender:微软 Windows Defender;
  3. Host-based Firewall:基于主机的防火墙;
  4. Security Event Logging and Monitoring:安全事件日志记录和监控;
  5. Host-based Intrusion Detection System(HIDS)/Host-based Intrusion Prevention System(HIPS):基于主机的入侵检测系统/基于主机的入侵防御系统;
  6. Endpoint Detection and Response (EDR):端点检测与响应(EDR)。

接下来,让我们更详细地介绍一下在红队演练过程中可能遇到的基于主机的安全解决方案。

反病毒软件(AV-Antivirus Software)

反病毒软件也被称为反恶意软件、杀毒软件,它主要用于监控、检测和防止恶意软件在主机上执行。

大多数反病毒软件应用程序都具有一些众所周知的安全功能,包括后台扫描、全系统扫描、病毒定义功能等。在后台扫描中,反病毒软件将实时工作并能扫描所有在后台打开和使用的文件;当你第一次安装反病毒软件时,进行完整的系统扫描也是必不可少的;反病毒软件最有趣的部分是病毒定义功能,该功能允许反病毒软件针对预先定义的病毒做出响应,这也是反病毒软件需要不时更新的原因。

反病毒程序可以使用各种检测技术,包括:

  • Signature-based detection:基于特征的检测;
  • Heuristic-based detection:基于启发式的检测;
  • Behavior-based detection:基于行为的检测。

基于特征的检测是反病毒软件中用于识别恶意文件的常用以及传统技术之一。

通常,研究人员或用户可以将受感染的文件提交到一个反病毒引擎平台,以供反病毒软件供应商做进一步分析,如果已提交的文件被确认为是恶意的,那么其对应的病毒特征就会被注册到病毒数据库中。因此,反病毒软件在进行文件扫描时,就能够将正在扫描的文件与病毒数据库中的已知特征进行比较,以确定在客户端上可能发生的攻击和可能存在的恶意软件。如果在扫描文件时,我们成功在病毒库中找到了相关的匹配项,那就说明当前所扫描的文件是存在威胁的。

基于启发式的检测将使用机器学习来判断是否存在恶意文件,它会进行实时的扫描和静态分析,以便在应用程序的代码中发现可疑的属性,或者检查应用程序是否使用了不常见的系统API(如Windows API)。这种检测技术通常不依赖于攻击特征来做出判断,当然有时候也会基于特征给出结果,这主要取决于反病毒软件的具体实现情况。

最后,基于行为的检测则依赖于监控、检查应用程序的执行情况,以便及时发现异常行为和不常见的活动,例如在注册表项中创建/更新值、杀死/创建进程等。

作为一名红队队员,我们必须知道目标主机中是否存在反病毒软件(即杀毒软件),因为这些软件可能会阻止我们将要尝试执行的操作。我们可以通过使用Windows内置工具来枚举当前主机中存在的AV(反病毒)软件,如wmic工具。

PS C:\Users\thm> wmic /namespace:\\root\securitycenter2 path antivirusproduct

我们也可以使用PowerShell命令来枚举杀毒软件,它会提供和上述命令相同的结果。

PS C:\Users\thm> Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntivirusProduct


displayName              : Bitdefender Antivirus
instanceGuid             : {BAF124F4-FA00-8560-3FDE-6C380446AEFB}
pathToSignedProductExe   : C:\Program Files\Bitdefender\Bitdefender Security\wscfix.exe
pathToSignedReportingExe : C:\Program Files\Bitdefender\Bitdefender Security\bdservicehost.exe
productState             : 266240
timestamp                : Wed, 15 Dec 2021 12:40:10 GMT
PSComputerName           :

displayName              : Windows Defender
instanceGuid             : {D58FFC3A-813B-4fae-9E44-DA132C9FAA36}
pathToSignedProductExe   : windowsdefender://
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState             : 393472
timestamp                : Fri, 15 Oct 2021 22:32:01 GMT
PSComputerName           :

从上述结果可知,当前计算机上安装了第三方反病毒软件(Bitdefender杀毒软件)和系统内置的Windows Defender。请注意,在Windows服务器中可能没有上述示例中的SecurityCenter2名称空间,也就是说:以上示例可能无法在我们已部署的目标虚拟机上工作(但上述命令可适用于Windows工作站)。

微软 Windows Defender

微软的Windows Defender是一个预装在Windows系统中的反病毒安全工具,它将在系统端点上运行,并且会在病毒检测时使用各种算法,能够运用机器学习、大数据分析、深度威胁对抗研究,以及微软的云基础设施等来抵御恶意软件及病毒攻击。Windows Defender有三种保护模式:主动模式、被动模式、禁用模式。

tips:端点是指能够连接到网络并可通过网络进行通信的任何设备。

主动模式用于将Windows Defender作为当前机器上的主要反病毒软件运行,此时Windows Defender将提供安全防护功能和安全补救措施;Windows Defender的被动模式运行在当前主机已安装第三方反病毒软件时,在被动模式下,Windows Defender将作为二级反病毒软件工作,它依然能够扫描文件和检测威胁,但是不再提供相关的补救措施;最后,禁用模式是指将微软的Windows Defender禁用或者将其从当前系统中卸载。

我们可以使用下面的PowerShell命令来检查Windows Defender的服务状态,主要是检测其是否正在运行:

PS C:\Users\thm> Get-Service WinDefend

Status   Name               DisplayName
------   ----               -----------
Running  WinDefend          Windows Defender Antivirus Service

然后,我们可以使用Get-MpComputerStatus命令来获取当前的Windows Defender运行时的状态信息,这会为我们提供关于安全解决方案元素的使用情况,这些元素(可理解为功能)包括反间谍软件、反病毒、过载保护、实时保护等,我们可以使用select来指定需要查询什么,如下所示:

PS C:\Users\thm> Get-MpComputerStatus | select RealTimeProtectionEnabled

RealTimeProtectionEnabled
-------------------------
                    False

如上所示,以上命令示例会显示Windows Defender的实时保护功能是否开启。

基于主机的防火墙

基于主机的防火墙是一种安装在主机上运行的安全工具,它可以防止和阻塞攻击者或红队队员的攻击意图;因此,在我们获得初始访问权限的计算机中,枚举和收集有关主机防火墙及其规则的详细信息是非常必要的。

image-20230505163330096

基于主机的防火墙的主要用途是控制通过设备接口的入站和出站流量,它能保护主机免受位于同一网络中的其他不可信设备的攻击。现代主机防火墙还会在网络连接建立时使用多级流量分析,包括数据包分析等。

防火墙能够作为网络层的控制访问程序,它可以允许和拒绝网络数据包的通过;例如,我们可以将防火墙配置为阻塞通过ping命令从同一网络中的其他计算机发送的ICMP数据包。此外,下一代防火墙还可以检查其他OSI层级的流量,如应用层,因此,下一代防火墙能检测和阻塞 SQL 注入攻击以及其他针对应用层的攻击。

我们可以使用以下PowerShell命令来获取Windows防火墙配置信息:

PS C:\Users\thm> Get-NetFirewallProfile | Format-Table Name, Enabled

Name    Enabled
----    -------
Domain     True
Private    True
Public     True

#Format-Table:格式化Get-NetFirewallProfile的结果,控制输出格式及显示的字段;本例选择显示Name和Enabled两个属性,并通过表格格式输出。
#Windows防火墙根据网络位置将防火墙配置分为域配置、私有配置和公共配置三种配置文件,本例中的cmdlet(一种PowerShell命令集)可以获取防火墙所有配置文件信息。
#Get-NetFirewallProfile:用于获取防火墙配置文件信息的cmdlet

如果我们当前所登录的用户具有管理员权限,那么我们还可以尝试使用Set-NetFirewallProfilecmdlet禁用一个或多个防火墙配置文件。

PS C:\Windows\system32> Set-NetFirewallProfile -Profile Domain, Public, Private -Enabled False
PS C:\Windows\system32> Get-NetFirewallProfile | Format-Table Name, Enabled
---- -------
Domain False
Private False
Public False

我们还可以了解和检查当前的防火墙规则,不管是允许流量通过还是拒绝流量通过。

#下面的PowerShell命令用于获取Windows防火墙规则信息,并选择查看规则的显示名称(DisplayName)、是否启用(Enabled)及规则描述(Description)三个属性。
PS C:\Users\thm> Get-NetFirewallRule | select DisplayName, Enabled, Description

DisplayName                                                                  Enabled
-----------                                                                  -------
Virtual Machine Monitoring (DCOM-In)                                           False
Virtual Machine Monitoring (Echo Request - ICMPv4-In)                          False
Virtual Machine Monitoring (Echo Request - ICMPv6-In)                          False
Virtual Machine Monitoring (NB-Session-In)                                     False
Virtual Machine Monitoring (RPC)                                               False
SNMP Trap Service (UDP In)                                                     False
SNMP Trap Service (UDP In)                                                     False
Connected User Experiences and Telemetry                                        True
Delivery Optimization (TCP-In)                                                  True

在红队行动期间,我们一开始可能不知道防火墙会拦截什么,因此,我们可以利用一些PowerShell命令来判断,如Test-NetConnectionTcpClient。假设我们知道当前主机中的防火墙已经就位,现在我们需要在不使用额外工具的情况下测试防火墙对入站连接的影响,那么我们可以尝试执行以下操作:

#测试本地计算机(127.0.0.1)上端口80的网络连接
#Test-NetConnection:进行网络连接测试,我们可以指定测试的远程主机名或 IP、端口、协议等来验证网络连接是否正常。
#-ComputerName 127.0.0.1:指定要测试网络连接的远程主机,这里是本地回环地址 127.0.0.1。
#-Port 80:指定要连接的远程主机端口,这里是HTTP服务所使用的端口80。

PS C:\Users\thm> Test-NetConnection -ComputerName 127.0.0.1 -Port 80  #如果本地80端口处于监听状态,那么执行此命令将返回成功连接信息。


ComputerName     : 127.0.0.1
RemoteAddress    : 127.0.0.1
RemotePort       : 80
InterfaceAlias   : Loopback Pseudo-Interface 1
SourceAddress    : 127.0.0.1
TcpTestSucceeded : True

#New-Object:创建一个对象,这里创建的是System.Net.Sockets.TcpClient对象,用于TCP网络连接。
#System.Net.Sockets.TcpClient("127.0.0.1", "80"):使用TcpClient对象,指定要连接的远程地址127.0.0.1和端口80。
#.Connected:获取TcpClient对象的Connected属性,用于判断客户端是否已经连接上远程主机;如果连接成功,返回True,如果连接失败,则返回False。

PS C:\Users\thm> (New-Object System.Net.Sockets.TcpClient("127.0.0.1", "80")).Connected
True

根据上述结果,我们可以确认该主机80端口上的入站连接是打开的,并且在防火墙规则中也是允许流量通过的。

注意:我们也可以通过指定Test-NetConnection命令中的-ComputerName参数值来测试相同网络或相同域名下的其他远程目标。

答题

枚举已部署的Windows机器并检查其基于主机的防火墙是否启用:

Get-NetFirewallProfile | Format-Table Name, Enabled

image-20230505181359325

执行Get-MpThreat命令,它可以提供使用Windows Defender时所检测到的威胁详细信息:

Get-MpThreat | select Resources

image-20230505181540730

枚举已部署的Windows机器上的防火墙规则,此处我们选择查看THM-Connection(这是目标虚拟机上的自定义防火墙规则,该规则名称无普适性):

#Get-NetFirewallRule | findstr "Rule-Name"
Get-NetFirewallRule | findstr "THM-Connection"

image-20230505181707600

image-20230505181755066

基于主机的安全解决方案2

在本小节中,我们将承接上文继续讨论基于主机的安全解决方案。

安全事件日志记录和监控

在默认情况下,操作系统会使用日志文件来记录当前系统中的各种活动事件。无论是在主机端还是在网络端,IT系统和网络管理员都可以使用事件日志功能来监控和分析重要事件;在公司的内部协作网络中,安全团队也会利用日志事件技术来跟踪和调查安全威胁事件。

Windows操作系统所记录的事件信息的类别有很多,包括应用程序、系统、安全性、计算机服务等。此外,安全设备和网络设备也会将事件信息存储到日志文件中,以便系统管理员了解在系统中发生的事件。

我们可以使用Get-EventLogcmdlet来获取本地计算机上可用的事件日志列表。

PS C:\Users\thm> Get-EventLog -List

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
     512      7 OverwriteOlder             59 Active Directory Web Services
  20,480      0 OverwriteAsNeeded         512 Application
     512      0 OverwriteAsNeeded         170 Directory Service
 102,400      0 OverwriteAsNeeded          67 DNS Server
  20,480      0 OverwriteAsNeeded       4,345 System
  15,360      0 OverwriteAsNeeded       1,692 Windows PowerShell

有时候,通过查看可用的事件日志列表能够让我们深入了解当前计算机上安装了哪些应用程序和服务。例如,根据上述命令的输出结果,我们可以看到本地计算机上安装了Active Directory服务、 DNS服务器等。有关Get-EventLogcmdlet的更多信息和示例,请自行访问Microsoft文档网站

在企业网络中,日志代理软件会被安装在计算机客户端上,它能够收集和聚合来自于不同传感器(sensors)的日志,以便分析和监控企业网络中的活动,我们将在基于网络的安全解决方案一节中对此做进一步讨论。

Windows系统监控器(Sysmon-System Monitor)

image-20230505223651958

Windows系统监控器即Sysmon(System Monitor)是一个服务和设备驱动程序,它是微软的系统内部套件之一。Sysmon工具并不是操作系统必不可少的工具(在默认情况下是不会安装的) ,但是一旦计算机安装了Sysmon,它就会开始收集和记录当前操作系统中的事件信息。Sysmon中的日志指示器可以显著地帮助系统管理员和蓝队跟踪、调查恶意活动,并能帮助进行常规故障排除。

Sysmon工具的一个重要特性是,它可以记录许多重要事件,并且你还可以使用Sysmon来创建自己的规则和配置以开始监控:

  • Process creation and termination:进程的创建和终止
  • Network connections:网络连接
  • Modification on file:文件的修改情况
  • Remote threats:远程威胁
  • Process and memory access:进程和内存访问
  • 其他

要了解更多关于sysmon的信息,请访问与该工具相关的Windows文档页面,在文档页面还提供了此工具的下载方式。

作为一名红队成员,我们的主要目标之一就是确保自己处于不被发现的状态,因此我们必须注意目标机器上正在运行的安全工具,以避免导致重要日志生成和发生警报事件。以下是一些可用于检测受害计算机中的sysmon工具是否可用的技巧。

我们可以在当前进程中查找是否存在名为“ Sysmon”的进程,如下所示:

PS C:\Users\thm> Get-Process | Where-Object { $_.ProcessName -eq "Sysmon" }

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    373      15    20212      31716              3316   0 Sysmon

我们也可以使用以下命令寻找和Sysmon相关的服务:

PS C:\Users\thm> Get-CimInstance win32_service -Filter "Description = 'System Monitor service'"
# or
Get-Service | where-object {$_.DisplayName -like "*sysm*"}

我们还可以通过检查Windows注册表来寻找Sysmon:

PS C:\Users\thm> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Sysmon/Operational

上述这几个命令都可以用于确定当前系统中是否安装了sysmon工具,一旦我们检测到该工具的存在,我们就可以尝试找到sysmon的配置文件,如果我们对相关配置文件有可读权限,我们就能了解哪些系统管理员可以进行安全监控。

PS C:\Users\thm> findstr /si '<ProcessCreate onmatch="exclude">' C:\tools\*
C:\tools\Sysmon\sysmonconfig.xml:      
C:\tools\Sysmon\sysmonconfig.xml:

#/si:表示不区分大小写进行字符串匹配。
#<ProcessCreate onmatch="exclude">是XML格式的标签,其中:
#<ProcessCreate>:表示创建进程的事件。
#onmatch="exclude":onmatch是属性,exclude是属性的值,表示排除或忽略该事件。
#上述完整标签的意思是忽略或者排除创建进程事件。
#如果在sysmonconfig.xml文件中含有该标签,则可能是用于配置sysmon工具的事件过滤选项。
#sysmonconfig.xml配置文件含有<ProcessCreate onmatch="exclude">,则表示需要忽略或排除创建进程事件,即指定sysmon工具忽略对创建进程事件的监控。

基于主机的入侵检测系统/入侵防御系统(HIDS/HIPS)

image-20230505220532078

HIDS表示基于主机的入侵检测系统(Host-based Intrusion Detection System),它是一种主机软件,能够监控并检测主机中的异常和恶意活动。HIDS的主要目的是检测可疑活动,而不是防御这些活动。

基于主机的入侵检测系统(或者基于网络的IDS)的工作方式有两种,包括:

  • 基于特征的检测:通过比较监控数据与已知威胁的“特征”来检测入侵,如果监控到的数据与预先定义的入侵特征相匹配(通过检查校验和以及进行消息身份验证,来确认匹配情况),那么IDS系统就会生成警报消息。
  • 基于异常的检测:通过建立主机(或网络)的安全“基线”来检测异常活动,如果检测到的活动超出基线(如异常的带宽使用、异常的协议和端口使用),则代表可能发生了入侵活动,IDS系统将对此生成相关的警报消息。

总结:HIDS是一种部署在主机上的入侵检测系统,它通过监控主机活动来检测异常或恶意行为,它的目的在于发现入侵行为而非阻止入侵。HIDS可以基于已知威胁特征或者基于已经建立的正常行为基线来检测异常活动,而一旦检测到可疑活动,HIDS就会生成警报消息以提示管理员。

HIPS表示基于主机的入侵防御系统,它通过保护操作系统中的软件安装活动来进行工作,它是一种针对常见攻击行为、异常行为的检测和防御解决方案。HIPS能够审计主机中的日志文件、监控进程、保护系统资源,它混合了很多安全产品的功能,如反病毒软件、行为分析软件、网络防火墙、应用层防火墙等。

此外,还有基于网络的IDS/IPS,我们将在下一小节中进行介绍。

端点检测与响应(EDR)

image-20230505223615149

EDR也被称为端点检测和威胁响应(EDTR-Endpoint Detection and Threat Response),它是一种防御恶意软件和其他安全威胁的网络空间安全解决方案。EDR可以查找恶意文件、监控端点以及监控系统和网络事件,并能将它们记录在数据库中以便开展进一步的分析、检测和调查;EDR是下一代杀毒软件,它可以实时检测主机上的恶意活动。

EDR能够通过分析系统数据和行为来检测部分潜在威胁,包括:

  • Malware, including viruses, trojans, adware, keyloggers:恶意软件,如病毒、木马、广告软件、键盘记录器程序等;
  • Exploit chains:漏洞利用链;
  • Ransomware:勒索软件。

下面是一些用于端点的常用EDR软件:

  • Cylance
  • Crowdstrike
  • Symantec:赛门铁克
  • SentinelOne
  • 还有很多

tips:上述这些同时也是网络安全公司名称。

即使攻击者成功地交付了他们的有效载荷,并且在接收反向shell时绕过了EDR,EDR也仍然会持续运行并监控系统,如果在后继过程中EDR发出了警报,则将阻止攻击者继续做其他事情。

我们可以使用脚本来枚举当前计算机内所使用的安全产品,例如Invoke-EDRCheckerSharpEDRChecker,这些脚本会检查系统中的文件元数据、进程、加载到当前进程中的DLL、服务、驱动程序、目录,进而判断当前计算机中是否存在常用的反病毒软件、EDR软件、日志记录和监控产品等。

基于网络的安全解决方案

本节我们将讨论在企业网络中常见和常用的基于网络的安全解决方案。

基于网络的安全解决方案介绍

image-20230504233548354

基于网络的安全解决方案是指用于监控、检测和防止在网络内部发生的恶意活动的软件或硬件设备,它侧重于保护那些连接到企业内部协作网络的客户端和设备。基于网络的安全解决方案包括但不限于:

  • Network Firewall:网络防火墙;
  • SIEM:安全信息和事件管理(Security Information and Event Management);
  • IDS/IPS:(基于网络的)入侵检测系统/入侵防御系统。

接下来,让我们更详细地介绍一下这些基于网络的安全解决方案。

网络防火墙

image-20230505232755214

防火墙是到达网络的不可信流量的第一个检查点,它会根据已设置的规则和策略在不可信流量传递到网络之前对其进行过滤;此外,防火墙还可用于将网络与外部流量源、内部流量源、甚至特定的应用程序分隔开来。现在的防火墙产品能够充当内置的网络路由器或者其他安全产品,并可提供各种安全功能。以下是企业可能使用的一些防火墙类型:

  • Packet-filtering firewalls:数据包过滤防火墙;
  • Proxy firewalls:代理防火墙;
  • NAT firewalls:NAT防火墙,NAT的全称为Network Address Translation;
  • Web application firewalls:Web应用程序防火墙。

安全信息和事件管理(SIEM)

image-20230505232726039

SIEM 结合了安全信息管理(Security Information Management,SIM)和安全事件管理(Security Event Management,SEM),能够实时监控和分析事件以及跟踪、记录数据。SIEM可以帮助系统管理员和蓝队在网络攻击对组织造成损害之前监控和跟踪潜在的安全威胁和潜在的漏洞。

SIEM解决方案作为日志数据聚合中心,能够从网络中的传感器处收集日志文件,并能基于所收集的数据执行功能,以识别和检测安全威胁或攻击。以下是SIEM可能提供的一些功能:

  • 日志管理:SIEM能实时捕获和收集整个企业网络中的数据。
  • 事件分析:SIEM可以应用高级分析来检测异常模式或行为,在SIEM仪表盘中会提供与事件相关的图表和统计信息。
  • 事件监控和安全警报:SIEM会监控整个网络环境,包括已连接的用户、设备、应用程序等,一旦检测到攻击,它就会立即提醒管理员采取适当的行动来缓解攻击。
  • 合规的管理和报告:SIEM可以在任何时候生成实时的安全报告。

SIEM能够利用集成的威胁情报和AI技术来检测先进的与未知的威胁,包括内部威胁、安全漏洞、钓鱼攻击、Web攻击、 DDoS 攻击、数据渗出等。

以下是一些在许多企业中常见的SIEM产品:

  • Splunk
  • LogRhythm NextGen SIEM Platform:LogRhythm的下一代SIEM平台
  • SolarWinds Security Event Manager:SolarWinds安全事件管理器
  • Datadog Security Monitoring:数据狗安全监控
  • 其他

基于网络的入侵检测系统/入侵防御系统(NIDS/NIPS)

image-20230505232851794

基于网络的IDS/IPS(Network-based IDS/IPS)与基于主机的IDS/IPS(Host-based IDS/IPS)具有相似的概念,它们之间的主要区别在于:基于网络的IDS和IPS产品更加侧重于保护网络的安全性,而不是主机的安全性。

基于网络的解决方案将借助分布在网络设备和主机中的传感器及代理来收集数据。IDS和IPS都是有关检测和监控功能的安全解决方案,企业可以使用这些解决方案来保护其内部系统的安全。IDS和IPS都会读取网络数据包,以寻找预先加载到先前的数据库中的异常行为和已知威胁,这两种安全解决方案之间的显著区别在于:IDS需要人工交互或者使用第三方软件来分析数据以采取行动,而IPS 则是一个根据策略和规则来选择接受或拒绝数据包的控制系统。

下面是常见的企业IDS/IPS产品:

  • Palo Alto Networks
  • Cisco's Next-Generation:思科的下一代IPS
  • McAfee Network Security Platform(NSP):McAfee网络安全平台(NSP)
  • Trend Micro TippingPoint
  • Suricata

有关IDS/IPS的更多详细信息,请访问以下参考链接: https://geekflare.com/ids-vs-ips-network-security-solutions/

应用程序和服务

在前面的内容中,我们已经讨论了系统中的帐户发现和安全产品,接下来我们将继续深入了解系统中的其他内容,包括:

  • Installed applications:已安装的应用程序;
  • Services and processes:服务和进程;
  • Sharing files and printers:共享文件和打印机;
  • Internal services(内部服务):DNS和本地Web应用程序等。

为了更好的利用信息,我们有必要了解当前系统能为我们提供什么。

已安装的应用程序

首先,让我们通过检查应用程序的名称和版本,来开始枚举系统中已安装的应用程序,作为一名红队队员,了解这些信息可能对我们有利,例如,我们可能会发现系统上安装了易受攻击的软件,然后我们就能进行相关的漏洞利用并尝试提升我们在系统上的权限。此外,我们可能还会发现一些敏感信息,比如纯文本形式的凭据,此凭据可能属于其他系统或服务。

我们可以使用Windows命令wmic来列出所有已安装的应用程序及其版本。

PS C:\Users\thm> wmic product get name,version
Name                                                            Version
Microsoft Visual C++ 2019 X64 Minimum Runtime - 14.28.29910     14.28.29910
AWS Tools for Windows                                           3.15.1248
Amazon SSM Agent                                                3.0.529.0
aws-cfn-bootstrap                                               2.0.5
AWS PV Drivers                                                  8.3.4
Microsoft Visual C++ 2019 X64 Additional Runtime - 14.28.29910  14.28.29910

我们还能在系统中寻找特定的文本字符串、隐藏目录、备份文件等,为此我们可以使用PowerShell命令Get-ChildItem,如下所示:

PS C:\Users\thm> Get-ChildItem -Hidden -Path C:\Users\kkidd\Desktop\

服务和进程

Windows服务能够使系统管理员在Windows会话中创建长时间运行的可执行应用程序。有时候,Windows服务具有错误的配置权限,这可被攻击者用于提升当前用户访问级别的权限,因此,作为红队队员我们必须查看正在运行的服务,并执行针对服务和进程的侦察活动。关于侦察服务和进程的更多详细信息,可以阅读Attack MITRE上的“进程发现”技术文档

进程发现是指理解系统所提供的内容的枚举步骤。作为红队队员,我们应该尝试获取有关在系统上运行的服务和进程的详细信息,我们需要尽可能多地了解我们的目标。通过枚举而得到的服务、进程信息还可以帮助我们理解在网络中其他系统上运行的常见软件,例如,被控制的系统上可能存在用于内部目的的自定义客户端应用程序,这些自定义软件是提权向量的最常见根源。总而言之,我们有必要深入了解当前系统中的进程细节。

共享文件和打印机

image-20230506183533313

共享文件和网络资源(包括打印机等资源)通常可用于个人和企业环境中,如果系统管理员错误配置了相关的访问权限,那么我们就可以基于这些共享文件和网络资源来获取关于其他帐户和其他系统的有用信息。

内部服务:DNS,本地web应用程序等

内部网络服务是扩展我们对企业网络中的其他系统和整个企业环境的了解程度的另一个信息来源。

如果想了解有关用于外部和内部网络的网络服务的更多详细信息,可以参考以下历史博客:

以下是一些我们可能感兴趣的常用内部服务:

  • DNS Services:域名系统服务;
  • Email Services:电子邮件服务;
  • Network File Share:网络文件共享;
  • Web application:Web应用程序;
  • Database service:数据库服务。

答题

使用net start命令列出正在运行的服务:

PS C:\Users\thm> net start
These Windows services are started:

Active Directory Web Services
Amazon SSM Agent
Application Host Helper Service
Cryptographic Services
DCOM Server Process Launcher
DFS Namespace
DFS Replication
DHCP Client
Diagnostic Policy Service
THM Demo
DNS Client

以上述输出结果中的THM Demo为例,我们进一步查找它的确切服务名称:

PS C:\Users\thm> wmic service where "name like 'THM Demo'" get Name,PathName
Name         PathName
THM Service  c:\Windows\thm-demo.exe

我们找到了和THM Demo相关的文件名称(thm-demo.exe)及其路径,接下来让我们使用Get-Process命令查询更多详细信息:

PS C:\Users\thm> Get-Process -Name thm-demo

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
     82       9    13128       6200              3212   0 thm-service

我们找到了thm-demo的进程ID,现在,我们可以通过列出系统中处于侦听状态的端口来检查该进程是否提供了网络服务:

PS C:\Users\thm> netstat -noa |findstr "LISTENING" |findstr "3212"
  TCP    0.0.0.0:8080          0.0.0.0:0              LISTENING       3212
  TCP    [::]:8080             [::]:0                 LISTENING       3212

我们可以看到3212号进程正在监听端口8080。

现在让我们以THM Service为侦察对象,找到它所使用的端口号:

net start

wmic service where "name like 'THM Service'" get Name,PathName

Get-Process -Name thm-service

netstat -noa |findstr "LISTENING" |findstr "2816"

image-20230506193148339

THM Service所对应的端口号为:13337

image-20230506193344138

访问我们刚才找到的端口的localhost(http://localhost:13337/),查看flag内容:

image-20230506193759828

我们找到的flag内容为:THM{S3rv1cs_1s_3numerat37ed} 。

image-20230506193902921

DNS是任何AD(活动目录)环境和网络中常用的协议之一。我们已部署的目标机器也可为AD环境提供DNS服务,让我们通过执行DNS区域传输来枚举DNS服务,看看是否可以列出所有的DNS记录。

我们可以使用Microsoft工具nslookup.exe来执行DNS区域传输。

PS C:\Users\thm> nslookup.exe
Default Server:  UnKnown
Address:  ::1

一旦我们执行了上述命令,我们就可以向DNS服务器提交查询,本例中的DNS服务器就是目标机器:

> server 10.10.73.94
Default Server:  [MACHINE_IP]
Address:  MACHINE_IP

接下来让我们在AD环境中的域上尝试执行DNS区域传输。

> ls -d thmredteam.com
[[10.10.73.94]]
 thmredteam.com.                SOA    ad.thmredteam.com hostmaster.thmredteam.com. (732 900 600 86400 3600)
 thmredteam.com.                A      MACHINE_IP
 thmredteam.com.                NS     ad.thmredteam.com
***
 ad                             A      MACHINE_IP

tips:以上步骤及最终输出结果就是一个成功执行DNS区域传输的示例。

现在,让我们使用nslookup.exe并基于域控制器的名称thmredteam.com来执行DNS区域传输,然后找到隐藏在DNS记录中的flag:

#使用以下这条命令可找到当前AD环境中的域控制器名称(在systeminfo的输出结果中查找Domain部分):systeminfo | findstr Domain

nslookup.exe

server 10.10.73.94

ls -d thmredteam.com

image-20230506195132272

flag的内容为:THM{DNS-15-Enumerated!} 。

image-20230506195236855

posted @ 2023-05-06 20:35  Hekeatsll  阅读(268)  评论(0编辑  收藏  举报