penetration test:渗透测试

网络渗透测试指导手册

来源: http://www.7747.net/Article/201009/75399.html 
 

什么是网络渗透测试?

渗透测试是一种最老的评估计算机系统安全性的方法。虽然渗透测试的主要目标是发现组织中网络基础架构的安全漏洞;但是它也可能有许多次要目标,包括测试组织的安全问题识别和响应能力测试员工安全知识或测试安全性政策规范等。本文手册介绍了执行一个渗透测试,渗透测试中的策略、技术方法、种类、以及标准等。 
 
执行网络渗透测试的原因
  渗透测试能够通过识别安全问题来帮助一个单位理解当前的安全状况。这使促使许
多单位开发操作规划来减少攻击或误用的威胁。
  撰写良好的渗透测试结果可以帮助管理人员建立可靠的商业案例,以便证明所增加
的安全性预算或者将安全性问题传达到高级管理层。
  安全性不是某时刻的解决方案,而是需要严格评估的一个过程。安全性措施需要进
行定期检查,才能发现新的威胁。渗透测试和公正的安全性分析可以使许多单位
重视他们最需要的内部安全资源。此外,独立的安全审计也正迅速成为获得网络
安全保险的一个要求。
  现在符合规范和法律要求也是执行业务的一个必要条件。渗透测试工具可以帮助许
多单位满足这些规范要求。
  启动一个企业电子化项目的核心目标之一是实现与战略伙伴、提供商、客户和其他
电子化相关人员的紧密协作。要实现这个目标,许多单位有时会允许合作伙伴、
提供商、B2B 交易中心、客户和其他相关人员使用可信连接方式来访问他们的网
络。一个良好执行的渗透测试和安全性审计可以帮助许多单位发现这个复杂结构
中的最脆弱链路,并保证所有连接的实体都拥有标准的安全性基线。
  当拥有安全性实践和基础架构,渗透测试会对商业措施之间的反馈实施重要的验
证,同时提供了一个以最小风险而成功实现的安全性框架。
如何执行一个渗透测试?
 
一个良好的渗透测试是什么组成的?
虽然执行一个渗透测试有许多明显的优点——执行渗透测试的价值在于它的结果。这
些结果必须是有价值的,而且对于客户来说必须是很容易理解的。有一个常见的误解是认
为渗透测试只是使用一些时髦的自动化安全工具,并处理所生成的报告。但是,成功执行
一个浸透测试并不仅仅是需要安全工具。虽然这些自动化安全测试工具在实践中扮演了重
要的角色,但是它们也是有缺点的。事实上,这些工具一直无法真正模拟一个高深攻击者
的行为。不管安全工具完成的报告有多么全面,其中总是有一些需要解释的问题。
让我们看看构成一个良好渗透测试的一些关键因素:
  建立参数:定义工作范围是执行一个成功渗透测试的第一步,也是最重要的一
步。这包括定义边界、目标和过程验证(成功条件)。
  专业人员:配备技术熟练和经验丰富的咨询人员执行测试——他们了解自己要做
什么。换句话说,专业人员与一般人员是不同的。要保证他们是:
 能胜任的
 经验丰富的
 遵守保密协议
  选择足够的测试集:手工的和自动的都会影响成功/效益之间的最佳平衡。
  遵循正确的方法:这并不是猜谜游戏。所有方面都需要规划、文档化和符合要
求。
  结果值:结果应该详细地写入文档,并且要尽力使它们能被客户所理解。不管是
技术报告还是执行总结,都需要一些注释。应用安排一些安全咨询人员/测试人
员来回复问题或解释结果。
  测试结果与建议:这是渗透测试的一个非常重要的部分。最终的报告必须清晰地
说明成果,必须将成果与潜在的风险对应。这应该会附带产生一个基于最佳安全
实践方法的修正路线图。
在我们讨论浸透测试中所使用的测试策略和技术之前,让我们先看一些可能很有用的
场景:
  建立新的办公室
不管是建立新的公司或增加新的办公点,浸透测试都有助于确定网络基础架构中的潜
在漏洞。例如,在增加新办公点时执行内部测试是非常重要的,因为它会检查网络资源的
可用性,并检查这些办公点之间传输的流量类型。
  部署新的网络基础架构
每一个新的网络基础架构都应该能模拟黑客行为进行全面的测试。当执行外部测试
(预先不太了解基础架构)来保证边界安全性时,我们也应该执行内部测试来保证网络资
源,如:服务器、存储、路由和访问设备,在边界受到攻击时仍然是足够安全的,而且基
础架构是能够抗拒任何攻击的。
  修改/升级现有的基础架构
修改是不可避免的——可能是软件、硬件或网络设计,由于需要功能改进;修复重大
缺陷和/或应用新的需求,都可能引起修改/升级。不管现有的基础架构在什么时候发生变
化,它都应该再次测试,以保证不会出现新的漏洞。必要测试的数量取决于基础架构修改
的特征和程度。细小的变化,如配置变更为特定规则,将只需要进行端口扫描来保证预期
的防火墙行为,而重大的变化,如关键设备/OS版本升级,可能就需要彻底重新测试。
  部署新应用
当基础架构进行彻底测试之后,新的应用(不管是连接 Internet 的或是在Intranet
中)在部署到生产环境之前也都必须进行安全性测试。这个测试需要在“实际的”平台上
进行,以保证这个应用只使用预定义的端口,而且代码本身也是安全的。 
  修改/升级一个现有应用
随着基本架构发生变化,本质上应用也会发生变化。细小的变化,如用户帐号修改,
都不需要测试。但是,重大的变化,包括应用功能变化,都应该彻底重新测试。
  定期重复测试
管理安全性并非易事,而公司不应该认为渗透测试就是所有安全问题的最终解决办
法。如果这样认为,那么他们只是相信了假的安全性。对敏感系统定期执行测试来保证不
会出现不按计划的变化,一直都是一个非常好的实践方法。

渗透测试有哪些策略?
 
在之前的文章中我们介绍了什么是网络渗透测试,以及如何执行一个渗透测试,本文
中我们将重点介绍渗透测试的各种策略。
根据准备实现的具体目标,我们主要有以下不同的渗透测试策略:
  外部测试策略
外部测试指的是在单位系统以外位置执行程序来攻击单位的网络边界,如Internet
或Extranet。这种测试的执行可能不会暴露有问题的环境,但也可能会完全暴露。这种测
试一般首先使用客户的公共访问信息,然后进行网络枚举,这是专门针对公司的对外服务
器或设备,如域名服务器(DNS)、电子邮件服务器、Web服务器或防火墙。
  内部测试策略
内部测试是在单位的技术环境内执行的。这种测试模拟由带有标准访问权限的不满员
工或拥有授权访客发起的内部网络攻击。它的重点是知道网络边界被入侵之后会出现的结
果,或了解授权用户在单位网络内部能够穿透哪些具体的信息资源。虽然这两种测试的结
果可能差别很大,但它们所使用的技术都比较类似。
  盲式测试策略
盲式测试策略的目标是模拟真实黑客的操作和流程。就像一个真实的攻击一样,测试
团队在发起测试之前只有少量单位信息,或者根本没有单位信息。这个浸透测试团队使用
公开的信息(如企业网站、域名注册信息、Internet 论坛、USENET和其它位置的信息)
来收集关于目标的信息来执行浸透测试。虽然盲式测试可以提供大量关于这个组织的信息
(所谓内部信息),但是这些信息之前是未知——一个盲式浸透可能会暴露这样一些问
题,如附加的Internet接入端、直接连接的网络、公开的保密/私有信息等。但是它需要
更多的时间和开销,因为测试团队需要花时间来研究测试目标。
  双盲式测试策略
双盲式测试是盲式测试策略的扩展。在这种测试中,这个组织的 IT和安全人员预先
不会得到通知或提醒,他们对于所规划的测试活动是完全“看不见的”。双盲测试是一种
非常重要的测试组件,因为它可以测试这个组织的安全监控和意外事件识别、升级和响应
过程。为了不影响这种测试的目标实现,这个组织中只有少数人会了解这个测试。通常只
有项目经理在仔细观察整个测试过程,以保证测试过程的顺利进行,同时使这个组织的意
外事件响应过程可以在达到测试目标后被关闭。
  定向测试策略
定向测试,或者所谓的明亮方法,这个测试在测试过程中同时引入了这个组织的 IT
团队和浸透测试团队。他们对于测试活动和关于测试目标及网络设计的信息是非常清晰的
理解的。当测试的目标更关注于技术设置,或者网络设计,而不是这个组织的意外事件响
应和其它运营过程,那么定向测试方法可能更加有效且更经济。与盲式测试不同,定向测
试的执行时间更短些,开销更小些,这其中唯一不同的是它可能不能完整了解一个组织安
全漏洞和响应能力。
本文中我们主要介绍了渗透测试的各种策略,接下来的文章中我们将介绍一些渗透测
试中使用的技术方法,以及它是如何在执行成功的渗透测试中发挥作用的。
渗透测试中使用哪些技术方法?
 
《渗透测试策略》中我们介绍了渗透测试的各种策略,接下来我们重点介绍一些渗透
测试中使用的技术/方法,以及它是如何在执行成功的渗透测试中发挥作用的:
  被动研究
顾名思义,被动研究是一种从公共域收集尽可能多的关于一个单位的系统配置信息的
方法,包括:
DNS (域名服务)
RIPE (Réseaux IP Européens) 
USENET (新闻组)
ARIN (美国网络地址注册管理组织)
* 被动研究一般是在外部渗透测试刚开始时采用。
  开源监控
这个服务是一种利用单位重要关键字的 Internet元数据搜索(包含网站、新闻专
线、新闻组等多目标搜索)的相关技术。数据收集后,发现的问题会向单位突出显示。这
有助于确定单位的保密信息是否泄漏,或者它们之间是否发生电子会话。这使得一个单位
能够采取必要的手段保证信息的保密性和完整性。
  网络映射和OS识别
网络配置虚拟化是渗透测试的一个重要部分。网络映射可用于创建测试网络的配置视
图。所创建的网络图可以标明路由器、防火墙、Web 服务器和其它更设备的逻辑位置和 IP
地址。
此外,这种检查有助于确定或“标识”操作系统。被动研究和诸如ping、
traceroute和 nmap 等网络工具的测试结果,结合在一起可以帮助创建相当准确的网络
图。
网络映射的一个扩展是端口扫描(Port Scanning)。这个技术是为了确定目标主机
的可用服务类型。扫描结果能够发现一些重要的信息,如计算机的功能(它是否是 Web 服
务器、邮件服务器等),以及发现可能有严重安全风险的端口,如telnet。端口扫描应该
包含许多单独的测试,这其中包括:
TCP(Transmission Control Protocol)扫描
连接扫描
SYN(或 half open)扫描
RST(或Xmas-tree)扫描
UDP (User Datagram Protocol)和ICMP (Internet Control Message Protocol)扫
描。nmap等工具可以执行此类扫描。
RPC (Remote Procedure Call)所使用的动态端口应该使用诸如 RPCinfo等工具进行
扫描。
  电子欺骗
电子欺骗指是使用其他人的 Internet 地址创建 TCP/IP 数据包,然后将相同的数据包
发送到目标计算机,使它认为数据包来自一个可信源。这是一种在一台计算机模仿另一台
计算机的操作。路由器是使用“目标 IP”地址来通过 Internet 转发数据包的,但是它会
忽略“源IP”地址。目标主机给源地址发送响应时只使用源 IP地址。这个技术可用在内
部和外部的渗透测试中,用来访问遭受入侵后只对某些特定计算机产生响应的一些计算
机。这可能导致一些高度机密信息被发送到未授权的系统上。IP欺骗也是许多不需要接收
响应(盲式欺骗)的网络攻击的主要部分。
  网络嗅探
嗅探是用来捕捉网络中传输的数据的技术。嗅探是一个重要的信息收集技术,它能够
捕获特定的信息,如密码;如果需要的话,它也能够捕获特定计算机之间的完整会话。要
执行嗅探,计算机的网卡需要设置为混合模式,这样它才能够捕获网络中发送的所有数
据。
嗅探经常用在内部测试中,这时处理混合模式的嗅探器或计算机是直接连接到网络上
的,从而能够捕获大量的信息。嗅探可以通过许多商业工具执行,如 Ethereal、Network
Associates SnifferPro和 Network Instruments Observer。
  木马攻击
木马一般是通过电子邮件附件或 IM聊天工具在网络中传播的一些恶意程序。这些程
序是秘密运行的,并在用户不知情的情况下安装到客户计算机上。一旦被安装,它们就可
能打开远程控制通道给攻击者或者盗取信息。渗透测试目的是尝试将专门准备的木马程序
发送到网络中。
  暴力攻击
暴力攻击指的是尝试使用大量的字母组合和穷举试错法来查找合法身份认证信息。这
种耗费时间的方法的根本目标是要获得目标系统的访问权限。暴力攻击可能会造成系统过
载,也可能使它无法响应合法的请求。此外,如果系统启用了帐号锁定规则,那么暴力攻
击可能会造成合法用户帐号的关闭。
  漏洞扫描/分析
漏洞扫描/分析是针对目标区域的单位网络基础架构进行穷举检查,以确定它们当前
的状态。扫描的目标范围可能是单个系统或一些关键系统,也可能是整个网络。它通常是
使用自动化工具执行的,这些工具能够测试系统数据库已知漏洞方面的大量潜在弱点,并
报告潜在的安全问题。虽然它们不能主动防御攻击,但是许多扫描程序都提供了附加的工
具帮助修复所发现的漏洞。一些通常使用的漏洞扫描程序包括:开源 Nessus Project 的
Nessus、ISS Internet Scanner、GFI Software的 GFI LANguard Network Security
Scanner、eEye Digital Security的Retina Network Security Scanner、BindView RMS
漏洞管理解决方案和Network Associates CyberCop。
  场景分析
当漏洞扫描完成并发现问题,下一步就是要执行场景分析。这个测试的目标是利用所
识别的安全漏洞执行一个系统侵入以产生可测量的后果,如盗取信息、盗取用户名和密码
或篡改系统。这种级别的测试可以保证不产生误报,并产生更精准的漏洞风险评估。目前
有许多的工具可以协助探索测试,虽然这个过程通常都是手工进行的。搜索测试往往是渗
透测试的最终环节。
渗透测试的种类介绍
 
渗透测试是完全依赖于操作范围的——像入侵程度就是与范围直接关联的。例如,有
时在一个特定系统中发现漏洞就足够了。因此,基于约定的范围来选择正确的渗透测试对
于安全人员来说是非常重要的。本文将介绍不同的渗透测试方法。

渗透测试的种类
拒绝服务(DoS)测试
拒绝服务测试指的是尝试通过耗尽测试目标的资源来发现系统的特定弱点,这种方法
会导致系统停止对合法请求的响应。这种测试可以使用自动化工具或手动执行。各种类型
的DoS可以概括地分成软件探索和洪水攻击。渗透测试应该包含多大程度的拒绝服务测试
取决于信息系统及相关过程活动的持续相对重要性和连续可用性。拒绝服务可以采用许多
格式;以下所列是一些对测试而言比较重要的格式:
•资源过载——这些攻击的目的是耗尽攻击目标的资源(如,内存),从而使之停止
响应。
•洪水攻击——是指通过发送超大数量的网络请求来达到耗尽的目的。这种攻击可以
通过以下方式实现:
ICMP(Internet Control Message Protocol),即所谓的“smurf”攻击;
UDP (User Datagram Protocol),即所谓的“fraggle”攻击。
•半开放SYN 攻击——是指在目标系统局部开放大量的 TCP连接,这样就无法再启动
合法连接。
•编外攻击——这些攻击试图通过破坏 IP报头标准来使目标系统崩溃:
超大数据包(ping of death)——数据报头显示数据包所包含大于实际大小的数
据。
分片(泪滴攻击)——发送很短的重叠分片数据包(数据包片断)。
IP 源地址欺骗(落地攻击)——导致计算机创建连接自己的 TCP连接。
畸形 UDP数据报头(UDP炸弹)——UDP报头显示了不正确的长度。
应用安全性测试
随着企业电子化的发展,核心业务功能现在越来越多地通过Web应用实现。虽然连接
Internet的应用使一个组织实现了全球客户访问,但是给予合作伙伴访问内部网的权限会
带来新的安全漏洞,即使使用了防火墙和其它监控系统也一样,安全性也可能受到威胁,
因为流量是必须通过防火墙的。应用安全性测试的目标是评估对应用的控制(电子商务服
务器、在线财务应用、分布式应用和遗留系统的Internet前端)和它的处理流。评估的
方面可能包括应用是否使用加密方法来保护信息的保密性和完整性,用户是如何验证的,
Internet用户会话与主机应用的完整性,以及Cookie 的使用——存储在客户计算机上由
Web服务器应用所使用的一块数据。

让我们了解应用测试的一些重要组件:
代码检查:代码检查指的是分析所有应用代码来保证它们不包含任何可被入侵者利用
来攻击应用的敏感信息。例如:公共应用代码可能会包含一些测试注释,其中的名称或明
文密码可能会给入侵者提供大量关于这个应用的信息。
授权测试:指是测试负责初始化和维护用户会话的系统。它要求测试:
登录的输入验证——无效字符或过长的输入可能会产生意外结果;
安全性——Cookie 可能被盗取,而合法会话可能会被未授权的用户使用;
帐号锁定测试——测试应用中设置的超时和入侵锁定参数,保证合法会话不会被劫
持。
这个测试是用来发现登录系统是否可能被迫允许未授权访问。这个测试也将使用相同
的技术来发现系统是否容易受到拒绝服务攻击的影响。
功能测试:这指的是测试负责交付用户功能的系统。这个测试包括:
输入验证——无效字符、特殊 URL或者过长的输入都可能会产生意外的结果;
事务测试——保证应用执行符合规范,并且不允许用户滥用系统。
战争拨号
战争拨号是一种有组织地呼叫一系列电话号码来试图发现一个组织网络中可能存在的
调制解调器、远程访问设备和计算机的维护连接。通过使用战争拨号方法,黑客可能能够
定位到组织中易受攻击的编外入口,从而操作它们来访问网络。IT人员忽视了电话网络,
作为一个可能的主要接入端,它也是越来越多遭受此类攻击的主要因素之一。例如:在关
键的网络服务器、路由器和其它设备上打开调制解调器可能会不小心将组织网络的入口暴
露出去。在这个测试中,一旦调制解调或其它连接设备被发现,那么就应该使用分析和搜
索技术来评估这个连接是否能够用于入侵这个单位的信息系统网络。
无线网络的渗透测试
随着无线网络的出现,不管是在企业网络基础架构内还是在家里,都会造成更多的安
全漏洞,而且它们比有线网络更容易受到攻击。因为只有边界无线网络才知道它们的信
号,所以黑客更容易以“驾车”或沿办公楼四处走动的方式来使用无线网络设备发现可用
的无线网络——这就是所谓的“战争驾驶”。一旦发现开放的无线接入端,他们就会标记
下来,所以最后他就能够得到一个带有接入端属性(SSID、WEP、MAC 等)的无线网络图。
无线网络测试的目标是确定一个组织的无线网络的设计、实现或运营中的安全缺陷或漏
洞。
社会工程
这种方法通常与盲式或双盲式测试一起使用,社会工程指的是搜索以收集信息为目的
的人类本性(最主要是人的信任感和帮助姿态)的技术。这种方法是通过与单位员工、提
供商和合同方的社会互动来收集信息和侵入这个组织的系统。这些技术可能包括:
非面对面的方式:假装作为 IT 部门的帮助台代表,要求用户提供他们的用户帐号和
密码信息;
面对面或高级社交工程的方式:假装为内部员工而获得可能带有敏感信息的受限区域
的物理访问;拦截邮件、快件或者垃圾(大型垃圾装卸车)来搜索打印材料上的敏感信
息。
社会工程活动可以测试技术要求较低但同等重要的安全组件:单位的人员能够帮助或
阻止对信息和信息系统的未授权访问。这也有助于确定员工之间安全知识的水平。
渗透测试的方法与标准
 
成功执行渗透测试的其一个主要因素是底层的方法。缺少正式的方法意味着没有一致
性——我很确定这一点——你一定不希望成为那个受邀却无视测试人员漫无目的地操作的
人。虽然渗透测试人员需要有适合的专业技术,但也不能缺少正确的方法。换句话说,一
个正式的方法应该能够提供一个用于构建完整且准确的渗透测试的严格框架,但是不能够
有限制——它应该允许测试人员充分发挥各自的聪明才智。
由 Pete Herzog提出的Open Source Security Testing Methodology Manual
(OSSTMM)已经成为执行渗透测试和获得安全基准的事实方法。根据Pete Herzog 的观点,
“OSSTMM的主要目标是实现透明度。它实现了对那些不具备充足安全配置和政策的人的透
明度。它实现了对那些没有执行足够安全性和渗透测试的人的透明度。它实现了对那些已
经很缺乏安全预算的牺牲者仍然尽力压榨其每一分预算的无良安全供应商的透明度;以及
对那些回避商业价值而炒作法律规范、网络破坏和黑客等威胁的人的透明度。OSSTMM的渗
透测试范畴包括从初始需求分析到生成报告的整个风险评估过程。”这个测试方法包含了
六个方面:
•信息安全性
•过程安全性
•Internet 技术安全性
•通信安全性
•无线安全性
•物理安全性
OSSTMM关注测试项的技术细节,在安全必测试之前、期间和之后需要做什么,以及
如何界定结果。针对国际化最初实践方法、法律、规章和道德问题的新测试都会定期增加
和更新。
National Institute of Standards and Technology (NIST)在 Special
Publication 800-42, Guideline on Network Security Testing中讨论了渗透测试。
NIST的方法虽然不及 OSSTMM 全面,但是它更可能被管理部门所接受。
另一个需要注意的方面是渗透测试服务提供商。每一个单位在渗透测试过程中最担心
的一个问题是敏感信息可能通过错误的路径。因此,收集尽可能多关于公司的信息变得非
常重要(如他们的技术能力、证书、经验、方法和所使用的工具),并且要保证他们是专
业人员。此外,有一些专业的官方证书可以表明公司的可信赖程度及其与行业最佳实践的
一致性。

渗透测试标准
让我们看一些现有的标准和准则:
信息系统审计标准(ISACA):ISACA 是在1967年成立的,并且成为领先的全球性信
息管理、控制、安全和审计专家组织。它的 IS审计和 IS 控制标准得到了世界范围的实践
应用,而且它的研究能精确定位威胁它组成成分的专业问题。CISA,即Certified
Information Systems Auditor,是ISACA的基础认证。
CHECK:CESG IT Health Check 模式是专门用于保证敏感管理网络和那些组成 GSI
(Government Secure Intranet)和CNI(Critical National Infrastructure)的组件
是安全的且经过较高级别的测试。这个方法的目标是发现 IT系统和网络中发现可能威胁
IT系统信息的保密性、完整性和可用性的漏洞。只有在需要对 HMG 或相关部分测试时才需
要CHECK咨询公司的参与,并且他们也要满足以上要求。CHECK 已经成了渗透测试及UK 内
渗透测试的事实标准。属于 CHECK的公司必须拥有明确安全性且通过 CESG Hacking
Assault Course的员工。然而,除了 UK Government 协会,下面所介绍的开源方法也是可
行且全面替代方法。
OSSTMM:Open Source Security Testing Methodology Manual 的目标是为Internet
安全测试创建一个标准。它将构成这种测试的综合基线,保证执行彻底和全面的渗透测
试。这能够使客户确定与其它组织问题无关的技术评估级别,如渗透测试提供者的企业资
料。
OWASP:Open Web Application Security Project (OWASP)是一个开源社区项目,它
通过开发软件工具和知识文档来帮助人员实现 Web应用和 Web 服务的安全性。OWASP是系
统架构师、开发人员、供应商、用户和安全专业人员在设计、开发、部署和测试 Web应用
和Web服务时可以使用的开源参考点。总而言之,Open Web Application Security
Project 的目标是帮助所有人创建更安全的 Web应用和 Web服务。
结论
安全性是连续的,而非绝对的。渗透测试的价值在于它产生的结果——这也就是回答
“为什么”这样一个大问题的答案。一个成功的渗透测试不只是能发现某一个特殊缺点,
它还能在一开始就确定产生漏洞的过程错误。修复或修补所探测的漏洞并不意味着你就不
再有安全问题了,或者高枕无忧了——这只是无限循环过程的开头而已。
CRUX:一个渗透测试并不能保证绝对安全——它只是实现安全性的一个措施。所以,
“绝不要对安全性产生误判”。
摘自红色黑客联盟(www.7747.net) 原文:http://www.7747.net/Article/201009/75399.html

posted @ 2011-03-14 11:11  y0umer  阅读(367)  评论(0编辑  收藏  举报