渗透测试(Penetration Test)是指安全渗透测试者尽可能完整地以黑客的视角,模拟入侵识别目标网络/系统/主机/应用的安全性作深入的探测,发现基础架构中不安全因素的评估方法,能够验证目标系统的技术安全性,快速发现当前最亟待解决的关键问题。通过修复漏洞,以领先攻击者的方式,帮助企业实现业务安全。
经用户授权所进行的渗透测试与黑客所进行的渗透攻击测试是有一定的区别。授权所进行的渗透测试一般不会对客户的信息系统造成任何危害和损失,其目的只在于从信息系统的外部发现信息系统对外所呈现出的安全脆弱性并验证这些安全脆弱性的真实存在性,到此为止就不再进行进一步的渗透(即不进行后门植入等后续手段),并将这些所存在的脆弱性通告客户方,这是与黑客所进行的渗透测试的区别所在。
此次渗透测试安全服务项目目的是让用户清晰了解目前主机与应用系统的脆弱性、可能造成的影响,以便采取必要的防范措施。不过渗透测试安全服务项目并不能保证发现目标系统中的“所有”弱点,通过渗透测试安全服务项目只能是减少风险,但是不一定能绝对避免风险,因此渗透测试安全服务项目不能让系统达到绝对得安全,经过安全评估服务后的系统被攻破是可能的,也是正常的。
因此,“渗透测试安全服务项目”只是检测信息系统安全的一种方式,要保障系统的安全需要采取综合性的安全保障措施,才能使信息系统的安全达到较高的程度。
从渗透测试安全服务项目中,客户能够得到的收益至少有:
1)渗透测试安全服务项目帮助客户发现其主机与应用系统的安全最短板,协助客户有效地了解目前降低风险的初始任务;
2)渗透测试安全服务报告有助于客户管理者以案例形式说明目前互联网系统的安全现状,从而增强客户信息安全的认知程度;
3)信息安全是一个整体工程,渗透测试安全服务项目还有助于客户的所有成员意识到自己的岗位同样可能提高或降低风险,有助于内部安全的提升。
由于采用可控制的、非破坏性质的渗透测试,因此不会对被评估的系统造成严重的影响。在渗透测试结束后,系统将保持正常运行状态。
由于渗透测试是一项综合素质要求比较高的测试活动,因此对渗透测试人员也有着较高的要求。
首先是职业道德素质,由于渗透测试可能会涉及到被测试目标组织的机密信息,因此对人员的保密要求和职业道德素质就有着很高的要求;
其次渗透测试也是一项技术性和技巧性很高的测试活动,因此对测试人员的安全测试能力和测试经验也有很高的要求。
我们的人员的职业道德素质和保密意识有着良好的保证,同时也具备了很高的渗透测试技术能力和丰富的渗透测试经验。
依据如下标准实施渗透测试服务:
《GB/T 18336-2001 信息技术安全技术信息技术安全性评估准则》等同于《ISO 15408-1999 Common Criteria for Information Technology Security Evaluation》(CC)。
OSSTMM - Open-Source Security Testing Methodology Manual
ISSAF - Information Systems Security Assessment Framework
OWASP - Open Web Application Security Project
WASC - Web Application Security Consortium
客户书面同意
在渗透测试前,渗透测试方将取得客户的书面授权委托,保证渗透测试的合法性,这是实施渗透测试的必要条件。
渗透目标的确定
在取得授权后,渗透测试方需要就详细的渗透测试范围和测试对象与客户进行商议,并书面达成一致。在进行渗透测试时应严格按照测试范围和测试对象进行,以避免测试范围的“蔓延”而伤及无辜。
渗透测试时间窗的规定
此外客户可根据其对自身系统安全状态的了解情况为渗透测试者规定一个测试时间窗,要求渗透测试者在此时间窗内完成其渗透测试工作。
具体的渗透测试时段,将在渗透测试前进行调研,确定客户互联网系统的业务忙闲时段后再进行确定,以避开业务高峰期,避免对系统性能造成影响。
先验知识的通告
虽然渗透测试是偏重于黑盒的测试,但也并非什么先验知识都不告诉渗透测试人员。客户应考虑好应该给予渗透测试方的关于被测试目标的必要先验知识并书面告知渗透测试者,以便其进行有效的渗透测试,避免测试的盲目性。
客户提供给渗透测试服务商的先验知识在标书中有一定的声明,主要是进行测试所需的互联网IP地址信息。
确定渗透测试的人员
在渗透测试准备阶段应确定好渗透测试人员的名单、渗透测试人员的详细介绍,并征得客户对这些人员可进行渗透测试的书面同意。
风险规避措施的实施
对于重要系统的的渗透测试,在测试前应先做好系统的备份和恢复准备工作以便在发生不可预知的风险后能快速恢复系统的正常运行。
此外如果渗透目标不能接受被渗透攻击出意外的风险,则可选择保守策略,搭建渗透目标的复制品,然后在进行渗透测试。
最后应确定监控方式,准备好监控环境,以便进行渗透测试时进行有效的监控,并进行良好的信息沟通,以尽快控制可能发生的风险,避免风险的扩大。
实施渗透测试
渗透测试方将渗透测试技术一般流程和渗透测试内容实施具体的渗透测试。
渗透测试过程中的监控
按准备阶段选择的监控方式,在准备好的监控环境下对正在实施的渗透测试活动进行监控,同时监控被测试目标的工作状态。
渗透测试过程中的沟通
在渗透测试过程中,一方面渗透测试人员应主动就渗透测试的进展情况、测试活动及测试中出现的异常或非预期情况与客户项目组进行沟通,以便客户项目组及时检查测试目标的工作状态是否正常;其次客户项目组监控人员也应就被测试目标的状态情况及时与渗透测试者进行通知,以便渗透测试者决定渗透测试活动是否能继续进行。
在完成渗透测试后,需要对渗透测试数据进行整理汇总和分析,根据发现的安全漏洞和安全隐患指出被测目标的问题所在,然后提出相应的改进建议,并最终完成渗透测试报告的编写。
使用PING Sweep、DNS Sweep、SNMP Sweep、Tracert等手段对主机存活情况、DNS名、网络链路等进行信息收集。可以对目标的网络情况、拓扑情况、应用情况有一个大致的了解,为更深层次的渗透测试提供资料。
通过对目标地址的TCP/UDP端口扫描,确定其所开放的服务的数量和类型,这是所有渗透测试的基础。通过端口扫描,可以基本确定一个系统的基本信息,结合安全工程师的经验可以确定其可能存在以及被利用的安全弱点,为进行深层次的渗透提供依据。
这是当前出现的频率最高、威胁最严重,同时又是最容易实现的一种渗透方法,一个具有一般网络知识的入侵者就可以在很短的时间内利用现成的工具实现远程溢出攻击。对于在防火墙内的系统存在同样的风险,只要对跨接防火墙内外的一台主机攻击成功,那么通过这台主机对防火墙内的主机进行攻击就易如反掌。
口令猜测也是一种出现概率很高的风险,几乎不需要任何攻击工具,利用一个简单的暴力攻击程序和一个比较完善的字典,就可以猜测口令。对一个系统账号的猜测通常包括两个方面:首先是对用户名的猜测,其次是对密码的猜测。
所谓本地溢出是指在拥有了一个普通用户的账号之后,通过一段特殊的指令代码获得管理员权限的方法。使用本地溢出的前提是首先要获得一个普通用户的密码。也就是说由于导致本地溢出的一个关键条件是设置不当的密码策略。
多年的实践证明,在经过前期的口令猜测阶段获取的普通账号登录系统之后,对系统实施本地溢出攻击,就能获取不进行主动安全防御的系统的控制管理权限。
Web脚本及应用测试专门针对Web及数据库服务器进行。根据最新的技术统计,脚本安全弱点为当前Web系统尤其存在动态内容的Web系统存在的主要比较严重的安全弱点之一。利用脚本相关弱点轻则可以获取系统其他目录的访问权限,重则将有可能取得系统的控制权限。因此对于含有动态页面的Web、数据库等系统,web脚本及应用测试将是必不可少的一个环节。在Web脚本及应用测试中,可能需要检查的部份包括:
检查应用系统架构、防止用户绕过系统直接修改数据库
检查身份认证模块,防止非法用户绕过身份认证
检查数据库接口模块,防止用户获取系统权限
检查文件接口模块,防止用户获取系统文件
检查其他安全威胁
由于渗透测试偏重于黑盒测试,因此可能对被测试目标造成不可预知的风险;此外对于性能比较敏感的测试目标,如一些实时性要求比较高的系统,由于渗透测试的某些手段可能引起网络流量的增加,因此可能会引起被测试目标的服务质量降低。因此需进行如下的风险规避措施:
对网络流量影响严重的测试内容,为减轻渗透测试对网络和主机的影响,测试在会选择在夜间或安排在业务量不大的时段进行测试。
渗透测试的目的是要尽可能地发现测试目标的安全漏洞或安全隐患,因此渗透测试所使用的工具不是一般安全评估中使用的测试工具。它可以是商业性安全测试工具、可以是开源安全测试工具、可以是渗透测试者自己所编写的小工具或脚本程序、也可以是渗透测试机构自己的非公开测试工具。但对于合法的渗透测试,无论使用什么样的渗透测试工具,有一个基本的原则就是使用的渗透测试工具不会给测试目标引入病毒、蠕虫或木马等恶意程序,给目标系统造成不必要的损失或带来潜在的安全隐患。因此在渗透测试工具的选用及使用策略上应进行安全保证。
新潮信息在此次渗透测试中使用的渗透测试工具有购买的商业测试工具、也有部分的开源测试工具(这些开源工具主要用于渗透测试前期的信息收集阶段)。对于所使用的开源测试工具,已进行了安全检测和验证使用,保证不会给客户系统引入病毒和木马等恶意程序。
为防止渗透测试造成网络和主机的业务中断,在渗透测试中不使用含有拒绝服务的测试策略。对缓冲区溢出类的漏洞验证,不建议在生产环境中验证,而在测试环境或备份环境中验证。
对于不能接受任何可能风险的主机系统,可选择如下保守策略:
1)复制一份目标环境,包括硬件平台,操作系统,数据库管理系统,应用软件等。
2)对目标的副本进行渗透测试。
为防止在渗透测试过程中出现的异常的情况,所有被测试系统均应在被测试之前作一次完整的系统备份,以便在系统发生灾难后及时恢复。
在渗透测试过程中,如果出现被评估系统没有响应或中断的情况,应当立即停止测试工作,与客户方配合人员一起分析情况,在确定原因后,及时恢复系统,并采取必要的预防措施(比如调整测试策略)之后,确保对系统无影响,并经客户方同意之后才可继续进行。
在渗透测试实施过程中,确定不同阶段的测试人员以及客户方的配合人员,建立直接沟通的渠道,并对测试过程中出现难题的过程保持合理沟通。
在评估过程中,由于渗透测试的特殊性,用户可以要求对整体测试流程进行监控。