原文:
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 而变得更加强大。