高级基础设施渗透测试(一)
原文:
annas-archive.org/md5/45BAA65013025C678E3A42A0CD4FCB67译者:飞龙
前言
高级基础设施渗透测试为您提供了进行渗透测试和评估企业安全状况所需的核心技能和技术。本书包含了利用现代信息技术基础设施的关键技术,提供了实际的经验。每一章都将带您了解攻击向量和系统防御,从基础知识到最新的前沿技术和实用工具。
本书的受众
如果您是系统管理员、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并注册,以便文件直接发送到您的邮箱。
您可以按照以下步骤下载代码文件:
-
在www.packtpub.com登录或注册。
-
选择“支持”选项卡。
-
点击“代码下载和勘误”。
-
在搜索框中输入书名,然后按照屏幕上的说明进行操作。
文件下载后,请确保使用最新版本的解压缩或提取文件夹:
-
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:
-
从官方网站下载社区版,
www.rapid7.com/products/nexpose/ -
为了演示,我们安装了 Windows 64 版的 Nexpose。您也可以使用 Linux 版:
- 填写所需信息并进行下一步:
开始 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 Shell(Bash,最常见的 shell)、C shell(csh)、Korn shell(ksh)等。要找到您的环境可用的 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 时,文件将以与用户相同的权限执行。
-
设置组 ID(SGID):与 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 监狱所需的步骤:
- 首先,您需要创建一个新用户并命名它; 例如,
prisoner:
-
将用户添加到 root 组
gpasswd -a prisoner root -
您可以通过验证
/etc/group来检查是否已添加新用户:
-
现在创建一个名为
chroot的新目录,并进入它 -
创建这些文件夹:
bin,dev,etc,home,home/prisoner,lib,var,usr和usr/bin -
这里,至少需要
bin和lib目录:
- 接下来,使用
cp命令复制bash实用程序,cp /bin/bash /chroot/bin,包括所需的共享库:
- 最后,使用
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 库pybluez和pwntools,如下截图所示:
- Linux 蓝牙堆栈(BlueZ)信息泄漏漏洞的案例研究– CVE-2017-1000250:这个漏洞是一个用户空间和内核空间的组合,用于泄露信息,包括蓝牙通信中的加密密钥。内核用户漏洞是最低蓝牙堆栈 L2CAP 中的一个弱点。这对许多蓝牙设备构成了巨大威胁,包括运行 Linux BlueZ 的设备:移动设备和物联网设备。要在安卓手机上测试漏洞,可以从 GitHub 存储库
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.py或python 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
安全增强型 Linux(SELinux)是由美国国家安全局(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 Protocol(ICMP)类似于 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 需要以下五个步骤才能进行:
-
需要从认证服务器 KDC 请求认证
-
KDC 发送一个使用发送者的秘密密钥加密的会话,以及一个使用票据授予服务加密的票据授予
-
然后接收者解密会话并从票据授予服务请求权限
-
如果会话有效,票据授予服务将发送一个客户端/服务器会话以授予对资源的访问权限,以及一个使用资源密钥加密的服务票据
-
资源验证会话并授予客户访问权限
Kerberos 提供了一个很好的认证解决方案,但它将密钥以明文形式存储,这对组织构成了巨大的威胁。事实上,如果攻击者能够访问 KDC,他们将会破坏所有密钥。以下图表显示了 Kerberos 操作的不同步骤:
轻量级目录访问协议
Active Directory 使用轻量级目录访问协议(LDAP)作为访问协议,依赖于 TCP/IP 协议栈。LDAP 支持 Kerberos 认证。
该协议使用倒置树层次结构,因此每个条目都有一个定义的位置。这种结构称为目录信息树(DIT)。Distinguished Name(DN)表示条目的完整路径。
以下图表表示用户(通用名称(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 -
Forests:
Get-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>:3170(3170是端口号)。
如果要使用 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:列出和检查证书,如下所示:
-
SEKURLSA::Ekeys:检查 Kerberos 加密密钥(adsecurity.org/?page_id=1821#SEKURLSAEkeys) -
PRIVILEGE::Debug:检查调试权限 -
TOKEN::List:检查所有系统令牌,如下所示:
TOKEN::Elevate:检查域管理员,如下所示:
TOKEN::Elevate/domainadmin:模拟具有域管理员凭据的令牌:
传递凭据
传递凭据是一种简单易行的技术,可以发现 NTLM 散列密码,而无需使用大量计算资源进行破解。尽管 Windows 不支持通过网络传递散列,但您可以作为渗透测试人员尝试Pass-the-Ticket(PtT)技术,这是获取票证并以非合法方式使用它的过程。此图显示了 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
设置用户 ID(SUID)在执行时和设置组 ID(SGID)在执行时在第二章中已经讨论过,高级 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)服务器。