保护网络设施:使用 NMAP 和 Nessus7 探索实用网络安全(二)
原文:
annas-archive.org/md5/7D3761650F2D50B30F8F36CD4CF5CB9C译者:飞龙
第七章:理解 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 | 文件 2 |
| 用户 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/G…
-
安全代码审查指南:www.owasp.org/index.php/C…
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.htmlURL,如下面的屏幕截图所示:
输入凭据后,您可以看到初始仪表板,如下面的屏幕截图所示:
现在是时候开始第一次漏洞扫描了。为了启动漏洞扫描,打开任务向导,如下面的屏幕截图所示,并输入要扫描的目标的 IP 地址:
一旦在任务向导中输入了目标 IP 地址,扫描就会触发,并且可以跟踪进度,如下面的屏幕截图所示:
在扫描进行中,您可以查看仪表板,以获取扫描期间发现的漏洞的摘要,如下面的屏幕截图所示:
扫描完成后,您可以检查结果,查看所有详细的发现以及严重级别。您可以单击每个漏洞以获取更多详细信息,如下面的屏幕截图所示:
摘要
在本章中,我们学习了枚举的重要性,以及在目标系统上执行有效枚举的各种工具和技术。我们还概述了 OpenVAS 漏洞管理框架,该框架可用于执行有针对性的漏洞评估。