Pre-Engagement Interaction
渗透测试团队与客户组织进行交互讨论,确定渗透测试的范围、目标、限制条件以及服务合同细节。该阶段通常涉及收集客户需求、准备测试计划、定义测试范围与边界、定义业务目标、项目管理与规划等活动。
Information Gathering
渗透测试团队可以利用各种信息来源与搜集技术方法,尝试获取更多关于目标组织网络拓扑、系统配置与安全防御措施的信息。
可以使用的情报搜集方法包括 公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。对目标系统的情报探查能力是渗透测试者一项非常重要的技能,情报搜集是否充分在很大程度上决定了渗透测试的成败。
典型的策略应该同时包含主动和被动的信息收集:
社会工程学是攻击“人性”弱点的过程,而这种弱点是每个公司天然固有的。当使用社会工程学的时候,攻击者的目标是找到一个员工,井从他口中撬出本应是保密的信息。
假设你正在针对某家公司进行掺透测试。前期侦察阶段你已经发现这家公司某个销售人员的电子邮箱。你很清楚,销售人员非常有可能对产品问询邮件进行回复。所以用匿名邮箱对他发送邮件,假装对某个产品很感兴趣。实际上,你对该产品并不关心。发这封邮件的真正目的是希望能够得到该销售人员的回复,这样你就可以分析回复邮件的邮件头。该过程可以使你收集到这家公司内部电子邮件服务器的相关信息。
接下来我们把这个社会工程学案例再往前推一步。假设这个销售人员的名字叫Ben Owned。(这个名字是根据对公司网站的侦察结果以及他回复邮件里的落款了解到的。假设在这个案例中,你发出产品问询邮件之后,结果收到一封自动回复的邮件,告诉你Ben Owned “目前正在海外旅游,不在公司”以及“接下来这两周只能通过有限的途径查收邮件”。
最经典的社会工程学的做法是冒充Ben Owned 的身份给目标公司的网络支持人员打电话,要求协助重置密码,因为你人在海外,无法以Web方式登录邮箱。运气好的话,技术人员会相信你的话,帮你重置密码。如果他们使用相同的密码,你就不但能够登录Ben Owned 的电子邮箱,而且能通过VPN之类的网络资源进行远程访问,或通过FTP上传销售数据和客户订单。
社会工程学跟一般的侦察工作一样,都需要花费时间进行钻研。不是所有人都适合当社会工程学攻击者的。想要获得成功,你首先得足够自信、对情况的把握要到位,然后还得灵活多变,随时准备“开溜”。如果是在电话里进行社会工程学攻击,最好是手头备好各种详尽、清楚易辨的信息小抄,以免被问到一些不好回答的细节。
另外一种社会工程学攻击方陆是把优盘或光盘落在目标公司里。优盘需要扔到目标公司内部或附近多个地方,例如停车场、大厅、厕所或员工办公桌等,都是“遗落”的好地方。大部分人出于本性,在捡到优盘或光盘之后,会将其插入电脑或放进光驱,查看里面是什么内容。而这种情况下,优盘和光盘里都预先装载了自执行后门程序,当优盘或光盘放入电脑的时候,就会自动运行。后门程序能够绕过防火墙,并拨号至攻击者的电脑,此时目标暴露无遗,攻击者也因此获得一条进入公司内部的通道。
-------------噫.....人与人之间的信任呢
Threat Modeling
在搜集到充分的情报信息之后,大家聚到一起针对获取的信息进行威胁建模与攻击规划。大部分情况下,就算是小规模的侦察工作也能收获海量数据。信息收集过程结束之后,对目标应该就有了十分清楚的认识,包括公司组织构架,甚至内部部署的技术。
Vulnerability Analysis
在确定出最可行的攻击通道之后,接下来需要考虑该如何取得目标系统的访问控制权,即漏洞分析阶段。
在该阶段,渗透测试者需要综合分析前几个阶段获取并汇总的情报信息,特别是安全漏洞扫描结果、服务查点信息等,通过搜索可获取的渗透代码资源,找出可以实施渗透攻击的攻击点,并在实验环境中进行验证。在该阶段,高水平的渗透测试团队还会针对攻击通道上的一些关键系统与服务进行安全漏洞探测与挖掘,期望找出可被利用的未知安全漏洞,并开发出渗透代码,从而打开攻击通道上的关键路径。
Exploitation
渗透攻击是渗透测试过程中最具有魅力的环节。在此环节中,渗透测试团队需要利用他们所找出的目标系统安全漏洞,来真正入侵系统当中,获得访问控制权。
渗透攻击可以利用公开渠道可获取的渗透代码,但一般在实际应用场景中,渗透测试者还需要充分地考虑目标系统特性来定制渗透攻击,并需要挫败目标网络与系统中实施的安全防御措施,才能成功达成渗透目的。在黑盒测试中,渗透测试者还需要考虑对目标系统检测机制的逃逸,从而避免造成目标组织安全响应团队的警觉和发现。
Post Exploitation
后渗透攻击是整个渗透测试过程中最能够体现渗透测试团队创造力与技术能力的环节。在这个环节中,需要渗透测试团队根据目标组织的业务经营模式、保护资产形式与安全防御计划的不同特点,自主设计出攻击目标,识别关键基础设施,并寻找客户组织最具价值和尝试安全保护的信息和资产,最终达成能够对客户组织造成最重要业务影响的攻击途径
与渗透攻击阶段的区别在于,后渗透攻击更加重视在渗透进去目标之后的进一步的攻击行为。后渗透攻击主要支持在渗透攻击取得目标系统远程控制权之后,在受控系统中进行各式各样的后渗透攻击动作,比如获取敏感信息、进一步拓展、实施跳板攻击等
Reporting
渗透测试过程最终向客户组织提交,取得认可并成功获得合同付款的就是一份渗透测试报告。这份报告凝聚了之前所有阶段之中渗透测试团队所获取的关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程,以及造成业务影响后果的攻击途径,同时还要站在防御者的角度上,帮助他们分析安全防御体系中的薄弱环节、存在的问题,以及修补与升级技术方案。
Metasploit
是一个开源的渗透测试框架软件,也是一个逐步发展成熟的漏洞研究与渗透代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境。Metasploit
在发展过程中逐渐增加对渗透测试全过程的支持,包括情报搜集、威胁建模、漏洞分析、渗透攻击、后渗透攻击与报告生成。
Metasploit
一方面通过内建的一系列扫描探测与查点辅助模块来获取远程服务信息,另一方面通过插件机制集成调用Nmap
、Nessus
、OpenVAS
等业界著名的开源网络扫描工具,从而具备全面的信息搜集能力,为渗透攻击实施提供必不可少的精确情报。
在搜集信息之后,Metasploit
支持一系列数据库命令操作直接将这些信息汇总至PostgreSQL
、MySQL
或SQLite
数据库中,并为用户提供易用的数据库查询命令,可以帮助渗透测试者对目标系统搜集到的情报进行威胁建模,从中找出最可行的攻击路径。
除了信息搜集环节能够直接扫描出一些已公布的安全漏洞之外,Metasploit
中还提供了大量的协议Fuzz测试器与Web应用漏洞探测分析模块,支持具有一定水平能力的渗透测试者在实际过程中尝试挖掘出“0Day”漏洞,并对漏洞机理与利用方法进行深入分析,而这将为渗透攻击目标带来更大的杀伤力,并提升渗透测试流程的技术含金量。
在成功实施渗透攻击并获得目标系统的远程控制权之后,Metasploit
框架中另一个极具威名的工具Meterpreter
在后渗透攻击阶段提供了强大功能。
Meterpreter
可以看做一个支持多操作系统平台,可以仅仅驻留于内存中并具备免杀能力的高级后门工具,Meterpreter
中实现了特权提升、信息攫取、系统监控、跳板攻击与内网拓展等多样化的功能特性,此外还支持一种灵活可扩展的方式来加载额外功能的后渗透攻击模块,足以支持渗透测试者在目标网络中取得立足点之后进行进一步的拓展攻击,并取得具有业务影响力的渗透效果。
Metasploit
框架获得的渗透测试结果可以输入至内置数据库中,因此这些结果可以通过数据库查询来获取,并辅助渗透测试报告的写作。
商业版本的Metasploit Pro
具备了更加强大的报告自动生成功能,可以输出HTML
、XML
、Word
和PDF
格式的报告,并支持定制渗透测试报告模板,以及支持遵循PCI DSS(银行支付行业数据安全标准)与FIMSA(美国联邦信息安全管理法案)等标准的合规性报告输出。
msf> show exploits
这个命令会显示 Metasploit
框架中所有可用的渗透攻击模块。在MSF终端中,你可以针对渗透测试中发现的安全漏洞来实施相应的渗透攻击。Metasploit团队总是不断地开发出新的渗透攻击模块,因此这个列表会越来越长。
msf> show auxiliary
这个命令会显示所有的辅助模块以及它们的用途。在Metasploit
中,辅助模块的用途非常广泛,它们可以是扫描器、拒绝服务攻击工具、Fuzz测试器,以及其他类型的工具。
msf> show options
参数options
是保证Measploit
框架中各个模块正确运行所需的各种设置。
当你选择了一个模块,并输入show options
后,会列出这个模块所需的各种参数。如果当前你没有选择任何模块,那么输入这个命令会显示所有的全局参数,举例来说,你可以修改全局参数中的LogLevel
,使渗透攻击时记录系统日志更为详细。你还可以输入back
命令,以返回到Metasploit
的上一个状态。
当你想要查找某个特定的渗透攻击、辅助或攻击载荷模块时,搜索search
命令非常有用。例如,如果你想发起一次针对SQL数据库的攻击,输入search mssql
命令可以搜索出与SQL有关的模块。类似地,可以使用search ms08_067
命令寻找与MS08_067
漏洞相关的模块。
找到攻击模块后,可以使用use
命令加载模块。此时MSF终端的提示符变成了已选择模块的命令提示符。
这时,可输入show options
显示该模块所需的参数。
msf> show payloads
攻击载荷是针对特定平台的一段攻击代码,它将通过网络传送到攻击目标进行执行。show payloads
命令,Metasploit
会将与当前模块的攻击载荷显示出来。
msf> show targets
Metasploit
的渗透攻击模块通常可以列出受到漏洞影响目标系统的类型。举例来说,由于针对MS08-067
漏洞的攻击依赖于硬编码的地址,所以这个攻击仅针对特定的操作系统版本,且只适用于特定的补丁级别、语言版本以及安全机制实现。
info
当你觉得show
和 search
命令所提供的信息过于简短,可以用info
命令加上模块的名字来显示此模块的详细信息、参数说明以及所有可用的目标操作系统(如果已选择了某个模块,直接在该模块的提示符下输入info即可。)
set
和unset
Metasploit
模块中的所有参数只有两个状态:已设置(set
)或未设置(unset
)。有些参数会被标记为必填项(required
),这样的参数必须经过手工设置并处于启动状态。使用set
命令可以针对某个参数进行设置(同时启动该参数);使用unset
命令可以禁用相关参数。