原文:
annas-archive.org/md5/5AF1EAA721331A5C7E465DF911DFDC6C
译者:飞龙
前言
本书将为您提供一个系统化的流程,用于构建虚拟环境进行渗透测试。在整本书中,将创建网络架构,允许对几乎任何生产环境进行测试。
本书涵盖内容
第一章,“介绍渗透测试”,介绍了什么是渗透测试以及渗透测试是专业安全测试的一个组成部分的解释,它是对漏洞的验证。这意味着“利用”,在大多数情况下,在合同渗透测试中,客户对此并不清楚。
第二章,“选择虚拟环境”,讨论了可以选择的不同虚拟环境平台。我们还将介绍大多数主要的虚拟技术平台。
第三章,“规划一个范围”,解释了规划测试环境所需的内容。我们还讨论了搜索和发现漏洞进行测试以及创建实验室环境来测试某种漏洞的过程。
第四章,“识别范围架构”,定义了范围的组成以及创建网络结构的过程。随后介绍了许多不同的组件,然后将其连接到结构中。
第五章,“确定方法论”,探讨了一组测试方法论的样本。将介绍这个样本集的格式和步骤,以便作为测试人员,您可以进行比较并调整方法论。
第六章,“创建外部攻击架构”,构建了一个分层架构,并执行了一个系统化的流程和方法来进行外部测试。此外,您还将学习如何部署保护措施,并进行测试以查看保护措施的有效性。
第七章,“设备评估”,介绍了测试设备的挑战。本节包括测试弱过滤的技术以及在可能的情况下渗透各种防御的方法。
第八章,“设计 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。你会看到现在它会成功,如下面的屏幕截图所示:
- Way Back Machine (www.archive.org):
这个网站证明了互联网上的任何东西都不会消失!有许多评估中,客户会告诉团队他们正在测试一个尚未投入生产的 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
下载它。
安装软件后,程序将自动启动,并且您应该看到类似于以下截图的屏幕:
我们需要一个 ISO 镜像来用于我们的虚拟机。为此,我们将使用优秀的工具 Samurai Web 测试框架(WTF)。这是一个网络应用测试框架,是一个预先配置为 Web 渗透测试框架的 Linux 实时环境。CD 包含一些最好的开源和免费工具,用于测试和攻击网站。您可以从www.samurai-wtf.org/
下载 ISO 镜像。
要开始创建虚拟机,请单击“新建”以开始该过程。在打开以创建虚拟机的窗口中,在名称字段中输入Samurai
,并选择 Linux 作为操作系统。然后,选择所需的版本,然后单击“下一步”。
在接下来弹出的窗口中,您将为虚拟机选择 RAM;您可以将设置保留在默认的 256 MB,也可以将其更改为最适合您的其他值。此窗口的示例如下截图所示:
我们接下来要做的事情是为我们的虚拟机创建一个硬盘,但出于我们的目的,我们不打算使用硬盘;因此,我们将选择不添加虚拟硬盘设置,并单击创建。您将收到有关创建没有硬盘的虚拟机的警告,但这没关系,因为这正是我们要做的。因此,请阅读警告并单击继续。
恭喜!如果一切顺利,你刚刚在 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,我们必须设置一个网络,我们将连接到该网络。我们可以在开始时设置这个网络,也可以在创建虚拟机之后设置它。对于我们的目的,我们将在开始虚拟机创建过程之前创建网络。在基本架构中,我们需要两个网络,一个连接到外部世界(例如,互联网),第二个网络连接到内部机器。为简单起见,我们将它们称为ExternalNet和InternalNet。
你需要做的第一件事是为 DHCP 服务器定义一个192.168.177.0/24
的 DHCP 范围。这是用于外部访问的网络,如果你要使用这台机器,实验室需要设置成这样。如果你使用的是服务器平台,设置网络的步骤如下:
-
导航到开始 | 管理工具 | Hyper-V 管理器。
-
在 Hyper-V 的右窗格上点击虚拟网络管理器,虚拟网络管理器窗口将出现。
-
在左窗格上选择新建虚拟网络,并选择外部作为网络类型,然后点击添加。如下面的屏幕截图所示:
创建 InternalNet 的过程是相同的,所以我们不会在这里重复。我们将按照使用 Hyper-V 创建虚拟机的步骤,直到成功启动,然后我们将继续进行下一章。
你将需要一个 ISO 镜像,如果你有一个想要使用的,那就很好。我们将使用 Offensive Security Kali Linux 的流行渗透测试框架。你可以从www.kali.org/downloads/
下载 ISO 镜像。一旦你打开这个链接,选择你想要使用的版本并下载它。一旦你下载了它,启动 Hyper-V。如果你使用的是服务器平台,步骤如下:
-
导航到开始 | 管理工具 | Hyper-V 管理器。
-
当程序打开时,导航到操作 | 新建 | 虚拟机,当新的虚拟机向导打开时,点击下一步。
-
为虚拟机输入一个名称,并点击下一步。在内存部分,输入你可以输入的最大 RAM,至少应该是 1024 KB。Kali 需要至少 1GB 的内存才能有效运行。一旦你输入了 RAM,点击下一步。
-
这将带出网络连接选择;点击未连接,然后点击下一步两次。
-
在安装选项窗口中,选择单选按钮从引导 CD/DVD-ROM 安装操作系统,然后选择镜像文件(ISO),并浏览到 Kali 镜像。参考下面的屏幕截图:
这是你参考的安装选项屏幕
-
一旦你导航到 ISO 镜像,点击下一步。验证你的设置是否正确,然后点击完成。
-
现在我们想要配置我们的网络适配器。在 Hyper-V 环境中,这可能是一个棘手的过程;所以,当你处理不是来自 Windows 家族的机器时,最安全的方法是选择传统的网卡。右键单击你创建的 Kali 虚拟机,选择传统网络适配器。然后,点击添加,如下面的屏幕截图所示:
-
现在我们已经选择了我们的网络适配器类型,我们必须将其连接到我们的网络。在下拉窗口中,选择外部网络,点击应用,然后点击确定。
-
一个新的虚拟网络将出现在窗口的左侧。选择它,然后在窗口的右侧窗格中输入名称为
ExternalNet
。确保选择了External单选按钮,点击计算机的网络适配器,然后点击应用,如下面的屏幕截图所示: -
如果你收到类似下一个屏幕截图的警告消息,点击是以清除它。这只是为了让你知道你可能会失去连接,并且必须重新输入静态网络配置数据,如果你失去了网络连接。
-
如果你不想再被警告打扰,那么在点击是之前选择请不要再次询问我复选框,如下面的屏幕截图所示:
-
我们现在准备启动我们的虚拟机。右键单击 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 产品创建的受限制的虚拟机。这意味着您可以对机器进行密码保护,如果用户没有密码,则无法运行该机器。以下是一个受密码保护的机器的示例截图:
在撰写本书时,该工具并不提供试用下载,但您可以从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 继续在虚拟化的主要领域中领先的另一个原因。安装程序安装并打开后,您应该在屏幕上看到与以下截图类似的显示:
正如您在前面的屏幕截图中所看到的,我们有许多选项可供选择。由于我们之前使用过 ISO 映像,我们将继续这种趋势,并添加另一个任务来创建一个虚拟机。为简单起见,我们将使用之前使用过的 ISO Samurai WTF 映像,但您也可以下载您选择的 ISO 映像并从中创建机器。一旦您选择了要使用的 ISO 映像,我们就准备开始安装。要开始使用这个虚拟机,我们将执行以下步骤:
-
点击创建新的虚拟机。这将启动新的虚拟机向导。接受典型的默认设置,然后点击下一步。
-
在下一个窗口中,选择安装程序光盘映像文件(iso)的单选按钮,并浏览到 ISO 文件的位置。然后,点击下一步,如下图所示:
在上一个屏幕截图中,您可能注意到操作系统没有被自动检测到;因此,我们将不得不手动输入详细信息。如果它被检测到,向导在大部分情况下将会在用户不进行交互的情况下执行安装。
-
在客户操作系统窗口中,选择Linux,在下拉菜单中,点击其他 Linux 2.6.x kernel。一旦您做出选择,点击下一步。接受默认设置,然后点击下一步。
-
在指定磁盘容量屏幕上,阅读有关分割磁盘的优缺点的信息。如果您希望更改默认设置,可以这样做,但对于大多数人来说,默认设置是可以接受的,除非您打算拥有大型机器。
-
一旦您做出决定,点击下一步。这应该是最后一个屏幕;花点时间审查信息。然后,点击完成并创建您的虚拟机。您应该看到您创建的机器和机器配置信息,如下图所示:
-
唯一剩下的事情就是启动虚拟机。点击启动此虚拟机,您的机器将启动。
现在,我们将为本书中其他章节中将使用的机器创建一个虚拟机。我们将要使用的机器已经创建并以 VMware VMDK 文件格式作为虚拟机可用。我们将在本章后面更多地介绍虚拟硬盘的不同格式。我们想要从Open Web Application Security Group(OWASP)的www.owasp.org上下载 Broken Web Application Project 虚拟机。这个虚拟机由 Mandiant 赞助,是一个练习 Web 应用程序测试的绝佳教程。您可以从sourceforge.net/projects/owaspbwa/files/
下载 VM。
一旦 VM 下载完成,将 VM 提取到您机器上的一个文件夹。文件提取完成后,我们需要启动 VMware Workstation 并开始访问过程。以下是需要执行的步骤:
-
点击打开虚拟机。导航到您提取文件的文件夹,并找到 Broken Web Application 项目 VM 的配置文件。
-
一旦您找到文件,选择它并点击打开以打开文件。这将打开 VM,您应该在配置屏幕上,如下图所示:
正如您在前面的屏幕截图中所看到的,VM 配置为在 NAT 接口上启动,并且我们将在启动 VM 时使用这个接口。在本节结束时,我们将看一下在 VM 环境中这个 NAT 接口的含义。
-
现在我们要启动这台机器;点击启动此虚拟机,您的机器将启动。
-
一旦机器启动,您将看到用于访问该机器的登录信息。我们可以在本地登录到机器,但实际上没有理由这样做。如果您想要检查机器或四处浏览,欢迎这样做,但出于我们的目的,我们将通过网络访问它。这是访问它的首选方式,因为它为我们提供了 VM 内的所有不同工具的图形用户界面。启动后显示状态的 VM 屏幕如下截图所示:
我们想要的信息是分配给 VM 的 IP 地址,以便我们可以访问并检查它!打开您选择的浏览器,输入显示的 IP 地址,并打开 Broken Web Application Project VM 的 Web 界面。向您展示的网页示例如下截图所示:
正如截图所示,这个 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 个网络段。这是非常多的网络!正是这一点以及其他因素使得它成为我们的首选软件。在构建分层和分段架构时,我们需要交换功能。我的机器上的网络配置示例如下截图所示:
在上述截图中,您可以看到在我的机器上,大部分 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 中的样子,而不提供构建机器的细节。利用程序选项的一个示例在下面的屏幕截图中显示:
正如前面的屏幕截图所示,我们只需要设置两个选项,SRVHOST和SRVPORT,来尝试利用漏洞。这里的重要一点是,一旦它在框架中,我们验证漏洞的任务就变得更容易了。不过需要注意的是,仅仅因为我们在 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 配置的示例如下图所示:
在 NAT 配置中,主机系统有一个连接到 NAT 网络的虚拟网络适配器。这使得主机和虚拟机可以相互通信。当接收到 VMnet8 网络的数据时,外部网络会识别每个虚拟网络机器的传入数据包,并将它们发送到正确的目的地。
在正常配置中,NAT 机器无法从外部网络访问。然而,可以改变这一点,设置端口转发,使外部机器可以发起连接并将流量发送到连接到 NAT 设备的机器中。对于我们的目的,我们更喜欢保留 NAT 的默认设置,不配置端口转发,因为我们不希望外部机器连接到内部机器,因为这是我们测试的大多数网络的配置方式。尽管我们不使用这个功能,但这可能是你想要尝试的东西。构建虚拟测试实验室就是关于实验和找到适合你的方法。因此,要访问端口转发配置,打开 VMware Workstation,导航到编辑 | 虚拟网络编辑器… | VMnet8 | NAT 设置… | 添加。这将打开端口转发设置窗口,这里有其他设置可以自定义,但大部分情况下,默认设置对我们的目的效果很好。端口转发选项的示例如下截图所示:
在这里需要补充的一点是,无论你在 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 地址。主机专用网络配置的示例如下图所示:
这里需要提到一些注意事项。我们之前说过,仅主机网络是一个隔离的网络。嗯,就像虚拟化的大多数事物一样,您可以改变这一点,使得隔离的网络不再完全隔离。再次强调,出于我们的目的,这不是我们要探讨的内容,但我们只是想简要介绍一些打破或至少削弱隔离的方法。您可以设置路由或代理将网络连接到外部网络,如果您使用的是 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 工具的详细信息的示例:
关于这个问题讨论够了,让我们建立一个路由器!我们希望使用 Ubuntu 作为我们的路由器仿真软件平台。您可以访问 Ubuntu 网站并从www.ubuntu.com/download/desktop
下载软件。在撰写本书时,最新的稳定版本是 12.04,这是我们将用于路由器平台的版本。64 位版本可能会有一些挑战;对于我们的目的,32 位或 64 位版本都可以使用。
下载了 ISO 镜像后,您将在 VMware Workstation 中创建一个新的虚拟机并挂载 ISO 镜像。我们在第三章中介绍了这些步骤,规划一个范围,所以您应该对它们很熟悉。如果不熟悉,可以参考该章节以获取确切的步骤序列。VMware Workstation 很可能会识别 ISO 镜像并提供执行简单安装的选项。这是可以接受的,也可以不接受,这取决于个人偏好。
创建了机器并从 ISO 镜像引导后,您将通过安装提示安装软件到虚拟机的硬盘中。在大多数情况下,您可以接受默认安装,但随时根据需要进行更改。请记住,这是虚拟环境的优势之一。如果我们搞砸了什么,我们可以创建另一个,或者正如我们讨论过的,如果我们已经拍摄了快照,我们可以恢复到那个状态。Ubuntu 的一个很棒的功能是在安装完成后添加软件包的能力。
安装完成后,默认情况下,虚拟机将有一个连接到 NAT 交换机的网络适配器,但是根据我们设计的架构,我们知道我们的路由器需要两个接口。如下图所示,这是为了提供连接性:
要使用 Ubuntu 机器创建我们的架构,我们必须添加一个网络适配器并将其连接到 VMnet2 交换机。在 VMware Workstation 中,您无需关闭虚拟机即可添加新的适配器。在软件中,导航到View | Console View以打开虚拟机的配置视图。单击Edit virtual machine settings,添加一个网络适配器并将其连接到 VMnet2。所需配置的示例如下截图所示:
现在我们已经为路由器机器设置了配置,我们需要获取一个 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
。默认配置文件的示例如下截图所示:
我们将专注于我们的配置的两个区域。在路由器镜像部分,我们必须指定系统上 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。此步骤的配置示例如下截图所示:
另外,注释掉路由器 R2,因为我们不使用它。现在我们准备测试我们的配置。在终端窗口中,输入dynamips -H 7200
。这将在端口 7200 上启动 Dynamips 服务器。如果一切顺利,您应该看到类似于以下截图的输出:
下一步是启动我们的配置文件,并与我们在机器上加载的 Cisco IOS 进行交互。我们在本书中使用的示例 IOS 镜像是用于 7200 系列路由器的,因此我们可以在其上配置许多接口。但是,对于我们的目的,我们只需要两个快速以太网接口来执行我们的路由,更重要的是,随着我们在架构的各个部分之间进行流量过滤,我们需要这样做。
在另一个终端窗口中,输入 dynagen /opt/config.net
。这将读取我们创建的配置文件并加载 IOS 镜像以进行访问。希望您在这里不会遇到任何错误,但如果遇到了,那么现在是时候进行故障排除了。最常见的错误是路径错误。如果是路径错误,您将看到一条消息,说找不到镜像。应该看到的示例如下截图所示:
此时,我们准备启动路由器 R1;您可以通过在 Dynagen 提示符中输入 console R1
命令来实现这一点。这将使您登录到路由器,就好像您是通过控制台电缆连接一样。您应该会看到另一个窗口打开。这是连接到路由器的访问。按下 Enter 键应该会带您到登录提示符,如下截图所示:
从这里开始,就是使用路由器命令来配置我们的路由器的两个接口;在路由器提示符下输入 en
进入路由器的特权模式。一旦进入特权模式,输入 show ip int brief
来查看路由器的接口配置。您会看到还没有接口配置,所以我们必须进行配置。命令的输出示例如下截图所示:
现在我们要配置这些接口(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
。完成的配置示例如下截图所示:
直到您连接某些东西到内部虚拟交换机,您将无法验证另一个交换机。这是因为 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 虚拟机。您可以从以下链接下载虚拟机:
您将需要注册才能下载该应用程序。下载后,打开虚拟机并添加一个连接到 VMnet1 接口的网络适配器。与大多数虚拟机一样,默认情况下,网络适配器设置为 VMnet8 接口,我们可以将其用于直接测试。每当我们想要将 Web 服务器移动到我们架构的另一个位置时,我们只需更改适配器连接的交换机。此外,我们可以拍摄快照,并为我们想要测试的每个位置拍摄一个快照;此外,我们可以克隆机器,并在我们的架构周围克隆机器。我们如何做并不重要。意图是拥有机器来测试我们的技能,然后在我们和目标之间或之间放置障碍,并学习如何克服它们的方法。
一旦您启动了机器,请使用用户名msfadmin
和密码msfadmin
登录到机器。登录后,请注意 IP 地址,打开浏览器并连接到机器上的 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。下载这两个版本并审查更新版本中正在进行的差异和更改是一个好主意。以下是下载页面的示例:
如前面的屏幕截图所示,您必须成为 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 中详细讨论了这些防护措施。手册中一些考虑因素的例子如下图所示:
现在已经简要讨论了物理考虑因素,接下来要讨论的是姿势审查。
姿势审查
姿势审查由以下组成:
-
政策:审查和记录政策、合同和服务级别协议(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 中,我们有关于报告构成的信息。这是一个高层抽象,包括六个主要主题。有关每个主题的额外解释,请参考以下链接:
www.cesg.gov.uk/servicecatalogue/CHECK/Pages/CHECKReportRequirements.aspx
六个主要主题如下:
-
报告作者应确保报告可被客户阅读和获取
-
报告应提供参与健康检查的个人的详细信息
-
报告应被标记为网络包含信息所需的
-
报告应传达健康检查的背景、范围和内容
-
漏洞应该被准确识别
-
每个确定的漏洞都应该与一个补救方案相关联
再次强调,这是对主题的简要解释,但它符合我们的目的。作为提醒,如果你的参与或者你的合同投标涉及到英国国防部或英国政府的范围和领域,你会想熟悉 CHECK。值得注意的是加拿大也参与了 CHECK 的要求。
NIST SP-800-115
国家标准与技术研究所特别出版物(NIST-SP-800-115)是信息安全测试和评估的技术指南。该出版物由 NIST 的信息技术实验室(ITL)制作。
该指南将安全评估定义为确定被评估实体如何有效地满足特定安全要求的过程。当你审查该指南时,你会发现它包含大量关于测试的信息。虽然该文档的更新频率不如我们希望的那样频繁,但它是我们在构建测试方法论时的一个可行的参考资源。该文档包括以下主要章节:
-
介绍
-
安全测试和审查概述
-
审查技术
-
目标识别和分析技术
-
目标漏洞验证技术
-
安全评估规划
-
安全评估执行
-
测试后活动
就像我们在 OSSTMM 中所做的那样,我们只会看文档的一小部分细节。NIST 网站有许多参考资料,我们应该熟悉。以下是特别出版物主页的一个示例截图:
NIST 网站和参考资料应该被收藏在你最喜欢的浏览器中,因为他们不断发布审查的出版物。花一些时间审查这些预发布的出版物总是一个好主意;这是帮助你保持科技更新的另一种方法。
根据 NIST 出版物,该文档为我们提供了专业信息安全测试和评估的流程和技术指导的参考,并且具体的要点如下截图所示:
对于那些想要更详细审查 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 中存在的方法的一个示例如下面的屏幕截图所示:
如前面的屏幕截图所示,Kali 发行版中包含的方法与我们在其他示例中介绍的步骤相似。正如前面提到的,Offensive Security 团队还维护着出色的metasploit unleashed参考资料。在这些步骤中,我们可以练习一种方法,如下面的屏幕截图所示:
metasploit unleashed参考资料的一个很棒的地方在于,在其中的主题中,有详细的步骤来支持测试方法中不同步骤中使用 metasploit 框架。在Meterpreter Scripting下可以找到的步骤的示例如下屏幕截图所示:
我们将在这里结束对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 相同。下面的截图显示了一个示例:
配置中棘手的部分在于路由的配置;因此,在我们处理实际的过滤规则语法之前,我们将先处理这个问题。请注意,我们可以启用数据包转发,然后测试我们的路由,但现在我们只需设置路由方向并验证它是否到达我们想要到达的位置。
打开您的 Debian 虚拟机,一旦启动,请使用您在构建机器时创建的用户名和密码登录。打开一个终端窗口,输入ifconfig
以显示接口配置信息。请记住,如果您没有以root
身份登录,您将需要使用su
命令提升权限,然后输入 root 密码以使命令生效。我们机器的配置示例如下截图所示:
正如前面的截图所示,我们在两个接口上都有 15 地址。我们在本章前面添加了路由,但这些路由是通过 Dynamips 虚拟机的。因此,如果您同时启动这两台机器,就不会有 IP 冲突,但您必须调整其他机器中的路由,以确保流量通过正确的机器。最简单和推荐的方法是在继续之前暂停 Dynamips 虚拟机。要在 VMware Workstation 中暂停机器,请导航至VM | Power | Suspend Guest。
现在机器已经暂停,我们将在 Kali 机器中输入一个路由并进行测试。如果您仍然为 Dynamips 机器输入了路由,那么它将起作用,因为我们只是使用了子网 10.2.0.0,并没有为网关机器添加条目。要测试您的路由,请输入ping 10.2.0.15 –c 3
以测试您是否具有连接性。如果没有,那么您的路由表中不再有该路由。我们已经展示了如何做到这一点,但为了让您不必考虑或参考本章前面的内容,下面的截图显示了查看表格、添加和测试路由的方法示例:
屏幕显示了查看表格、添加和测试路由的方法示例(裁剪的文本不重要)
一旦您成功测试了对 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
。转发现在已启用。以下屏幕截图显示了启用转发的示例:
一旦您打开它,您可能无法完成成功的测试。在之前配置路由时,我们没有像应该那样精细化。我们出于一个原因这样做:为了向那些可能对网络技能有点生疏的人展示;此外,您可能已经忘记了您以前拥有的路由知识,如果您一直在更高层花费大量时间的话。我们在这里要表达的是,您必须在 route 命令中放置一个网关。有时,没有网关也可以工作,就像在我们之前的章节中一样,但通常会失败,因此最好尽可能具体地设置我们的路由,以避免这种情况。您必须在 Kali 和 OWASP 虚拟机中输入路由。
以下屏幕截图显示了两台机器的 route 命令示例:
屏幕显示了两台机器的 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
来将配置保存到文件中。这将使我们在重新启动机器后仍然可以使用规则。未来规则文件应该如下截图所示:
这条规则应该阻止你能够 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 过滤器添加协议,并练习我们很可能会遇到的几乎所有形式的测试。
部署 IDS/IPS 和负载均衡器
我们现在基本上已经构建了我们架构的主要组件;因此,现在是时候讨论向我们的测试范围添加监控功能了。有一件重要的事情需要注意:无论我们选择什么监控解决方案,我们都无法预测网站将如何配置它!这是我们在测试时不能忽视的唯一事情。我们可以测试并成功规避我们放置在范围上的监控系统,但由于这些系统主要是基于策略和配置的,有可能我们在实验室中取得的成功不会在现实中得到同样的结果。在本节中,我们将讨论一些可用的监控系统类型的示例,并在书的后面讨论逃避时部署其中一个。
入侵检测系统(IDS)
在选择我们的架构的 IDS 时,有一些事情我们需要考虑,比如我们想要将哪种产品设置为我们的实践 IDS。有许多可用的产品,这可能会成为一项艰巨的任务,但由于最受欢迎的产品之一是 Snort,我们将集中讨论它。Snort 的另一个优点是它有免费版本和商业版本。
当我们在网络上部署我们的 Snort 机器时,我们有几种选择,但在解决这个问题之前,我们需要讨论我们将在虚拟环境中部署 Snort 传感器的位置以及流量将如何到达传感器。
在实际的架构中,交换机是一个单播设备,只会将流量转发到目的端口。此外,广播流量是唯一发送到所有端口的流量。在部署 IDS 网络传感器时,这可能会带来问题,我们必须使用 SPAN 端口或 TAP。有关这些选项的更多信息和比较,您可以访问以下链接:
幸运的是,在 VMware 交换机中我们没有这个问题。交换机被设置为我们可以看到交换机上的流量,这使我们能够连接 IDS 网络传感器,而不必担心配置 SPAN 端口。要验证这一点,你可以在两台机器之间进行 ping 测试,并在第三台机器上运行tcpdump
,检查是否可以看到两台其他机器之间的流量。例如,我们将在 OWASP Web 服务器和堡垒主机之间进行 ping 测试;我们将通过在 Kali 机器上运行tcpdump
来查看 ping 流量。
这在以下截图中有例子:
一旦我们确定我们可以查看交换机上的流量,我们想讨论的下一件事是传感器的位置。对于基于网络的 IDS,正常的配置是在每个段上都有一个网络传感器。因此,唯一的要求是所有的机器都必须连接到同一个交换机。在未来,当我们部署和监控我们的范围时,我们将遵循这种方法。我们的带有 IDS 传感器的外部架构示例如下图所示:
现在我们已经确定了我们架构中传感器的位置,我们将讨论如何在我们的虚拟配置中实现这一点。我们可以构建另一台虚拟机作为 IDS 传感器,但这样我们可能会感受到现有 RAM 的压力。因此,我们更倾向于有一台机器,并配置多个网络卡,并在每个已连接到所需交换机的现有卡上配置 Snort 传感器。
注意
为了实现这一目标,我们需要构建一台运行 Snort 的机器。我们可以从头开始构建一台机器,但为了本书的目的,我们将考虑其他选择。然而,从头开始构建一台机器是一次有趣的经历,留给读者作业。关于如何为 Snort 做到这一点的出色资源,也提供了一些平台的指导,可以在www.snort.org/docs
找到。关于这些学习指南的一个注意事项,它们并不是 100%准确的,所以你的实际情况可能有所不同。
为了创建我们的 Snort 传感器,我们将使用一个已经安装了 Snort 程序和所有依赖项的发行版。我们将使用的发行版是网络安全工具包。它包含 125 个顶级安全工具,这是值得添加到您的架构中的东西。我们最喜欢的是它设置 Snort 的简易性。您可以从sourceforge.net/projects/nst/files/
下载 ISO 映像。下载 ISO 映像后,您需要创建一个虚拟机。由于我们已经涵盖了这一点,我们不会再重复。您需要做的是挂载 ISO 映像并引导它。一旦机器引导,您将安装它到硬盘。在桌面上,有一个图标用于安装到硬盘。桌面的一个示例如下截图所示:
双击图标并按照提示将映像安装到硬盘。这将需要一些时间。您可能想知道为什么我们要安装到硬盘,而不是直接从 ISO 映像引导。我们之所以要安装到硬盘,是因为我们希望将 NST VM 作为实际的机器,这样我们就可以保存和构建各种配置,然后保存它们。如果安装时选择了自定义分区,请单击图标并将其更改为自动分区,因为这样可以节省时间。安装完成后,双击桌面上的图标并设置系统密码。设置密码后,在桌面区域右键单击并选择在终端中打开以打开新的终端窗口,然后输入shutdown –h now
以关闭系统。系统关闭后,我们需要配置机器以支持我们需要连接 Snort 传感器的三个接口。
这种配置的一个示例如下截图所示:
正如您可能已经注意到的,在上一个截图中,ISO 映像不再挂载;删除该设置是一个好主意,以避免任何潜在的冲突。一旦验证了您的配置并启动了虚拟机,我们将继续配置机器以满足我们外部架构范围的 IDS 需求。打开一个终端窗口并输入ifconfig
,验证您是否有三个接口,如下截图所示:
现在我们已经设置了接口,准备启动 Snort。我们选择网络安全工具包的原因是它为我们提供了一个非常简单的 Snort 传感器设置。单击活动,选择 Firefox 图标并打开浏览器,系统将提示您输入用户名和密码。输入用户名root
和安装到硬盘时设置的密码。在 Web 界面中,单击安全 | 入侵检测 | Snort IDS以打开配置 Snort 的 GUI。这种配置的一个示例如下截图所示:
显示配置 Snort 的 GUI 的屏幕(裁剪的文本不重要)
要配置传感器,请选择您要启动的传感器的单选按钮,即 eth0 接口。选择接口后,向下滚动并单击设置/启动 Snort以启动传感器。给它一些时间,然后单击检查状态以查看传感器是否已启动。有时需要尝试两次,如果显示停止,请单击启用,然后再次运行该过程。一旦成功,您应该看到接口上正在运行的进程。对其他两个接口执行相同的步骤。这种配置的一个示例如下截图所示:
显示在接口上运行的进程的屏幕(裁剪的文本不重要)
就是这样!我们现在使用 Snort 工具拥有了一个完全分布式的 IDS,并且我们已经将传感器连接到架构的每个交换机上。我们不会在这里详细介绍如何使用 IDS,因为当我们展示规避方法时,我们将会详细介绍。现在,我们至少想简单地查看一种验证您的 Snort 安装是否正常工作的方法。在传感器的右侧,有许多按钮;点击规则按钮以选择 eth0 接口。这将显示您可以在接口上配置的规则;当您审查规则时,您会发现这个基本安装并没有启用太多规则;这是为了避免误报。通常,网站会禁用扫描规则,因为它可能导致许多误报,而实际上,扫描是如此常见。我们希望通过在单选按钮中选择它来启用接口的扫描规则。一旦您对规则进行了更改,您将需要重新加载接口。点击仅包括所选规则。以下是此示例的屏幕截图:
下一步是重新加载传感器以更新规则。点击管理 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 控制台上看到的警报的示例屏幕截图:
这证实了我们已经配置了 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 机器连接到我们范围的任何地方,以便我们可以测试我们通过它的能力。这将为我们提供以下图表中显示的配置:
由于我们需要访问互联网,您需要更改网络适配器,以便它连接到 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
并更改执行权限。这些命令的示例如下图所示:
现在我们准备开始安装过程。输入./dotDefender-5.12.Linux.i386.deb.bin
以开始安装过程。按默认设置进行,直到您必须输入 Apache 可执行文件的路径。输入/usr/sbin/apache2
作为 Apache 服务器的位置,并继续使用安装默认设置,直到您输入要访问应用程序的 URI。输入dotDefender
。然后,输入管理员访问密码;在测试环境中,您可以输入任何您选择的密码,但我喜欢保持简单,所以我们将使用密码adminpw
并继续安装。在更新选项中,选择任一选项并继续安装。如果提示更新周期选项,请选择您选择的任何一个,然后单击下一步。选择第一个选项从网站获取更新,然后单击下一步继续安装。
如果一切顺利,您应该看到安装完成的成功消息,如下图所示:
现在,根据完成消息的指示,我们需要重新启动 Apache;输入/etc/init.d/apache2 restart
以重新启动服务器。重新启动 Web 服务器后,我们将访问 WAF。打开您选择的浏览器,并使用 Metasploitable 机器的 URL 连接到 WAF。连接后,输入管理员用户名和您在安装过程中选择的密码,并访问配置页面;如下图所示的示例:
由于我们尚未应用许可证,我们只处于监控模式,但对于我们的测试和使用 WAF 进行练习来说,这已经足够了。现在我们想要测试我们的 WAF,并且我们将使用 Kali 发行版进行测试。在 Kali 机器上,打开一个终端窗口,输入nikto –h 192.168.177.134
来使用 nikto 网络扫描程序,看看 dotDfender WAF 是否会发出警报。如果您的 WAF 位于不同的 IP 地址,则必须将目标地址更改为您的 WAF 的 IP 地址。扫描完成后,返回到您的 dotDefender,并导航到日志查看器 | Metasploitable,查看来自 WAF 的日志。您应该会看到来自 nikto 扫描的一些警报;以下是一个示例截图:
我们现在已经为外部测试以及其他方法构建了一个强大而完整的架构。我们拥有可以在许多不同情况下重复使用的组件;因此,从本章的角度来看,我们的需求已经得到满足,我们也完成了我们的目标。最后要做的一件事是对本章中配置的所有机器进行快照,以防万一出现问题。
总结
在本章中,我们建立了一个分层架构,以满足我们可能遇到的各种情况的需求。我们从分层方法开始,以满足我们外部测试的需求。
在定义了各层之后,我们开始向架构的每个部分添加所需的组件。我们还研究了过滤和路由的需求,并构建和配置了 Cisco 路由器模拟器以及 iptables 机器,以满足我们的过滤需求。
一旦我们配置并测试了第一层组件,我们就开始添加防火墙到架构中的任务。我们使用了流行的工具 Smoothwall 作为我们的防火墙,并将其配置为支持一个服务以进行测试。
在构建了防火墙并测试了配置之后,我们接下来着手添加监控功能到网络。我们在所有三个所需的子网上构建和配置了 Snort,以支持我们对入侵检测的需求。然后,我们讨论了向配置中添加 IPS 和负载平衡的过程。
最后,我们讨论了集成 Web 应用防火墙的内容。我们安装并配置了 Web 应用防火墙 dotDefender。一旦我们建立了机器,我们对其进行了克隆,这样我们现在就有了一个可以连接到架构中任何位置的 WAF 机器。在完成克隆过程后,我们使用了一个工具 nikto 来测试我们的 WAF 是否能检测到 Web 应用程序类型的攻击。
本章到此结束。您现在拥有一个完整的分层架构,包括路由需求。现在,只需连接所需的目标到这个架构,并测试看看对目标的攻击是否奏效。从这一点开始,我们将看看可能遇到的目标,然后进行实验,看看我们能发现什么。范围的基础和核心已经建立,现在是时候添加目标了。我们将遇到的第一个保护,也是目标,将是某种设备;因此,这将是我们下一章的起点。