1.1 组织一次渗透测试
在开始复杂的Metasploit攻击之前,先来了解一下渗透测试的各个阶段,看看一个专业的渗透测试是如何组织的。
1.1.1 前期交互阶段
作为渗透测试的第一个步骤,前期交互阶段将确定客户(可能是一个公司、机构或者网络)的渗透测试的关键细节。这一切都是在与客户进行商讨之后决定的。这个阶段是连接客户与渗透测试工程师的桥梁。在这个阶段,渗透测试工程师要与客户进行充分的交流,以便客户对即将开展的渗透测试会对他的网络或者服务器产生的影响有足够的了解。
因此,渗透测试工程师要以客户指导者的身份来进行这一阶段的工作。这一阶段还将确定渗透测试的范围、目标以及进行分析时的特殊需求,例如特殊的权限、关键系统的访问许可、网络或系统凭证等。商讨的范围还将包括渗透测试预期对测试目标所产生的积极效果。在本阶段,需要商讨的关键点如下所示。
❏ 渗透测试的范围:这一部分需要确定渗透测试的范围并预估整个项目的工作量。同时要确定哪些目标在渗透测试范围内,哪些是不允许进行渗透测试的。测试者要确认渗透区域内涉及的IP地址范围和域名范围,以及采用的测试类型(黑盒测试或白盒测试)。比如,当进行白盒测试时,会给予测试者哪些权限,是否可以对目标管理人员开展问卷调查,在什么时间段可以开展渗透测试,是否能对目标环境进行网络流量压力测试,以及商定本次渗透测试的费用以及支付条款。关于渗透范围的常规文档应该包含了如下问题的答案。
■ 目标组织最大的安全问题是什么?
■ 应该对哪些主机、网络地址范围或者应用程序进行测试?
■ 应该将哪些主机、网络地址范围或者应用程序排除在测试范围之外?
■ 在测试范围内是否存在第三方系统或者网络?它们拥有了哪些系统(在渗透前是否需要获得目标组织的书面许可)?
■ 渗透测试是在现场实地环境中进行还是在虚拟测试环境中进行?
■ 渗透测试是否包括以下测试技术:使用ping对网络范围进行扫描、对目标主机进行端口扫描、对目标进行漏洞扫描、对目标进行渗透测试、应用程序级的操作、客户端Java/ActiveX逆向功能、物理渗透尝试、社会工程学?
■ 渗透测试是否包括内部网络测试?如果包括的话,如何获取权限?
■ 客户端/终端用户系统是否包含在测试范围内?如果包含的话,将会涉及多少客户?
■ 是否允许使用社会工程学手段?如果允许的话,如何使用?
■ 是否允许使用拒绝服务攻击?
■ 是否可以使用具有破坏性的检查手段和渗透模块?
❏ 渗透测试的目标:这一部分要商定本次渗透测试预期达到的主要和次要效果。有关渗透目标的常见问题列举如下。
■ 这次渗透测试的商业需求是什么?
■ 这次测试是出于监督审核的目的还是仅仅为了遵循标准程序?
■ 目标是什么?
- 列出各种漏洞
- 证明各种漏洞的存在
- 测试各种事件响应
- 对网络、系统或者应用程序漏洞的渗透模块开发
- 以上全部
❏ 渗透测试用到的术语和定义:这一部分要向客户介绍整个测试过程中出现的专业术语和定义,以便客户能够更好地理解整个渗透测试工作。
❏ 渗透测试的规则:这一部分要商定完成渗透测试的工期,具体工作展开的进度表,渗透攻击的授权许可,以及定期召开会议以跟进渗透测试进程中出现的各种情况。有关规则的常见问题列举如下。
■ 希望在什么时候执行这些测试?
- 在工作时间
- 下班之后
- 在周末
- 在系统维护期间
■ 这个测试是在生产环境下进行的吗?
■ 如果生产环境不能受到影响,是否存在类似的环境(开发或者测试系统)可以用来进行渗透测试?
■ 谁是技术要点的联系人?
如果想获得关于前期交互的更多信息,请访问网址http://www.pentest-standard.org/index.php/Reporting。
1.1.2 信息收集/侦查阶段
在信息收集阶段,你需要尽可能采用各种方式来收集目标网络的所有信息。这个目标网络可能是互联网的一个网站,或者是一个社会性的组织,甚至可能是一个财力雄厚的老牌商业公司。在这个阶段,最重要的是要通过各种社交媒体网络来收集相关信息,以及使用Google Hacking技术(一种使用特殊的查询方法通过Google搜索引擎收集敏感信息的工具)去寻找目标的相关信息。另外,对目标使用主动扫描和被动扫描技术进行踩点(footprinting)也是一种可行的办法。
信息收集是整个渗透测试过程中最为重要的阶段之一。与尝试所有可行的渗透测试方法相比,对目标有适当的了解可以让测试者选择合适和准确的渗透测试攻击方式。这样做将会大大缩短整个渗透测试耗费的时间。通常这个阶段会占到整个渗透测试所需时间的40%~60%。最终能否成功渗透进入目标网络很大程度上取决于测试者在这个阶段的工作成果。
渗透测试工程师必须通过对目标网络进行各种扫描以获得足够的信息。扫描目标计算机上运行的服务、开放的端口,以及验证这些端口上运行着的全部服务,然后判断这些服务中哪些是可以被攻击的,并且决定如何利用它们作为入侵目标的通道。
在这个阶段还要明确目标网络当前部署的安全控制措施以及如何才能破坏这些措施。
接下来用一个示例来讨论这一点。设想这里有一个针对Web服务器的黑盒测试,客户希望进行网络流量压力测试。
我们将对服务器进行网络流量压力测试以判断目标的抗流量压力水平。简言之,就是服务器对拒绝服务(Denial of Service,DoS)攻击的应对能力。DoS攻击或网络流量压力测试指的是向目标服务器发送数量极为巨大的网络请求或数据,其目的是检测目标服务器在面对此类情形时,是能够继续正常工作还是因资源耗尽而拒绝服务。为了实现这个目标,我们启动网络压力测试工具,并对目标网站发起一次攻击。然而,在攻击发起之后的几秒,服务器端就不再响应我们的客户端请求,从Web客户端也无法打开目标服务器的Web页面。此外,浏览器上还会显示目标Web页面已经不在线的提示。这是怎么回事呢?是我们已经成功搞掉了目标服务器吗?可惜的是,并非如此。事实上,这表明目标服务器存在保护机制。由于目标服务器的管理人员事先设置的保护机制发现了恶意攻击的企图,从而禁止了从我们的IP地址发起的后续访问请求。在发起攻击前必须准确地收集目标信息以及验证目标提供的各种网络服务。
因此,利用多个不同的IP地址对目标Web服务器进行测试是更好的选择。在测试时使用两到三个不同的虚拟专用服务器是一种值得推荐的做法。另外,我建议在使用攻击模块对真实目标进行渗透测试前,在虚拟环境下对所有的攻击模块进行模拟测试。一个正确的、关于攻击的模拟验证是必需的。如果没有进行模拟测试就开展了渗透测试,那么很有可能攻击模块会直接导致目标服务崩溃,而这并不是我们所期望见到的。网络压力测试通常应该在业务末期或者维护期进行。此外,将用于测试客户端的IP列在白名单中也是十分重要的。
现在来看第二个示例—— 一次对Windows 2012服务器的黑盒测试。在对目标服务器进行扫描的过程中,我们发现其80端口和8080端口都是开放的。在80端口上运行着最新版的互联网信息服务(Internet Information Services,IIS),在8080端口上运行着存在漏洞的Rejetto HFS服务器,而Rejetto HFS服务器容易受到远程代码执行(Remote Code Execution,RCE)漏洞的攻击。
然而,当我们试图利用这个有漏洞的HFS进行渗透的时候,却发现渗透失败了。这是一种很常见的情景,因为来自外部的恶意流量可能被防火墙拦截了。
若遇到这种情况,可以简单地改变入侵的方式,让目标服务器主动建立到我们的连接,而不是由我们去连接目标服务器。这种方法更容易成功,因为防火墙通常会被配置为检测入站流量而不是出站流量。
作为一个过程,它可以分解成以下步骤。
❏ 目标选择:选择攻击的目标,确定攻击达到的效果以及整个攻击过程花费的时间。
❏ 隐私收集:包括现场信息采集,检查使用的设备信息,甚至从丢弃的废品中收集信息。这个阶段是白盒测试的一部分。
❏ 踩点工作:包含针对目标上部署的技术和软件的主动和被动扫描,例如网络端口扫描、banner获取等。
❏ 验证目标的安全机制:包含防火墙、网络流量过滤系统、网络和主机的保护措施的确认工作等。
如果想获得关于信息收集的更多信息,请访问网址http://www.pentest-standard.org/index.php/Intelligence_Gathering。
1.1.3 威胁建模阶段
为了保证渗透测试能够正确进行,必须进行威胁建模。在这个阶段,主要的工作是模拟出对目标准确的威胁以及这些威胁的作用,并根据这些威胁可能对目标产生的影响对其进行分类。根据之前在信息收集阶段做出的分析,在这个阶段我们可以确定最佳的攻击方式。威胁建模方法适用于商业资产分析、过程分析、威胁分析以及威胁能力分析。这一阶段将解决以下问题。
❏ 如何攻击指定的网络?
❏ 需要获得的重要信息是什么?
❏ 在攻击时采取什么方法最为合适?
❏ 对目标来说最大的安全威胁是什么?
威胁建模将有助于渗透测试工程师完成以下工作。
❏ 收集有关高等级威胁的相关文档。
❏ 根据基本的分类方法对组织的资源进行标识。
❏ 对威胁进行识别和分类。
❏ 将组织的资源映射成模型。
威胁建模将有助于明确哪些资源最容易受到威胁,以及这些威胁各自是什么。
假定现在有一个针对公司网站的黑盒测试。目标公司的客户信息是公司的重要资产。然而,在同一后台程序的另一个数据库中保存了客户的交易记录。在这种情形下,攻击者就可以利用SQL注入漏洞获取客户的交易记录,而交易记录属于其他资产。因此在这个阶段,应该建立一个针对重要资产和其他资产的SQL注入漏洞威胁模型。
漏洞扫描工具(例如Nexpose和Metasploit Pro版)可以帮助我们以自动化的方式快速清晰地完成威胁建模。在开展大规模的测试时,这个优势更为明显。
如果想获取关于威胁建模的更多信息,请访问网址http://www.pentest-standard.org/index.php/Threat_Modeling。
1.1.4 漏洞分析阶段
漏洞分析是在一个系统或者应用程序中发现漏洞的过程。这些漏洞多种多样,涵盖了很多方面,从服务器的配置到Web程序服务,从应用程序到数据库服务,从基于VOIP的服务器到基于SCADA的服务都可能存在漏洞。这个阶段包含了三个不同的机制,那就是测试、验证和研究。测试包括主动测试和被动测试。验证包括去除误报和通过手动验证确认漏洞的存在。研究指的是发现并触发漏洞以确认它的存在。
有关威胁建模阶段的各个过程的更多信息,请访问http://www.pentest-standard.org/index.php/vulnerability_analysis。
1.1.5 渗透攻击阶段和后渗透攻击阶段
渗透攻击阶段可以利用之前漏洞分析阶段的成果。这个阶段一般被认为是真正的攻击阶段。在这个阶段,渗透测试者可以针对目标系统的漏洞使用对应的入侵模块获得控制权限。本书主要介绍的就是这个阶段。
后渗透攻击阶段发生在渗透攻击阶段之后,这个阶段包含了当成功渗透攻击到对方计算机以后的很多任务,比如提升权限、上传和下载文件、跳板攻击,等等。
有关渗透攻击阶段各个过程的详细信息,请访问http://www.pentest-standard.org/index.php/Exploitation。
有关后渗透阶段的更多信息,请访问http://www.pentest-standard.org/index.php/Post_Exploitation。
1.1.6 报告阶段
在进行渗透测试时,创建整个渗透测试的正式报告是在最后一个阶段进行的。渗透测试报告的重要组成部分包括:确定目标最为重要的威胁,将渗透得到的数据生成图表,对目标系统的改进建议,以及这些问题的修复方案。在本书的后半部分,将会用一节来详细描述如何编写渗透测试报告。
有关报告阶段各个过程的详细信息,请访问http://www.pentest-standard.org/index.php/reporting。