URL:http://hi.baidu.com/ciqing_s/blog/item/98a2e55f8264a4c59d820418.html
一、渗透测试概念
渗透测试 (penetration test)并没有一个标准的定义,国外一些安全组织达成共识的通用说法是:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。
渗透测试还具有的两个显著特点是:
渗透测试是一个渐进的并且逐步深入的过程。
渗透测试是选择不影响业务系统正常运行的攻击方法进行的测试。
渗透测试完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节,能直观的让管理员知道自己网络所面临的问题。所以渗透测试是安全评估的方法之一。
TIPS:安全评估通常包括工具评估、人工评估、顾问访谈、问卷调查、应用评估、管理评估、网络架构评估、渗透测试等。
渗透测试与其他评估方法的区别:
通常评估方法是根据已知信息资产或其他被评估对象,去发现所有相关的安全问题。渗透测试是根据已知可利用的安全漏洞,去发现是否存在相应的信息资产,通常评估方法对评估结果更具有全面性,渗透测试则更注重安全漏洞的严重性。
渗透测试一方面可以从攻击者的角度,检验业务系统的安全防护措施是否有效,各项安全策略是否得到贯彻落实;另一方面可以将潜在的安全风险以真实事件的方式凸现出来,从而有助于提高相关人员对安全问题的认识水平。渗透测试结束后,立即进行安全加固,解决测试发现的安全问题,从而有效地防止真实安全事件的发生。
二、渗透测试分类
根据渗透方法和视角分类,渗透测试可以分为——
A、黑箱测试“zero-knowledge testing”/(黑盒子Black Box)
渗透者完全处于对系统一无所知的状态。除了被测试目标的已知公开信息外,不提供任何其他信息。一般只从组织的外部进行渗透测试。
通常,这种类型的测试,最初的信息获取来自DNS、Web、Email及各种公开对外的服务器。
B、白盒测试
测试者可以通过正常渠道向被测单位取得各种资料,包括网络拓扑、员工资料甚至网站或其他程序的代码片段,也能与单位其他员工进行面对面的沟通。通常包括从组织外部和从组织内部两种地点进行渗透测试。这类测试的目的是模拟企业内部雇员的越权操作。
C、灰盒子(Gray Box)
介于以上两者之间
较为隐秘的进行测试。通常,接受渗透测试的单位网络管理部门会收到通知:在某些时间段进行测试。因此能够检测网络中出现的变化。
但在隐秘测试中,被测单位也仅有极少数人知晓测试的存在,因此能够有效地检验单位中的信息安全事件监控、响应、恢复做得是否到位。
根据渗透目标分类,渗透测试又可以分为——
1)主机操作系统渗透
windows、solaris、aix、linux、sco、sgi
2)数据库系统渗透
mssql、oracle、mysql、informix、sybase
3)应用系统渗透
渗透目标提供的各种应用,如asp、cgi、jsp、php等组成的www应用
4)网络设备渗透
各种防火墙、入侵检测系统、网络设备
三、渗透测试过程
信息收集、分析→制订渗透方案并实施→前段信息汇总、分析→提升权限、内部渗透→渗透结果总结→输出渗透测试报告→提出安全解决建议
TIPS:
时间选择
为减轻渗透测试对网络和主机的影响,渗透测试时间尽量安排在业务量不大的时段和晚上
策略选择
为防止渗透测试造成网络和主机的业务中断,在渗透测试中不使用含有拒绝服务的测试策略
对于不能接受任何可能风险的主机系统,如银行票据核查系统、电力调度系统等,可选择如下保守策略:
复制一份目标环境,包括硬件平台、操作系统、数据库管理系统、应用软件等。对目标的副本进行渗透测试
授权渗透测试的监测手段
在评估过程中,由于渗透测试的特殊性,用户可以要求对整体测试流程进行监控
测试方自控:由渗透测试方对本次渗透测试过程中的三方面数据进行完整记录:操作、响应、分析,最终形成完整有效的渗透测试报告提交给用户
用户监控:用于监控有4种形式
全程监控:采用类似ethereal的嗅探软件进行全程抓包嗅探
择要监控:对扫描过程不进行录制,仅仅在安全工程师分析数据后,准备发起渗透前才开启软件进行嗅探
主机监控:仅监控受测主机的存活状态,避免意外情况发生
指定攻击源:用户指定由特定攻击源地址进行攻击,该源地址的主机由用户进行进程、网络连接、数据传输等多方监控
制定实施方案
实施方案应当由测试方与客户之间进行沟通协商。一开始测试方提供一份简单的问卷调查了解客户对测试的基本接收情况。内容包括但不限于如下:
目标系统介绍、重点保护对象及特性。
是否允许数据破坏?
是否允许阻断业务正常运行?
测试之前是否应当知会相关部门接口人?
接入方式?外网和内网?
测试是发现问题就算成功,还是尽可能的发现多的问题?
渗透过程是否需要考虑社会工程?
在得到客户反馈后,由测试方书写实施方案初稿并提交给客户,由客户进行审核。在审核完成后,客户应当对测试方进行书面委托授权。这里,两部分文档分别应当包含实施方案部分和书面委托授权部分:
下面串联讲一讲各知识点——
1)不同网段/vlan之间的渗透
从某内/外部网段,尝试对另一网段/vlan进行渗透。
通常可能用到的技术包括:对网络设备的远程攻击;对防火墙的远程攻击或规则探测、规避尝试。
信息的收集和分析伴随着每一个渗透测试步骤,每一个步骤又有三个组成部分:操作、响应和结果分析。
2)端口扫描
通过对目标地址的tcp/udp端口扫描,确定其所开放的服务的数量和类型,这是所有渗透测试的基础。
通过端口扫描,可以基本确定一个系统的基本信息,结合安全工程师的经验可以确定其可能存在,以及被利用的安全弱点,为进行深层次的渗透提供依据。
3)远程溢出
这是当前出现的频率最高、威胁最严重,同时又是最容易实现的一种渗透方法,一个具有一般网络知识的入侵者就可以在很短的时间内利用现成的工具实现远程溢出攻击。
对于防火墙内的系统同样存在这样的风险,只要对跨接防火墙内外的一台主机攻击成功,那么通过这台主机对防火墙内的主机进行攻击就易如反掌。
4)口令猜测
口令猜测也是一种出现概率很高的风险,几乎不需要任何攻击工具,利用一个简单的暴力攻击程序和一个比较完善的字典,就可以猜测口令。
对一个系统账号的猜测通常包括两个方面:首先是对用户名的猜测,其次是对密码的猜测。
5)本地溢出
指在拥有了一个普通用户的账号之后,通过一段特殊的指令代码获得管理员权限的方法。
前提:首先要获得一个普通用户密码。也就是说由于导致本地溢出的一个关键条件是设置不当的密码策略。多年的实践证明,在经过前期的口令猜测阶段获取的普通账号登录系统之后,对系统实施本地溢出攻击,就能获取不进行主动安全防御的系统的控制管理权限。
6)脚本及应用测试
专门针对web及数据库服务器进行。据最新技术统计,脚本安全弱点为当前web系统,尤其是存在动态内容的web系统比较严重的 安全弱点之一。
利用脚本相关弱点轻则可以获取系统其他目录的访问权限,重则将有可能取得系统的控制权限。因此对于含有动态页面的web、数据库等系统,web脚本及应用测试将是必不可少的一个环节。
在web脚本及应用测试中,可能需要检查的部份包括:
◆检查应用系统架构,防止用户绕过系统直接修改数据库;
◆检查身份认证模块,用以防止非法用户绕过身份认证;
◆检查数据库接口模块,用以防止用户获取系统权限;
◆检查文件接口模块,防止用户获取系统文件;
◆检查其他安全威胁;
7)无线测试
中国的无线网络还处于建设时期,但是由于无线网络的部署简易,在一些大城市的普及率已经很高了。北京和上海的商务区至少80%的地方都可以找到接入点。
通过对无线网络的测试,可以判断企业局域网安全性,已经成为越来越重要的渗透测试环节。
除了上述的测试手段外,还有一些可能会在渗透测试过程中使用的技术,包括:社交工程学、拒绝服务攻击,以及中间人攻击。
8)信息收集
网络信息收集:在这一部还不会直接对被测目标进行扫描,应当先从网络上搜索一些相关信息,包括Google Hacking, Whois查询, DNS等信息(如果考虑进行社会工程学的话,这里还可以相应从邮件列表/新闻组中获取目标系统中一些边缘信息如内部员工帐号组成,身份识别方式,邮件联系 地址等)。
目标系统信息收集:通过上面一步,我们应当可以简单的描绘出目标系统的网络结构,如公司网络所在区域,子公司IP地址分布,VPN接入地址等。这里特别要注意一些比较偏门的 HOST名称地址,如一些backup开头或者temp开关的域名很可能就是一台备份服务器,其安全性很可能做的不够。从获取的地址列表中进行系统判断,了解其组织架构及操作系统使用情况。最常用的方法的是目标所有IP网段扫描。
端口/服务信息收集:这一部分已经可以开始直接的扫描操作
9)漏洞扫描
这一步主要针对具体系统目标进行。如通过第一步的信息收集,已经得到了目标系统的IP地址分布及对应的域名,并且我们已经通过一些分析过滤出少许的几个攻击目标,这时,我们就可以针对它们进行有针对性的漏洞扫描。这里有几个方面可以进行:
针对系统层面的工具有:ISS, Nessus, SSS, Retina, 天镜, 极光
针对WEB应用层面的工具有:AppScan, Acunetix Web Vulnerability Scanner, WebInspect, Nstalker
针对数据库的工具有:ShadowDatabaseScanner, NGSSQuirreL
针对VOIP方面的工具有:PROTOS c07 sip(在测试中直接用这个工具轰等于找死)以及c07 h225, Sivus, sipsak等。
事实上,每个渗透测试团队或多或少都会有自己的测试工具包,在漏洞扫描这一块针对具体应用的工具也比较个性化。
10)漏洞利用
有时候,通过服务/应用扫描后,我们可以跳过漏洞扫描部分,直接到漏洞利用。因为很多情况下我们根据目标服务/应用的版本就可以到一些安全网站上获取针对该目标系统的漏洞利用代码,如milw0rm, securityfocus,packetstormsecurity等网站,上面都对应有搜索模块。实在没有,我们也可以尝试在GOOGLE上搜索“应用名称 exploit”、“应用名称 vulnerability”等关键字。
针对系统方面:metasploit
针对数据库方面:xoxo
针对Web服务器方面的工具有:xoxo,明小子
11)Web安全测试
Information Gathering:也就是一般的信息泄漏,包括异常情况下的路径泄漏、文件归档查找等
Business logic testing:业务逻辑处理攻击,很多情况下用于进行业务绕过或者欺骗等等
Authentication Testing:有无验证码、有无次数限制等,总之就是看能不能暴力破解或者说容不容易通过认证,比较直接的就是“默认口令”或者弱口令了
Session Management Testing:会话管理攻击在COOKIE携带认证信息时最有效
Data Validation Testing:数据验证最好理解了,就是SQL Injection和Cross Site Script等等
12)Web测试的工具
目前网上能够找到许多能够用于进行Web测试的工具,根据不同的功能分主要有:
1.枚举(Enumeration): DirBuster, http-dir-enum, wget
2.基于代理测试类工具:paros, webscarab, Burp Suite
针对WebService测试的部分有一些尚不是很成熟的工具,如:wsbang,wschess,wsmap,wsdigger,wsfuzzer
这一部分值得一提的是,很多渗透测试团队都有着自己的测试工具甚至是0DAY代码,最常见的是SQL注入工具,现网开发的注入工具(如NBSI等) 目前都是针对中小企业或者是个人站点/数据库进行的,针对大型目标系统使用的一些相对比较偏门的数据库系统(如INFORMIX,DB2)等,基本上还不涉及或者说还不够深入。这时各渗透测试团队就开发了满足自身使用习惯的测试工具。
针对无线环境的攻击有:WifiZoo
13)权限提升
在前面的一些工作中,你或许已经得到了一些控制权限,但是对于进一步攻击来说却还是不够。例如:你可能很容易的能够获取Oracle数据库的访问权 限,或者是得到了UNIX(AIX,HP-UX,SUNOS)的一个基本账号权限,但是当你想进行进一步的渗透测试的时候问题就来了。你发现你没有足够的 权限打开一些密码存储文件、你没有办法安装一个SNIFFER、你甚至没有权限执行一些很基本的命令。这时候你自然而然的就会想到权限提升这个途径了。
目前一些企业对于补丁管理是存在很大一部分问题的,他们可能压根就没有想过对一些服务器或者应用进行补丁更新,或者是延时更新。这时候就是渗透测试人员的好机会了。经验之谈:有一般权限的Oracle账号或者AIX账号基本上等于root,因为这就是现实生活
14)密码破解
有时候,目标系统任何方面的配置都是无懈可击的,但是并不是说就完全没办法进入。很多情况下,往往破坏力最大的攻击起源于最小的弱点,例如弱口令、目 录列表、SQL注入绕过论证等等。所以说,对于一些专门的安全技术研究人员来说,这一块意义不大,但是对于一个渗透测试工程师来说,这一步骤是有必要而且绝大部分情况下是必须的。
目前网络中有一种资源被利用的很广泛,那就是rainbow table技术,说白了也就是一个HASH对应表,有一些网站提供了该种服务,对外宣称存储空间大于多少G,像rainbowcrack更是对外宣称其数据量已经大于1.3T 囧
15)日志清除
这里不展开讲。
进一步渗透
攻入了DMZ区一般情况下我们也不会获取多少用价值的信息。为了进一步巩固战果,我们需要进行进一步的内网渗透。到这一步就真的算是无所不用其及。 最常用且最有效的方式就是Sniff抓包(可以加上ARP欺骗)。当然,最简单的你可以翻翻已入侵机器上的一些文件,很可能就包含了你需要的一些连接帐 号。比如说你入侵了一台Web服务器,那么绝大部分情况下你可以在页面的代码或者某个配置文件中找到连接数据库的帐号。你也可以打开一些日志文件看一看。
除此之外,你可以直接回到第二步漏洞扫描来进行。
四、生成报告
生成的报告中应当包含:
1.薄弱点列表清单(按照严重等级排序)
2.薄弱点详细描述(利用方法)
3.解决方法建议
4.参与人员/测试时间/内网/外网
5、测试过程中的风险及规避
渗透测试利用网络安全扫描器、专用安全测试工具和富有经验的安全工程师的人工经验对网络中的核心服务器及重要的网络设备,包括服务器、网络设备、防火墙等进行非破坏性质的模拟黑客攻击,目的是侵入系统并获取机密信息并将入侵的过程和细节产生报告给用户。
渗透测试和工具扫描可以很好的互相补充。工具扫描具有很好的效率和速度,但是存在一定的误报率和漏报率,并且不能发现高层次、复杂、并且相互关联的安全 问题;渗透测试需要投入的人力资源较大、对测试者的专业技能要求很高(渗透测试报告的价值直接依赖于测试者的专业技能),但是非常准确,可以发现逻辑性更强、更深层次的弱点。
当具备渗透测试攻击经验的人们站到系统管理员的角度,要保障一个大网的安全时,我们会发现,需要关注的问题是完全不同的:从攻方的视角看,是“攻其一点,不及其余”,只要找到一点漏洞,就有可能撕开整条战线;但从守方的视角看,却发现往往“千里之堤,毁于蚁穴”。因此,需要有好的理论指引,从技术到管理都注重安全,才能使网络固若金汤
评论关闭。