使用Metasploit发现漏洞
在安全领域,有一些工具被用于执行所谓的漏洞测试,每个工具提供不同的特性,各具优势。常用的工具有 Nessus、SAINT、Nmap 和 Metasploit,本文主要介绍 Metasploit(参见 参考资料)。
本文简单地介绍了 Metasploit 的作用和它在企业中的用途。使用 Metasploit 进行漏洞扫描超出了本文的范围,您可以阅读多种教程和书籍获得帮助(参见 参考资料)。
漏洞扫描
那么,漏洞扫描的目的是什么?Metasploit 如何进行漏洞扫描?漏洞扫描器类似于其他类型的扫描器 -- 例如,端口扫描器有助于保障端口上的网络和系统的安全。这种扫描的目的是探测弱点并在某些 “坏家伙” 发动攻击前用扫描结果解决问题。
扫描过程中探测到的常见错误包括定位缓存溢出、未用补丁修补的软件、Structured Query Language (SQL) 问题等。扫描器的探测能力取决于扫描器本身:某些扫描器更加主动,能够探测缺失的补丁或配置错误,而另一些扫描器只是为您提供正确的方向。
Metasploit 比常规漏洞扫描器更进一步:它支持您研究自己的攻击和交付机制。其理念是:尽管其他扫描方法依赖已知的问题,但 Metasploit 允许研究自己的问题,从而提高扫描和研究的灵活性。
什么是漏洞扫描器?
简言之,漏洞扫描器 是专门设计用于查找和暴露应用程序和操作系统中的弱点的软件。每个扫描器可能都有自己的扫描和探测方法,但它们的结果都大同小异:报告所发现的问题或输出信息。
漏洞扫描过程可以划分为一系列步骤,每个步骤都是查找应用程序或操作系统中的弱点所需的关键任务:
- 向扫描软件提供活动系统的主机名和 IP。这样,扫描器可以发现开放端口、响应的服务和当前可能正在系统上运行的任意应用程序。
- 扫描器生成一个报告,告知您所发现的问题。如果扫描器在这个步骤就结束,它提供的信息也许不太具有操作性并需要更多研究。使用其它扫描器,这个步骤可能只显示端口、服务和正在运行的应用程序,以便软件继续进行下一步。
- 扫描软件针对第 2 步中发现的端口和服务运行探测,目标是显示关于补丁级别、软件修改或任意潜在缺陷的信息。现代漏洞扫描器包含一些插件,它们设计用于在新的漏洞出现时发现它们。因此,也许今天运行扫描器没有发现问题,那么明天执行更新后可能就会发现问题。
- 这个扫描器可能试图研究漏洞(如果支持该特性),但这取决于扫描器的先进程度。事实上,某些现代扫描器可以在这个步骤配置它们的攻击程度,以免扫描器的攻击性太强,以至于在扫描过程中导致系统崩溃(它们具有这种能力,而且这种情况也发生过)。
什么是 Metasploit?
Metasploit Project 是已经催生了大量工具的一系列项目的总和,这些工具用途广泛,几乎可以完成从击败法规约束到躲避对其最著名软件 —— Metasploit Framework —— 的探测的任何任务。Metasploit 的设计初衷并不是作为一个黑客工具,尽管它听起来就像是一个黑客工具。实际上,这个工具的主要目标是研究安全性。但是,就像这种类型的其他工具一样,它的用途取决于使用者。记住,“权力越大,责任越大”,因此,请小心使用。
Metasploit 首创于 2003 年,当时它基于 Perl 脚本语言。此后,又用 Ruby 编程语言从头编写。在过去约两年时间里,Metasploit 成为安全研究社区最受欢迎的工具之一,独自负责创建一些针对软件和系统的复杂攻击。如果用于正当目的,这个工具能够提供揭示软件安全漏洞的强大方法并协助修补漏洞。
当前,Metasploit 在大多数基于 Nix 的系统上运行,也用于一些常用操作系统。本文撰写之时,Metasploit 的稳定版本是 Version 3.1。
Metasploit 如何工作?
Metasploit 执行前面在介绍漏洞扫描器时提到过的几个步骤,目标是发现漏洞。从根本上说,这个扫描器:
- 选择并配置目标估计。这种代码针对一个系统,其意图是利用软件中的缺陷。
注意:攻击池是特定于操作系统的。这个攻击池根据系统版本不同而有所差异,而且在不断发展。当前,Metasploit 包含 400 个攻击,针对大多数现代操作系统。
- 验证针对系统的攻击,目的是判断系统是否能够经受攻击。
- 选择并配置一个将要使用的有效负载。这个有效负载表示在扫描器发现系统的入侵点之后将在系统上运行的代码。
- 选择并配置将要使用的编码和交付技术。
这个步骤的目标是以一种特殊方式格式化有效负载,以便它能躲避壁垒森严的入侵探测系统(IDSs)。
- 执行攻击。
Metasploit 的实际运行
这个部分简要介绍 Metasploit Framework 对于试图发现漏洞的用户有什么用。我并不会详细介绍每个攻击如何运行或者编写 shell 代码。相反,我将对这个过程进行宽泛的概述,使您能够了解这个过程涉及的内容,确定这个软件是否适合您的测试需要。
对于那些从未见过或使用过 Metasploit 的用户来说,他们将会惊奇地发现,Metasploit Framework 非常简单易用。事实上,您可能会发现这个产品太容易使用了,以至于您可能会更加关注您的补丁管理流程并随时关注最新的补丁和漏洞,唯恐某人会让您使用这个工具。
如果您这样想的话,这个工具就相当于真实世界中的进攻武器。这个工具可以免费下载和安装,附带了大量预先打包的攻击,而这些攻击已经确认会攻击特定的平台和应用程序。这些攻击甚至提供它们自己的匹配工作负载,以便攻击过程更加容易。每个预先配置好的攻击都已经设置好在攻击被执行时该如何做。
注意:即使 Metasploit 提供了几个预先配置的攻击,重要的是要知道,这个软件的初衷是作为一个攻击开发环境。您可以使用这个软件提供的工具来测试系统是否存在漏洞,以及向系统导入特定的工作负载后系统将如何反应。
运行一个攻击
首先,让我们看看运行 Metasploit 的过程。这个过程应该适用于大多数攻击和工作负载。在这个场景中,我将简要介绍如何从一个系统向另一个系统发起攻击。
注意:以下步骤已经进行过特殊处理,以防有人将它们用于不当用途。
您可以使用任何版本的 Linux® 或其他操作系统从命令行或 shell 执行这些步骤。您必须了解针对您的环境的具体规定,但这个过程主要用于理解正在发生的事情。
要使用 Metasploit 运行一个攻击,执行以下步骤:
- 下载 WHAX 3.0 for Linux(参见 参考资料)。
- 从命令行输入以下命令启动 Metasploit 控制台:
# " ./msfconsole "
- 选择一个针对目标系统的攻击,这涉及三个命令:
-
use
:指定一个攻击。 -
show
:在上下文中显示信息。 -
info
:提供关于一个特定模块的细节。<!--[if !supportLists]-->use <!--[if !supportLists]-->show <!--[if !supportLists]--><!--[endif]-->info
运行攻击的命令的格式是:
“use <exploit name>”
-
- 输入以下命令来启动攻击:
use iis50_webdav_ntdll"
配置攻击
选择攻击后,需要配置攻击的运行方式。具体来说,需要指定运行攻击所针对的目标 IP 地址和端口。set
命令用于指定配置选项,如果您包含 show advanced
命令,将显示可以配置的所有选项。
使用以下命令设置选项:
set RHOST <your test machine's IP address> |
然后按下 Enter 键,接下来在下面的行中输入以下代码:
set RPORT 80 |
要检查攻击是否生效,输入:
check |
得到的结果取决于目标系统。
如果检查失败,您可能需要配置目标系统的其他选项 -- 例如,操作系统的细节。
然后输入:
show targets |
根据攻击的不同,您可能会看到关于攻击的其他信息,比如支持它的服务。
完美的攻击
将 Metasploit 工作负载 -- 也称为 shell 代码 -- 直接插入正在溢出的缓存中。在大多数情况下,工作负载是非常特定的,选择哪个工作负载取决于您的目标操作系统和架构。
结束语
本文介绍了如何使用 Metasploit 来提供对系统漏洞的概览。通过一些工作和研究,您可以研发自己的漏洞攻击。漏洞攻击开发出来后,您可以确定您的应用程序和系统是否能够经受缓存溢出等攻击和 SQL 注入等漏洞的威胁